ちょっと前からTravis CIにPHPUnit 3.7はありません

CakePHP de Travis CIな皆さんこんばんは。

タイトルのままなのですが、ちょっと前からTravis CIにはPHPUnit 3.7はありません。

なぜ「3.7」と言っているかというとCakePHPが4系ではなく3.7系でないとテストがうごかないからです。

https://github.com/cakephp/cakephp/commit/0c0448fe0b751ae5c86515d7853d729159fad5f4

というわけで、「テストは書いているしTravis CIで回しているけども、ちょっと最近ずっとバージョンアップをしていなかった」というリポジトリは、いざ機能追加で意気揚々とコミットしようものなら原因不明のテストエラーに遭遇するわけです。

テスト結果をみたら明らかなんですが。

いろいろ対応方法はあると思いますが、自分はcomposer.jsonrequire-devphpunitの記述を追加して対応しています。

https://github.com/dotcake/dotcake/blob/master/composer.json

https://github.com/dotcake/dotcake/blob/master/.travis.yml

というわけで

皆さんも久しぶりのテスト実行にはご注意を。

phpenv + php-fpm + nginxなVagrant + Ansible

GWノ成果デス

https://github.com/k1LoW/phpenv-nginx-ansible-vagrant

はじめてのnginx

GWは技術調査と趣味を兼ねてnginxとかと戯れていました。

そもそも nginxをまだ触ったことのないmod_phpどっぷりのPHPer だったので、id:cakephperからのBeerなお誘いに便乗して「nginxとは?」的なことをヒアリング。

php-fpmについてもさっぱり知らなかったのでここぞとばかりにヒアリング。

書いたメモは、次の日みたらかろうじてわかるレベルでした。

phpenv問題

phpenvにCHH版とphpenv版があること自体を知らなかったという。。

phpenvのどれを使うのがいいのかわからない

nginx + CakePHP

パーミッションやらdefault.confの書き方やら、まったく手探りでCakebookには助けられました。

で、

今回のAnsible Playbook構成の特徴は

  • CHH/phpenvをシステムワイドに使用するというアグレッシブ構成
    • あとは適当構成
    • rbenvのことなど考えていません
  • phpenvでコンパイルしたphp-fpmをserviceに登録して楽をするという怠惰構成
  • site.ymlのコメントをはずしたらCakePHP仕様のdefault.confで上書きするという俺仕様
    • ちなみにMySQLでもPostgreSQLでも使えるようにphpenvのdefault_configure_optionsをいじっている
  • Playbookのname属性は日本語でおk

というわけで

「もっと良い感じにできるぞ」という方はPull Requestお待ちしております。

dotcake organizationはじめました

2012年

2014年

本当に遅くなりました。。。

.cakeって何?

こんなのです。

gist4049895

この.cakeをいろいろなエディタ用のCakePHP拡張で便利機能を提供するための情報として使おうというイメージです。

そもそもの誕生の経緯というか原因は、おそらくCakePHP2系から、デフォルトではapp/ディレクトリにあるModel/ディレクトリやController/ディレクトリを簡単に移動できるようになったからかなーと思います。いわゆるApp::build()ですね。

というのも、例えば自分が開発しているEmacs用のCakePHP拡張のcake2.elを例にとると、ファイルスイッチ系の便利機能(M<->V<->Cの移動とか)の実装は、app/ディレクトリ以下にModel/ディレクリやController/ディレクトリがある前提で作ってしまっています。

そのように「決め打ち」で作っていると、いざApp::build()でディレクトリ構造を変えられてしまうと途端に機能しなくなります。

CAKE_CORE_INCLUDE_PATHで定義されるCakePHPのコアディレクトリもよくドキュメントルートから退避させることがありますね。

(例えばディレクトリパスのような)CakePHPプロジェクトの情報をいい感じにエディタ用CakePHP拡張に渡すためのファイルが.cakeです。

dotcake organizationって何?

https://github.com/dotcake

エディタ用CakePHP拡張の作者を集めて.cakeの仕様などを検討したりしなかったりするGitHubのorganizationです

.cakeは、もともとはVim用のCakePHP拡張のcake.vimで使われているJSONファイルで、最近やっとcake2.elでも活用できるようになりました。

それなら他のエディタ用のCakePHP拡張でも使えた方がいいですし、もしくはCakePHP拡張の作者が「いざ.cakeを活用しよう」と思ったときに活用しやすいもののほうがいいです。 各エディタのCakePHP拡張は独自の進化をしていますからね。

また、そろそろCakePHP3が出てきます。CakePHP1、2、3で.cakeが使えたらいいですよね。

