QGISプラグイン開発入門【基礎編】

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月

この記事をシェア

関連デモ・ツール

技術選定からご相談ください

発注範囲が決まっていなくても、現在の業務と判断したいことから整理します。

相談内容を送る

GIS・AI・業務自動化に関するご相談は お問い合わせページ からお気軽にどうぞ。