16.3. プラグインを書いてデバッグするためのIDE設定

プログラマには皆それぞれ自分の好みのIDE /テキストエディタがありますが、ここに人気のIDEを設定し、QGISの Pythonプラグインを書いたりデバッグするためのいくつかの推奨事項があります。

16.3.1. Pythonプラグインを書くのに便利なプラグイン

Pythonプラグインを書くときに便利なプラグインがあります。プラグイン ► プラグインの管理とインストール... から次をインストールします:

  • Plugin reloader: これにより、QGISを再起動することなくプラグインを再読み込みし、新しい変更を取り込むことができます。

  • First Aid: これは、プラグインから例外が発生したときに変数を検査するためのPythonコンソールとローカルデバッガを追加します。

警告

Despite our constant efforts, information beyond this line may not be updated for QGIS 3. Refer to https://qgis.org/pyqgis/master for the python API documentation or, give a hand to update the chapters you know about. Thanks.

16.3.2. LinuxとWindowsでIDEを設定する際の注意点

Linux では、通常、QGISライブラリの場所をユーザの PYTHONPATH 環境変数に追加するだけです。ほとんどのディストリビューションでは、~/.bashrc または ~/.bash-profile を以下の行で編集することでこれを行うことができます(OpenSUSE Tumbleweed でテスト済み):

export PYTHONPATH="$PYTHONPATH:/usr/share/qgis/python/plugins:/usr/share/qgis/python"

ファイルを保存し、以下のシェルコマンドを使って環境設定を実行します:

source ~/.bashrc

**Windows**では、QGISと同じ環境設定にし、QGISと同じライブラリとインタプリタを使用する必要があります。一番手っ取り早い方法は、QGISのスタートアップバッチファイルを変更することです。

OSGeo4Wインストーラを使用した場合はOSGeo4Wインストールの bin フォルダの下にこれを見つけることができます。 C:\OSGeo4W\bin\qgis-unstable.bat のようなものを探してください。

16.3.3. Pyscripter IDEを使ってデバッグする (Windows)

Pyscripter IDE を使うには、次のようにします:

  1. qgis-unstable.bat のコピーを作成し、pyscripter.bat に名前を変更します。

  2. それをエディタで開きます。そして最後の行、QGISを起動する行を削除してください。

  3. Pyscripter実行ファイルを指す行を追加し、使用するPythonのバージョンを設定するコマンドライン引数を追加します

  4. さらに、QGISが使用するPythonのDLLをPyscripterが見つけられるフォルダーを指す引数を追加します。これはOSGeoWインストールのbinフォルダーの下に見つけることができます

    @echo off
    SET OSGEO4W_ROOT=C:\OSGeo4W
    call "%OSGEO4W_ROOT%"\bin\o4w_env.bat
    call "%OSGEO4W_ROOT%"\bin\gdal16.bat
    @echo off
    path %PATH%;%GISBASE%\bin
    Start C:\pyscripter\pyscripter.exe --python25 --pythondllpath=C:\OSGeo4W\bin
    
  5. このバッチファイルをダブルクリックすると、正しいパスでPyscripterが起動します。

Pyscripterよりも人気のあるEclipseは、開発者の間で一般的な選択肢です。次のセクションでは、プラグインの開発とテストのためにEclipseを設定する方法を説明します。

16.3.4. EclipseとPyDevを使ってデバッグする

16.3.4.1. インストール

Eclipseを使うには、以下をインストールしてください

  • Eclipse

  • Aptana Studio 3 Plugin 又は PyDev

  • QGIS 2.x

  • QGISのプラグインである Remote Debug をインストールすることもできます。現時点ではまだ実験的なプラグインなので、あらかじめ プラグイン ► プラグインの管理とインストール... ► 設定checkbox 実験的プラグインも表示 を有効にしてください。

WindowsでEclipseを使用する環境を準備するために、バッチファイルを作成し、それを使用してEclipseを起動する必要があります:

  1. qgis_core.dll が存在するフォルダーを探します。通常、これは C:∕OSGeo4W∕Apps∕qgis∕bin ですが、自分の QGIS アプリケーションをコンパイルした場合、これはビルドフォルダの output/bin/RelWithDebInfo にあります

  2. eclipse.exe 実行ファイルを探します。

  3. 以下のスクリプトを作成し、QGISプラグイン開発時にeclipseの起動に使います。

    call "C:\OSGeo4W\bin\o4w_env.bat"
    set PATH=%PATH%;C:\path\to\your\qgis_core.dll\parent\folder
    start /B C:\path\to\your\eclipse.exe
    