あと、面白いことに 各エディタのCakePHP拡張の作者のほとんどが日本人 なんですよね。そんな作者同士でワイワイできたらいいんじゃないかなーと。各エディタごとで孤独ですから。

Sublime Text2のCakePHP拡張の作者さんも誘いたいです!

とりあえずdotcake organizationでやってみたいこと

.cakeの仕様を固めていきたいです

CakePHPプロジェクトから.cakeを生成するCakePHP Plugin Dotcake を作りました。ただこれはある意味ディスカッションのための実装であり、最終的には仕様に沿ったを.cakeを出力するための実装です。 おそらく、cake.vim相対パスにまだ対応していないので読み込めないですし、cake2.elではちょっと無駄な情報が入ってしまっています。

ただ、CakePHPからすると素直に出力してみているので、まずはこれを元にいろいろ話し合いができたらなあと思っています。

CakePHP拡張の機能について情報交換してみたいです

当然かもしれませんが、他のエディタのCakePHP拡張の機能を全て把握いるわけではありません。他の拡張の便利機能があったら パクりたい参考にしたいですし、内部の実装方法のアイデアとかも知りたいです。

とはいえ

まあなんとなく organization所属ってカッコいい気がする ので、dotcake organizationを作っただけで八割方満足しました。

というわけで

「はじめました」報告でした。

CakePHPにおける本番/開発環境の切り替え方法について再考

CakePHP3がそろそろ出る中、CakePHPにおける本番/開発環境の切り替え方法について再考です。

.htaccessに判定用の環境変数を設定

ここ数年、CakePHPにおける本番/開発環境の切り替え方法としてCAKE_ENV_MODEみたいな環境変数.htaccessとかに設定して、それでCakePHP内部で条件分岐をしていたのですが、

いざCakeShellを使おうというときは別途シェル側でも環境変数を読まないといけない

というデメリットがあって、構築するシステムによっては2箇所に環境変数を設定しないといけないのが面倒だと思っていました。

Capistranoで本番用ファイルをアップロード

最近はCapistranoを利用してデプロイをすることもあるので、Capistrano側の機構でdatabase.phpbootstrap.phpなどの本番用ファイルをアップロードするということもしました。

なかなか良い感じなんですがいまいひとつ。「このファイルはこのディレクトリに、このファイルはこのディレクトリに」という感じがいまひとつ。

cakephp-environment

https://github.com/nojimage/cakephp-environment

@nojimage さん謹製のファイルベースの環境切り替えプラグイン

詳しいドキュメントは こちら

メリットは以下のような感じ。

  • 環境用ファイルを置くだけで本番/開発環境の切り替えができる。CakeShellでもOK
  • @nojimageに聞いたところ「かなり活用している」ので実績ありとみてよい
  • ドキュメントが素晴らしい
  • CakePHPとの親和性が高い
  • CakePHP界隈の人が作ってる

php-dotenv

https://github.com/josegonzalez/php-dotenv

@josegonzalezさん謹製のファイルベースの環境変数読み込みライブラリ

.envファイルに保存した情報を読み込んで$_ENV$_SERVERを上書きして活用するイメージ

メリットは以下のような感じ。

とりあえず

cakephp-environmentとphp-dotenv、どっちにしようか考え中です。

みなさんはどうやって本番/開発環境を切り替えていますか?

"細かすぎて伝わらないCakePHP Pluginシリーズ"についてCakePHP勉強会 #2 でzenpre発表しました #ulurucake

細かすぎて伝わらないCakePHP Pluginシリーズ、第4回目。

とうとう、"細かすぎて~"が東京の勉強会に進出しました。

正しくは、福岡からリニューアルしたばかりの zenpreで遠隔で発表させてもらいました。

(zenpreリニューアル日程を死守したのはこの発表のため!)

今回は、今までのシリーズの簡単な紹介と、新しくLazyMan pluginを紹介しました。

k1LoW/LazyMan

cronの設定が億劫

cronの設定って面倒ですよね?面倒じゃない?そうですか。

面倒なcronの設定をするなら、その面倒さにあう、それなりの大規模な定期的な処理であればいいんですが、「キャッシュを削除したいだけ」とか言われた日には、cronを設定する手も鈍るってもんです。

そもそも「定期的である必要性」すら疑います。いいじゃん適当なタイミングで。

というわけで作ったのがLazyManです。

LazyManは怠ける

LazyManはいっちょまえに、「6時間間隔」とか「0 4 * * *」というcron的な時刻指定とかできるのですが、その通りに実行しません

なぜならWebアクセスをトリガーにしているからです。

