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

Macバージョン。Windowsは以下
https://trueman-developer.blogspot.com/2018/12/laravel-homesteadnetbeanswindows.html





環境



Mac Sierra
VirtualBox 5.2.22
NetBeans 8.2
Larabel 5.5(LTS)
homestead v7.20.0

で確認。


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

大体Windowsと似たようなものになるがパス周りなどが微妙に違う。



VirtualBox インストール



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



Vagrant インストール



仮想マシン管理ツール。

https://www.vagrantup.com/



NetBeans インストール



IDE。NetBeansでなくてもいい。

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



git インストール



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




Homestead Vagrant Boxt インストール



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

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

vagrant box add laravel/homestead

動作する環境。3) virtualbox を選択

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

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




Homestead をCloneしてくる



場所はどこでもいいはず。
今回はホームディレクトリにクローンしている。



cd ~
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.shを実行。
コードを見た感じresourcesフォルダからコピーしてくるくらいしかやっていない。

cd Homestead/
bash init.sh
1 個のファイルをコピーしました。
1 個のファイルをコピーしました。
1 個のファイルをコピーしました。
Homestead initialized!

Homestead initialized!
と表示されたらOK.

ここまで大体以下のように表示されるはず


MacBook-Pro:~ xxxx$ vagrant box add laravel/homestead
/opt/vagrant/embedded/gems/2.2.2/gems/vagrant-2.2.2/lib/vagrant/util/which.rb:37: warning: Insecure world writable dir /usr/local/git/bin in PATH, mode 040777
==> 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: Successfully added box 'laravel/homestead' (v6.4.0) for 'virtualbox'!
MacBook-Pro:~ xxxx$
MacBook-Pro:~ xxxx$ cd ~
MacBook-Pro:~ xxxx$ git clone https://github.com/laravel/homestead.git Homestead
Cloning into 'Homestead'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 3176 (delta 3), reused 3 (delta 1), pack-reused 3165
Receiving objects: 100% (3176/3176), 678.88 KiB | 1.52 MiB/s, done.
Resolving deltas: 100% (1896/1896), done.
MacBook-Pro:~ xxxx$
MacBook-Pro:~ xxxx$ bash init.sh
bash: init.sh: No such file or directory
MacBook-Pro:~ xxxx$ cd Homestead/
MacBook-Pro:Homestead xxxx$ git checkout v7.19.2 -b v7.19.2
Switched to a new branch 'v7.19.2'
MacBook-Pro:Homestead xxxx$ bash init.sh
Homestead initialized!




Homestead.yamlを編集



クローンしてきたディレクトリ直下のHomestead.yaml を編集する。

プロバイダーの設定

providerに virtualbox を指定する。
デフォルトでvirtualboxなので指定の必要はない。

共有フォルダの設定
mapがローカルのディレクトリ
toがVagrant上のディレクトリ

map /Users/xxxx/Project/yyyy
のように指定する。ディレクトリは事前に作成しておく。

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

authorize: ~/.ssh/id_rsa.pub

keys:
- ~/.ssh/id_rsa

folders:
- map: /Users/xxxx/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上の実行ソースの場所。




Nginxサイトの設定



hostsファイルを書き換える。
ローカルドメインのアクセスをHomesteadへ転送するように書き換える。

192.168.10.10 homestead.test

ipを書き換えた場合/etc/hostsも書き換え

homestead.testはNginxサイトの設定のmapで指定した値


鍵の作成





ssh-keygen コマンド
エンター1回
任意のパスワード、パスワード確認入力(入力しなくてもいい、入力した場合覚えておく)

MacBook-Pro:Homestead shinichiyamada$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/shinichiyamada/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/shinichiyamada/.ssh/id_rsa.
Your public key has been saved in /Users/shinichiyamada/.ssh/id_rsa.pub.
The key fingerprint is:

~/.ssh に鍵が生成される。



仮想マシン(Vagrant)起動



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

cd ~/Homestead
vagrant up


VirtualBoxを起動したときに仮想環境が作成され実行中になっていれば成功。
メモリが不足していると完全にフリーズするので注意。

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

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

vagrant destroy --force
vagrant up



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



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

vagrant ssh

接続できない場合pingが通っているか調べる。

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

conposerが最新のバージョンか確認、最新じゃなかったらアップデートをかける
sudo composer self-update


プロジェクト作成

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

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


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


プロジェクトが作成されているか確認
vagrant@homestead:~$ ls
code

パスがあっているか確認
vagrant@homestead:~$ pwd
/home/vagrant

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

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



NetBeansでリモートデバック



netbeansを起動。
ファイル → プロジェクトを開く。
同期しているプロジェクトでディレクトリを開く(/Users/xxxx/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の設定になる。



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

デフォルトでは常に一行目で止まるようになっているので止まらないようにしたい場合
NetBeans → 設定 → 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月16日日曜日