megamouthの葬列

長い旅路の終わり

ずっと夜で

入った会社はWebサービスをやっていた。アクセスカウンターとかレンタル掲示板みたいな、そういうプリミティブな感じのウェッブ。今でも化石みたいに残っているとこがあるよね。teacupとか。もうないか。
当時はそういうことをしている会社をASP(Application Service Provider)と呼んでいて、「うちはASP事業やってるんです」と言うと通りが良かった。
名刺代わりっていうのかな、何が出来るのか、うちはこんなに技術力あります、ってのをさ、運営しているWebサービスで表現するわけ。同業者が集まったらさ、世間話している風で、自分とこのサービス自慢しまくるんだよね。なんかこう、いやあ負荷高くて、この前もサーバー落ちてぇとか、うちのユーザーは中学生が多いんでぇとか、今で言うマウントの取り合いだよね。どこも流行ってないからさ、意味のわからないとこで競ってるんだよ。

プログラマ的にはAjaxとか無かったから何やってもページ遷移しちゃうわけで、セッション使える、ってのがまずステータスだよね。ブラウザのページ遷移でアプリみたいな使い心地をどう実現するかっていうところでしのぎを削ってた。結局、決定ボタン押すたびに画面真っ白になってローディングするんだけどね。全然近づいてなくてヤバいんだけどさ。夏休みの工作で画用紙入れ替えてテレビ作ろうとするみたいな感じ、でも、なんかそういうのが偉かったんだよ。


儲からなかったよね。うちみたいな零細でも4000万PVはあって、アクティブユーザーも1万ぐらいかな。ブロガーだったら豪華客船に乗るぐらいの収入にはなるんじゃない?知らないけど。でも昔だからいい商材ってなかったし、サービスと広告って相性悪いからさ。
普通に考えてフッターのバナーとかクリックしないじゃん。ブログ書いてて、気になったからっていきなりフェロモン香水買わないじゃん。CTRとかクソのように低いし、成果報酬なんて嘘みたいにもらえなかったよね。収入が3万ちょっとの月とかあったよ。サーバー代で消えるわっていう。

そういや、サーバーもひどかったね。さくらの専用サーバー1台きりでさ。そこに3万ユーザーぐらい押し込むわけ。100M共有回線。8Mぐらい出たら調子いいなって感じだったかな。シングルコア、メモリ2GでApachePostgreSQL同居とかでさ。今だったら頭おかしいんか、って構成だよな。はてながラックに自作サーバー詰め込んでるの羨ましかったな。社員の車でデータセンターの引っ越ししてたよね。2シーターのインプレッサに物理サーバー積み込んで。それ京都の峠攻める車じゃん、他に車ねえのかよっていう。どうでもいいか。

ASPって楽しいんだよ。Webのダイナミクスっていうのかな、リリースするじゃん、すぐ誰か見るじゃん、そんでポコポコってアカウントが増えてくわけ。tail -f で流れるログがさ、みんなIPが違っててさ、色んな人が自分の書いたあのコード動かしてるんだ、っていうのがみんな見えるんだよ。うわあってなる。じんわりなる。今の人も味わうべき。でも2chに使えねーサービスとか書かれてムカついたりするんだけど。一切言及されないのもそれはそれで落ち込むんだけどさ。

あの当時、ASPって見栄だったよね。零細企業がWebサービスなんてまともに運用できるわけないんだよ。そもそも。今と違ってサーバーもバッタバタ落ちるわけよ。それを24時間365日監視するわけ。無理に決まってるじゃん。nagiosで異常レスポンス出たら、個人の携帯にメール飛ばすようにしてさ、*CRITICAL*とか見てゾッとしてさ。GWも夏休みも正月休みも、みんなつっても3人しかいないんだけど、調整して必ず一人は連絡取れるようにしてね。それでも実家にいる時に電話かかってくんだけどさ。なんとか帰ろうとしてね。なんであんな一生懸命だったんだろうね?

