Laravelの.envを簡単に安全に管理するGithub ActionsのActionを作ったよ

執筆日: 更新日:

リポジトリ

https://github.com/nnahito/env-replacer

前置き

皆さんはLaravelの.envをどのように管理していますか?
意外とGit / GitHubにコミット&Pushしてしまっているプロジェクト、多くないですか?

AWS / ECS環境だと、パラメータストアを使ってECSコンテナに環境変数としてExportする方法なども取れますが、
AWSを使っていない個人のプロジェクトだったり、もうちょっとラクしたい(パラメータストア管理だと、デプロイ時のスクリプトに.envのキーを全部定義する必要がある)とか思ったりしますよね?

なので、GitHub Actionsのシークレットに登録したキーが.env.exampleに存在する場合、
.envにその値を自動で記載するActionを作成しました。

使い方

自分の環境だと、

GitHubにPush
↓
GitHub ActionsでDockerイメージを作成
↓
GitHub Container RegistoryにPush
↓
レンタルサーバにSSHし、Container RegistoryからDockerイメージをPull
↓
コンテナの入れ替え

という手順でデプロイをしています。
AWSを使っていません。

GitHub ActionsでDockerイメージを作成時点で.env.exampleにGitHubの「Secrets and variables」から値を取得し、値を追加しています。

GitHubのSecrets and variablesに以下があるとします。

HOGE_TOKEN=ABCD1234

.env.exampleに以下があるとします。

APP_ENV=production
APP_NAME=HOGE

HOGE_TOKEN=

このとき、 https://github.com/nnahito/env-replacer を使うと、
コンテナの中に

APP_ENV=production
APP_NAME=HOGE

HOGE_TOKEN=ABCD1234

という.envが作成されます。

GitHub Actionsでの使い方

README記載のとおりです。

steps:
  - uses: actions/checkout@v4

  - uses: nnahito/env-replacer@main
    with:
      secrets: ${{ toJSON(secrets) }}
      copy-from-example: 'true' # ← 任意: .envファイルを.env.exampleから利用するかどうか。true or falseを指定する。デフォルトはfalse
      env-file: 'subdir/.env'  # ← 任意: .envが実行ディレクトリ外にある場合に指定。省略時は.envがデフォルト値
      env-example: '.env.example' # ← 任意: .env.exampleが実行ディレクトリ外にある場合に指定。省略時は.env.exampleがデフォルト値

このように、.envをGitHubだけで簡潔に管理できます。
よかったら使ってみてください。


[PR] おすすめの本

Nな人

この記事を書いた人

Nな人(えぬなひと)

Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。 PHP、Pythonと、昔はperlを書いていたP言語エンジニア。 最近はNimを書いたりしています。