No supported encrypter found. The cipher and / or key length are invalid. (laravel 5.1)

久しぶりにPHPをさわり、人気があるということなのでlaravelを入れて動かしてみた。早速エラーに出会ったのでメモ。

以下のようにkeyを生成する必要があった。

$ php artisan key:generate

デフォルトの設定だとconfig/app.phpに以下のような設定がなされている。

'key' => env('APP_KEY', 'SomeRandomString'),
'cipher' => 'AES-256-CBC',

APP_KEYという環境変数が設定されていない場合、SomeRandomStringという文字列がkeyに設定される。エラーの出処から追うと、上記のcipherの場合は32bitの文字列である必要があり、この設定のままだとエラーになってしまう。

# vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php
public static function supported($key, $cipher)
{
    $length = mb_strlen($key, '8bit');

    return ($cipher === 'AES-128-CBC' && ($length === 16)) || ($cipher === 'AES-256-CBC' && $length === 32);
}

php artisan key:generateにより.envに32bitのランダムな文字列がAPP_KEYとして生成され、それが用いられるようになる。