海未「さて、おなじみ”Hello, Worldはどこいった”のコーナーです」
ことり「Hello, WorldとFizzBuzzはほんと毎回毎回名前だけだよね・・・」
海未「まずは一番基本的なものをやってみましょう。以下のコードを書いてみてください」
1 2 |
console.log("ファイトだよっ!"); |
海未「拡張子.jsで適当なファイルに保存してください」
穂乃果「おおっ、見たことあるコードだ」
海未「コマンドラインから以下のように実行できます」
1 2 3 |
$ node hello.js ファイトだよっ! |
穂乃果「うーむ・・・」
ことり「どうかしたの?」
穂乃果「あんまり面白くない・・・」
海未「JavaScriptの言語仕様はもうやったわけですし、実行環境が変わっただけですからね」
穂乃果「まあ、それもそうか・・・」
海未「では、これはどうでしょう」
1 2 3 4 5 6 7 |
var http = require("http"); http.createServer(function(req, res) { res.writeHead(200, {"Content-Type": "text/plain"}); res.end("ちゅんちゅん\n"); }).listen(25252, "127.0.0.1"); console.log("25252ポートで待ち受け中です"); |
海未「これを実行して、ブラウザでhttp://127.0.0.1:25252
にアクセスしてみてください」
ことり「・・・あっ、ちゅんちゅんって出た」
穂乃果「これだけでWebアプリができちゃったの!?」
海未「そうです。これなら面白いでしょう」
穂乃果「うんうん!」
海未「コードの内容を見ておきましょう。require
はモジュールを読み込む関数です。モジュールは機能をまとめたものだと考えてください」
ことり「require("http");
ってするとHTTP通信の機能が使えるのかな?」
海未「そんなところです。そのモジュールのcreateServer
関数を使うことでHTTPサーバオブジェクトを作成しています」
穂乃果「それが、シングルスレッドで動いて、イベントループを処理する・・・」
海未「珍しく物覚えがよいですね。その通り、このHTTPサーバオブジェクトはWebアプリケーションの一番基本的な骨組みになるものです」
ことり「簡単に書けるけど、大事なところだね」
海未「実際の処理そのものは関数にして渡しています。このパターンはもう大丈夫ですね?」
穂乃果「はーい」
海未「この関数はHTTPのリクエストとレスポンスを引数に取ります。まあ、分かる人には一般的でしょう」
ことり「分かる人って・・・?」
海未「妄言です。さて出力は、このレスポンスオブジェクトに対して行います。最低限のHTTPヘッダと、レスポンスボディを書き込んでいます」
ことり「それがブラウザで見えるようになるんだ」
海未「最後に、listenメソッドで25252番ポートを指定して待ち受けを開始します。この状態になると、ブラウザからアクセスできるようになります」
海未「これまでのJavaScriptの知識と組み合わせれば、もう色々なことができるようになっているはずです」
穂乃果「うん!何かの修行みたいな言語仕様編を耐え抜いてよかった!」
海未「次回は、今回出てきたhttpのようなモジュールの作り方や使い方を見ていきましょう」
海未「それとこの先、基礎的なネットワークの知識を前提として話をします。HTTPって何?とかソケットって何?という人は予習しておいてくださいね」
ことり「だって」
穂乃果「うっ・・・が、頑張るよっ!ファイトだよ私っ!」