おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

ウェブサイトの静的と動的

GitHubレポジトリのブログ更新

久しぶりにレポジトリ・ブログの更新をしました。

このブログは作ってはみたもののあまり更新せずにいました。 実はJekyllを使ったサイトです。 このサイトを作った頃はまだJekyllがよく分かってなくて、あまり深入りせずにいました。 今はJekyllの理解が深まったので改めてこのサイトを手直ししようと思ったのです。

リニューアルされたサイトは日本語と英語の両方が使えるサイトになっているのが特徴です。 ただJekyllが静的なサイト・ジェネレータなので動的なサイトのようにユーザアクセス時点の言語要求によって言語を選択することはできません。 特にブログの部分のパジネーションが難しいのです。 それで、ブログはパジネーション無しで日本語の投稿と英語の投稿が別々に表示される形になっています。

静的と動的

言語の選択に対して、そのサイトが静的か動的かが実装に関わるので、改めて「静的と動的」について考えてみました。

静的なサイトというのはそのウェブサイトにHTMLファイルが配置されていて、それをブラウザがアクセスします。 画面の遷移はリンクを通してリソースのファイルを移動することによって行われます。

動的なサイトの場合はサイトにファイルがあるわけではなくて、ブラウザからのリクエストがあった時にサーバー内のプログラムが動き始め、Webページのデータを作り出して送ります。 ですから最初からページが出来ているわけではなくて、リクエストに応じて作るわけで、非常に柔軟に内容を作ることができるわけです。 しかもページの内容を決めるのが、ブラウザとのインタラクション時点というのが強みです。 ちょうど、プログラム言語のコンパイラインタプリタの違いに似ています。

動的なサイトが日本語と英語のページ切り換えをするのはサーバ側のプログラムなので、様々な方法が可能です。 静的なウェブサイトの場合はそうはいかないので、予め日本語のページと英語のページを用意しておくしかありません。

Jekyllにおけるパラメータ処理の質問をネットで見かけますが、静的サイトでブラウザとのインタラクション時の処理はできません。 (「https://・・・・/somepage.html?japanese」のようなクエスチョンマーク以下をパラメータという) こういう混乱が起こるのは「静的と動的」の理解が足りないのです。 無理にやるとしたら、Javascriptを使ってブラウザの内部で処理するしか方法は無いと思います。

静的なサイトの安全性

動的ページはユーザから送られてくるデータに対応できますので、例えばユーザー名やパスワードをサーバに登録することができます。 それに対して静的なページではユーザとのインタラクションの段階ではプログラムは全く動いていませんので(Jekyllはサイト作成時に動くだけです)、ユーザー名やパスワードの処理はできないのです。 静的なページにはログインとかログアウトはありません。

その代わり静的なサイトでは、悪質なユーザがどんなに手のこんだデータを送ってもサーバに残りませんから、安全性は高いわけです。 それに、動的サイトで一般ユーザが投稿できるブログでは、投稿内容のルール(例えば犯罪につながるような投稿禁止)が重要ですが、静的サイトでは内容を作るのは自分しかいないのでルールは必要ありません。

静的と動的のミックス

静的と動的は概念上の問題なので、実装上は両者をミックスすることが可能です。

例えばコメント機能を動的サイトで作り、静的サイトからそのコメント機能へのリンクを貼っておきます。 ユーザからの投稿は動的サイトに記録されますから、その記録を静的サイトからリンクして見られるようにすれば良いのです。 実際GitHub Pagesでブログを作っている人の中には、そういうことをしている人がいるようです。

動的なサイトに興味のある人は

動的なサイトに興味がある人はrailsを使うと良いと思います。 長い間開発が続いていて、信頼できるフレームワークです。 ただ、Jekyllよりは学習に時間がかかると思います。 以前ブログにRailsの学習について記事にしたので、参考にしてください。