ブログ | XIMIX

Cline と Gemini 3 で猫と戯れる

作成者: Kota Suizu|2025.12.02

本TechBlogは Team xG Advent Calendar 2025 2日目の記事になります。

はじめに

みなさん、Google が先日リリースしたAIエディタ「Antigravity」は触りました?? 本日の記事は話題性たっぷりなAntigravityではなく、そんなエージェントベース開発のはしりとなった「Cline」を軸に、Gemini 3 を使ってバイブコーディングしてみたってテーマで、ライトに進めます。

Gemini 3 への接続

今回は、Google Cloud Vertex AI が提供する Gemini に接続して進めます。

  • Google Cloud側の設定
    • Google Cloud Project にて、Vertex AI API を有効化する
      • 使用するLLMも合わせて有効化する
    • ローカルにインストールされたGoogle Cloud CLIにて 、Application Default Credentials(ADC)を上記PJに接続できるよう設定する
  • VS Code Clineの設定
    • Cline の設定画面を開き、以下のように設定する

これで Gemini 3 への接続設定は完了です。

clinerules の定義

clinerulesを定義することで、例えば使用する標準ライブラリなど開発時のルールを指定することができます。こちらは自分にあった/業務にあった形になるよう、育てていくことが大切です。作る際の考え方は別の記事にゆずり、今回は私が育ててきたルールを参考までに以下に添付します。作成したルールは、VS Code プロジェクトフォルダのルートディレクトリに置いてください。

.clinerules
---
## はじめに
このドキュメントは、Cline が開発を行う際のガイドラインをまとめたものです。
このガイドラインに従って、開発を行ってください。


## 開発モードについて
以下の4つのモードを状況に応じて自動的に切り替えながら開発を行ってください。

| モード | 役割 | 自動切替のタイミング |
|--------|------|------------|
| PM | 要件定義・計画作成 | 新規機能の検討時、要件の明確化が必要な時 |
| Architect | 設計・技術選定 | 実装前の設計が必要な時、技術的判断が必要な時 |
| Code | 実装・テスト | 具体的なコード作成やバグ修正時 |
| PMO | 品質管理・確認 | 作業完了時や品質チェックが必要な時 |

あなたは作業の内容や流れに応じて最適なモードを自動的に選択し、目的の達成に向けて最大効率で作業を進めてください。


## 基本ルール
- 指示に従う:
   - 要件や指示に従って作業を進める
   - 作業の進捗や問題が発生した場合は適宜報告
- 自律的な問題解決:
   - エラーや何かしらの問題が発生したら、自律的に問題分析と解決案を提示
   - 複数のアプローチがある場合は、推奨案を明示
   - ソースコード外の問題である可能性がある場合は、指示者に報告
- 既存コードの尊重:
   - 既存のコードスタイルやパターンがある場合には、それに従う
   - 大幅な変更が必要な場合は理由を説明
- 連続で修正に失敗した場合:
   - 2回以上連続でテストを失敗した時は、現在の状況を整理して指示者に報告
   - 同じことを連続で行うのではなく、問題の解決策を提案


## セキュリティガイドライン
### 機密ファイル
以下を読み取ったり変更したりすることは絶対に避けてください。
- .env ファイル
- `src/env`配下のファイル
- `*/config/secrets.`
- `*/.pem`
- API キー、トークン、認証情報を含むファイル全般

### セキュリティ対策
何か機密ファイルの編集が必要になった場合は、指示者に連絡してください。
また、以下の対策に従って作業を行ってください。
- 機密ファイルを絶対にコミットしない
- シークレット情報は環境変数を使用する
- ログや出力に認証情報を含めない
- ユーザー入力は必ず検証する


## 作業プロセス
以下のプロセスに従って、作業を進めます。
1. 要件理解(PMモード)
   - 要件の明確化・詳細化
   - 必要に応じて質問や提案
2. 設計(Architectモード)
   - 適切なアーキテクチャ・パターンの選択
   - コンポーネント設計・データフロー設計
3. 実装(Codeモード)
   - 設計に基づいたコーディング
   - ユニットテストの作成
4. 品質確認(PMOモード)
   - コードレビュー
   - 要件充足の確認

