2007年06月07日

Google のソフトウェア・エンジニアリング

Google Developer Day Tokyo の鵜飼さんのプレゼンより、「Google のエンジニアはどうやって開発しているのか?」

Google の研修

  • 入社して最初の 3ヶ月は本社(Mountain View)で研修
  • 研修中は、メンターがついて「Google での開発の仕方」を学ぶ
  • 内部ウェブ・サイトで社内共有ライブラリの使い方などを説明する動画があるので、それで自習

Google のプロジェクト・チーム

  • 開発拠点は米国、スイス、オーストラリア、インド、日本など
  • 場所とプロジェクト・チームは関係なく、プロジェクト・チームが拠点をまたがることは普通。世界中の拠点全部合わせて、一つの Google エンジニアリング・チーム
  • 開発はデザイン、コーディング、テスト、改善、デモの運用まで上流から下流まで同じチーム(同じ人)が全部やる
  • プロジェクトはたくさんある。多分、エンジニアの数以上にある
  • チームは少人数 (2〜6人)。これ以上に増えると、プロジェクトのフォーカスを絞ってチームを分割
  • プロジェクト横断的な共通機能(自動テスト、国際化など)は intergrouplet と呼ばれる「プロジェクトをまたがったアクティビティ」として活動

Google のソフトウェア・ライフ・サイクル

  • 基本的にボトムアップ。エンジニアが「こういうのがやりたい」と思ったら、人を募ってプロジェクトにしていく
  • 例の「20% ルール」。「とにかく 20% は、まったく違ったことをヤレ」ということになっている。他のプロジェクトに協力するとか、今までやったことの無いことをやるとかして、新しいアイデアを生み出す
  • 売れるかどうかは考えない。それがたくさんの人に使ってもらえそうかどうかが大事。社内のデモ・サイトで使われなかったり、Google Labs で人気が出ないヤツはまずダメ
  • アイデアが出たら、Design Doc と呼ばれるドキュメントを書く
  • イノベーション重視。デザイン・フェーズで方向性が決まったら、さっさとコーディング
  • 社内デモ・サイトを立ち上げる(デモ・サイトは、社内ポータルからリンクされる)。デモができれば、他の人から意見を貰えて、そこからさらに、どんどんと改善していける
  • 社内デモで改善を重ねた後、Google Labs (βリリース)へ
  • Google Product として登場!

Design Doc

  • Google で必ず書くことになっているドキュメント
  • プロジェクト立ち上げ時の 1〜2週間をかけて書く。ある程度ポイントが書け たら、もうコーディングへ。
  • 一般的にはあんまり長くない。詳細を書かなきゃいけなくなったら、それ はまた別プロジェクトになることが多い
  • Design Doc の内容
    • プロジェクトの背景、目的
    • おおまかな設計(コードを見ただけでは判らないような、アーキテクチャ)
    • プロジェクトの参加者(このプロジェクトに関して、誰に連絡を取ればいいのか)
    • セキュリティやプライバシーについての考察(問題と対処方法)
    • テスト、モニタープラン(運用時の考慮。障害の発見と復旧手法など)
    • レポジトリ上の位置やサーバのアドレスなど
  • コードを書いていると解離していくので、できるだけ解離しないようにアップデート

Google のコーディング

鵜飼さんは普段、毎週 0〜20個のパッチを書く。年間 3万5千行くらい。シニア・エンジニアやフェローになると、もっと書いていて、Google では、偉い人ほどコードを書きまくっている。

  • C++ (インフラ), Java(フロント・エンド)、Python(社内システム)が三大 言語。その他、Sawzall (Google 独自言語)、JavaScript、ActionScript も
  • リポジトリは世界で一つ。チームごとにディレクトリを切ってあるが、全員が 全てのコードを見ることができる。
  • 誰かが書いたコードは、必ず他の人にレビューを受ける。開発者とレビューアーがお互いに合意した時点で、はじめてチェックイン
  • レビューは 2種類。プロジェクト・オーナによるレビューと、readability review (コーディング・スタイルを統一するためのレビュー)。言語ごとにレビューアーがいて、誰が書いても同じコーディング・スタイルになるようになっている
  • ユニット・テストは必須。ユニット・テストを自動で実行するシステムもあり、テストが通らなくなると「直せ」とメールが飛んでくる
  • "testing on the toilet"。テストに関する intergrouplet が、トイレの壁に「テストのコツ」を書いて貼っている。単体テスト普及活動の一環。