ロードアベレージが跳ね上がって、まさかの100超えとかね。スワップが遅すぎてプロセスが動かないわけ。FreeBSDってそれでもログインできるんだよ。入っても何もできんけど。
ガン上がりしたテンションで復旧作業したね。深夜にタクシー飛ばしてさ。手当とか一切出ないんだけど、ユーザーが困ってると思ったら胸がキュッとするし、義務感にかられてたね。作業中にオフィスの電話が鳴って、思わず出たらユーザーだったとかそういう時代だから。電話口で「困ってるんです」って延々言われて、うーん。気持ちはわかるんだけど、あなたの話を聞いてる限りずっと復旧しないんだよね、っていう。

カーネルチューニングとか、MySQLのパラメーター調整とかさ、StackOverflow無し縛りだからね?ねえんだよ情報。技術記事書いてるの、オフコン育ちの自宅サーバーおじさんとかだからさ、インストール記事で終わりなんだよ。そういうシステムを余裕のないサーバーで超ハードに使ってるの、零細でWebサービスやってる馬鹿しかいねえからさ。
ノウハウがないわけ。今まさにサーバーが止まってるのに、試行錯誤するしかないわけよ。色々やったな。誰かがCで書き直してApacheモジュールにしましょう!とか言い出した時はさすがに止めたけどさ。そういや、はてなMySQLのデータファイル全部RAMディスクに突っ込んで「すっげえ速くなった」とか言っててさ、そら速えだろうよっていう。しかも何かのイベントの時にそれを得意げに海外のコミッタに言ったらしくて、普通に"insane"って返されてたよね。あれめっちゃ笑ったわ。


一つだと全然儲からねえから、次々サービス作って、リリースしたよ。今思うと普通に受託やりまくったほうが明らかに効率いいんだけどさ、あれやってると心がすさむからさ、日銭稼いでいる間に、サービス作って一発当てるぞみたいなね。そういう希望にすがりつくアホみたいな戦略。みんなよく付き合ったよね。

なんかFlickrが日本で話題になった頃だったかな、なんかうちも写真関連で一つ、ってなってさ。Flash得意な子が、いい感じのスライドショー作れたからさ、これコアにしてやろうかってなって。なんか半年ぐらいやってたんじゃないかな。受託の合間に作ってるんだけど、全然完成しないの。ユーザーフォーラムまで自作してたから。アホかっていう。

そうこうしてるうちにライブドアFlickrのUI丸パクりしたサービスリリースして、丸パクリはさすがに炎上したんだけど、なんかそのサービスもイマイチ流行らなくてさ、あれ?って思ってたけど、いい加減リリースしないといけないから発表してさ。

バイラルとかないからさ、なんかよくわからないプレスリリース代行みたいなとこに頼むわけ、1万でいろんなとこにリリース打ってくれるみたいな。まあFAXしまくるだけだね。
なんの反響もなくてさ、2ch見ても一切載ってなくてさ、かかってくる電話、全部「FAX拝見しました。それはそうと、うちに広告出しません?」みたいな営業だけでさ。あれれ?ってなって、しばらくたっても、ほとんどユーザー増えなくてさ。

なんかその時に、終わったのかな、って思った。みんなそう思ってたんじゃないかな。もうこのメンバーでサービス作っても、リリースは遅いし、クオリティも低くて、戦えないんだな、って。

朝、会社出たらみんな気落ちしてるわけ。なんとか慰めようと思ってさ、Human LeagueのOctopusってアルバムがあるんだけどさ、って話してさ。ボーカルのフィルが言ってるわけよ。「確かにこのアルバムは売れてない。でもこれは、落ち目のバンドが何かを見出して作ったアルバムなんだ。僕はこのアルバムが大好きだよ」って、何の話なんだよ。でも実際、気に入ってたよ。管理画面の一生懸命な感じとかさ、アップロードが快適にできるようにした工夫とかさ。まあでもユーザーはつかなかったよね。最終的には100人ぐらいだったんじゃないかな。


そうやって、けっこうなサービスをリリースしてきたけど、なーんもないよ。エキサイティングな仕事も来なかったし、お金にもならなかった。最後には体壊して会社辞めちゃったし、いつのまにかサービスも全部無くなったらしいし。あのへんのサービス、今でも覚えてるユーザーが何人いるんだろうね。こっちは古すぎて職務経歴書にも書けねえよ。

