84
64

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QGIS・Claude・MCPで誰でも簡単に自然言語で地理情報解析ができる!!!

Posted at

output.gif

こんにちは!

最近、AIエージェントの活用がGIS(地理空間情報)界隈でもかなり注目されていて、僕もCursorやらClineやら色々使ってみていますが、今回はClaudeの話です!!

最近、「Claude Desktop」とMCP(Model Control Protocol)、そしてBlenderを連携させて、自然言語でモデルを作っていた人がいて、めちゃバズってましたね。

我々のようなエンジニアだと自然言語で「ソースコードを操作する」のは見慣れたもんかと思うんですが、GUIのソフトウェアをここまでしっかり操作できるようになるのは衝撃でしたねー。

というのを見ていて「これならQGISもいけるんじゃね!?!?」って思ったらそこそこいけたのでその辺りを紹介していきます!

MCPって?

MCPは「Model Control Protocol」の略で、AIモデル(例えばClaude 3.7 Sonnet)とデスクトップアプリケーションを連携させるためのプロトコルです。

「MCPはAIアプリケーション向けの「USB-C」のような役割を果たします」といった説明がされており、周辺ツールとの標準的な接続方法を提供されています。

MCPの主な特徴

公式サイト(Why MCP?)には以下のようなことが書かれています。

  • LLMが直接活用できる、充実した事前構築済み連携機能のコレクション
  • 異なるLLMプロバイダーやベンダー間を柔軟に切り替えられる機能
  • ユーザー自身のインフラ内でデータを安全に保護するためのベストプラクティス

実際、公式が公開しているModel Context Protocol serversには色々なMCPサーバーがありますし、仕様がオープンなため自作することもできます。コミュニティ隈も盛り上がっていますねー!

MCPのアーキテクチャ

MCPは基本的にクライアント - サーバーアーキテクチャに従っており、主要なコンポーネントは以下の通りです:

  1. MCP ホスト:Claude Desktop、IDE、AIツールなど、MCPを通じてデータにアクセスしたいプログラム。
  2. MCP クライアント:サーバーとの1:1の接続を維持するプロトコルクライアント。
  3. MCP サーバー:Model Context Protocolを通じて特定の機能を提供する軽量プログラム。
  4. ローカルデータソース:MCPサーバーが安全にアクセスできるコンピューターのファイル、データベース、サービス。
  5. リモートサービス:MCPサーバーが接続できるインターネット上の外部システム(APIなど)。

image.png
General architecture

QGISって?GISって?

**GIS(Geographic Information System)**とは「地理空間情報」を取り扱うためのソフトウェアです。
建物・道路・川など地球上には様々な情報が溢れていますが、コンピュータ上でそれらを組み合わせたり、分析を行うことができます。

image.png
PLATEAU TOPIC 1|3D都市モデルでできること[1/2]|デジタル地図とGIS

QGISは、オープンソースのデスクトップGISです。
位置情報データの作成、編集、分析、可視化などを行うための多数の機能を備えており、誰でも自由にインストール・利用できます。
Windows、Mac、LinuxといったさまざまなOSで利用することが可能です。

image.png

詳しくは誰でも自由に使えるGISソフトウェア「QGIS」の特徴や魅力をご紹介などをご覧ください!

QGISとMCP

アーキテクチャの説明にもある通り、MCPでの通信にはサーバーとクライアントが必要です。

幸いにも、qgis_mcpというQGISプラグイン(MCPサーバー)が存在したので、今回はこちらを利用させていただきます!

以下のような手順で、QGISの操作が実行されます。

  1. QGISプラグインをQGISにインストールする
    • これがMCPサーバーの役割を果たします
  2. プラグインを実行する
    • MCPサーバーが9876ポートで立ち上がる
  3. Claude Desktopの設定を行い、クライアントからコマンドが実行されるようにする
  4. Claude Desktop(MCPクライアント)から「今ひらいてる〇〇レイヤの色を変えて」みたいなプロンプトを入力する
  5. クライアントは、MCPサーバーへのリクエストが必要か判断する
  6. 必要なコマンドが選定され、send_command()メソッドを通じてMCPサーバーにリクエストが送られる
  7. MCPサーバーはコマンドを受け取り、実行する

ではやってみましょう!

QGIS + Claude + MCPのセットアップ

