Home

Shin x blog

Twilio をはじめるのに知っておくと良いこと6つ(Twilio API勉強会@大阪)

この記事の所要時間: 528

Twilio 盛り上がってきていますね。電話という身近でありながらシステムとして扱うには複雑な仕組みが必要なものを単純な API で操作できるというのは面白いサービスです。

先日大阪で行われたTwilio API勉強会@大阪にて、PHP から Twilio を触ってみるハンズオンセッションを行ないました。Twilio を使うと簡単な PHP コードで、自分の携帯を鳴らしたり、携帯から電話をかけてみたり、簡単に試すことができるので、これはハンズオンとしてもなかなか楽しかったです。

お声がけいただき、ありがとうございましたm(_ _)m

発表資料はこちら。

Twilio API を PHP で触ってみよう from Masashi Shinbara

ハンズオンの手順は、Gist に書いています。ここでは、Composer を使って、twilio-php(PHP版のTwilioライブラリ)をインストールしています。

https://gist.github.com/shin1x1/7006593

Twilio は使いやすいサービスなのですが、はじめる際に知っておくと良いポイントを挙げてみます。

1. まず Twilio をはじめるならこれ

Twilio 公式ドキュメントは内容が豊富で、リファレンスだけでなく実用例など役立つ内容なのですが、はじめて触る人は迷ってしまいまいがちです。

まず、Twilio とは何ぞや、ざっくりどう使えば良いかを掴むには、Twilio サイトにある「ゼロからはじめるぜ!Twilio」という連載がオススメです。

アカウント作成から、Twilio を使った電話のインバウンド、アウトバウンド、そしてPHPによるサンプルコードの実装など、まず第一歩を踏み出すには分かりやすい内容ですので、まずTwilioを触ってみようという人はこの連載を第一回から通して見てみるのが良いでしょう。

ゼロからはじめるぜ! Twilio – Twilio for KDDI Web Communications

2. 処理の流れをつかむ

Twilio と連携ライブラリには様々な機能があるので、はじめはどの局面でどれを使えば良いかが分からない場合があります。

まずは、Twilio と Web アプリケーションとでどういった連携を行うかを流れとして掴んでおくと良いでしょう。

Twilio とWebアプリケーション間ではHTTPリクエストで通信して連携を行ないます。これには、Twilio からアプリケーションWebアプリケーションへHTTPリクエストが送られるパターンと、反対にWebアプリケーションからTwilioへHTTPリクエストを送るパターンがあります。

まずは、Twilio から Web アプリケーションへ HTTP リクエストが送信するパターン。電話のインバウンドがこれにあたります。

この場合、Web アプリケーションでは、TwiML を生成して、返します。twilio-php を使う場合、Services_Twilio_Twimlクラスを利用します。

twilio-php-15-1

次に、Web アプリケーションから Twilio へ HTTP リクエストを送信するパターン。電話のアウトバウンドがこれにあたります。

この場合、Web アプリケーションでは、REST API を実行します。twilio-php を使う場合、Services_Twilioクラスを利用します。

twilio-php-41

つまり、用途に応じて、TwiML と返せば良いのか、REST API を実行すれば良いのかの見極めが重要となります。(とりあえず REST API を実行すれば良いのかと思い、REST API ばかり調べて「?」となりました:-p)

3. アプリケーションの検証は、まずはブラウザで

twilio-php で、Twilio 連携部分を実装した場合、いきなり電話をかけてテストするのではなく、まずはブラウザ等で TwiML が正常に生成されているかを確認しましょう。

ハンズオンでもあったのですが、そもそも PHP レベルでエラーとなっていると、電話をかけても正常に動作しません。電話ではエラーの原因もわからないので、まずはブラウザ等で動作確認してから、電話での確認を行うと良いです。(電話代もかかりますしね)

4. セキュリティ

  1. を見ると「おやっ?」と気づく人もいると思うのですが、Twilio からの Web アプリケーションへの通信は、単なる HTTP 通信なので、何も対応していないと Twilio を偽装したリクエストを Web アプリケーションへ送信することができてしまいます。

