poetryでnpm runしたいならtasks.jsonを使えばいいじゃない
pipenvは死んだからpoetryを使おうという記事を先日かいたけど、どうにもpoetryはpipenv run
とか、npm run
の代替となる機能がないらしい。
poetry run
はあるけど、後ろのコマンドを全部手入力しなきゃいけなくて、poetry run <ユーザー定義スクリプト>
はできない。
pyprojectにscriptsという設定があるけど、これはパッケージングのときに外部に提供するコマンドを指定する所らしくて、setup.py
のentry_point=[console_scripts]
みたいな使い方しかできないらしい。
実際、pyproject.scriptsにはpythonスクリプトしか指定できない。echoとかcdとか使えない。ロードマップを見ても、追加されそうな気配はない。
じゃあスクリプトを自作してしまおうというのが今回の主旨。前置きが長くなったけど、そんなに大したものではない。ツールはVSCodeのタスクランナーを使う。
VSCodeを開いて、Ctrl + Shift + p
で設定を開く->Configure Taskで.vscode/tasks.jsonが作られる(多分)。
はじめに自分のtasks.jsonを載せておく。
{ "version": "2.0.0", "tasks": [ { "label": "runserver", "type": "shell", "command": "poetry run python ${cwd}/server/manage.py runserver", "presentation": { "reveal": "silent" } }, { "label": "makemigrations", "type": "shell", "command": "poetry run python ${cwd}/server/manage.py makemigrations" }, { "label": "migrate", "type": "shell", "command": "poetry run python ${cwd}/server/manage.py migrate", "dependsOn": ["makemigrations"] } ] }
必須なのがlabel, type, commandで、他のはなくても良い。まぁ見ればわかると思うので詳しくはドキュメントを見てください。
今はDjangoの開発をしてるから、manage.py 関連しか無い。manage.pyは補完が効かないからまじで便利。
他にも便利機能としては${cwd}でルートディレクトリが取得出来る。他にも色々変数がある cwdだからcdしたら値変わるんじゃねとか思ったけどなんかルートディレクトリに固定されるみたい。動くからヨシ!
あとはdependsOnでタスクを連鎖させることができる。これでmakemigrations&migrateを一発で終わらせられる。