今回のセットアップには以下のものを使用しました!

  • macOS Sonoma 14.4.1
  • QGIS 3.42.0-Münster
  • Claude for Mac 0.8.1

各種ソフトウェアのインストールなどの手順は省きます!

セットアップの手順は以下の通りです:

QGISプラグインのインストール

基本的にはREADMEに従います。

まずはPythonのパッケージマネージャーなどの機能を持つuvをインストールしましょう。
(macOS以外の方は適宜読み替えてください。)

brew install uv

インストール後リポジトリをクローンするなり、zipでダウンロードするなりして、とにかくローカルに落としてきます。

フォルダの中にqgis_mcp_pluginというフォルダがあるので、これをzip圧縮します。

image.png

QGISを起動すると最上段に「プラグイン」メニューがあるので「プラグインの管理とインストール」を選択します。

image.png

「ZIPからインストール」を選択し、先ほど圧縮したzipファイルを選択して「インストール」しましょう。

image.png

そうすると、プラグインの一覧で「MCP」などで検索をかけるとインストールしたプラグインが出てくるので、チェックしておきましょう!

image.png

すると、わかりづらいですが、「QGIS MCP」と記載されたボタンが出てきます。

image.png

ボタンを押すとサーバーが起動します。起動すると、ステータスバーに「Server: Running on port 9876」というメッセージが表示されます。これでQGIS側のMCPサーバーが稼働した状態になります。

image.png

Claude Desktopの設定

Claude for Macを起動し、メニューバーからClaudeアイコンをクリックして「設定」を選択します。

image.png

「開発者」タブを選択し、「設定を編集」をクリックします。
するとFinderなどが開き、「claude_desktop_config.json」がハイライトされると思います。

image.png

JSONファイルを開き、以下のように追加します。

{
	"mcpServers": {
		"qgis": {
			"command": "uv",
			"args": [
				"--directory",
				"/<PATH_TO_YOUR_DIRECTORY>/qgis_mcp/src/qgis_mcp",
				"run",
				"qgis_mcp_server.py"
			]
		}
	}
}

※(argsは絶対パスじゃないと動作しないケースが多いので、絶対パスを指定しておきましょう。自分でデバッグできる方はこの限りではありません。)

設定を保存し、Claude Desktopを再起動します。

チャット欄のトンカチマークをクリックしたときに、利用可能なMCPツールが増えていれば成功です!
image.png

これだけの設定で、Claude Desktopから自然言語でQGISを操作することができるようになりました!!!

日本語でQGISを操作してる

まず、Claudeからこんな指示を出してみました。

「ランダムポイント」という名称のポイントレイヤーを作成し、キャンバス内に100個ほどポイントを生成してください。

MCPによる通信を実行しますかてきな内容を聞かれますが、全て許可。

色々なクライアントのコマンドを実行していき、たまにエラーが出ると勝手に修正したりします。

最終的に、このような出力をしてくれました!!
また、QGISの方もちゃんと「ランダムポイント」レイヤーが作成されていますね!!

image.png

ちょっとみづらいのでポイントの色を変えてみましょう。

生成したポイントのスタイルを、緑色にしてください。

image (1).png

いい感じですねー!!

最後に、ちょっとGISっぽく以下のように投げてみました。

ポイントに対して10mのバッファを発生させてください。

image (2).png

ちゃんと、ポイントに対して10mのバッファポリゴンが生成されてました!!!

とてもいい感じですね!!!

今後の展望

ということでMCPを利用して日本語でQGISを操作するということをやってみましたが、当然課題もありそうでした。

例えば

「ランダムポイント」レイヤのid=26から最近傍のポイントを抽出し、そのポイントのidを教えてください。

のようなプロンプトを投げると、実行するコマンドがずっとエラーを返し、最終的には文字数オーバーで落ちてしまったりしました。

ただ、この辺りについてClaudeにPyQGISの知識が足りない、QGISのプロセッシングの知識が足りない、というだけなので、今後どうとでもなっていきそうな気がします。
(QGISのPython APIであるPyQGISを生成し、実行しにいっているようでした。)

今までは専門的な知識を持った人しか利用できなかったGIS・地理空間情報ですが、自然言語で簡単に分析の指示が出せるようになると、できることがものすごく広がりそうです!!!

僕らとしても、もっともっと利用のハードルを下げるためにプラグインの整備などなどやっていきたいなーと思いました!!

84
64
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
84
64

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?