何やらTaskfile.ymlというファイルを見つけたので使い方を軽〜く調べてみた

# はじめに
この記事ではMac環境でTaskfileに関する環境構築と基本構文と実行法について記載していきます。
環境構築については動作保証ができないため他の記事を参考にしてください。

# きっかけ
私はLaravelに関する勉強をしており、普段からお世話になっているucan-labさんが公開しているdocker環境のリポジトリを覗いていた時の話です。

- [Docker×LaravelのDocker環境](https://github.com/ucan-lab/docker-laravel)
- [上記リポジトリの使い方を紹介しているご本人の記事](https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4)

ふと`Taskfile.yml`の中身が気になって開いたところ、中身の構成が`Makefile`と似たような雰囲気を感じて、これは同じような機能のやつでは？と思い[公式ドキュメント](https://taskfile.dev/)を読んでみました。

# Taskとは
Taskはタスクランナー/ビルドツールです。
TaskはGoで書かれており、必要なものはバイナリ1つで他に依存するものがありません。
ビルドツールを使うためだけに複雑なインストール設定をする必要がなく学習コストも低いです。
インストール後は`Taskfile.yml`というファイルにシンプルなYAMLスキーマを使って実行したいタスクを記述するだけです。

# インストール
早速インストールを行なっていきましょう。
MacOSかつ既にHomebrewをインストールしている場合は、以下コマンドでTaskのインストールを行います。
```shell
brew install go-task
```

上記のコマンドを実行した結果です。
```shell
brew install go-task
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Auto-updated Homebrew!
Updated 4 taps (hashicorp/tap, dart-lang/dart, homebrew/core and homebrew/cask).
==> New Formulae
asm6809                      flexiblas                    http-server-rs               pgcopydb
boost@1.85                   gabo                         ldb                          tevent
dart-lang/dart/dart@3.5.1    go@1.22                      mariadb@11.4                 tmpmail
dependabot                   gql                          nuspell                      ufbt
fast_float                   graphviz2drawio              pcaudiolib
==> New Casks
geekbench-ai           kindle-create          labplot                localcan               nrf-connect

You have 32 outdated formulae and 1 outdated cask installed.

==> Downloading https://ghcr.io/v2/homebrew/core/go-task/manifests/3.38.0
########################################################################################################### 100.0%
==> Fetching go-task
==> Downloading https://ghcr.io/v2/homebrew/core/go-task/blobs/sha256:c9d7f0396ff809b2594bd041aa4a00179dc8cf26b951
########################################################################################################### 100.0%
==> Pouring go-task--3.38.0.sonoma.bottle.tar.gz
==> Caveats
zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/go-task/3.38.0: 10 files, 12.2MB
==> Running `brew cleanup go-task`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
```
これでインストールが完了です。

# 使い方
まずはサンプルコードを入力して、実行してみましょう。
実行後にコードについての説明を行います。

任意のディレクトリに`Taskfile.yml`を作成し以下コードを入力してください。
```yml:Taskfile.yml
version: '3'

tasks:
  hello:
    cmds:
      - echo 'Hello World from Task!'
    silent: true
```
[引用元：公式ドキュメント](https://taskfile.dev/)

Terminalで`Taskfile.yml`があるディレクトリでコマンドを入力します。
```shell
task hello
```

実行結果が出力されます。
```
Hello World from Task!
```

## コードの説明

### `version: '3'`
Taskfileのバージョンを指定しています。テンプレートだと思ってください。

### `tasks:`
タスクの定義部分です。

### `hello:`
タスクの名前です。この名前でタスクを実行します。

### `cmds:`
タスクの実行コマンドを配列で記述します。

今回のコードでは、**echo 'Hello World from Task!'** というコマンドが実行されます。

### `silent: true`
タスクの実行するコマンドを標準出力に表示しないように設定します。
違いは以下の通りです。
#### trueの状態での実行結果
![client_trueの出力値.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431046/0713ed33-1a88-97c0-5e50-92b7d05daaa3.png)

#### falseの状態での実行結果
![client_falseの出力値.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431046/7f1c36c5-d77e-fe04-cfcf-abcf3c5517ed.png)

# おまけ
他にも色々なスキーマが[こちら](https://taskfile.dev/reference/schema)に記載されているので参考までに覗いてみてください。

# 最後に
どうでしたか？
MakefileとTaskfileどちらか優れているということはなく、状況によって使い分けるようなものかなと考えています。
Makefileにしかない利点、Taskfileにしかない利点があると思っているので、都度どちらを使うか判断していけるとベストですね！