絶対に挫折させないアプリ開発 はじめての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 からデフォルトの認証プラグインが変更になったことによって発生したようです。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin

下記の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

無事に画面が表示されました。

f:id:noratora:20181023225738p:plain