17章 Code Search
GSearchは元はJeff DeanのPC上で動作しており、そのせいで昔、Jeffが休暇に出てJeffのPCの電源が落とされた際に全社的な苦悩の原因になった
現代の寓話
Jeff Deanはこういう話に欠かないですね
先週これをきいてぐぐったら全盛期のイチロー伝説みたいなの出てきた
力点がコードの検索から閲覧へと変わった。近年のCode Searchの開発は、ある程度まで「コードに関する来るべき質問に1クリックで答える」の原則手動で進められた。
言うは容易いけど、実現できるのがすごい
これは本当にそう。なんだかんだで、高速IDEを作るのと変わらない。
17.1 Code SearchのUI
17.2 グーグラーはどのようにCode Searchを使うか
17.3 何故独立したウェブツールなのか
Code Searchの長所の1つは、Code SearchはIDEではないという点だ
なるほど。
17.1, 2は「IDEでできるじゃん」と思っていたが、そもそもエディタとコードジャンプとは全く別の機能であることは盲点だった
モノリポとのシナジーで、社内での車輪の再発明を防ぐことができる
ライブラリのコードは検索できないのが欠点
フレームワークの上で開発していると読まないといけないことが結構あるので、これは大きな欠点
特に動的型付け言語だと元のコードを読まないとわからないケースが多い
他の開発者ツールとの統合
Googleでしか得られない大きいメリット
本文中で紹介されているログ解析系のツールの他に、エラー監視ツールやAPMなども考えられる
普通の会社でやるSaaSの組み合わせでは絶対に得られないメリット
GitHub連携でできるサービスはあるかも?
17.4 設計上でのスケールの影響
検索リクエスト1回あたりほんの1秒の増加でも、毎日約35人のエンジニアが稼働していない状態に相当する
こうやって言われるとすごい数字だ
開発者を生産的な「フロー」状態にとどめておく最良の方法は、頻繁に起こる操作全てについて200ミリ秒以下のエンドツーエンドでのレイテンシーを目標とすることと、それらの操作に対応するバックエンドに投資を行う事である
すごい。。
17.5 Googleの実装
n-gram
静的解析をしっかりやってるのかと思ったら、全然そんなことはなかった
けどこれのおかげで言語を問わず正規表現も使えるCode Searchが実現できているので、シンプルなことの良さが活きているなと思った
静的解析をちゃんとやるんだったら新しい言語の採用が難しい上、静的型付け言語に偏っていそう
割り切った戦略をちゃんととれるのがすごいところ
17.6 選択されたトレードオフ
このトレードオフの話し面白い
17.7 結論
コードの理解への投資は、計測は難しいかもしれないが実利を生み出すだろうと言うことだ
カッコいい
17.8 要約
みんなからのコメント
Googleにしかできないとしたら、それはなぜか?
社外公開版が公開終了したと言うことはそこまで世の中のニーズはなかったのかな
そもそもそんなに大規模じゃない?大規模なコードを見る必要がない?
現在では同じことをGitHubがほぼ実現してしまっている/icons/+1.icon
なるほど!
MSがGithubを買収したのは正解だったなーってあらためて思いました(Googleよりはあまりクローズしない印象があります。
1秒遅くなるとこれだけの開発者が暇するとか、10秒経つとコンテキストの切り替えが発生して多大な影響が出るとかをちゃんとバックオフィス(的な?)人達も意識していることが凄い/icons/+1.icon
弊社の社内システムはマジで酷いのでこの章を読ませたい
コードがリポジトリにアップされるたびにインデックス化し、低レイテンシで検索できるようなリソースと検索アルゴリズムを普通の会社は持ってない
検索に強いのはGoogleらしさ
現場でどこまでできているか?
似たような体験をGitlab + IDEで実現している
レビューでコードを貼り付けるときはGitlabのリンクを
検索やコードジャンプはIDEで
最近のIntelliJはインデクシングが高速
Gitlab(GitHubも)は検索がイマイチで、そこはもっと頑張って欲しい
自分でElasticsearchを放り込みたいレベル
この本があるのになぜ実践する企業はすくないのか?
たいていの会社は、この投資をしても損益分岐点の遥か下のリターンしかない
現在ではGitHubなどにお金を払えば近い体験ができるので、検索クオリティを上げるためだけの追加投資になる
デプロイツールやGitHub Actionsなどの管理が煩雑になる度合いは増しそう
モノリポを実現しないとシナジーが小さい
git pull --rebaseを打ちまくる日々が起きそう。
それの乗り越え方はなにか?
モノリポを実現する
チームで管理しているコードにすべてURLが付与され、横断的に検索できる状況がGitHubとIDEで実現する
MicrosoftがJetBrainsを買収するよう祈る /icons/+1.icon
Limbo/TCRを実践
バックグラウンドでひたすらgit pull --rebaseを打ちまくって差分を最小に維持する
ステップを小さくするとしたらどうできそうか?
チームが管理しているリポジトリの棚卸と不要なコードを削除する活動
実際にこれを行った結果、レビューフローが統一されてコードの検索と参照がやりやすくなった
GitHub + IDEでかなりの部分を実現できるので、検索しやすいコードベースを意識すると良いのかも
マージしやすいPRの管理とデプロイ環境をたくさん準備するとか