16.3.4.2. Eclipseをセットアップする

  1. Eclipseで、新しいプロジェクトを作成します。 一般的なプロジェクト を選択しておいて本当のソースを後でリンクできるので、このプロジェクトをどこに配置するかは実際は問題になりません。

    ../../../_images/eclipsenewproject.png

    図 16.111 Eclipseプロジェクト

  2. 新しいプロジェクトを右クリックして New ► Folder を選びます。

  3. 詳細 をクリックし、 別の場所に リンク(リンクフォルダ) を選択します。すでにデバッグしたいソースがある場合はこれらを選択してください。そうでない場合は、すでに説明したようにフォルダを作成してください。

するとビュー プロジェクトエクスプローラ で、ソースツリーがポップアップしますので、コードでの作業を開始できます。すでに利用可能な構文の強調表示や他のすべての強力なIDEツールが使用できるようになっています。

16.3.4.3. デバッガを設定する

デバッガが動くようにするには:

  1. Eclipseでデバッグパースペクティブに切り替えます(Window ► Open Perspective ► Other ► Debug)。

  2. PyDev ► Start Debug Server を選んでPyDev デバッグサーバーを起動します。

  3. EclipseはQGISからデバッグサーバーへの接続を待っています。QGISがデバッグサーバーに接続すると、Pythonスクリプトを制御できます。それはまさに私たちが Remote Debug プラグインをインストールしたものです。だからまだ起動していなければQGISを起動し、バグのシンボルをクリックしてください。

ここでブレークポイントを設定できます。コードがそこに達すると実行は停止し、プラグインの現在の状態を検査できます。(ブレークポイントは下の画像の緑色の点です。ブレークポイントを設定したい行の左空白でダブルクリックすることで設定します)。

../../../_images/breakpoint.png

図 16.112 ブレークポイント

今利用できる非常に興味深いものはデバッグコンソールです。先に進む前に、現在実行がブレークポイントで停止していることを確認してください。

  1. コンソールビューを開きます(Window ► Show view)。あまり面白くない Debug Server コンソールが表示されます。しかし Open Console というボタンがあり、これを押すともっと面白い PyDev デバッグコンソールに切り替えることができます。

  2. コンソールを開く ボタンの横にある矢印をクリックし、PyDevコンソール を選択します。どのコンソールを起動するかを尋ねるウィンドウが開きます。

  3. PyDevデバッグコンソール を選択します。それがグレイアウトしていて、デバッガを開始して有効なフレームを選択するように指示された場合は、リモートデバッガが接続されていて、現在ブレークポイント上にあることを確認してください。

    ../../../_images/console-buttons.png

    図 16.113 PyDevデバッグコンソール

これで、現在のコンテキストから任意のコマンドをテストできる対話型コンソールが完成しました。変数を操作したり、APIを呼び出したり、好きなことができます。

Tip

ちょっと面倒なのですが、コマンドを入力するたびコンソールはデバッグサーバーに戻ります。この動作を停止するには、デバッグサーバーページで Pin Console ボタンをクリックしますが、少なくとも現在のデバッグセッションではこの決定は記憶されます。

16.3.4.4. EclipseにAPIを理解させる

非常に便利な機能は、Eclipseが実際にQGISのAPIについてわかっているようにすることです。これにより、タイプミスがないかコードを確認できます。これだけでなく、EclipseでのインポートからAPI呼び出しへ自動入力する支援を可能にします。