Web アプリケーション側では、送信されてきた HTTP リクエストが Twilio からのものかを検証する方法が用意されているので、本番環境ではこれらを対応しておくと良いでしょう。

  • HTTPS による通信
  • Basic認証 or Digest認証
  • Twilio からのリクエストをバリデーション

Twilio Docs – Security

5. SMS は、海外番号からしか送受信できない

Twilio でまず使いたくなるのが、SMS の送受信なのですが、現状(2013/10/30)、日本国内の番号からは利用することができません。

海外番号を入手するには、Twilio にクレジットカードを登録して、本アカウントに切り替える必要があります。

2要素認証など、SMS を活用したい場面があると思うので、お試しアカウントでも触れると便利なのですが。

6. そして Twilio 公式ドキュメント

こうして Twilio の概要をおさえた後は、Twilio 公式ドキュメントが大いに役立ちます。特にユースケース毎の実装例などは、仕組みを理解するにも良いですね。

Twilio ドキュメント
Twilio – ガイドとハウツー(実装例)

おまけ. SMS が、au より Softbank の方が安い

KDDI Web Communications のサービスなのですが、なぜか SMS 送信料が、au(9.6円)よりSoftbank(1.5円)の方が安くなっています。

不思議に思ったのですが、色々な事情があるようです。

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

イベント参加報告会という勉強会セッション(Fukuoka.php vol.10, 第10回関西PHP勉強会)

この記事の所要時間: 316

イベント参加報告会という勉強会セッションがあらためて面白かったという話。

Fukuoka.php PHPカンファレンス&WordCamp Tokyo参加報告会

Fukuoka.php vol.10 に参加してきました。もてなしていただき、ありがとうございましたm(_ _)m

今回は「PHPカンファレンス & WordCamp Tokyo」参加報告会ということで、イベントに参加した人がそれぞれの参加レポートを10分程度発表していくという形式でした。

参加レポートといっても、形式張ったものではなく、写真やスライドを交えて、実際に行った感想や、どのセッションを見た、こんな写真を撮った、宿はこうして確保など、友人に「こんなイベント行ってきたよ」と話すような気軽な内容です。

実際に参加してみて、これはとても良いアイデアだと思いました。

まずは、話す側から。

技術的なセッションとは違い、参加した自分自身の感想を話すセッションなので、その人が感じたことが正解であり、誰かに間違いを正されることはありません。詳しくないから話せいないということもなく、誰もが気軽に話せるセッションだと思います。話すきっかけを探している人にとっては良いチャンスです。

次に、聞く側から。

遠方のイベントに興味があるけれど、なかなか参加できないという人にとっては、参加した人の生の声を通してイベントを知ることができます。セッション内容やイベントとしての全体のレポートは Web 上でまとめられることが多いですが、身近な人から直接聞くことで、よりイベントを近くに感じることができます。

これを聞いた人が、次回以降にそのイベントへ参加するきっかけになると良いですね。

第10回関西PHP勉強会

後日開催した第10回関西PHP勉強会 では、このアイデアを拝借して、「PHPカンファレンス&WordCamp Tokyo&JAWS Festa Kansai参加報告会」を開催しました。( @akase244 さん、事後報告ですが、アイデア拝借させて頂きましたm(_ _)m )

私は、PHPカンファレンスとJAWS Festa Kansaiについての参加レポートを話してきました。参加レポートといってもメインは JAWS Festa Kansai で行われたアンカンファレンスについて話しました。

アンカンファレンスという名前から想像する印象とは異なっていたのですが、それぞれのテーマに基いてグループ(6–10人程度)が作られ、モデレータが中心となり、その話題について語り合うという内容です。Chef や AWS、カンファレンス運営や、baser CMSのチューニング方法など様々なテーマが用意されていました。

少人数で議論に参加するため、おそらく傍観者として、ただ見ているだけという人はいなかったように思います。テーマについての理解度は人それぞれですが、各々の立場での考えを述べて、それに対するリアクションと聞いてといった具合に全員が参加することができる良いセッションだと感じました。

いずれはこういったセッションもやってみたいですね。(もっと踏み込んで、グループで、何かの OSS についてパフォーマンスチューニングしたり、ハックするイベントをやるのも面白そう。)

