WSL に Laravel の開発環境を構築する (docker は使わない方針)
WSL に Laravel の開発環境を構築します!
ゴールは WSL で php artisan serve
を実行するとページが見えるようになるところまでです!
次の流れで開発環境を構築します。
- WSL をインストール
- WSL にプロジェクト用の環境を作成
- ansible をインストール
- 開発環境構築用の ansible の playbook を作成
- ansible を実行して開発環境を構築
- mysql をインストール
- mysql にプロジェクト用のデータベースを作成
- ソースファイルを展開
- php のライブラリをインストール
- node のライブラリをインストール
- .env を作成
- 動作確認
- ユニットテスト動作確認
開発環境の構成図は次の通りです。
技術スタックは、現在の仕事の環境にあわせて下記とします。
- php 7.3
- mysql 5.7
- nodejs 16系
WSL のインストール
ref. WSL のインストール
作業は2つ。
- 管理者権限で PowerShell を起動
-
wsl --install
を実行
インストールされる Linux ディストリビューションは Ubuntu です。
別のディストリビューションを入れたい場合は ref のサイトを参照。
インストールが無事に終了すると、スタートメニューから Ubuntu を起動できるようになります。
WSL にプロジェクト用の環境を作成
ref. WSL で使用する Linux ディストリビューションをインポートする
ref. WSL(2)でOSを手動で無限に追加(インポート)する方法
ref. Installing Ubuntu on WSL via rootfs
WSL は別環境の作成が可能です。
つまり docker のように環境の使い捨てが可能です。
イメージとしては下記のとおり。
このため、下記のような場合は別に環境を作成して環境がゴチャゴチャしないようにしましょう。
- 別案件のプロジェクトに入り環境が必要となった
- いろいろいじった結果、開発環境がおかしくなった
手順
wsl 用 ubuntu の圧縮ファイルを https://cloud-images.ubuntu.com/focal/current/ からダウンロードします。
対象は focal-server-cloudimg-amd64-wsl.rootfs.tar.gz
とかです。(とか、と書いたのは arm 版もあったので)
次にインストール先のフォルダパスを決めます。
デフォルトでは C:\Users\username\AppData\Local\Packages\
にインストールされるようです。
自分の環境では C:\Users\username\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
となっていました。
とくに思い入れがなければ C:\Users\username\AppData\Local\Packages\ubuntuXX.XX.PjName
などで良いのではないでしょうか。
(自分はCドライブの空きが少なかったのでDドライブに入れたりしました)
# windows の powershell による操作です
wsl --import <Distro> <InstallLocation> <FileName>
# <Distro> : 識別名と考えてください。 ubuntu-XX.XX-PjName などで良いのではないでしょうか
# <InstallLocation> : インストール先フォルダパス
# <FileName> : ダウンロードした圧縮ファイルのパス
問題なく import が環境すれば、下記のコマンドで作成した環境を起動できます。
wsl -d <指定した Distro>
(任意) 作成した環境を wsl におけるデフォルト環境とします。
この設定をすると power shell の wsl
を実行するだけで対象の環境を起動できます。
wsl --set-default <Distribution Name>
以降の作業は基本的に wsl 環境内での作業になります。
また、本方法では root ユーザーでの作業になりますので sudo
などは省略します。
ansible をインストール
今回は ansible で環境を設定しようと思いますので asnible をインストールします。
ansible を使わない場合はもろもろよしなにインストールしてください。
apt-get update && apt-get install -y software-properties-common
# 下記のコマンドを実行すると enter ボタンの入力待機待ちとなる点に注意
apt-add-repository ppa:ansible/ansible
apt-get update && apt-get install -y ansible
次のコマンドで疎通を確認します。
ansible localhost -m ping
開発環境構築用の ansible の playbook を作成
ansible の playbook を作成します。
何をインストールするかは中身をご確認ください。
playbook.yml
---
- hosts: localhost
tasks:
- name: install required packages
apt:
name:
- gcc
- make
state: present
- name: install php block
block:
# ref. https://www.php.net/manual/ja/migration73.php
- name: add repository
apt_repository:
repo: "ppa:ondrej/php"
- name: install php and php packages
apt:
name:
- php7.3
- php7.3-cli
- php7.3-bz2
- php7.3-gd
- php7.3-mbstring
- php7.3-mcrypt
- php7.3-mysql
- php7.3-xml
- php7.3-curl
state: present
- name: Correct php version selected
alternatives:
name: php
path: /usr/bin/php7.3
- name: install composer
get_url:
url: https://getcomposer.org/download/latest-1.x/composer.phar
dest: /usr/local/bin/composer
mode: '+x'
# End install php block
# Note: ubuntu2004 に mysql5.7 を自動インストールできなかったため手動インストールとする
#
# - name: install mysql block
# block:
# # ref. https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/#repo-qg-apt-repo-manual-setup
# - name: Add key
# apt_key:
# keyserver: pgp.mit.edu
# id: 5072E1F5
# - name: add repository
# apt_repository:
# repo: "deb http://repo.mysql.com/apt/ubuntu/ focal mysql-5.7"
# filename: mysql
# state: present
# update_cache: yes
# - name: install mysql
# apt:
# name: mysql-server-5.7
# state: present
# notify:
# - enable and start mysql
# # End install mysql block
- name: install nodejs block
block:
- name: Add the NodeSource package signing key.
apt_key:
url: https://deb.nodesource.com/gpgkey/nodesource.gpg.key
state: present
- name: Add the desired NodeSource repository.
apt_repository:
repo: "deb https://deb.nodesource.com/node_16.x {{ ansible_lsb.codename }} main"
filename: nodesource
state: present
update_cache: yes
- name: Add the desired NodeSource repository(src).
apt_repository:
repo: "deb-src https://deb.nodesource.com/node_16.x {{ ansible_lsb.codename }} main"
filename: nodesource
state: present
update_cache: yes
- name: Install Node.js
apt:
name: nodejs
state: present
# End install nodejs block
# handlers:
# - name: enable and start mysql
# service:
# name: "mysql.service"
# state: started
# enabled: yes
ansible を実行して開発環境を設定
ansible-playbook を実行して環境を設定します。
ansible-playbook -i localhost playbook.yml
php, composer, nodejs のバージョンを確認します。
php --version # => 7.3
composer -v # => 1系
node --version # => 16系
mysql をインストール
ref. How to Install MySQL 5.7 on Ubuntu 20.04
ref. A Quick Guide to Using the MySQL APT Repository
mysql をインストールするための準備をします。
# 都合により最新バージョンは使わない
MYSQL_APT_CONFIG=0.8.12-1
wget https://dev.mysql.com/get/mysql-apt-config_${MYSQL_APT_CONFIG}_all.deb
dpkg -i mysql-apt-config_${MYSQL_APT_CONFIG}_all.deb
dpkg -i mysql-apt-config_${MYSQL_APT_CONFIG}_all.deb
を実行すると TUI(テキストユーザインタフェース) が表示されるため次の通り設定します。
設定項目 | 選択 |
---|---|
Add repository to unsupported system? | Ubuntu Bionic |
MySQL Server & Cluster | mysql-5.7 |
mysql をインストールします。
途中で mysql の root ユーザーのパスワードを要求されるので、よしなに設定します。
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
apt update
apt install -y -f mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7*
ansible を使って起動します。
ansible localhost -m sysvinit -a "name=mysql state=started"
mysql のバージョンを確認します。
mysql -u root -p
で mysql に接続します。
SELECT VERSION(); -- => 5.7系
mysql にプロジェクト用のデータベースを作成
root ユーザーで作業してもよいのですが、プロジェクト用にデータベースを作成します。
データベース名、ユーザー名、パスワードなどはよしなに書き換えてください。
mysql -u root -p
で mysql に接続します。
-- プロジェクト用のデータベースを作成
CREATE DATABASE PjName_db;
-- 確認
SHOW DATABASES;
-- プロジェクト用のアクセスユーザーを作成
CREATE USER 'username'@'%' IDENTIFIED BY 'p@ssw0rd';
-- 確認
SELECT user, host FROM mysql.user;
-- プロジェクト用のアクセスユーザーに、プロジェクト用のデータベースに対する全権限を付与
GRANT ALL ON PjName_db.* TO username;
-- 確認
SHOW GRANTS FOR 'username'@'%';
一旦 mysql から抜けて、作成したユーザーでアクセスできることを確認。
mysql -u <username> -p <PjName_db>
ソースファイルを展開
適当なディレクトリにソースファイルを展開します。
よさげなソースファイルをお持ちでないようであれば自分のリポジトリをご使用ください。
自分は /root/workspaces/PjName/
といった感じで展開しました。
php のライブラリをインストール
composer.json
があるディレクトリで次のコマンドを実行。
composer install
node のライブラリをインストール
package.json
があるディレクトリで次のコマンドを実行。
npm install
.env を作成
大抵のリポジトリには .env.example
があると思いますので、これをコピーして .env
を作りましょう。
ひとまずとして下記を設定します。
設定項目 | 選択 |
---|---|
データベースの接続情報 | 先ほど作成したデータベースにあわせる |
MAIL_MAILER | log(外部サービスを使うのであればよしなに書き換え) |
次のコマンドを実行して APP_KEY
を設定します。
php artisan key:generate
ユニットテスト用に、作成した .env
をコピーして .env.testing
を作成します。
.env.testing
のデータベース接続情報を、ユニットテスト用のものに書き換えましょう。
動作確認
開発用サーバーを起動してアクセスできることを確認しましょう。
php artisan serve
ユニットテスト動作確認
ユニットテストを実行できることを確認しましょう。
vendor/bin/phpunit
以上です!お疲れさまでした!
延長戦
vscode
windows 側に vscode がインストールされていれば code
コマンドで vscode が起動します!
ただし、拡張機能は windows から引き継がれないため別途インストールが必要です。
とはいえ、コマンド一つで引き継がれますので手間ではないです!
windows 側からのエクスプローラによるアクセス
ref. WSL2 + VSCode + Docker 開発環境
windows のエクスプローラーのパスに \\wsl$
と入力してアクセスすると、アクセス可能な wsl の環境が表示されます。
そのまま対象のフォルダに進んでいけば、あとは windows で操作するようにファイル操作が可能です。
Discussion