Hatena::ブログ(Diary)

プログラミング言語を作る日記

2016-06-05

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

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

f:id:kmaebashi:20160604223850j:image

技術評論社さんの紹介ページはこちら。

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サーバを作りながら学ぶ」の部分が、丸の中にちょっと小さな字で書いてあるのは「いーのかなー」と私自身思わなくもないですが(^^;

2016-06-02 バリ島に行ってきました(その5)

バリ島に行ってきました(その5)

完結。前回の記事の続きです。

3/23〜3/24

最終日は、飛行機乗るのは夕方だったのですが、まずは朝ごはん食べて、

f:id:kmaebashi:20150323080243j:image

飛行機のチケット、eチケットをネットからチェックインし、PDFをダウンロードして(ホテルのWi-FIの品質が非常に悪く、PDFが最後までダウンロードできたのは奇跡のようなものだった)、印刷しといたほうがよかろうとホテル内のサービスでPC借りたら、プリンタの調子が悪くて印刷できない、レギャン通りにネットカフェがあることは知っていたのでそこにも行ってみたけどやっぱりプリンタ壊れてる。Wi-Fiのことといい、こういうことはやっぱり日本のようにはいかないようです。

レギャン通りを歩いていたらトイレに行きたくなって、トイレを借りたサークルKで、義理のつもりで買ったお茶。クソ甘くてどうしても飲めなかった……

f:id:kmaebashi:20150323083803j:image

で、飛行場に行ってみたら、紙はなくてもPDFタブレットに表示したら手続きできました。それはさておきバリ滞在中英語がわからないことが結構あって少なからず自信をなくしていたのですが、空港の係の人の英語は、ホテルやレギャン通りの人の英語よりはずっと聞き取りやすかった。あちらの発音が悪かったのではないか疑惑。

紙がないことでもめる可能性を考えてずいぶん早く空港に行っていたので、時間が余ってしまい、タクシーで近くのショッピングモールへ。

ゲームがあっても、プリペイドで結構な金額のカードを買わなければいけないので旅行者としては遊べず。

f:id:kmaebashi:20150323141312j:image

f:id:kmaebashi:20150323151747j:image

f:id:kmaebashi:20150323154835j:image

ショッピングモール内はエアコンは効いていますが、こういう開口部は自動ドアでもなく解放されていて、それでも中は暑くない。エアコンもないようなレギャン通りのカフェでも、日差しは強くても、日陰にさえ入れば涼しい。この気候はやっぱりすばらしかったなあ。

f:id:kmaebashi:20150323155257j:image

f:id:kmaebashi:20150323155542j:image

で、飛行機乗って、

f:id:kmaebashi:20150323221007j:image

f:id:kmaebashi:20150324053517j:image

シンガポールからの飛行機がうっかり最前列になってしまい、リュックを前席の下に入れることができなくて、荷物棚に入れてしまったリュックから上着を取り出すことができなくて寒い思いをしたりしましたが、無事日本に到着しました。到着してさっそくTwitter見てみたらLTEの速いこと速いこと。

帰宅すると、近所の桜が咲いていました。

f:id:kmaebashi:20150324095510j:image

1年半前の旅行記事をようやく書き終わりました……

明日からは宣伝するよ!

2016-05-31

バリ島に行ってきました(その4)

発売日までにこの日記に書くべきことを書いてしまわないと告知も打てない、というわけで、前回の記事の続きです。

3/22

ニュピが空けたのでレギャン通りをうろうろと。前々日の晩のオゴオゴがいくつか道端に置いてありました。

f:id:kmaebashi:20150322100707j:image

f:id:kmaebashi:20150322100445j:image

f:id:kmaebashi:20150322100323j:image

f:id:kmaebashi:20150322095900j:image

f:id:kmaebashi:20150322095815j:image

f:id:kmaebashi:20150322095749j:image

f:id:kmaebashi:20150322094646j:image

f:id:kmaebashi:20150322094320j:image

その後、クタのビーチに足を延ばしました。

f:id:kmaebashi:20150322101644j:image

海岸に、オゴオゴが大量に置いてありました。

f:id:kmaebashi:20150322124251j:image

f:id:kmaebashi:20150322124703j:image

f:id:kmaebashi:20150322124601j:image

f:id:kmaebashi:20150322124551j:image

f:id:kmaebashi:20150322124511j:image

f:id:kmaebashi:20150322124456j:image

f:id:kmaebashi:20150322124447j:image

f:id:kmaebashi:20150322124359j:image

f:id:kmaebashi:20150322124335j:image

f:id:kmaebashi:20150322124323j:image

f:id:kmaebashi:20150322125121j:image

f:id:kmaebashi:20150322125003j:image

f:id:kmaebashi:20150322124917j:image

f:id:kmaebashi:20150322124903j:image

f:id:kmaebashi:20150322124839j:image

f:id:kmaebashi:20150322124335j:image

このあたりの写真を見ると、やっぱり材質は発泡スチロール的な何かに見えます。

f:id:kmaebashi:20150322130031j:image

f:id:kmaebashi:20150322100306j:image

その後、またレギャン通りをうろうろしつつお店に入ってビール飲んでたら大雨。でもまあ、ビール飲んでるうちに上がりました。

f:id:kmaebashi:20150322164921j:image

f:id:kmaebashi:20150322164748j:image

f:id:kmaebashi:20150322142043j:image

f:id:kmaebashi:20150322131148j:image

f:id:kmaebashi:20150322130835j:image

f:id:kmaebashi:20150322130810j:image

f:id:kmaebashi:20150322164154j:image

f:id:kmaebashi:20150322152650j:image

f:id:kmaebashi:20150322152640j:image

この日の夜がバリ島最後の夜で、翌日には飛行機乗って日本に帰るわけですが、それはまた次の記事で。

2016-05-29

バリ島に行ってきました(その3)

バリ島に行ってからかれこれ1年半経過していて、いまさら続きを書くのもどうかという状態ですが、1年半前の記事の続きです。

3/21

2015年は、3/21がニュピでした。ニュピというのはヒンドゥー教のお正月で、市民は外出禁止、熱心な教徒は食事もせず1日を静かに過ごします。外国人旅行客も、ホテルから出られません。

で、ホテルの部屋にも注意書きが配られて、外出禁止はもちろん、あまりうるさくするなとか音楽をかけるなとかできれば電気を使うなとか(ローソクは貸すから)とか、いろいろ言われたのですが、当日になってみれば、確かに外出禁止ではあるものの、清掃のサービスはやってくるし洗濯もしてくれるし、ホテル内はうろつけるし、ということで、うろうろ。

ホテルと直結している海岸です。

f:id:kmaebashi:20150321081401j:image

昼ごはんだったかな、ミーゴレン。

f:id:kmaebashi:20150321113711j:image

これにフィッシュアンドチップスを付けてビール飲んだんだっけ。

f:id:kmaebashi:20150321113706j:image

ニュピの看板。

f:id:kmaebashi:20150321121859j:image

その他、ホテル内の写真色々。

f:id:kmaebashi:20150321181204j:image

f:id:kmaebashi:20150321181014j:image

f:id:kmaebashi:20150321180832j:image

f:id:kmaebashi:20150321180826j:image

f:id:kmaebashi:20150321180813j:image

f:id:kmaebashi:20150321180613j:image

f:id:kmaebashi:20150321180402j:image

f:id:kmaebashi:20150321122012j:image

f:id:kmaebashi:20150321121956j:image

f:id:kmaebashi:20150321181942j:image

f:id:kmaebashi:20150321181821j:image

f:id:kmaebashi:20150321181804j:image

f:id:kmaebashi:20150321181350j:image

ホテル内のプールでは子どもが歓声上げてるし、スパの施設も営業しているし(頼もうかと思ったら予約でいっぱいで断られた)、なんだホテル内は治外法権か、と思っていました。

レストランが18:00で閉まり、その後食事の手段がないというのは気になりましたけど。最後に食べたナシゴレン。

f:id:kmaebashi:20150321173839j:image

で、たらふく食べて部屋にいたら、19:00頃、見回りの人がやってきて、バスルーム以外の照明を消せと。夜はまじめに(?)ニュピをやるみたいです。プールも無人なのだと思います。外は真っ暗で、風の音しかしない。

2015-04-07

バリ島に行ってきました(その2)

先日の記事の続きです。

3/20

3/20のレギャン通りは、朝から閉鎖されていまして、

f:id:kmaebashi:20150320092303j:image

準備中のオゴオゴがたくさん。

f:id:kmaebashi:20150320135935j:image

f:id:kmaebashi:20150320135626j:image

f:id:kmaebashi:20150320092901j:image

f:id:kmaebashi:20150320092841j:image

f:id:kmaebashi:20150320092801j:image

f:id:kmaebashi:20150320151004j:image

f:id:kmaebashi:20150320164734j:image

f:id:kmaebashi:20150320165216j:image

材質が気になったので接写しました。3/19に案内してもらったガイドさんは、「竹で枠組み作って新聞紙貼って表面はペンキだよ」と言っていたのですが、とてもそうは見えません。発泡スチロールか何か?

f:id:kmaebashi:20150320165407j:image

オゴオゴは日本で言えば節分のようなもので、像は鬼をかたどったものです。

これに悪霊が乗り移るので、パレードが終わったら燃やしてしまう、といったようなことがWebでぐぐった範囲でもあちこちに書かれていますが、まともに燃える気がしません。燃やしたら黒い煙が出そうです。

というか、夜になってわかったのですが、オゴオゴには電飾も装備されており、発電機まで入っています(ブババババと音がしていました)。燃やせるようなものには見えません。

昼ごはんは近所のワルン*1で。

f:id:kmaebashi:20150320112040j:image

f:id:kmaebashi:20150320110342j:image

で、パレードが何時から始まるのか、前日のガイドさんは「15:00頃じゃない?」と言っていたのでとりあえずそのちょっと前からレギャン通りの外が見えるカフェでビール飲みながら待ってたんですが、

f:id:kmaebashi:20150320144552j:image

f:id:kmaebashi:20150320141226j:image

その店の店員さんに聞いてみたら、19:00からとのこと。それならいくらなんでも時間がありすぎなので、いったんホテルに戻って、念のためフロントでも聞いてみたら17:00からと言われ、またレギャン通りに行って今度はそこのコンビニの店員さんに聞いてみたらやっぱり19:00からと言われて。

で、結局始まったのは19:00すぎでした。暗かったのと私の腕が悪いとで、あまりよい写真はないのですが。

f:id:kmaebashi:20150320192325j:image

オゴオゴが電線にひっかかったので、それ用の棒を使って電線をどかしている図。

f:id:kmaebashi:20150320193449j:image

f:id:kmaebashi:20150320201735j:image

f:id:kmaebashi:20150320195058j:image

最終的に、広めの交差点でオゴオゴが集結して、何かこう、アピール(?)か対決(?)的なことをしていたようなのですが、何しろ言葉がわからないのと、よく見えないこともあって、途中でホテルに撤収しました。途中、いつものバーは開いているかな、と覗いてみたのですが、いつもより早く閉まっていました。日本で言えば大晦日ですからねえ。

続きはまた後日。

*1:地元の人が使っているような小さな食堂