参加レポートのために必要なこと

両イベントで色々な参加レポートを聞いたのですが、やはり写真は大事ですね。イベントの様子を話すには、写真があるとないとでは伝わることが大きく違います。blog 書く時も同様なので、写真は忘れずに撮っておきたいものです、はい。

そういえば、Fukuoka.php も関西PHP勉強会も今月 10 回目だったんですね!お互いに続けていければ良いですねー。

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

PHP開発環境のサンプルVagrantfile

この記事の所要時間: 510

PHPカンファレンス2013でPHP開発環境をVagrantで作る発表を行ったのですが、具体的なVagrantfileが欲しいという声を頂いたので、GitHubに公開しました。

vagrant

ご自身で構築するベースになれば良いと思うので、どう作れば良いの?と言う方は参考にしてみて下さい。

なお、このリポジトリの Vagrantfile は、開発PC内の VirtualBox 上で開発環境として動かすことを想定しています。セキュリティについては考慮されていないのでご注意下さい。

vagrant-lapp-sample

https://github.com/shin1x1/vagrant-lapp-sample

このリポジトリは、PHPアプリケーション(CakePHP)をイメージしています。構成は以下です。

  • CentOS 6.4
  • Apache 2.2
  • PHP 5.4
  • PostgreSQL 9.3
  • phpPgAdmin

ディレクトリ構成としては、app/ がアプリケーションのコードを置くディレクトリで、vagrant/ に Vagrant のファイルを置くイメージです。

app/ には、サンプルとして CakePHP アプリケーションを置いています。(cake bake project したもの)

使い方

git clone でプロジェクトのコードを取得して、あとは vagrant ディレクトリ で、vagrant up を実行するだけです。

$ git clone https://github.com/shin1x1/vagrant-lapp-sample
$ cd vagrant-lapp-sample/vagrant
$ vagrant up

アプリケーションへのアクセス

ブラウザから http://192.168.33.30/ にアクセスすると、PHPアプリケーションを実行することができます。

phpPgAdminへのアクセス

ブラウザから http://192.168.33.30/phpPgAdmin/ にアクセスすると、phpPgAdmin を利用できます。ユーザは vagrant、パスワードは pass です。(厳密にはパスワードは何でも ok です)

ポイント

synced_folder

このリポジトリのルートディレクトリ( app/ があるディレクトリ)を synced_folder に設定しており、仮想マシンからは /share でアクセスすることができます。

つまり、ホストPCで app/webroot/index.php というファイル編集すると、仮想マシンでは /share/app/webroot/index.php のファイルが自動で更新されます。

ドキュメントルート

Apache のドキュメントルートは、/share/app/webroot に設定しています。

これは vagrant/httpd.conf で設定しており、プロビジョニング実行時に /etc/httpd/conf/httpd.conf に上書きされます。変更が必要であれば、vagrant/httpd.conf を編集して、vagrant provision でプロビジョニングを再実行すると良いでしょう。

なお php.ini も同様に vagrant/php.ini を用意しています。

設定ファイルの準備

Apache や PHP などの設定ファイルを準備する際は、下記手順で行っています。

仮想マシン内での /vagrant ディレクトリが、ホストPCでは Vagrantfile があるディレクトリと synced_folder になっているのがポイントです。

  • まずが vagrant up で仮想マシンを起動
  • vagrant ssh でログインして、yum で対象パッケージをインストール
  • 設定ファイルを変更、動作確認
  • cp -a /etc/http/conf/http.conf /vagrant/
  • ホスト PC の variant/ に httpd.conf がコピーされる
  • プロビジョニングで、/vagrant/httpd.conf を /etc/httpd/conf/ にコピーするコードを書いておく

データベース

この Vagrantfile では、データベースの構築は行っていますが、アプリケーションで必要なテーブル定義などは行っていません。

このあたりはプロジェクトによって方法が異なると思いますが、フレームワークやライブラリ等でマイグレーション機能があればそちらを、無ければ dmp ファイルを適用するコマンドをプロビジョニングで記述することになります。
( PostgreSQL であれば、 psql -Uvagrant app < pgsql.dmp など。)

