PHPフレームワークLaravel 5.5をWindowsローカル環境にXAMPPを使ってインストールする方法を解説します。
私の今までの実績ではPHPフレームワークはCakePHPを使うことが最も多かったのですが、Laravelも新規プロジェクトから採用していく方向で検討していきたいと思っていました。特に2017年8月にバージョン5.5がLTSとしてはおよそ2年ぶりにリリースされたこともあり、前向きに検討するには良い時期かと考えていました。ゆくゆくはLaravelを使ったシステムを試作していきたいと思っていますが、まずはLaravelをインストールし簡単なプログラムが動くところまでを試して行きたいと思います。

Laravel9の開発環境構築は、WSL2+Docker Desktop+UbuntuでLaravel9の開発環境を構築するを参考にしてください。(2022年3月追記)

インストールの流れ

Laravelをインストールする方法はいくつかありますが、ローカル環境のWindowsPCにXAMPPを入れて、そこで動かして見ようと思います。
大まかな流れは以下のとおりです。すでにインストール済みのものに関しては飛ばしても構いません。

  1. XAMPPのインストール
  2. Composerのインストール
  3. Laravelのインストール
  4. プロジェクトの生成
  5. ドキュメントルートの書き換え
  6. 動作確認

XAMPPのインストール

XAMPPはWebサーバのApache、データベースのMariaDB(MySQL派生のデータベース)、PHPを含んだパッケージです。Windows環境でWebプログラミング環境を構築する際に必要なソフトウェアをまとめてインストールできる、人気のあるパッケージです。

https://www.apachefriends.org/jp/index.html
ここからWindows向けXAMPPのインストーラをダウンロードします。
インストーラを実行してXAMPPをインストールします。インストールはデフォルト設定で問題ありません。

途中、アクセスを許可するかどうか聞かれますが、「アクセスを許可する」をクリックしてください。

ApacheとMySQLの起動

XAMPPのインストールが完了すると、XAMPP Control Panelが起動します。起動していない場合は起動してください。XAMPP Control Panelが前面に表示されない場合はタスクバーにいることがありますので、アイコンをダブルクリックして表示します。
Apacheの横のStartボタンをクリックしてApacheを起動します。

途中、アクセスを許可するかどうか聞かれた場合は、「アクセスを許可する」をクリックします。
80番ポートを使用しているアプリケーションがあると起動しない場合があります。その場合はそのアプリケーションを閉じてから再度起動してください。80番ポートを使用するアプリケーションとしてはSkypeなどがあります。

MySQLの横のStartボタンをクリックしてMySQLを起動します。

XAMPP

Composerのインストール

ComposerはPHP向けのパッケージ管理システムです。PHPでパッケージ追加したいとき、Composerを使うとコマンド一つでパッケージを追加できます。LaravelもComposerで追加できるパッケージとして用意されています。

https://getcomposer.org/download/
ここからWindows InstallerのComposer-Setup.exeをダウンロードします。
インストーラを実行してComposerをインストールします。インストールはデフォルト設定で問題ありません。

Laravelのインストール

コマンドプロンプトを起動します。
コマンドプロンプトで以下のコマンドを実行します。
composer global require "laravel/installer"

>composer global require "laravel/installer"
Changed current directory to C:/Users/xxx/AppData/Roaming/Composer
Using version ^1.4 for laravel/installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 11 installs, 0 updates, 0 removals
  - Installing symfony/process (v3.3.10): Downloading (100%)
  - Installing symfony/filesystem (v3.3.10): Downloading (100%)
  - Installing psr/log (1.0.2): Downloading (100%)
  - Installing symfony/debug (v3.3.10): Downloading (100%)
  - Installing symfony/polyfill-mbstring (v1.6.0): Downloading (100%)
  - Installing symfony/console (v3.3.10): Downloading (100%)
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)
  - Installing psr/http-message (1.0.1): Downloading (100%)
  - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)
  - Installing guzzlehttp/guzzle (6.3.0): Downloading (100%)
  - Installing laravel/installer (v1.4.1): Downloading (100%)
symfony/console suggests installing symfony/event-dispatcher ()
Writing lock file
Generating autoload files

プロジェクトの生成

以下のコマンドを実行します。
>cd \xampp\htdocs
>laravel new blog