Google の開発方針

  • 基本的に「自分たちで作る」。オープンソースは別階層のリポジトリに登録して、自分たちのコードとは区別。オープンソース以外のプロダクトは使っていないはず
  • パフォーマンス重視(まず計測、とにかく計測、良いアルゴリズムの採用、コーディング・テクニックの積み重ね)。Google グラフ書くのが好き。数値化重要。
  • スケーラビリティ重要(いずれは Google Product になるのだから当然)。たくさんのマシンで並列化できるように
  • 信頼性(Google はマシンが大量にあるので、ハードウェアは毎日壊れる。レプリカを作ってデータは多重に持つ。障害監視と自動的な障害復旧に力を注ぐ)

Eric Schmidt の言葉「Don't accept anything less than beign the best」。

Google の情報共有

「創造的であるためには、情報は共有しなくてはならない」がモットー。コミュニケーションは活発で、プロジェクト内はもちろん、プロジェクト間の壁もあまり無い。

  • 様々なデータベース
    プロジェクト DB
    プロジェクトの内容、誰がやっているか、進捗を一覧できる
    アイデア DB
    何かアイデアを思いついたら登録。アイデアのレーティングやコメントなど
    バグ DB
    問題があったときに登録、トラッキング
  • 進捗は snippet (週報。何をやったか、何をするか)を書く。他の人が何をやっているのか、何で困っているのか、どんなウマイことやったのかを、全員で共有
  • ドキュメントは、コードと同じくらい書く。マニュアルとか今後の方針とか頻繁に更新されるものは Wiki。最近は Google Docs & Spreadsheets に移行しつつある
  • バージョン管理は Perforce。Guido van Rossum が書いたレビュー・システム Mondrian(ソースにコメントを付けられる)
  • エンジニア同士のコミュニケーションは IM や ML
  • 一部屋に 2〜4人。同じ部屋で開発。ちょっとしたバッドノウハウをすぐに後の人に聞けるので、個室よりもいい
  • 食事の時間も例の無料社内レストランなので、そこも情報共有の場
  • Tech Talk。エンジニアが自分の知っている技術的な内容を他の人にプレゼンテーションする。Mountain View ではほぼ毎日、日本でも可能な限り頻繁に。聞く方はもちろん、喋る方にもメリットがある
  • ユーザ情報やプライバシー情報は共有されない(ほとんどのエンジニアは触れないように厳密に管理されている)

Google のエンジニア評価

  • Objectives and Key result (四半期ごとに目標と達成度を書く。定量的な数字で書くことが推奨)を、個人、チーム、会社の単位で作っている
  • コード・レビューした人の評価や、ML やビデオ会議での議論内容、Snippet も評価対象
  • Google Resume と呼ばれる履歴書を書く。プロジェクト間を移り歩くときにも必要
  • パフォーマンス・レビュー(評価面接)は年に二回。基本的に本人が指名した同僚が、その人を評価する。上司の評価だとパフォーマンス・レビューのときだけ巧く立ち周る人の評価が高かったりするけど、一緒に働いている同僚のレビューなので、日々の仕事がそのまま評価に反映