シェルプロビジョニング

プロビジョニングには、シェルを使っています。

普段、サーバにSSHログインして yum や apt-get などでインストールしているコマンドをそのまま Vagrantfile に記述していくだけなので、簡単に書けるのが利点です。

Chef や Puppet、Ansible などのプロビジョニングツールを利用しても良いのですが、以前にこういったツールを使ったことが無いのであれば、まずはシェルで構築してみて、次の段階として好みのプロビジョニングツールを試してみるがおすすめです。(もちろん、一気にプロビジョニングツールを使いたい方はその方法でも問題ありません。)

Composer

composer.json が存在すれば、composer.phar をダウンロードして、composer install を実行するようにしています。

このリポジトリでは、CakePHP と PHPUnit を Composer でインストールしています。

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

関西PHP勉強会で「いまどきのPHP」を発表してきました( in JAWS FESTA Kansai 2013 )

この記事の所要時間: 325

9/28に京セラドームで開催されたJAWS FESTA Kansaiの1トラックとして、関西PHP勉強会を開催しました。

Untitled
Photo by omoon.

午前のセッションにも関わらず、多数の方に参加頂き、ありがとうございました。

いまどきのPHP

今回の勉強会では、3セッションを行ったのですが、私のセッションでは「いまどきのPHP」について発表しました。

いまどきのPHP from Masashi Shinbara

いつもの勉強会とは違い、JAWS FESTA Kansai の中で開催したので、PHPユーザ以外の方(普段は別の言語で開発している、以前は書いていたけど最近の動向は知らない)が参加されるかもと思い、いま多くの言語で行われているオブジェクト指向開発がPHPでもきるんだよということを伝えたくて、PHPのオブジェクト指向機能をメインにしました。

結果としては、ほとんどの方がPHPをメインで使われているとのことだった(まあ、PHP勉強会なので当たり前になのですが:))ので、おさらい程度の内容だったと思うのですが、熱心に聴いて下さる方もいたので、話して良かったです。

じゃんけん大会

勉強会の終わりには、「PHPエンジニア養成読本」をかけたじゃんけん大会を行いました。

ちょうど隣の WordBench 大阪のセッションが終わった頃だったので、多数の方に参加頂いて、盛り上がりました:D 獲得された方は、簡単な内容で良いので、レビューなど書いて頂ければ嬉しいですm(_ _)m

blog を書くまでが勉強会

数年前の勉強会では良く言われていたフレーズです。私自身の開催する勉強会では必ずこの話をしていたのですが、TwitterやFacebookなど気軽に短文を投稿できるメディアが広がってからはあまり聞かなくなりました。

その頃から、勉強会やカンファレンスなどのイベントへの参加blog記事が少なくなってきたような気がします。私自身も以前は書いていた参加エントリも書かなくなりました。(一時期はスライドすら公開しないことも><)

今回は初心に戻って、勉強会の最初と最後で伝えたのですが、すると早速いくつかのエントリを書いて頂けました!一時期に比べるとblogを書く人が減っているのはあるとは思うのですが、きちんと伝えれば反応してくれる人はいるのだとあらためて思いました。

勉強会の運営やセッションでの発表などは一方通行のものではなく、参加した人との相互作用で成り立つものだと思います。その場でお話するのももちろん良いのですが、できればblogなどでのフィードバックがあると今後の参考になりますし、なにより「開催して良かった」「次はこうしよう」など今後へのモチベーションにもなりますので、可能な範囲で書いて頂けると嬉しいです。(自戒も込めて)

発表資料や参加エントリはKansai PHP Users Group の Facebook グループにて。

Kansai PHP Users Group として別イベントへの参加

Kansai PHP Users Group として活動してから、3 年以上が経つのですが、ようやく別のイベントにコミュニティとして参加する機会が増えてきました。

8 月には WordBench 大阪にてセッションを行いました。今回は JAWS FESTA Kansai にて勉強会を開催しました。これまで参加したいとは思いつつ、タイミングが合わず実現していなかったのですが、ここ最近はそれが一気に来ました。

実は、10 月にはInnovation EGG、そして11月にはKOFへの参加を予定しています。