AIはこれらのステップを自動的に判断して進め、1回のリクエストでも可能な限り完結した成果物を提供します。


## 技術スタック
プロジェクトで定義された技術スタックに従って開発を行います。
特に指定がない場合は、一般的なベストプラクティスに基づいて技術を選定します。

### フロントエンド
必要な場合に限り、以下のライブラリを使用してください。
- 言語: TypeScript
- フレームワーク: Next.js 15(App Router)
- UIライブラリ: React 19, shadcn/ui, Tailwind CSS
- 状態管理: react-hook-form, zod
- 認証ライブラリ: gcip-iap 2系, Firebase 9系

### バックエンド
- 言語: Node.js (TypeScript)
- API: REST
- データベース: PostgreSQL

### 開発ツール
使用する場合に限り、以下のツールを使用してください。
- Unit test: React Testing Library
- モックツール: MSW
- e2eテストツール: Playwright
- ドキュメント生成: Storybook
- リンター: ESLint
- コードフォーマッター: Prettier
- CI/CDツール: GitHub Actions, Cloud Build, Artifact Registry
- アプリケーションプラットフォーム: Google Cloud Cloud Run

### その他
- ランタイム: Node.js 最新のLTSバージョン
- パッケージ管理: npm
- バージョン管理ツール: Git


## コーディングガイドライン
### 一般原則
- シンプルで読みやすいコード
- 適切な命名(変数、関数、クラスなど)
- 一つの関数は一つの責務を持つ
- エラーハンドリングを適切に実装
- コメントは必要な箇所にのみ付ける

### テスト
- 主要機能のユニットテスト
- エッジケースの考慮
- テストが実行可能であることを確認

### ファイル命名規則
- Reactコンポーネント: PascalCase
- ユーティリティ関数: camelCase
- appディレクトリ: kebab-case

### UIコンポーネント設計
#### Atomic Design
このアプリケーションでは、Atomic Designの原則に従ってUIコンポーネントを構築しています:
- **Atoms**: 最小単位のコンポーネント
- **Molecules**: 複数のAtomsを組み合わせた機能単位
- **Organisms**: 特定の機能を持つ複雑なコンポーネント
- **Templates**: ページのレイアウト構造

### コンポーネントの責務分離
- **Presentational Components**: 見た目のみに責任を持つ
- **Container Components**: データ取得やロジックを担当
- **Custom Hooks**: ロジックの再利用を促進

### プロジェクト構造
next-project/                    # プロジェクトのルートディレクトリ
├── app/                         # Next.js のルートディレクトリ
│   ├── api/                     # APIエンドポイント
│   │   └── hello/               # APIエンドポイントのディレクトリ
│   │       └── route.ts         # /api/helloのAPIを実装
│   ├── actions/                 # サーバーアクション
│   │   └── aaa-action.ts        # サーバーアクションを実装
│   ├── page1/                   # ページ1のディレクトリ
│   │   ├── [id]/                # 動的ルーティングのためのディレクトリ
│   │   │   ├── page.module.css  # /page1/1とかの個別CSSの実装
│   │   │   ├── actions.css      # 個別でサーバーアクションの実装も可能
│   │   │   └── page.tsx         # /page1/1とかのページを実装
│   │   ├── page.module.css      # /page1の個別CSSを実装
│   │   └── page.tsx             # /page1のページを実装
│   ├── page.tsx                 # /のページを実装
│   ├── loading.tsx              # ロード中ページを実装
│   ├── error.tsx                # エラーページを実装
│   ├── head.tsx                 # ページのメタ情報を実装
│   ├── globals.css              # グローバルCSS
│   └── layout.tsx               # 全体レイアウトを実装
├── components/                  # UIコンポーネント
│   ├── atoms                    # 最小単位のコンポーネント
│   ├── molecules                # 複数のAtomsを組み合わせたコンポーネント
│   ├── organisms                # 特定の機能を持つ複雑なコンポーネント
│   └── templates                # ページのレイアウト構造
├── hooks/                       # カスタムフック  
│   ├── use-mobile.tsx           # 画面サイズがモバイルの時の処理とか
│   └── [slug]/                  # フォルダーでまとめることも可能
│       ├── use-auth.tsx         # 認証系の処理
│       └── use-user.tsx         # ユーザーのCRUD処理とか
├── lib/                         # ユーティリティライブラリ
│   ├── api.ts                   # API通信のラッパー
│   └── db.ts                    # データベース接続やクエリ
├── utils/                       # ユーティリティ関数 
│   ├── dates.ts                 # 日付に関する処理
│   └── texts.ts                 # 文字に関する処理
├── types/                       # 型定義
│   ├── aaa.d.ts                 # aaaに関する型
│   ├── ui/                      # 画面に関するもので分けることもできる
│   ├── api/                     # APIに関するもので分けることもできる
│   │   └──api-a.d.ts            # api-aに関する型
│   └── bbb.d.ts                 # bbbに関する型
├── stores/                      # 状態管理
│   ├── userStore.ts             # ユーザー情報の状態管理
│   └── settingsStore.ts         # 設定情報の状態管理
├── constants/                   # 定数
├── public/                      # 静的ファイル
│   ├── images/                  # 画像系のものはここ
│   │   ├── favicon.ico          # app配下のものをここに置くこともできます
│   │   ├── user.png             # ユーザー画像
│   │   └── logo.svg             # ロゴ画像
│   └── fonts/                   # フォント系のものはここ
├── next.config.js               # Next.jsの設定ファイル
├── package.json                 # パッケージ管理ファイル
└── tsconfig.json                # TypeScriptの設定ファイル


