Google の Core Data Solutions チームが Go をどのように活用しているか

Core Data

Google の使命は、「世界の情報を整理し、それを誰にでもアクセス可能で有用なものにすること」です。その情報を整理する役割を担うチームの1つが、Google の Core Data Solutions チームです。このチームは、とりわけ、世界中のウェブページをインデックス化するサービスを維持しています。これらのウェブインデックスサービスは、検索結果を常に最新かつ包括的に保つことで、Google 検索のような製品をサポートしており、Go で記述されています。

2015年、Google の規模に対応するため、私たちのチームはインデックススタックを、C++ で書かれた単一のモノリシックバイナリから、マイクロサービスアーキテクチャの複数のコンポーネントへと書き直す必要がありました。私たちは、多くのインデックスサービスを Go で書き直すことを決定し、現在ではその Go を使って私たちのアーキテクチャの大部分を動かしています。

チームのエンジニアは並行性や並列アルゴリズムの使用を奨励されているため、Go の組み込み並行性は自然にフィットします。

— ミンジェ・ファンソフトウェアエンジニア

言語を選択する際、私たちのチームは Go のいくつかの機能が特に適していることを発見しました。例えば、チームのエンジニアは並行性や並列アルゴリズムの使用を奨励されているため、Go の組み込み並行性は自然にフィットします。エンジニアはまた、「Go のコードはより自然」であると感じており、メモリ管理やパフォーマンス最適化ではなく、ビジネスロジックと分析に時間を費やすことができるようになりました。

Go でコードを書くことは、開発プロセス中の認知負荷を軽減するのに役立つため、はるかにシンプルです。例えば、C++ を使用している場合、洗練された IDE が「実際にはコンパイルエラーがあるのに、ソースコードにコンパイルエラーがないと表示する」ことがあるのに対し、「Go では、[IDE が]コードにコンパイルエラーがないと言えば、[コードは]常にコンパイルされる」と、Core Data Solutions チームのソフトウェアエンジニアである MinJae Hwang 氏は述べています。コンパイルエラーの修正サイクルを短縮するなどの開発プロセスにおける小さな摩擦点を減らすことで、私たちのチームは最初の書き直し中に迅速に出荷できるようになり、メンテナンスコストを低く抑えるのに役立っています。

「C++ を使っていて、もっと多くのパッケージを使いたい場合、ヘッダーのような部分を書かなければなりません。Go で書いている場合、組み込みツールによってパッケージをより簡単に使うことができます。開発速度がはるかに速くなります」と Hwang 氏はまた共有しました。

Go のシンプルな言語構文と Go ツールのサポートにより、私たちのチームの多くのメンバーは Go コードで書くことがはるかに簡単であると感じています。また、Go は静的型チェックが非常に優れており、godoc コマンドのような特定の Go の基礎が、チームがドキュメント作成に関してより規律ある文化を構築するのに役立ったことも発見しました。

…Google のウェブインデックスは1年以内に再設計されました。さらに印象的なのは、チームのほとんどの開発者が Go を学習しながら Go で書き直していたことです。

— プラサンナ・メダソフトウェアエンジニア

世界中でこれほど頻繁に使われる製品に取り組むことは簡単な作業ではなく、Go を使用するという私たちのチームの決定も単純なものではありませんでしたが、そうすることで私たちはより速く動くことができました。結果として、Google のウェブインデックスは1年以内に再設計されました。さらに印象的なのは、チームのほとんどの開発者が Go を学習しながら Go で書き直していたことです。

Core Data Solutions チームに加え、Google 全体のエンジニアリングチームが開発プロセスに Go を採用しています。Chrome および Firebase Hosting チームが Go を使用して、大規模で高速、信頼性が高く、効率的なソフトウェアを構築する方法についてお読みください。

Core Data Core Data

Core Data について

Google は、世界の情報を整理し、それを誰にでもアクセス可能で有用なものにすることをミッションとするテクノロジー企業です。

このケーススタディでは、Google の Core Data Solutions チームが Go との歩みを共有しています。これには、ウェブインデックスサービスを Go で書き直すという決定、Go の組み込み並行性の活用、そして Go が開発プロセスの改善にどのように役立つかの観察が含まれます。