## 経緯 [[just]]という[[タスクランナー]]を見つけた。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <div> <p class="link-card-title">GitHub - casey/just: 🤖 Just a command runner</p> </div> <div class="link-card-description"> 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub. </div> </div> <img src="https://opengraph.githubassets.com/c069f8478a4a09e4490daad8377e88f33bbf335809954434fc414b22a839b38e/casey/just" class="link-card-image" /> </div> <a href="https://github.com/casey/just"></a> </div> 今まで[[Task]]を使っていたが、[[Task]]よりも設定ファイルが書きやすそうな印象を受けたので試してみることにした。 ## インストール [[Scoop]]でインストールする。 ```console scoop install just ``` <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <div> <p class="link-card-title">GitHub - casey/just: 🤖 Just a command runner</p> </div> <div class="link-card-description"> 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub. </div> </div> <img src="https://opengraph.githubassets.com/3482dbe13404c33586149e8991d676ed92d2c421e1a6daacb4cf0c7976cc2dd3/casey/just" class="link-card-image" /> </div> <a href="https://github.com/casey/just#packages"></a> </div> バージョンは1.11.0。 #2023/01/15 時点での[[crates.io]]最新バージョンは1.12.0になっているが、[[GitHub]]でも1.11.0なのでこのままで。 ## とりあえず書いてみる ```console mkdir just-sandbox cd just-sandbox vim justfile ``` `justfile` ```make dev: echo "devdev" build: echo "build" publish: echo "publish" ``` ```console $ just -l Available recipes: build dev publish $ just build echo "build" build $ just dev echo "devdev" devdev ``` コマンドが出て結果が出るのは[[Make]]と同じ。`just`だけだと先頭のレシピが実行される。 ## ユースケース ユースケースごとの書き方を探ってみる。 ### コマンドを出力しない `@`を先頭につける。 ```make dev: @echo "devdev" ``` https://github.com/casey/just#quick-start ### パラメータを渡す レシピにUsageのように書いてあげればOK。 `justfile` ```make hello name: @echo {{name}} ``` ```console $ just hello mimizou mimizou ``` 指定し忘れるとエラーになる。 ```console $ just hello error: Recipe `hello` got 0 arguments but takes 1 usage: just hello name ``` ### パラメータにデフォルト値を設定する `=``で指定するだけ。 ```make hello name="mimizou": @echo {{name}} ``` ```console $ just hello mimizou $ just hello tatsuwo tatsuwo ``` ### 名前付きパラメータを渡す コマンド単位では該当する機能はなさそう...?できなくはないが、かなり複雑なので素直に名前なしパラメータ使った方がよさそう。 ```make default: @just --list name := "" hello: @if [[ -z "{{name}}" ]]; then echo "nameは必須です" 1>&2; exit 1; fi @echo {{name}} ``` ### レシピ未指定の場合はレシピ一覧を出力する defaultの挙動に`just --list`を設定する。 ```make default: @just --list hello name: @echo {{name}} ``` ```console $ just Available recipes: default hello name ``` ### レシピ一覧表示に説明を追加する レシピにdocを書いておけば勝手に出力される。 ```make default: @just --list # 挨拶します hello name: @echo {{name}} ``` ```console $ just Available recipes: default hello name # 挨拶します ``` ### 別言語を使う [[Bash]]の文法では面倒なことをやりたいときとか。 ```make hello name_by_comma: #!python3 names = [x for x in "{{name_by_comma}}".split(",")] for n in names: print(f"{n} は {len(n)} 文字") ``` ```console $ just hello mimizou,tatsuwo,masaharu mimizou は 7 文字 tatsuwo は 7 文字 masaharu は 8 文字 ``` [[Python]]のファイルを別途作って`python3 main.py`で実行した方がいいかもしれないけど。。 ## 感想 - [[Make]]よりは便利 (当たり前) - [[Task]]とはケースバイケース - やりたいことによってシンプルに書ける場合とそうでない場合がある - 名前付きパラメータが必要なら[[Task]]じゃないと厳しそう - [[Task]]は`preconditions`でパラメータのバリデートできるのも強い - [[just]]は直感的(ハマる場合に限る)で、[[Task]]は説明的な印象 [[OSS]]や仕事では引き続き[[Task]]を使っていこうと思う...が、単純なケースなら[[just]]に移行するのもアリ。