THUMBS SHIFT→

このブログは主に親指シフトを用いて書かれています

poetryでnpm runしたいならtasks.jsonを使えばいいじゃない

pipenvは死んだからpoetryを使おうという記事を先日かいたけど、どうにもpoetryはpipenv runとか、npm runの代替となる機能がないらしい。 poetry runはあるけど、後ろのコマンドを全部手入力しなきゃいけなくて、poetry run <ユーザー定義スクリプト>はできない。

pyprojectにscriptsという設定があるけど、これはパッケージングのときに外部に提供するコマンドを指定する所らしくて、setup.pyentry_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を一発で終わらせられる。

あとはこれをcommitすれば、vscodeならスクリプトを共有できる。