Forgejo APIの「1ファイル1コミットの罠」を突破!Claude MCP × Git CLIでアトミックにソース修正・PR作成する実践フロー

AI開発自動化日記 #2

Forgejo APIの「1ファイル1コミットの罠」を突破!Claude MCP × Git CLIでアトミックにソース修正・PR作成する実践フロー

前回のIssue自動起票に続き、今回はClaude DesktopからGit CLIを活用してForgejoのソースコードを安全かつ綺麗に修正・PR化する仕組みを解説します。

1. はじめに:Issue起票のその先へ

前回の記事では、Claude Desktopとのディスカッションから、自社サーバーでセルフホスティングしている Forgejo(Gitリポジトリ管理ツール)へ直接Issueを自動起票するMCP環境の構築について解説しました。

タスクの作成が自動化できたら、次にやりたくなるのは「Claudeとの会話を通して、そのままForgejo上のソースコードを修正し、プルリクエスト(PR)まで作成させること」です。

しかし、API経由で直接リポジトリのファイルを書き換えようとすると、Gitの履歴や運用の安全性の観点で大きな問題に直面します。今回はこの問題をGit CLIMCP(Model Context Protocol)の組み合わせでスマートに解決する方法を紹介します。

2. なぜ Forgejo REST API でコードを直接編集してはいけないのか?

ForgejoやGitea、GitHubが用意しているコンテンツ編集APIは、画面上から1つのファイルをサクッと編集するためのAPIです。これをそのままAIによる複数ファイルの修正に流用しようとすると、構造的な問題が発生します。

⚠️ REST API直接操作(コンテンツ直叩き)のリスク
  • 1ファイル=1コミット化によるGit履歴の汚染: 複数ファイルを修正すると、微小なコミットが大量に連射され、レビューや履歴追跡が困難になります。
  • アトミック性(不可分性)の欠如: 途中のファイル更新でエラーが発生すると「前半の変更だけが反映され、後半が未反映」という、不整合で壊れたコードが取り残されます。
  • CI(テスト)の無駄な連鎖: 1ファイル更新されるたびにテストが無駄に起動し、サーバーに無用な負荷がかかります。
💡 専門用語解説:「アトミック性(Atomicity)」とは?

ITやデータベースの世界で使われる言葉で、「これ以上分割できない単位で、すべて成功するか、さもなくば全く実行されないかのどちらか(All or Nothing)」という性質のことです。
Gitの文脈で言えば、関連する複数のファイル修正を1つのコミットにまとめることで、「3ファイル中2ファイルだけ中途半端に更新されてプログラムがバグる」という事故を物理的に防ぐことを「アトミック性を保つ」と言います。

3. 解決策:Claudeに「ターミナル実行権限」を付与する

この問題を解消する鍵が、「コードの編集・コミット・Pushは Git CLI(コマンド)で行い、Forgejo操作(PR作成)のみを API / MCP で行う」という役割分担です。

標準のファイル操作MCP(server-filesystem等)はファイルの読み書きしかできず、Gitコマンドを叩くことができません。そこで、Claudeにターミナルでのコマンド実行権限を与えるサードパーティ製MCP(bash-mcp など)を導入します。

📝 注意書き:ターミナルコマンド(Git CLI)を直接叩ける設定が必須です
ファイル操作専用のMCPだけでは、コードの修正はできてもGitのコミットやプッシュができません。今回の「一括でアトミックな1コミットを作成してPR化する」という仕組みを実現するためには、必ずターミナルコマンド(Git CLI)を直接叩ける設定(server-bash や bash-mcp 等)も必要になります。
⚠️ セキュリティ上の強い警告:
AIにローカルPCのコマンド実行権限を与えることは、意図せぬファイル削除や破壊的コマンドが実行されるリスクを伴います。本番環境のPCではなく、開発専用の仮想環境や、最悪壊れてもやり直せるリポジトリ環境内でのみ自己責任でご利用ください。
【ユーザー】Claude Desktopで指示(例:「ログインボタンを修正してPR作って」)

