「第3回初心者向けPHP講座」の記録 〜クライアントサイド、サーバサイド〜
第3回は10/24に行われました。30分以上使って確認テストを最初に行ったため、本編は今までと比べると少々軽めになりました。
ネイティブコードとバイトコード(中間コード)
コンパイル言語ではソースコードのコンパイルが必要だ(用語集参照)。そんなコンパイル言語の中でも、ネイティブコードを生成するものと、バイトコード(中間コード)を生成するものがある。
動作しているモデルを示すと下図の様になる。
バイトコードはOS上で動作するVirtualMachine(VM:仮想マシン)で動作する。そのため、各OS個別にはコンパイルがいらず、VMさえあればどんな環境でも動かす事が出来る(実際にはインフラ的な他の要素もあるので簡単にはいかないが・・・)。Java等のVM上で動作する言語なら、OSが変わっても大丈夫だと言うことだ。
逆にネイティブコードを生成する言語は、各OS、CPU専用のコンパイルが必要で、それぞれに専用のコンパイラが存在する。ソースコードの変更なしでそのまま移植できるとは限らない。
サーバサイドとクライアントサイド
端的に言えば、「プログラムが動作している場所はどこ?」という話だ。ユーザ観点ならばあまり意識する必要のない話だ。しかし、PHPとはいえ何かしらプログラム作成をするのであれば、とくにWebアプリケーションの場合、重要な概念である。
つまり、クライアントサイド(Javascriptが多い)とサーバサイド(今回の場合はPHP)を連携させ、どこでどう処理しているかを意識していく必要がある。
以前紹介したものと同様の図だが、下図を見て欲しい。
PHPやJava等で構築したWebアプリケーションの場合、上図におけるAPサーバ上でプログラムが動作し、クライアントへ処理結果を返している。しかしHTTPプロトコルの制約上、
「ボタン押下等でクライアントからリクエストを送る
→サーバが受け取る
→レスポンスがクライアントに帰ってくる
→クライアントに表示される」
という流れからは脱却できない。そのため、WebアプリケーションでよりリッチなUI(UserInterface:画面等の見た目)を実現するためには、クライアントサイドでの処理を行う(クライアント上でプログラムが動作する)事が多い。
クライアントサイドとサーバサイドで別々な処理を行い、役割分担を行う。クライアントは主に見た目に関わる簡易的な処理(画像クリックで特定の処理を行うetc)、サーバサイドはバックグラウンドにデータを持っていたりするので、その処理も含めた全般的な処理を行う。
Webアプリケーションとしては、クライアントサイドとサーバサイドの両方があって成り立っている。昨今の(GoogleMapをはじめとする)Ajaxは特にクライアント処理が重要である。
Javascript
Javaと混同されがちなJavascriptだが、クライアントのWebブラウザで動作するオブジェクト指向のスクリプト言語である。スクリプト言語なのでコンパイル要らずで、HTMLのソース内に記述すればそのままブラウザが解釈し、ブラウザ内のJavascript動作エンジンで処理を行う。
厳密な細かい動作はブラウザ毎によって仕様が異なり、Javascriptを書く際は、クロスブラウザ対応(複数のWebブラウザでも同様に動作させる)が必要になる場合が多い。
前述のAjaxの根幹となる技術で、自由に使えるライブラリ(固定の処理を集めたプログラム群)がたくさん公開されている。Javascriptを使わずともWebアプリケーションは構築出来るが、簡易にクライアントサイドプログラミングを行えるため、よく使われている。
cookie(テキスト P156〜)
cookie(クッキー)とは、Webブラウザがクライアントに保持するメモ情報の置き場として使われる。ブラウザを通して読み書きを行う事が出来る。ドメイン、有効期限、スコープ(有効範囲)が設定出来る。
クッキーはログイン情報の保持やショッピングカートによく使われる。ログインが必要なWebサイトの場合、一定期間内なら再度そのサイトにアクセスしても再ログインが必要なく、ログイン状態のままである事があるだろう。
その状態でも、別なPCで同じサイトにアクセスしてもログインが必要なのは、別PCにはログイン状態を保持するcookieがないからである。
ただし、セキュリティが求められる場面では、スコープや有効期限をより狭く設定し、セキュリティ強度を確保する。たとえば、「ブラウザを開いている間だけ有効なcookie」という様に設定すれば、その後同じPCを別な人が使っても、同サイトで使われた情報はクライアントに残らない(アクセス履歴とは異なるので、アクセスした記録が残らない訳ではない)。
第3回のまとめ
以上、第3回の講義内容でした。第1回の補足的に、Webアプリケーション構築で知っておいた方がいい用語を解説しました。ですので今回は冒頭に述べた通り、いつもより軽めです。
ちなみに当初の予定ではこれらに「オブジェクト指向」の簡易版説明を加える予定でした。しかし、オブジェクト指向はそれはそれで奥が深い分野であるため、特に初心者には理解が難しいと思われます。
それに、PHPを学ぶ上で完全に必須かというとそうでもなく、必要があれば随時説明を行っていく形にすることにしました。実践を伴わないと理解を促すのが難しいと判断したからです。
これでとりあえずの下地は揃ったと思いますので、第4回ではいよいよPCを使った実践に入る予定です。お楽しみに。