🐳

Laravel Sailで作成したプロジェクトをGitHub Codespacesで扱う

2024/07/10に公開

状況

Laravel Sail で作成したプロジェクトが存在する.GitHub でコードを管理しているので Codespaces で扱いたい.

が、Sail のコンテナを起動しても URL が localhost で固定されているため,最初のページ以外 Codespaces からアクセスできない.

解決策

Sail コンテナの起動

まず Codespaces でプロジェクトを開いてプロジェクトを動かす.

# 必要なディレクトリを用意
mkdir -p storage/framework/cache/data/
mkdir -p storage/framework/app/cache
mkdir -p storage/framework/sessions
mkdir -p storage/framework/views

# 依存関係のインストール
docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v $(pwd):/var/www/html \
    -w /var/www/html \
    laravelsail/php82-composer:latest \
    composer install --ignore-platform-reqs

# .envファイルの作成
# .envの内容は作成したプロジェクトに合わせておく.
cp .env.example .env

# コンテナの起動
./vendor/bin/sail up -d

# キーの生成とマイグレーション
./vendor/bin/sail php artisan key:generate
./vendor/bin/sail php artisan migrate

.env ファイルの修正

このままだとアプリケーションの URL が localhost になって最初のページ以外読み込まないので以下のように修正する.

  • .env ファイルの APP_ENVcodespaces に変更
  • .env ファイルの APP_URL を Codespaces の URL(コンテナ起動した時に出てくる URL)に変更
APP_NAME=Laravel
APP_ENV=codespaces
APP_KEY=base64:hogehogefugafuga
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=https://hoge-fuga-piyo-80.app.github.dev/

Provider の修正

このままだと、なぜか .env ファイルの内容が反映されないので app/Providers/AppServiceProvider.phpboot メソッドに以下のコードを追加する.

public function boot(): void
{
  if (config('app.env') === 'codespaces') {
    URL::forceRootUrl(config('app.url'));
    if (str_contains(config('app.url'), 'https://')) {
      URL::forceScheme('https');
    }
  }
}

内容を反映

最後に以下のコマンドを実行して設定を反映させる.

./vendor/bin/sail artisan config:cache

   INFO  Configuration cached successfully.

まとめ

なぜか .env ファイルの内容が反映されない現象が起きてハマった. Provider で強制的に URL を変更することで解決した.他に影響が出たらまた追記する.

以上だ( `・ω・)b

GitHubで編集を提案

Discussion