Windows10ではWindows Subsystem for Linux(WSL)を利用することでLinuxをインストールすることができ、そのLinux上にLaravelをインストールすることが可能です。Windows10にインストールしたUbuntuでLaravelを動作させるためにはPHPのインストールなどいくつか設定があるので一つ一つ詳細に説明を行っていきます。Dockerを利用したLaravel Sailの設定ではないので注意してください。

Ubuntuのバージョンは、18.04。PHPのバージョンは7.2。Laravelバージョンは6.3と5.8の環境で行っています。

Windows上へのLinuxのインストール

WSLを使ったUbuntuのインストールについては下記の文書を参考にしてください。

Ubuntuの設定

Ubuntuのインストール後、Ubuntuに接続していない場合は、Ubuntuに接続するためにコマンドプロンプトでwslコマンドを実行します。Ubuntuに接続後、cdコマンドでホームディレクトリに移動します。

PHPのインストール

WSLを使ってインストールしたUbuntuにはPHPがインストールされていないため、PHPのインストールを行う必要があります。また、Laravelのインストール要件が下記となっているので、モジュールに漏れがないようにPHPのインストールを行います。

  • PHP >= 7.2.0
  • BCMath PHP Extension
  • Ctype PHP Extension
  • JSON PHP Extension
  • Mbstring PHP Extension
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension
Laravel6.xからはPHPのバージョンが7.2.0以上になりました。

PHPのバージョンは7.2をインストールしています。 Laravelの要件に必要なモジュールを一緒にインストールを行います。


$ sudo apt install php7.2 php7.2-mbstring php7.2-xml php7.2-bcmath

インストール後はPHPのバージョンとインストールしたモジュールを確認します。


$ php -v
PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.19-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies

モジュールの確認はphp -mコマンドで行います。要件のモジュールがインストールされていることが確認できます。


$ php -m
[PHP Modules]
bcmath
・
ctype
・
json
・
mbstring
openssl
・
PDO
・
tokenizer
・
xml
・
その他にもたくさんのモジュールが表示されますが、ここではLaravelに必要なモジュールのみ抜き出して表示させています。

Composerのインストール

LaravelをインストールするためにはComposerをインストールする必要があります。ComposerはPHPのパッケージ管理ツールで、Composerを使うとパッケージを効率よく管理することができます。

ComposerをインストールするためにComposerの公式ホームページにアクセスしてDownloadボタンをクリックします。

Composerダウンロードサイト
Composerダウンロードサイト

Composerをコマンドラインでインストールするため下記の赤枠にあるスクリプトをコピーします。

インストールスクリプト
インストールスクリプト

ターミナルにペーストして実行します。


php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

実行すると実行したフォルダにcomposer.pharファイルが作成されます。

composer.phar -Vコマンドを実行してインストールしたComposerのバージョンを確認することができます。


$ ./composer.phar -V
Composer version 1.9.0 2019-08-02 20:55:32

composerコマンドを他のフォルダからも実行できるように/user/local/bin/フォルダの下に移動します。その際に名前はcomposerに変更します。


$ sudo mv composer.phar /usr/local/bin/composer
ファイル名の変更も/usr/local/binへの保存も必須な作業ではありません。

whichコマンドを実行してcomposerのパスが通っているか確認します。whichコマンド実行後にパスが表示されれたパスが通っているため、どこのフォルダからもcomposerコマンドを実行することができます。


$ which composer
/usr/local/bin/composer
どのフォルダへのパスが通っているかはecho $PATHを実行すると確認することができます。

zipコマンドのインストール

Laravelのインストールを行う際にunzipコマンドが必要になるため、zipコマンドのインストールを行います。インストール直後のUbuntuにはzipコマンドは入っていません。


$ sudo apt install zip
zipをインストールしていない場合は、LaravelをインストールしようとするとFailed to download laravel/laravel from dist: The zip extension and unzip command are both missing, skipping.のエラーが発生します。

Laravel6.xのインストール

composerのインストールも完了したので、Laravelのインストールを行います。 下記を実行すると実行フォルダの下にlaravel6というフォルダが作成され、そのフォルダの中にLaravelに必要なファイルが保存されます。laravel6は任意の名前なので好きな名前を付けてください。


