業務で ECS の Task definition を更新する作業が多々あります。CI/CD パイプラインや CloudFormation、Terraform などで管理していれば Git で差分確認が可能ですが、手動更新だとそうはいきません。 ECS では Task definition の差分を確認する API は提供されていない(ハズ)ので、勉強も兼ねて Golang で taskdiff という CLI ツールを作成しました。
使い方
使い方はシンプルです。例えば sample-app:1
と sample-app:2
の差分を確認したい場合は以下のように実行します。
$ taskdiff sample-app:1 sample-app:2
taskdiff sample-app:1 sample-app:2 | less
のようにパイプで less に渡す使い方を僕はよくやります。
Diff ライブラリ選定
Go で Diff を出力するライブラリはいくつかあったのですが、シンプルな kylelemons/godebug/diff を選びました。sergi/go-diff も見てみたのですが、僕が Go (というかプログラミングそのもの..)を殆ど理解できていないため、浅はかですがコード量がそこまで多くないライブラリを選びました。といっても kylelemons/godebug/diff
も理解しきれていませんが。。今後の宿題です。
これからやりたいこと
git diff
のように差分がある行の前後 n 行だけ表示できたらもっと UX 上がりそうだなと思ったので、挑戦したいですね。(色も付けたいな...
テストも書いてはみたものの、これで良いのかが分かりません。圧倒的にインプットが足りてないので様々なプロダクトのソースを読んだりして、テスト含めちょこちょこ改善していきます。
モチベーション
「自分が欲しいと思ったツールを作りたい」というのが強いです。実際業務でけっこう使っていて我ながら「便利だなぁ」と思う時もあります。だんだんと愛着も湧いてきたので、コツコツ育てたいと思います。
まとめ
taskdiff という ECS Task definition の Diff ツールを作成しました。ツッコミとかあれば GitHub の Issue やブコメ、 Twitter のリプ or DM でいただけると嬉しいです。