Laravel Homesteadを使用して環境構築〜Netbeansでデバッグまで(Windows)

公式がわかりにくいうえバージョンで手順が結構変わってしまっている。
Macは以下
https://trueman-developer.blogspot.com/2018/12/laravel-homesteadnetbeansmac.html




環境



Windows 10
VirtualBox 5.2.22
NetBeans 8.2
Larabel 5.5(LTS)
homestead v7.20.0

で確認。


手順は基本的に
https://readouble.com/laravel/5.5/ja/installation.html
に準拠する。



VirtualBox インストール



仮想環境。
バージョンによってはうまくいかないケースがあるらしい。
https://www.virtualbox.org/

VirtualBox インストール



Vagrant インストール



仮想マシン管理ツール。

https://www.vagrantup.com/

Vagrant  インストール


再起動が走るので注意。



NetBeans インストール



IDE。NetBeansでなくてもいい。

https://netbeans.org/downloads/index.html

NetBeans インストール




git インストール



バージョン管理システム。
https://git-scm.com/




Homestead Vagrant Boxt インストール



VirtualBox上にVagrantを使用してLarabelの環境を構築する。
Boxは仮想マシンのテンプレのことでLaravel用のテンプレを追加しているらしい。

コマンドプロンプトかPowershell、あるいはit Bashで以下のコマンド。
以降はすべてPowershell上で確認。

vagrant box add laravel/homestead

動作する環境。3) virtualbox を選択(WinProならhypervもあり)

1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

それなりに時間がかかる。
失敗する場合Vagrantのアップデート(再インストールしないといけない)


PS C:\Users\xxxx> vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
box: URL: https://vagrantcloud.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