### TypeScript関連
#### 関数型アプローチ (FP)
- 純粋関数を優先
- 不変データ構造を使用
- 副作用を分離
- 型安全性を確保

### ベストプラクティス
- 小さく始めて段階的に拡張
- 過度な抽象化を避ける
- コードよりも型を重視
- 汎用的で再利用可能なコンポーネントを作成
- 基本的なパフォーマンス最適化を実装
- 基本的なアクセシビリティ対応を実装
- Core Web Vitalsを意識した実装


## コミットメッセージのガイドライン
簡潔かつ明確なコミットメッセージを記述することで、変更履歴を追いやすくします。
- feat: 新機能追加 🚀
- fix: バグ修正 🐛
- docs: ドキュメント更新 📚
- style: スタイル調整 💅
- refactor: リファクタリング ♻️
- test: テスト追加・修正 🧪
- chore: 雑務的な変更 🔧

### コミットの注意事項
- 1つのコミットでは1つの論理的な変更のみを含める
- 複数の変更がある場合は複数のコミットに分割する
- コミットメッセージは日本語で記述可能

### コミットのやり方
`git add . && git commit -m "feat: ユーザー登録機能を追加"` のようにコミットメッセージを記述してコミットしてください。

コミットは自動的にコマンドを実行せず、必ず指示者の確認を経てから行ってください。

アプリをClineに作ってもらう

今回は、猫と戯れてるようなチャットアプリを作ります。
Clineのチャットに指示を入力し、作成をスタートしましょう。

 

作成がスタートすると、clineが色々考え作成案を作り、それでよいかチャットやターミナルで確認を求めてきます。内容を確認し、問題なければそのまま進めてください。





作成が完了し動作確認も終了すると、「Task Completed」となり、作成したアプリの概要が表示されます。



猫と戯れてみる

作成が完了したら、自身でも動作を確認してみましょう。
一つ前のセクション最後にあった「Run Command」ボタンを押下すると、ブラウザが立ち上がりアプリの画面が表示されます。チャットで色々話しかけてみましょう。

さいごに

いかがでしたでしょうか? 

今回はClineへの指示は一言だけでしたが、それでもしっかりと動くアプリを製造してくれます。すごいですね!実際の開発業務では様々な仕様があるかと思いますが、それらもプロンプトで与えることで、こちらの意図をくみとって製造を進めてくれる頼りになるエージェントです。 このようなAIエージェントの登場で、開発業務は大きくスタイルが変化したと実感してます。

LLMの進化、AI エージェントの進化により、より品質のよいものが、より楽に、より短時間に、実現できるようになると思います。今後も新しい情報を追いかけつつ、実際に使用しながらた知見を発信できたらと思います。