🌍

AI時代のコーディングスタイルとは何か?Gemini CLIに見る未来の実装例

に公開

Gemini CLIから読み解く「AI時代のコード設計」

最近、Googleの gemini-cli のソースコードを読んでいて、ある強烈な印象を受けた。

これは「AI時代の開発スタイル」をGoogleが無言で提示しているのでは?

そう思わずにはいられない、いくつかの特徴的な設計が散りばめられていた。


✅ 特徴1:パスエイリアスを使わない構成

多くのTypeScriptプロジェクトでは、tsconfig.jsonpaths を設定して @/utils のようなエイリアスを使うが、Gemini CLIではあえてそれを避け、すべて相対パスで構成している。

import { getFolderStructure } from '../utils/getFolderStructure.js';
import { ReadManyFilesTool } from '../tools/read-many-files.js';
import { getCoreSystemPrompt, getCompressionPrompt } from './prompts.js';

これにより、1ファイル or 近傍ファイルのみで完結する構造となり、AI(LLM)でも文脈を把握しやすくなっている。


✅ 特徴2:型をファイル内に内包する

通常であれば types/ ディレクトリなどにまとめる型定義も、Gemini CLI では各ファイル内に必要最低限だけ書かれている。

// GeminiClientクラス内で直接定義
private readonly MAX_TURNS = 100;
private generateContentConfig: GenerateContentConfig = {
  temperature: 0,
  topP: 1,
};

これも、「AIが読み解くときにファイルの依存を最小化する」という意図が感じられる。


✅ 特徴3:ロジックとテストを同階層に配置

たとえば以下のように、client.ts の隣に client.test.ts が置かれている。

/src
  ├── client.ts
  └── client.test.ts

この構成は、テストコードを仕様として読むAIにとって、挙動の理解を助けるヒントになる。

実際、Gemini CLI のようなエージェント型AIは、このような構成を好む。


✅ 特徴4:説明的で読みやすいメソッド名・変数名

Gemini CLIでは、関数名や変数名がとにかく説明的で親しみやすい。

// 実際のGemini CLIのソースコードから
createContentGeneratorConfig();
getEffectiveModel();
tryCompressChat();
handleFlashFallback();
generateEmbedding();

// 変数名も同様に説明的
const effectiveModel = config?.getModel?.() || model || DEFAULT_GEMINI_MODEL;
const googleCloudProject = process.env.GOOGLE_CLOUD_PROJECT;
const googleCloudLocation = process.env.GOOGLE_CLOUD_LOCATION;

一見すると「ちょっと長いかな?」と感じるかもしれないが、これが 人間にもAIにも優しい新しいスタイル になっている。実際のソースコードを見ると、createContentGeneratorConfig()getEffectiveModel()といった関数名で、何をするかがパッと分かる。

変数名についても effectiveModelgoogleCloudProject のように、略語を避けて意味が明確に伝わる命名になっている。これにより、AIがコードを読んだときにも文脈を正確に理解できる。


🤖 これは「AIと共に書くコード」の姿

これらの特徴から見えてくるのは、Gemini CLI が示す「AIと協働する時代のコーディングスタイル」 だということ。

興味深いのは、Gemini CLI のリポジトリには GEMINI.md というファイルが存在することだ。これは Gemini CLI 自体の開発指針を記述したファイルで、おそらく Gemini CLI 自体が Gemini CLI を使って開発されている のではないだろうか。

つまり、この設計思想は単なる理論ではなく、Google のエンジニアたちが実際に AI と協働しながらコードを書く中で生まれた、実践から生まれたベストプラクティス である可能性が高い。

  • ファイル単位で完結: 依存関係を最小限に
  • 型や処理はローカル化: 必要な情報をその場に集約
  • テストと実装は近くに: 仕様理解を助ける配置
  • 意図が伝わる命名: 人にもAIにも分かりやすく

従来の「人間だけが読むコード」から、「人間とAIが一緒に理解できるコード」への転換。これがGemini CLIから読み取れる設計思想だと感じている。


✍️ まとめ:これからのコーディングへのヒント

今後私たちが書くコードは、「人間が読む」だけでなく「AIと一緒に理解する」ことが前提になっていくかもしれない。

Gemini CLI のようなアプローチは、その可能性を示してくれている。もしかすると、AIとうまく付き合っていくエンジニアにとって、「LLMにも分かりやすいコード」を書くスキルは、今後ますます重要になってくるのではないだろうか。


参考リンク

Discussion