関西の中で、それぞれのコミュニティが分断しているのではなく、一緒に何かやりたいというのは以前から頭にはあったのですが、色々な人の出会いのおかげで、それが少しづつ形になってきています。今後もこういったコラボレーションを行っていきたいですね。

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

Vagrantで作るPHP開発環境[実践編]をPHPカンファレンス2013で発表してきた

この記事の所要時間: 354

2013/09/15に開催されたPHPカンファレンス2013でVagrantに関する発表をしてきました。

発表資料はこちらです。

Vagrant で作る PHP 開発環境 実践編 from Masashi Shinbara

(2013/10/09追記)
PHP開発環境を構築するサンプル Vagrantfile をアップしました。
PHP開発環境のサンプルVagrantfile

第7回関西PHP勉強会で発表した下記の内容をベースに、より実践的な内容を追加しました。

もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境 from Masashi Shinbara

PHPシステムの開発環境をVagrantで作ることを題材に、基本的な流れをお話しました。

ポイントは、プロビジョニングにシェルを使う部分と、やはり synced_folder ですね。AWS上にも同じ環境を構築できる部分ももう少し深くお話したかったのですが、時間が足りませんでした><

また、Vagrantfile があるディレクトリ(vagrant upしたカレントディレクトリ)も synced_folder となっていて、仮想マシンでは /vagrant としてアクセスできるということも知っておくと便利です。これを利用するとChefのtemplateリソースのように設定ファイルをあらかじめ用意しておいて、所定の場所にコピーするなどが簡単にできます。

発表後には何人かの方にフィードバックを頂いて、Vagrant + Chef-solo を一気にやって躓いたという方やPHPでプロビジョニングをやることもできるという点に気付いた方もいて、シェルスクリプトをプロビジョニングに使う方法もあるよということが伝わって良かったです。

なかには、PHPを使っていないけど、Vagrantの話を聞きにきました!という方もいて、個人的にはとても嬉しかったです。

ちなみにスライドにある「Vagrantが見せる夢」は、今年のPHPカンファレンスのテーマが「PHPの夢を語ろう。」となっているからです:D Vagrantを使うとより多くの人が簡単にPHP開発環境を手にすることができる、というのは実際に思うところです。

今回は 2F 小展示ホールで発表したのですが、ここは以前のPHPカンファレンスではメイン会場として使われていた場所で、落ち着いて発表することができました。会場の雰囲気も良く、あっという間に発表時間が過ぎました。参加頂いたみなさんありがとうございました!

発表でも触れましたが、Vagrant はじめの一歩として執筆したVagrant入門ガイドは下記です。こちらも合わせて、よろしくおねがいしますm(_ _)m

PHPエンジニア養成読本

9/13に発売された「PHPエンジニア養成読本」をイベント会場内のジュンク堂さんにて販売して頂きました。おかげさまで持ち込まれていた在庫は全て完売ということになりました。ご購入いただいた、みなさんありがとうございましたm(_ _)m

途中、サイン会なども開かれていて、購入して頂いた方と少しお話することができ、楽しかったです。

LT 司会

カンファレンスの最後といえば LT 大会!今回も WordCamp Tokyo とPHPカンファレンスとで合同の LT 大会だったのですが、PHPカンファレンス側の司会として登壇しました。スタッフでも無いのに申し訳ない気もしたのですが、後で聞くと皆さんオーバーワークだったようで(5トラックもあったので。。。)、少しでも負担減に協力できたのなら良かったです。

ただ、もしかするとスタッフの中でやってみたい方もいたかもしれないので、次回は手を挙げると良いと思います。

カンファレンスセッション

今回は特に色々とやることが多かったので、他の方のセッションはほとんど参加できませんでした。。。PHP言語系やRubyからPHPへの話、あとインフラ系の話は面白そうだと思っていたのですが、自身のやることと、あと久しぶりに会う人と話すのが楽しく、気がつくと終わっていました。TLを見ると、かなり面白そうな内容だったようなので、あとでUstやスライドを見てみます。

今年は 5 トラックということで、運営は大変だったと思うのですが、スピーカーとして参加した私はとても快適に過ごすことができました。運営スタッフのみなさん、本当にありがとうございました。

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

