ウェブ・プログラムの研究所 Web Application Programming Lab.

一つ前にもどる 目次にもどる 次のページへ

はじめに - Webアプリケーションプログラムとは?

このような名称が正しいかどうかはわかりませんが、 ホームページ上で動作するソフトをプログラムすることをを総称してここでは 「Webプログラム」と呼ぶことにします。 (正確には、Webアプリケーションソフトウェアをプログラムする、 と言うべきなのかもしれません。)

最近、急速に普及した言葉で「CGI」というのがあり、 これがホームページ上でのプログラム手法であるかのように言われていますが、 「CGI(Common Gateway Interface)」とは規格の名前です。 CGIという規格に沿った手法でプログラムを動作させる・・・ と言うのが本当の言葉の意味になります。

基本的にはCGIと呼ばれる技術を用いてダイナミック(動的) にページを書き換えたりする技術だと思ってもらえればOKです。 もっと一般的にはサーバーサイドプログラムと呼ばれ、CGIに限らず、 IISのASPや、JavaのServlet、JSP等でも実現可能です。

具体的にいうと、よくホームページ上で見かけるカウンターや掲示板、 チャットなどの仕組みです。これらは、どんなにがんばってもHTML を記述した静的なページでは実現できません。 ホームページビルダーやドリームウィーバーをつかっても作ることができないのです。

ここでは、一般的なホスティング環境で利用可能な言語としてPerlを例にとり、 いろんなタイプのシステムを研究してみたいな〜と思っていますが、 プログラム言語入門的内容は扱わないので、 プログラム言語についての入門的解説は「とほほ」とかで勉強してください。 (私も、決して言語の基礎について知っているわけではありません。 むしろ知らないので、お勉強していきましょう!という趣旨です。 また、ホスティングについては「ホスティングのすすめ」 を見てください。)

それでは、早速、Webプログラムについてお勉強したいと思います。

HTMLとどこが違うの?なにができるの?

ここを読んでいるということは、 おそらくHTML等でホームページを作ることはできる方がほとんどではないかな〜、 などと勝手に思ってますが、もしHTMLってなに?という状態でしたら、 そちらを先にお勉強された方がいいかと思います。 (絶対必要な知識になりますので・・・)

さて、Webプログラムで何ができるのか?ということですが、 先にも「掲示板」や「チャット」、「カウンター」などダイナミック(動的) にページを作り出すことが可能になると言いました。

では、なぜこのようなことができるのかということを、 ここで、ホームページの見える仕組みの基本というのを復習(?) しながらいっしょに考えて行こうと思います。

ホームページはブラウザからのクリックや「お気に入り」のタブを選択したり、 アドレスを直接入力して表示させます。いずれの方法で表示させても、 URL(Uniform Resource Locator)、いわゆる「http://www.....」という情報により、 表示させたいHTML文書の場所を教えることで、その場所にアクセスして、 「***.html」というファイルを読み出すことにより表示されます。

つまり、「このファイルが欲しい!」というブラウザ側のリクエスト(要求)に対して、 「了解!送るよ〜」というサーバー側のレスポンス(応答)という通信によって、 ホームページの表示というのが成り立っているのです。

(通常のホームページの場合)
通常のホームページの場合

じゃあ、内容が動的に表示される掲示板やカウンターといったWebプログラム の場合はどうでしょう?これも、基本的には同じように「要求」に対して「応答」 という手順を踏むのですが、若干違うのは、要求された時点でプログラムが起動して、 そのプログラムに書かれた内容の仕事を行い、 その結果を「レスポンス(応答)」として返すのです。

(Webプログラムの場合)
Webアプリケーションの場合

つまり、要求があって、 その要求に応じた内容の仕事をプログラムがせっせとがんばってから、 「表示」という手順になります。このような理由で、 内容を動的に変化させながらページを作り出しているのです。 ですから、いろいろと処理を行った結果をサーバー側に保存しておいて、 それを不特定多数で操作するということも可能になるわけです。 一種のファイル共有みたいなことがおこなわれているんですね。

いわゆる掲示板システムなどは、 みんなの発言した情報を共通のファイルとしてサーバー側に保存して、 それを見るときにホームページの形式にして表示させているだけのことなのです。 仕組み的には至って簡単ですよね。

