Home > アーカイブ > 2013-08

2013-08

いまどきのPHPが分かる「PHPエンジニア養成読本」が出ます

この記事の所要時間: 142

PHPengineer_hyoshi

2013/9/13に「PHPエンジニア養成読本」というムック本が技術評論社から出ます。

この本の巻頭記事を執筆させて頂きました。巻頭記事では本書のイントロダクションとして、PHP5.3/5.4/5.5の新機能と「いまどき」のPHP開発を紹介する2章構成になっています。

PHPを取り巻く環境は大きく変わっていっています。普段からそういった変化を追いかけている人は良いのですが、日常の開発に没頭しているとついそういった動きに気づかないままということがあります。また、昔のPHPのままのイメージで止まっている人も多いかもしれません。

そこで、PHP が大きく変化した 5.3(名前空間、クロージャ、LSB)から、5.4(トレイト、配列の短縮構文、ビルトインサーバ)、最新の 5.5(ジェネレータ、finally、パスワードハッシュ関数)を第1章で紹介しています。

第2章では「いまどきのPHP開発」ということで、環境構築やフレームワークの活用、Xdebug、OPcache、PSRなど、PHP開発の現場で活用している技術や方法を書いています。

この記事をベースに、以降の各特集記事に進んでいきます。

各特集記事についてもここでご紹介したいのですが、それぞれの著者の方がblogを書かれると思うので、キーワードだけ。

Composer、フレームワーク、PHPUnit、PhpStorm、Vim、コード品質、クラウド、基礎知識といったところです。内容が気になりますね:D

ムック本なので、この一冊で全てが分かるというわけではないですが、いまどきのPHP、開発現場でのPHPを手軽に知ることができる内容になっていると思いますので、一度読んで頂ければ嬉しいです。

なお今年のPHPカンファレンスは、なんと本書発売日の翌日(2013/09/14)です!私もPHPカンファレンスに参加しますので、もし会場でお会いできれば、感想など教えてください:D

  • コメント (Close): 0
  • トラックバック (Close): 0

Vagrant + VirtualBox で nfs を使って、synced_folder を速くする

この記事の所要時間: 354

Vagrant + VirtualBox で便利な synced_folder を nfs を使ってパフォーマンスを向上する方法です。

vagrant

開発環境として Vagrant + VirtualBox を使う上で欠かせないのが synced_folder です。ホストとゲスト間でディレクトリを共有できるので、ホストで書いたコードをゲストですぐに実行することができます。

synced_folder はVirtualBox が持つ shared folders という機能をつかているのですが、代わりに nfs を使うことで、パフォーマンスを向上させることができます。

nfsd をホスト側で起動

synced_folder に nfs を利用するには、ホスト側で nfsd を起動する必要があります。

OS X(Lion / Mountain Lion)では標準で nfsd がインストールされているのでこれを利用します。nfsd コマンドで enable にすると、nfsd を起動して、さらに再起動時も自動で nfsd が起動するようになります。

なお nfsd を起動するには /etc/exports が必要になります。存在しない場合は、作成しておきます(内容は空で良いです)。

$ sudo touch /etc/exports
$ ls /etc/exports
/etc/exports

nsfd enable コマンドで nfsd を起動します。

$ sudo nfsd enable

$ sudo nfsd status
nfsd service i enabled
nfsd is running (pid xxxxx, 8 threads)

nfsd disable コマンドを実行すると、nfsd が停止して、再起動後も起動しなくなります。

$ sudo nfsd disable

$ sudo nfsd status
nfsd service is disabled
nfsd is not running

Vagrantfile で nfs を指定

Vagrantfile で synced_folder を NFS で利用する設定を行ないます。

ポイントは2つです。まず host-only ネットワークで IP アドレスを指定します。そして、synced_folder に :nfs => true を設定します。

vagrant up すると、synced_folder で指定したディレクトリをゲストが NFS マウントします。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
(snip)
[default] Exporting NFS shared folders...
Preparing to edit /etc/exports. Administrator privileges will be required...
The nfsd service does not appear to be running.
Starting the nfsd service (use 'enable' to permanently enable)
[default] Mounting NFS shared folders...

ゲストにログインすると NFS マウントしていることが分かります。

$ vagrant ssh
[vagrant@localhost ~]$ df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/VolGroup-lv_root
                      8.4G  1.1G  7.0G  14% /
tmpfs                 230M     0  230M   0% /dev/shm
/dev/sda1             485M   32M  429M   7% /boot
/vagrant              931G  359G  572G  39% /vagrant
192.168.33.1:/path/to/directory                      <---- NFS でマウントした synced_folder
                      931G  359G  572G  39% /share

ホストの /etc/exports には下記のように対象のディレクトリが自動で追記されています。

$ cat /etc/exports
# VAGRANT-BEGIN: 0f0224b9-b61c-47ff-b769-49d1e3103b28
"/path/to/directory" 192.168.33.30 -mapall=501:20
# VAGRANT-END: 0f0224b9-b61c-47ff-b769-49d1e3103b28

なお、もし IP が指定されていないと、vagrant up 時に下記のようなエラーが表示されます。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
(snip)
NFS requires a host-only network with a static IP to be created.
Please add a host-only network with a static IP to the machine
for NFS to work.

パフォーマンス

NFS を使った場合、実際の開発でどれほど恩恵があるかを判断するために簡単な Web アプリケーションを siege で計測してみました。

対象アプリケーションはCakePHPのコントローラで「Hello」という文字列を出力するのみで、DBへの接続は行なっていません。それぞれの方式でマウントしたディレクトリをdocument_rootに指定しています。

ホストから「siege -c 10 -t 60s -b http://URL/」で5回計測を行ない、その平均値を算出しました。

計測結果は下記になります。NFS の方が 3.5倍多くのリクエストをさばいており、パフォーマンスが向上していることが分かります。

方式 計測値 Rate
share folders(synced_folderデフォルト) 11.366 trans/sec 1
NFS 40.066 trans/sec 3.52

参考までに、Vagrant サイトでは実際の Rails プロジェクトのテストを使った結果が掲載されています。NFS が 22s に対して、Shared folders は 5m14s となっており、大きく速度が異なっています。

VirtualBox Shared Folders: 5m 14s
Host File System: 10s
Native VM File System: 13s
NFS Shared Folders: 22s
NFS Shared Folders (warm cache): 14s
http://docs-v1.vagrantup.com/v1/docs/nfs.html

まとめ

NFS を使うことで簡単に synced_folder のパフォーマンスを上げることができます。synced_folder のパフォーマンスに不満がある場合は NFS を一度試してみて下さい。

ただ、ホスト側で nfsd を動かす必要があるので、Windows など nfsd が標準でインストールされていない環境では気軽に使えないのが難点ですね。

参考

  • コメント (Close): 0
  • トラックバック (Close): 0

Home > アーカイブ > 2013-08

検索
フィード
メタ情報

Return to page top