就職して9年が過ぎる

転職して7年が過ぎたというのを読んで気づいたんだけど、そろそろ入社後9年が経過したらしい。僕は結構長い期間をここで過ごしたことになるんだなと思った。ちょっと以前のことを振り返ってみようと思う。言うまでもないけどこれは僕の書ける範囲での個人的な感想と体験談であって会社の見解等を表しているものではない。

きっかけ

わりと重要でない

Borgチーム (の周辺)

いつのまにやらBorgという名前を普通に言って良くなっている。嬉しい。まあ当時もぶっちゃけ、秘密だから出してないっていうよりは、単に誰もアカデミア的なキャリアに興味が無いから出してなかったんだと思う(私見)。

さて、当時Borgというかクラスタマネージメントのあたりでは、コンピュータのリソースて適当にたくさん使ってるけど、これ節約したらすっげー支出減ったりしない?みたいなのがホットで、なんかとりあえず色々な人々が色んなことをやっていた。いくつかうまくやったチームがあって、実際すっげー減ったんじゃないかな。最初の3ヶ月は練習期間的な感じで、そういうのの一つでチマチマPython書いたりしてた。

で、日本に帰ってきて僕の入ったチームでは、色々なクラスタの変更の結果が予想しやすくなる、みたいなのを作っていた。Borg自体のコード使ったりもしてたこともあり、ちょっとパッチ投げたりもしたけど、まあ総じて重要度はそれほど高くないプロジェクトだったのかなぁと、今となっては思う。でも新卒で入った僕にわかるわけもなく、そしてエンジニアリング的にはすごく勉強になった。指導してくれた人達がすごかった。

glog (憧れの20%プロジェクトは80%より楽しくなかったでござるの巻)

当時僕はGoogleさっさと辞めると思っていた。しかしGoogleにあるものは色々便利なので、なんか色々opensourceになってると良いなあとか思っていた。Google入って最初の頃に特に感銘を受けた文化に、とりあえずログ残して、用途は後で考える、てのがあった。ログつーとアクセスログみたいなやつと、プログラムがこんなことあったぜ、て端末に吐き続けるログがある。前者は当然すさまじく重要なんだけど、後者も有意義。

まークラウドみたいな環境だと、たまーに起きた問題にgdbで対処する、なんてのはあまり現実的でないことが多く、ログとコード見比べて、ああここNULLになりうるな、みたいな感じのデバッグシーンが多い。まあそんな感じで、使いやすいロギングライブラリがあるってのは重要なのである。

で、このくらいの規模感のものなら僕個人でもopensource化とかできないかな?とか思ってやってみた。当時社員番号3番(つまり最初の従業員)の偉い人が色んなものをopensource化しており(gflagsやperftoolsが一例)、この人に相談するといいかな、って思ってメールしたりした。その偉い人は即日色良い返事をくれていたのだけど、パソコン音痴の僕はgmailにおかしなフィルタを設定してしまっており、彼の返事はなんだか目に入らないところにいっていた。1ヶ月ほどしてから、あれ、そういえばあれ返事もらえてないな?とメールボックスを検索したら返事くれてるのに気付いて、さすがに青冷めた。クソ偉い人にいきなりメールして、即日反応してくれたのに1ヶ月放置するクソ新卒である。その後、クソ新卒のコードレビューをずっとやってくれてたんだから3番良い人すぎた。

そのエピソードと、社内のコードがどう育ってきたかというのを読みつつopensourceとして出せるものにしていく考古学的作業は楽しかったが、リリースしてしまうと、*BSDで動かないとかなんとか、うん、めんどくさいね、てなった。

GSLB (のクライアント)

GSLBてのがあって、これクラスタ内じゃなくて、どのクラスタに行くべき?みたいなレベルのロードバランスしてるんですが、それのクライアントライブラリみたいなのを作っていた。

思うになんかこれは、「なんでこんな当然あるべきもんが無いの?」系のプロジェクトだったと思う。よって、テクニカルにはその前のプロジェクトの方が面白いことをやっていたように思うけど、こっちは作れば確実に成功するていう。僕が言い出したとかでは全然なく、指導してた偉い人がUSに行って面白いネタ無いって聞いてきて、こいうのあるらしいからお前やったら、て言われて気付いたらテックリードという象徴天皇みたいなのになってた。

GSLB上流てのはクソ忙しいチームであり彼らとのコミュニケーションが必須ということもあり、たいしたコード量じゃないのにすごい時間がかかる…みたいなプロジェクトだったけど、まあなんか評価はされるみたいな不思議な感じだった。テックリード的な役割て俺向いてないなぁ…とも感じた。でもびっくりするくらいコード書いてない割には評価は悪くないんだよね不思議。

なるほど、企業というのはコーディング力じゃなくて会社に対するインパクトで評価するのだな、という当たり前のことを実感したように思う。

