Laravelを使ったアプリケーション開発のための環境構築

Laravelとは

LaravelはPHPのフレームワークです。ウェブ上にPHPを使って高度なアプリケーションを開発することができます。

開発環境の構築

WindowsにWSLとDockerをいれて、開発を行います。それぞれのソフトウェアのインストール方法は、別のページを参考にしてください。

WSLの確認

WindowsのアプリケーションとしてWSLを検索し、起動できることを確認してください。

Dockerの確認

WSLのターミナルで以下のコマンドを実行し、次のようにdockerのパスが表示されればOKです。

$ which docker
/usr/bin/docker

開発用のディレクトリを作成

作成したプログラムや、種々の設定ファイルを置くフォルダを作ります。以後、断りがない限りこの study_laravel を作業ディレクトリとして使用します。

$ mkdir study_laravel
$ cd study_laravel

PHPのコンテナ作成とLaravelのインストール

ウェブサーバーのNginxに公開するディレクトリ(src/public)を先に作ってしまうと、Laravelの新規インストールが失敗します。
そのため、まずはPHPのコンテナだけを起動してLaravelをインストールし、その後に作成される public フォルダをNginxのルートディレクトリに指定する手順を踏みます。

1. docker-compose.yaml の作成

study_laravel ディレクトリ直下に、以下の内容で docker-compose.yaml を作成します。

services:
  php:
    build: ./php
    container_name: laravel_php
    volumes:
      - ./src:/var/www/html
      - vendor:/var/www/html/vendor
    environment:
      - TZ=Asia/Tokyo

volumes:
  vendor:

2. php/Dockerfile の作成

次に、php という名前のフォルダを作成し、その中にPHPコンテナの設定ファイルである Dockerfile を作成します。必要なツールやComposer(PHPのパッケージ管理ツール)をインストールする記述です。

FROM php:8.5-fpm
RUN apt-get update && apt-get install -y unzip
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html

3. コンテナを起動して、コンテナ内に入る

ターミナルからコンテナをバックグラウンドで起動(-dオプションをつける)し、PHPコンテナの内部に入ります(コンテナ内でbashを起動する)。

$ sudo docker compose up -d
$ sudo docker compose exec -it php bash

Laravelのインストール

Dockerのボリュームとして vendor が作られています。ここに直接インストールしようとすると競合して失敗するため、一度コンテナ内の tmp という一時ディレクトリにLaravelプロジェクトを作成し、その後でファイルを移動させます。(※以下のコマンドはコンテナ内で実行します)

# composer create-project laravel/laravel tmp
# (インストールが完了したらファイルを移動)
# mv tmp/vendor/* vendor/   # tmp/vendorの中身をボリュームのvendorに移動
# rmdir tmp/vendor
# mv tmp/* tmp/.* ./       # 残りのtmpの中身をすべてカレントディレクトリ(src)に移動
# rmdir tmp
# ls
README.md  bootstrap      config        phpunit.xml  routes   vendor
app        composer.json  database      public       storage  vite.config.js
artisan    composer.lock  package.json  resources    tests
# exit

コンテナから抜けたら(ホスト側のWSLに戻ったら)、生成されたファイルの所有者を変更します。一部のファイルはroot所有になっており編集できないため、自分自身のユーザー(whoamiコマンドで取得)に変更し、ウェブサーバー(www-data)がキャッシュなどを書き込めるように権限を設定します。

$ sudo chown $(whoami):www-data -R src
$ chmod g+w -R src/storage/ src/bootstrap/cache/

Nginx(ウェブサーバー)の起動

1. docker-compose.yaml にNginxの設定を追加

先ほど作成した docker-compose.yaml を以下のように書き換えて、Nginxコンテナの設定を追記します。

services:
  php:
    build: ./php
    container_name: laravel_php
    volumes:
      - ./src:/var/www/html
      - vendor:/var/www/html/vendor
    environment:
      - TZ=Asia/Tokyo

  nginx:
    image: nginx:1.27-alpine
    container_name: laravel_nginx
    ports:
      - "8002:80"
    volumes:
      - ./src/public:/var/www/html/public:ro
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf

volumes:
  vendor:

2. default.conf の作成

nginx という名前のフォルダを作成し、その中にNginxの設定ファイルである default.conf を作成します。Laravelの挙動に合わせたルーティングの設定です。

server {
    listen 80;
    server_name localhost;

    root /var/www/html/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

3. 再度、全コンテナを起動

Nginxが加わったので、再度コンテナを起動し直します。

$ sudo docker compose up -d

Laravelの動作確認

ブラウザーで http://localhost:8002/ を開くと、データベース関連のエラー画面が表示されます。
これは、Laravelが起動時にセッション管理をデータベースで行おうとするものの、まだデータベースコンテナを用意していないために起きる正常なエラーです。今回はとりあえずセッションの保存先を一時的に変更して回避します。

ついでにURLの設定をします。Laravelは自動的にbase URLを設定しますが、時に思うような動作にならないことがあるので、きちんと設定しておくにこしたことはありません。

src/.env の修正

src/.env ファイルを開き、最初のAPP_NAME, APP_URL, APP_LOCALEと30行目あたりのSESSION_DRIVER の項目を以下のように書き換えます。

APP_NAME="My Lab's Stock"
APP_URL=http://localhost:8002   # <- docker-compose.yamlのnginxの設定と合わせる
APP_LOCALE=ja
(途中省略)
SESSION_DRIVER=database
↓
SESSION_DRIVER=file

書き換えたら、ブラウザーでページを再読み込みしてください。以下のようにLaravelのウェルカム画面が表示されれば、第1章の環境構築は完了です!

Laravel Welcome Screen


📂 作成したサンプルファイルのダウンロード

ここまでの手順で作成された完成版のファイル一式は、以下のGitリポジトリからダウンロード(クローン)して確認することもできます。

$ git clone https://kiku3.tsbio.info/git/study-laravel.git study_laravel