LaravelからMAMPを使ってDBに接続するのに四苦八苦した話


はじめに

私は初心者です。突っ込みどころありましたら、ご遠慮なくお願いします。

やりたいこと:
Laravelでのウェブアプリのチーム開発にあたって、デプロイする前にローカル開発環境(=各開発者のPC上の開発環境)を整えたい。ここでの開発環境とは、大きくサーバーとDBのこと。MAMPやLaradockが使えるようでしたが、馴染みのあるMAMPを選択しました。
本トピックに関する記事はググればいろいろ出てくるのですが、正直どれも情報が欠けている部分があって、その通りにやってもうまくいきませんでした。なのでここでまとめらることで、皆さんの作業がスムーズになればいいなと思いまとめてみます。

環境:
Laravel 7(バージョンの調べ方↓)、MAMP 5.7、

$ php artisan --version
Laravel Framework 7.26.1

1、LaravelをMAMPを通してサーバーに接続しブラウザで表示する

Laravel自体にはサーバーも内蔵されているので、ブラウザでlocalhost:8000のアドレスとphp aritisan serveコマンド
でブラウザでページを表示することができます。では、MAMPのApacheサーバーを利用する場合はどうするのでしょうか。
今回の解決策は、シンプルにhtdocs内(/Applications/MAMP/htdocs)にプロジェクト(laravel new プロジェクト名コマンドで作成するフォルダとファイル一式)を格納し、localhost:8888/のアドレスで表示することです。

ちなみに8888とは?
MAMPサーバーに割り当てられた登録済みポート番号です。(ポート番号とはコンピュータに割り当てられたIPアドレスが住所だとすると、その中の各ソフトウェアに割り当てられた部屋番号みたいなもの)ちなみに、8888-8889はMAMP、MySQLは3306。こちらのサイトで色々調べられておもしろいです→PORT INDEX

これでlocalhost:8888/あなたのプロジェクト名/publicでアクセスして下記ページ(welcome.blade.php)が表示されれば成功しています。

私はここに来るまでにエラーに直面し四苦八苦しました。teratailで質問し解決したので、こちらからどうぞ。あらゆることを試したのでエラーと格闘している方のお役に立てると思います。
MAMPでlocalhost:8888に接続しようとするが404 Not Foundになってしまう

2、phpMyAdminでDBを作成し、Laravelから接続する

2-1 phpMyAdminで新規DBを作成しておく

ここで付けるデータベースの名前は後々Laravel側での設定で使うので、わかりやすい名前がいいと思います。現段階ではテーブルなど中身を作り込む必要はありません。

2-2 Laravel側の環境設定を変更する

(1) .envファイル(環境変数ファイル)を修正する

.envとはenvironmentの略で、Laravelの環境やら設定をいじるファイルみたいです。
ここが私のつまずきポイントの1つでした。「.envファイルってどこにあるの?」っていう...。答えは、意外とどの記事も触れてないのですが「Laravelのプロジェクトフォルダの直下にある。でも隠しファイルなのでFinderで見るときはまずCommand+Shift+.で隠しファイルを表示させよう。」でした。そうすると出てきますし、もしくはVS Codeの左のExplorer(フォルダやファイルを表示してくれるやつ)でも発見できます。

.envファイルをVS Codeで開きます。

ここがDBの設定なので、このように↓書き換えます。私は、mysqlをmyslqとスペルミスしてエラーが止まず時間を無駄にしました。。。

どこかの記事で
DB_HOST=localhostと書き換えよ!と見ましたが、127.0.0.1はlocalhostと同義なので、、、
8889のポート番号はこれまたMAMPのポート番号です。
DB_DATABESE=には先ほど付けたデータベースの名前を。USERNAME, PASSWORD, SOCKETはMAMPのトップページに記載されています(下スクショご参照)。

(2) database.phpの内容を変更する

/config/database.phpをVS Codeで開きます。18行目くらいが'default' => env('DB_CONNECTION', 'mysql'),とMySQLになっていることを確認し(MAMPの3つめのMはMySQLのM。MySQLとはDB管理システムの一つ。)、そのMySQLの設定を見ます↓


このように書き換えます。.envファイルと似てます。

//中略
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '8889'),
            'database' => env('DB_DATABASE', 'jazz_review'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', 'root'),
            'unix_socket' => env('DB_SOCKET', ''), 
//中略

unix_socketの第2パラメータに/Applications/MAMP/tmp/mysql/mysql.sockと入れる場合もあるのでしょうか。入れなくてもできてます。

(3)マイグレーション

正直このマイグレーションというのがまだ理解できていないのですが、これがDBと接続するのに必要みたいです。下記コマンドを実行します。

$ php artisan migrate

Migration table created successfully.と出るときちんとDBに接続できているみたいです。(僕の画面はその後にエラー出てますが...)

また、phpMyAdminのDBを見ると、該当DBの中にfailed_jobs, users, password_resets, migrationsというテーブルができていて前者の3つは、/database/migrationsの中にあるファイルにあたります。

もしエラーが解決できなかったら...

私は当初php artisan migrateコマンドがうまくいかず泥沼にハマってました。この原因は先述のmyslqスペルミス問題でのエラーのはずなのですが、それに気づかず「うまくいかない!!」と気が動転しており、色々試していました。それらをまとめてQiitaで質問し解決しているので参考になるかもしれません→php artisan migrateを実行したいがエラーが解決できない

最後に

少しでもなにか皆さんのヒントになれば嬉しいです。ご指摘あればバシバシよろしくお願いします。