Chrome (で落穂ひろい)

小さいチームはコミュニケーションコスト的に損、ということでインフラぽいプロジェクトが解体される。今思えば、目をひくほどの成果があるわけでも無い、という要因も重要だったと理解している。評価は悪くはないというだけであり、まあ誰にでもできることをやってたという感じで。

僕はなんとなく something new …てことで Chrome に魅かれていた。周りの人はそうでもない人が多くて、2,3人で Chrome やるぜって盛り上がってたと思うんだけど、 Chrome の当時の偉い人が日本に来て、 html5 やるぜーて騒いで、なんか周りの人も乗り気になった。そして東京に Chrome の結構大きい部隊ができた。

まわりもほとんど全員 Chrome 初心者、みたいな感じなので、みんなパッチ修行と称して、細かいバグ潰しては周りの人と情報交換して…みたいな感じでコードベースに慣れていった。割と適当なバグを重要性無視してプチプチ潰す、みたいなのは好きなので、まあプチプチしてた。当時 Chrome てコードが割と雑然としてて、僕綺麗な環境で働くより雑然としたとこの方が得意だってのもあって、まあまあ効率は悪くなかった気がする。やってた作業が重要なものだったかは謎だが。まあEUC-JPのURLコピペして動くようにとかは普通に役に立ったんでないかな。

WebKit (Appleとの謎の関係)

ある程度 Chrome に慣れたら、 html5 の機能を実装していこう、みたいになって、手つけられてない CSS3 とかやったら、みたいなことで WebKit に親しんでいった。そこで CSS の細かいバグプチプチなんかもやったのだけど、それよりも WebKit の開発サポートツールみたいなスクリプト群の出来の悪さや、コーディングスタイルはあるが強制されてないのでみんな破ってる、みたいな状況がうへえ、て思って、後半は C++ より開発サポートツールのために Python 書いてることが多い、みたいな感じになった。

そんなこんなで難しい C++ のコードとか書かずに Python パッチ量産した結果、パッチ数だけは溜まってる上に、やってる作業的に Apple の人に悪印象持たれてないということもあってか、割とさっくり WebKit reviewer というのになった。あとその後は印刷系の CSS3 のなんかとか少しやったと思う。

WebKit は総じて Chrome よりさらに雑然としてたのもあり、やるべきことが無数にあって、まあなんか思いついたとこいじるみたいな感じだった。何をやるべきかって考える時間が無いてのは僕にとっては良いことで、総じてそれなりの効率だったように思う。やってた作業が重要なものだったかは依然として謎だが。次のプロジェクトに移った後で起きた Blink フォークにはびっくりしたな…

goma (名前に意味はない)

東京オフィスでなんか面白いことやろうぜ、ということでオフィス内アイデアコンペみたいなのが行なわれる。アイデアの段階で半分死に、1週間でまた半分、1ヶ月でもう半分、みたいな感じのやつ。

当時 Chrome の開発には割と満足してたけど、グーグルの社内コードベースに比べて格段にビルドが遅いのがむかついていた。で、社内にあるスゴdistccみたいなやつを、そのままパクったらいいんじゃね、的に goma てのを始めた。社内のやつは社内コードベースに特化してるのだけど、まあそうじゃないとこから簡単にセットアップできます、みたいなコンセプトで。

なんかビルド2,3倍くらいは速くなったなー、ユーザ増やすために宣伝しないとかな?とか思ってるうちに、USのちょっと人気者みたいな人が、「goma 試したけど、これあればdistccとかもういらねーよOMGOMG」的なことを言ってくれたので、苦手な宣伝作業というのをしないでも勝手に流行った。なんか気がついたらChromeチームは全員goma使ってた。口コミの強さよ。

みんなが使うと色々問題が起きたり、新しいコンパイラが欲しいとか言ってきたり、などなど…ということでぼんやり平和に過ごしていた。この時 Mac サポートのために半分ネタで作った maloader が本当に使いものになったのは愉快なできごとであった。

ARC (低レイヤおいしいです)

当時僕は Google Native Client というやつの大ファンだった。今でもグーグルが作った一番クールなものの一つくらいに思っている。それの上で Android アプリを動かそうとしてるプロジェクトがある、という噂を聞いていた。入れてもらえないかなとか思ってたら、なんか長期出張から一時帰国してた同僚が誘ってくれて、やることになった。

これはもう本当に想像よりもクレイジーなプロジェクトに、すごい優秀な人達が全力で挑んでる、みたいな感じですごい楽しかった。僕はだいたい、3ヶ月くらい楽しーて仕事したと思ったら、ぼんやり気味な期間が後で来ることが多いんだけど、この時は1年近く楽しさが持続してたと思う。

POSIXPOSIXじゃないものでエミュレートしたり、BionicていうlibcをNaClにポートしたり、seccomp-bpfをNaClの強いsandboxのかわりに使うモードをNaClに足したり、みたいなことやってた。つまり何やってんだかよくわからないことやってた。

