けんごのお屋敷

2012-11-11

PHP Matsuriの本番は夜遅くから

11月の3日、4日に福岡の福岡Ruby・コンテンツ産業振興センターPHP Matsuri 2012が開催されました。

初参加のPHP Matsuri

今回は僕もこれに参加してきました。初参加です。

ただし、一般参加者枠ではなくて、スポンサー枠でしかもスピーカーとして!

もともとPHP Matsuriは初回から参加したいな〜とは思っていたけど、開催地が東京や大阪でとても行ける場所じゃ なかったので参加したことがありませんでした。今回は開催地が 福岡 だったので、これはもう参加するしかない! と思ってたところ、ペパボがスポンサーになってスポンサー枠で参加することになりました。

スポンサーには発表枠がついてて、もちろん僕がそこで発表することに。 ペパボの福岡支社ではちょうど環境改善の取り組みをやっていたので、迷いなくそれについて紹介することにしました。

PHP Matsuriの本番は夜遅くから

ところでPHP Matsuri 2012のタイムテーブル を見てみると23時頃が 闇?? となっています。

これはなんだろう??と思っていましたが、、、アン・リーダブルコード選手権というイベントでした。 俺の知ってるこのクソコードこそ、一番読みにくいんだ! というクソコードを紹介して 一番のクソコードを紹介した人には景品が当たるという。

ゲストセッションやスポンサーセッションも終わり、夜も更けてきた23時頃に謎の盛り上がりと共に始まりました。 これまでで一番もりあがっとるww

缶ビールとかで乾杯をするの図

なんかもうこの闇PHP Matsuriがメインで今までのは全部前置きみたいな感じがしてきた。 とても楽しいイベントでした。

ペパボのスポンサーセッション

僕はスポンサー枠で参加して、当日は恐れ多くも発表者としてペパボ内でやってる環境改善の取り組みについて お話をさせてもらいました。環境改善の取り組みはまだまだやることはいっぱいなのですが、 以前に比べると比べ物にならないほどよくなってきています。PHP Matsuriでも紹介しましたが、 当日しゃべり切れなかった部分や、復習もかねてここでもう一度紹介したいと思います。

発表に使った資料はここにあります。

開発環境の改善

福岡支社ではロリポップ!やムームードメインの開発・運用を行なっています。 これらの開発サーバーはもともと1台でした。この共用サーバーにApacheやPHPなど必要なものをインストールし、 そしてSambaを入れて 共通のディレクトリに開発者全員が接続してファイルを編集 していました。これだと

  • 他の開発者と同じファイルを編集しようとしたらファイルがロックされてる
  • 自分の開発してる部分とは全然関係ないところでバグっている
  • 気軽にvar_dumpでデバッグできない

という問題がありました。

現在はmondrescueというツールを使って本番環境をVMイメージ化して、 それを各個人がクローンしてそこで開発をするように移行を進めています。 これで上記の問題はすっぱりすべて解決してくれます。

VMのクローンにはMaglicaというオープンソースを社内で使っています(ペパボのmizzyさん作)。

バージョン管理ツールの乗り換え

ロリポップ!とムームードメインはバージョン管理をsvnからgitへ移行しました。 そして中央リポジトリとしてgithubを使っています。 今ではペパボのほぼ全サービスがgithubへの移行が完了しており、誰でもどのサービスのコードでも見ることができます。

githubには pull-request という機能があり、これのお陰でとてもコードレビューがしやすくなりました。

それにペパボは福岡と東京にオフィスをかまえているのですが、福岡東京間のエンジニアの交流も githubのおかげでできています。東京のエンジニアが福岡で開発しているムームードメインの ソースコードにツッコミをいれる、なんて光景もよく見られます。

ちょっと苦労した話

ムームードメインではgithubへの移行にあたってソースコード中のパスワードを外部ファイルへ分離し、 その外部ファイルを .gitignore でリポジトリ管理外とする対応を行いました。

デプロイの改善

デプロイです。今までここが一番大変でした。 本番環境へのデプロイは全て人手で、1ファイルずつSFTPを使ってアップロードしていました。 当然、こんなことをやっていればファイルのアップロード漏れや間違ったファイルをアップするなど ミスが起こります。大規模な改修などではアップするファイルも当然多くなるので、それはそれは大変でした。

そこでロリポップ!とムームードメインではcapistranowebistranoを使ってデプロイを自動化するようにしました。

capistranoはRuby製のツールで、複数サーバー対して並列でコマンドを実行してくれるものです。 webistranoはcapbistranoのコマンドをGUIでラップしたブラウザから操作できるツールです。

これらはRuby on Railsのデプロイに良く使われていますが、実はPHPにも使えるのです。 もちろんPHP以外にも。

デプロイのためのコマンド(レシピと言います)を自分で定義してあげる必要はありますが 汎用的にどんなプロジェクトのソースコードでもcapistranoで自動デプロイしてあげることができます。

webistranoのお陰でデプロイが死ぬほど楽になりました。 1クリックでデプロイです。ワンクリックデプロイ。数秒で終わります。楽すぎます。

ちょっと苦労した話

capistranoでデプロイすると特徴的なディレクトリ構成になります。

  • current/
  • release/
  • shared/

上記3つのディレクトリがあり、プロジェクトのデプロイ先は release/ 以下のデプロイした日付時分秒の ディレクトリとなります(release/20121109111120/ など)。 そして current/ は一番新しい release/ へのシンボリックリンクとなっています。

つまりcapistranoを使っていなかった時と比べて、 current/ というディレクトリが1段階はさまるのです。

サーバーのドキュメントルートを current/ 以下に変更する必要があったのですが、 ロリポップ!やムームードメインではソースコード中に絶対パスを直書きしてる所がたくさんありました。

これでは current/ というディレクトリが1つはさまると動作しない箇所がでてきてしまうので 今後のことも考えて、絶対パスではなく相対パスで見るように修正を加えていきました。

テストの改善

テストはcapybaraというgemを使ってブラウザを起動させて、自動的にテストを実行しています。

またJenkinsを使って継続的にテストを実行しています。 Jenkinsについては、Railsでの記事ですが前にも紹介しました。

PHP Matsuriに参加してみて

非常に内容の濃いイベントでした。実は個人的な事情があって、1日目しか参加できなかったのですが それがとても悔やまれます。

初めての発表も良い経験となりました。これを機に、これからも多くのアウトプットの場を作り 情報発信をしていきたいと強く感じることができました。

次回PHP Matsuriは北海道という話を聞いたので、来年はもう行けないかもしれませんが アウトプット精神を忘れずに日々精進していきたい。

PHP青年団の方々おつかれさまでした。

  • このエントリーをはてなブックマークに追加