17
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini-CLIを使ってDevin MCP Server for Azure Functionsを作った

Posted at

はじめに

こんにちは!

ノベルワークスのザワッチです!

昨日(2025/6/25の22時過ぎくらい)、GoogleからAIコーディングエージェント Gemini-CLIが出たので、早速使ってみました!

Gemini-CLIとは

Gemini CLIは、Googleが提供する無料でオープンソースのAIエージェントです。

開発者がコマンドラインインターフェース(ターミナル)から直接、Geminiモデルの能力を利用できるように設計されています。

主な特徴:

  • 目的: コーディング、デバッグ、コンテンツ生成、調査といった様々なタスクを、使い慣れたターミナルから直接行えるようにします。

  • オープンソース: Apache 2.0ライセンスで公開されており、誰でもソースコードの閲覧、変更、プロジェクトへの貢献が可能です。

  • 高い利用上限: 個人利用は無料で、Gemini 1.5 Proモデルにアクセスでき、1分あたり60リクエスト、1日あたり1,000リクエストという高い利用枠が提供されます。

  • コア機能:

  • Google検索と連携し、リアルタイムの情報をプロンプトの文脈に含めることができます。

  • 特定のワークフローに合わせて拡張・カスタマイズが可能です。

  • スクリプト内での自動化など、非対話的な利用もサポートします。

  • 統合: Gemini Code Assist(VS CodeなどのIDE向けAIアシスタント)と基盤技術を共有しており、IDEでもターミナルでも一貫したAIアシスタント体験を提供します。

要するに、「開発者がターミナルから手軽かつ強力にAIの支援を受けられるようにするための、オープンなコマンドラインツール」と言えます。

詳しくはこちらをご覧ください。

By Gemini-CLI

今回作ったもの

Devinが提供しているAPIを使用して、CursorやClaudeDesktopなどのMCPホストから自然言語でDevinを操れるようにするDevinMCPサーバを構築しました。

Gemini-CLIを使って、MCPサーバをAzure Functionsで構築するというごちゃまぜ状態になります。

以下は、APIリファレンスになります。

こちらのAPIリファレンスの中から、抜粋して以下の6つの機能をMCPサーバが提供するツールとして実装しました。

  • createSession: 新しい Devin セッションを作成
  • sendMessage: 既存の Devin セッションにメッセージを送信
  • uploadFile: ファイルを Devin セッションにアップロード
  • listSessions: すべてのセッションの一覧を取得
  • getSession: 特定のセッションの詳細を取得
  • updateTags: 特定のセッションのタグを更新

実装してみる

さあ、Gemini-CLIをインストールして、以下の画面が出てきた。

かっけぇ。
image.png

MCPサーバという新しめの概念なので、あらかじめ最初に以下のソースを渡して、ちゃんとわからなかったらWeb検索して実装してねと依頼をしました。

実装していくのですが、ほとんどClaude Codeと同じ見た目・挙動なので、実装している間のやり取りに変わったものがないので、載せることがないです。。。

コードの実装に加えて、Azureリソースをデプロイするためのterraformの設定など、あれこれ設定したものを以下のレポジトリで公開しています。

デプロイ

こちらをMCPホストに設定しておきます。

ローカルMCPの場合

mcp.json
{
    "servers": {
        "local-Devin-MCP": {
            "type": "sse",
            "url": "http://localhost:7071/runtime/webhooks/mcp/sse"
        }
    }
}

リモートMCPの場合

まずは、こちらを参考にAzureリソースをデプロイします。(Azure FunctionsはVnet統合していません。)

Azure PortalのデプロイしたAzure Functionsリソースに移動し、デプロイセンター(Deployment Center)でGithubと作成したレポジトリを連携します。

image.png

すると、ツールが認識されAzure FunctionsがMCPサーバとして利用可能になります。

image.png

そして、x-functions-keyという認証キーが必要になります。

それが、App Keysのところのmcp_extentionに該当します。

image.png

このサンプルではAzure Functionsのシステムキー認証というシンプルな方法を採用していること、そしてそれがMCPの正式なOAuth2.0の仕様とは異なる簡易的な実装であるので、MCPホストによっては接続できない可能性があります
https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization

mcp.json
    "Remote-Devin-MCP-for-azure-functions": {
            "type": "sse",
            "url": "https://${AzureFunctionsの名前}.azurewebsites.net/runtime/webhooks/mcp/sse",
            "headers": {
                "x-functions-key": "${mcp_extension}"
            }
        },

動かしてみる

現在のDevinのセッションを取得してみる。
見せられない情報もあるのですが、ちゃんと取れているのでよき!

image.png

getSessionを呼び出して、詳細情報を取得してみる。
Devinのセッションの要約内容まで出してきているので、Devinの進捗確認に使えそう。

image.png

ツール「updateTags」が明確な指示を出していないのに結構呼び出されたので改良が必要

Gemini-CLIを使ってみての感想

  • とにかく生成速度が速い
    Claude Codeとは違い、gemini-cliは生成速度が1.3倍ぐらい早かった。
    できてるかなぁーと見に行くとすでにできている場合がほとんどだった。

  • 検索精度がめちゃくちゃいい
    やはり本家Google検索を搭載しているからか、検索精度がめちゃくちゃいい。
    下の写真の感じで、Web検索してくれる。

image.png

というのも、Web Fetch Tool(web_fetch)とWeb Search Tool(web_search)というツールがGemini-CLI内部のツールとして定義されているようです。

そのツールでは、Geminiの検索機能付きAPIをラップして、その結果を生成して返しているみたいです。

詳しくは、ドキュメントをご覧ください。

おわりに

Googleが出したGemini-CLIは今後のAIエージェントコーディングツールとして、世の中に広まっていくことは間違いないです。

で、Googleのさまざまなサービスとの連携が本格的にできるようになれば、さらに実用的になっていくのではと考えられます。

特定のツールに固執することではなく、これらのAIエージェントと対話し、タスクをこなさせていく中で得られる「知見」が重要で、それはAIにどう指示すれば意図通りに動くのか、どのようなタスクを任せるのが効果的なのかとか、そうした感覚やスキルは、将来どんなツールが登場したとしても応用可能な、普遍的な能力となるのではと思いました。

今、Gemini CLIのような先進的なツールに触れ、試行錯誤を重ねることこそが重要ですね

17
9
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
17
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?