この例ではc:\xampp\htdocs\blogディレクトリにプロジェクトを生成しています。
>cd \xampp\htdocs
>laravel new blog
Crafting application...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 68 installs, 0 updates, 0 removals
- Installing doctrine/inflector (v1.2.0): Downloading (100%)
- Installing doctrine/lexer (v1.0.1): Loading from cache
- Installing erusev/parsedown (1.6.3): Downloading (100%)
- Installing vlucas/phpdotenv (v2.4.0): Downloading (100%)
- Installing symfony/css-selector (v3.3.10): Downloading (100%)
- Installing tijsverkoyen/css-to-inline-styles (2.2.0): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.6.0): Loading from cache
- Installing symfony/var-dumper (v3.3.10): Downloading (100%)
- Installing symfony/routing (v3.3.10): Downloading (100%)
- Installing symfony/process (v3.3.10): Loading from cache
- Installing symfony/http-foundation (v3.3.10): Downloading (100%)
- Installing symfony/event-dispatcher (v3.3.10): Downloading (100%)
- Installing psr/log (1.0.2): Loading from cache
- Installing symfony/debug (v3.3.10): Loading from cache
- Installing symfony/http-kernel (v3.3.10): Downloading (100%)
- Installing symfony/finder (v3.3.10): Downloading (100%)
- Installing symfony/console (v3.3.10): Loading from cache
- Installing egulias/email-validator (2.1.2): Downloading (100%)
- Installing swiftmailer/swiftmailer (v6.0.2): Downloading (100%)
- Installing paragonie/random_compat (v2.0.11): Downloading (100%)
- Installing ramsey/uuid (3.7.1): Downloading (100%)
- Installing psr/simple-cache (1.0.0): Downloading (100%)
- Installing psr/container (1.0.0): Downloading (100%)
- Installing symfony/translation (v3.3.10): Downloading (100%)
- Installing nesbot/carbon (1.22.1): Downloading (100%)
- Installing mtdowling/cron-expression (v1.2.0): Downloading (100%)
- Installing monolog/monolog (1.23.0): Downloading (100%)
- Installing league/flysystem (1.0.41): Downloading (100%)
- Installing laravel/framework (v5.5.19): Downloading (100%)
- Installing fideloper/proxy (3.3.4): Downloading (100%)
- Installing jakub-onderka/php-console-color (0.1): Downloading (100%)
- Installing nikic/php-parser (v3.1.1): Downloading (100%)
- Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (100%)
- Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%)
- Installing psy/psysh (v0.8.13): Downloading (100%)
- Installing laravel/tinker (v1.0.2): Downloading (100%)
- Installing filp/whoops (2.1.12): Downloading (100%)
- Installing fzaninotto/faker (v1.7.1): Downloading (100%)
- Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%)
- Installing mockery/mockery (1.0): Downloading (100%)
- Installing webmozart/assert (1.2.0): Downloading (100%)
- Installing phpdocumentor/reflection-common (1.0.1): Downloading (100%)
- Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%)
- Installing phpdocumentor/reflection-docblock (4.1.1): Downloading (100%)
- Installing phpunit/php-token-stream (2.0.1): Downloading (100%)
- Installing sebastian/version (2.0.1): Downloading (100%)
- Installing sebastian/resource-operations (1.0.0): Downloading (100%)
- Installing sebastian/recursion-context (3.0.0): Downloading (100%)
- Installing sebastian/object-reflector (1.1.1): Downloading (100%)
- Installing sebastian/object-enumerator (3.0.3): Downloading (100%)
- Installing sebastian/global-state (2.0.0): Downloading (100%)
- Installing sebastian/exporter (3.1.0): Downloading (100%)
- Installing sebastian/environment (3.1.0): Downloading (100%)
- Installing sebastian/diff (2.0.1): Downloading (100%)
- Installing sebastian/comparator (2.0.2): Downloading (100%)
- Installing phpunit/php-text-template (1.2.1): Downloading (100%)
- Installing doctrine/instantiator (1.0.5): Loading from cache
- Installing phpunit/phpunit-mock-objects (4.0.4): Downloading (100%)
- Installing phpunit/php-timer (1.0.9): Downloading (100%)
- Installing phpunit/php-file-iterator (1.4.2): Downloading (100%)
- Installing theseer/tokenizer (1.1.0): Downloading (100%)
- Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)
- Installing phpunit/php-code-coverage (5.2.2): Downloading (100%)
- Installing phpspec/prophecy (v1.7.2): Downloading (100%)
- Installing phar-io/version (1.0.1): Downloading (100%)
- Installing phar-io/manifest (1.0.1): Downloading (100%)
- Installing myclabs/deep-copy (1.7.0): Downloading (100%)
- Installing phpunit/phpunit (6.4.3): Downloading (100%)
symfony/var-dumper suggests installing ext-symfony_debug ()
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
symfony/routing suggests installing symfony/yaml (For using the YAML loader)
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/http-kernel suggests installing symfony/browser-kit ()
symfony/http-kernel suggests installing symfony/class-loader ()
symfony/http-kernel suggests installing symfony/config ()
symfony/http-kernel suggests installing symfony/dependency-injection ()
symfony/console suggests installing symfony/filesystem ()
egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)
ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator)
ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
symfony/translation suggests installing symfony/config ()
symfony/translation suggests installing symfony/yaml ()
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)
league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications)
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (~3.0).)
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (~2.5).)
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).)
laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (~1.0).)
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (~1.0).)
laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (~1.0).)
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (~3.0).)
laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (~1.0).)
laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (~2.0).)
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (~3.3).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (~1.0).)
psy/psysh suggests installing ext-pcntl (Enabling the PCNTL extension makes PsySH a lot happier :))
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing ext-posix (If you have PCNTL, you'll want the POSIX extension as well.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit-mock-objects suggests installing ext-soap (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.5)
phpunit/phpunit suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing phpunit/php-invoker (^1.1)
Generating optimized autoload files
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
> @php artisan key:generate
Application key [base64:dkxFYJ190ZhIU9j0+HwEc4v+mGsQRvK30ZRK908nWKs=] set successfully.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Package manifest generated successfully.
Application ready! Build something amazing.

ドキュメントルートの書き換え

XAMPPはデフォルトではC:/xampp/htdocsがドキュメントルートになっています。
C:/xampp/htdocs/blogにLaravelプロジェクトをインストールすると、その下のpublicディレクトリ(つまりC:/xampp/htdocs/blog/public)をドキュメントルートにする必要があります。

C:\xampp\apache\conf
をテキストエディタで編集します。
247行目と248行目を以下のように変更します。

documentRoot "C:/xampp/htdocs/blog/public"
<Directory "C:/xampp/htdocs/blog/public">

Apacheの設定を変更しましたので、一度Apacheを再起動します。
XAMPP Control PanelでApacheのStopボタンをクリックして停止し、もう一度ApacheのStartボタンをクリックして起動します。

動作確認

ブラウザで以下のURLにアクセスしてLaravelのページが表示されればインストールは完了です。
http://localhost/

Laravelインストール