2023/01/06

こんにちは室長のゆうろです。LaravelはPHPの中で最も募集の多いフレームワークです。フレームワークで他には、Cake,Symfony,CodeIgniter等があります。今回はLaravel入門の本に沿って環境を構築してみました。Dockerが使える人はDocker経由のほうがきっといいですね。本に記載された手順だけですと躓きましたので、以下に備忘録がてら共有させて頂きます。
- PHPの入手
https://www.php.net/downloads.php
室長はここでなんとなく7.2のWindows downloadsをクリック後、
VC15 x64 Thread Safe (2019-Mar-07 01:48:44)の
php-7.2.16-Win32-VC15-x64.zipにしました。 - PHPのインストール
インストールというよりは解凍です - コンポーザーの入手
https://getcomposer.org/download/
Windows Installerをダウンロードする - コンポーザーのインストール
途中でPHPの解凍先を指定する - Laravelのインストール
コンポーザー経由となります。dos画面でcomposer global require "laravel/installer=~1.1"
→とくに問題なくインストールされました。
- Laravelコマンドを環境変数PATHに登録
windowsキーを押してpathと入力するのが早いですね
「C:\Users\euro\AppData\Roaming\Composer\vendor\bin」を追加します - プロジェクトの作成
cd desktop laravel new laravelapp
としたが以下エラーが発生。laravelappはプロジェクト名で任意です。(書籍がそうしてましたのでw)
Crafting application... The system cannot find the path specified. Application ready! Build something amazing.
これはエラーだと思うのですが、気にせず進めました
- ローカルでサーバーの起動
php artisan serve
とすると以下エラーPHP Warning: require(C:\Users\euro\Desktop\laravelapp/vendor/autoload.php): failed to open stream: No such file or directory in C:\Users\euro\Desktop\laravelapp\artisan on line 18
→vendorフォルダがないと言われる
- vendorフォルダの作成を試みる
composer install
でvendorができるはずなので実施したが失敗した
Problem 1 - Installation request for league/flysystem 1.0.51 -> satisfiable by league/flysystem[1.0.51]. - league/flysystem 1.0.51 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system. Problem 2 - league/flysystem 1.0.51 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system. - laravel/framework v5.8.8 requires league/flysystem ^1.0.8 -> satisfiable by league/flysystem[1.0.51]. - Installation request for laravel/framework v5.8.8 -> satisfiable by laravel/framework[v5.8.8].To enable extensions, verify that they are enabled in your .ini files: - C:\INIs\php\php-7.2.16-Win32-VC15-x64\php.ini You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
→fileinfoの拡張モジュールが不足とのこと
- PHP.iniにfileinfoの拡張モジュールの使用を許可させる
;extension=fileinfo
の;を解除
- composer installを再実施
→正常終了 - php artisan serveを再実施
http://localhost:8000/にアクセスすると500エラー - ログを確認する
「.\laravelapp\storage\logs」にあるログを開くとencryption関連でエラーが発生しているproduction.ERROR: No application encryption key has been specified. {"exception":"[object] (RuntimeException(code: 0): No application encryption key has been specified. at C:\\Users\\euro\\Desktop\\laravelapp\\vendor\\laravel\\framework\\src\\Illuminate\\Encryption\\EncryptionServiceProvider.php:44) [stacktrace] #0 C:\\Users\\euro\\Desktop\\laravelapp\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\helpers.php(1123): Illuminate\\Encryption\\EncryptionServiceProvider->Illuminate\\Encryption\\{closure}(NULL)
キーがないとエラーがでるようです。
- キーの作成を試みる
php artisan key:generate
→.envがないとエラーを履く
ErrorException : file_get_contents(C:\Users\euro\Desktop\laravelapp\.env): failed to open stream: No such file or directoryat C:\Users\euro\Desktop\laravelapp\vendor\laravel\framework\src\Illuminate\Foundation\Console\KeyGenerateCommand.php:96 92| { 93| file_put_contents($this->laravel->environmentFilePath(), preg_replace( 94| $this->keyReplacementPattern(), 95| 'APP_KEY='.$key, > 96| file_get_contents($this->laravel->environmentFilePath()) 97| )); 98| } 99| 100| /**Exception trace:1 file_get_contents("C:\Users\euro\Desktop\laravelapp\.env") C:\Users\euro\Desktop\laravelapp\vendor\laravel\framework\src\Illuminate\Foundation\Console\KeyGenerateCommand.php:962 Illuminate\Foundation\Console\KeyGenerateCommand::writeNewEnvironmentFileWith("base64:Lly3bTaYjDR8g6liweiymVWUvH5q2sXZal69RhVHL9s=") C:\Users\euro\Desktop\laravelapp\vendor\laravel\framework\src\Illuminate\Foundation\Console\KeyGenerateCommand.php:80Please use the argument -v to see more details.
- .envをコピーする
cp .env.example .env
- php artisan key:generate を再実施
→正常終了 - 「http://localhost:8000/」のアクセスを再実施
→正常にデモ画面が表示された
お疲れ様です。よいLaravelライフを。
追記:
5章のデータベース利用の章でsqliteを利用しますが、
Database (database.sqlite) does not exist. (SQL: PRAGMA foreign_keys = ON;)
や
could not find driver (SQL: PRAGMA foreign_keys = ON;)
と表示されて動かない事象が発生しました。色々ググってみて下記のような対応を参考にしましたが
#DB_DATABASE=homestead
‘database’ => env(‘DB_DATABASE’, database_path(‘database.sqlite’)),
php.ini:915行目
extension=pdo_sqlite
のコメントをはずして有効にしてから、「php artisan serve」を再起動すると動きました。