1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Clineを使い倒す:上級者向け完全ガイド【MCP深掘り・CI/CD・チーム活用・Claude Code比較】

1
Posted at

この記事は 2026年3月 時点の情報をもとに作成しています。Cline・Claude Codeはどちらも活発に開発が続いているため、最新情報は公式ドキュメントも合わせてご参照ください。

はじめに

初心者向けの入門記事では、ClineのインストールからMCPの基本的な使い方までを解説しました。

この記事では、実際の開発現場でClineを最大限に活用する方法に踏み込んで解説します。対象は「すでにClineを使ったことがある」「MCP・CI/CD・チーム開発に取り組んでいる」方です。

扱うテーマは以下の通りです:

  • 高度なMCP活用:カスタムMCPサーバーの構築、複数MCPの連携
  • CI/CDへの統合:GitHub Actionsでの自動化
  • チーム開発.clinerules の共有とガバナンス
  • Claude Code との比較・使い分け:用途に応じた選択基準

アーキテクチャ全体像

まずClineがどのように動作するかを把握しましょう。

Clineの特徴は「VSCodeのプロセス内でエージェントループが動作する」点です。ファイル編集・コマンド実行・MCP呼び出しがすべてローカルで完結し、LLMへの通信だけが外部に出ます。


高度なMCP活用

MCPアーキテクチャの理解

MCP(Model Context Protocol)はAnthropicが策定したオープン規格で、AIエージェントと外部ツールを接続するためのプロトコルです。

MCPサーバーは STDIO(標準入出力)と SSE(Server-Sent Events)の2つのトランスポートをサポートしています。

トランスポート 特徴 用途
STDIO プロセスとして起動・終了 ローカルツール、ファイル操作
SSE 常駐HTTPサーバー リモートサービス、Webhook

複数MCPの高度な連携

実際のプロジェクトでは複数のMCPを組み合わせます。以下は典型的な構成例です:

{
  "mcpServers": {
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "${BRAVE_API_KEY}"
      }
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_CONNECTION_STRING": "${DATABASE_URL}"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/nick/projects"
      ]
    }
  }
}

環境変数の管理
APIキーは直接JSONに書かず、${ENV_VAR} 形式で参照しましょう(Clineは .env や環境変数を自動展開します)。シークレット管理にはdirenv・1Passwordなどの利用を推奨します。

カスタムMCPサーバーの構築

既存のMCPに機能が足りない場合は自前で構築できます。以下は社内APIに接続するカスタムMCPの実装例です:

// custom-api-mcp/src/index.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";

const server = new Server(
  { name: "custom-api-mcp", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

// ツール一覧を返す
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "get_user_info",
      description: "社内ユーザーDBからユーザー情報を取得する",
      inputSchema: {
        type: "object",
        properties: {
          user_id: {
            type: "string",
            description: "ユーザーID",
          },
        },
        required: ["user_id"],
      },
    },
    {
      name: "create_ticket",
      description: "Jiraにチケットを作成する",
      inputSchema: {
        type: "object",
        properties: {
          title: { type: "string" },
          description: { type: "string" },
          priority: {
            type: "string",
            enum: ["low", "medium", "high", "critical"],
          },
        },
        required: ["title", "description"],
      },
    },
  ],
}));