$composer create-project --prefer-dist laravel/laravel laravel6

Laravel5.8のインストール

下記は、Laravelのバージョンが5.8の時のインストール方法です。

composerのインストールも完了したので、Laravelのインストールを行います。下記を実行すると実行フォルダの下にlaravel5.8というフォルダが作成され、そのフォルダの中にLaravelに必要なファイルが保存されます。laravel5.8という名前は任意なので好きな名前を付けてください。


$composer create-project --prefer-dist laravel/laravel laravel5.8

インストールが完了したら、php artisan serveコマンドで開発用WEBサーバを起動してLaravelにアクセスできるか確認を行います。

Laravelのインストールフォルダであるlaravel5.8で実行してください。


$ cd laravel5.8
$ php artisan serve
Laravel development server started: &lgt;http://127.0.0.1:8000>

ブラウザでアクセスし、下記の画面が表示されたらLaravelのインストールは正常に完了しています。

ブラウザはWindows側で起動して、URLにhttp://127.0.0.1:8000を入力してください。
Laravelインストール後の画面
Laravelインストール後の画面

sqlite3のインストール

本文書ではsqliteとMySQLデータベースのインストール方法と設定方法を説明しています。どちらかのデータベースを選択して、設定を行ってください。

Laravelにデータを保存するためにデータベースが必要になります。sqlite3データベースを利用するためapt installコマンドでsqlite3をインストールします。


$ sudo apt install sqlite3

またsqlite3データベースへ接続するためのPDOドライバも必要になるためインストールを行います。


$ sudo apt install php7.2-sqlite3

sqlite3のデータベースファイルの作成を行います。Laravelのインストールフォルダで実行してください。


$ touch database/database.sqlite

sqlite3データベースの設定

Laravelからsqliteのデータベースに接続するために.envファイルのDB_CONNECTIONの設定値をmysqlからsqliteに変更します。


DB_CONNECTION=sqlite
DB_CONNECTION以外のデータベースに関する設定は削除します。

php artisan migrateコマンドでusersテーブルの作成を行います。下記のように表示されたらテーブルの作成は完了しています。


$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.01 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.01 seconds)
php artisan migrateコマンド実行後にcould not find driverエラーが発生した場合はsqlite3のドライバがインストールされていないのでインストールを行ってください。

MySQLのインストール

WSLのUbuntuにMySQLをインストールして、Laravelのテーブルが作成できるか確認を行います。いくつか途中でエラーが発生していますが、対処方法も記述しています。

まず、apt installコマンドでmysql-serverパッケージのインストールを行います。


$ sudo apt install mysql-server

インストールされたmysqlのバージョンを確認します。5.7がインストールされていることが確認できます。


$ mysql --version
mysql  Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using  EditLine wrapper

次にLaravelからMySQLに接続用のドライバーをインストールします。


8$ sudo apt install php7.2-mysql

MySQLの起動

インストール後MySQLの起動を行うとエラーが発生しました。エラーが発生しますが、MySQLは起動しています。


$ sudo service mysql start 
No directory, logging in with HOME=/sqld

mysqlユーザのディレクトリが下記のように nonexistentになっているため変更を行う必要があります。


$ grep mysql /etc/passwd
mysql:x:111:116:MySQL Server,,,:/nonexistent:/bin/false

変更するためには起動したMySQLを一度停止する必要があります。


$ sudo service mysql stop
 * Stopping MySQL database server mysqld

停止後にmysqlユーザのディレクトリを変更します。


$ sudo usermod -d /var/lib/mysql/ mysql
mysqlの起動中にusermodコマンドを実行するとusermod: user mysql is currently used by process 1355のエラーが発生し実行することはできません。

変更後はエラーなしでmysqlが起動します。


$ sudo service mysql start
 * Starting MySQL database server mysqld  [ OK ]

Laravel用データベースの作成

データベースを作成するためには、MySQLにログインする必要があります。下記のコマンドで接続を行います。


$ sudo mysql -u root
sudoをつけていない場合は、ERROR 1698 (28000): Access denied for user ‘root’@’localhost’で接続できません。

MySQLへの接続後文字コードの確認を行います。下記のコマンドを実行するとcharacter_set_databaseとcharacter_set_serverの文字コードがlatin1になっているのでutf8へ変更します。


mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

変更は/etc/mysql/mysql.confの下にあるmysqld.cnfファイルで行います。ファイルを開いて一番再度に下記の設定を追加してください。


character-set-server=utf8

追加後はMySQLに変更を反映させるためmysqlのサービスの再起動を行います。


$ sudo service mysql restart
 * Stopping MySQL database server mysqld [ OK ]                                                                
 * Starting MySQL database server mysqld [ OK ]

mysqlのサービスを再起動後に再度MySQLに接続して、文字コードがutf8に変更されていることを確認します。


mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

接続後create databaseコマンドでLaravel用のデータベースを作成します。


mysql> create database laravel58;
Query OK, 1 row affected (0.01 sec)

データベースが作成されているか確認します。


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| laravel58          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

LaravelでMySQLに接続する際にport番号も必要になるので確認を行っておきます。port番号は3306だということがわかります。


mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.00 sec)

MySQLの準備は完了したのでLaravel側の設定に移ります。

Laravelの.envファイルを開きデータベース接続に関するパラメータを以下のように変更します。


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel58
DB_USERNAME=root
DB_PASSWORD=

.envファイルの更新が完了したら、Laravelのテーブルを作成するためにphp artisan migrateコマンドを実行します。


$ php artisan migrate

しかし、SQLSTATE[HY000] [1698] Access denied for user ‘root’@’localhost’のエラーが発生してテーブルを作成することができません。

これはMySQLに接続する際にsudoを使ってアクセスしなければならないことと同じ問題でアクセスすることができません。原因は、rootユーザの認証方式です。

MySQLに接続して、rootの認証方式を確認します。


mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)

rootのpluginを確認するとauto_socketになっています。MySQLにログインする際にLinuxのログインユーザの名前と一致するかチェックを行っているためMysqlのrootユーザにパスワードを設定していたとしても有効にならず接続することができません。sudoを使用せずにログインするためにこのpluginを変更する必要があります。

下記のコマンドでpluginとパスワードを設定します。パスワードは’’で引き続きブランクにしています。パスワードを設定したい場合はBYの後の”の中にパスワード文字列を入力してください。


mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

実行後pluginが変更されているか確認します。pluginがauth_socketからmysql_native_passwordに変更されていることが確認できます。


mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)

sudoをつけることなくmysqlコマンドでMySQLに接続できれば設定は反映されています。


$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

再度php artisan migrareコマンドを実行します。問題なくテーブルが作成されることを確認することができます。


$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.03 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.03 seconds)

npmのインストール

フロントエンドにvue.js等のJavaScriptを利用する場合はコンパイルが必要となるので、npm(node package manager)をインストールする必要があります。npmのインストールは下記のコマンドを実行します。


$ sudo apt install npm

インストールに失敗した場合は、apt-get updateを実行して再度npmのインストールを行ってください。


$ sudo apt-get update
 ・
 ・
$ sudo apt install npm

認証機能の追加(6.xの場合)

ログインの認証機能を使用するためには、laravel/uiパッケージをインストールする必要があります 。


$ composer require laravel/ui

次にphp artisan ui vue –authコマンドを実行するとログイン機能とvue.jsの設定も一緒にインストールされます。


 $ php artisan ui vue --auth
Vue scaffolding installed successfully.
Please run "npm install && npm run dev" to compile your fresh scaffolding.
Authentication scaffolding generated successfully.

認証機能とvueをインストールしたらnpmコマンドを利用してJavaScriptライブラリのインストールとコンパイルを実行します。


 $ npm install && npm run dev

実行後、ユーザの登録をブラウザ上から行うことができます。

認証機能の追加(5.8の場合)

ユーザの認証機能を追加するためにphp artisan authコマンドを実行します。実行後、ユーザの登録をブラウザ上から行うことができます。


$ php artisan make:auth
Authentication scaffolding generated successfully.

エクスプローラーでフォルダを開く

Laravelのインストールフォルダを開くためには、explorer.exeコマンドを実行します。インストールフォルダの中で下記のコマンドを実行するとエクスプローラーでフォルダの中身を確認することができます。


$ explorer.exe  .

WSLのパスも確認することができます。


\\wsl$\Ubuntu\home\ユーザ名