【タスクランナー】Go製のタスクランナー go-taskの導入方法と簡単な使い方
ymlファイルベースのタスクランナー、go-taskが便利だったので、導入方法と簡単に使い方も紹介します。
概要
go-taskはタスクランナーツールです。
最大の特徴はそのシンプルさでしょう。公式でもGNU Makeよりもシンプルで使いやすいと謳っています。
ドキュメントはこちらです。
各タスクはTaskfile.ymlのymlファイルに記載していく形となります。
インストール
まずはインストール方法についてみていきましょう。
公式では非常に多くのインストール方法が提示されています。
この記事では、npm installを利用した方法を紹介します。
bash1npm install @go-task/cli 2 3# バージョンの確認 4npx task --version 5 6Task version: v3.37.2
これでバージョン情報が確認できればOKです。
基本的な書き方
インストールが完了したところで、基本的な書き方をみていきましょう。
go-taskでは、Taskfile.ymlを設置し、その中に各タスクを書いていくことになります。
最初に、helloの文字列を出力するだけのシンプルなhelloタスクを追加してみます。
以下のようになります。
Taskfile.yml1version: "3" 2 3tasks: 4 hello: 5 cmds: 6 - echo 'Hello' 7 - echo 'Go Task!'
基本的な書き方として、tasks:の配下に各タスクを記載します。
tasks直下にあるhelloがタスク名になります。これは任意の名前をつけることができます。
コマンドからタスクを実行する際はこのタスク名を指定することになります。
タスク名の配下にあるcmds以下が実行するコマンドになります。上記の例のように複数コマンドも指定できます。
タスクの実行
それでは実際にタスクを実行してみます。
コマンドはnpx task <実行したいタスク名>になります。
bash1npx task hello 2 3task: [hello] echo 'Hello' 4Hello 5task: [hello] echo 'Go Task!' 6Go Task!
ちゃんと出力できました。
作業ディレクトリを指定する
taskを実行するときデフォルトで、実行するTaskfile.ymlがあるディレクトリが開始ディレクトリとなります。
コマンド実行時の初期ディレクトリを変更するにはTaskfile.ymlのタスク内でdirに作業ディレクトリを指定します。
Taskfile.yml1version: "3" 2 3tasks: 4 hello: 5 dir: ここに作業ディレクトリを指定する。 6 cmds: 7 - pwd
環境変数の指定
Taskfile内では各タスクで使用する環境変数も指定できます。
指定方法はいくつかあります。
Taskfile内でグローバルに使用できる環境変数を指定する。
各タスクで使用する共通の環境変数をグローバルに指定できます。
トップレベルにenvを指定し、その中で環境変数を定義していきます。
下記では、ENV_1にenv1の値を、ENV_2にenv2の値を環境変数として設定しています。
各タスク内では、設定した環境変数を使用しています。
Taskfile.yml1version: "3" 2 3# ここで環境変数を指定する 4env: 5 ENV_1: env1 6 ENV_2: env2 7 8tasks: 9 use:env1: 10 cmds: 11 - echo 'ENV_1を使用' 12 - echo $ENV_1 13 14 use:env2: 15 cmds: 16 - echo 'ENV_2を使用' 17 - echo $ENV_2 18
use:env1を実行してみます。
bash1npx task use:env1 2 3task: [use:env1] echo 'ENV_1を使用' 4ENV_1を使用 5task: [use:env1] echo $ENV_1 6env1
ENV_1に設定したenv1が出力されているのがわかります。
次にuse:env2を実行してみます。
bash1npx task use:env2 2task: [use:env2] echo 'ENV_2を使用' 3ENV_2を使用 4task: [use:env2] echo $ENV_2 5env2
こちらではENV_2に設定したenv2が出力されています。
各タスク内でのみ使用できる環境変数を指定する。
上記ではグローバルに環境変数を指定しましたが、各タスク内でも環境変数を指定できます。
やり方は、タスク内でenvを指定し、その中で環境変数を指定します。
下記の例では、use:env1のタスク内で環境変数としてENV_1を設定しています。
use:env2ではENV_2を指定しています。
Taskfile.yml1version: "3" 2 3tasks: 4 use:env1: 5 # ここで環境変数を指定する 6 env: 7 ENV_1: env1 8 cmds: 9 - echo 'ENV_1を使用' 10 - echo $ENV_1 11 - echo 'ENV_2は使用できない' 12 - echo $ENV_2 13 14 use:env2: 15 # ここで環境変数を指定する 16 env: 17 ENV_2: env2 18 cmds: 19 - echo 'ENV_2を使用' 20 - echo $ENV_2
グローバル指定した環境変数と異なり、タスク内で設定した環境変数は別のタスクでは使用できません。
先ほどの例のuse:env1のタスクでは、use:env2内で設定したENV_2の環境変数を出力しようとしていますが、別タスク内で指定した環境変数なのでアクセスできず空文字として出力されます。
bash1npx task use:env1 2 3task: [use:env1] echo 'ENV_1を使用' 4ENV_1を使用 5task: [use:env1] echo $ENV_1 6env1 7task: [use:env1] echo 'ENV_2は使用できない' 8ENV_2は使用できない 9task: [use:env1] echo $ENV_2
別ファイルから環境変数を読み込む
これまでは、Taskfile.yml内で直接環境変数を指定する方法を見てきました。
直接指定する以外にも、別ファイルから環境変数を読み込むこともできます。
dotenvで読み込むファイルを指定することで実現できます。
Taskfile.yml1... 2 3dotenv: ['ここに読み込むファイルのパスを指定する'] 4 5...
読み込むファイルは複数指定することもできます。
Taskfile.yml1... 2 3dotenv: ['ファイル1', 'ファイル2'] 4 5...
下記の例では、読み込むファイルに.envを指定しています。
.env1INCLUDE_ENV="別ファイルから読み込んだ環境変数の値"
Taskfile.yml1version: "3" 2 3# 別ファイルから環境変数を読み込む 4dotenv: ["./.env"] 5 6tasks: 7 use:include-env: 8 cmds: 9 - echo $INCLUDE_ENV
下記が実行結果で、.envで指定した環境変数の値が読み込めていることが確認できます。
bash1use:include-env 2 3task: [use:include-env] echo $INCLUDE_ENV 4別ファイルから読み込んだ環境変数の値
Taskfile.yml内で直接環境変数を指定したときと同様に、各タスク内でdotenvを指定して別ファイルから環境変数を読み取ることもできます。
Taskfile.yml1version: "3" 2 3tasks: 4 use:include-env: 5 # タスク内で別ファイルから環境変数を読み込む 6 dotenv: ["./.env"] 7 cmds: 8 - echo $INCLUDE_ENV
各タスクの説明文
作成したタスクは後でどういう処理をしているのかわかりやすいように、説明文のようなものをつけることができます。
タスク内にdescを指定することで実現できます。
Taskfile.yml1tasks: 2 タスク名: 3 desc: タスクの概要を記載
npx task --list-allでTaskfile.yml内にある全てのタスクを見ることができるのですが、
このときに、descに記載した概要も表示してくれるので、どのタスクがあるのかが一目瞭然で非常に便利です。
bash1npx task --list-all 2 ─╯ 3task: Available tasks for this project: 4* dev:web: 開発環境のWEB環境を起動
タスクを並列実行する
各タスクを並列で実行することもできます。そのためにまずは、並列で実行したいタスクを追加します。
この例では、以下の二つのタスクを並列実行したいとします。
- npm run dev:web
- npm run dev:firebase
1つ目はWEB環境を起動するコマンドで、
2つ目は、firebaseのエミュレーターを起動するコマンドと考えていただければOKです。
この二つの処理を並列で実行させたいので、まずは各タスクを追加します。
1. npm run dev:webをdev:webというタスクとして、2. npm run dev:firebaseをdev:firebaseというタスクとして定義します。
Taskfile.yml1version: "3" 2 3tasks: 4 dev:web: 5 desc: "開発環境のWEB環境を起動" 6 cmds: 7 - npm run dev:web 8 dev:firebase: 9 desc: "Firebaseのエミュレーターを起動する" 10 cmds: 11 - npm run dev:firebase
次にこの二つのタスクを並列実行させるタスクを追加します。
そのために、並列実行させるタスク内でdepsを指定します。
このdepsに先ほどの二つのタスクを指定することで並列実行ができます。
以下では、並列実行させるタスクをdevとしてます。
dev内のdepsに並列実行させるdev:webとdev:firebaseを指定しています。
Taskfile.yml1version: "3" 2 3tasks: 4 # 並列実行させるタスクを追加 5 dev: 6 desc: "開発環境を起動" 7 deps: [dev:firebase, dev:web] 8 9 dev:web: 10 desc: "開発環境のWEB環境を起動" 11 cmds: 12 - npm run dev:web 13 dev:firebase: 14 desc: "Firebaseのエミュレーターを起動する" 15 cmds: 16 - npm run dev:firebase
この状態で、npx task devを実行すれば、dev:webとdev:firebaseが並列実行されます。
以上、GO製のタスクランナーであるgo-taskの紹介でした。