// ツールを実行する
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const { name, arguments: args } = request.params;

  if (name === "get_user_info") {
    const response = await fetch(
      `${process.env.INTERNAL_API_URL}/users/${args.user_id}`,
      {
        headers: { Authorization: `Bearer ${process.env.INTERNAL_API_TOKEN}` },
      }
    );
    const user = await response.json();
    return {
      content: [{ type: "text", text: JSON.stringify(user, null, 2) }],
    };
  }

  if (name === "create_ticket") {
    const response = await fetch(`${process.env.JIRA_URL}/rest/api/3/issue`, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Basic ${Buffer.from(
          `${process.env.JIRA_EMAIL}:${process.env.JIRA_TOKEN}`
        ).toString("base64")}`,
      },
      body: JSON.stringify({
        fields: {
          project: { key: process.env.JIRA_PROJECT_KEY },
          summary: args.title,
          description: { type: "doc", version: 1, content: [
            { type: "paragraph", content: [{ type: "text", text: args.description }] }
          ]},
          priority: { name: args.priority ?? "medium" },
          issuetype: { name: "Task" },
        },
      }),
    });
    const ticket = await response.json();
    return {
      content: [
        { type: "text", text: `チケット作成完了: ${ticket.key}` },
      ],
    };
  }

  throw new Error(`Unknown tool: ${name}`);
});

// STDIOトランスポートで起動
const transport = new StdioServerTransport();
await server.connect(transport);

このカスタムMCPをClineに登録します:

{
  "mcpServers": {
    "custom-api": {
      "command": "node",
      "args": ["/path/to/custom-api-mcp/dist/index.js"],
      "env": {
        "INTERNAL_API_URL": "https://api.internal.example.com",
        "INTERNAL_API_TOKEN": "${INTERNAL_TOKEN}",
        "JIRA_URL": "https://mycompany.atlassian.net",
        "JIRA_EMAIL": "nick@example.com",
        "JIRA_TOKEN": "${JIRA_API_TOKEN}",
        "JIRA_PROJECT_KEY": "ENG"
      }
    }
  }
}

.clinerules による高度なプロジェクト管理

.clinerules はClineのプロジェクト専用設定ファイルで、チーム全員が同じルールを共有するために使います。

実践的な .clinerules テンプレート

# プロジェクトルール(.clinerules)

## スタック情報
- Runtime: Node.js 22 (LTS)
- Framework: Next.js 15 (App Router)
- Language: TypeScript 5.x(strictモード)
- Styling: Tailwind CSS v4
- DB: PostgreSQL 16(ORM: Prisma)
- テスト: Vitest + Testing Library
- CI: GitHub Actions

## コーディング規約
- コメントはすべて日本語で記述すること
- 関数はすべてJSDoc形式でドキュメント化すること
- `any`型の使用は禁止。代わりに`unknown`を使い型ガードを実装すること
- エラーハンドリングは必ず実装。エラーメッセージは日本語で記述
- APIエンドポイントはzodでバリデーションを実装すること

## ファイル構造
src/
├── app/           # Next.js App Router ページ
├── components/    # 再利用可能なUIコンポーネント
├── lib/           # ユーティリティ・ヘルパー
├── hooks/         # カスタムReact Hooks
├── types/         # 型定義
└── server/        # サーバーサイドロジック(Server Actions)

## 禁止事項
- `console.log` をコミットしないこと(debugログはloggerライブラリを使う)
- `.env` ファイルをコミットしないこと
- `TODO` コメントをそのまま放置しないこと(Issue番号を必ず記載)
- `node_modules` 以下のファイルを直接編集しないこと

## テスト要件
- 新機能・バグ修正には必ずテストを追加すること
- カバレッジ目標: 80%以上
- テストファイルは `__tests__/` ディレクトリまたは `.test.ts` 拡張子

## PRルール
- 変更前に必ず `git status``git diff` を確認してから報告すること
- 1つのPRは1つの機能・修正のみ
- コミットメッセージは Conventional Commits 形式: `feat:`, `fix:`, `chore:`## 作業開始前のチェックリスト
1. 依存関係が最新か確認: `npm outdated`
2. 型チェックが通るか確認: `npm run type-check`
3. テストが通るか確認: `npm test`
4. Lintが通るか確認: `npm run lint`

.clinerules の階層管理

大規模プロジェクトでは、サブディレクトリごとに .clinerules を配置できます:

project/
├── .clinerules              # プロジェクト全体のルール
├── frontend/
│   └── .clinerules          # フロントエンド固有のルール
├── backend/
│   └── .clinerules          # バックエンド固有のルール
└── infra/
    └── .clinerules          # インフラ固有のルール(Terraform等)

CI/CDへの統合

GitHub ActionsでClineを活用する

Clineは基本的にVSCode内で動作しますが、CI/CDではClaude APIを直接使う形でパイプラインに統合できます。以下はPR作成時に自動でコードレビューを行うワークフロー例です:

# .github/workflows/ai-code-review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]
    paths:
      - 'src/**/*.ts'
      - 'src/**/*.tsx'

jobs:
  ai-review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'

      - name: Get changed files
        id: changed-files
        run: |
          git diff --name-only origin/${{ github.base_ref }}...HEAD \
            | grep -E '\.(ts|tsx)$' \
            | head -20 > changed_files.txt
          echo "files=$(cat changed_files.txt | tr '\n' ',')" >> $GITHUB_OUTPUT

      - name: Generate diff
        run: |
          git diff origin/${{ github.base_ref }}...HEAD \
            -- $(cat changed_files.txt | tr '\n' ' ') \
            > pr_diff.txt

      - name: AI Code Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_NUMBER: ${{ github.event.pull_request.number }}
          REPO: ${{ github.repository }}
        run: |
          node - <<'EOF'
          const Anthropic = require('@anthropic-ai/sdk');
          const fs = require('fs');
          const { execSync } = require('child_process');

          const client = new Anthropic();
          const diff = fs.readFileSync('pr_diff.txt', 'utf-8');

          async function review() {
            const message = await client.messages.create({
              model: 'claude-opus-4-6',
              max_tokens: 2048,
              messages: [{
                role: 'user',
                content: `あなたはシニアエンジニアです。以下のPRのdiffをレビューし、日本語で簡潔にフィードバックしてください。\n\nレビュー観点:\n- バグの可能性\n- セキュリティリスク\n- パフォーマンス問題\n- 可読性・保守性\n- TypeScriptのベストプラクティス\n\n\`\`\`diff\n${diff.slice(0, 8000)}\n\`\`\`\n\nマークダウン形式で、重要な問題は⚠️、提案は💡、良い点は✅ でマークしてください。`
              }]
            });

            const review = message.content[0].text;
            const comment = `## 🤖 AI Code Review\n\n${review}\n\n---\n*このレビューはClaude AIにより自動生成されました*`;

            execSync(`gh pr comment ${process.env.PR_NUMBER} --repo ${process.env.REPO} --body "${comment.replace(/"/g, '\\"')}"`, {
              env: { ...process.env }
            });

            console.log('Review posted successfully');
          }

          review().catch(console.error);
          EOF

