「本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう」始めました

以前から「誰か書いてくれませんかね」とか言っていた「本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう」ですが、誰も書いてくれないので自分で書きました。

本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう
http://kmaebashi.com/programmer/webserver/index.html

現状、合計で140行くらいのJavaプログラムで、普通に画像やCSSを含むWebページが表示できています。こちらのページの下のほうにも画像を貼っていますが、こんな感じで、ローカルのファイルシステムに置いてある私のWebサイトのトップページが表示できていますし、もちろんリンクをクリックして遷移することもできます。

「えっ? Webサーバってこんなに簡単に書けるの?」と思う人も多いのではないでしょうか。
もちろんこんなのは「わかっている人」からすれば、しごくあたりまえのプログラムに過ぎません。
「おいおい、実際にWebサーバを作るかどうかはともかく、こんなことも知らないでWebアプリを書いている奴いるのかよ」と思うベテランの方もいると思います。正しい感覚です。
でも、そういうベテランの人は、HTTPの「正体」をどこでどんな形で学んだのでしょうか。私自身はと言うと、Perl4でおそるおそるCGIを書いていた頃、そのものずばりの情報がなかなかなくて、CGI自体はサンプルを見れば書けるものの、すっきりしない思いを抱えていた記憶があります。
さすがに昔の話なのでいろいろ記憶は曖昧ですが、私にとって、そこの霧を晴らしてくれたのは、ASCIIの256倍シリーズの「インターネットを256倍使うための本」に載っていた40行くらいのシェルスクリプトによるWebサーバでした。「こんな簡単な仕組みだったんだ」と感動したものです。手元に本がないので記憶で書きますが、「こんなものに世界中が踊っているのを見ると、笑えるのを通り越して背中に冷たいものを感じずにはいられない」というようなことが書いてあったかと思います*1

とはいえいまどきinetdとシェルスクリプトは全プログラマの共通知識でもないでしょうし、ここはひとつJavaあたりで*2同じようにサーバを作る記事があれば役に立つ人もいるのではないか、ということで書いてみました。

ところで、最初に挙げたリンク先を見てもらえばわかるように、こういう記事を「誰か書いてくれませんかね」と言っていたのは5年も6年も前のことです。
なぜ今になって改めて書く気になったかというと、仕事がヒマになったとかそんなことは全然なく*3先日はてブで話題になった以下のページおよびそのブコメが発端です。
今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」 – sumyapp
この記事には、「だったらみんなアセンブラから勉強しろっていうのかよ!!」的なブコメやコメントがたくさん付きました。
でも、Joel Spolskyが「漏れのある抽象化」と呼んだようにあらゆる抽象化には漏れがあるものですが、Webアプリケーションにおける水の漏れっぷりは、たとえば高級言語アセンブラを抽象化しているレベルの比ではない。上の記事の著者の方はむしろDB周り(ORマッパー)を心配されていますが*4HTTP側もだだ漏れであり、到底それを知らずにアプリケーションが書けるレベルにはないと思っています。このへんの「漏れの程度の差」を無視して「アセンブラから勉強しろっていうのかよ!」ってのはぶっちゃけ因縁つけてるレベルに見えます。

あのバトルに対する、私なりの返歌として。

ヒマなわけではないので今後の進め方は保証できませんが、よければ読んでみてくださいませ。

*1:追記:お盆で実家に行ってきたので256倍本を回収してきました。正確には『世間がこんなモノに踊っているのかと思うと、悲しいのを通り越して、薄ら寒いものを感じずにはいられない』でした。

*2:いやもちろんJavaが全プログラマの共通知識というわけでもないでしょうが、たぶんシェルスクリプトよりはマシでは?

*3:勘弁して欲しい…

*4:もちろんそちらも心配ですが