GitHub Actionsのカスタムアクション実装におけるアンチパターン
GitHub Actionsで公開されたカスタムアクションをいくつも使ってきたのですが、その中で眼の前のカスタムアクションを使いづらいと思う瞬間がときたまありました。
ここではカスタムアクションを選定するときの助けとするため、または自分でカスタムアクションを実装するときのチェックリストにする目的で、どのようなときにそう感じたのかを書き出しておきます。
1. GitHub Marketplaceに登録されていない
ここに出ていないものは到達しづらく、ドキュメントも他と同じ形で見ることができないので少し使いづらいです。
2. (暗黙的な)環境変数に依存している
カスタムアクションへの入力変数にはinputsによるものとenv(環境変数)によるものがあります。
このうちinputsはどの名前のものがあって、その型が何であるか、指定が必須であるかどうかがわかりますが、環境変数によるものはその辺りがわかりません。コードのどこかで突然ある環境変数への参照があり、ドキュメントにもその事が書かれていないとそれを察知することは不可能になります。
入力にはなるべくinputsを使用し、やむなく環境変数を使う場合は必ずそのことを書きましょう。
3. 暗黙的に特定のファイルがあることを想定している
あるアクションを実行しようとしたところなぜかエラーが発生したのですが、よく見てみるとそれより前にあるコマンドのインストールステップがあった。こういうケースが有りました。
前提として、なるべくあるアクションは別のアクションが事前に実行されていることに依存しないほうがよいです。もしやむなくそういった形で実装する場合はREADMEなどに必ず明記するべきでしょう。
4. 暗黙的に特定のOSや特定のOSバージョンで実行されていることを想定している
GitHub Actionsは基本的にubuntuで実行されることが多いものの、Self Hosted RunnerでAmazon Linuxになったりwindows runner, mac runnerなどで異なる環境にて実行されることもあります。
このようなケースをどの程度サポートするべきかは判断が分かれるところであり必ずしもサポートする必要はないと思いますが、いざ使おうとしたときに原因が分かりづらいエラーとなると不親切ですので、予めサポート範囲がわかっているようであればアクションの冒頭で実行環境をチェックし、想定と異なるのであればエラーを出して異常終了するなどしてあげると親切です。
Discussion