BLOG

ブログ

Laravel SailでDocker環境構築

はじめに

今回はLaravel Sailを使ったDocker開発環境の構築を試してみたのでご紹介します。

Laravel 9.x Laravel Sail

Laravel Sail(セイル、帆、帆船)は、LaravelのデフォルトのDocker開発環境を操作するための軽量コマンドラインインターフェイスです。 Sailは、Dockerの経験がなくても、PHP、MySQL、Redisを使用してLaravelアプリケーションを構築するための優れた出発点を提供します。

公式ドキュメントに「Dockerの経験がなくても」と記載があったので、docker-compose.ymlを書いて、Webサーバとデータベースのコンテナを作成して、composerでLaravelをインストールする、といった手間が省けるかも!と思い、今回試してみました。

動作環境

  • M2 Mac(macOS Monterey)
  • Docker Desktop for Mac(4.x)

環境構築

Laravelプロジェクトの作成

任意の場所にディレクトリを作成します。

cd ~
mkdir Work
cd Work

下記のコマンドでLaravel Sailをインストールします。この例では「laravel-app」という名前のディレクトリに新しいLaravelアプリケーションが作成されます。

curl -s "https://laravel.build/laravel-app" | bash

利用するサービスを個別に指定することもできますが、デフォルトではmysqlredismeilisearchmailhogseleniumのコンテナが作成されるようです。

下記の例では、mariadbのコンテナが作成されます。

curl -s "https://laravel.build/laravel-app?with=mariadb" | bash

因みに、ブラウザでhttps://laravel.build/laravel-appを表示するとスクリプトの中身が確認できます。

laravelsail/php81-composerというDockerイメージを利用しているようです。

docker info > /dev/null 2>&1

# Ensure that Docker is running...
if [ $? -ne 0 ]; then
    echo "Docker is not running."

    exit 1
fi

docker run --rm \
    --pull=always \
    -v "$(pwd)":/opt \
    -w /opt \
    laravelsail/php81-composer:latest \
    bash -c "laravel new laravel-app && cd laravel-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailhog,selenium "

cd laravel-app

./vendor/bin/sail pull mysql redis meilisearch mailhog selenium
./vendor/bin/sail build

CYAN='\033[0;36m'
LIGHT_CYAN='\033[1;36m'
BOLD='\033[1m'
NC='\033[0m'

echo ""

if sudo -n true 2>/dev/null; then
    sudo chown -R $USER: .
    echo -e "${BOLD}Get started with:${NC} cd laravel-app && ./vendor/bin/sail up"
else
    echo -e "${BOLD}Please provide your password so we can make some final adjustments to your application's permissions.${NC}"
    echo ""
    sudo chown -R $USER: .
    echo ""
    echo -e "${BOLD}Thank you! We hope you build something incredible. Dive in with:${NC} cd laravel-app && ./vendor/bin/sail up"
fi

コマンドを実行すると途中でパスワードの入力を求められます。

Please provide your password so we can make some final adjustments to your application's permissions.

Password:

プロジェクトの作成が完了しました!

Thank you! We hope you build something incredible. Dive in with: cd laravel-app && ./vendor/bin/sail up

Laravel Sailを起動

下記コマンド実行後、Dockerイメージをビルドするので少し待ちます。

cd laravel-app
./vendor/bin/sail up

以下のURLにアクセスすると、Laravelの起動画面が表示されました。

http://localhost/

Sailを停止するにはCtrl + Cキーを押します。

シェルエイリアスの設定

Dockerを起動するたび./vendor/bin/sail upと入力したくないのでエイリアスを設定します。

vi ~/.zshrc
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'

保存した後、下記コマンドで反映します。

source ~/.zshrc

sailコマンド

Laravel Sailで提供されている便利なコマンドをまとめてみました。

Dockerの起動/停止

すべてのDockerコンテナをバックグラウンドで起動します。(detachedモード)

sail up -d

すべてのコンテナを停止します。

sail stop

サーバサイド

sail phpでコンテナ内のPHPを実行します。

sail php -v
PHP 8.1.14 (cli) (built: Jan  6 2023 15:23:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.14, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.14, Copyright (c), by Zend Technologies
    with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans

sail composerでコンテナ内のComposerを実行します。

sail composer -V
Composer version 2.5.1 2022-12-22 15:33:54

sail artisanでLaravelのartisanコマンドを実行します。

sail artisan -V  
Laravel Framework 9.46.0

フロントエンド

sail nodeでコンテナ内のNode.jsを実行します。

sail node -v
v18.12.1

npm、yarnも実行できました。

sail npm -v
9.2.0

sail yarn -v
1.22.19

データベース

データベースのコンソールを実行します。以下はsail mariadbの例です。

sail mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 25
Server version: 10.10.2-MariaDB-1:10.10.2+maria~ubu2204 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [laravel_app]> 

さいごに

Laravel SailでDockerの開発環境を簡単に構築することができました。

実際の業務ではプロジェクトの要求に合わせたカスタマイズが必要になるため、Dockerに慣れている人は、自分でdocker-compose.ymlを書いたほうが早い場合もありそうです。

各コンテナに入らなくても、sailコマンドでローカルから様々なコマンドが実行が出来る点はとても便利だと感じました!

RELATED ARTICLE