LoginSignup
155
91

?「プロジェクトでよく使うコマンド Makefile に書いたろー」
?「docker compose up -d --wait っと…」
👮‍♀「 Makefile警察 だ!」
👮‍♀「 Makefile は、ソフトウェアのビルドプロセスを自動化するためのファイルだ!」
👮‍♀「多目的なタスクランナーとして使うな!」
?「せやったんか。誠にごめんなさい。」

Makefile は広く使われていますが、時々目的外に使われてしまうことがあります。しかし、そのような使い方にはより適した代替手段が存在します。この記事では、 Taskfile というツールについて解説します。

Makefile のつらみ

Makefile は主にビルドプロセスを自動化する目的で生まれましたが、様々なコマンドをまとめて実行する便利さから多目的なタスクランナーとしてもよく使われます。しかし、次のような問題があります。

  • シンタックスが独特で学習コストが高い
  • 複雑ことをやろうとすると可読性が下がりがち
  • 時折 Makefile警察 が現れる

これらの点から、 Makefile の代わりになるものを探る価値があります。

Taskfile の紹介

Taskfile は、シンプルで柔軟なタスクランナーです。 YAML 形式でタスクを定義することができます。
Go で作られており、バイナリ単体で動作するため、多くのプラットフォームで簡単に導入できます。

Makefile と比べたメリット

メリット

  • シンタックスが YAML で分かりやすい
  • Makefile より機能が豊富で大抵のことはシンプルに書ける
  • Taskfile はタスクランナーなので Makefile警察 を黙らせられる

書き方

Taskfile.yml ファイルをプロジェクトのルートに作成して、タスクを定義します。

例:

version: '3'

tasks:
  hello:
    desc: "This task says Hello, World!"
    cmds:
      - echo "Hello, World!"

上記の例では、hello という名前のタスクを作成しています。このタスクは単純に "Hello, World!" を出力します。

タスクを実行するには、以下のコマンドを使用します。

> task hello
task: [hello] echo "Hello, World!"
Hello, World!

定義してあるタスクの一覧を表示することもできます

> task --list
task: Available tasks for this project:
* hello:       This task says Hello, World!

依存するタスクを並列で実行したり、カレントディレクトリに Taskfile.yml がない場合、親ディレクトリを辿って探してくれたり他にも便利な機能がいっぱいあります

まとめ

Makefile は強力なツールですが、多目的なタスクランナーとして使用する場合には独特のシンタックスや制約がハードルとなることがあります。 Taskfile は YAML をベースにシンプルかつ柔軟なタスクの定義が可能です。プロジェクトの自動化には、適切なツールを選択しましょう。

155
91
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
155
91