放浪軍師のアプリ開発局

VTuberみたいなアプリケーション夏狂乱など、自由気ままにアプリを開発したりしています。他にもいろいろやってます。尚、このブログはわからないところを頑張って解決するブログであるため、正しい保証がありません。ご注意ください。

Laravel でバックエンド 【Docker で開発環境構築】

お久しぶりです。放浪軍師です。ベンチャー企業に転職して色々と忙しい日々ですがなんとなく余裕もできてきた為、またブログを再開しようと思います。作りたいアプリもあるしね!どうぞよろしくお願いします。

Laravel でバックエンドを作ろう

さて、私はこのブログで Xamarin や Blazor Web Assembly など主に C# を用いた技術をアレコレ書いていましたが、実は私、ここ数年業務では C# を全く触っていません。基本的には Laravel という PHPフレームワークを用いて Web サービスの バックエンド側を主軸に担当してきていて、現職でも同様です。そんな中で色んな技術も自分の中に溜まってきたので、整理も兼ねて記事をつらつらと書いていこうかなと思います。突然方向性が変わってごめんね!でも PHP より C# の方が好きだから!(動的型付き言語は色々と辛いっスよ...)

Docker で環境構築

開発には環境構築が必要です。C# であれば、Visual Studio をインストールすればそれで済むみたいなこともあるかと思うのですが、PHP の場合はそうはいきませんね。まずは Docker で環境を構築していきたいと思います。

Docker とは?

このブログでは初めて取り扱うので説明を入れます。Docker とは簡単に言えば、軽量な仮想環境です。例えば普通に PHP を用いた開発環境を Windows 上に整えようとすると、PHPPHP 向けの便利なパッケージなどを Windows にインストールする必要があるかと思います。DB も準備しなければなりません。そうなると非常に手間ですし、複数名で開発するときはそのバージョンなどにも気をかけねばならず大変ですよね。

そこで Docker の出番です。必要となる情報をファイルに記述して、それを実行するだけで仮想環境を準備できるようになります。複数名で共有すれば、みんな同じ環境を一瞬で整えられるという事ですね。さらに言えば、GCP などのクラウドサービスにでさえ Docker を展開してサービスを提供するということも可能です。いやほんとすごいよね。詳しくは公式などをみてお勉強してみてください。正直私もまだ全然わかっていないですし一緒に頑張りましょう。

docs.docker.jp

なお、前準備である Docker Desktop のインストールなどの説明は省略します。ご了承ください。

今回準備する環境

以下で行こうと考えています。現時点での最新ですね。私はこういったインフラに近い分野は非常に苦手なのですが絶対に必要なことなので、これを機会に記事を書きながら覚えていこうと思っていますので皆さんもチャレンジしてみてください。きっとできるさ。

本当はフロントエンドも別に用意したいのですけれど...まぁそこまで手を広げると流石に大変ですからね。機会があればにしましょう。

GitHub

今回作成したリポジトリです。参考にしてください。

github.com

ファイル構造

開発環境構築に必要なファイルは以下になります。少なくて良いね!まぁ正直初見どころか中級者であってもわけわからん箇所が多数ですが、とりあえずそんなファイルがあるんだね程度で良いと思います。必要になったらその時覚えればいいし!ぐらいの精神で居た方が楽ですよね。各ファイルの内容は GitHub を確認してください。

compose.yml

複数のDockerコンテナを定義し、管理するための設定ファイルです。今回は Laravel における最小構成で設計しています。Nginx Webサーバー、PHPアプリケーション、MySQLデータベースの3種類のコンテナが立つ構成ですね。

docker/nginx/default.conf

Nginx の設定ファイルです。Web サーバーとして動作する Nginx に対して、Webアプリケーションへの要求をどのように処理するかを定義しています。

docker/php-fpm/Dockerfile

PHP および Laravel 環境セットアップの為のファイルです。

docker/php-fpm/php.ini

PHP の設定ファイルです。

環境を構築してみよう

さて、なんだかよくわからないがとりあえず環境構築の準備は整いました。あとはコンソールからcompose.yamlがある場所へ移動し、数回コマンドを叩くだけで環境が構築できます。ほんと超便利だね!

  1. Docker のビルド

    docker compose build コマンドで Docker をビルドします。

  2. Docker の起動

    docker compose up -d コマンドで複数のコンテナが起動します。

  3. コンテナの中に入る

    docker compose exec -it php-fpm bash コマンドで php アプリケーションのコンテナに入ります。

  4. Laravel インストール

    composer create-project --prefer-dist laravel/laravel laravel-project "10.*" を実行すると、ファイルが色々と作成されて Laravel の環境ができあがります。

  5. storage ディレクトリのパーミッション変更

    chmod -R a+w laravel-project/storage/* コマンドで storage フォルダの権限を変更する。これを行っておかないとログが吐けずにエラーとなります。

アクセスしてみよう

任意のWebブラウザhttp://localhost:8000/ にアクセスします。このような画面がでれば成功です。

MySQL にアクセスしてみよう

  1. データベースの設定

    laravel-project/.env ファイルのデータベース設定を以下のように書き換える。

     DB_HOST=mysql
     DB_PORT=3306
     DB_DATABASE=database
     DB_USERNAME=db-user
     DB_PASSWORD=db-pass
    
  2. マイグレーションの実施

    cd laravel-prolectディレクトリを移動し、php artisan migration を実行すると、以下のようなメッセージがコンソールに表示される。

        INFO  Running migrations.
    
       2014_10_12_000000_create_users_table ................................................................................................... 40ms DONE
       2014_10_12_100000_create_password_reset_tokens_table ................................................................................... 51ms DONE
       2019_08_19_000000_create_failed_jobs_table ............................................................................................. 31ms DONE
       2019_12_14_000001_create_personal_access_tokens_table .................................................................................. 39ms DONE
    
  3. データベースを確認する

    任意のデータベース閲覧ソフトでデータベースを確認する。私は VSCode拡張機能 Database Client を愛用しているので、そちらで確認しました。

    できているようですね!ちなみに Database Client の設定は以下のようにします。Password のところは root です。

まとめ

これで無事に laravel 開発環境が整いました!次回からは私が蓄積してきた知識を小出しにしていこうと思います。なんせ折角覚えたことは残しておかないと忘れちゃうからね!