たまに思い出すんだよね。夜中の3時に汚い雑居ビルの一部屋だけ蛍光灯がついててさ、タクシー降りて駆け足で階段昇っていってさ、先に着いた同僚がブラウン管ディスプレイ睨みつけててさ、TIMEWAITという文字が並んでてさ、すっげえ焦ってるんだけど、どっか冷静でさ、ガラス窓から自動車のヘッドライトが入ってきてさ、すぐに静かになってさ、音のしない街があって、動き続ける時計があって、点滅するIntel NICがあってさ。

だから、ああいう夜は良かったよね。目が冴えて、変な笑いがあって、全然疲れない体があって、今思うとさ、それはずっと夜だった気がするんだよ。


Octopus

Octopus

プログラマのためのビジネス・マナー講座

最近、若手のプログラマと仕事をしていると、フレームワークやライブラリの知識はあるのですが、常識が欠けているのではないか、と思う事があります。
業界経験の長い私たちから見ると、ほぼあり得ないようなことを、論理的な正しさだけを基準に決めつけてしまい、結果として営業が苦しむことになったり、クレームに発展するようなケースも見聞きします。
私たちにとって「当たり前」に判断できることを経験不足で判断できずに、同僚から疎まれたり、会社にマイナスの影響をおよぼしているのだとすれば、非常にもったいないことです。

今回は、業界歴20年におよぶ私が、若手プログラマの成長の一助になることを期待して、この業界のごく一般的なマナーをケース別に紹介、解説したいと思います。

商談編

Q.お客様が「Instagramに投稿された写真のうち当社の製品が写っているものを自動的に当社のHPに掲載したい」と仰ったので、「それは出来ません」とお答えしたところ、お客様が渋い顔で黙りこんでしまいました。

A.ご要望を聞いて、「出来ない」と言うのは失礼なことです。

お客様がアイデアを思いついたのに、ろくに検討もせずに不可能だと断言してしまったのですね。
お客様のご要望が仕様的、論理的にほぼ不可能であったとしても、それを口に出すべきではありません。
恥をかかされた、とお客様がお感じになるかもしれませんし、どのようなご要望にもお応えできます、と明言していた営業の面子も潰してしまいます。

プログラマの知恵の集大成であるBSDしぐさ*1にも「無理は持ち帰れ」という言葉があります。このような場合は、にこやかに「ぜひ前向きに検討させていただきます」とお答えしましょう。

そして、営業が帰った後の深夜のオフィスでじっくりと、常識を捨てて、お客様のご要望に向き合うのです。
この事例でいえば、publicスコープのInstagramAPI使用が許可されないケースである、と考えるのは一見合理的ですが、よくよく考えれば、出来ない理由にはならないことに気づくはずです。
例えば、偽装したボットを作ってInstgramサイトをスクレイピングしてはどうでしょう?BANされる?その度に、ボットを起動しているVMインスタンスを捨てて、IPアドレスを変えることにしてしまえばいいのです。自社製品が写り込んでいる写真かどうかの判別は、外注してAIを作ってもらうか、賃金の安い国の労働者に人力で判別させることにします。最後に残った著作権の問題については、弁護士にアウトソースすればいいでしょう。

こうして組み立てたソリューションをお見積書として提出して、出来る、出来ないをお客様に判断していただきましょう。
「出来ない」と判断するのはあくまでお客様なのです。

お客様の素敵な思いつきを、自分よがりの常識で安易に切り捨てないように心がけましょう。

仕様編

Q.仕様書がなく、このままでは実装できない為、お客様に仕様を問い合わせたところ返事がありませんでした。納期が迫っているので自分の判断で実装しましたが、アップ後、思っていたのと違う、とクレームになりました。

A.仕様がわからない時、本当にお客様のことを考えましたか?

お問い合わせをしたのに、返事がなかったとのことですが、なぜ返事がなかったのか、ちゃんと自分で考えましたか?
忙しかった?仕様を考えることができなかった?質問が理解できなかった?まさかとは思いますが、そのように考えてはいないでしょうか?一部のプログラマは簡単にそのような考えをSNSに書き込んでいると聞いたことがありますが、本当に恐ろしい事で、私の時代では考えられなかった話です。

