PHPUnitのカバレッジレポート(XML)を使ってカバレッジの計算してみた

こんにちは
仕事の方でテストカバレッジをGUIなしに集計する必要が出たので、

  • メソッド単位のカバレッジを集計したい
  • クラス単位でのカバレッジを集計したい
  • ファイル単位でのカバレッジを集計したい
  • ディレクトリ単位でのカバレッジを集計したい

の集計をするために、PHPUnitが出力するClover形式のXMLと格闘して得られた、XMLの構造と扱い方についてまとめてみました

Continue Reading…

Drupal7で指定したユーザが管理者ロールか否かを判断したいときはvariable_getを使いましょう

WEB EGGではじめてのDrupalネタです。
Drupalを触っててふと気になったのが、 指定したユーザが管理者ロールか否か を判定しようとしたものの、
調べてもベストプラクティスが見つからず、ソースコードを追ったらやっと正解を見つけたという話の備忘録です。

Continue Reading…

PHPのclearstatcacheのベンチマークを取ってみた。むしろ遅かった。

こんにちは。今回はPHPネタです。

PHPにはclearstatcacheという関数があります。

PHPはパフォーマンス向上のために それらの関数の戻り値をキャッシュします。しかし、ケースによっては、 キャッシュされた情報を消去したい場合もあるでしょう。 例えば、一つのスクリプト上で同じファイルが何度もチェックされ、 そのファイルが変更されたり削除されたりする可能性がある場合、 ステータスキャッシュを消去しなければならないと感じるでしょう。 このようなケースでは、clearstatcache()を使用することで ファイルの情報に関してPHPが持っているキャッシュをクリアすることができます。
PHP: clearstatcache – Manual

この機能はドキュメント見る限り割と古くから導入されてるそうですが、PHP5.1でバグってました。
それは後述するとして、 このバグを引き換えに得られる性能 はどんなもんなのさ?を計測してみました。

Continue Reading…

シングルスレッドな言語の並列化・マルチプロセス化についての暫定的な理解をまとめる

たまにはまとまってない情報を書いてもいいじゃないかということで、表題の通り暫定版です。

まえおき

Nodejsのclusterモジュールのドキュメントを読んでいて、
「ほぉ、並列化って簡単にできるんだなぁ」と感じつつ、関連記事をいろいろ調べてみると、

  • 並列化すればスループットが上がる
  • マルチコアの場合は有用。CPUのコア数と同じにすると良い
  • ワーカーやアプリケーションサーバなどは横に並べとけ

的な記述が色々あり、違和感を感じました。
Goなどのマルチスレッドができる言語でやる”並列化”と私が調べているものは別物なのでは?と。

ということで、身近な頼れる方々へ聞いて調べて考えた結果の暫定的な理解を書き留めておきます。 理解に誤りがあったら指摘もらえると喜びます。

パフォーマンスチューニングやスレッドセーフであるための4条項とかそういう込み入った話ではなく、浅い話です。

Continue Reading…

シバン(shebang)をやっと理解した

こんにちは。

composerで提供されているコマンドの中身を見ていたら

と書かれており、そのあとの行にはPHPのコードが。

のように、phpコマンドを使わずに直接PHPのコードが実行出来るようになっていました
この仕組みは シバン(shebang) というらしいです

シバン自体はBashのスクリプトで似たようなものを何度も見たことがあったのですが、おまじない的に捉えており意味を深く考えていませんでした
拡張子や実行コマンドに縛られず、何の言語で書いても良い実行可能なコードを作るのに適しているのでは??
と疑問が湧いたので、調べて理解したものを残しておきます

Continue Reading…

5分で作るPHPフレームワーク(技術調査、設計編)

こんにちは
突然ですが、PHPのフレームワークを作ろうと思います。

大層なタイトルを掲げてしまいましたが、制作自体は全く5分ではありません。けっこう時間かかりました
じっくり時間を書けて調査した結果、記事に倣って書けば5分くらいで完成する、という意味での5分です

記事は2本立ての構成で、今回は技術選定・設計編です。

Continue Reading…

昨今のPHPのテンプレートエンジンについて調べて共通インタフェースを作った

こんにちは。

突然ですが、FuelPHPのビューを書く場合、デフォルトでは生PHP + Viewクラスの構成だと思います。
Viewクラス自体がエスケープ機構を備えているのでXSSは塞げるんですが、生のPHPで書くとisset地獄だったりifが増えたりと不便なところが多く、テンプレートエンジン使いたいと思うことが多々あります。

そんなFuelPHPにはparserというパッケージがあるので、設定を変更すればテンプレートエンジンが簡単に利用できます。

fuelphpでhaml導入したった – ド忘れ防止雑記帳

が、しかし 対応しているテンプレートエンジンの一覧を見てみると、どれも古い。とにかく古い。
良く言えば枯れてるんですが、調べてみると メンテナンスされてないだろこれ… という感じのものが結構ありました。

ということで自分の知見をアップデートするため昨今のテンプレートエンジンについて調べつつ、
parserパッケージのように複数テンプレートエンジンを同一のインタフェースで扱える仕組みを作ってみました。

Continue Reading…