UbuntuでLaravelの開発環境作成

# 概要
UbuntuでLaravelの開発環境を構築します。
ここではブラウザでhttp://127.0.0.1:8000 へアクセスし、Laravelのwelcomeページが表示されればゴールとします。

## Ubuntuのインストール
MicrosoftstoreでUbuntuと検索。
![スクリーンショット 2024-12-06 124204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/4b504e6e-4206-5224-7f74-ed241cc57b1e.png)

LTSはサポートが長いためここでは
「Ubuntu 24.04.1 LTS」をインストールします。

## Ubuntuの起動
スタートメニューなどからUbuntuを起動します。
![スクリーンショット 2024-12-06 124717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/19e11dce-bd3b-2a81-bfdc-853a61ca48b7.png)

起動後、Ubuntu上で使うログイン名ユーザーネームとパスワードの設定があります。
それぞれ任意のものを入力。

完了後、ディストリビューションの情報を確認。

```.txt:Ubuntuターミナルでのコマンド
lsb_release -a
```

![スクリーンショット 2024-12-06 125125.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/01b1486c-8b0b-ffc0-cac9-ab53bd592ce2.png)

### （お好みで）日本語化

```.txt:Ubuntuターミナルでのコマンド
sudo apt install language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8
```

dateコマンドで日本語化されていればOKです。

```.txt:Ubuntuターミナルでのコマンド
date
```

![スクリーンショット 2024-12-06 125920.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/aab89090-16fa-25e0-e069-f66b8084a9f4.png)

## PHPインストール

```.txt:Ubuntuターミナルでのコマンド
sudo apt-get update
sudo apt install -y php
```

バージョンが確認できればインストールOKです。

```.txt:Ubuntuターミナルでのコマンド
php -v
```

![スクリーンショット 2024-12-06 175210.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/af05b3d6-2157-a475-dc13-20e72125fa46.png)

## PHP拡張機能のインストール

Laravelインストールに必要なPHP拡張機能のインストールをします。

```.txt:Ubuntuターミナルでのコマンド
sudo apt install php8.3-bcmath php8.3-mbstring php8.3-xml zip
```

インストール後はこちらで確認できます。

```.txt:Ubuntuターミナルでのコマンド
php -m
```
（長いので画像略）

## MySQLインストール

```.txt:Ubuntuターミナルでのコマンド
sudo apt install -y mysql-server
```

バージョンが確認できればインストールOKです。

```.txt:Ubuntuターミナルでのコマンド
mysql --version
```
![スクリーンショット 2024-12-06 175837.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/799fcd9b-3a18-6edf-1e39-cd9d04abe687.png)

ステータスを確認します。

```.txt:Ubuntuターミナルでのコマンド
sudo service mysql status
```

![スクリーンショット 2024-12-06 175736.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/35d75b69-530c-46c1-ee6a-7b113113c580.png)

止まってましたら、起動させます。再度ステータスを確認して起動していることを確認。

```.txt:Ubuntuターミナルでのコマンド
sudo service mysql start
sudo service mysql status
```

![スクリーンショット 2024-12-06 180046.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/1345e741-b9d7-a344-39d0-8e2ffd02476f.png)

## Composerのインストール

[Composerのダウンロードページ](https://getcomposer.org/download/) からコマンドをコピーして実行。

```.txt:Ubuntuターミナルでのコマンド
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

ダウンロードしたphpアーカイブファイルを移動させ、コマンド実行できるようにします。

```.txt:Ubuntuターミナルでのコマンド
sudo mv  composer.phar /usr/local/bin/composer
```

以下のコマンドでバージョンが表示されればOK。

```.txt:Ubuntuターミナルでのコマンド
composer -V
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/7494f4c7-0c4f-a5de-94d5-4c04938fb766.png)

## Laravelのインストール

composerコマンドでインストール。

```.txt:Ubuntuターミナルでのコマンド
composer create-project --prefer-dist laravel/laravel
```

laravelディレクトリが作成される。
ディレクトリを移動してartisanコマンドでバージョン確認できればOK。

