#185 JavaScript事始め

2001/11/16

<前目次次>


 以前に劇団のページを立てていた環境では、CGIが使えたので、どこぞから拾ってきたPerlによる掲示板CGIを走らせていた。その際Perlのソースをちょっといじって、次の公演までの日数や、メンバーの誕生日などを表示させるようにしていた。これは結構評判がよかったのだが、ほどなくしてその環境が使えなくなってしまい、掲示板は、移転先のプロバイダのお仕着せのものしか使えなくなってしまったのであった。

 今回JavaScriptを憶え始めたのは、そんな理由からである。JavaScriptはWebPageで使われる簡易言語の1つで、HTML上にソースを埋め込むことにより、クライアント側のブラウザ内で実行され、インタラクティブな処理を或る程度実現可能にする技術の1つである。

 JavaScriptはもともとNetscape社がインタラクティブなページをブラウザで実現するために開発したLiveScriptというものが発展してできたものである。当時はJavaというキーワードがもてはやされていたことから、名前の頭にJavaとついてしまったが、基本的にはJavaとJavaScriptは互換性もほとんどない全く別の言語である。IEもバージョン3あたりからJavaScriptが動くようになったため、今やほとんどのブラウザで機能するようになった技術である。

 JavaScriptは、基本的にはHTML中にソースを埋め込んだ形で作る。具体的にはSCRIPTエレメントの中にソースを記述するし、クライアント側では、SCRIPTエレメントを解釈できるブラウザがそれを解釈し、ブラウザ上でその機能を実現する、と言った具合である。例えば、フォームに入力されたデータを読み込んだり、日時や環境によって処理を変えたり、マウスの動きに合わせて表示を変えたり、文字表示に演出を加えたりということができる。

 文法は、基本的にはC言語に類似している。各種の制御構造もC言語とほぼ同じであるし、関数の定義もできる。しかしスクリプト言語という気楽さからか、変数の型宣言が必要なく、また1つの変数が文脈によって数値として扱われたり文字列として扱われたりする。このあたりはAWK的であるとも言える。それでいてJavaScriptはオブジェクト指向型の言語である。オブジェクトはそれぞれプロパティとメソッドを持ち「何とかの属性の何とかを取り出す」とか「何とかに対して何々をやる」と言った具合に記述する、と言っても何だかよくわからないかも知れないが、ともかくそんなようなものだと思っていただければいい。

 実際の所はそんな言語的にどうだとか言う難しいことを知らなくても、基本的な機能であればWebを探せばあちこちにスクリプトのサンプルが公開されている。適当なサンプルを拾ってきて、自分用にアレンジすれば、あまり考えずにJavaScriptの機能を使うことができる。

 ということで、とりあえずかつて実現していた、日付を読んでイベントまでの日数をカウントダウン表示するスクリプトを書いてみた。イベント前であれば「○○まであと何日です」と表示し、イベントが終了すれば「○○は終了しました」と表示するスクリプトである。機能的にどうこういうレベルのものではなく、基本的な書式を憶えればすぐに実現できるレベルである。

 ところで、JavaScriptとCGIが決定的に違うのは、CGIは処理をサーバ側で行うのに対し、JavaScriptがクライアント側で処理を行うところである。そのため、こういった日時表示のスクリプトは、クライアント側の時計が狂っていると、当然間違って表示されるわけである。

 先に述べたカウントダウンスクリプトを表紙につけると、メンバーの一人から「『○○は終了しました』って出てるよ」と連絡のメールがあった。こっちの環境では正常に動いているので、思うに彼の見ている環境の内部時計が狂っているためだと思われた。確認のためメールの日付を見てみると、1904年となっていた。何かの拍子に内部時計がリセットされて無茶苦茶な時間になっていることはよくある。そちらの環境がおかしいようだと連絡を入れた上で、こちらもスクリプトを改良し、イベントの前後90日以内でなければ一切表示をしないようにした。これなら先のケースでも問題はない。

 スクリプトながらオブジェクト指向という面妖な言語であるところがなかなか面白く、ハマってしまいそうなJavaScriptであるが、注意すべきことは、JavaScriptはWebPageを演出するための手段であって目的ではないということだ。従って、作った側がいくら面白いと思っても、見ている側が不快になるようなものや、JavaScriptの機能なしではそのページを見ることができないようなものは避けるべきである。そのため、意味のない子ウインドウが開いたり、意味のないメッセージがステータスのところに出てきたりというものは、避けるべきだと考えている。ましてや、クライアントのブラウザを調べて、特定のブラウザしか見られないようにするといったような某所のような使い方は絶対にすべきではないと言える。(文句を言われてようやく止めたみたいだけど。)


<前目次次>