Vagrantをはじめてみたい方へ「Vagrant入門ガイド」を書きました

この記事の所要時間: 337


vagrant_beginners_guide

「Vagrant入門ガイド」という電子書籍を技術評論社さんから出版しました。Kindle ストアGihyo Digital Publishing にて購入できます。

Vagrantは、まだエンジニアが中心に触っている状況ですが、いずれはWebデザイナーやコーダーの方など、サーバ構築を自分ではやらない人にも、制作するWebサイト、システムの動作検証を行う環境として利用する場面が増えていくと思います。

blog エントリなども多数あるのですが、断片的な情報も多く、また、Vagrant自身の進化が早いため、最新の環境だと上手くインストールできなかったり、動かないということがままあります。(このblogの過去エントリも。。。)

もちろん、じっくりと調べていけば解決できる問題なのですが、できれば、はじめの一歩くらいは、まとまった情報が日本語であると良いなと思い、本書を書きました。

目次

本書は、Vagrantはじめの一歩ということで、vagrantコマンドの使い方が中心となっています。順に進んでいけば、自分のPCにVargrantとVirtualBoxをインストールして、仮想マシンを起動する流れが出来上がります。

本書の内容をベースに、自らVagrant上で仮想サーバを構築していくならVagrantfileやプロビジョニングを習得していくと良いでしょう。また、誰か作ったVargrantfile(Githubに公開されているものやチームのエンジニアが作ったものなど)を使うだけなら、これでVargrantを活用することができます。

基本は入門者向けの内容ですが、すでにVargrantを使っている人向けということで、vagrantコマンドの各サブコマンドの引数や実行例を付録に収録しています。(正直これを書くためにはじめて知ったオプションもあり、個人的にも勉強になりました:D)

Vagrantの使い方は人それぞれだと思うのですが、特にWeb制作の現場では、エンジニアで無い人にも広く使ってもらえる可能性のあるソフトウェアだと思います。本書がVagrantを触るきっかけになれば嬉しいです。

なおVagrantの対象バージョンですが、今週リリースされたばかりの Vagrant 1.3.1 に対応しています。(さすが電子書籍!)

1.Vagrantとは
プロバイダ(Provider)
プロビジョニング(Provision)
Boxファイル
Vagrantfile
vagrantコマンド
まとめ

2.環境設定
VirtualBoxのインストール
Vagrantのインストール

3.設定ファイルの準備
Boxes(Boxファイル)のインストール
Boxファイルの追加
Boxファイルの確認
Boxファイルの削除
Vagrantfileの作成
Vagrantfileの生成

4.仮想マシンの起動と操作
仮想マシンを起動
仮想マシンへSSHログイン
仮想マシンの状態を確認
仮想マシンを停止
仮想マシンを削除

5.仮想マシンでWebサーバを構築

6.プラグインで拡張
saharaプラグインをインストール
saharaプラグインを使う
まとめ

7.応用(複数の仮想マシン)
複数の仮想マシンを起動
仮想マシンのエクスポート

Appendix:vagrant サブコマンド
box
destroy
halt
init
plugin
plugin uninstall
provision
reload
resume
ssh
ssh-config
status
suspend
up

PHPカンファレンス2013でVagrantについてお話します

今週末(2013/09/14)に東京で開催されるPHPカンファレンス2013で、Vargrantに関するセッションを行ないます。このセッションは本書の内容を超えて、PHPの開発現場でVargrantを活用するお話をしたいと思っています。

ちなみに「PHPエンジニア養成読本」も明日発売だったりするので、本書と合わせてよろしくお願いしますm(_ _)m

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

いまどきの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

Vagrant を使うなら、VirtualBox 4.2.16 以降で

この記事の所要時間: 633

VirtualBox 4.2.14 + Vagrant 1.2.2 の組み合わせで、正常に動作しなかった問題が、VirtualBox 4.2.16 で解決されたようです。

VirtualBox 4.2.14 + Vagrant 1.2.2 の組み合わせで、一部の環境にて vagrant up ができないという現象がありました。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["import", "/Users/hans/.vagrant.d/boxes/precise32/virtualbox/box.ovf"]

Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting /Users/hans/.vagrant.d/boxes/precise32/virtualbox/box.ovf...
OK.
0%...
Progress object failure: NS_ERROR_CALL_FAILED

https://github.com/mitchellh/vagrant/issues/1847

Vagrant の github サイトでもこの問題に関する issue が上がっていましたが、いずれも VirtualBox 4.2.16 で解決したようです。

手元の環境をVirtualBox 4.2.8 から 4.2.16 にアップグレードしたところ、Vagrant 1.2.2 との組み合わせで正常に動作しました。(sahara プラグインもちゃんと動きました:D)

  • Mac OS X 10.7.5
  • Vagrant 1.2.2
  • VirtualBox 4.2.16
$ vagrant -v
Vagrant version 1.2.2
$ VirtualBox -h
Oracle VM VirtualBox Manager 4.2.16
(C) 2005-2013 Oracle Corporation
All rights reserved.
(snip)

$ vagrant init precise32 http://files.vagrantup.com/precise32.box
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Box 'precise32' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading or copying the box...
Extracting box...te: 1905k/s, Estimated time remaining: --:--:--)
Successfully added box 'precise32' with provider 'virtualbox'!
[default] Importing base box 'precise32'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Fixed port collision for 22 => 2222. Now on port 2201.
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2201 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant

$  vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2
vagrant@precise32:~$
  • コメント (Close): 0
  • トラックバック (Close): 0

phpenv + php-build 環境を Vagrant で構築する

この記事の所要時間: 319

PHP5.5 リリースにより、再び盛り上がってきた phpenv + php-build 環境を Vagrant で作ってみました。

vagrant

CentOS6.4 + phpenv + php-build + nginx という構成になっています。

nginx + phpenv + php-build の環境構築については hnw さんの下記エントリがとても参考になりました。

php-buildで複数バージョンのPHP-FPMを用意する – hnwの日記

インストール

https://github.com/shin1x1/vagrant-phpenv-phpbuild

github へ Vagrantfile + Chef レシピファイルをアップしています。こちらの README に書いたとおりですが、手順としては以下になります。

  1. VirtualBox インストール
  2. Vagrant インストール
  3. git clone
  4. vagrant up

1 / 2 はインストール済であれば不要です。(なお VirtualBox 4.2.14(2013/07/01 時点の最新版) は、Vagrant との組み合わせで問題が発生する場合があるので、現時点では 4.2.12や4.2.8など旧バージョンのインストールをお勧めします。)

4 は、box ファイルのダウンロードや PHP のビルドでかなり時間がかかる場合があります。コマンドを実行した後はのんびりお待ちを。

SSH でアクセス

vagrant ssh でログインすると、phpenv コマンドが利用できます。

php コマンドで実行される PHP バージョンを変更したり、さらに別バージョンの PHP をインストールすることが可能です。

HTTP でアクセス

Vagrant で起動した仮想サーバには IP アドレスに 192.168.33.14 を付与しています。
稼働サーバでは nginx が動作しており、ポート毎に各バージョンの php-fpm が割り当てられています。

  • http://192.168.33.14:8053/ -> PHP5.3
  • http://192.168.33.14:8054/ -> PHP5.4
  • http://192.168.33.14:8055/ -> PHP5.5

ドキュメントルート

仮想サーバ内の /public_html ディレクトリが nginx のドキュメントルートになっています。

このディレクトリはホスト側の public_html ディレクトリをシェアしているので、このディレクトリに PHP ファイルを設置すれば、仮想サーバの nginx+php-fpm で実行することができます。

例えば、下記のように echo.php をホスト側の public_html ディレクトリ以下に作成すると、http://192.168.33.14:8053/echo.php で実行することができます。

$ ls .
README.md   Vagrantfile cookbooks   public_html
$ echo "<?php echo PHP_VERSION;" > public_html/echo.php

Vagrantfile をカスタム

Vagrantfile をカスタムすることで、インストールする PHP バージョンを変更したり、configure オプションを追加することが可能です。
詳しくは README にて。

参考

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

Home

検索
フィード
メタ情報

Return to page top