Phing を利用して CakePHP を継続的インテグレーション #cakeadvent2

CakeAdvent2012 の14日目を担当します。ハッシュタグは #cakeadvent2012
昨日は @k1LoW さんの「細かすぎて伝わらないCakePHP Pluginシリーズ」でした。

はじめに

継続的インテグレーションテスト駆動開発アジャイル開発 などなど、最近は開発手法の話題を目にする機会も多いかと思います。

私の所属する株式会社うるるでも、Jenkins を利用した継続的インテグレーションを採用しており、今回はこの分野で記事を書かせていただきます。

継続的インテグレーションCakePHP(Jenkins+CakePHP

こちらに関しては既に記事にされている方も多く、特に Ryuzee さんの
CakePHP2.0+Jenkinsで継続的インテグレーションを行う方法
が非常に参考になります。

なぜPhing?

Phing は、プロジェクトビルドシステムで、テストや検証などをPhingを経由して一括化することができます。

Jenkis 側にビルドコマンドを1つ1つ登録してもいいのですが、

  • ローカルマシンでもテスト・検証を一括で行いたい
  • 別プロジェクトを作る度に、Jenkinsにビルドコマンドを1つ1つ登録するのは面倒だな

なんてニーズは満たせません。

というわけで、今回は「 Phingを利用して CakePHP 2系プロジェクトを検証する際の設定を晒させていただこう 」と思っています。
コードの検証では、 CakePHP 向けに除外すべき部分なども入れ込んでみました。
宜しければ利用してみてください。

利用するPHPパッケージ

以下のパッケージを利用します。インストールは適当に行なってください。
CakePHP2.0+Jenkinsで継続的インテグレーションを行う方法
を参考にして頂くと、手早いかもしれません。

CakePHP 2.X 向け、build configs

github にビルドコンフィグを用意しました。
利用していただくと、スムーズに検証をする準備が整えられると思います。
https://github.com/uluru/phing-cakephp

以下、簡単に中身のご説明です。

  • build
    • ビルドログや、生成されるドキュメントなどが入るディレクト
  • build.xml
    • phing 用のビルドコンフィグ
    • テストサーバ向けビルド/ローカルマシン向けビルド の2種類があります。
  • phpcs.xml
    • PHP_CodeSniffer向けの設定ファイルです。
    • 準拠するコーディング規約(弊社では PSR2)、CakePHP プロジェクトでは除外すべき対象などが定義されています
  • phpmd-rule.xml
    • PHPMD の検証ルール向けの設定ファイルです。
    • CakePHP では、 $id といったような2文字変数が使われているので、「1文字変数だけダメ!」という形に変更してます。
  • phpunit.xml
  • phpunit-coverage-text.xml
    • 同じくPHPUnitカバレッジ計算用の定義です。
    • Cake テストコマンドが -coverage-text オプションに対応していないので、開発中はコマンドラインだけで完結するために、別定義として用意しました。

利用準備(ビルドコンフィグの設置)

ダウンロードしてきた CakePHP のソースには、既に build.xml があると思います。
これは CakePHP Core 自体のビルド用ファイルなので、削除してしましましょう。


その後に、github にあるXMLファイル一式を、CakePHPプロジェクトのTOPディレクトリに配置してください。
また同様にTOPディレクトリへ build ディレクトリを作成してください。

※ git submodule add 出来る形式にしておけばヨカッタ… とBlogを書きながら気づきました。その内改善するかも!?デス。

使い方

テスト環境向けビルド
$ phing build

database.php などの CakePHP 設定ファイルの入れかえも行います。
具体的には、以下のファイルがテスト環境向けの定義という想定です。

  • app/Config/core.php.testing
  • app/Config/database.php.testing
ローカルマシン向けビルド
$ phing build-local

開発者が気にすべき検証を一括で行うための方法です。
具体的には以下のテスト・検証が一気に行われます。

単純に CakePHP Test だけしたい
$ app/Console/cake test app Model/Foo

テストだけを行う場合は、普通にテストコマンドを叩いてください。
カバレッジの計算を行わないので、時間が短縮され、待ちストレスが減ります。

最後に

駆け足で書かせていただきましたが、要は「CakePHP用の各種ビルド定義を公開しただけ」ということです。
まだまだ間違いや改善点もあるかとは思いますので、コメントや pull request などで情報を頂ければ幸いです。

p.s.
なかなかCakePHPイベントには参加できていませんが、今回はAdventに参加できてヨカッタです。
次回はリアルなイベントなどにもお邪魔させて頂きます。

IE6 を見捨てたい開発者として、2009夏での状況を整理してみた

ホント厄介な存在ですよね、IE6って。
意味不明な独自実装の嵐は、まさに開発者泣かせ。その上、企業によっては未だにデフォルトのブラウザとして規定されていたりもしますね。


そんなこんなで日本市場ではIE6は、未だ必須対応の対象だったりしますが、
私個人的には「IE6のサポートなんてしたくない!」という気持ちで一杯なので、今日はそんな最近のIE6事情をまとめてみようと思います。

ついに「youtube」がIE6サポート打ち切りを決めたようです

YouTube、Diggに続いてIE6のサポートを打ち切りか? | TechCrunch Japan

ま、世界的な流れからみれば納得のタイミングですね。

ちなみに、IE6のシェアはこの1年で急激に低下中

Internet Explorer、3月からシェア11.4ポイントをFirefox、Safari、Chromeに譲る | TechCrunch Japan
これは歓迎すべきニュースですね。
皆さん、早くIE8にでも乗り換えちゃってください。

開発者にとってはやはりIE6は敵

開発者たちを救え!IE6の使用を中止せよ | TechCrunch Japan
世の中には、そんなIE6をやっつけようと「IE6 NO MORE」というプロジェクトまであるようです。


Code Samples - IE6 No More
こんな表示をWebサイトに埋め込んで乗り換えを促進させる なんてのはいいアイデアですね。

企業向けWebサービスアクセス解析結果から

筆者が運営に携わるWebサービスアクセス解析結果を検証してみました。

※対象となるWebサイトの規模感

  • 月間セッション
    • 40000
  • 月間PV
    • 100000
Google Analytics データ
  • ブラウザ全体におけるIEのシェア
    • 2009/01
      • 91.38%
    • 2009/07
      • 91.41%
  • IE内におけるIE6のシェア
    • 2009/01
      • 52.60%
    • 2009/07
      • 51.50%
データが語っていることを端的に言えば
  • 企業向けWebサイトではIEのシェアが圧倒的
  • IE6 のシェアは高止まり

ってことですね。

結論として、IE6は対応すべき?

アクセス解析結果だけを見れば、残念ながら日本企業向けWebサイトでは、IE6を対応せざる得ないという結論に至らざるえなそうです。

まとめ

今回の調査を終え、
IE6 終わりの日は着実に近づいている気がしてきました。
ただし、企業向けサービスではIE6対応は必須なんでしょうね。


一方で、最終的に IE6 がその幕を閉じるためには、互換性のあるIEマイクロソフトが出すことしかないんだろうと推測してます。
ただ、IE8 のレンダリングエンジンには互換モードがあったりするのですが、IE6 相当は何故無いのだろう?
IE8のレンダリングモードと互換表示 - builder by ZDNet Japan


というわけで、着実に終わりに近づいている気はするものの、まだまだ IE6 の息は続くようです。

結局 FriendFeed 経由のやめて、twitterfeed で Twitter に更新を流す

Blog の更新を Twitter に自動通知したかったので、ブログの更新情報は『Friendfeed』で流すことにした | IDEA*IDEA を試していたんですが、何度やってもうまくいかないので諦めました。
理由は未だに分かりません。
ただ、 FriendFeed への情報集約は便利そうなので、継続予定です。
Facebook に買収されるみたいですしね。


とはいえ、その場に踏みとどまっていても進展しないので、 twitterfeed.com : feed your blog to twitter を利用して更新を流してみることにしました。
うまく出来るかな〜。


個人的な話ですが、 Twitter を始めてから文章を書くペースがあがってきた気がします。
情報の川に情報を投げ込むのも、川を横から見るのも面白いからですかね。
世界中が夢中になる Twitter の魅力が、少しずつ分かりかけてきた今日この頃です。

「チーム・マイナス6%」に参加してましたw

ふと、梅雨明けしない東北のニュースを読んで、これも温暖化の影響?
と思ってしまった筆者です。
関東でもおかしな天気が続き、夏らしくない日が続いてますね。


そもそも「温暖化」の議題自体は、「純粋な地球規模での環境対策」という話から脱線しており、「先進国による後進国への搾取の継続」といった側面が強くなったためあまり好きではないんです。
先進国は後進国を恐れるために、足かせをハメタイでしょうね。
そして、その意図が分かっているから、同意したくない後進国
この綱引きの結果はでるのでしょうか?


ただ、「何もしないよりは何かをしたほうがいい!」という気概で、www.team-6.jpに以前参加していたことを忘れてました。
今でも、ゴミや電気・買い物など、出きることだけは継続しています。


というわけで、本ブログはwww.team-6.jpを斜めから応援しています。
サイドバーにはバナーを掲載。
ご興味あればどうぞ。

日本人の大好物マグロ、食卓から消える日はすぐそこ?

最近、マグロ関係のニュースをよく見ます。
横から垣間見ていると、マグロが食べられなくなってしまうのでは? と思ってしまう事も多いです。
マグロの入っていない寿司なんて、耐えられません。

マグロ絶滅・取引禁止に関する記事


こんなニュース読んでると、


「食卓からマグロが消える日」


的なことを思ったりしてしまいます。
特に、最近のワシントン条約を絡めた方向性は危険ですねー。
どう日本政府は立ち回るんでしょうか?


残された道は養殖

マグロの養殖って30年ぐらい前から取り組んでいるテーマみたいなんですが、まだ技術的に確立出来ていないんですね。
回遊魚は難しいんですかね〜。


個人的な思いだけを書けば


ぜひ、マグロ大国日本としては、世界に先駆けて技術を確立していただきたい!
技術的に確立できれば、輸出産業にもなるし、自給率もあがるし、イイコトづくめだしね。
そして、いつの日か


「食卓に養殖マグロが並ぶ日」


を実現させてほしいなっと。

Hatena Diary x FriendFeed x Twitter の連携。更新情報を自動で Twitter に。

最近、ブログの更新情報は『Friendfeed』で流すことにした | IDEA*IDEA で紹介されていたやり方を試してます。


が、どうしても以下の点が想定どおり動いてくれない。。。

  • Hatena diary の更新時間が、FriendFeed 上で正しくない
  • Hatena diary -> FriendFeed -> Twitter という、自動投稿がされない
    • Twitter 上に更新情報が勝手に掲載されるのが、一番の目的なのに・・・


というわけで、今日も設定を弄ったりしながらBlogを書きつつテスト。
Hatena diary との相性が悪いのかな〜

正しい「canonical」属性の使い方

2009冬、検索エンジン各社が一斉に導入した「canonical」属性。
検索エンジン3社、正しいサイトURLを認識させるcanonical属性を導入(URLの正規化) ::SEM R (#SEMR)


今日はこの正しい使い方をご紹介。
筆者は、使い方を間違え結構困ったことになったりしました ><。。

正しい使い方は「各ページのURLを埋め込む」方式

<link rel="canonical" href="そのページのURL"/>

新設された目的が「インデックスするURLを決定する」事という話なので、埋め込むURLが当該ページのものというのも納得ですね。

誤ってサイト内全てのページで同じ canonical属性を使うと

Google にインデックスされなくなります!
コレはまずいですよねぇ・・・


筆者は何も考えずに

<link rel="canonical" href="TOPページのURL"/>

を全てのページに記載してしまったため、痛い目に合いました。
これだとTOPページ以外インデックスされません。


Google先生

「同じURLでたくさんのページをインデックスするのはおかしい」

と判断されたのでしょう。
ま、canonical 属性の利用目的を忠実とも言えますね。
こちらとしては、よしなに判断してほしかったんですが・・・


ちなみに、Yahooはよしなにインデックスしてくれてました。
おぉ、結構フレキシブル!