一方で、よく聞くJavaScriptやJavaAppletというのは、 これらの処理を各個人のブラウザ上で行います。 だから当然ですが、そこでされた処理というのは、 それを見ている一人だけでしか見ることができないわけですよね (処理の結果が共有されていません)。 掲示板の例でいうなら、このサーバー側でファイルに保存というのが、 HTMLやJavaScript、JavaAppletという技術では逆立ちしてもできない・・・ ということなので、これらの技術だけでは実現できないというわけなのです。

ただ、Webプログラムさえあれば何でもできるか?ということですが、 答えはNOでしょう。WebプログラムでしかできないことはWebプログラムで行い、 JavaScriptなどでしたほうが便利なことはブラウザ側でJavaScript等にしてもらう・・・ という合わせ技を使うことで、本当に便利なページをつくることができるようになります。

プログラムの起動のさせ方

プログラムを起動させる方法は簡単です。直接呼び出すだけです。 これは通常のプログラムでも同様だと思います。ただ、 ホームページ上で、という条件があるので、 呼び出し方がURLの記述になっていることが大きな違いでしょう。

例えば、abcというプログラムを「 http://www.hogehoge.com/ 」 というホームページで起動させる場合は、 「http://www.hogehoge.com/abc 」 とブラウザに打ち込んで起動させることになります。

ホームページ上でURLを読み出すように起動させることを考えると、 下記のような方法も可能となります。

<a href="http://www.hogehoge.com/abc">ここをクリック</a>

または

<form action="http://www.hogehoge.com/abc" method="get">
<input type="submit">
</form>

そして、読み出してその応答の結果は単純な表示(print命令)であることがほとんどです。 というのも、読み出されたプログラムが結果として返すのは、 通常は「HTML」を記述したテキストデータだけだからです。 (だからホームページとしてみることができるのですが・・・)

サーバーサイドプログラム用の言語として普及しているPerlを例にとるなら、 例えば、「abc.pl」というプログラムが起動されると

print "<html><head></head><body>Hello World!</body></html>";

という命令を書くことで、ブラウザにホームページとして結果を表示することになります。

プログラムを始める前に - HTTPのお約束

先ほども、Webプログラムとは、極端に言うと、 最終的にPrint命令でHTMLを書き出すシステム を作ることになると言いました。 しかし!単純に、 Print命令で「<html>。。。。」と出力しても、 その結果はエラーになるだけで、ホームページとしてブラウザには何も表示されません。

これはどういうことかというと、通常ホームページを見ているときに、 ブラウザと接続先のサーバーの間で、HTMLで書かれた「 ソース以外のやり取り 」があるということです。

話すとややこしいので、実際に通信されている情報を見てみましょう。

01: HTTP/1.1 200 OK
02: Date: Fri, 09 May 2003 15:48:01 GMT
03: Server: Apache/1.3.27 (Unix)
04: Last-Modified: Fri, 09 May 2003 06:03:10 GMT
05: Accept-Ranges: bytes
06: Content-Length: 31877
07: Connection: ****
08: Content-Type: text/html
09:
10: <html>
11: <head><title>Welcome to my homepage</title>
12: </head>.....

以上の情報がページを見るたびに、 またはクリックするたびにサーバーとブラウザの間で行ったり来たりしています。 つまり、自分では「abc.html」にいわゆるHTMLタグしか書いていないつもりでも、 ブラウザがページを表示するときには、それ以上の情報が付加されて、 それをサーバーから受け取って初めてページとして再現できる、 という仕組みになっているのです。

そして、通常このような情報はブラウザでは見ることはできませんし、 右クリックでソースの表示を選択しても見ることができません。 このような情報をヘッダーといいます。 (HTMLで記述する <head></head> タグに囲まれた部分とはまた別のヘッダーという情報が存在しています。)

では、全ての情報をブラウザに送信する必要があるかというとそうではなく、 表示させるデータのContent-Typeだけ教えれば通常は表示できます。 上の例でいうなら8行目の「Content-Type: text/html」という部分です。 (その他の情報はWebサーバーが自動的に付け足してくれます。)

ただ、注意が必要なのは、 この記述(ヘッダー)とHTMLタグが始まる場所の間には1以上の改行が必要であるため、 Perl等でプログラムを書く場合は

print "Content-Type: text/html\n\n";

