文中の説明画像をクリックすると拡大します。
プログラミング言語「PHP」と実行環境の「CGI」
プログラミングでよく聞く「PHP」と「CGI」とは、それぞれどういう意味なのでしょうか。
- PHPは、Webアプリケーションを開発するためのプログラミング言語
- CGIは、Webサーバーでプログラムを動作させるための実行環境
CGIのことをプログラミング言語だと思っている人がいるかもしれませんが、「CGI」という名前のプログラミング言語があるわけではありません。
Webサイトは、Webサーバーの機能によってサービスが提供されています。
例えば、掲示板(BBS)のようなCGIで動作するプログラムを導入したとしましょう。そのプログラムに対してブラウザでアクセスすると、Webサーバーはプログラムを動作させようとします。
この時、プログラムの実行をWebサーバーとは別の場所で動作させて、実行結果だけをWebサーバーで受け取り表示させる方式のことをCGIと言います。
プログラムの実行を要求されたWebサーバーが、プログラムの処理を外注に出すようなイメージですね。
CGIで動作するプログラミング言語の代表「Perl」
CGIを、プログラミング言語と誤解している人がいるかもしれないと書きましたが、CGIとして誤解されているプログラミング言語がPerlです。
Perlは、CGIで動作するプログラミング言語の代表です。
このような誤解は、Perlで作られたプログラムファイルの拡張子が「cgi」だったことから広まっていったのではないかと考えられます。
1990年代の後半からWebサイトを運営してきた人は、掲示板(BBS)やチャット、アクセスカウンターなどのPerlで開発されたフリーのプログラムを使ったことがある人も多いでしょう。
2000年前半からは、Perlで開発されたCMS「Movable Type」が流行り、他のWebサービスでもPerlを採用したものが多く公開されました。
PerlからPHPへ
しかし、2000年代中ごろから、Movable Typeに代わりPHPで開発されたWordPressが徐々に浸透し始めました。
PHPは、プログラミングを専門としないWebデザイナーの間でも使いやすいと評判になり、WordPressの普及に合わせるかのように、広く使われるようになりました。
現在はどのようなプログラミング言語が人気なのかを調査をしたIEEE Specturmによる「Top Programming Languages 2018」のデータを紹介します。
2018年ではPHPが6位で、Perlは17位という結果です。1位のPythonは機械学習やAIの普及により、最近急速に人気が上昇したプログラミング言語です。9位のGoはGoogleが開発した比較的新しいプログラミング言語です。Webアプリケーションだけでなく、スマートフォンアプリケーションの開発にも使われています。
人気のプログラミング言語の情報を追っかけることで、どのような技術が流行っているのか分かるのも面白いですね。
プログラムの2つの実行環境「CGI」と「モジュール」
Perlが、CGIで動作するプログラミング言語の代表と紹介しました。
実は、Perlが動作する環境はCGIだけではありません。もう1つの実行環境としてモジュールがあります。
CGIがプログラムの実行を外注させることに対し、モジュールではプログラムをWebサーバーの内部で処理する方式のことを指します。
CGIで動作させるときは、(比喩的に)外注に出すがごとく手間が必要になる分だけ、動作が遅くなるのが一般的です。
また同じプログラム言語でも、Webサーバーの設定を変更することで、CGIとして動作させるか、モジュールとして動作させるのか、カスタマイズができます。
つまりPerlとPHPでの組み合わせでは、以下のように表現できます。
- CGIでPerlを動かす
- モジュールでPerlを動かす
- CGIでPHPを動かす
- モジュールでPHPを動かす
レンタルサーバーによっては、PHPやPerlがCGIとモジュールのどちらの形式で動作させているか違っている場合があります。
レンタルサーバーを借りてPHPやPerlのプログラムを動かしたい時には、レンタルサーバーのスペック表を確認してプログラムがCGIかモジュールのどちらで動作するように設定されているのか、予め確認しましょう。
PHPとPerlの似ているところ
PHPとPerlの似ているところについて紹介します。
サーバーサイドで動作する
PHPもPerlも、サーバーで動作する言語です。例えば、「ブログ」や「お問い合わせフォームのページ」などが、サーバーで動作するプログラムの代表例です。
一方で、クライアント(サーバーにサービスを依頼する側、つまりWebサイトの閲覧者のブラウザなど)で動作するプログラミング言語の代表格が、JavaScriptです。こちらはクライアント、つまりブラウザ上で動作します。
コンパイル不要のスクリプト言語である
PHPやPerlは、プログラミング言語の中でもスクリプト言語に分類されます。
スクリプト言語とは、開発者が書いたプログラムに対して特殊な処理(コンパイル)をしなくても、そのまま動作するタイプの言語のことです。
スクリプト言語とは異なり、プログラムに対して特殊な処理が必要な言語がコンパイル言語です。
コンピューターで動作するプログラムは、機械語で書かれている必要があります。しかし機械語はとても難解で、人間がそのままプログラミングできるようにはなっていません。
PHPやPerlなど、人間が理解してプログラミングできる言語のことを高級言語と言います。高級言語は人間にとっては優しくても、コンピューターにとっては全く理解できません。
そこで、人間が書いたプログラムを、機械語に翻訳する処理が必要です。これがコンパイルです。
さきほど、スクリプト言語には特殊な処理がいらないと書きましたが、実際にはプログラムのあるWebページにアクセスするたびに、PHPやPerlで書かれたプログラムをサーバーは一行ずつ機械語に翻訳しながら実行しています。
このような理由で、スクリプト言語はコンパイル言語より動作が遅いと言われています。
PHPとPerlの違うところ
続いて、PHPとPerlの違うところを紹介します。
PHPはHTML文書の中に組み込める
PHPの一番の特徴は、プログラムそのものをHTML文書に組み込むことができる点です。
これは非常に強力な機能です。
PHPのプログラムをHTMLの一部として組み込めることで、あまりプログラミングに詳しくないWebデザイナーにとっても、ちょっとした機能を追加できるようになりました。
しかしこれは、プログラミング言語としてはデメリットとも言えます。例えばWordPressのテンプレートはPHPを使ってHTML文書中にプログラムのコードを「混ぜるように」記述します。
そうすると、HTMLとPHPが複雑に絡みあったソースコードになりがちです。このような事情は、WordPressのテンプレートに限らず、他のPHPのプログラムでも発生します。
HTML中にプログラムを組み込めるというPHPのメリットは、他のプログラミング言語を経験してきたエンジニアの中には馴染みにくい特徴でもあります。
エンジニアの間では、WordPressの案件は断っているという人もいるのですが、このような事情も関係しているのかも知れません。
PHPはWebアプリケーションの構築に特化している
PHPは、Webアプリケーションの開発専門で作られた言語です。それに対して、Perlは元々テキストファイルを処理するために開発された言語です。
PHPは、もともと「Personal Home Page Tools(PHP Tools)」の略称であり、Webサイトで動的なコンテンツを作成するために開発されました。
なお、現在のPHPの略称は「PHP: Hypertext Preprocessor」と言われていますが、これはPHPのバージョン3からです。
Perlは、「The Practical Extraction Report Language」の略称です。
日本語では、「実用的なデータ取得レポート作成言語」という意味です。このような言葉からも、Perlがレポートのような文字列を処理するためのプログラミング言語だったことがわかります。
まとめ
- PHPは、Webアプリケーションを開発するためのプログラミング言語。
- CGIは、Webサーバーでプログラムを動作させるための実行環境のこと。
- Perlは、CGIで動作するプログラミング言語の代表。
- PerlとPHPは、どちらもサーバーで動作するプログラミング言語。
- Perlは、Webアプリケーションだけでなく、テキスト処理など幅広く使われている。