📄

taskfile.dist.yml を使う

2024/12/15に公開

tl;dr

  • 前回書いたが、ファイル名を工夫する小ネタ
  • Taskfile.dist.yml をリポジトリ(チーム)で使用し、Taskfile.yml を個人で使用する

引用

The intention of having the .dist variants is to allow projects to have one committed version (.dist) while still allowing individual
users to override the Taskfile by adding an additional Taskfile.yml (which would be on .gitignore).

  • Usage | Task
  • 要は組織やチーム、リポジトリ固有のタスクを Taskfile.dist.yml にして、Taskfile.yml を個人で調整に可能にすると便利だよ、ということ

解説

  • go-task は優先度順にファイルを確認し、最初に見つかったファイルを使用する
  • Taskfile.yml をリポジトリ(チーム)で使用してしまうと上書きしにくい
  • Taskfile.dist.yml をリポジトリで使用するタスクファイルにすることで、固有の処理はデフォルトのまま実行できる
  • 個人使用のタスクを追加したり、タスクを組み合わせたりする場合、Taskfile.yml を用意して、Taskfile.dist.yml を include すると自由度が上がる
team-repo $ ls
Taskfile.dist.yml  Taskfile.yml
team-repo $ t
task: Available tasks for this project:
* dist:summary:       view summary of all tasks      (aliases: dist:la)
* dist:test:          task tests                     (aliases: dist:tt)
* summary:            view summary of all tasks      (aliases: la)
Taskfile.yml
# こんな感じで読み込む
includes:
  dist:
    taskfile: ./Taskfile.dist.yml
  • 好きなaliasを付けてdistを呼び出せばどうとでもできる
  • internal にすれば dist を非表示にもできる
  • .git/info/excludeTaskfile.yml を追加してリポジトリの管理外にする
  • 別の個人用リポジトリに Taskfile.repo.yml のようにしておいて、シンボリックリンクをはればgit管理もできる
team-repo $ ll
合計 4
-rw-r--r-- 1 raki raki 1413 1124 07:36 Taskfile.dist.yml
lrwxrwxrwx 1 raki raki   33 1124 07:36 Taskfile.yml -> ../my-repo/Taskfile_team-repo.yml
  • 発展させると自分が使う分だけを取捨選択して組み合わせるなど自由度高い
my-project-repo $ ls
Taskfile.backend.yml  Taskfile.dist.yml  Taskfile.frontend.yml  Taskfile.infra.yml
my-project-repo $ t
task: Available tasks for this project:
* b:a:                   Clean,Build,Deploy backend
* backend:build:         Build       (aliases: backend:b)
* backend:clean:         Clean       (aliases: backend:c)
* backend:deploy:        Deploy      (aliases: backend:d)
* f:a:                   Clean,Build,Deploy frontend
* frontend:build:        Build       (aliases: frontend:b)
* frontend:clean:        Clean       (aliases: frontend:c)
* frontend:deploy:       Deploy      (aliases: frontend:d)
* i:a:                   Clean,Build,Deploy infra
* infra:build:           Build       (aliases: infra:b)
* infra:clean:           Clean       (aliases: infra:c)
* infra:deploy:          Deploy      (aliases: infra:d)

まとめ

  • タスクファイル名を Taskfile.dist.yml にしておくと便利
  • 個人的なタスクファイルを別リポジトリで管理しておいて、シンボリックリンクで Taskfile.yml にするととても便利
  • include 時のキーをファイル名に(dist部分)にするとわかりやすい

Discussion