僕、社内で ChromeAndroid の存在を知った時は、「なんてアホなプロジェクトだ、こんなの成功するわけない!」て思ってたんだけど、数年後にはその両方とからむプロジェクトをしてたってのは、僕の先見性の無さがよくわかる話だと思う。

NaCl Development Environment (趣味20%)

NaCl ファンとして 趣味で TinyCC を NaCl にポートした上に NaCl にリターゲッティングしたりしてたんだけどGCC もポートしたりしてたので、 NaCl ターゲットの nacl-gcc を NaCl 上で動かす遊びとかをしてた。

ついでに基本的な Unix ツールBash on NaCl の上で動くようにしたりと。つまり Chrome だけあればネットワーク無しでも開発できる、てのが夢というわけ。

したら NaCl チームの人が気にいって、なんかよくわからないクロームエクステンションを作ってくれてた。

https://chrome.google.com/webstore/detail/nacl-development-environm/aljpgkjeipgnmdpikaajmnepbcfkglfa

kati (負けない)

Chrome から Android に移った人が、ビルド遅くて不愉快、 ninja+goma 良かった、みたいなことを言っている、という噂を聞く。 goma 時代にちょっと見た時はとりあえず make がアカンすぎるという感想で、 ARC 時代に Android.mk をだいぶ見慣れてたこともあって、「あーありゃGNU make作りなおすんが手っ取り早いね」「んじゃやってみろ」てな感じでやってみた。

なんか色々トントン拍子でいって、これも宣伝工作とかを特にすることもなく、 Android 原住民が超協力的な感じで、あっというまに Android にチェックインされ、 kati+ninja がデフォルトになり、 make でビルドする手段が消された。

最近は Android.mk の方も少しいじったりしてる。

総じて

自慢じゃないけどキャリアパスとか微塵も考えてなくて、偉くなるには人を指導しなければ、みたいなアドバイスは左の耳から出ていっているので、特にそういう点では、なんの参考にもならないと思う。思うに僕は運が良いと思う。そういう意味でも参考にならないと思う。まああと環境的にも他の企業とだいぶ違うと思う。

でもなんか、特に最近意識的にやってて、結構他の人/環境でも適用できるんでないかなと思ってることとして、小さい投資をたくさんする、てのがある。例えば kati 始めた時とかは、 GNU make のクローン作るとかいかにもできなさそうなんで、「とりあえず一ヶ月ください無理そうならさっさとやめます」みたいな感じではじめた。僕は普段、もう少し細かい単位でも、例えば「来週やってみてダメそうならやめる」みたいな感じで時間を無駄にすることをかなり頻繁にやっている。そういう試みの半分以上は失敗に終わるけど、たいして時間を投資してないのでたいした問題にならない。

これについて、個人的に重要だと思ってることがいくつかあって。まずあまりマジメに相談せず勝手にやるってこと。相談すると、5割くらいの確率で「俺がやってるプロジェクトでその問題は解決するよー」とかいう返事が帰ってくる気がする。やる気が損なわれる。「それうまくいかないと思うよ」て言われてやっぱり失敗したら恥ずかしいよね。明らかな結論が出ない場合、どっちのアプローチが優れてるかとか机上で考えるのも時間のムダ。1週間から1ヶ月しか投資しないなら、作ってみて比べりゃいいんで。あと少人数でやること。人数増えると引っ込みがつきにくくなっちゃって、失敗させるのが難しくなると思う。要はサンクコストでかくしないてことか。当たり前の話だなあ。

あと投資対象、なんとなくだけど、ぱっと思いついただけの、いかにもダメそうなアイデアが割とうまくいく気がしている。「次なにするべきか…」とか熟考した上で出てきたそれっぽいアイデアとか、なんでか知らんけどだいたいうまくいかん気がする。ちょっと理由を考えてみると、ぱっと思いつくようなアイデアは本当に必要性があるからぱっと思いつく、みたいな話かな。

小さい投資たくさんするってのは、割とグーグルから学んだことのように思う。僕がグーグルのいいところだと思ってることに、プロジェクトをガンガン潰す、てことがある。それも失敗してるプロジェクトだから潰す、とかいうレベルじゃなくて、成功してないプロジェクトはふっと潰れるし、小さいプロジェクトは成功してても潰れる。これ、潰されるプロジェクトの人としては、もちろんガッカリ事件になる(特にこれといった失敗をしてない時)。僕も Chrome に移る前に少しガッカリしたと思う。

でも、細かいのガンガン潰さないと、リソースに限りある中で新しいことできないんだよなーと気付いて、なんか新しいことできたから、むしろ潰してくれてありがとーと思うようになり、これ日頃の仕事的にも良い考え方だなーと思うようになった。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h