GitHub Actionsの公式ドキュメント を読んでいたら以下の式が急に出てきて、なんじゃこりゃとなりました。皆さんは式の意味が分かりますか??
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
クリックすると解説が表示されます
実はこれ、3項演算子になっています。
${{ fromJSON('["falseの値", "trueの値"]')[条件式] }}
GitHub Actionsは3項演算子が用意されていないので上記の式で実現しているようです。解説していきます。
${{ }}
expression部分で内部の式が評価されます。
fromJSON('["Falseの値", "trueの値"]')
fromJSON関数でjsonの配列を作っています。こんな配列になります。
[ "Falseの値", "trueの値"]
では一番のポイントの条件式部分をみてみましょう。
[条件式]
GitHub Actionsでは適宜型変換を行なってくれます。falseは数値の0で、trueは数値の1です。つまりこの部分は配列の番号を指定していることになります。
では実際の式で確認してみましょう。
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
例えば、github.repository
が 'github/docs-internal'
の場合を考えてみます。この場合条件式がtrueになります。
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[true] }}
trueは数値の1に変換されるので、以下のように評価されます。
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[1] }}
最終的に以下のような結果になります。
runs-on: "self-hosted"
さて、いかがでしたでしょうか。私はこの記法嫌いです笑
GitHub Actions で3項演算子を実現するでも紹介されている、以下の方が条件式が最初に出てきますし理解しやすいと思っています。fromJSONも謎の認知負荷になりますし、、、。
(条件 && 条件がtrueの場合の値) || 条件がfalseの場合の値
以上、公式ドキュメントに載っている3項演算子の解説でした!!