いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Task (go-task) メモ-28 (不要なビルドを行わないようにする, Prevent unnecessary work)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

これまでの Task に関する記事は上の関連記事をご参照ください。

Taskでは、Makeのように成果物を作成する際に不要なビルドを行わないように出来ます。

コンパイル結果を生成する場合のタスクなどに特に有用。

やり方は、以下のようにタスクを構築するだけです。

(タスクの名前は何でも良いです。以下ではbuildとしています)

  build:
    cmds:
      - ビルドするためのコマンド
    sources:
      - 対象となるソース (例: ./*.go)
    generates:
      - 成果物の指定 (例: app{{exeExt}} exeExtは事前定義されている変数でOS毎に '''.exe' のようになります)
    method: 変更されたかどうかを判定する方法 (例: timestamp 他にもchecksumなどがあります)

サンプル

# https://taskfile.dev

version: "3"

tasks:
  default:
    deps:
      - build
    cmds:
      - ./app.exe
  build:
    cmds:
      - go build -o app.exe main.go
    sources:
      - ./*.go
    generates:
      - app{{exeExt}}
    method: timestamp
  clean:
    cmds:
      - rm -rf .task/
      - rm -f app.exe

実行すると以下のようになります。

$ task
task: [build] go build -o app.exe main.go
task: [default] ./app.exe
HELLO WORLD

$ task
task: Task "build" is up to date
task: [default] ./app.exe
HELLO WORLD

初回はビルドタスクが実行されていますが、2回目からは変更が無いので Task "build" is up to date と表示されてスキップされていますね。

尚、本機能を利用するとデフォルトではタスクファイルがあるディレクトリに .task/ というディレクトリが生成され、その中にタイムスタンプなどの情報が保存されます。このディレクトリは .gitignore に設定するようにしましょう。

参考情報

taskfile.dev

github.com

engineer.retty.me

zenn.dev

zenn.dev


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。