これを行うため、EclipseではQGISライブラリファイルを解析し、そこにすべての情報を取得します。しなければならないことは、どこのライブラリを検索するかをEclipseに伝えることだけです。

  1. ウィンドウ ► 設定 ► PyDev ► インタプリタ ► Python をクリック。

    ウィンドウの上部と下部にいくつかのタブで設定済みのPythonインタプリタ(現在QGISのためのpython2.7)が表示されます。私たちにとって興味深いタブは、 ライブラリ および 強制ビルトイン です。

    ../../../_images/interpreter-libraries.png

    図 16.114 PyDevデバッグコンソール

  2. 最初にライブラリタブを開きます。

  3. 新しいフォルダーを追加し、QGISのインストールにあるpythonフォルダーを選択します。このフォルダーがどこにあるかわからない場合(pluginsフォルダーではない場合):

    1. QGISを開く

    2. pythonコンソールを開始する

    3. qgis を入力する

    4. Enterを押す。どのQGISモジュールを使用しているか、そのパスが表示されます。

    5. このパスから末尾の /qgis/__init__.pyc を取り除けば、目的のパスが得られます。

  4. pluginsフォルダーもここに追加してください( user profile フォルダーの下の python/plugins にあります)。

  5. 次に Forced Builtins タブにジャンプし、New... をクリックして qgis と入力します。これでEclipseがQGIS APIを解析するようになります。おそらく、EclipseにPyQt APIについても知ってもらいたいでしょう。そのため、PyQtを強制ビルトインとして追加します。おそらくライブラリタブにはすでに存在しているはずです。

  6. OK をクリックして完了です。

注釈

QGIS APIが変更されるたびに(例えばQGIS masterをコンパイルしていてSIPファイルが変更された場合など)、このページに戻って Apply をクリックだけしてください。これでEclipseがすべてのライブラリを再度解析します。

16.3.5. UbuntuでコンパイルしたQGISをPyCharmでデバッグする

PyCharmはJetBrains社が開発したPython用のIDEです。Community Editionという無料版とProfessionalという有料版があります。PyCharmはウェブサイト https://www.jetbrains.com/pycharm/download からダウンロードできます

Ubuntu上で指定されたビルドディレクトリ ~/dev/qgis/build/master でQGISをコンパイルしたと仮定します。自分でコンパイルしたQGISであることは必須ではありませんが、それでテストしています。パスは合わせる必要があります。

  1. PyCharmの Project Properties, Project InterpreterQGIS というPython仮想環境を作成します。

  2. 小さな歯車と次に Add をクリックします。

  3. Virtualenv environment を選びます。

  4. すべてのプラグインにこのPythonインタプリタを使用するため、 ~/dev/qgis/venv のように、すべてのPythonプロジェクトの一般的な場所を選択します。

  5. あなたのシステムで利用可能なPython 3ベースのインタプリタを選択し、次の2つのオプション、Inherit global site-packagesMake available to all projects をチェックしてください。

../../../_images/pycharm-add-venv.png
  1. OK をクリックし、小さな歯車に戻り、:guilabel:`Show all`をクリックします。

  2. 新しいウィンドウで、新しいインタプリタ QGIS を選択し、垂直メニューの最後のアイコン Show paths for the selected interpreter. をクリックします。

  3. 最後に次の絶対パスをリストに加えます: ~/dev/qgis/build/master/output/python

../../../_images/pycharm-adding-path.png
  1. PyCharmを再起動すると、すべてのプラグインでこの新しいPython仮想環境を使い始めることができます。

PyCharm は QGIS API を認識し、from qgis.PyQt.QtCore import QDir のように QGIS が提供する Qt を使用する場合は PyQt API も認識します。オートコンプリートが機能し、PyCharmがコードを検査できるようになります。

PyCharmのプロフェッショナル版では、リモートデバッグはうまく動作しています。コミュニティ版ではリモートデバッグは利用できません。ローカルデバッガにアクセスできるのは、QGIS自身ではなく、PyCharmの 内部 で(スクリプトやunittestとして)実行されるコードだけです。Pythonコードを QGIS内で 実行する場合は、前述の First Aid プラグインを使用するときでしょう。

16.3.6. PDBを利用してデバッグする

EclipseやPyCharmのようなIDEを使用していない場合は、以下の手順でPDBを使用してデバッグできます。

  1. まず、デバッグしたい場所に次のコードを追加します。

    # Use pdb for debugging
    import pdb
    # also import pyqtRemoveInputHook
    from qgis.PyQt.QtCore import pyqtRemoveInputHook
    # These lines allow you to set a breakpoint in the app
    pyqtRemoveInputHook()
    pdb.set_trace()
    
  2. 次にQGISをコマンドラインから実行します。

    Linuxではこうします:

    $ ./Qgis
    

    macOSではこうします:

    $ /Applications/Qgis.app/Contents/MacOS/Qgis
    
  3. そして、アプリケーションがブレークポイントに到達したら、コンソールに入力することができます!

TODO:

テストの情報を加える