2008-08-06

最近もらった本: サーバ/インフラを支える技術

いただきました. ありがとうございます.

ネットワークの構成から冗長化, サーバのチューニング, デプロイの自動化まで, インフラや運用の話題を集めた本. 私は運用やインフラに素人なので, 内容の技術的正当性について特に意見はない. ただ動いてる実システムの解説という点で信憑性は担保してる気がする. ひたすらすげーなあ大変そうなだなあと読んだ.

特に TCP/IP より下, LAN カード (という表記が我ながら素人っぽい. 玄人ぶるには NIC と呼ぼうか...) より向こうは つい所与のものと考えてしまう. たまに仕事で必要になっても同僚に押しつけてるし. 実は色々やってるんだろうなと, なんとなく思っていた中身を垣間みた気分になる. NIC より手前の話もあるけれど, 個人的には ハブ(...というと素人っぽい. スイッチ.) や ルータやロードバランサの出てくる話が, 未知の世界で面白かった.

KLab 社や hatena 社みたいな比較的大規模なインフラが題材だけれど, ふつうに仕事で使えそうな話もぼちぼちあった. 会社にもってくから買って読んでね > 押しつけ先の同僚.

今夜の皿を洗うのは

子供の頃, 皿洗いが嫌いだった. 私の家の皿洗いはボランティア制で、気がついた人間が洗うことになっていた.

台所に立つ回数の多い母親が, おそらく一番多く皿を洗っていた. 私もそれなりによく洗った. 仕事で帰りが遅い日の母は, 流し台にたまった皿の山をみつけると不機嫌になった. 食事は出ないし嫌味は増えるし, 親の機嫌を損ねると良いことはない. だから部活動から帰って母親の姿が見えず, 台所の皿が片付いていないとき, あるいは食後, 誰も席を立たないとき, 後の面倒を避けるために私は仕方なく皿を洗うのだった. 台所に入るたびの不快感を減らしたい気持ちもあった. 汚れた食器類を溢れさせておくのは気分の良いものではない.

弟は滅多に皿を洗わなかった. 空気読みに長け, 不機嫌な悪い親をやりすごすのを苦ともしなかったし, 山積みの食器を見過すだけの汚れ物耐性を備えていた. (そう推し量るのは難しいことじゃない: 奴の部屋はえらく汚かったのだ.)

食事が済んで流し台に皿が積まれるとゲームが始まる. それはチキンレースだった. 相手の目を伺い, しらをきり, そそくさと食卓から離れる...大袈裟なものでもないけれど, 食後にうっすらと漂う白々しさや緊張がイヤだった. だから皿洗いが嫌いだった.

ソフトウェア皿洗い

ソフトウェア開発でも同じ光景を目にする.

古典的には, バグが皿だ. 自由奔放な弟 (谷川史子ビューでは: 幼少に体が弱かったため親にかわいがられ, わがままと自由を当然のように謳歌している.) であるプログラマがコードを書きちらし, 神経質な兄 (谷川史子ビューでは: 姉の割を食い, 現実主義でたくましい性格に育ったが姉へのコンプレクスは捨てられない.) であるQA担当がそのバグをあぶりだす. 荒れ狂う開発の滝に飲みこまれ, 妹は最後にいつも辛い思いをする. 時にはグレてしまうこともある.

ネットワークシステムでは, インフラや運用が溢れる皿の山に加わる. 姉(プログラマ)の書き散らしたシステムをデプロイして動かすのは妹(インテグレータ)の仕事だ. 明るく楽観的な姉は実環境を甘く見て, ビルドスクリプトで手抜きをしていた. コンパイルエラーに苦しむ妹. ようやくビルドを通し配備してみると, ヘルチェックも, 再起動のコマンドも, 計測用のモニタ API も, 障害解析用のデバッグ出力もないことがわかる. そのくせファイルハンドルは握ったまま. ろくに log の rotate もできやしない. 性能低下, ディスク溢れ, クラッシュ... 安眠を奪われた妹は姉を恨み, 時にはグレてしまうこともある.

皿洗いソフトウェア

皿洗いのチキンレースはある日, 唐突に終わった. 皿洗い機が登場したからだ. 皿を並べてスイッチを入れるだけの便利な機械を, 姉...じゃないや弟さえも使うようになった.

QA担当も彼らの皿洗い機を持っている. それは Selenium かもしれないし WinRunner かも知れない. "サーバ/インフラを支える技術" はインフラにおける皿洗い機のカタログだ. 面倒な作業を自動化するテクノロジーの恩恵に, 私達は浴することができる.

しかしあらゆるテクノロジーがそうであるように, 皿洗い機にも制限があり, そのワークアラウンドがある. たとえばこびりついた米粒を落とす水量はないから, 飯碗は軽くこすってから並べる. 籠の隙間から抜け落ちることがあるから, 箸は専用の棚に挿す. 機械に収まらない大皿は使わず小皿にわける... ワークアラウンドは妹だけでなく, 姉を含む家族みなでとりくむ必要がある.

ソフトウェアにも同じことがいえる. QA担当がいるのに, なぜプログラマは単体テストをするのか? なぜレビューをするのか? 比喩に従うなら, 早く洗った方が汚れはずっとよく落ちるし, テーブルクロスもシミにならないからだ. あるいは皿洗い機に収まらない皿もあるからだ. 洗い場に立たなければ機械のサイズもわからない.

姉の役割

で, ようやく本題なんだけれど(長かった...), インフラや運用についても, 姉(プログラマ)の側に皿洗い機のカウンターパートがあると思う. 妹が鼻歌混じりで皿洗い機をつかえるよう, 姉にできることは何だろう. 姉ロールのプログラマである私は, 皿洗い機よりもこっちに興味がある. 妹ロールの同僚(※髭面)がグレないよう手を打たなければ.

皿洗い機のハイテク化が進むウェブアプリケーションや LAMP の世界では, こうした問題が少いのかもしれない. けれど自分が妹である限り, うかつでわがままな姉のコードで酷い目に会うことも少しはあるだろう. それはどのような問題で, どう解決したのか. あとは何より, 今や皿洗い機にエンコードされた皿洗いの知恵は何だったのか. そういう技術を整理された形で読んでみたい. "プログラマのためのインフラ入門" が読みたい. 皿洗い後進国では切実な願いだと思う.

"まぶしくて まぶしくて 少しだけ嫌いで あこがれてた"

だいたい言いたいことは言ったかな...

もとねたの短編で, 姉は妹にこう告げる.

あたし
朝ちゃんがずっとうらやましかった
...
あたしは周りの人に嫌われるのがこわくて
いつもにこにこしながら
自分では何も決めないずるい子でいたから

まぶしくて まぶしくて
少しだけ嫌いで
あこがれてた

姉であるプログラマが妹ロールのエンジニアに抱く気持を一片は表しているかもしれない. 皿洗いは機械をめぐるテクノロジーの物語であると同時に, 姉妹の邂逅をめぐる家族の物語でもあるのだ.

あ, 本を出すなら表紙は谷川史子でどうかよろしく.