と言うように、「\n」改行を2ついれて、処理します。 (\nは改行を意味するコードです。) 上のヘッダーでも一行空いているのがわかりますよね?

なぜそのようなことが必要か、ということですが、 これはブラウザがページを表示させるときの約束事、 英語ではプロトコルといいますが、そのような決まりになっているからです。 (HTTPプロトコルの仕様なのです、、、興味のある方は調べてみては?)

ページを表示する時には、なによりも先にこのデータを出力する必要があるのです。 ですから、プログラムの起動の仕方で書いた「Hello World!」を表示させるPrint文は、 下記のように一行足さないとブラウザには表示されないのです。

01: print "Content-Type: text/html\n\n";
02: print "<html><head></head><body>Hello World!</body></html>";

(注意・補足)
ここまで書いたのはCGIを用いた場合の例です。これがPHPやIISのASPになると、 不要になります。理由は詳しくは書きませんが、 プログラムの起動する環境の違いによります。 また、同じようにCGIを利用する場合でも「NPH」といって、 Webサーバーを介さずに、直接起動された結果をブラウザに返す仕組みもあります。 この場合は逆に完全なヘッダーを書いて出力する必要があります。 詳しくはここでは述べませんので、 興味のある方は「ホームページ作成リンク集」 等から該当するページを探してみてください。

Perl&Unix系OSサーバーのときの追加事項

プログラムの起動と表示する仕組みはだいたい理解できたのではないかと思いますが、 どうでしょうか? ただ、これからいっしょに実験を行っていくときの動作環境として、 Unix系OSでApacheが動いていて、Perlでプログラムを・・・と考えています。

ですから、若干ですが、 Perlプログラムを書くときの特記事項的なものをまとめてみました。 (知っている人の方が多いと思いますが・・・念のためです)

先ほど、Content-typeを書けば動く!と言いましたが、 通常皆さんがレンタルしているUnix系のサーバーではこれだけでも動かないのです。 Perlはインタプリタといって、 書いたソースファイルを逐次的に機械語に変換して実行する言語ですから、 Perlプログラムの本体がどこにあるかを、ソースファイルに書き込む必要があるのです。

01:#!/usr/local/bin/perl
02:
03: print "Content-Type: text/html\n\n";
04: print "<html><head></head><body>Hello World!</body></html>";

#!/usr/local/bin/perl」は通常パスと呼ばれます。 このパスもPerlプログラム本体の場所ということになるので、 Perlをどこにインストールしてあるかによって変わってきます。

サーバーを直接またはTelnetで扱えるなら「which perl」 とコマンドを打つことで、Perlのパスを知ることができますが、 普通レンタルサーバーの置き場まで直接行くことなんて出来ないですし(^^;)、 Telnetも許可していないところがほとんどです。

これは通常、借りているサーバーのホームページに公開されているので、探してみてください。

これで、上記のソースファイルを「abc.cgi」というファイルで保存起動! っと思っても残念ながらまだ動きません。 エラーです(Internal Server Errorというようなメッセージが出ると思います)。

Unixのサーバーは誰がどのファイルを所有していて、どのようなことができるのか、 というのを大変厳しく管理しています。これが、 ファイルの「パーミッション」と呼ばれるもので、 4(読み)、2(書き)、1(実行)の数字の組み合わせと、 Owner,Group,Othersという実行者により、 777とか755とか664といった設定を行います。

通常のWebプログラム用のファイルなら、読み出しと実行が必要ということですので、 「4+1=5」で、「5」というパーミッションを設定する必要があるのです。 これは通常HTMLで使っている「FTPクライアント」で設定できます。

ただ、このパーミッションも、サーバーの設定によって様々ですので、 これもレンタルしているサーバーのホームページで探してみてください。 通常は「755」に設定するようにかかれています。

これで、やっとブラウザに「Hello World!」という文字が表示されるプログラムができます。

ですが、文字を表示させるだけなら、わざわざそんなことをしなくても、 普通にHTMLで書けば言い訳で、プログラムにする意味がありません。 やはり動的(ダイナミック)に表示内容を変化させたい、、、 という理由があるからこそのWebプログラムだと思います。

そこで、次回は簡単に毎回違う内容を表示するページを作ってみましょう。

一つ前にもどる 目次にもどる 次のページへ
(作成2003/05/31 by あいまい)
(更新2004/12/25 by あいまい)

Valid XHTML 1.0!