PyQGISとは?QGISをPythonで自動化する方法
公開日
PyQGISとは、PythonコードでQGISを操作するための仕組みです。QGISでクリックして行える操作は、レイヤの読み込み、ツールの実行、スタイルの変更、地図のエクスポートなど、数行のPythonでも書けます。100個のファイルに同じ処理をかけるときも、100回クリックする必要はありません。PyQGISはQGISに最初から入っているので、追加でインストールするものはありません。

PyQGIS Developer Cookbookによると、PyQGISのPythonツールはQGIS本体の開発に使われているものとほぼ同じなので、できることはほとんど何でもあります。QGISのプラグインの多くは、当社のものも含めて、PyQGISで書かれています。
自分でコードを書く必要も、いまはなくなりつつあります。チャットボットにコードの下書きを頼めますし、エージェントならコードそのものを省けます。当社が開発しているのがAI Agentです。この記事の後半で、同じ6つのタスクを使って両方を試します。
PyQGISを実行できる場所
実行できる場所は4つあり、向いている作業がそれぞれ違います。
| 場所 | 開き方 | 向いている用途 |
|---|---|---|
| Pythonコンソール | 「プラグイン」→「Pythonコンソール」(Ctrl+Alt+P) | 開いているプロジェクトに対する手早い修正 |
| プロセシングスクリプト | 「プロセシングツールボックス」→「スクリプト」→「テンプレートから新規スクリプトを作成」 | 独自の入力を持つ再利用可能なツール。ツールボックスの標準ツールと同じように使えます |
| プラグイン | QGISプロファイル内のフォルダ | 専用のボタンを持ち、他の人と共有できるツール |
| スタンドアロンスクリプト | 通常のPython、またはqgis_processコマンド | サーバーなど、QGISのウィンドウなしで動かす処理 |
コンソールでは、QGISのウィンドウを操作するオブジェクトifaceが使えます。QGISの外には存在しないため、NameError: name 'iface' is not definedはGIS Stack ExchangeでPyQGISに関して特によく見かける質問の1つです。
プロセシングスクリプトは、QGISが用意するテンプレートから始めます。入力と、処理を行う数行を書き換えるだけで、標準ツールと同じようにツールボックスに表示されます。

最初のPyQGISスクリプト
Pythonコンソールを開いて「エディタを表示」をクリックし、レイヤパネルで建物のレイヤを選択してから、次のコードを貼り付けます。建物の種類ごとに件数を数えます。
from collections import Counter
layer = iface.activeLayer() # the layer selected in the Layers panel
counts = Counter(f["building"] for f in layer.getFeatures())
for kind, n in counts.most_common(5):
print(kind, n)
print("Total:", layer.featureCount(), "features in", layer.crs().authid())
主に使うオブジェクトは3つです。QgsProject.instance()がプロジェクト、QgsVectorLayerとQgsRasterLayerがそのレイヤ、ifaceがウィンドウです。すべてのクラスはAPIリファレンスに載っています。
PythonからQGISのツールを実行する
プロセシングツールボックスのツールは、どれもprocessing.run()の1行でPythonから実行できます。設定項目もツールのウィンドウと同じです。
import processing
result = processing.run("native:buffer", {
"INPUT": "buildings.gpkg",
"DISTANCE": 50,
"OUTPUT": "buffered.gpkg",
})
設定項目の名前を推測する必要はありません。まずツールのウィンドウで一度設定を入力し、下部の「高度」→「Pythonコマンドとしてコピー」を選びます。スクリプトにそのまま貼り付けられる正確な1行が得られます。

同じツールは、QGISを開かずにターミナルからqgis_process run native:bufferで実行することもできます。サーバーで定期実行するときはこの方法を使います。
QGIS 4でPyQGISはどう変わったか
2026年3月6日にリリースされたQGIS 4.0は、ウィンドウやボタンの土台となるツールキット、Qtの新しいバージョンに移行しました。QGISの関数はほとんど変わっていません。動かなくなるのはQtを直接扱うコードで、原因の大半は次の3つの変更です。
| QGIS 3 | QGIS 4 |
|---|---|
Qt.AlignLeftのような短い名前 | Qt.AlignmentFlag.AlignLeftのような完全な名前 |
QRegExp | QRegularExpression |
ダイアログのexec_() | exec() |
QGISには、これらの大半を自動で書き換えるpyqt5_to_pyqt6.pyというスクリプトが付属しており、残りはpyqgis4-checkerで見つけられます。QGISのツールとprocessing.run()だけを使うスクリプトは、たいていそのまま動きます。
ChatGPTやClaudeにPyQGISを書かせられるか
プロジェクトの情報を伝えれば、たいていは書けます。ChatGPTのようなチャットボットであるClaude Sonnetで試したところ、6つのタスクすべてでエラーなく実行できました。レイヤ、フィールド、ファイルパスを説明したときは、6つとも結果が正しいものでした。レイヤ名だけを伝えたときは、6つのうち1つが気づかないうちに誤っていました。スクリプトは動き、警告も出ないまま、標高地図の936ピクセル中396ピクセルを、存在しない高さ0mで埋めていたのです。
| エラーなく実行 | 正しい結果 | |
|---|---|---|
| チャットボット、プロンプトでプロジェクトを説明 | 6/6 | 6/6 |
| チャットボット、レイヤ名のみ | 6/6 | 5/6 |
| QGIS内のAIエージェント、タスクの1文のみ | 6/6 | 6/6 |
ここから分かることは単純です。チャットボットにはプロジェクトの中身が見えないため、コードの質は説明の質に左右され、誤った結果が正しい結果とまったく同じに見えることがあります。QGIS 4にも落とし穴がありました。チャットボットが書いた印刷レイアウトのスクリプト2本は、どちらも上の表にある短いQt名を使っていて、QGIS 4では途中で止まります。
検証方法:2026年9月26日、QGIS 3.44.7で、バリ島デンパサール中心部の地図データを使いました。建物の集計から印刷レイアウトのエクスポートまで日常的な6つのタスクを、1回ずつ試しています。結果が正しいとみなしたのは、実行前に書いておいた別の検証スクリプトに合格した場合だけです。6タスクは小さなサンプルです。
コードを書かない方法:手順を実行するエージェント
ここからは、当社のプラグインAI Agentの話です。QGIS内のチャットパネルにタスクを入力すると、プロジェクトを読み取り、ツールを実行して、結果を確認します。貼り付けるコードも、プロジェクトの説明も要りません。
同じ6つのタスク文を、プロジェクトの説明なしで渡しました。6つすべて正解で、1タスクあたり6.4秒から42.8秒、6つ合計で148.8秒でした。ファイルを書き込む前の確認で2回止まり、「許可」をクリックしています。チャットボットがつまずいた標高のタスクでは、先にレイヤを読み取り、空のピクセルを正しく設定しました。

