グーグル エンジニアのまじめな日常コードを書きまくる

» 2008年06月11日 00時00分 公開
[荒井亜子,@IT]

 グーグルがどのようにソフトウェア開発を行っているかは、これまであまり詳細が明らかにされてこなかった。だがグーグルは6月10日、開発者向けイベント「Google Developer Day 2008 Japan」を開催し、グーグルのソフトウェアエンジニアがグーグルでの仕事術を語る「Google ソフトウェアエンジニアの日常」という講演会を実施した。スピーカーは、NECでITエンジニアとして勤務した経験がある藤島勇造氏。2006年からグーグルのソフトウェアエンジニアとして働いている。藤島氏は、グーグルでのソフトウェア開発方法について、グーグルのカルチャーと自身の見解を織り交ぜて語った。

グーグル ソフトウェアエンジニアの1日の流れ

グーグル ソフトウェア エンジニア 藤島勇造氏

 藤島氏の1日は、朝10時ごろ出社し、メールをチェックすることから始まる。この時間にメールを見る理由は、米国にいる同僚に連絡が付きやすい時間帯だからだ。

 午前中の主な仕事はコードレビューだ。これに約1時間を使う。コードレビューは複数の視点が入るため、1人では考え付かなかった問題に気付けたり、良い策が見つかるなど得るものが多いのだという。

 昼食はカフェテリアで同僚ととる。グーグルは社員に飲食物を無料で提供している。午後は、メールを無視して一気に3時間コーディングをし、その後コーヒーを飲みながらTech Talkを聞く。Tech Talkとは、社内の技術講演会で、自分がかかわっていないプロジェクトの話や、技術的にホットな話題を聞くことができる。Tech Talkを聞いた後はまたコーディングに取りかかり、夕食後にもコーディングをするので、1日合計3回コーディングを行う。

ある日の藤島氏のスケジュール

 上記写真の背景ピンク色の部分は、藤島氏が狭い意味でのソフトウェア開発にかかわった時間。全体と比較して、本業であるソフトウェア開発に割いているている時間の比率が高いことが分かる。

グーグルのソフトウェア開発方法

 グーグルは20カ国を超える国に50カ所以上のオフィスを構えている。すべてのオフィスの位置付けが対等で上下関係はない。全世界で1つのグローバルなエンジニアリング組織を形成しているという意識の下、エンジニアは自分が住んでいる場所から近いオフィスで開発をするという形を取っている。

 単一のオフィスで完結しているプロジェクトは少なく、ほとんどのプロジェクトが複数のオフィスに分散している。そこで問題となるのがコミュニケーションだ。藤島氏は「文化の異なる人同士が母国語でない英語を使ってコミュニケーションを取ることが多いため、誤解を避け、相手の負担を無用に増やさないように、正確で簡潔なコミュニケーションを取ることを心掛けている」という。コミュニケーションツールは、メール、チャット、ビデオ会議、電話、出張、グーグルドキュメント、ブログなど、効率を上げるために使えるものは何でも使う。

 開発はオープンに進められており、1つのソースツリーを全員で共有し、エンジニアはほぼすべてのドキュメントやソースコード、データに自由にアクセスできる。例えば、あるグループのコンポーネントを利用したいが、そのグループのコンポーネントの中にバグがあった場合、そのグループのメンバーに問い合わせることなく、自分でコードを直すことができる。もちろん、第三者レビューは要するが、手が空いている同僚から承認を得られれば、仕事を早く進めることができる。上からの指示待ちではなく、常に自ら動く。これは、グーグルの開発手法がトップダウン方式ではなくボトムアップ方式であることにも関連する。

 藤島氏は、「プロジェクトは、カーネルやコンパイラ、ユーザーインターフェイスに関わるものなど、ものすごく種類が多いが、ほとんどのプロジェクトがボトムアップ的に始まったものだ」と述べる。エンジニアがアイデアをひらめいたら、まずは「20%ルール(勤務時間の20%は自分の好きなことをするルール)」のプロジェクトとして開発する。ここで認められたらメインプロジェクトとして開発できる。20%ルールで認められ、社内で利用され、ベータ版で利用されたものが正式リリースされる。アイデアが認められる基準は特に定まっていない。ガチガチに決め事を作らないのがグーグルの社風だ。自分のプロジェクト以外でも興味があれば参加できるところからも、行動の自由度の高さがうかがえる。

 しかし、ソースコードの書き方には決まりはあるのだという。現在プログラム言語は、C++、Java、Python、JavaScriptが主流とのことだが、これらはすべて言語ごとにソースコードの書き方が決まっていて、エンジニアがどの言語で開発をするかはエンジニアの適性を見て決めるのだという。なぜここまで徹底しているのか? それは、グーグルがソースコードの品質の向上と維持に非常に力を入れているからだ。先ほど、藤島氏の1日のスケジュールで、午前中にコードレビューに1時間をかけていることを紹介したが、「良いソフトウェアを作るにはどうすればいいかを真剣に考え、かっこいいことだけをやるのではなく、必要ならば泥臭いこもいとわない」(藤島氏)。グーグルのソフトウェアエンジニアといえど、意外に地道な努力を重ねる様子が伝わってくる。

例外の仕事は、採用活動と業績評価

 グーグルのソフトウェアエンジニアは、ソフトウェア開発に集中できる環境にあると先に述べたが、例外が2つほどある。その例外の1つが採用活動への協力だ。現場のエンジニアが、電話での選考やオフィスでの面接をする。選考および面接では、コンピュータサイエンスの基礎や、ホワイトボードを使ったコーディングの質問、グーグルの社風に合うか、つまり応募者が入社したときにお互いハッピーになれるかを確認するという。藤島氏は「採用活動は一生懸命やるから時間も労力もかかって大変。でも、応募者へ質問をすることで自分にとっても勉強になるため良い制度だと思う」と採用活動への協力の重要性を述べる。

 もう1つの例外が業績評価だ。マネージャだけが業績を評価するのではなく、一緒に働いた人同士がお互いの業績を評価する。「社員への負担は大きいが、密に仕事をしている人同士で評価し合うので正確な評価に近付く。また、マネージャうけする派手な仕事をしている人が得をするのではなく、地味だけど重要な仕事をしている人にも正当な高い評価が与えられる」と藤島氏は述べる。一緒に働くエンジニア同士が信頼し合えないと成り立たないシステムだ。

グーグルのソフトウェアエンジニアってどんな人たち?

 オフィスに上下関係がないように、エンジニア同士にも上下関係がない。それ故「フラットで、正論が通りやすい」(藤島氏)のだという。「例えば、Pythonの作者がPythonについて書いたメールに対し、大学を出たての新人エンジニアが『間違っている』と意見をした場合も、極めて淡々と議論が進められる」。問題が発生したら、議論の中身に集中し、解決策を真剣に考える。どんなに議論が白熱しても個人攻撃になることはない。

 講演の最後、藤島氏がグーグルで働くうえで心掛けていることを教えてくれた。1番大切なことは「良い仲間であることだ」と述べる。「自分は良い仲間になれているのかを常に意識している。どんな会社でも同じだと思うが、人と人とのやり取りで仕事は進む。相手に良い仲間だと思ってもらえるように頑張りたい」(藤島氏)と話す。

 なお、昨年のGoogle Developer Day 2007でも同様の講演を鵜飼文敏氏が行った。「Software Engineer in Google」と題されたこの講演はYouTube上で公開されている。同社は今年の講演もYouTubeに近日中にアップロードする予定という。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。