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/Models | MVCのMに当たる部分。データベースのテーブルと紐づくところ |
app/Providers | Laravelの起動時に何をするかを書く部分。たとえばイベントリスナやルーティングの登録を実行すえう |
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/views | MVCのVに当たる部分。実際にWebページとして表示するテンプレートをここに置く。コントローラから渡された値などを表示等するためにbladeというテンプレートエンジンを用いるため、.blade.phpとなっている |
routes | どのURLがどのコントローラやページとどのように紐づくのかを書く |
storage/app | Laravelが主に利用するストレージ。サーバ側で使うファイルや、送信されたファイルなどを入れておく |
storage/framework | キャッシュ等が入っている |
storage/logs | ログなどが入っている |
tests | テスト用のコードが入っている |
アプリケーションを作る際は、コントローラやモデル、ビューが無いと始まらないですので、まずはそこから書いていけるようになる必要があります。
まとめ
まずはdockerとnodejsを用意して、Laravel Sailや既存のdockerイメージを用いて入れるのが無難です。dockerを利用して他のアプリケーション環境を切り分けることで、環境依存や他プロジェクトによる影響を最小限に留めることができます。
構築したらどこに何を入れるのかをある程度把握するとスムーズに事が進むと思います。
