はじめました!
にっきーの「っきー」はCookiecutterの「っきー」1。nikkieです。
先日Cookiecutterの素振りをしました。
Cookiecutterテンプレートの作り方が分かったので、taskipy用のテンプレートを公開しました!!🎉
目次
taskipyとは
pyenv + venv の呼吸 弐の型2です!
taskipyはPythonを使った開発で使うツール類を簡単にまとめられるライブラリです。
pyproject.tomlに設定を書くとtask test
という1つのコマンドだけで
- isortでimport順フォーマット
- Blackでフォーマット
- pytestでテストコード実行
- flake8で静的解析
- mypyで型チェック
のように一連のコマンドを流せます!
taskipyのおかげで、私の開発、捗ってます!
taskipyについて詳しくは以下をどうぞ
ftnext/cookiecutter-taskipy
今回公開したtaskipy用のCookiecutterテンプレート
なぜ作ったか
既存のプロジェクトに対してtaskipyを導入することが増えてきたのですが、毎回同じ設定をpyproject.tomlに書くのが大変だなと思い始めました。
ちょうどCookiecutterを知ったことで、taskipyを設定するpyproject.tomlをテンプレートにできるのではないかと思い至り、自分のために作り、GitHubで公開までしてみました。
使い方
まずはCookiecutterをインストールしてください(素振り記事参照)
今回の環境
- Python 3.10.9
- Cookiecutter 2.3.0
https://github.com/ftnext/cookiecutter-taskipy を指定します3。
% cookiecutter https://github.com/ftnext/cookiecutter-taskipy --checkout 0.1.0 [1/3] project_name (awesome_project): example_project [2/3] package_root_dir_name (src): mylib [3/3] line_length (79):
example_project
ディレクトリができ、その中にpyproject.toml
ができます。
[tool.taskipy.tasks] pre_test = "task format" test = "pytest -v" post_test = "task check" format = "task format_autoflake && task format_pyupgrade && task format_black && task format_isort" format_autoflake = "autoflake --in-place --remove-all-unused-imports $(find mylib tests -name '*.py') setup.py" format_pyupgrade = "pyupgrade $(find mylib tests -name '*.py') setup.py" format_black = "black -l 79 mylib tests setup.py" format_isort = "isort --profile black -l 79 mylib tests setup.py" check = "task check_flake8 && task check_mypy" check_flake8 = "flake8 mylib tests" check_mypy = "mypy mylib tests"
あとは(必要な依存関係をインストールした上で)task test
を叩きながらmylibパッケージの開発に注力するだけです。
既存のプロジェクトにpyproject.tomlを追加する場合は--overwrite-if-exists
オプション4を使う想定です。
続く例では、カレントディレクトリにgit clone git@github.com:ftnext/sphinx-new-tab-link.git
してあります5
% cookiecutter https://github.com/ftnext/cookiecutter-taskipy --checkout 0.1.0 --overwrite-if-exists [1/3] project_name (awesome_project): sphinx-new-tab-link [2/3] package_root_dir_name (src): sphinx_new_tab_link [3/3] line_length (79):
sphinx-new-tab-link
ディレクトリの中にpyproject.toml
が生成されました!
これでtaskipyの導入、はかどるぞ〜〜!!
今後
今回公開したのはまだv0.1.0で、使う中で磨き込んでいく想定です。
taskipyでまとめるライブラリを増やすというよりは、cookiecutter側の設定を作り込んだり、pyproject.tomlにツールの設定を充実させたり6といった拡張を考えています。
自分のために作ったものを公開しているにすぎないので、自分にとって使いやすく整えていきます!
終わりに
taskipy向けのCookiecutterテンプレートを自分用に公開しました。
みんなのPython勉強会 LTでの鬼滅ネタオーダーから「呼吸 弐の型」と言ってきましたが、テンプレート(型)を作ったことで「pyenv + venv の呼吸 弐の型 taskipy」に近づいた感があります🙌
- 念頭に置いたのは「無一郎の無は」です↩
-
LTをしました
↩#stapy LTご清聴いただきありがとうございました。
— nikkie にっきー (@ftnext) 2023年6月15日
「taskipyを使ったPython開発環境の一例」
主張:pyenv + venv の呼吸 弐の型 taskipy
多様なツールをtaskipyでまとめ たらいい感じ(フック素晴らしい!)
※要は鬼滅の刃の話です(おいhttps://t.co/rnHvAtJ3R9 -
今後使いながらテンプレートを育てていく予定ですので、
--checkout
オプションにタグを指定するのがオススメです ref: https://github.com/cookiecutter/cookiecutter/blob/2.3.0/cookiecutter/cli.py#L81-L85↩ - ref: https://github.com/cookiecutter/cookiecutter/blob/2.3.0/cookiecutter/cli.py#L106-L111↩
- sphinx-new-tab-linkもみんな使ってくれたら、にっきーうれし〜 ↩
- すごいんだよ、pyproject.toml!ツール類も設定できちゃうのです ↩