Bash の代わりに PHP で run のコードを書く [GitHub Actions]
概要
GitHub Actions は基本的に run または uses でステップを書いていきます。
run には Bash でコードを書くわけですが実は shell を指定することで他の言語も使えます。
Bash の代わりに他の言語(例として PHP)で run のコードを書く方法を紹介します。
run の仕組み
ACTIONS_STEP_DEBUG を有効にして実行ログを眺めていると分かるのですが一時的なスクリプトのファイルに出力されてそのファイルが実行されています。
steps:
- run: gh --version
を実行すると d8a24915-0c60-4866-a347-89e62bf14836.sh に出力されて実行されます。

shell を指定
shell のドキュメントには bash, pwsh, python, sh, cmd, powrshell が使えると書いてあります。
Linux と macOS では bash が、 Windows では powershell がデフォルトです。
steps:
- name: Display the path
run: |
import os
print(os.environ['PATH'])
shell: python
カスタムシェル
さて本題です。
shell のドキュメントの下の方に カスタムシェル という項目があります。
ランナーにインストールされているコマンドであれば shell に command […options] {0} [..more_options] という形式で実行コマンドを書くことができます。
{0} は run の仕組み で説明した一時的なスクリプトのファイル名に置き換わります。
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 ランナーのドキュメントを確認してください。
PHP
PHP を書く場合は shell: php {0} とします。
通常の .php ファイル同様 <?php で開始する必要があります。
以下の例では phpversion 関数を使いたかったので PHP でスクリプトを書いています。
用途
基本的には Bash で書いた方がすっきり書けると思いますが、ロジックを書き始めると読みづらくなってきます。
そういったときに高級言語で書けると便利だったりします。
また、好みの言語で書けるというのは大きなメリットです。
ただし複雑なロジックを YAML に書いてしまうとデバッグが難しくなります。
後述するように独立したスクリプトにしてローカルでも実行できるようにしておきましょう。
予め用意したスクリプトを実行
もちろん予め用意した .php ファイルも実行できます。チェックアウトを忘れずに。
ファイルが独立していた方が IDE の補助を受けられるので長いコードを書く場合はこちらがおすすめです。
複数ステップで使いまわすこともできます。
steps:
- uses: actions/checkout@v3
- run: php path/to/script.php
Discussion