なので、頻繁にアクセスされるサイトなら「だいたい6時間間隔」だったり「だいたい4時」に実行されますが、1日中アクセスされなかったら結果として実行をなまけます。

まあそんな程度でいいじゃないか」そういう処理にぴったりなのがLazyManです。

使い方

詳しくはREADMEテストケースで。

というわけで

細かすぎて伝わらないCakePHP Pluginシリーズでした。

CakePHP勉強会 #2での発表の機会をいただきありがとうございました。

また機会があれば発表したいです。(まだ発表していないシリーズあります。)

細かすぎて伝わらないCakePHP Pluginシリーズ "Yamd plugin"

好評の細かすぎて伝わらないCakePHP Pluginシリーズ、第3回目。

ちなみに好評かどうかの統計は非公開です。

今回はYamd pluginを紹介したいと思います。

k1LoW/Yamd - GitHub

プログラマはHTMLよりもMarkdownが好き(なはず)

Markdownいいですよね。

はてなブログに移行した理由も「Markdownが使えるから」ですし、移行組(プログラマ)の理由としても結構上位にあるのではないでしょうか。

で、

Webアプリを作っているとき、説明文章やヘルプなどちょっと長い文章を書くことがあるじゃないですか。

そのときにh1タグとかpタグとかaタグとか書くのがものすごくイヤなんです。

いやもうデザインはあたっているし!

今は文章を書きたいだけだし!

こういうときにMarkdownでかければいいのに!

と思っていて、気付いたら作っていました。

個人的な使い勝手に特化したMarkdownHelper

世の中にはすばらしいMarkdownのライブラリがあって、そのライブラリを使ったCakePHP Helperも既に何個かあります。

ただ、自分がやりたかったのは、「Markdownを変換したい」ではなく、「Markdownで記述して(自分が)楽したい」だったので、 YamdはMarkdownの文章部分を.mdファイルとして切り出すことができる機能を持っています(簡単にいうとElement機構みたいなもの)。

.mdファイルにできると何がいいのかというと、「Emacsのmarkdown-mode Markdown用のエディタが使える」ということです。

これでやっとプログラマが楽をできます。

使い方

いつか書く(テストケースを見たらわかるかも)

長文用I18N環境としてのYamd

さらに、Yamdは「長文用のI18N環境」として使うことができます。

簡単にいうとConfig.languageによって読み込む.mdファイルを(該当ファイルが存在すれば)変更するようになっています。

これで「CakePHPI18N機能だけでは貧弱だけど、がっつり作りこむほどではない」ときに有効活用できます。

というわけで

細かすぎて伝わらないCakePHP Pluginシリーズでした。

また伝わらなそうだな。。。

開発中の簡単な情報共有のためにDebugMemo plugin for CakePHPを作ってみた

CakePHP 2.3.0がリリースされましたね。

今日の社内技術発表では、CakePHP2.3.0でのModel::find('first')の返り値の変更について紹介されていました。

CakePHP、ますます使いやすくなってように思います。

開発中システムのメモや気づいた点はどこで共有するか

システムがだんだん動くようになってくると、ブラウザで画面を確認することが多くなります。

場合によっては、クライアントの人も開発中のシステムの画面を見ることがあるのではないでしょうか。

そんなときに見つけたバグやデザインの問題、その他気づいた点はどこで共有していますか?

関係者全員でRedmineやCandyCaneといったプロジェクト管理ソフトウェアでうまく情報共有がされているときは、それで全く問題ありません。

ただ、

  • 「そこまで大げさでなくて良い」
  • 「そういった環境がない」
  • 「クライアントに覚えてもらう時間がない」

ということもあると思います。 さらに言うと、

  • 「気づいたそのタイミングで共有したい」
  • 「共有情報を関連した画面で確認したい」

ということもあると思います。 ということで、プロトタイプ的に

システムのあらゆる画面("controllers/action"ベース)で、その画面ごとにメモをとれるPlugin

を作ってみました。

DebugMemo plugin

https://github.com/k1LoW/DebugMemo

設定してしまえば、あとはお馴染みのDebugKitのように全ての画面の下部にバーが表示されるので、クリックして開いてメモを保存するだけです。

f:id:k1LoW:20130130001328p:plain

f:id:k1LoW:20130130003114p:plain

あえて「原則的に1画面1メモ」なので、簡単な情報共有として使いやすいと思います。

さらにEmailConfig(app/Config/email.php)に$debug_memoを設定すると、メモ更新タイミングでメールを送信するようになります。

というわけで

簡単な情報共有のためにDebugMemo pluginを作ってみました。

自分もまず使ってみて、機能追加などをしていきたいと思います。