hero_picture
Cover Image for Laravelを学ぶ為、DockerでLaravelを動かせる環境を構築した

Laravelを学ぶ為、DockerでLaravelを動かせる環境を構築した

こんにちは、西山です。

今回からは麻雀に負けずともブログ記事を書こうと思います。

エンジニア35歳定年説を気にせず

PHPフレームワークとして有名なLaravelを勉強し始めましたので

学んだ事や経験した事を記載していきます。

会社ではDockerを立ち上げるだけで完全に自動化され

ファイルの修正が必要なく、Laravelが動作するDockerリポジトリが存在します。

それとは別に、自分で一からDockerの開発環境を作成してみました。

便利な物を効率よく使うのも重要ですが

学習の為、自分で作成したDocker環境にLaravelをインストールし

シンプルな内容のリポジトリを作成しました。

github.com

この作成過程や実際に作成したリポジトリの使い方を元に話を進めます。

尚、開発環境はMacで、Dockerは 「Docker Desktop for Mac」 を使用しました。

docs.docker.com

※Windowsでは、「Docker Toolbox」を使用しDockerの環境を用意しました。

■1. Laravelの学習

リポジトリを作成するにあたり、まずは下記の2つを取り組みました。

● ドットインストール 「Laravel 5.5入門」

● 書籍 「PHPフレームワーク Laravel入門」

ドットインストールは短い動画が複数あり取り組みやすく分かりやすいですが

細かく気になった点が省かれていると感じました。

その後で、書籍で丁寧に一通り説明されているのを読み、理解が進みました。

全体の流れをドットインストールで学んでからだったので、書籍の細かい点も分かりやすく感じました。

Laravelはインストールも簡単ですし、ベースのファイルを作成する為の便利なコマンドも多く用意されています。

■2. リポジトリの作成「DockerへのLaravelのインストール」

元々PHPが動作するシンプルなDockerを作成していまして

そこにLaravelのインストールとプロジェクト作成を行い、今回のリポジトリを作成しました。

作業の流れを記載します。

Dockerのコンテナを作成・起動

1docker-compose up -d

「web」という名前のコンテナを私は用意しています。

Webサーバーのコンテナに入る

1docker-compose exec web bash

Webサーバーに入って、Laravelをインストールします。

まずはComposerのインストールが必要です

https://getcomposer.org/download/

下記の記載があるので、それぞれ1行ずつコマンドを叩き実行します

1php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
2php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
3php composer-setup.php
4php -r "unlink('composer-setup.php');"

ここまで実行すると下記のファイルが作成されています。

composer.phar

ここで、ComposerからLaravelをインストールします。

laravel_appという名前でプロジェクトを作ります。

プロジェクト作成

1php composer.phar create-project --prefer-dist laravel/laravel laravel_app

インストールが完了しましたら、プロジェクトのディレクトリに移動しLaravelのバージョンを確認します。

ディレクトリ移動

1cd laravel_app

Laravelのバージョン確認

1php artisan --version

この artisan のコマンドはモデル、コントローラー、マイグレーション等の様々なベースファイルの作成ができたりなど

Laravel開発に置いて、非常に便利なコマンドです。

artisan は職人という意味なので、指示を出して使いこなすエンジニアは親方ですね。

下記のようにバージョンが表示されればOKです。

1Laravel Framework 5.8.34

親方デビューです。

追加されたLaravelのファイルを git add して今回のリポジトリが作成できました。

■3. リポジトリの使い方「Laravelのリポジトリを git clone して動かす時の注意点」

しかし、別PCに git clone してdockerを立ち上げて動かそうとした所、動きませんでした。

別の現場では、すんなり親方になれませんでした。

エラーメッセージ

1Warning:  require(/app/laravel_app/public/../vendor/autoload.php): failed to open stream: No such file or directory in /app/laravel_app/public/index.php on line 24
2Fatal error:  require(): Failed opening required '/app/laravel_app/public/../vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /app/laravel_app/public/index.php on line 24

先ほど自分で名前を決めて作成したLaravelのプロジェクトのディレクトリ「laravel_app」

下記にvendorディレクトリが存在していませんでした。

1/laravel_app/vendor

artisanコマンドでプロジェクトを作った時には存在しましたが

vendorディレクトリが無いのでインストール

■【現在はDockerのwebサーバーのディレクトリ「laravel_app」にいる状態】

※ /composer.phar に「composer.phar」は存在します。

インストール

1php ../composer.phar install

vendorディレクトリが作成されましたが、500エラーと表示されます。

【Laravel】の環境変数設定ファイル「.env」が作成されていなかったので作成します。

Gitで管理されない状態になっていました。

/laravel_app/.envを作成

1cp .env.example .env

Dockerで開発していますので、Dockerのデータベースの設定を確認します。

/docker-compose.yml の設定を確認

1version: '3'
2services:
3web:
4build: ./docker/web/
5depends_on:
6- db
7volumes:
8- ./:/app
9- ./docker/web/php.ini:/usr/local/etc/php/php.ini
10- ./docker/web/000-default.conf:/etc/apache2/sites-enabled/000-default.conf
11working_dir: /app
12ports:
13- ${WEB_PORT}:80
14db:
15build: ./docker/db/
16volumes:
17- ./docker/db/mysql:/var/lib/mysql
18- ./docker/db/init:/docker-entrypoint-initdb.d
19environment:
20- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
21- MYSQL_DATABASE=${MYSQL_DATABASE}
22- MYSQL_USER=${MYSQL_USER}
23- MYSQL_PASSWORD=${MYSQL_PASSWORD}
24ports:
25- ${DB_PORT}:3306

上記の {MYSQL_ROOT_PASSWORD} の記載は

【Docker】の環境変数の設定ファイル「.env」で管理しています。

※Laravelの環境変数の設定ファイルとは別ファイルで、リポジトリ直下に存在します。

Dockerの .env 場所

1/.env

/.env の設定を確認

1WEB_PORT=50012
2DB_PORT=50013
3MYSQL_ROOT_PASSWORD=rootpassword
4MYSQL_DATABASE=testdb
5MYSQL_USER=test
6MYSQL_PASSWORD=testpassword

Dockerのデータベースに接続する必要があるので

Laravelの.envのデータベース接続の箇所を修正

Laravelの .env 場所

1/laravel_app/.env

Dockerからの接続になるので、/docker-compose.yml を確認し

「DB_HOST」は「db」とし「DB_PORT」は「3306」であることに注意してください。

/laravel_app/.env 修正内容

1DB_CONNECTION=mysql
2DB_HOST=db
3DB_PORT=3306
4DB_DATABASE=testdb
5DB_USERNAME=root
6DB_PASSWORD=rootpassword

まだエラーが続きます。しぶといですね。

1No application encryption key has been specified.

下記のコマンドを実行

キー作成

1php artisan key:generate

キャッシュクリア

1php artisan config:clear

これで、ようやくトップページが表示されました。

git cloneして、すぐに使えると思っていましたが、何点か注意が必要な状況でした。

私が作ったリポジトリに限らず、Laravelの .env はGit管理されない設定になっている為

他のLaravelのリポジトリを git clone して使えなかった場合には

上記の手順を参考にしていただければ幸いです。

あとがき

いくつになっても、新しい事を知ることは重要なのでめげずに進んでいきます。

健康診断もあり、30半ばになるとより一層健康が気になるところです。

では、そろそろ自分探し(再検査)に行ってまいります。

以上、西山でした。