1. Bash MCP を経由してローカルのターミナルにアクセス
【ローカルワークスペース】

2. Claude が対象ファイルをターミナル経由で修正

3. 続けて Git CLI を実行(`git checkout -b` ➔ `git add .` ➔ `git commit`)
【アトミックな1コミット作成】全修正を1つの綺麗なコミットに集約して Push

4. Forgejo MCP ツールを呼んで PR を起票
【Forgejo】「Closes #12」リンク付きのPRが安全に起票される!

4. Bash MCPの設定手順(Mac / Windows対応)

ステップ 1:対象リポジトリをローカルに clone

あらかじめ Mac や Windows のローカル環境に Forgejo のリポジトリを git clone しておきます。

ステップ 2:claude_desktop_config.json の編集とアプリの再起動

Claude Desktop の設定画面(Settings ➔ Developer ➔ Edit Config)を開き、コミュニティ版のターミナル実行MCPである bash-mcp を追加します。

📁 設定ファイルの保存場所:
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
パターン A:Mac (macOS) の場合
{
  "mcpServers": {
    "forgejo-issue": {
      "command": "npx",
      "args": ["-y", "@ric_/forgejo-mcp"],
      "env": {
        "FORGEJO_URL": "https://your-forgejo-domain.com",
        "FORGEJO_TOKEN": "発行したアクセストークン"
      }
    },
    "local-bash": {
      "command": "npx",
      "args": [
        "-y",
        "bash-mcp"
      ]
    }
  }
}
パターン B:Windows の場合
{
  "mcpServers": {
    "forgejo-issue": {
      "command": "npx.cmd",
      "args": ["-y", "@ric_/forgejo-mcp"],
      "env": {
        "FORGEJO_URL": "https://your-forgejo-domain.com",
        "FORGEJO_TOKEN": "発行したアクセストークン"
      }
    },
    "local-bash": {
      "command": "npx.cmd",
      "args": [
        "-y",
        "bash-mcp"
      ]
    }
  }
}
⚠️ 重要な手順: 設定ファイルを保存した後は、変更を読み込ませるためにClaude Desktopアプリを一度完全に終了(Command + Q またはタスクキル)して再起動してください。

5. 実際の対話フロー:指示からPR作成まで

設定完了後、Claude Desktop に以下のように指示するだけで、ローカルでの修正からGit commit、Push、PR起票までが一気通貫で完了します。

ユーザー
「ターミナルを使って ~/Documents/Forgejo/Projects リポジトリを開いて。Forgejoの Issue #12 の仕様通りにコードを修正したら、ブランチを切って1コミットでまとめ、PushしてPRを作っておいて。」
Claude(AI)
「以下の対応を完了し、ForgejoにPRを起票しました!

1. ai/issue-12 ブランチを作成
2. 対象ファイルのコードを修正完了
3. 1つのコミットにまとめてPushし、PRを起票(Closes #12)
URL: https://git.example.com/org/repo/pulls/15

まとめ:この仕組みを導入する2つのメリット

🚀 1. チャット感覚で手軽に開発・PR起票まで完結(作業時間の大幅短縮) Gitコマンドの手入力やエディタでの変更作業が不要になり、Claudeに口頭やテキストで指示するだけで、ローカルのコード修正・ブランチ作成・Push・PR起票までが一気に完了します。
🛡️ 2. 綺麗で安全な1コミット化(レビューがしやすく壊れにくい) Git CLIを活用することで、複数ファイルの変更を「アトミック(全か無か)」な1つのコミットに集約。「途中のファイルだけ更新されてプログラムがバグる」という事故を防ぎ、レビュー時の差分追跡も格段にスムーズになります。

Recruit

ディーメイクでは各ポジションで一緒に働く仲間を募集中! エンジニア、デザイナー、ディレクターなど、多彩な職種があります。
一緒に成長していきましょう!

  • URLをコピーしました!

コメント

コメントする