Taskfile使ってみた
仕事でチームメンバーがTaskfileというものがあるということを共有していて、どんなものか知らなかったので、今回は入門してみようと思います。
Taskfileとは?
公式ドキュメントによると、TaskfileとはGNU Makeなどと比較してシンプルであり使いやすさを求めたタスクランナーおよびビルドツールということです。Goで書かれているためバイナリとして利用でき、インストールに他の依存するソフトなどを入れることなく使えることがいいということです。
また、特徴として以下があるようです。
- 上述のようにバイナリをダウンロードするだけでよく、$PATHに追加するだけでいいのでインストールがとても簡単
- シンプルなコマンドを追加するだけでCIパイプラインに組み込むことができる
- 一般的なツールはLinuxやmacOSなどOS依存があるのに比較し、Taskfileはクロスプラットフォームで利用でき、Windowsも対応している
- ファイルの変更がないなどの条件を取得してタスクの実行の制御などができる
その他の情報については、ぜひ公式ドキュメントを参照ください。
実際に使ってみる
インストール
私はmacbookを利用しているのでhomebrew経由でインストールしました。
brew install go-task/tap/go-task
このほかにもsnap
をはじめnpm
、pip
そしてwinget
などでインストールできるようなので、ご利用の環境に合わせてインストール方法を選んでください。
Taskfileの作成
それではコマンドを利用してTaskfile実行環境を構築していきましょう。
Taskがインストールされると、Taskfileは以下のコマンドで生成できます。
task --init
実行するとTaskfile.yml
が実行場所に生成されます。実行パスのサブディレクトリに生成したい場合は以下のように指定することで対応できます。
task --init ./subdirectory
また、名前を指定する場合は以下のようにファイル名を指定します。
task --init Specified.yml
生成されたTaskfile.yml
は以下のようになっておりました。
# https://taskfile.dev
version: '3'
vars:
GREETING: Hello, World!
tasks:
default:
cmds:
- echo "{{.GREETING}}"
silent: true
パッとみた限り、default
というタスクが定義されており、GREETING
に指定されたHello, World!
を表示するコマンドが実行されるということが予想されます。それでは実際に実行してみましょう。default
タスクを実行するには以下のコマンドを利用します。
task default
実行結果は予想通り、画面にHello, World!
と表示されました。なお、silent
オプションをつけていなかった場合、実行したコマンドが先に表示され、以下のような表示になります。
task: [default] echo "Hello, World!"
Hello, World!
uvを利用してPython環境を構築してみる
次にuvを利用してPython環境を構築するためのタスクを定義してみようと思います。
まず、タスクファイルを書いてみます。
# https://taskfile.dev
version: '3'
tasks:
sync:
cmds:
- uv sync
execute:
deps: [sync]
cmds:
- uv run main.py
内容としては以下の実装をしました。
- uvで環境を構築するsyncタスクとコードを実行するexecuteタスクを実装
- executeタスクを実行するためには必ずsyncタスクが先に実行されるように実装
ではまずsyncタスクだけ実行してみます。
task sync
# 以下出力
task: [sync] uv sync
Resolved 1 package in 0.37ms
Audited in 0.00ms
次にexecuteタスクを実行してみます。
task execute
# 以下出力
task: [sync] uv sync
Using CPython 3.12.9
Creating virtual environment at: .venv
Resolved 1 package in 15ms
Audited in 0.23ms
task: [execute] uv run main.py
Hello from taskfile!
結果を見ると、指定したのはexecuteタスクだけですが、その前にsyncタスクを実行させるように指示していたため、実行されていることがわかります。
Makefileと比較して
Makefileと比較して個人的に思ったことをまとめてみます。
- メリット
- YAML形式で書けるので、Makefileと比較して記述が容易である
- あくまで個人的意見ではあるがMakefileの記述方法と比較して書きやすい
- デメリット
- makeコマンドはデフォルトで入っている環境が多いので、インストールする手間がないが、taskコマンドはデフォルトでは入ってないのでインストールが必要
まとめ
今回は簡単ではありますがTaskfileを使ってみました。今まではMakefileを使っていましたが、Taskfileの方が個人的には書きやすい気がするので、今後はTaskfileを使っていこうと思います。
Discussion