Enter your choice: 3
==> box: Adding box 'laravel/homestead' (v6.4.0) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/6.4.0/providers/virtualbox.box
box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
box: Progress: 100% (Rate: 10.6M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'laravel/homestead' (v6.4.0) for 'virtualbox'!




Homestead をCloneしてくる



場所はどこでもいい。



cd F:\develop\project
git clone https://github.com/laravel/homestead.git Homestead


masterは安定していないとのことなので安定版をチェックアウト
https://github.com/laravel/homestead/releases
よりLatest release のバージョンを指定する。
普通にバグを踏み抜く(踏み抜いた)ので必ずやること。

cd Homestead
git checkout v7.20.0 -b v7.20.0

クローン&チェックアウトしたHomestead以下のinit.batを実行。ダブルクリックでもいい。
コードを見た感じresourcesフォルダからコピーしてくるくらいしかやっていない。

PS F:\develop\project\Homestead> .\init.bat
1 個のファイルをコピーしました。
1 個のファイルをコピーしました。
1 個のファイルをコピーしました。
Homestead initialized!

ここまでの流れ。

PS C:\Users\xxxx> cd F:\develop\project
PS F:\develop\project> git clone https://github.com/laravel/homestead.git Homestead
Cloning into 'Homestead'...
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 3199 (delta 10), reused 16 (delta 10), pack-reused 3179
Receiving objects: 100% (3199/3199), 683.47 KiB | 536.00 KiB/s, done.
Resolving deltas: 100% (1915/1915), done.
PS F:\develop\project> cd .\Homestead\
PS F:\develop\project\Homestead> git checkout v7.20.0 -b v7.20.0
Switched to a new branch 'v7.20.0'
PS F:\develop\project\Homestead> .\init.bat
1 個のファイルをコピーしました。
1 個のファイルをコピーしました。
1 個のファイルをコピーしました。
Homestead initialized!




Homestead.yaml



プロジェクトディレクトリ内にあるHomestead.yamlを一部書き換え。

ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

# authorize: ~/.ssh/id_rsa.pub
authorize: C:/Users/xxxx/.ssh/id_rsa.pub

keys:
# - ~/.ssh/id_rsa
- C:/Users/xxxx/.ssh/id_rsa

folders:
# - map: ~/code
- map: F:\develop\project\Laravel
to: /home/vagrant/code

sites:
- map: homestead.test
to: /home/vagrant/code/public

databases:
- homestead

ip: サーバへアクセスするときのURL。
authorize: 鍵
keys: 鍵
folders-map: vagrant上のソースと動悸するローカルディレクトリ、どこでもいい。
sites-map:ここで指定したURLでアクセスできるようになる。
sites-to: vagrant上の実行ソースの場所。

Windowsだと~/と記述している箇所はC:/Users/ユーザ名 になる。



鍵の作成




mkdir C:\Users\xxxx\.ssh
cd C:\Users\xxxx\.ssh
ssh-keygen -t rsa

PoweShellで確認。おそらくGit Bashなら作成可能。コマンドプロンプトは無理かも。
passphraseは入力してもしなくてもいい(入力する場合覚えておく)

PS F:\develop\project\Homestead> cd C:\Users\xxxx\.ssh
PS C:\Users\xxxx\.ssh> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\xxxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\xxxx/.ssh/id_rsa.
Your public key has been saved in C:\Users\xxxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wny+IXs/OqgO5SIZMW6QTt+YL3W++1yoS8ZqrVugM8c xxxx@MyComputer
The key's randomart image is:
+---[RSA 2048]----+
|                 |
| .               |
|=.               |
|=o. 0o           |
|.+ +-++.S        |
|↑↑↓↓←→←→b|
|a o=.0oBo. .     |
| . o=.qeroo      |
|   .+dummy..     |
+----[SHA256]-----+


仮想マシン(Vagrant)起動



Homesteadディレクトリでvagrant upコマンド。
恐らくVagrantfileファイルを参照している。
最初は環境構築のため時間がかかる。

PS C:\Users\xxxx\.ssh> cd F:\develop\project\Homestead\
PS F:\develop\project\Homestead> vagrant up

FireWallの警告などが出てきたらOKを選択。

VirtualBoxを起動したときに仮想環境が作成され実行中になっていれば成功。

うまくいかない場合設定を見直して再起動する。
vagrant reload

それでもうまくいかない場合削除して再作成する。

vagrant destroy --force
vagrant up



仮想マシン上にプロジェクト作成



sshを利用して仮想マシンへ接続。
Homesteadディレクトリでvagrant sshコマンド。

vagrant ssh

起動時のディレクトリは/home/vagrantになる。
プロジェクト作成。

composer create-project laravel/laravel code --prefer-dist

codeが作成されるプロジェクトディレクトリ。
HomeStead.yamlのfolders:- to:xxxxで指定した値にする。


プロジェクト作成後HomeStead.yamlのfolders:- map: xxxx で指定したディレクトリとファイルが同期されるようになる。

http://192.168.10.10/
または、
http://homestead.test
へアクセス。

画面が表示されたら実行環境作成完了。



NetBeansでリモートデバック



netbeansを起動。
ファイル → プロジェクトを開く。
同期しているプロジェクトでディレクトリを開く。
ドラッグアンドドロップでも可能。

F:\develop\project\Laravel

ルートディレクトリを右クリック → プロパティ → 実行構成 → プロジェクトURL
HomeStead.yamlで指定したip http://192.168.10.10/ に変更。

NetBeans 実行構成

詳細を開き

Webブラウザを開かない、にチェック

パスマッピングの
サーバーパスには、HomeStead.yamlのfolders:- to:xxxxを
プロジェクトパスには、 HomeStead.yamlのfolders:- map:xxxxを
を指定する。

ホストはHomestead.yamlで設定したIPを、
ポート番号は能動的に変えていなければ9000。
恐らくVM上のXDebugの設定になる。



ブレークポイントで止まることを確認する。

デフォルトでは常に一行目で止まるようになっているので止まらないようにしたい場合
ツール → オプション → PHP → 最初の行で停止のチェックを外す。


うまくいかない場合routes/web.php に以下を追記して/info にアクセスすると情報が確認できるようになる。
XDebugなどの項目を確認する。

Route::get('/info', function () {
phpinfo();
});


なお現状ではローカル変数の値のみ見れない現象を確認している。
原因は調べきれなかった。

Route::get("/hello", function () {
    $this->var = 'テst'; // 見れる
    $test = 5; // 見れない
    $a = new SimpleClass(); // 見れる
    print("

Hello World!

" . $this->var); return null; });


参考



https://readouble.com/laravel/5.5/ja/installation.html
https://qiita.com/tosite0345/items/74982ec5414178bf6ef0
https://qiita.com/ricoirico/items/9745160bcf9983fa30ad
https://qiita.com/tosite0345/items/74982ec5414178bf6ef0

Vagrantコマンド
https://qiita.com/oreo3@github/items/4054a4120ccc249676d9

2018年12月15日土曜日