```.txt:Ubuntuターミナルでのコマンド
cd laravel
php artisan -V
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/df72ca60-64e4-df01-d54f-d457c73f785f.png)

## ブラウザで確認

Laravel上の開発サーバを起動。

```.txt:Ubuntuターミナルでのコマンド
php artisan serve
```

http://127.0.0.1:8000
へアクセスしてみます。

![screencapture-127-0-0-1-8000-2024-12-04-18_36_59_new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/9fc645ca-c0a5-e4ff-7e2d-7b35df8d28b9.png)

エラー出てますがブラウザからLaravelへはアクセスできてそう。

### could not find driverの解消

エクスプローラーで以下にアクセスします。

```.txt:エクスプローラーのパス
\\wsl.localhost\[Ubuntuディストリビューション名]\home\[ユーザー名]\laravel

(例)
\\wsl.localhost\Ubuntu-24.04\home\shioharu\laravel
```

![スクリーンショット 2024-12-06 183626.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/c2ca5885-16b3-593a-3cf2-040492200e93.png)

.envファイルのDB_CONNECTION=sqliteをmysqlへ修正します。

```.env
DB_CONNECTION=mysql
```

再度開発サーバ起動

```.txt:Ubuntuターミナルでのコマンド
php artisan serve
```

http://127.0.0.1:8000
へアクセスしてみます。

![screencapture-127-0-0-1-8000-2024-12-04-18_54_40_new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/35054346-62e3-2dd5-f4b5-820fdd8e37a9.png)

エラーが変わりました。

### Access denied for userの解消

mysqlにログインします。

```.txt:Ubuntuターミナルでのコマンド
sudo mysql -u root
```

認証を確認します。

```.txt:Ubuntuターミナル(mysql)でのSQL
SELECT user, host, plugin FROM mysql.user;
```


```.txt:実行結果
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+
```

rootがauth_socket なので、そこを変更します。

```.txt:Ubuntuターミナル(mysql)でのSQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '任意のパスワード';
FLUSH PRIVILEGES;
```

変更後、再度認証を確認

```.txt:Ubuntuターミナル(mysql)でのSQL
SELECT user, host, plugin FROM mysql.user;
```

```.txt:実行結果
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
```

確認後、mysqlを離脱

```.txt:Ubuntuターミナル(mysql)でのSQL
exit
```

念のためMySQL再起動

```.txt:Ubuntuターミナルでのコマンド
sudo service mysql restart
```

再度開発サーバ起動

```.txt:Ubuntuターミナルでのコマンド
php artisan serve
```

http://127.0.0.1:8000
へアクセスしてみます。

![スクリーンショット 2024-12-06 190827.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/d4059bc7-2c26-6692-97e5-268d74494351.png)

またエラーが変わりました。

### Unknown databaseの解消

mysqlにログインします。

```.txt:Ubuntuターミナルでのコマンド
mysql -u root -p
```

laravelのdatabaseを作成します。
(.envのDB_DATABASE=に記載されるdatabese名なので任意の名前でもOKです）

```.txt:Ubuntuターミナル(mysql)でのSQL
create database laravel;
```

エクスプローラーで以下にアクセスします。

```.txt:エクスプローラーのパス
\\wsl.localhost\[Ubuntuディストリビューション名]\home\[ユーザー名]\laravel

(例)
\\wsl.localhost\Ubuntu-24.04\home\shioharu\laravel
```

.envファイルの以下の部分を修正します。

```.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=[rootユーザーに設定したパスワード]
```

migrationを実行します。

```.txt:Ubuntuターミナルでのコマンド
php artisan migrate
```


再度開発サーバ起動

```.txt:Ubuntuターミナルでのコマンド
php artisan serve
```

http://127.0.0.1:8000
へアクセスしてみます。

![screencapture-127-0-0-1-8000-2024-12-04-19_14_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290284/00186867-2cac-ea4e-49d0-e3d84bae3cf8.png)

無事表示できました！

## 所感

慣れの問題な気もしますが、dockerのほうがインストール回り楽かも…