はじめに
やっちまったなァ! nikkieです。
気になっていたパッケージを触りました。
使い始めの素振りログを綴ります。
目次
- はじめに
- 目次
- その名はtaskipy
- 知ったきっかけ
- Poetryのない環境でtaskipyを使う
- taskipyドキュメントより
- 終わりに
- P.S. taskipy以外にもタスクランナーはありますよね
その名はtaskipy
「The complementary task runner for python.」(Python向けの補完的なタスクランナー)を謳うtaskipy!
ドキュメントの例を私の言葉で説明すると
python -m unittest tests/test_*.py
と毎回叩いているとする- 「それ、taskipyで簡単にできるよ!!」
- testタスクを定義(詳細は後述)
task test
またはpoetry run task test
だけ🙌
今回はPoetryなしの環境での使い出しをアウトプットです。
知ったきっかけ
存在を知ったのはdoccanoのソースコードを読み始めたとき。
task
というのが気になって1、「どうやらtaskipyらしいぞ」と頭の片隅に留まりました。
https://github.com/doccano/doccano/blob/v1.8.3/backend/pyproject.toml#L83
また、澁川さんが書かれたフューチャー技術ブログでもtaskipyを見かけ、「いつか触りたい」とウズウズしていました。
ツールの実行はまとめて行いたい、みたいなことがありますが、poetryにはツールランチャーの機能はないので、taskipyを入れます。
Poetryのない環境でtaskipyを使う
Using Taskipy Without Poetryを参照します。
but actually only requires a valid
pyproject.toml
file in your project's directory.
(Poetryはなくてもいいけど)pyproject.toml
だけ必要とのことです。
作っていきましょう。
最近、pyproject.toml
デビューを果たしたのでした2。
taskipyインストール
pip install taskipy
インストールするとtask
コマンドが使えるようになります4。
% task --list no pyproject.toml file found in this directory or parent directories
% touch pyproject.toml % task --list no tasks found. add a [tool.taskipy.tasks] section to your pyproject.toml
タスクの定義 & 実行
pyproject.tomlに[tool.taskipy.tasks]
セクションを定義していきましょう。
先の例の続きです。
python -m unittest tests/test_*.py
をtestタスクとして、pyproject.tomlに定義します。
[tool.taskipy.tasks] test = "python -m unittest tests/test_*.py"
これだけでtask test
が動きます。
% task --list test python -m unittest tests/test_*.py
% task test . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
ディレクトリ配置はこうなっていました。
. ├── tests/ │ ├── __init__.py │ └── test_example.py # 1 == 1 というテストが1件ある └── pyproject.toml
taskipyドキュメントより
「Composing Tasks」(タスクの構成)を見ていきます。
複数タスクの組合せ
ソースコード(素振りではテストコードしかないですが)をblack
でフォーマットするタスクも追加します
[tool.taskipy.tasks]
test = "python -m unittest tests/test_*.py"
+black = "black -l 79 tests"
blackでフォーマットしてからtest実行と、複数のタスクを組合せたタスクが作れます!
[tool.taskipy.tasks]
test = "python -m unittest tests/test_*.py"
black = "black -l 79 tests"
+dev = "task black && task test"
% task dev All done! ✨ 🍰 ✨ 2 files left unchanged. . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
シェルコマンドを&&
でつないでいる5という理解です。
タスクの前または後に挿入(フック)
もう1つ、Pre Task Hook、Post Task Hookが提供されています!
命名規則は分かりやすく
awesome
タスクの前に実行したいタスクはpre_awesome
- 後に実行したいタスクは
post_awesome
と命名するだけ! 簡単です🙌
組合せる代わりに、testの前にblackでフォーマット、とタスクを構成すると
[tool.taskipy.tasks]
test = "python -m unittest tests/test_*.py"
black = "black -l 79 tests"
dev = "task black && task test"
+pre_test = "task black"
% task test All done! ✨ 🍰 ✨ 2 files left unchanged. . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
testの前にblack(pre_test
タスク)が実行されていますね!
今回は見切れていないですが、変数も使えるみたいですよ〜
終わりに
Poetryのない環境でtaskipyを触り始めた素振りログでした。
思っていた以上に簡単に使えて好印象です!
小さいタスクを組合せたり、pre/postのフックで順番に流したり、これはいいですね〜。
また、pyproject.toml
ができるので、スプラウトメソッド・スプラウトクラス6みたいにpyproject.toml
への移行の芽ができるのもいいな〜と思います。
使っていく中で新たな発見があったらまたアウトプットしようと思います〜
P.S. taskipy以外にもタスクランナーはありますよね
最近知ったのが「Poe the Poet」
ref: Dev Containerを使ってステップバイステップで作るPythonアプリケーション開発環境 - ISID テックブログ
愛称を勝手につけるならぽえぽえですね。
こちらはPoetryが必須なのかな?
あとPoetryより前からあるんじゃないかと思うのがtox
(タスクランナーと言っていいかは自信なし)。
自作パッケージのCI環境を整える中で、ちょっとだけ触りましたが、taskipyと比べると覚えることは多めです(役割が違うかもしれないので比較はあんまり意味がないかも)
- https://github.com/doccano/doccano/blob/v1.8.3/docs/CONTRIBUTING.md#development-workflow↩
- ねえ、ChatGPT? nikkieが4月に書いたブログのタイトル一覧があるんだけど、要約してどんな1ヶ月だったか教えてくれるかな? - nikkie-ftnextの日記↩
- リポジトリに1.10.4のタグがないようなので、この記事ではREADMEは1.10.3を参照しています↩
-
--list
ref:https://github.com/taskipy/taskipy/tree/1.10.3#running-tasks↩ -
シェルで
command1 && command2
は、command1が正常終了(ステータスコード0)のときに、command2が実行されます。ref:『マスタリングLinuxシェルスクリプト 第2版』1.6.3↩ - 『レガシーコード改善ガイド』第6章より↩