【Linux】WSL2 Ubuntu20.04でlaravel7の環境構築をする

## 開発環境
・ホストOS: windows10 Home Insider Preview 
・ゲストOS: wsl2 Ubuntu20.04

## 今回構築する環境
・php7.4.7
・Composer version 1.10.7
・Laravel Framework 7.16.1

## 手順
① php7.4をインストールする
② laravelのインストールに必要なphpの拡張機能をインストールする
③ composerをインストールする
④ laravelをインストールする＆プロジェクトを作る


### ① php7.4をインストールする

以下のコマンドを実行します。

 1: パッケージのアップデートを確認

```
$ sudo apt update 
```

 2: software-properties-commonパッケージをインストールする。

```
$ sudo apt install software-properties-common
```

3.でリポジトリを追加したいのですが、デフォルトではリポジトリを追加するためのコマンドがインストールされていません。ここでインストールしたパッケージはリポジトリを追加するためのものです。


 3: リポジトリを追加する

```
$ sudo add-apt-repository ppa:ondrej/php
```

 4: 再度パッケージをアップデートする。(①同じ手順です)

 5: PHPをインストールする

```
$ sudo apt install php7.4
```

バージョン確認をして以下のように表示されればきちんとインストールできています。

```
$ php -v

PHP 7.4.7 (cli) (built: Jun 12 2020 07:44:38) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies
```

一応phpのインストール場所も確認しておきます。

```
$ which php
/usr/bin/php
```

### ② laravelのインストールに必要なphpの拡張機能をインストールする

[laravelの公式webサイト](https://laravel.com/docs/7.x) によるとlaravelを使うためには以下のモジュール（拡張機能を提供するパッケージ）が必要になります。

BCMath PHP Extension
Ctype PHP Extension
Fileinfo PHP extension
JSON PHP Extension
Mbstring PHP Extension
OpenSSL PHP Extension
PDO PHP Extension
Tokenizer PHP Extension
XML PHP Extension

インストールされているモジュールは以下のコマンドで確認することができます。

```
php -m
```



初期状態では BCMath, Mbstring, XMLがインストールされていません。また、Composerでlaravelのインストーラーコマンドを実行する際にzipが必要になるので、これらと合わせて以下のコマンドでインストールします。

```
sudo apt install php7.4-bcmath php7.4-mbstring php7.4-xml php7.4-zip
```

**パッケージ名の最初に「php(インストールしたphpのバージョン)- 」とつけていないと、エラーの原因となります。忘れがちなので要注意です。**


再度 php -mを実行してモジュールが正常にインストールされているかを確認します。

```
[PHP Modules]
bcmath
ctype
fileinfo
json
mbstring
openssl
PDO
tokenizer
xml
zip

[Zend Modules]
Zend OPcache
```

(他にもモジュールが表示されますが、今回は省略しています。)


### ③ Composerをインストールする

[Composer公式サイトのダウンロード用ページ](https://getcomposer.org/download/)記載のコマンドをコピペして実行します。

```
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { 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がインストールされますがパスの通るディレクトリに移します。 

```
sudo mv  composer.phar /usr/local/bin/composer
```

Linuxコマンドに馴染みのない方にご説明しますと、上記のコマンドで1:composer.pharの保存場所をカレントディレクトリ(現在いるディレクトリ)から$HOME/usr/local/bin/composerに変更 2: composer.pharをcomposerにファイル名を変更 しています。

Composerのバージョン確認をしておきます。

```
composer -v

Composer version 1.10.7 2020-06-03 10:03:56
```


### ④ laravelをインストールする＆ プロジェクトを作る

[Composerを使ってlaravelのインストーラーをダウンロードします。](https://laravel.com/docs/7.x) 

```
composer global require "laravel/installer"
```

ダウンロードが終わり次第、.bashrcに下記の一行を追加してComposerのvendor/binディレクトリにパスを通します。

```bash:.bashrc
export PATH="$PATH:$HOME/.config/composer/vendor/bin"
```

パスを通せたらプロジェクト用のディレクトリに移り、laravel newコマンドを実行してlaravelプロジェクトを作成します。

```
mkdir laravel_sample
cd laravel_sample
laravel new sample_app
.
.
.
.
.
Package manifest generated successfully.
Application ready! Build something amazing.
```

諸々のメッセージが表示されますが、最後の2行にこのメッセージが表示されていれば問題ありません。

最後にlaravelの初期ページを表示できるか確認します。
laravelではphp artisanコマンドで各種操作を行います。

Ruby on Railsではrailsコマンドで操作を行いますが、それと同じ感覚でlaravelコマンドを実行しないように注意したいところです。

```
cd sample_app
php artisan serve
```

localhost:8000にアクセスすると…

![スクリーンショット (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598747/6fa4ce20-d5c5-22a7-8d61-cb8f975218f3.png)

正常に表示されました。



※php artisanコマンドを実行しようとすると **Could not open input file: artisan**
というエラーが表示されることがありますが、大抵の場合、laravelプロジェクトを作成したディレクトリに移動していないことが原因です。当該エラーが発生する場合、カレントディレクトリを確認してみるとよいと思います。(私は新しい言語の環境構築をする際に、そちらに気を取られてファイルパスの書き間違えやディレクトリの移動忘れなど、初歩的なミスをしがちです。)


## 参考資料

[Laravel - The PHP Framework For Web Artisans](https://laravel.com/)
[Composer](https://getcomposer.org/download/)
[インストール 7.x Laravel](https://readouble.com/laravel/7.x/ja/installation.html)