🎉

Gemini CLI のハッカソンに参加してきました

に公開

2025年9月某日に、Google が主催する Gemini CLI を使った Vibe Coding ハッカソンに参加してきました。
以前の記事 で Gemini CLI を試してみましたが、その時はまだ発展途上というイメージでした。
しかし、Gemini CLI をより効果的に活用するためのポイントを教えていただいた結果、私の使い方が悪かっただけだということがわかったので、そのポイントをご紹介したいと思います。

Gemini CLI を効果的に利用するコツ

結論としては、システムプロンプトをしっかり設定するということになります。これは、 Karpathy 氏が唱えた Vibe Coding とは厳密には異なってくるかもしれませんが、AI をコントロールし、より良い効果を得るために重要なコツでした。

Gemini CLI にシステムプロンプトを与えるには、 GEMINI.md を利用します。これは、Gemini モデルに提供される指示コンテキスト(「メモリ」とも呼ばれます)に、情報を与えるコンテキスト ファイルです。少し回りくどい表現になっているのは、複数のレベル(グローバル、プロジェクト、サブディレクトリ)の GEMINI.md を結合して メモリ を形成することができるためです。

GEMINI.md を利用することで、プロジェクト固有の指示、コーディング スタイルガイド、関連する背景情報などを AI に提供できます。これにより、Gemini の応答をより期待に近づけることができます。

GEMINI.md の詳細は、以下を参照してください。
https://codelabs.developers.google.com/gemini-cli-hands-on?hl=ja#9

ハッカソンでは、プロジェクトルートに GEMINI.md を配置し、Vibe Coding を行いました。
GEMINI.md のサンプルもいただき、その中には以下のような項目が含まれていました。


1. AIの役割定義

  • ペルソナ設定(アーキテクト、レビュアーなど)
  • コミュニケーションスタイル
  • ルールとプロンプトの優先度

2. 安全規則

  • 禁止コマンドリスト
  • ファイル操作の承認ルール
  • 機密情報の取り扱い方針

3. 技術スタック

  • フレームワーク・ライブラリのバージョン指定
  • 採用技術の固定・制約

4. プロジェクト構造

  • ディレクトリ構成
  • ファイル・フォルダの命名規則

5. コーディング規約

  • 言語仕様(TypeScript strictモードなど)
  • 禁止事項(any型、クラスコンポーネントなど)
  • スタイリング方針

6. 環境別の検証ルール

  • セットアップ確認手順
  • 動作検証方法

具体的には、rm -rfgit push などの危険なコマンドを禁止したり、Next.js と Tailwind CSS を使うことを指定したりされていました。

ハッカソン内で最初にこの GEMINI.md を使わずに Vibe Coding を行ったところ、前回よりはある程度しっかりしてそうなアプリケーションを書いてくれました。もしかすると、ハッカソン用に gemini-2.5-pro を使えるアカウントを払い出していただいたおかげかもしれません。前回の記事では、無料アカウントを使っていたため、すぐに gemini-2.5-flash に切り替わってしまっていました。やはり、モデル自体の性能が上がることで、ある程度の問題は解決しそうです。

しかし、作成されたアプリケーションを Cloud Shell 上で実行しようとしたところ、アプリケーションを正常に利用できないという問題が発生しました。フロントエンドとバックエンドを別々のポートで実行する必要があったことから、 CORS(Cross-Origin Resource Sharing) の問題が発生したためです。それでも Cloud Run などにデプロイすれば問題なさそうでしたが、ハッカソンの短い時間内にデモアプリを開発したいということを考えると、大きな障害となりました。

そこで、例の GEMINI.md のテンプレートを利用し、フロントエンドとバックエンドを一つの環境で実行できる Next.js を指定した上で、プロジェクトを再作成してもらったところ、一発できちんと動くアプリを作ってくれました。

Google の方からいただいた Gemini への指示用テンプレートには、プロジェクト自体を説明する追加のドキュメントを用意する方法もありました。例えば、プロジェクトの概要や機能要件を記載した SPECIFICATION.md を用意し、 Gemini CLI にそのファイルを元にアプリケーションを作ってもらいます。自分が作りたいもののイメージが固まっている場合は、そのようなファイルを使うことで効率的に モデル にユーザープロンプトを与えることができます。


╭────────────────────────────────────────────────────╮
│  > SPECIFICATION.mdを読んで、実装をしてください。  │
╰────────────────────────────────────────────────────╯

✦ 承知いたしました。SPECIFICATION.mdを読み込み、実装計画を立てます。
 ╭───────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✓  ReadFile SPECIFICATION.md                                                                          │
 ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ SPECIFICATION.mdの読み込みありがとうございます。内容を完全に理解しました。
...

感想

今回のハッカソンでは、Gemini CLI でもユーザー側がしっかり使えば、ある程度期待に沿った Agentic coding ができるということがわかりました。システムプロンプトやユーザープロンプトをきちんと与えることの大きな効果を実感しました。

Discussion