date コマンドの差異に気がついていなかった話(Taskfile)

に公開4

tl;dr

  • コマンドのオプション差異を忘れていた
  • OS 、パッケージの違いを意識すること
  • 出し分けるの面倒なのでもうちょっといい方法はないかしら

taskfile

  • 今んとこ zenn では、task, gotask, taskfile, などのトピックが使われている
  • いまいち統一されていないので、ドメインそのままの taskfiledev を以前から推している

経緯

  • 職場の朝会で、小咄ついでにタスクランナーの taskfile を紹介した
  • 同僚氏が気に入ってくれて使ってみたところ、うまく動かないケースが発覚した
  • date コマンドのオプション差異で日付が取得できなかったらしい

原因

  • うちは Windows 11 + WSL 2 + Ubuntu 24.04 + bash なので GNU 版のコマンドが使われている
  • 同僚氏は Mac なので BSD 版のコマンドが使われていた
  • date -I を好んで使っていたが、BSD 版では date -I date または date "+%Y-%m-%d" のようにする必要があった
  • 手抜きして taskfile 内でシェルコマンド使うのが悪い

回避策

  • シェルコマンドを taskfile 内で直接呼ばないのがもっとも正しい
  • OS 差異(含むコマンド差異)の吸収はファイルを分けることで可能
  • 正直めんどい
  • シェルコマンド自体で差分を吸収した書き方をすればいったん大丈夫
  • date ならフォーマットオプションをベタ書き(date "+%Y-%m-%d")すれば大丈夫(元々これがだるいから -I にしたわけだけど)
  • ヒューマンリーダブルオプション(last monthなど)が使えないのが痛い
  • 他のコマンド類の差異はどうする(awk はともかく sed はだめかも)

ひとまず

  • タスク毎にコマンド実行していた部分を変数に置き換え、コマンド実行部分を一箇所にした
  • date -Idate "+%Y-%m-%d でいいので置き換えた

まとめ

  • 手元に Mac がないので差分を気にするの忘れてた(新しい Mac 買おう)
  • OS やパッケージの違いに注意するのを忘れない
  • date コマンドのオプション差異を吸収した書き方を整理しておく(他のリポジトリの使用中のものを修正する必要がある)
  • taskfiledev トピックを推していくw

Discussion

rakiraki

https://bearmini.hatenablog.com/entry/2022/12/04/214641

新しいツールの導入で避けるならこういうことなんだと思うんだけど、ツールのためにツールを追加していくの、結果として際限無くなりそうで二の足を踏んでしまう。。。
自分が良ければいいだけならこれで必要十分なんだけど、チーム以上の規模になるときついじゃん。。。?

rakiraki

https://taskfile.dev/reference/templating/#date-functions

date コマンドの差し替えめんどくさいなって思ってたんだけど、Go で書いてるんだからテンプレートの中で Go 系のライブラリが呼べるんじゃね?って思ったら日付系統の関数があったので、これで書き直すのがもっとも正しいであろうことに今気がついた。。。_no