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
[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」を検索
→ インストール
雛形の作成
1. プラグイン → Plugin Builder → Plugin Builder
2. 基本情報を入力:
- Class name: MyPlugin
- Plugin name: My Plugin
- Description: プラグインの説明
- Module name: my_plugin
- Version: 0.1
- Author: 作者名
- Email: email@example.com
3. テンプレートを選択:
- Tool button with dialog
4. 出力先を指定
5. Generate
生成後の作業
1. 生成されたフォルダをプラグインフォルダにコピー
2. QGISを再起動
3. プラグイン → プラグインの管理とインストール
→ 「インストール済み」タブ
→ プラグインにチェックを入れて有効化
基本的なプラグインの作成
最小限のプラグイン
init.py:
def classFactory(iface):
from .my_plugin import MyPlugin
return MyPlugin(iface)
my_plugin.py:
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:
[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形式)
ダイアログクラス:
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)
メインクラスでの使用:
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コンソールに出力
print(f"変数の値: {variable}")
QgsMessageLog
from qgis.core import QgsMessageLog, Qgis
# ログパネルに出力
QgsMessageLog.logMessage(
"デバッグメッセージ",
"MyPlugin",
Qgis.Info
)
メッセージバー
self.iface.messageBar().pushMessage(
"タイトル",
"メッセージ内容",
Qgis.Warning,
duration=5 # 5秒間表示
)
プラグインのリロード
開発中の変更を反映するには:
1. Plugin Reloaderプラグインをインストール
2. プラグイン → Plugin Reloader → Configure
→ 開発中のプラグインを選択
3. Ctrl + F5 でリロード
配布方法
ZIP化
1. プラグインフォルダをZIP化
- フォルダ名 = プラグイン名
2. 構成例:
my_plugin.zip
└── my_plugin/
├── __init__.py
├── my_plugin.py
├── metadata.txt
└── ...
社内配布
1. ZIPファイルを共有
2. インストール方法:
プラグイン → プラグインの管理とインストール
→ 「ZIPからインストール」
→ ZIPファイルを選択
公式リポジトリへの公開
1. plugins.qgis.org でアカウント作成
2. プラグインをアップロード
3. 審査を通過すると公開
4. QGIS内から検索・インストール可能に
開発のヒント
よく使うQtウィジェット
| ウィジェット | 用途 |
|---|---|
| QLineEdit | テキスト入力 |
| QComboBox | ドロップダウン |
| QCheckBox | チェックボックス |
| QSpinBox | 数値入力 |
| QFileDialog | ファイル選択 |
レイヤ選択コンボボックス
from qgis.gui import QgsMapLayerComboBox
from qgis.core import QgsMapLayerProxyModel
# ベクターレイヤのみ表示
layer_combo = QgsMapLayerComboBox()
layer_combo.setFilters(QgsMapLayerProxyModel.VectorLayer)
ファイル選択
from qgis.PyQt.QtWidgets import QFileDialog
file_path, _ = QFileDialog.getOpenFileName(
None,
"ファイルを選択",
"",
"シェープファイル (*.shp);;すべて (*.*)"
)
まとめ
プラグイン開発の流れ
1. Plugin Builderで雛形作成
2. metadata.txtを編集
3. メイン処理を実装
4. (必要に応じて)UIを作成
5. テスト・デバッグ
6. 配布
次のステップ
関連記事
お問い合わせ
QGISプラグイン開発についてのご相談は、お気軽にお問い合わせください。
最終更新: 2025年1月