Help us understand the problem. What is going on with this article?

MacでLaravel5.8の開発環境を構築しよう(開発)

さて、「MacでLaravel5.8の開発環境を構築しよう」の開発編です。今回はLaravelのアプリを実際に作り、mysqlと紐づけるやり方について解説していこうと思います。まだ、下準備編を見られていない方はそちらから見てください。

流れ

1.Laravelのアプリを作る
2.mysqlをインストール
3.mysqlのデータベースを作成
4.ユーザーを作成
5.ユーザーの権限を追加
6.ログイン機能の変更
7.Laravelアプリとの紐付け

1.Laravelのアプリを作る

では、早速Laravelのアプリを作っていきましょう。Laravelのアプリを作るには、composerを使用します。ここで注意が必要なのですが、Laravelの最新バージョンはLaravel5.8ではありません。だからなんだよ!と思われるかもしれませんが、普通にLaravelのアプリを作ってしまうと、Laravelの最新バージョンが使用されてしまいます。そこで、Laravel5.8で作成するためにはバージョンを指定する必要性があります。Laravel5.8に指定してアプリを作成するためのコードは下記の通りです。

$ composer create-project laravel/laravel=5.8 Laravel_app
                                          ↑バージョン指定 ↑アプリ名

ちょっと時間かかります。

Application key set successfully.

と言う文字が表示されたら終わってると思います。
これが表示されたら、Laravel_appに移動して、実際にLaravel5.8でインストールされているか確認してみましょう。

$ cd Laravel_app
$ php artisan -V
Laravel Framework 5.8.35

こんな風に表示されていたら、実際にローカルサーバを起動してみましょう。

$ php artisan serve
Laravel development server started: <http://127.0.0.1:8000>

ここに出てくるURLを貼り付けで検索してみましょう。そしたら、下のような画像が出てくるはずです。

スクリーンショット 2019-10-17 10.41.35.png

次は止めてみましょう。ターミナル上でcontrol+cを押すとローカルサーバが終了します。URLを再読読み込みするとこうなります。

スクリーンショット 2019-10-17 10.44.23.png

基本的にこのサーバは立てながら作業するのですが、サーバを立てている間その時使ったターミナルはコードを入力できなくなってしまいます。ですので、サーバを立てるターミナルとコードを打つ用のターミナルの2つを使って作業するのが効率いいです。

2.mysqlのインストール

mysqlはよく使われているDBベースの1つです。mysqlは、homebrewでインストールすることができます。今回は最新版を使うので、バージョン指定はしません。

$ brew install mysql #@~ でバージョン指定

mysqlが入っているようであれば、下記のようになるはずです。

$ mysql -V
mysql  Ver 8.0.18 for osx10.14 on x86_64 (Homebrew)

この段階では、まだmysqlが起動していないので、起動してみます。
うまく行ってればこうなります。

$ mysql.server start
Starting MySQL
.. SUCCESS!

次にrootユーザーでログインします。最初はパスワードついてないのでユーザー名だけでログインできます。

$ mysql -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.18 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

もし、サーバーを起動せずに上のコードを打ってしまうと、こういうエラーになります。こう出たら、$ mysql.server startを実行して、もう一度入力してみてください。大抵治ります。

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

現在rootユーザーにパスワードはついてないのですが、全権限をもつrootユーザーのパスワードが設定されてないのはまずいです。そこらへんのことやセキュリティ関連の設定は下記で説明されています。今回は飛ばします。
Macでmysqlの初期設定

3.mysqlのデータベースを作成する

今回はLaravel_appと接続するので、それ用のデータベースを作成します。データベース名はappdbとでもしておきましょう。

mysql> create database appdb;
Query OK, 1 row affected (0.00 sec)

appdbがちゃんと作られているか、データベースを確認しておきましょう。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| appdb              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.02 sec)

4.ユーザーの作成

さて、laravelと紐づけるためには、ユーザーが必要です。rootユーザーでもいいのですが、rootユーザーは前記した通り全権限を持っているので、紐づける時には使いたくないです。そこで新たにユーザーを作成します。新たなユーザーはhumanとでもしときましょうか。

mysql> create user human@localhost identified by 'パスワード';
              ↑ユーザー名 ↑ホスト名
Query OK, 0 rows affected (0.01 sec)

ユーザーが作成されているか確認しときましょう。

mysql> select user, host from mysql.user order by user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| human            | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

ここから少し、ユーザーの編集をします。具体的には権限の追加認証設定の変更です。

5.ユーザーの権限の追加

まず、権限の追加についてやっていきましょう。まず、先ほど作成したhumanというユーザーがどんな権限を持っているのか確認しましょう。
ちなみに確認はrootユーザーでログインした状態で行います。

mysql> show grants for human@localhost;
+-------------------------------------------+
| Grants for human@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `human`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

