書籍「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」発売されます

以前よりWebで公開していた「本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう」が、技術評論社さんから本として発売されます(発売日は6/7です)。

技術評論社さんの紹介ページはこちら。
Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門:書籍案内|技術評論社
私のWebサイトにおける紹介ページはこちら。
http://kmaebashi.com/webserver/index.html
amazonはこちらから。

この本は、タイトルにあるとおり、「基礎からのWebアプリケーション開発入門」です。
その前にある「Webサーバを作りながら学ぶ」のあたりでちょっと待てと思う人がいるかもしれませんが*1、私は、冗談でもなんでもなく、本気で「基礎からのWebアプリケーション開発入門」のつもりで書いています。ただし、プログラミングそのものの初心者は対象ではなく、ふつうにプログラムは書けるけれどWebアプリケーションはやったことがない、あるいはWebアプリケーションをなんとなく書いているけれどいまひとつよくわからない、という人を対象読者としています。言語はJavaを使っていますが、Javaは「ふつうの言語」ですし、特に特殊な機能も使っていないので他の言語のプログラマでも難なく読めるでしょう。

本書において最初にやることは、TCPによるネットワーク通信のプログラムを書くことです。そして、それを元に、Webサーバを作ります。つまり「Webサーバを作る」というのは、PCを買ってきてLinuxをインストールしてApacheを入れて、という意味ではなく、ApacheのようなWebサーバを自作するということです。
その後、Tomcatのへなちょこ版であるサーブレットコンテナ「Henacat」を自作し、Cookieやセッション、ファイルアップロードを実装します。
また、書籍では、「第6章 Webアプリ開発に必要なその他の知識」として、OSI7階層モデルやプロキシのようなネットワークの基礎、JavaScriptによるDOM操作やAjaxといったクライアントサイドの技術、認証やセキュリティについて、また、「第7章 Tips」として、画像を動的生成したりCSVをダウンロードさせたりする方法について記載しています。結構な加筆/修正がありますので、Web版だけ読めばいいやと言わず、ぜひ書籍の方をお買い求めくださいませ。

今時、Webアプリケーションを作るなら、PHPなりRuby on Railsなりでちゃちゃっと作ればいいだろう、いくら「基礎から」といってもWebサーバを作るところから始めるなんて基礎に戻りすぎではないかお前はプログラムを書く時はいつでもアセンブリで書けというのか、といった声が聞こえてきそうです。しかし、今時の普通のアプリケーションプログラマは、まあ当面はアセンブリ言語を知らずとも困らないでしょうが、WebアプリケーションプログラマはWebの基礎であるHTTPを知らないと、結局すぐに困ります。まともなプログラミング言語はうまく機械語を隠蔽していますが、少々頑張ったWebアプリケーションフレームワークでも、HTTPの概念は隠蔽できずだだ漏れです。オープンな標準であるHTTPのもと多様な企業や団体が作ったWebサーバやブラウザを使い、サーバ側のプログラムではサーバ側のフレームワークを、クライアント側では別のJavaScriptライブラリを使っているのだから無理もないのかもしれません。x86のニモニックを知らなくても高級言語(Cでさえ!)のプログラムを書くことはできるでしょうが、HTTPのGETを知らずにWebアプリケーションを書くのは無謀です。最初の3日ぐらいはうまくいくかもしれませんが、すぐに壁にぶち当たります。

  • Ajaxで飛ばしているつもりのリクエストが本当に飛んでいるかを確認するためにWebサーバのログを見るとか、
  • POST時にhiddenで値を引き継いだりとか、
  • ブラウザのF12開発者ツールでGETのクエリストリングを見たり、リダイレクトの挙動を確認したり、Cookieがちゃんと入っていることを確認したりとか、
  • HTTPリクエストヘッダを見てUser-AgentやRefererを確認したりとか、

そういうことができなければ、当たり前ですが一人前のWebアプリケーションプログラマとは言えません。そして、そういうことを知りたければ、一度その仕組みを作ってしまうのが一番だと私は思います。

ベテランプログラマさんからしてみれば、「おいおい、実際にWebサーバやサーブレットコンテナを作るかどうかはともかくとして、この程度のことを知らないWebプログラマがいるのかよ!」と思うかもしれません。もっともです。この程度のことを知らなければ日常のプログラミングに差し支えるでしょう。
しかし、Webで拾った断片的な知識でなんとなくプログラムは書けていても、Webというシステムがなにがどうなって動いているのかを体系的に把握していないWebプログラマは、相当数いると私は踏んでいます。ベテランのプログラマの皆さんも、Webや言語の入門書に記載された断片的な知識から、Webの動作のイメージを組み立ててきたのではないでしょうか。CSVファイルをダウンロードさせたいと思ってぐぐったら、Content-Typeがどうしたという記述が出てきて何のことだかわからなくて困ったりしなかったでしょうか。

この本では、Webサーバとサーブレットコンテナを実際に作ることで、こういったWebの動作原理について順に説明していきます。

Webサーバやサーブレットコンテナを作るというと、「OSを作る」とか「プログラミング言語を作る」といったような、ちょっとマニアックな行為に思えるかもしれません。しかし、本書で扱う程度の知識は、マニアックでもなんでもなく、普通のWebアプリケーション開発者が、当然の常識として知っていなければならないことです。それに、本書で最初に作るWebサーバはJavaで140行ほど、最終的にCookieやセッションも導入したHenacat ver.0.4でも1000行程度のものであり、まったく難しいものではありません。「10分でブログが作れるよ!」と宣伝してるフレームワークの開発環境の構築ではまって1ヵ月、なんてことになるより、こっちのほうがよっぽど簡単というものです。恐れることはありません。

――もうね、会社の仕事と別に本1冊書くなんてプライベートな時間を思いっきり犠牲にしなければできないことですし、私一人の問題ではなく出版社さんも本が売れないとやっていけないわけですし、嫌儲は何も生まないと思うのではっきり書きますが、みなさん買ってください。いますぐポチってください。いやマジで。

*1:正直、表紙の「Webサーバを作りながら学ぶ」の部分が、丸の中にちょっと小さな字で書いてあるのは「いーのかなー」と私自身思わなくもないですが(^^;