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の設定を見ます↓
//中略
'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を実行したいがエラーが解決できない
最後に
少しでもなにか皆さんのヒントになれば嬉しいです。ご指摘あればバシバシよろしくお願いします。
Author And Source
この問題について(LaravelからMAMPを使ってDBに接続するのに四苦八苦した話), 我々は、より多くの情報をここで見つけました https://qiita.com/kakudaisuke/items/53d63acc3aa38c2c5bc1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .