VisualStudioCodeを用いてのデバッグ | Luigi Advent Calendar 2016 #02

2016.12.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。

このエントリは『Luigi Advent Calendar 2016』2日目の内容となります。
今回は開発環境を構築していきたいと思います。

先日1日目はHello Worldタスクを作ってみた でした。

前回、導入したLuigiの環境ですが、開発を進めていくうちにステップ実行したい・変数の値を確認したいといったケースがあると思います。 必要となる前に事前にそういった点を押さえておきたいと思います。

Visual Studio Code(VSCODE)を用いたLuigiのデバッグ

今回のデバッグ対象としては以下のコードを対象としました。
runの中でフィボナッチ数列を1~1000まで出力すると行った内容です。

HelloWorldTask.py

import luigi
import FibonacciNumber


class HelloWorldTask(luigi.Task):
    task_namespace = 'examples'
    m = []

    def run(self):
        f = FibonacciNumber.FibonacciNumber()
        ans = f.calculation(1000)
        print list(ans)


if __name__ == '__main__':
    luigi.run(
        ['examples.HelloWorldTask', '--workers', '1', '--local-scheduler'])

FibonacciNumber.py

class FibonacciNumber:
    def calculation(self, m):
        a = 1
        b = 1
        while a < m:
            yield a
            a, b = b, a + b

前回では、以下のように上記のタスクを起動していました。

PYTHONPATH='.' luigi --module HelloWorld examples.HelloWorld --local-scheduler

しかし、毎回PYTHONPATHを通して、moduleで起動するモジュールを指定するというのは割りと煩雑です。
その解決策としてHelloWorldTask.pyの15~17行目に追加した行でHelloWorldTask.pyが直接起動された際に、
Luigiタスクとしてこのファイルに記載されているタスクが動くように記載してみました。
以下のように実行することが可能となります。

python ./HelloWorldTask.py

また、mainからluigiのタスクが呼べるようにしておくことで、VSCODEのデバッグも捗ることになります。

実際にデバッグする際はHelloWorldTask.pyを選択している状態でデバッグモードに入り、Pythonのデバッグを実行するだけで、 ブレークポイントの設置や変数の値の参照等が行えることとなります。

上記の例においてFibonacciNumber.py内のcalculationメソッド内にブレークポイントを置き、HelloWorldTask.pyの デバッグを実施して見ると以下のようになります。 AdvLuigi1202

ブレークポイントで止まるたびに、左側の変数の値が変わっているのがわかるかと思います。
実際にデバッグする際に挙動や値を確認しながら動かすことで、バグの含まないタスクを実装していきたいものです。

まとめ

Visual Studio Codeを用いての開発環境を構築してみました。
明日以降はこの環境を用いて開発を進めていきます。
まずはタスクにパラメータを付与していきます。