17. プロセッシングプラグインを書く

開発しようとしているプラ​​グインの種類によっては、プロセッシングアルゴリズム(またはそれらのセット)として機能を追加する方が良い場合もあるでしょう。そうすれば、QGIS内でのより良い統合がなされ(これは、モデラーやバッチ処理インターフェイスといった、「プロセッシング」のコンポーネントの中で実行できるためです)、また開発時間の短縮も期待できます(「プロセッシング」が作業の大部分を肩代わりしてくれるからです)。

開発したアルゴリズムを配布するためには、アルゴリズムをプロセッシングツールボックスに追加するためのプラグインを新しく作る必要があります。このプラグインにはアルゴリズムプロバイダを含ませるとともに、プラグインの初期化の際にアルゴリズムがツールボックスに登録されるようにする必要があります。

17.1. イチから作る

アルゴリズムプロバイダを含むプラグインをイチから作るには、Plugin Builder を使って以下のステップに従います。

  1. Plugin Builder プラグインをインストールする

  2. Plugin Builder を使用して新しくプラグインを作成します。Plugin Builder が使用するテンプレートをきいてきたら、「プロセッシングプロバイダ」を選択します。

  3. 生成されたプラグインには、アルゴリズムをひとつ持つプロバイダが含まれています。プロバイダファイルおよびアルゴリズムファイルには両方ともに十分なコメントがついていて、プロバイダを修正したりさらにアルゴリズムを追加する方法についての情報が含まれています。詳細については、それらを参照してください。

17.2. プラグインをアップデートする

すでに作成済みのプラグインをプロセッシングに追加したい場合は、さらにコードを追加する必要があります。

  1. metadata.txt ファイルに以下の変数を追加する必要があります。

    hasProcessingProvider=yes
    
  2. initGui メソッドによってプラグインのセットアップを担うPythonファイルでは、幾つかのコードを直す必要があります。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    from qgis.core import QgsApplication
    from processing_provider.provider import Provider
    
    class YourPluginName():
    
        def __init__(self):
            self.provider = None
    
        def initProcessing(self):
            self.provider = Provider()
            QgsApplication.processingRegistry().addProvider(self.provider)
    
        def initGui(self):
            self.initProcessing()
    
        def unload(self):
            QgsApplication.processingRegistry().removeProvider(self.provider)
    
  3. processing_provider フォルダを作ってそこに次の3つのファイルを納めることもできます。

    • 白紙の __init__.py ファイル。このファイルは妥当なPythonパッケージを作るために必要です。

    • provider.py ファイルはプロセッシングプロバイダを生成しあなたのアルゴリズムを外部から使えるようにします。

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      from qgis.core import QgsProcessingProvider
      
      from processing_provider.example_processing_algorithm import ExampleProcessingAlgorithm
      
      
      class Provider(QgsProcessingProvider):
      
          def loadAlgorithms(self, *args, **kwargs):
              self.addAlgorithm(ExampleProcessingAlgorithm())
              # add additional algorithms here
              # self.addAlgorithm(MyOtherAlgorithm())
      
          def id(self, *args, **kwargs):
              """The ID of your plugin, used for identifying the provider.
      
              This string should be a unique, short, character only string,
              eg "qgis" or "gdal". This string should not be localised.
              """
              return 'yourplugin'
      
          def name(self, *args, **kwargs):
              """The human friendly name of your plugin in Processing.
      
              This string should be as short as possible (e.g. "Lastools", not
              "Lastools version 1.0.1 64-bit") and localised.
              """
              return self.tr('Your plugin')
      
          def icon(self):
              """Should return a QIcon which is used for your provider inside
              the Processing toolbox.
              """
              return QgsProcessingProvider.icon(self)
      
    • example_processing_algorithm.py ファイルはサンプルアルゴリズムを含みます。 script template file の内容をコピー&ペーストして、自分の必要に合わせて修正してください。

  4. ここまできたらQGISでプラグインをリロードすれば、プロセッシングツールボックスとモデラーの中にあなたのスクリプトを見つけることができるはずです。