Google Cloud Platform

新しくなった Cloud Source Repositories 、ベータ版で提供開始

※この投稿は米国時間 2018 年 9 月 20 日に Google Cloud blog に投稿されたものの抄訳です。

私たち Google はコードを用いた作業に毎日多くの時間を費やしています。会社が成長し、コード ベースが複雑さを増す中で、Google のエンジニアたちは、開発者を満足させながら彼らの日々の生産性を高める一連のコード ツールを構築してきました。なかでも、Google のエンジニアが愛用しているコード検索は特に重要で、ほとんどのエンジニアは生産性を高めるためにコード検索を毎日何度も使用しています。

このたび、新たに改良が施された Cloud Source Repositories のベータ版において、まったく新しいユーザー インターフェースとセマンティック検索を備えたコード検索機能を皆さんにお届けできることを私たちはうれしく思います。Cloud Source Repositories は、Google のエンジニアがコード検索に使っているのと同じインフラストラクチャを採用しています。これを利用すれば、きわめて高速に結果が得られ、見覚えのあるコードの検索に要する時間を大幅に節約できます。Cloud Source Repositories のコード検索機能は、Google 検索に使われているのと同じ文書インデクシングと検索テクノロジーを利用しており、非常に高速に動作します。Cloud Source Repositories にコードをホスティングしている場合や、GitHub や Bitbucket のクラウド バージョンからコードをミラーリングしている場合でも、このコード検索を使用すれば開発者の生産性を向上させることができます。

より良い開発作業のための高速なコード検索

開発者でもある私たちは、いかにコード検索が頻繁に必要になるかを知っています。開発者を対象にしたあるケース スタディによると、プログラマーは毎日平均で 12 個の検索クエリを使用し、5 回の検索セッションを開いています。過去の報告と比べると、コード検索は以前よりもずっと広く行われていることがわかります。

こうした検索クエリは特定のコード位置を対象としていることが多く、プログラマーは通常、自分がある程度知っているコードを探します。プログラマーは一般に、次のような問いに対する答えを探しています。

  • コードがをしているか
  • コードがどこで使われているか
  • コードがある特定の形で動作しているのはなぜ
  • 編集の責任者はいつ編集が行われたか
  • どのようにしてタスクをこなすか

コード検索には誰もが経験したことのある共通の問題があります。ここでは、そうした問題の中からいくつかを挙げ、Cloud Source Repositories がそれらをどのように処理しているのかを見ていきましょう。

  • 会社にあるすべてのコードを検索したいのに、少量のコードを格納したリポジトリがローカルにたくさん存在し、それらがサーバー上の最新バージョンと同じではない場合 ―― コードはローカルに保存すべきではありませんし、手元のコンピュータの検索ツールもさほど強力ではないでしょう。Cloud Source Repositories を使用すれば、すべてのリポジトリのデフォルト ブランチが常にインデックス化され、最新の状態が保たれます。ローカルに格納されたコードを探し回るよりも、アクセス可能なすべてのコードから特定のファイル / クラス / 関数を検索したほうが、単純で高速です。

  • 社内の他の人間が担当しているのと同じ操作のコードを探すのに苦労している場合、Cloud Source Repositories ならそのコードをすばやく検索し、見つけることができます。同じ処理のコードを新たに作るよりも、既存のソリューションを再利用したほうが時間の節約になり、バグを持ち込むことも避けられます。メンテナンスが必要なコードを増やさないことは、コード ベースを健全な状態に保つことにもつながります。

  • イベント ハンドラのような頻繁に使用されるコード コンポーネントの正しい使い方を覚えていなくても、Cloud Source Repositories にクエリを入力して社内のすべてのコードを検索すれば、他の開発者によるイベント ハンドラの適切なコード例が見つかります。最初から正しくコードを書くことができるわけです。

  • 本番用アプリケーションの問題点を発見し、そのアプリケーションが “User ID 2503295 not found in PaymentDatabase”(PaymentDatabase で 2503295 というユーザー ID が見つかりません)というエラー メッセージをサーバー ログに書き込んでいることがわかったとしましょう。この場合、Cloud Source Repositories を使って “User ID .* not found in PaymentDatabase” という正規表現検索を実行すれば、このエラーが発生した個所を瞬時に見つけ出し、問題を解決して本番環境にデプロイできます。リッチな正規表現検索によって、用途、定義、サンプル コードを簡単に見つけることができ、リファクタリングなどに役立ちます。

すべてのコードをまとめて検索

Cloud Source Repositories への Google のコード検索機能の導入により、Google の検索テクノロジーが有するメリットをコード ベースの検索でも享受できるようになりました。

