Laradockを使ったLaravel開発環境構築のやさしい解説

こんにちは!

今月からSCOUTER開発部でフロントエンドエンジニアをしている匠平@show60です。

弊社開発部では主にVue.jsとLaravelを使って開発をしています。

私も日頃はVue.jsを使ったフロントエンドの開発を担当させてもらっていますが、あわせてLaravelの学習も始めました。

さっそく開発環境の構築を始めたのですが、知らないことだらけのなかなか大変な作業で、新年から涙しそうでした。

これからLaravelを始めようという方が悲しみに暮れないよう、Laravel開発環境構築をやさしくやさしく解説したいと思います。

サマリ

  • マイグレートしてデータベースを作るまでを解説
  • 起きるかもしれないエラーにも言及

開発環境について

  • MacBook Air
  • Git
  • Laradock

Laradockとは

公式ウェブサイトには、Laravel(PHP)のプロジェクトをDocker上で動作させるためのワンダフルな環境とあります。

A full PHP development environment for Docker.
Includes pre-packaged Docker Images, all pre-configured to provide a wonderful PHP development environment.
Laradock is well known in the Laravel community, as the project started with single focus on running Laravel projects on Docker.
[Laradock official] (https://laradock.io)

Laravelプロジェクトの開発環境はいくつもありますが、今回はこのワンダフルなLaradockを使って環境構築を行っていきます。

Laradockを使う上で、最低限知っておきたい基礎知識

きちんとした解説はもっと詳しい方へ譲るとして、開発環境を整える上で最低限理解しておきたいこと、また理解しておけばよかったと思ったことです。

なぜ仮想環境が必要なのか

Laravelの実行にはいくつものプログラムやライブラリが必要になります。例えばPHP, nginx, MySQLやミドルウェアなどです。

ある特定の環境でしか動かないプログラムなどに対応するために、1つのPC上に複数の環境を用意する必要がありますが、1つのOS上には1つの環境しか用意できないため、仮想のOS環境を用意する必要があります。

Docker、コンテナとは

Dockerはコンテナ型と呼ばれる仮想環境の1つです。仮想環境は他にホスト型、ハイパーバイザー型があります。

Dockerはコンテナという区画を複数提供することで、ある区画ではPHPアプリケーションを、別の区画ではMySQLを実行するというように隔離された実行環境を実現します。
隔離されている各区画(コンテナ)同士は、TCPという通信プロトコルで接続されます。

Laradockの導入

Laradockのダウンロード

ホームディレクトリにLaradockをダウンロードするために、ディレクトリを作成します。名前は任意で、ここでは「laravel_study」という名前にしました。

ダウンロードが完了したら、laradock
に移動して.envファイルを作成します。

// laravel_studyディレクトリに移動
$ cd laravel_study

// GitからLaradockをダウンロード
laravel_study $ git clone https://github.com/Laradock/laradock.git

// ダウンロードができたらlaradockに移動
$ cd laradock

// env-exampleをコピペして.envファイルを作成
laradock $ cp env-example .env

このあとにMySQLをダウンロードしますが、先にバージョンを指定してあげます。

指定しない場合、latest(最新)バージョンをダウンロードします。投稿時点で最新バージョンである8系からはユーザー認証方式が違っており、私はここでかなり詰まってしまいました。

よんどころない理由がなければ、5.7を指定しましょう。

作成した.envファイルをテイストエディタで開いて、MYSQL_VERSION
を修正し保存します。

// "MYSQL_VERSION=latest" を以下のように変更
MYSQL_VERSION=5.7

コンテナの初期化

下記のように、nginx, MySQL, workspaceやphpMyAdminなど開発に必要なプログラムを指定してダウンロードします。これらが各コンテナで実行されることになります。
初めてダウンロードする際には20分ほど時間がかかります。

$ docker-compose up -d nginx mysql workspace phpmyadmin

各プログラム名の横にある進捗が"... done"となれば完了です。

http://localhost
にアクセスすると404 Not Found
と表示されます。一見失敗に見えますが、ページにはnginx
と表示されており、すでにコンテナ上でプログラムが実行されていることが分かります。

「docker-compose up ...」というコマンドは、これらのプログラムを実行する際に入力します。初回のみダウンロードに時間を要しますが、次回以降はほとんど待たずに実行します。

Laravelアプリケーションファイルの準備

Laravelプロジェクトは先ほどダウンロードしたworkspaceコンテナで実行されます。

workspaceにログインし、ここでは「sample」という名前でLaravelアプリケーションファイルを作成しました。その際にLaravelのバージョン5.5系を指定しています。なお、Laravelアプリケーションファイル名を「Laravel」にしてしまうとエラーが出るようなのでご注意ください。
Laravelのダウンロードには5〜10分ほど時間がかかります。

// wordspaceコンテナにログイン
$ docker-compose exec --user=laradock workspace bash

// ログインすると"/var/www$" というディレクトリに入ります
// workspace上でLaravelアプリケーションファイルを作成します
$ composer create-project laravel/laravel sample --prefer-dist "5.5.*"

// "Application key [base64:****] set successfully." となれば完了
// workspaceコンテナからログアウト
$ exit

workspaceコンテナで新たに「sample」という名前のアプリケーションファイルを作成できました。ここにLaradockがアクセスできるよう、Laradockディレクトリの.envファイルを修正します。先ほど.env-exampleをコピペして作ったものです。
Paths
の項目にあるAPP_CODE_PATH_HOST=../
sample
と追記します。

### Paths #################################################

# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../sample

dockerを再起動します。.envファイルを修正した際には再起動が必要です。

# dockerを停止
$ docker-compose stop

# dokcerを再起動
# ここではnginx と MySQLだけ指定しています
$ docker-compose up -d nginx mysql

Laravelのアプリケーションファイルとそのパスを設定できたのでLaravelのページを開いてみましょう。
再度ブラウザでhttp://localhost
にアクセスすると、無事Laravelのアプリケーションが起動していることが確認できます。

マイグレーションしてテーブルを作成する

MySQLにユーザー情報を登録できるテーブルを作成します。マイグレーションという機能を使うことで、テーブルの新規作成や実行を簡単に行うことができます。
マイグレーションに必要なファイルはすでに用意されているのでそちらを使います。

sample/
└ database/
├ factories/
├ migrations/
│ ├ 2014_10_12_000000_create_users_table.php
│ └ 2014_10_12_000000_create_password_resets.php
└ seeds/

マイグレーションファイルはテーブルの設計図のようなものです。今回は編集は加えずに、そのままマイグレーションを実行します。

// sampleディレクトリに移動
$ cd
$ cd laravel_study/sample

// マイグレーションの実行
$ php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_000000_create_password_resets_table
Migrated: 2014_10_12_000000_create_password_resets_table

// マイグレーション完了

これでMySQLに新しいテーブルが作成されました。

マイグレーションの際に出たエラー

マイグレーションの段階で何度もエラーに遭遇し、その度に悲しい思いをしてきました。

一部ですが、実際に出たエラーとその対処法を紹介します。

SQLSTATE[HY000] [1045] Access denied for user 'ユーザー名'@'ホスト名' (using password: [YES/NO])

MySQLにログインできないよ、というエラーです。

using password
YES
の場合はユーザー設定の間違い、NO
の場合はログインのパスワードの間違いが原因です。

私の場合はYES
となっており、ユーザー名が違っていました。Laradock
sample
のそれぞれのディレクトリの.envファイル内のDB_USERNAME
のパラメータを合わせる必要があります。sample
ディレクトリ側の.envファイルを編集、保存し、dockerを再起動することで解消しました。

"SQLSTATE[HY000] [2002] Connection refused

MySQLが起動していないよ、というエラー。

docker-compose up -d nginx mysql
で立ち上げましょう。

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

  • MySQLに接続する通信プロトコルは、TCP通信とソケット通信の2種類ある。
  • localhostがsocket使いたがるので、TCPに変更(127.0.0.1)する必要あり

MySQLから作成したテーブルを確認

先ほど作成したテーブルを確認できたら完了です。

// MySQLに接続
// DB_DATABASEは.envファイル内の名前と同じ
$ mysql --host=localhost --user=[MySQLのユーザー名] --password=secret [DB_DATABASE]

// テーブルを表示
$mysql> show tables from [DB_DATABASE]

最後に

私と同じように初めてLaravelに触れる方に、少しでもこの記事がお役に立てれば幸いです。

また、株式会社SCOUTERでは、エンジニア、デザイナーの募集をしております。

興味のある方は、是非下記からご応募お願い致します!

フロントエンドエンジニア
最新技術で成長業界の波に乗りたいVue.jsフロントエンドエンジニア募集!
ROXXは「人を想い、社会に問う」をビジョンに、2013年に設立。この先何十年も使い続けられるような社会的意義のあるサービスを目指し、現在はHRTechサービスを展開しています。 ■月額制リファレンスチェックサービス『back check』( https://backcheck.jp )  書類選考や面接だけでは分からない採用候補者の経歴や実績に関する情報を、候補者の上司や同僚といった一緒に働いた経験のある第三者から取得することができる、リファレンスチェックサービスです。業界水準の1/10ほどの低コストで実施ができ、大手企業からスタートアップベンチャーまで、幅広い企業様にご利用いただくことができます。 ■ 採用企業と人材紹介会社を繋ぐ、求人プラットフォーム『agent bank』  サービス上に掲載されている1,500社以上の求人情報を、自社で抱える求職者へ自由に紹介することができる求人プラットフォームです。人材紹介会社は、自社で無駄な営業コストを抱えず、目の前の転職者支援に注力することができます。今後は、AIを活用した書類の自動作成、求職者に適した求人提案の自動化などのエージェント業務の大幅な効率化を進めていきます。中小規模の人材紹介会社を集約し、数年後には日本最大の人材紹介会社になることを目指します。
株式会社ROXX
UI/UX designer
ユーザーの行動設計を変えていく!話題のSaaSデザイナー募集!
ROXXは「人を想い、社会に問う」をビジョンに、2013年に設立。この先何十年も使い続けられるような社会的意義のあるサービスを目指し、現在はHRTechサービスを展開しています。 ■月額制リファレンスチェックサービス『back check』( https://backcheck.jp )  書類選考や面接だけでは分からない採用候補者の経歴や実績に関する情報を、候補者の上司や同僚といった一緒に働いた経験のある第三者から取得することができる、リファレンスチェックサービスです。業界水準の1/10ほどの低コストで実施ができ、大手企業からスタートアップベンチャーまで、幅広い企業様にご利用いただくことができます。 ■ 採用企業と人材紹介会社を繋ぐ、求人プラットフォーム『agent bank』  サービス上に掲載されている1,500社以上の求人情報を、自社で抱える求職者へ自由に紹介することができる求人プラットフォームです。人材紹介会社は、自社で無駄な営業コストを抱えず、目の前の転職者支援に注力することができます。今後は、AIを活用した書類の自動作成、求職者に適した求人提案の自動化などのエージェント業務の大幅な効率化を進めていきます。中小規模の人材紹介会社を集約し、数年後には日本最大の人材紹介会社になることを目指します。
株式会社ROXX
サーバーサイドエンジニア
Laravelでマーケット成長の波に乗りたいエンジニアを募集!
ROXXは「人を想い、社会に問う」をビジョンに、2013年に設立。この先何十年も使い続けられるような社会的意義のあるサービスを目指し、現在はHRTechサービスを展開しています。 ■月額制リファレンスチェックサービス『back check』( https://backcheck.jp )  書類選考や面接だけでは分からない採用候補者の経歴や実績に関する情報を、候補者の上司や同僚といった一緒に働いた経験のある第三者から取得することができる、リファレンスチェックサービスです。業界水準の1/10ほどの低コストで実施ができ、大手企業からスタートアップベンチャーまで、幅広い企業様にご利用いただくことができます。 ■ 採用企業と人材紹介会社を繋ぐ、求人プラットフォーム『agent bank』  サービス上に掲載されている1,500社以上の求人情報を、自社で抱える求職者へ自由に紹介することができる求人プラットフォームです。人材紹介会社は、自社で無駄な営業コストを抱えず、目の前の転職者支援に注力することができます。今後は、AIを活用した書類の自動作成、求職者に適した求人提案の自動化などのエージェント業務の大幅な効率化を進めていきます。中小規模の人材紹介会社を集約し、数年後には日本最大の人材紹介会社になることを目指します。
株式会社ROXX
株式会社ROXX's job postings
1 Likes
1 Likes

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more