🐘

Bash の代わりに PHP で run のコードを書く [GitHub Actions]

2022/05/07に公開

概要

GitHub Actions は基本的に run または uses でステップを書いていきます。
run には Bash でコードを書くわけですが実は shell を指定することで他の言語も使えます。
Bash の代わりに他の言語(例として PHP)で run のコードを書く方法を紹介します。

run の仕組み

ACTIONS_STEP_DEBUG を有効にして実行ログを眺めていると分かるのですが一時的なスクリプトのファイルに出力されてそのファイルが実行されています。

Bash
steps:
  - run: gh --version

を実行すると d8a24915-0c60-4866-a347-89e62bf14836.sh に出力されて実行されます。

shell を指定

shell のドキュメントには bash, pwsh, python, sh, cmd, powrshell が使えると書いてあります。
Linux と macOS では bash が、 Windows では powershell がデフォルトです。

Python
steps:
  - name: Display the path
    run: |
      import os
      print(os.environ['PATH'])
    shell: python

カスタムシェル

さて本題です。
shell のドキュメントの下の方に カスタムシェル という項目があります。
ランナーにインストールされているコマンドであれば shellcommand […options] {0} [..more_options] という形式で実行コマンドを書くことができます。
{0}run の仕組み で説明した一時的なスクリプトのファイル名に置き換わります。

Perl
steps:
  - name: Display the environment variables and their values
    run: print %ENV
    shell: perl {0}

Bash のとき (デフォルトの shell: bash) も同じ形で実行されています。

使用できるコマンド

ランナーにインストールされているコマンドであれば何でも実行できます。
ubuntu-20.04 であれば PHP, Node.js, Java, .NET, Ruby, Swift など様々なコマンドがインストールされています。
詳細は GitHub-hosted ランナーのドキュメントを確認してください。

https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software

PHP

PHP を書く場合は shell: php {0} とします。
通常の .php ファイル同様 <?php で開始する必要があります。

以下の例では phpversion 関数を使いたかったので PHP でスクリプトを書いています。

https://github.com/snow-actions/php-ast-changed/blob/e2d4f0192b13f7fb41c63a859966e43c4b74fe9e/action.yml#L32-L43

用途

基本的には Bash で書いた方がすっきり書けると思いますが、ロジックを書き始めると読みづらくなってきます。
そういったときに高級言語で書けると便利だったりします。
また、好みの言語で書けるというのは大きなメリットです。

ただし複雑なロジックを YAML に書いてしまうとデバッグが難しくなります。
後述するように独立したスクリプトにしてローカルでも実行できるようにしておきましょう。

予め用意したスクリプトを実行

もちろん予め用意した .php ファイルも実行できます。チェックアウトを忘れずに。
ファイルが独立していた方が IDE の補助を受けられるので長いコードを書く場合はこちらがおすすめです。
複数ステップで使いまわすこともできます。

PHP
steps:
  - uses: actions/checkout@v3
  - run: php path/to/script.php

Discussion