無料の方法も十分に使えます。コンソール、「Pythonコマンドとしてコピー」、チャットボットを組み合わせれば、結果を確認する限り、かなり遠くまで行けます。やりたいことを文章で伝えてレイヤを受け取りたいなら、エージェントが手順を代わりに実行します。
つまずきやすいポイント
YouTubeのQGISチュートリアルに寄せられた質問を数えました。コメントのある1,692本の動画のうち、245本の動画に寄せられた391件のコメントが、Pythonや自動化についての質問でした。同じ3つの問題が繰り返し出てきます。
- レイヤが見つからない:
mapLayersByName("roads")は、名前が1文字、あるいはスペース1つ違うだけで何も見つけられません。 - 距離が度単位になる:
EPSG:4326のレイヤに50mのバッファを作ると、この座標系は度で数えるため、50度のバッファになります。先に再投影してください。方法はCRSとはで解説しています。 - QGISの外での
iface:ウィンドウの外で動かすスクリプトにはifaceがありません。代わりにQgsProjectとprocessing.run()を使います。
この記事のまとめ
PyQGISは、QGISのPythonインターフェースです。Pythonコンソール、プロセシングスクリプト、プラグインのほか、qgis_processを使えばQGISの外でも動きます。
processing.run()を使うと、QGISのツールをコードから実行できます。ツールのウィンドウから「Pythonコマンドとしてコピー」を選べば、正確な1行が手に入ります。
QGIS 4では、Qt.AlignLeftなど一部のQt名が変わりました。独自のウィンドウを作るコードは、小さな修正が必要になることがあります。
6タスクの検証では、チャットボットのコードは常に実行できたものの、プロジェクトを説明しなかったときは1回誤りました。QGIS内で動くAI Agentのようなエージェントは、タスクの1文だけで6つすべて正解でした。
よくある質問
PyQGISは何に使いますか?
PythonでQGISを自動化するために使います。レイヤの読み込みと編集、多数のファイルへのツール実行、地図のスタイル設定、印刷レイアウトの作成、他の人も使えるプラグインやスクリプトの作成などです。QGISのウィンドウの外でも動くので、サーバー上の処理にも使えます。
PyQGISとPythonは同じですか?
PyQGISは、Pythonから使うQGISの機能群です。書くのは普通のPythonで、PyQGISがQgsVectorLayerやprocessing.run()などを追加します。QGISに付属していて、QGISがインストールするPythonを使います。
QGISでPythonコンソールを開くにはどうしますか?
「プラグイン」→「Pythonコンソール」、またはCtrl+Alt+Pです。長いスクリプトは「エディタを表示」をクリックして書き、.pyファイルとして保存し、緑の矢印で実行します。
QGIS 4でもPyQGISのスクリプトは動きますか?
QGISのツールとprocessing.run()だけを使うスクリプトは、たいてい動きます。独自のウィンドウを作るスクリプトは、Qt.AlignLeftの代わりにQt.AlignmentFlag.AlignLeftと書くなど、小さな修正が必要になることが多いです。公式のpyqt5_to_pyqt6.pyスクリプトで、大半を修正できます。
PythonなしでQGISを自動化できますか?
できます。グラフィカルモデラーを使えばツールを視覚的につなげられますし、バッチ処理ならツール1つを多数のファイルに実行できます。AIエージェントのプラグインなら、さらに進んで、やりたいことを普通の言葉で入力するだけで、プロジェクト内でツールを実行してくれます。当社のAI Agentには無料プランがあります。
さらに詳しく知りたい方へ。QGISのAIエージェントとはでは、エージェントの仕組みと選び方を解説しています。AI Agentは無料で試せます。CRSとはでは、多くのスクリプトが最初に必要とする再投影を扱っています。Claude CodeやCursorを使う方は、QGIS MCPとはで別の方法を紹介しています。