一流大学を卒業したお客様はあなたと違ってシステムの最終的な形を完璧にイメージしています。(そうでなければ、どうして「思ったのと違う」というセリフが出てくるのでしょう?)ただ、それを言葉に出す必要はない、プログラマがちゃんとやってくれる、と私たちを信頼して、任せていただいているのです。

確かに経験のないプログラマにとって、お客様の思い描いたシステムを実装することは困難なことだと思います。しかし、真にお客様のことを思って、おもてなしの心をもってすれば、SEの書いたExcel紙芝居を元にシステムを実装することは容易です。

BSDしぐさにも「勧進帳」という話があります。突然の監査に皆が慌てふためく中、弁慶が、白紙のExcelを開いたSurface Proを手に、さも詳細仕様書が存在するがごとく、朗々と仕様を読み上げて、窮地を脱するシーンが有名です。
その後、どこからともなく飛んできた無数の矢が突き刺さって、弁慶は死んでしまうのですが、プログラマたるもの、このぐらいの覚悟を持って仕事をしたいものです。

スケジュール編

Q.受注の時点で、絶対に間に合わないスケジュールです。どうすれば良いでしょうか?

A.間に合わせましょう。

お客様が希望した納期に納品しないのはマナー違反です。
弱音を吐きたくなる気持ちはわかりますが、無理なスケジュールにも、初期に意味のない会議をしすぎたとか、仕様を決めるのに時間がかかって、結局決まらなかったけど、期末から逆算してスケジュールを決めたなど、やむを得ない理由であることがほとんどです。
工数を削減してスケジュールを短縮するという方法もあります。通常3人日かかる作業を1人日で出来ることにしてしまうのです。これなら最終的な価格も下がってお客様、営業ともにメリットがあります。難点としては、実際の作業は1人日にはならないことですが、そこはプログラマの根性の見せ所です。頑張りましょう。
また、BSDしぐさにも「一日三人日」という言葉があります。一日は24時間ですが、1人日は通常8時間の稼働を指します。よって、1日で3人日進捗することは論理的にも可能といえます。

それでも難しい場合は、最終手段として外注する、という方法もあります。動きの鈍い制作会社ではなく、フリーランスがいいでしょう。在宅ワーク可能でそこそこ高い単価を示せば、外注先はすぐに見つかります。
その際、部分的に任せるのではなく、必ず全面委託にして、丸投げをしてください。フリーランスは少し怯むかもしれませんが、総額をちらつかせて、スケジュールはできるだけぼんやりと伝えるのがポイントです。とはいえ、フリーランスはすぐ怠けたり他の案件をしようとしますので、進捗管理は細かく、とにかく急がせて、一日の全時間を案件に割かせるようにしましょう。
このような進行をしていると、プロジェクトの途中でフリーランスからの連絡が途絶えてしまい、個人携帯に電話してもまったく出なくなってしまうことがあります。この場合でも、納品遅延はあくまで逃げたフリーランスの責任になりますので、少なくとも非礼には当たらないということになります。

実装編

Q.Reactを使ったところ、先輩プログラマに注意されました。仕様上の動作条件は満たしています。何故でしょうか?

A.先輩の知らないフレームワークやツールを使うのは失礼にあたります。

かっこいいから、モダンだから、という浅はかな理由でReactを選んだのなら論外ですが、技術的優位性や保守性の向上を意図して導入した場合でも、先輩がjQueryとBackboneしか使ったことがないのであればNGです。
最近のプログラマはここで、合理的な理由を説明して、先輩や社内を説得しようとしますが、そのような行為はロジハラと見なされる場合もあります。
どうしてもgitなどのツールを導入したいのであれば、先輩が興味を持ってmasterブランチだけで開発し始めるまで待つか、先輩が辞めるなどして、現場を離れるまで待ちましょう。自分が先輩になれば、何を使っても大丈夫です。
その時になると、後輩が自分の知らない目新しい技術を勧めてくるかもしれませんが、その時は優しく無視して上下関係を叩きこみましょう。


Q.なんか嫌になってきました。退職したいのですが。

A.退職は大変失礼な行為です。絶対にしてはいけません。




