Laravel11を使うためにWLS2のPHPのバージョンを8.2に上げる方法

ローカル環境でLaravelを構築しようとしたときに、PHPのバージョンが低く、Laravel8系が入ってしまった。
使いたいのはLaravel11系なのでそれに合わせてPHP8.2を入れる備忘録になります。

※備忘録なので細かいかもしれません
※間違いがあったらコメント頂けると助かります

## 環境と目的
- WSL2(ubuntu)
- PHP7系からPHP8系に上げる

## 経緯: composer create-projectをしてみたら・・・
ローカル環境で
```
composer create-project laravel/laravel hoge-app
```
としてLaravelを構築しようとしたときに、
> Cannot use laravel/laravel's latest version v11.1.4 as it requires php ^8.2 which is not satisfied by your platform.

というメッセージが表示され、
```
Installing laravel/laravel (v8.6.12)
  - Downloading laravel/laravel (v8.6.12)
  - Installing laravel/laravel (v8.6.12): Extracting archiv
```
というログが出ていた・・・
PHPのバージョンが低い(PHP8.2以上じゃない)から11系は使えないよ！Laravel８系入れるね！
という事だと考えられるので、今回はPHPのバージョンを上げてみる。

## PHPのバージョンを上げる
まずは自分の環境で使っているPHPのバージョンを把握するために`php -v`を実行する
```
php -v
PHP 7.4.33 (cli) (built: Jun  8 2023 15:23:32) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologie
```
となり、現在は`PHP 7.4.33`が有効になっているのがわかる。

今回は、状況によってはPHP7.4系で確認しなければならないこともあるかもしれないので、古いバージョンを消さずに新たにPHP8系を入れていこうと思う。

### リポジトリの追加
PHPを追加するにはリポジトリを登録します。リポジトリを追加することによって様々なバージョンのPHPを使う事ができます。
まずは、
1. パッケージを最新の状態にする
2. リポジトリを追加するための準備をする
3. リポジトリを追加という作業をする
4. 再度パッケージを最新の状態にする

という流れで作業を行います。

全体の使用するコマンドは次の通りです。
```
sudo apt update
sudo apt install software-properties-common
sudo add-repository ppa:ondrej/php
sudo apt update
```
※`software-properties-common`は、`add-repository`を利用するためにインストールします。

### PHP8.2のインストール
次に、`PHP8.2`をインストールします。
```
sudo apt install php8.2
```
今回はLaravelを動かす必要があるので、追加で必要になる拡張機能も一緒にインストールします！
```
sudo apt install php8.2-bcmath php8.2-ctype php8.2-curl php8.2-dom php8.2-fileinfo php8.2-gd php8.2-mbstring php8.2-mysql php8.2-pdo php8.2-xml php8.2-tokenizer php8.2-common php8.2-fpm php8.2-cli
```
インストール時に、下記のような画面が出るかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297279/697b740d-7844-cc13-eb68-5906da62186f.png)
これは`php.ini`を書き換えるけどどうする！？という確認です。
`php.ini`を変えている人はここで上書きしてしまうと前設定が消えてしまうので注意が必要です！

ちなみに選択肢は次のような感じ。
```
install the package maintainer's version: パッケージメンテナの新しいバージョンをインストール。既存の変更は上書き
keep the local version currently installed: 現在インストールされているバージョンを保持
show the differences between the versions: 2つのバージョンの違いを表示
show a side-by-side difference between the versions: 横並びにして2つのバージョンの違いを表示
start a new shell to examine the situation: 新しいシェルを起動して状況を確認
```

基本的には、新しいバージョンに合わせたものに置き換えても問題ないと思うので、今回は
- install the package maintainer's version(パッケージメンテナーの新しいバージョンをインストールする)
を選択しました！

### PHP8.2に切り替え
今回はPHP7系を残しているので、PHP7系からPHP8系に使うバージョンの設定を切り替える作業が必要です。
次のコマンドで指定のPHPを使う事ができます。
```
sudo update-alternatives --set php /usr/bin/php8.2
```
この`update-alternatives`というコマンドでインストールされている複数のバージョンから設定をするのですが、どんなバージョンがインストールされているかわからない場合や忘れてしまった時には次のコマンドでバージョンを確認して選択することができます。
```
sudo update-alternatives --config php
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297279/124aab93-f7af-c722-9c75-d4846aca1f1a.png)
このコマンドで現在インストールされているPHPのバージョン一覧が表示されるので、`Selection`に表示されている番号を指定してあげて切り替えることができます。

最後に`php -v`をして、指定したPHPのバージョンが表示されたら作業は完了です！
```
PHP 8.2.22 (cli) (built: Aug  2 2024 15:36:02) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.22, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.22, Copyright (c), by Zend Technologies
```

## 終わりに
PHPの古いバージョンのサポート終了に伴い、サーバーのPHPもどんどん上がっていくので、今後もこの作業は出てきそう！
皆さんも是非最新のPHPを使いましょう！
お疲れ様でした！！