作成したばかりのユーザーは大抵こんな感じになります。形式的にはGRANT できること ON データベース名.テーブル名 TO ユーザー名@ホスト名となります。humanユーザーでは、できることの部分がUSAGEとなっています。USAGEとは権限なしと言う意味です。データベース名 テーブル名のところは*になっています。*全てと言う意味です。

これらのことを読み解いて、日本語にするとhumanユーザーは全てのデータベースとテーブルに対して権限を持たないと言うことになります。つまり、ただ、ログインできるようになったけど、何もできないユーザーです。このままだと使い物にならないので、権限を追加してあげましょう。

権限の追加は簡単で、先ほど表示された形式通りに与えたい権限とその範囲を指定して実行すればいいだけです。
今回はappdbと言うデータベースに対して、全ての権限を与えたいので、下記のようになります。できることの部分では全て=allになるので*と書かないように注意しましょう。

mysql> grant all on appdb.* to human@localhost;
Query OK, 0 rows affected, 1 warning (0.01 sec)

もう一度ユーザーの権限を確認するとgrant all on appdb.* to human@localhostが追加されているはずです。

mysql> show grants for human@localhost;
+----------------------------------------------------------+
| Grants for human@localhost                               |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO `human`@`localhost`                |
| GRANT ALL PRIVILEGES ON `appdb`.* TO `human`@`localhost` |
+----------------------------------------------------------+
2 rows in set (0.00 sec)

より細かい権限の追加を行いたい場合は、下記を参考にしてください。
ユーザーに権限を設定する(GRANT文)
mysql公式 ドキュメンテーション

6.認証方法の変更

次にやっていくのは、ログイン認証方法の変更です。なんでこれが必要かというとmysql8.0からログイン認証方法が変わっているんですが、laravel5.8はそれに対応していないようです。そこで変更前の認証方法に戻しておく必要があります。

まず、現在どのような認証方法になっているのかを確認してみましょう。

mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | 127.0.0.1 | caching_sha2_password |
| human            | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

pluginの部分が全部caching_sha2_passwordになっているのがわかると思います。何も設定してないと自動的にこれになります。これはlaravel5.8では対応してないものなので、mysql_native_passwordに変えていきます。あくまで、laravel5.8が対応していないというだけなので、変更する必要があるのはlaravelと接続するときに使用するhumanユーザーだけです。

変更は下記コードでできます。これをするとそれ以降作成するユーザーもmysql_native_passwordで作成されます。

alter user human@localhost identified with mysql_native_password by 'パスワード';
Query OK, 0 rows affected (0.01 sec)

変更されているか確認しときましょう。

mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | 127.0.0.1 | caching_sha2_password |
| human            | localhost | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

とりあえず、mysqlでの作業はここまでで終了です。\qを入力してEnter押せばmysqlからログアウトできます。ちなみに\option+¥で入力できます。

7.Laravelとの紐付け

最後に、laravelとの紐付けをしていきます。具体的にやることは.envファイルの編集です。.envとは環境設定と言われる部分でデータベースの情報を設定しとかないと、うまくいきません。というわけで編集していきます。勘がいい方は気づかれているかもしれないですが、.envは下準備編のとき作成した.bashrcと同じように隠しファイルです。そこで今回もvimで編集していきます。

.envは、作成したlaravelのアプリ内にあるので、まず移動しましょう。そのあと、vimを起動しましょう。

$ cd Laravel_app
Laravel_app$ vim

起動したら、下記コードで.envを開きます。

:e .env

開けたら下記のように編集します。編集するときはiを押して入力モードにします。

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=appdb
DB_USERNAME=human
DB_PASSWORD=パスワード

編集が終わったらescを押してノーマルモードにしてZZで内容を保存し終了してください。

catを使って中身を確認して変更できているか確認してください。

$ cat .env

変更されていることを確認したら、次のコードでその設定を反映させます。

$ php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

さて、最後です。Laravel5.8では作成した時から、user等のmigrationファイルが作成されています。migarationファイルは、データベースの設計図のようなものです。このmigrationファイルを実行するとその中に書かれていたことが、データベースに反映されるわけです。というわけで、実際に反映させてみましょう。

$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.01 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.01 seconds)

これでデータが作成されました。もし、ここでエラーが出るなら、データベースの接続がうまくいっていません。一度Macを再起動したり、mysqlにhumanユーザーでログインできるか確かめてみてください。ちなみに自分がやった時もパスワードまちがてて、最初うまくいかなかった(^_^;)

作成できたら、念のためにデータベースを確認しておきましょう。まず、rootユーザーでログインします。その後データベースを移動します。

mysql> use appdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

データベース内のテーブルをみてみましょう。3つのテーブルが作成されているはずです。

mysql> show tables;
+-----------------+
| Tables_in_appdb |
+-----------------+
| migrations      |
| password_resets |
| users           |
+-----------------+
3 rows in set (0.00 sec)

ここまでで開発環境の構築は完了です。

参考にしたサイト

mysql公式ドキュメント
Laravel データベース接続編

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした