Laravelをdockerで導入する

LaravelはPHPフレームワークの1つです。フロント側に表示するページの管理、送信されたデータを処理する場所、ユーザのセッション管理、データを保管する場所や仕方の管理など、非常に高度な機能を持っており、様々なWebアプリを作成できます。

まずはLaravelを導入して、ページを表示できるところまで持っていきましょう。

Laravel導入

基本的に複数のプロジェクトを開発する際は、環境が混ざらないようにすることが重要です。混ざってしまうと環境依存のバグが発生したり、デプロイに苦戦したりします。

環境が混ざらないようにするためには、dockerを使うのがおすすめです。

Laravel Sailで構築

事前にDockerとNodejs(+nvm)のインストールが必須です。

Windowsの場合、WSL2内で作業する必要があります。あらかじめMicrosoftStoreからUbuntuを導入するなどし、そこにDockerとNodejs(+nvm)を導入してください。

まずは

# アプリ名は自由
curl -s https://laravel.build/アプリ名 | bash
# 例えば、curl -s https://laravel.build/myapp | bash

で取得します。ビルドのようなものが進行するので、完了したら

# myappは上で設定したアプリ名
cd myapp && ./vendor/bin/sail up

を実行して構築完了です。今後、アプリを起動する際も同様に./vendor/bin/sail upします。終了する際は./vendor/bin/sail downで終了できます。

webページはhttp://localhostです。

初期状態ではhttpsだと表示できません。最近のブラウザは自動でhttpsにしたりするので、表示されないと思ったら確認してみてください。

phpmyadminを導入したい場合、services

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
        - mysql:mysql
    ports:
        - 8080:80
    environment:
        PMA_USER: "${DB_USERNAME}"
        PMA_PASSWORD: "${DB_PASSWORD}"
        PMA_HOST: mysql
    networks:
        - sail

追加してください。ユーザ名とパスワードは.envに書かれていますが、初期値のユーザ名はsail、パスワードはpasswordです。

上の設定では最初からユーザ名とパスワードが入っている状態なので、ログインは不要です。

環境が整備されたdocker imageで構築

楽な導入は、bitnamiのdockerイメージを利用することです。

https://hub.docker.com/r/bitnami/laravelを利用します。

まずは

curl -LO https://raw.githubusercontent.com/bitnami/bitnami-docker-laravel/master/docker-compose.yml

を実行しますが、Windowsだとcurlの動作が良くないので、普通に上のURLにアクセスしてdocker-compose.ymlにコピペでも良いです。

あとは立ち上げてしばらく放置すれば構築完了です。

docker-compose up

Webページはhttp://localhost:8000です。

アプリのサービス名はmyappとなっているため、docker-compose exec myapp bashで中に入ることができます。

簡単な構造確認

ページが出るのは良いのですが、多くのフォルダとファイルが生成されていて、初見ではなかなか分かりません。どこに何が入っているのかを整理しましょう。

どれも使用するので全部重要といえば重要ですが、その中でも特によく使うものは太字にしています。

場所中身
app/Consoleコマンドラインで動くアプリケーションが入っている。主にバッチなどを動かすためのもの
app/Exceptions例外排出で使うためのクラスをまとめる場所
app/Http/Controllersアプリケーションのコントローラが入る部分。MVCのCに当たる部分で、極めて重要
app/Http/Middleware外部からのリクエストと、内部処理の仲介部分。ここでリクエストを検査したり、ユーザ認証などのフィルタリングを行ったりする
app/ModelsMVCのMに当たる部分。データベースのテーブルと紐づくところ
app/ProvidersLaravelの起動時に何をするかを書く部分。たとえばイベントリスナやルーティングの登録を実行すえう
bootstrapアプリケーションを起動するときのapp.phpが入っている。通常は変更しない
configアプリケーションの設定があるところ
database/factoriesデータベースのテストデータを書く場所
database/migrationsデータベースのスキーマの履歴を保持する場所。そのため、データベースのテーブル構造に直結する
database/seedersデータベースに初期値を入れるなど、自動でデータを入れるためのもの。実際に使用するデータを入れる
database/lang多言語対応するためのもの。キーと表示内容の紐付けを書く
public公開用フォルダ。画像など、URLを叩いたときに直接表示したいファイルはここに入れる
resources/css, resources.jsビルド前のCSSやスクリプトが入る、フロント側のスクリプトのコアとなる部分。webpack.mix.jsを見ると、ここのapp.cssとapp.jsを起点にビルドが行われる
resources/viewsMVCのVに当たる部分。実際にWebページとして表示するテンプレートをここに置く。コントローラから渡された値などを表示等するためにbladeというテンプレートエンジンを用いるため、.blade.phpとなっている
routesどのURLがどのコントローラやページとどのように紐づくのかを書く
storage/appLaravelが主に利用するストレージ。サーバ側で使うファイルや、送信されたファイルなどを入れておく
storage/frameworkキャッシュ等が入っている
storage/logsログなどが入っている
testsテスト用のコードが入っている

アプリケーションを作る際は、コントローラやモデル、ビューが無いと始まらないですので、まずはそこから書いていけるようになる必要があります。

まとめ

まずはdockerとnodejsを用意して、Laravel Sailや既存のdockerイメージを用いて入れるのが無難です。dockerを利用して他のアプリケーション環境を切り分けることで、環境依存や他プロジェクトによる影響を最小限に留めることができます。

構築したらどこに何を入れるのかをある程度把握するとスムーズに事が進むと思います。

laravel thumb

役に立ったらシェアしよう!