MakefileをやめてTaskに移行しました

こんにちは、kubotakです。

弊社では、開発環境の構築にMakefileをタスクランナーとして利用していました。
しかし、予てよりMakefileは「コンパイル、依存関係の管理、インストールなどのルールを記述しておくためのファイル」であるため、タスクランナーとして利用している現状には違和感を感じでいました。
引数の取り回しやhelp(list表示)などひと手間必要で、本来の存在とは異なる利用のためハックな使い方をしていました。

Qiitaの以下の記事を参考にMakefileやめました。

qiita.com

Task

Taskはタスクランナー・ビルドツールでGNU Makeより使いやすいものを目指したプロダクトだそうです。
Go言語により作られているので利用者側としては1バイナリで済むのでほかの依存はありません。
MacOSであればBrewでインストール可能なので手軽に使うことができそうです。

taskfile.dev

タスクはTaskfile.ymlにより管理します。

例(公式サイトより引用)

version: '3'

tasks:
  hello:
    cmds:
      - echo 'Hello World from Task!'
    silent: true

簡単に記述できてtask --listと実行することでコマンドの一覧が表示できるので使い勝手も良いです。
また、説明文を追加しておくとlist表示では便利です。

version: '3'

tasks:
  up:
    desc: '開発環境の起動'
    cmds:
      - docker compose up -d
% task --list
task: Available tasks for this project:
* up:                    開発環境の起動

引数が必要な場合も簡単に記述できます

  test:
    desc: 'テスト実行'
    cmds:
      - docker compose exec app bash -i -c "npm run test {{.CLI_ARGS}}"

コマンド実行は以下のような感じ

task test -- path/to/test.spec.ts

まとめ

プロジェクトのコマンド一覧をTaskに移行して、三週間ほど使っていますが特に不都合なく使えています。
手癖でmakeと打ってしまったり、別のプロジェクトではまだMakefileだったりするのでそちらもTaskに移行して行きたいと思います。
複数人で開発する際は便利なコマンドやよく使うコマンド、説明がないとよくわからないコマンドなどはTaskに集約すると便利になるかと思います。おすすめです!