QGISプラグインを自作すれば、業務に最適化したツールが作れます。
QGISプラグイン開発入門【基礎編】
この記事では、QGISプラグイン開発の基礎を解説します。
プラグインとは
QGISプラグインの概要
QGISプラグインは、Pythonで書かれた拡張機能です。
できること
- カスタム処理ツールの追加
- 新しいUI(ダイアログ)の作成
- 外部サービスとの連携
- 業務特化の機能実装
既存プラグインの例
| プラグイン | 機能 |
|---|---|
| QuickMapServices | 背景地図の簡単追加 |
| qgis2web | Webマップ出力 |
| Profile tool | 縦断面図作成 |
| Semi-Automatic Classification | 衛星画像分類 |
開発環境の準備
必要なもの
必要なもの
- QGIS(開発対象バージョン)
- テキストエディタ(VS Code推奨)
- Qt Designer(UI作成用、QGISに同梱)
- Python基礎知識
VS Codeの設定
おすすめ拡張機能
- Python(Microsoft)
- Qt for Python
プラグインフォルダの場所
Windows
C:\Users\{ユーザー名}\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins
Mac
/Users/{ユーザー名}/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins
プラグインの構成
最小構成
my_plugin/ ├── __init__.py # プラグイン初期化 ├── my_plugin.py # メイン処理 ├── metadata.txt # プラグイン情報 └── icon.png # アイコン(オプション)
一般的な構成
my_plugin/ ├── __init__.py # プラグイン初期化 ├── my_plugin.py # メインクラス ├── my_plugin_dialog.py # ダイアログクラス ├── my_plugin_dialog_base.ui # UI定義(Qt Designer) ├── metadata.txt # プラグイン情報 ├── icon.png # アイコン ├── resources.qrc # リソースファイル └── resources.py # コンパイル済みリソース
metadata.txt
ini
[general]
name=My Plugin
description=プラグインの説明
version=1.0.0
qgisMinimumVersion=3.0
author=作者名
email=email@example.com
homepage=https://example.com
repository=https://github.com/example/my_plugin
tracker=https://github.com/example/my_plugin/issues
category=Plugins
Plugin Builderで雛形作成
インストール
プラグイン → プラグインの管理とインストール → 「Plugin Builder」を検索 → インストール
雛形の作成
手順
- プラグイン → Plugin Builder → Plugin Builder
- 基本情報を入力(Class name, Plugin name, Description, Module name, Version, Author, Email)
- テンプレートを選択:Tool button with dialog
- 出力先を指定
- Generate
生成後の作業
手順
- 生成されたフォルダをプラグインフォルダにコピー
- QGISを再起動
- プラグイン → プラグインの管理とインストール → 「インストール済み」タブ → プラグインにチェックを入れて有効化
基本的なプラグインの作成
最小限のプラグイン
__init__.py:
python
def classFactory(iface):
from .my_plugin import MyPlugin
return MyPlugin(iface)
my_plugin.py:
python
from qgis.PyQt.QtWidgets import QAction, QMessageBox
from qgis.core import QgsProject
class MyPlugin:
def __init__(self, iface):
self.iface = iface
self.action = None
def initGui(self):
# メニューにアクションを追加
self.action = QAction("My Plugin", self.iface.mainWindow())
self.action.triggered.connect(self.run)
self.iface.addToolBarIcon(self.action)
self.iface.addPluginToMenu("My Plugin", self.action)
def unload(self):
# プラグイン削除時の処理
self.iface.removeToolBarIcon(self.action)
self.iface.removePluginMenu("My Plugin", self.action)
def run(self):
# メイン処理
layer = self.iface.activeLayer()
if layer:
count = layer.featureCount()
QMessageBox.information(
None,
"結果",
f"レイヤ '{layer.name()}' のフィーチャ数: {count}"
)
else:
QMessageBox.warning(
None,
"警告",
"レイヤが選択されていません"
)
metadata.txt:
ini
[general]
name=My Plugin
description=フィーチャ数を表示する簡単なプラグイン
version=0.1
qgisMinimumVersion=3.0
author=作者名
email=email@example.com
ダイアログ付きプラグイン
UIファイル(Qt Designer)の作成:
1. Qt Designerを起動 Windows: C:\Program Files\QGIS 3.x\apps\Qt5\bin\designer.exe 2. 「Dialog with Buttons Bottom」を選択 3. ウィジェットを配置: - QLineEdit(入力欄) - QLabel(ラベル) - QPushButton(ボタン) 4. 保存(.ui形式)
ダイアログクラス:
python
from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QDialog
import os
# UIファイルを読み込み
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'my_dialog.ui'))
class MyDialog(QDialog, FORM_CLASS):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
メインクラスでの使用:
python
from .my_dialog import MyDialog
def run(self):
dialog = MyDialog(self.iface.mainWindow())
result = dialog.exec_()
if result:
# OKが押された場合の処理
input_value = dialog.lineEdit.text()
# 処理を実行
デバッグ方法
print出力
python
# Pythonコンソールに出力
print(f"変数の値: {variable}")
QgsMessageLog
python
from qgis.core import QgsMessageLog, Qgis
# ログパネルに出力
QgsMessageLog.logMessage(
"デバッグメッセージ",
"MyPlugin",
Qgis.Info
)
メッセージバー
python
self.iface.messageBar().pushMessage(
"タイトル",
"メッセージ内容",
Qgis.Warning,
duration=5 # 5秒間表示
)
プラグインのリロード
開発中の変更を反映するには:
手順
- Plugin Reloaderプラグインをインストール
- プラグイン → Plugin Reloader → Configure → 開発中のプラグインを選択
- Ctrl + F5 でリロード
配布方法
ZIP化
1. プラグインフォルダをZIP化
- フォルダ名 = プラグイン名
2. 構成例:
my_plugin.zip
└── my_plugin/
├── __init__.py
├── my_plugin.py
├── metadata.txt
└── ...
社内配布
手順
- ZIPファイルを共有
- インストール方法:プラグイン → プラグインの管理とインストール → 「ZIPからインストール」 → ZIPファイルを選択
公式リポジトリへの公開
手順
- plugins.qgis.org でアカウント作成
- プラグインをアップロード
- 審査を通過すると公開
- QGIS内から検索・インストール可能に
開発のヒント
よく使うQtウィジェット
| ウィジェット | 用途 |
|---|---|
| QLineEdit | テキスト入力 |
| QComboBox | ドロップダウン |
| QCheckBox | チェックボックス |
| QSpinBox | 数値入力 |
| QFileDialog | ファイル選択 |
レイヤ選択コンボボックス
python
from qgis.gui import QgsMapLayerComboBox
from qgis.core import QgsMapLayerProxyModel
# ベクターレイヤのみ表示
layer_combo = QgsMapLayerComboBox()
layer_combo.setFilters(QgsMapLayerProxyModel.VectorLayer)
ファイル選択
python
from qgis.PyQt.QtWidgets import QFileDialog
file_path, _ = QFileDialog.getOpenFileName(
None,
"ファイルを選択",
"",
"シェープファイル (*.shp);;すべて (*.*)"
)
まとめ
プラグイン開発の流れ
開発の流れ
- Plugin Builderで雛形作成
- metadata.txtを編集
- メイン処理を実装
- (必要に応じて)UIを作成
- テスト・デバッグ
- 配布
次のステップ
おすすめ記事
関連記事