自分のアタマで考えよう

自分のアタマで考えよう

*1:20世紀にカリフォルニア大学バークレー校を中心に繁栄したプログラマの理想的な振る舞いのこと。代々口伝で受け継がれていたが、その勢力を恐れた明治政府とLinuxユーザーによって全てのBSDユーザーが虐殺され途絶した。

貧乏なおじさんへのささやかな贈り物

ネットバブル前夜、ホリエモンの会社がまだオン・ザ・エッジと呼ばれていた頃、パイナップルカンパニーというWeb制作会社が神戸にあって、社長のおじさんは、ナウいホームページを作ることにかけては関西随一と呼ばれていたその会社に見積もりを依頼したらしいんだけど、イキリにイキリきった営業に、当社は1000万円以下の仕事は請けないんですよ、と半笑いで門前払いされたことをずっとずっと根に持っていた。

おじさんと酒を飲むたび、何度もその話を聞かされるから、パイナップルカンパニーが2002年に倒産して、オーナー社長が行方不明になって、今や神田敏晶の出身企業と説明されるまでに忘れられた、というオチを、僕は何も見ずに書けてしまうほどだけど、きっと、おじさんがこの話で伝えたかったことは、貧乏な顧客を無下にして、高飛車な態度をとっていたら、いつかは商売が立ち行かなくなるんやで、ということなのだ。本当のところはわからないけど。

話の中で哀れな貧乏だった社長のおじさんは、今はもっと貧乏だ。そして僕はその下で仕事をしている。ナウいホームページは作れないけど、そこそこナウいWebシステムは作れるつもりだ。でも、おじさんはお金がない。おじさんのお客にもお金がない。だから僕は、vueやLaravelのことは忘れて、景気の良かった頃に作られたPerlのシステムに、機能を付け加えたり、MySQLデータベースのメンテナンスをしたりしている。

おじさんが申し訳なさそうな顔をする時は、たいてい僕の見積もりが通らなかった時だ。お客が首を振ったのだ。
いったい全体、僕以外の誰が、use Jcode;の、前世紀末の栄華を思わせる継ぎ接ぎだらけの廃墟を引き受けられるというのか。とにかく高い、とお客は言う。おじさんは困る。そして僕は憮然とする、というわけだ。
僕にだって本当はわかっている。お客はなみいるベンダーと比較して、値引きを要求しているんじゃない。お客が比べているのは、「やる」と「やらない」。僕の見積もりは、「やらない」と競争して、負けた。僕たちは「無」と戦っている。

見放されたシステムの前で、5人も入ればいっぱいになってしまう小さな事務所に一人。事務のおばさんは今日はお休みだ。僕は逃げそこなったのか、あえて残ったのか、自分でもよくわからない。ただ動かないシステムが嫌いで、使われないシステムが哀れで、綺麗にリプレースされる日が待ち遠しくて、なんだかよくわからない理由で、僕は今日もPerlコードを追いかけている。

# modified at Jul 06 2001
@files = map $_->[0],sort{$a->[1] <=> $b->[1]} map [$_,-M $_],@files;

もうすぐ、2019年の夏が来る。やあLarry。Perl6の調子はどうだい?


昔は僕以外にもPerlプログラマがいて、このシステムも最初はその人が書いたということだ。社長のおじさんの大学の後輩で、村田という人で、僕が入った頃にはとっくに会社を辞めていて、フリーでちょこちょこ手伝いにくる、といった感じで、時々事務所で見かけるぐらいだった。メガネをかけた白髪のおじさんで、いつも多少酔っていて、人と話す時も目を見ない。視線はずっと何もない空間にあって、話し方も目つきもちょっと狂っていた。
村田さんは新しいものが好きで、事務所に来る度に新しいガジェットを持ってきて、社長に自慢していた。飽きたらそのまま事務所に置いていってしまうので、例えば、棚の上で風景に同化しているポケットポストペットの埃を被ったピンク色は村田さんのものだ。


社長のおじさんが珍しく昼過ぎに出社してきて、見ると黒い喪服を着て大きな白い紙袋を持っていた。僕が聞くと、黙って自分の机に座って、村田が死んだんや、息を吐き出しながら言った。

