WEB/システム/IT技術ブログ

「Laravel Sail」で開発環境を構築

これまで、開発環境にはxamppやDockerを使用していました。
今回、Dockerを簡易的に操作できるという「Laravel Sail」での開発環境構築を試してみます。

今回、開発環境を構築したのは以下の環境です。

  • Windows 11 Home
  • Ubuntu-22.04 WSL2
  • Docker Desktop 4.15.0
  • Laravel 9.52.0
  • Laravel Sail 1.20

WindowsにUbuntuやDockerはインストール済みとします。
また、新規プロジェクトではなく、既存プロジェクトに適用してみました。プロジェクトソースはWindows上ではなく、Ubuntu上に展開されています。

Laravel Sailのインストール

最近、Laravelを新規インストールした場合、Sailはデフォルトで組み込まれているようですが、今回の古くから運用しているプロジェクトには含まれてなかったので、まずはパッケージをインストールします。

$ composer require laravel/sail --dev

次に、以下のコマンドでインストールします。

$ php artisan sail:install

すると対話型で、必要なサービスが問われます。今回はmariadbを選択します。

 Which services would you like to install? [mysql]:
  [0] mysql
  [1] pgsql
  [2] mariadb
  [3] redis
  [4] memcached
  [5] meilisearch
  [6] minio
  [7] mailpit
  [8] selenium
  [9] soketi
> 2
Sail scaffolding installed successfully.
...
Sail images installed successfully.
...
Sail build successful.

この処理には少々時間がかかります。

処理が完了すると、Dockerの設定ファイル「docker-compose.yml」ファイルが生成されます。

version: '3'
services:
    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.2
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.2/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mariadb
    mariadb:
        image: 'mariadb:10'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sail-mariadb:/var/lib/mysql'
            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - mysqladmin
                - ping
                - '-p${DB_PASSWORD}'
            retries: 3
            timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sail-mariadb:
        driver: local

セットアップは以上です。

Laravel Sailを起動

それでは、実際にSailを起動してみます。

$ ./vendor/bin/sail up

無事起動する事ができました。
ブラウザから「http://localhost」でアプリケーションにアクセスできます。
停止にはキー「Control + C」を入力します。

ここで、コマンドを簡略化するためにエイリアスに追加しておきます。

$ vim ~/.bashrc

以下を追記します。

alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'

シェルを再読み込みします。

$ source ~/.bashrc 

そうすると、先ほどのSail起動コマンドが、以下で実行できます。

$ sail up 

さらに、オプションで「-d」を付加することで、バックグラウンドで実行できます。

$ sail up -d

停止する際は、以下のコマンドを実行します。

$ sail stop

PHPダウングレード

デフォルトではコンテナはPHP 8.2で構成されていますが、本番環境に合わせてPHP 8.0を使用したいので、以下のように「docker-compose.yml」を修正します。
ランタイムに合わせてイメージ名を修正しておきます。

...
            context: ./vendor/laravel/sail/runtimes/8.0
...
        image: sail-8.0/app
...

コンテナイメージを再構築します。

$ sail build --no-cache

コンテナを起動して確認してみます。

$ sail up -d
$ sail php -v
PHP 8.0.28 (cli) (built: Feb 14 2023 18:32:57) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.28, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.28, Copyright (c), by Zend Technologies
    with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans

PHPのバージョンが8.0になってる事が確認できました。

phpMyAdminコンテナを追加

DBの操作にphpMyAdminを使いたいので、コンテナを追加するために「docker-compose.yml」に以下を追記します。

...
    phpmyadmin:
        image: phpmyadmin/phpmyadmin:latest
        ports:
            - 8888:80
        environment:
            PMA_HOST: mariadb
            PMA_USER: '${DB_USERNAME}'
            PMA_PASSWORD: '${DB_PASSWORD}'
        networks:
            - sail
...

コンテナを起動してブラウザに「http://localhost:8888」を入力すると、phpMyAdminの管理画面にアクセスできます。

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives