[定期]PHPのAPCを使う時は SafeApc を使おう

最近apcの話をしてるときにSafeApcの事を知らない人がいたのでこちらにもメモ。

composer 一発でインストールできて、インターフェイスもAPC直で使うのとほぼ同じです。
詳細は上にあるnazoさんのブログエントリを見てもらうのが分かりやすいのですが、違いとしては1リクエスト中での時間ずれによるキャッシュの意図しない破棄をふせげるのと、キャッシュのオールクリアを安全に行えるようになっている所です。

APC がいいのか memcached (とかRedis)がいいのか問題

例えばロードバランサーの後ろにフロントサーバが50台くらいあるような環境でキャッシュサーバとしてmemcachedを用意した場合、でかいオブジェクトをSerializeしてまるごと突っ込むようなひどい運用をしているとキャッシュデータが大きくなってネットワーク帯域に負荷がかかったりする事があります。
APCを利用すると、各フロントサーバー内で自前でキャッシュデータを持つ事になるしプロトコル的にネットワーク通信が行われないので帯域の心配をする必要がなくなります。これはfetchとstoreの速度面でもメリットがあります。
一方でキャッシュコントロールという観点でいうと各フロントサーバーの上にキャッシュを作るAPCの場合、キャッシュがのってくるまでの時間がかかる上に、システムのバージョンアップに合わせてきれいにキャッシュをスイッチするのが面倒です。

どっちがいいのかは環境や構成によって変わってくると思うのでそれぞれのメリットとデメリットを比較して状況にあう選択をしたいですね。(技術だけで判断するのが正解じゃなくて、例えば自前で全部構築するならAPCでインフラエンジニアとやってるならキャッシュサーバたてるとかね…)

wp-cronをcronから実行する

wordpressにはwp-cronという擬似cronを実現する仕組みがあって、ユーザーアクセスに合わせてcronタスクを実行するんですが、
これがたまにすごく時間がかかる事があるようで、たまたまアクセスしてきたユーザーをおまたせするのはよくないなということで
cronから実行するようにしてみました。

wp-config.phpに

define(‘DISABLE_WP_CRON’, ‘true’);

を追加したあと、crontabに、

10 * * * * /usr/bin/curl http://ブログのURL/wp-cron.php

を追加するだけ。

ただ、DISABLE_WP_CRONを見てCRONが使われてないと判断するプラグインがあるので注意が必要です。

第88回 PHP勉強会で発表してきました

参加人数約60人の大規模なイベントで、参加者の中には本やブログで名前を拝見するすごい方々ばかりだったので緊張しました。また、その逆に就活中の方なんかも来ていて、幅広いなあと思いました。

内容はPHPちょっとはじめてみてコード書けるようになってきた人向けです。参加者の話を聞いた感じだともう少しレベルをあげてもよかったかもしれない…

会場は GMO Yours だったのですが、すごく綺麗で良い所でした。こういう場所を勉強会の会場として貸し出していただけるのはとてもありがたいですね。

こういう勉強会に参加したのは久しぶりなのですが、いろんな人に会えるのは良いですね。

もっと上手にプレゼンできるようになりたいなー。

WordPressの更新をFTPを使わずに行う設定

もうこれ、何回も何回もやってるんで、以前ブログにも書いたような気もしていますが、FTPサーバとか立てなくてもwordpressへの書き込み権限があり、wp-config.phpの上のほうに、 define('FS_METHOD', 'direct'); という設定があれば、FTPをつかわずにブラウザからボタンポチーでアップデートできるようになります。

継続的インテグレーションを実践する上で最も難しい所

CakePHPで学ぶ継続的インテグレーション
を kaz_29 さんから献本していただきました!やったー!ありがとうございます!

CakePHPで学ぶ継続的インテグレーション

チーム開発をちゃんとやっていく上で、継続的インテグレーションは非常に重要です。遥か昔のPHPカンファレンスでも発表しましたが、ユニットテストをしっかり書いて、Pull RequestのタイミングでJenkinsさんに確認してもらう事で、安心して前へ進む事ができるようになります。

という事はみんなもう知っているはずです。ユニットテストは大事だし、コーディングスタイルの自動チェックも大事。重複コードの検出や、複雑度の検出もあると嬉しいし、ワンクリックデプロイ、mergeのタイミングでの自動デプロイだって大事。分かってますよね。

わかってるけど、やってる人は少ないんですよね。それはなぜか。

継続的インテグレーションを実践する上で最も難しい所は、「継続的インテグレーションを行える所までセットアップする事、継続的インテグレーションを行える環境を用意する事」なんです。

あれを入れて、これを入れて、それを入れて…そしたらあっちのサイトの設定を変えて、こっちの設定も変えて……

私の場合は、社内にいる優秀なインフラチームが全部がんばってくれたので、ほとんど苦労せずに環境を作る事ができましたが、個人で同じことをやるのは相当面倒なのでTravis CIやcoverallsを使う程度しかしていません。

この本には、継続的インテグレーションができる環境を作る手順を最初から丁寧に説明されています。セットアップだけで何十ページにもなってるんですが、筆者の方はきっとものすごい数の検証を行ったんだろうなと思うとこの本の価値はここに詰まってるような気がします。

そうでした。タイトルは、「CakePHPで学ぶ」とありますが、CakePHPの話はそんなに出てきません。個人的には環境を作る事が一番重要だと思っているので、そこに関してはフレームワークは関係ないですし、PHPerじゃなくても、例えばJava使いの方でも参考にできる部分は多いと思います。

まだ継続的インテグレーションを経験していない人、一度はやってみようと思ったけど挫折してしまった人は、是非この書籍を片手に挑戦してみてください。