そうした重要なメリットの 1 つは、Cloud Source Repositories にミラーリングまたは追加されているリポジトリであれば、どれも一度にまとめて検索できることです。これは、小規模な週末プロジェクトの場合でも、あるいは Google と同じ規模のコード ベースの場合でも同じです。しかも高速です。従来の機能よりもずっと高速に答えが得られるため、すぐにコーディングに戻れます。さらにインデックス化も非常に高速なので、新しいコードが追加されてもすぐに検索に使えるようになります。常に最新のコードを検索できるのです。また、Cloud Source Repositories は IAM のアクセス権限に従うので、権限のないファイルのコードをユーザーが検索し参照してしまうこともありませんし、新たにアクセス権限を設定し直す必要もありません。

加えて、Cloud Source Repositories では数千ものリポジトリを 1 回のクエリで検索できます。リポジトリのデフォルト ブランチにあるファイルか、ファイル内のコードを検索可能です。また、Cloud Source Repositories はコードをセマンティックに理解しており、検索インデックスはコードのどの部分がクラス、関数、フィールドなどのエンティティであるかを識別します。検索インデックスではこれらが分類されているため、検索の対象をクラスもしくは関数だけに限定するフィルタをクエリに含めることができます。さらに、クラスや関数、フィールドといったコード内の重要な部分を上位にランク付けすることで、関連度に応じて検索結果を出力することも可能です。Cloud Source Repositories では RE2 正規表現を使った強力な検索パターンをデフォルトで使用できるので、非常に複雑な質問に対しても必要な回答が見つかります(バックスラッシュを置くか、文字列全体を引用符で囲めば、独自の特殊文字も扱えます)。

検索ボックスに文字を入力すると、検索結果の候補が表示されます(下図参照)。Java、JavaScript、Go、C++、Python、TypeScript、Proto のファイルの場合、一致するものがクラス、メソッド、列挙型、フィールドなどのエンティティであるかどうかも表示されます。

_oSrcbQvdgisUoq8avt3XKbiGyCgR89Q-UMmOzCeEQN02WLOLM44umwoZmUeoUHlRTPRq6lAeQZ_VLUqSXRyoL7Zw9pIfjmk20xaU5skhQVWAJ0Nb5HCH9WkY4LdghxKRrYkAhA9hb83.PNG

Cloud Source Repositories でのコード検索の詳細はこちらをご覧ください。

Google コード検索の仕組み

Cloud Source Repositories のコード検索には Google 検索と同じテクノロジーが使われていますが、インデックス化やアルゴリズム、結果のタイプなどはコード検索用に最適化されています。検索を実行すると、検索クエリはルート マシンに送られ、シャーディングされた数百のリーフ マシンで処理されます。ファイル名、クラス、関数、その他のシンボルでマッチするものを探し、シンボルのコンテキストやネームスペースで結果を絞り込みます。検索クエリに正規表現が含まれている場合、コード検索は、正規表現にマッチする可能性のあるものを高速に検索する最適化アルゴリズムを実行してから、完全な正規表現にマッチするものを絞り込み、実際にマッチするものを見つけます。そのため、複雑な正規表現の場合でも、完全にマッチするものが非常に高速に得られるのです。また、Google のコード検索では検索対象の周辺のスニペット(コード片)も併せて探し、追加のコンテキストとして提供します。

新しい Cloud Source Repositories を使うには

Cloud Source Repositories を使用したことがない方は、Google Cloud Platform(GCP)の無料トライアル豊富な無料枠を使って今すぐ試してみてください。Cloud Source Repositories のナビゲーションに沿って移動すると、コードの追加などをガイダンスするサインアップのページが表示され、空のリポジトリを新規に作成したり、GitHub や Bitbucket のクラウド バージョンからコードをミラーリングしたりすることができます。新しい空のリポジトリに対しては、ローカル マシンからコードをプッシュできるほか、Cloud Shell エディタを使用してブラウザから離れることなくコードを書けば簡単に追加できます。

すでにコードを Cloud Source Repositories に格納しているお客様の場合は、パーソナライズされた新しいランディング ページ(下図参照)が開き、お客様の GCP プロジェクトにおいてアクセス可能なすべてのリポジトリが表示されます。このランディング ページには、最近ブラウズしたコードやお気に入りのコード ベースの部分が、時間の経過とともに表示されるようになります。

Cloud Source Repositories にコードを格納し始めると、GCP の他のサービスも利用しやすくなります。よく使われる統合機能は次のとおりです。

  • コミットがブランチに組み込まれたときに新しいビルドを自動的に App Engine にデプロイするよう Cloud Build を設定(クイックスタートはこちら
  • Cloud Functions のバージョン管理を使用(クイックスタートはこちら
  • Cloud Source Repositories に格納されたアプリケーションの状態を Stackdriver Debugger でリアルタイムにチェック(クイックスタートはこちら
  • Cloud Pub/Subにコミット イベントを発行し、任意のサードパーティ ツールと統合(クイックスタートはこちら

ご意見をお寄せください

私たちは、開発者チームをサポートし、生産性を向上させるツールの提供に引き続き取り組んでいきます。新しい Cloud Source Repositories ベータ版をお試しいただき、製品内のフィードバック ツールを通じて皆さんの考えをお聞かせください。ご意見をお待ちしています。