僕が黙っていると、おじさんは紙袋からなにかを取り出して机に並べはじめた。ところどころが分解されたドローンだった。どうしたんですかこれ、と尋ねたら、あいつが最後に家でバラしてたんや、なんて言うから、僕は寂しい気持ちになって、むき出しになったコイルを見つめていた。
社長のおじさんはどこからか電動工具のケースを持ってきて、ドローンの隣に置いた。
「どうするんですか」
「組み立てる」
と黒ネクタイを外しただけの格好で真面目な顔をして言った。
「動きますかね」
僕は控えめに言った。
「どうやろな」
おじさんが、腕まくりをしてドローンに取り掛かったので、僕も席に戻った。
そして、死人が書いたコードをゆっくりと読み解いていった。

しばらくして、キュイーンという電動ドライバーがなる音がして、僕は思わずおじさんのほうを見た。おじさんがそれに気づいて目があうと、「これでも工学部やからな」と少し恥ずかしそうに、言い訳するように言った。

昔の話やけどな――社長のおじさんはすぐに手元に視点を戻して、手を動かしながら話しはじめた。
通産省のプロジェクトがあってな、元請けはFやったか、なんや商店街の。地域振興なんか、地方の商店街のな、ショッピングサイト作ろういう話でな、実証実験やな、そういうのがあって、全体の予算が何億っていう話。俺も知り合いから声かけられて、イベントの手伝いを請け負ったんや。

おじさんは慎重にパチンパチンと銀色の外装をはめこんでいった。
何億もやで、何億もするショッピングサイトが出来てな。まだamazonも日本に来てない頃や、楽天はもうあったかな。システムが出来上がってみたらな。
そこで、おじさんは念を押すように顔を上げて僕を見た。

「カート機能がなかったんや」
「は?」

僕は呆気にとられた。通産省の役人も、元請けの大手ベンダーも、ショッピングサイトにカート機能がいる、ということに思いが至らなかったのだ。

「みんなが呆れてな。さすがにこれはないやろう、て」
「そりゃそうでしょうね」
「でも、元請けのFはやらん、と。そんな予算はない。言うてな」
おじさんは再び目を落とした。遠くの、ずっと昔に焦点があっているような雰囲気があった。ドローンの緑色のLEDが光っている。電装系はやられていないようだ。

「大揉めに揉めるもんやから、俺も知り合いの伝手を探してな」
パチン。なにかのパーツが小気味良くあるべきところに落ち着く音がした。
「そこで、村田よ。あいつに声かけてな。一人でプログラムしよった。カート機能」
いつのまにか傾いていた夕日が、雑然とした事務所に差し込んでいる。
「100万や。一人で100万でな、やりよった」
おじさんが持ち上げたドローンの銀装が光った。



僕たちは夕方の河川敷にいた。Yシャツだけになったおじさんがドローンを片手に草むらの中に入っていく。
「大丈夫ですかね」
と僕はあたりを見回しながら言った。パトカーのサイレンが遠くに聞こえる。
「どうやろな」
おじさんはドローンのプロペラを手でくるくる回しながら言った。しばらくそうして、静かにドローンを地面に下ろした。
川からやってくる風が、夕日で火照った体をゆっくりと冷やしていく。水と、草と、夏の匂い。

おじさんはプロポを手にした。僕は胸ポケットから煙草を取り出して、火をつけた。
芝刈り機のような音が足元でして、それはすぐに胸のあたりに昇ってきた。
けたたましい音をたてて、ドローンが浮いている。
銀色の安っぽい中国製のメッキが、弱くなった太陽と迫ってくる暗がりの間にいて、僕と社長のおじさんに、かわるがわる頭を下げた。

僕は煙草の煙を吐き出した。
紫煙から逃れるように、輝く機体が、オレンジ色に染まった入道雲の鮮やかなグラデーションに、ひたすら向かっていく、あっという間に小さくなる。
鉄橋を渡る電車の音が聞こえた。


「高いなあ」
僕の隣で、社長のおじさんが夢見るような口調で言った。


季節のない街 (新潮文庫)

季節のない街 (新潮文庫)