テスト自動生成ワークフロー

新しいソースファイルが追加されたときに自動でテストを生成するワークフロー:

# .github/workflows/auto-test-gen.yml
name: Auto Test Generation

on:
  push:
    branches: [feature/**]
    paths:
      - 'src/lib/**/*.ts'
      - 'src/hooks/**/*.ts'

jobs:
  generate-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'

      - run: npm ci

      - name: Find untested files
        id: find-files
        run: |
          for f in $(git diff --name-only HEAD~1 -- 'src/lib/**/*.ts' 'src/hooks/**/*.ts'); do
            test_file="${f/.ts/.test.ts}"
            if [ ! -f "$test_file" ]; then
              echo "Missing test: $test_file for $f"
              echo "$f" >> files_needing_tests.txt
            fi
          done

      - name: Generate tests with Claude
        if: hashFiles('files_needing_tests.txt') != ''
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          while IFS= read -r source_file; do
            node generate-test.js "$source_file"
          done < files_needing_tests.txt

      - name: Commit generated tests
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add "src/**/*.test.ts" 2>/dev/null || true
          git diff --staged --quiet || git commit -m "test: auto-generate tests for new files [skip ci]"
          git push

チーム開発での活用

コードレビューの自動化

Clineをレビュアーとして使う際の効果的なプロンプトパターン:

このPRの変更を以下の観点でレビューしてください:

1. バグの可能性
   - 境界値・エッジケースの未処理
   - null/undefined の扱い
   - 非同期処理のエラーハンドリング

2. セキュリティ
   - SQLインジェクション、XSS の可能性
   - 認証・認可の漏れ
   - 機密情報の露出

3. パフォーマンス
   - N+1クエリ
   - 不要な再レンダリング
   - メモリリーク

4. テスト
   - カバレッジの漏れ
   - エッジケースのテスト

変更ファイル: @src/api/users.ts @src/hooks/useUser.ts

ドキュメント自動生成

APIドキュメントを自動生成する使い方:

src/api/ 以下のすべてのルートハンドラーを読んで、
OpenAPI 3.0形式のYAMLドキュメントを生成してください。

要件:
- すべてのエンドポイントを網羅
- リクエスト/レスポンスのスキーマを正確に記述
- 日本語でdescriptionを追加
- 認証が必要なエンドポイントにはsecurityを設定
- docs/openapi.yaml として保存

コンフリクト解消支援

以下のマージコンフリクトを解消してください。

コンテキスト:
- main ブランチはキャッシュ機能を追加
- feature/refactor ブランチはエラーハンドリングを改善
- 両方の変更を統合した形で解消してください

@src/lib/api-client.ts

Claude Code との比較・使い分け

ツールの位置づけ

詳細比較表

観点 Cline Claude Code
動作環境 VSCode拡張機能(GUI) ターミナル(CLI)
操作方法 チャットUI + 承認ボタン コマンドライン + インタラクティブ
MCPサポート 完全対応(GUI設定) 対応(設定ファイル)
承認フロー アクションごとにGUI確認 インタラクティブ確認 or --yes で自動
対応モデル 多数のプロバイダー対応 Claude専用(Anthropic API)
料金 APIキー直接(プロバイダー依存) Anthropic API(Claudeのみ)
スクリプト化 難しい(GUI前提) 容易(--print フラグで非対話モード)
IDE統合 VSCodeに最適化 エディタ非依存
コンテキスト共有 プロジェクトファイル参照 CLAUDE.md による設定
マルチエージェント 非対応 サブエージェント対応
Hooks 非対応 対応(PostToolUse等)

ユースケース別選択ガイド

実際の使い分け例

Clineが向くシーン:

# 新機能の実装(VSCode内で対話的に)
「認証機能を実装してください。
JWTトークンベースで、
リフレッシュトークンも含めてください。
@src/auth/ フォルダに実装してください」

# リファクタリング(ファイルを見ながら)
「@src/api/users.ts の関数を
リポジトリパターンに分離してください。
@src/repositories/ に移動してください」

Claude Codeが向くシーン:

# CI/CDでの自動テスト生成
claude --print "src/lib/*.ts を読んで、
各関数のユニットテストを生成し、
__tests__/ に保存してください" \
--allowedTools "Read,Write"

# バッチ処理(複数ファイルの一括変換)
claude --print "src/ 以下のすべての .js ファイルを
TypeScript に変換してください" \
--allowedTools "Read,Write,Bash"

# Gitフックとの連携
# .git/hooks/pre-commit
claude --print "$(git diff --staged)" \
  "このdiffにセキュリティ問題がないか確認してください。
   問題があれば exit 1 してください"

両方を組み合わせる戦略

Clineで開発しつつ、Claude Codeでパイプラインを自動化するのが最も効率的です:

フェーズ ツール 作業内容
設計・実装 Cline UIを見ながらコードを書く
コードレビュー Claude Code PRのdiffを自動解析
テスト生成 Claude Code カバレッジ不足箇所を補完
デプロイ確認 Cline ログを見ながらデバッグ
ドキュメント生成 Claude Code バッチでAPIドキュメント生成

パフォーマンス最適化とコスト管理

APIコストを削減するテクニック

1. モデルの使い分け

// 軽いタスクには安価なモデルを使う
{
  "cline.apiProvider": "openrouter",
  "cline.openRouterModelId": "anthropic/claude-haiku-4-5"
}

重いタスク(設計、複雑なリファクタリング)には claude-opus-4-6、軽いタスク(コメント追記、簡単な修正)には claude-haiku-4-5 と使い分けるとコストを大幅に削減できます。

2. コンテキストの最適化

# .clinerules に追加
## コンテキスト管理
- 作業に無関係なファイルは `@` で参照しないこと
- 大きなファイルは必要な部分だけ引用してください
- テストファイルは実装ファイルと同時に参照しないこと(別タスクで)

3. Auto-Approveの活用

安全な操作(読み取り専用・テスト実行)は Auto-Approve を有効にしてラウンドトリップを減らします。

プロンプトエンジニアリングのベストプラクティス

効果的な指示の構造:

## タスク
[1文で明確に何をするか]

## 背景・コンテキスト
[なぜこれが必要か、現在の状況]

## 要件
- [具体的な要件1]
- [具体的な要件2]

## 制約
- [やってはいけないこと]
- [既存の設計との整合性]

## 参照ファイル
@src/existing-code.ts  # 参考にするファイル

セキュリティ・ガバナンス

企業環境でのCline利用

チームでClineを使う際に考慮すべきセキュリティポイント:

リスク 対策
APIキーの漏洩 .env.gitignore に追加。CI/CDはSecretsを使用
コードの外部送信 プロプライエタリコードをLLMに送信するポリシーを確認
意図しない変更 Auto-Approveは限定的に使用。重要ファイルは手動承認
機密データの含まれるファイル .clineignore ファイルでLLMへの送信を制限

.clineignore の設定

# .clineignore
# 機密情報を含むファイル
.env
.env.*
secrets/
credentials/
*.pem
*.key
*.p12

# 大きすぎるファイル(コンテキスト節約)
node_modules/
dist/
build/
*.log
coverage/
.next/

# バイナリファイル
*.png
*.jpg
*.gif
*.pdf
*.zip

まとめ

上級者がClineを使い倒すための要点:

  1. MCPは複数組み合わせる — GitHub、Jira、社内API等を連携させてClineの能力を最大化
  2. カスタムMCPを構築する — 既存ツールで足りなければ @modelcontextprotocol/sdk で独自拡張
  3. .clinerules をチームで共有する — プロジェクトルールを明文化してAIの行動を統一
  4. CI/CDにはClaude Codeを使う — Clineはインタラクティブ作業、Claude Codeは自動化に使い分け
  5. コストを意識する — 軽いタスクはHaikuモデル、重いタスクはOpusモデルと使い分け

次のステップとして、実際にカスタムMCPを1つ構築してみることをおすすめします。自分のチームの開発フローに最適化されたMCPは、生産性を大幅に向上させます。


参考リンク

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?