Google のエンジニア気質

  • 自主的にやることを見つける。スキルも自分で身につける
  • 上から「何をやれ」というのはまったくない。上司は「こういうプロジェクトがあるよ」とか「これはこの人に聞けばいいよ」とかルーティングしてくれるだけ。エンジニアの視点から見て詰まるところをうまくフォローしてくれるのが上司。
  • 自分で改善すべき点を見つけて改善する。直すべきところを見つけて直す。「でも、それ僕のプロジェクトじゃないから」はダメ。不具合を報告するだけではなくパッチを書くことが推奨
  • レビューが必須なので、個人プレイはダメ。チームでの活動が必須
  • 変化についていく。Google 社内は変化が早い。社内システムの入れ変わりも早い
  • よく働き、よく遊ぶ


heitatta at 03:03│Comments(7)TrackBack(31)Programming 

トラックバックURL

この記事へのトラックバック

1. Googleのソフトウェア・エンジニアリング  [ 自分たち用のメモ ]   2007年06月07日 15:00
メモ。 へ†たのめも:Google のソフトウェア・エンジニアリング - liv...
2. Googlerの仕事の仕方、日本語版  [ あるSEとゲーマーの四方山話 ]   2007年06月07日 18:12
Google Developer Day Tokyo - 鵜飼 文敏 へ〜たのめも:Google のソフトウェア・エンジニアリング - livedoor Blog(ブログ) 1時間の講演をこちらでまとめられてます。感謝。 <てるやん> で、それにコメンダ
3. Googleの話  [ 眠る開発屋blog ]   2007年06月08日 01:57
Google のソフトウェア・エンジニアリング 断片的には知っていた情報ではあるけどよくまとまっているね。 ところでGoogleにはエンジニア以外の社員も沢山存在しているわけだが、彼らはどういうふうに働いているのかな。 エンジニア系の話は割と外に出てきているので、そ...
4. [google]Google のソフトウェア・エンジニアリング  [ サタケ家 ]   2007年06月08日 09:27
Google のエンジニア気質 自主的にやることを見つける。スキルも自分で身につける 上から「何をやれ」というのはまったくない。上司は「こういうプロジェクトがあるよ」とか「これはこの人に聞けばいいよ」とかルーティングしてくれるだけ。エンジニアの視点から見て詰まる
5. 参考:「Google のエンジニアはどうやって開発しているのか?」  [ YANOSHIN's Mind Garage ]   2007年06月08日 13:34
「へ??たのめも」さんとこのエントリーにあった「Google のソフトウェア・エンジニアリング 」を発見。Google Developer Day Tokyo での鵜飼さんのプレゼンがわかりやすくまとめられていました。 最近、あるきっかけで異様にGoogleへの興味が沸いてきているのですが、その理...
6. Google Engineerの話  [ ueblog ]   2007年06月09日 23:50
Google Depveloper Day Tokyoには行けなかったが、 Google Developer Day 2007 東京のセッション公開ビデオまとめ でYoutube動画が見れる。便利になったものだ。 その中でも、鵜飼さんのGoogle Engineerの...
7. Google のソフトウェア・エンジニアリング  [ OPC Diary ]   2007年06月13日 21:03
先日のGoogle Developer Dayでの鵜飼氏によるGoogleでのエンジニアリングプロセス、スキームについてのセッションのメモ
8. Googleのソフトウェア・エンジニアリング  [ from area BOOT4 ]   2007年06月14日 20:46
開発はデザイン、コーディング、テスト、改善、デモの運用まで上流から下流まで同じチーム(同じ人)が全部やる   この辺りが既存のエンジニアリングとの最大の違いかな。
9. Google社内で使われている言語は?  [ nhiro.text ]   2007年06月14日 21:22
参考:へ??たのめも Google のソフトウェア・エンジニアリング Googleの社内で使われてる言語はC++、Java、Pythonがメインだとか。Pythonが入っていることに結構驚きました。そして、やはりC...
10. Googleの社内開発体制  [ blog@browncat.org ]   2007年06月14日 22:56
Google社の社内開発体制について紹介しているページ。世界的なWebサービス...
11. 実は重要なのは「他人がはさんでくるくちばしを許容する」事では…  [ おっきぃの、今日はコレぐらいで勘弁してやらぁ ]   2007年06月15日 07:16
『Google のソフトウェア・エンジニアリング』というのを読んで思ったのだが、実は最も重要なのは、『自主的にやることを見つける。』所ではなくその背後にある『他人がはさんでくるくちばしを受け付ける』所ではないか、と思う。多くのエンジニアが『でも、それ僕のプロジェ...
12. Googleでの開発  [ 下請脱出計画100% ]   2007年06月15日 12:45
<a href=\"http://blo...
13. [ライフハック]Googleで働いてみたい  [ ゆうごの日記 ]   2007年06月15日 12:46
多くのライフハッカーがGoogleのサービスを使ってると思うが、色々なサービスを生み出す土壌というか企業風土を以下の記事で垣間見ることが出来る。 http://blog.livedoor.jp/heitatta/archives/54439839.html 読んでるだけですごく楽しそうだし、何より前向きな波動が伝わ
14. 仕事の流儀〜Googleの場合〜  [ Mac遊びの昼食 ]   2007年06月15日 20:24
鵜飼文敏氏の講演の様子が YouTubeとへ〜たのめもにアップされています。 コードを書くのと同じくらい時間をかけて ちゃんとドキュメントを残すってのがさすがですね。 おれがいるような小さな会社だと ドキュメントむe=1
15. Googleの開発スタイル  [ インプット、アウトプット ]   2007年06月16日 00:01
「Google のエンジニアはどうやって開発しているのか?」について、Googl...
16. ぐーぐるさんのやりかた。  [ メンドい。 ]   2007年06月16日 02:27
へ??たのめもさんにGoogle のソフトウェア・エンジニアリングというエントリー...
17. Googleのソフトウェア・エンジニアって?  [ 良いもの。悪いもの。 ]   2007年06月17日 18:45
GoogleではC++, Java, Pythonが3大言語らしいが、自分ではC++, Pythonを良く使っている。特にPythonは何をする上でも必要になってきてる。numpy, scipy, matplotlibは必須。便利すぎ。
18. 目の前の小銭しか見えない大局観のない輩は万死に値する  [ ここギコ! ]   2007年06月17日 20:30
私のよく知る業界では老舗の某A社に、ほとんどの人がGoogle発祥と思...
19. Googleの仕事の仕方  [ Digital Life Innovator ]   2007年06月18日 00:25
大学時代のクラブの先輩で最近Googleに転職した鵜飼さんのプレゼン (かなり前...
20. 「Google」の内側  [ digital dre.am ]   2007年06月19日 05:37
やっぱり、どこのプログラマもドキュメント書きは嫌いらしいですね(ノ∀`*) でもやっぱり大切なんですよね、ちゃんとしたドキュメント。それは重々承知してるのですが、「こちとらコーディングが好きでプログラマやっとるんじゃい」的な幼稚な感情が先立っちゃうわけで…(...
21. Google のソフトウェア・エンジニアリング  [ CyberForest ]   2007年06月19日 09:29
へ??たのめも に、非常に面白い記事があった。 Google のソフトウェア・エンジニアリング
22. 趣味は本気で、仕事は遊び心で  [ ノウアスフィア探検隊 ]   2007年06月21日 02:55
Google のソフトウェア・エンジニアリング(へ??たのめも/2007.6.7)
23. 天国? or 地獄?  [ Soukaku's HENA-CHOKO Blog ]   2007年06月29日 12:08
Googleのオフィス、「ランチが無料」とか「休憩の時の飲み物とかスナックが、一杯おいてある」といった話しは良く聞くが、...
Google Developer Day Tokyo の鵜飼さんのプレゼンより、「Google のエンジニアはどうやって開発しているのか?」 へ?たのめも:Google のソフトウェア・エンジニアリング - livedoor Blog(ブログ) まとめ記事を読むと「偉い人ほどコードを書く量が多い」と書いてあった。
25. Google のソフトウェア・エンジニア  [ WebCrawl ]   2007年07月22日 13:39
<a href="http://blog.livedoor.jp/heitatta/archives/54439839.html" target="_blank">へ〜たのめも</a>にGoogleのソフトウェア・エンジニアの環境やら考え方やらが出ていたので紹介。もともとはGoogle Developer Dayで鵜飼氏が話していたことの書き起こしのようですが色々...
Google Developer Day Tokyo の鵜飼さんのプレゼンより、「Google のエンジニアはどうやって開発しているのか?」 へ?たのめも:Google のソフトウェア・エンジニアリング - livedoor Blog(ブログ)
27. [組織][IT]組織にとっての情報共有のメリット、として思うこと  [ My Image Ltd. ]   2007年08月01日 20:17
可能であれば、はてなやGoogleがやっているような異常なレベルの情報共有をみんなやった方がいい、と最近考えています。 それがどんな情報共有かといえば、 私が、はてなで仕事を始めてまず不思議に思ったのは、彼等が社内で電子メールをあまり使わないことだった。その代わ
28. Google のソフトウェア・エンジニアリング  [ Hinemosu ]   2007年08月27日 21:59
Google のソフトウェア・エンジニアリング googleの社内ルール色々が書いてあるよ。プログラムに関わる人は読んでみると刺激になるかも。 個人的に「リポジトリは世...
29. Google のソフトウェア・エンジニアリング  [ No Comments ]   2010年02月12日 23:33
「へ?たのめも:Google のソフトウェア・エンジニアリング」さんからの転載です。 自分用メモですみません。 Google の研修 入社して最初の 3ヶ月は本社(Mountain View)で研修 研修中は、メンターがついて「Google での開発の仕方」を学ぶ 内部ウェブ・サイトで社内共有ライブ...
30. 2010-03-11  [ teruyastarはかく語りき ]   2010年03月11日 07:18
ほんとにヤバくなってギリギリになるまで相談しない人々: 切込隊長BLOG(ブログ) Lead‐off man’s Blog http://kirik.tea-nifty.com/diary/2010/03/post-1da9.html いつも予防線が突破されるので、いずれにせよ年がら年中修羅場になってるわけだが、 修羅場をこなしている
31. 天国? or 地獄?  [ Soukaku's HENA-CHOKO Blog ]   2015年12月12日 23:21
<div class="posttagsblock"><a href="/Google" rel="tag">Google</a>, <a href="/%E4%BB%95%E4%BA%8B" rel="tag">仕事</a>, <a href="/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA" rel="tag">ソフトウェア開発</a>, <a href="/%E3%83%AF%E

この記事へのコメント

1. Posted by rui   2007年06月08日 00:14
YouTubeをチラ見してこれは誰かがまとめてくれるだろうと思ったんですが、すごくわかりやすくてうれしいです。感謝!
2. Posted by 名無しさん   2007年06月14日 20:15
5 GJ!
3. Posted by 通りすがりの社員   2007年06月14日 22:32
先生、ちゃんと元の会社に帰って来てくださいよ・・・
4. Posted by groove   2007年06月15日 18:46
s/beign/begin
5. Posted by marinworld   2009年08月15日 07:00
5 初めてコメントします。この記事、とてもわかりやすいです。今後もグーグルさんには、しっかりとがんばってもらいたいです。グーグル様のことが大好きですからね。評価も最高にしておきますね。
6. Posted by ユッキー   2013年04月30日 20:35
はてなブックマークからきました

とても参考になりました

ありがとうございます
7. Posted by 毒舌野郎   2013年04月30日 22:01
なるほど

参考になりました

他の記事も拝見させていただきます

ありがとうございます

記事の更新期待しております

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