絶対に挫折させないアプリ開発 はじめてのLaravel 第5章で気をつけること
技術書典5でゲットしたこちらの本
絶対に挫折させないアプリ開発 はじめてのLaravel
「第5章 はじめての PHP 開発 〜TODO アプリを作ろう〜」にて
フレームワークなしのPHPでTODOリストを作るところまで進めました。
その際、動作確認時に環境まわりで躓いたので気をつけることをメモします。
環境情報
- macOS Mojave (10.14)
- Homebrew はインストール済み
実施手順
mysql は Homebrew でインストールしました。
$ brew install mysql
MySQLのバージョンは8.0でした。
$ brew info mysql mysql: stable 8.0.12 (bottled)
あとは手順通りに進めて、ソースコードを写経していき
最後に動作確認のためにビルトインサーバーを起動し、
ブラウザにてアクセスしたところ
$ php -S localhost:8000
下記のエラーメッセージが画面に表示されました。
データベースに接続できません!アプリの設定を確認してください。
app.php のcatchブロックの中に調査用のコードを追記し確認すると
} catch (PDOException $e) {
echo 'データベースに接続できません!アプリの設定を確認してください。';
echo $e; // 原因調査のために追記
exit;
}
下記のエラーが発生していることがわかりました。
The server requested authentication method unknown to the client [caching_sha2_password]
こちらのエラーは MySQL 8.0.4 からデフォルトの認証プラグインが変更になったことによって発生したようです。
下記の2つの対応により解決しました。
対応1. デフォルト認証プラグインを変更する
/usr/local/etc/my.cnf
に下記の設定を追記しました。
# デフォルト認証プラグイン default_authentication_plugin=mysql_native_password
対応2. MySQL の root ユーザーのパスワードを再設定する。
$ mysql -u root $ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; $ SELECT user, host, plugin FROM mysql.user; $ exit
対応後、再度ビルトインサーバーを起動しブラウザにてアクセスすると
$ php -S localhost:8000
無事に画面が表示されました。