8時間耐久CakePHP2勉強会を大阪と福岡で開催しました。
予定していた通り、8時間耐久CakePHP2勉強会を2012/2/5に大阪、2012/2/12に福岡で開催してきました。どちらの開催でも20人近い方々に参加していただき、CakePHP2の学習をしつつ参加者の交流ができた時間になったのではと思います。参加して頂いた皆さん、お手伝いなどご協力していただいた皆さんに改めてお礼を申し上げます。
コンテンツの準備や体調など様々な困難がありましたがひとまず、東京・大阪・福岡の3都市ツアーを完走することができました。引き続き調整中の名古屋、北海道に備えて行きたいと思います。
2/5 大阪編

photo by @tanakahisateru
大阪では十三のメッサリバティのご厚意で会場を提供して頂きました。広々とした部屋に河原の近いロケーションは開放的でした。毎週金曜日にはテックスペースというコワーキングイベントをしているそうで、今後大阪エリアのエンジニアなどにとって注目のスポットになりそうです。またエンジニアリングなどに限らず交流する為のオープンコーヒーというイベントも隔週の土曜日に開催しているそうです。
内容としては下北沢で開催した際の内容をブラッシュアップしつつ、その場での質問に応じてフォームの出力の処理などをデモしました。初めてお会いした方が多かったですが皆さんとても熱心にコーディングをなさっていたように思います。また個人的には公演中にしゃっくりが止まらなくなる現象が下北沢よりも1時間ほど早めに発生し、苦しみました。結局しゃっくりが泊まったのは日付が変わるくらいまで出続け、その間は吐き気との戦いという気力と体力を試される時間でした。
当日のツイートにいくつかTIPS的なものが残っていますね。
2/5 福岡編

photo by @ggaoki
福岡では幅広く知られていると思われる(参加者のほとんどが以前、コスタに来た事があるとの事)ギルドカフェコスタに会場をお借りしました。マイクや大きなスクリーンを用意していただいたお陰で進行もかなりスムーズでした。ギルドカフェコスタはすごくいい環境なので福岡を訪れた際には是非立ち寄ってみてください。おそらく過去3回の開催の中で最も参加者がコーディングする時間を長めにとった内容になったのではと思います。これについてもFusicの方々などの経験者によるサポートのおかげです。
また酔い止めを昼食後に服用し、マイクを使う事で大声を出すのを控えた結果、しゃっくりが出そうになった事はありましたが従来のような吐き気を伴うような状態にはならずに済みました。これには心底ほっとしています。
実施中にその場で議論された気づきはいくつかがツイートされていました。
発表資料
容量制限にひっかかってしまい、SlideShareにアップできませんでした。Speakers Deckには制限が無いようなのでとりあえずこちらにアップしました。8時間やるとどうしても後半の集中力は落ちてきますのでモデルやビューは本当に必要なところだけをピンポイントという感じになっています。とはいえCakePHP2で最低限のコーディングを進める為の流れは網羅できているかなと思います。
今回は録画などはしていません。セッション内容は東京開催分のUst録画をご覧ください。
OSC大分2012で高校生のLTを見た
2月 12, 2012 by yandod · Leave a Comment
今年最初のOSC、オープンソースカンファレンス大分が開催されました。
大分は過去にもPHP温泉に誘われたりしたこともあり気になっていた土地なのでCandyCaneの枠を応募して参加することにしました。
参加者層もなかなか幅広く、180人ほどいたという参加者の中には女性の姿も目立ちました。(同じくらい東京からの遠征組も居たような)
まだバタバタしていてお会いした方への連絡なんかも滞っていますが、いくつか心に残った点を。
九州のオープンソースは元気
お会いした方の中には大分の方も多かったですが、同じように熊本や鹿児島、福岡といった近県からの参加者も多かったです。九州における交通アクセスとして新幹線や高速などが重要だそうで、九州山脈の隔たりをどう超えるのかがカギのようです。とはいえ3トラックあるセッションはどのコマもほどほどに人が入っており、けっこう大きいイベントだったように思います。
またWordPressのカンファレンスを鹿児島でやるという話やOSCを熊本でやるといった決意表面をLTで発表している方もいらっしゃいました。
コーポレートサイトにちょうどいい、baserCMSの発表もゆるふわな感じで大爆笑でしたw
baserCMSはリポジトリをgithubにうつしてCakePHP2への移行なんかをしてくれたらいいのになーと思っていますがさてさて。
現役高校生によるLT
高校生のLTというのを初めて見ました。が、これがすごく発表もうまくて余った時間もうまく消化していてすごいなーと思いました。自分で情報も適切に探しつつARで遊んだりしているようでこれはすごい。来年の受験が怖いそうですが、またどこかで発表などを見てみたいなと思いました。
CandyCane好評だった
自分自身はCandyCaneの導入の仕方などについて発表をしてきました。RedmineのコミュニティなんかだとRedmineを知っている方が多かったですが、WEB系ではない方にとってはRedmineやRubyに馴染みが薄いという状況があるようでした。
海外からの問い合わせがCandyCaneには頻繁に来るのにも似ていますが、まだRedmineを導入していない所ではCandyCaneの活用の可能性はかなりあるんじゃないかなと思いました。
今日はこれから8時間耐久CakePHP2勉強会の福岡ラウンドです。先週の大阪の分もまだまとめていませんが、こちらも改めて。
atoum シンプルかつ高速なPHP5.3向けユニットテストフレームワーク
2月 9, 2012 by yandod · Leave a Comment
ひょんな事から教えてもらいましたが、フランスの開発者が中心に開発されているPHP5.3以降用のユニットテストフレームワークがあるそうです。”atoum“というライブラリはネームスペースやPharを使って動作する形でシンプルで高速なユニットテストを提供しようとしています。
githubからダウンロードしてみたコードをとりあえずテストしてみました。
$php bin/atoum --testIt => Test duration: 0.01 second. => Memory usage: 0.75 Mb. > Total tests duration: 13.94 seconds. > Total tests memory usage: 387.50 Mb. > Running duration: 16.10 seconds. Success (131 tests, 949/949 methods, 17412 assertions, 0 error, 0 exception) !
テストケースの書き方はこんな感じ。
<?php namespace vendor\project\tests\units; require_once 'path/to/mageekguy.atoum.phar'; include 'path/to/project/classes/helloWorld.php'; use \mageekguy\atoum; use \vendor\project; class helloWorld extends atoum\test { public function testSay() { $helloWorld = new project\helloWorld(); $this->assert ->string($helloWorld->say())->isEqualTo('Hello World!') ; } } ?>
開発者も多く、xUnit互換のレポートの出力もできるのでJenkinsとの統合も出来るとの事。完成度はありそうなのにWikiもフランス語しかないので情報がありません。PHP5.3以降な感じのテストをしたい方はためしてみると壮大なブルーオーシャンが広がっている気がします。
HipHop for PHPでCakePHP2.1をC++にコンパイル
2月 1, 2012 by yandod · Leave a Comment
PHPをC++にコンパイルして高速化するHipHop for PHPですが、CakePHP2をHipHop上で実行したという話が公開されていました。
JoseはCakePHPのコアデベロッパの一人でこのHipHopに対応させる為のブランチの管理は彼が行なっていたようです。そもそもの問題としてHipHopは全てのrequireなどを静的に解決させる必要があり、動的な読み込みを行うフレームワークとは大変相性が悪いです。
このJoseの作成したプラグインはクラスのrequireリストを作成し、HipHopのコンパイラに与えることでフレームワークの動作を可能にするというアプローチをとっています。
大まかな手順は下記の通り。
- CakePHPのHipHopプラグインの導入
- クラスマップの生成
app/Console/cake HipHop.ClassPath - フロントコントローラーの差し替え
cp `app/Plugin/HipHop/Config/webroot/index.php app/webroot/index.php - コンパイルの実行
粘り強く個別の問題に対処した事が伺える手順が元のポストにあります。トリッキーな構造になっていなければCakePHP2のアプリをHipHop上で稼働させることができそうですね。ベンチマークが行われていないので興味がある方はぜひトライをしてみるといいのではないでしょうか。
CakePHP開発者によるPHP5.4の紹介資料が素晴らしい
1月 31, 2012 by yandod · Leave a Comment
CakePHPの開発者の一人であるGraham Weldonさんが公開したPHP5.4についてのスライドがまとまっていてとてもわかりやすいです。”begin your love affair with traits”(traitsと恋に落ちよう!)と題されているとおりPHP5.4といえばtraitsなわけですが簡潔なサンプルが付いているのでまだtraitsわからないよという人は必ず目を通しておきましょう。
まだまだPHPの中心は5.2といったところのようです。(CakePHP2はボリュームゾーンである5.2を対象にしているわけですね)
これがtraitsを用いたログ処理の実装の例ですね。
スライドには他にも様々な新機能についての紹介が載っています。PHPを書く機会のある方は目を通しておいて損はないと思います。
告知:大阪と福岡でCakePHP2のワークショップを開催します!
8時間耐久CakePHP2勉強会@大阪 (2/5)
http://atnd.org/events/24800
8時間耐久CakePHP2勉強会@福岡 (2/12)
http://atnd.org/events/24868
8時間耐久CakePHP2勉強会を大阪で開催します!
先日下北沢で開催した8時間耐久CakePHP2勉強会を今週末(2/5)に大阪で開催します。
参加登録はATND上で受け付けています。
http://atnd.org/events/24800
フレームワーク初心者でもCakePHPを動かせるような内容になっていますが、すでにCakePHPを使っている人でまだCakePHP2を使っていない人にとってはポイントの確認もできるかと思います。(プラス始めての方のヘルプもお願いすると思いますが)
時間も長いこともあって前回もざっくばらんに質問をしたり雑談したりと和気あいあいとした会でしたので今回もそんな雰囲気になればよいなと思います。
また2/12には福岡で同様の勉強会を開催する予定です。その他の都市も要望があれば行ってみたいと思っていますので希望があればお知らせ下さい。
初心者向け 8時間耐久CakePHP2勉強会を開催しました
1月 27, 2012 by yandod · 2 Comments
追記)大阪でも2/5(日)に開催します!
http://atnd.org/events/24800
CakePHPを勉強したいという@shinichiNさんの要望に応えて8時間耐久でCakePHP2を学ぶという勉強会を1/25に下北沢OSSCafeで開催しました。当日はUStreamも常時30人前後の人が視聴しており、現地の参加者も含めて50人弱が耐久形式で最新のCakePHP2の利用方法を学びました。
なお今回のターゲットの@shinichiNさんはフレームワークなどは未経験とのことでしたので、WordPressを使ったり簡単なPHPスクリプトを自分で書けるくらいの人がCakePHPの基本を理解するというのが今回の主旨です。
MVCモデルとは牛皿定食である

フレームワークを使ったことが無い人にとって、とっつきにくいのがMVCモデルの考え方です。ModelがデータベースでViewがHTMLでという説明を聞いているとまるでこれまで作っていたプログラムとまったく違うものを作らないと行けない気がしてきます。しかし実際のところMVCモデルは大きくなったプログラムを分割する為の経験則です。牛丼を牛皿定食にしても内容物として肉、玉ねぎ、お米があることに変わりはないようにMVCモデルもこれまで作っていたプログラムを一定のルールに従って分割しただけです。
普通のPHPスクリプトの例で考えてみましょう。(クリックで拡大)

上記のスクリプトはなるべくシンプルにデータベースのデータを画面に表示するという普通のPHPスクリプトですが、このうちデータベースに関連する処理とHTMLに関連する処理を別の場所に移すというふうに考えます。(このスクリプトはDB処理とHTMLが一箇所にまとまるように書いてありますが、分散していた場合はそれぞれを抜き出して移動します)
DB処理をモデルにHTMLをビューに移してみました。そしてそれでも残った元々の部分がコントローラーになり、モデルとビューを呼び出しています。スクリプトの内容は分割してincludeで呼び出すようにしただけで全く同一です。こういったものが独自フレームワークと呼ばれCakePHPが一般的になる前からも大きなシステムでは活用されていました。また自分流でスクリプトを書いているとなんだかんだでこういった形を使うようになってきます。
フレームワークを使う場合は各フレームワークごとに決められた場所にMVCのそれぞれの部分を配置することになります。CakePHPの場合であれば下記のような形です。
CakePHP2インストールの肝はPDOとmod_rewriteの確認
CakePHP2はCakePHP1やWordPressなどと違ってPDOというPHPの機能を使っています。インストールの際にはPDOが利用できることをphpinfo()で確認します。またXAMPPやMAMPPでは初期状態ではmod_rewriteが有効になっていません。mod_rewriteを有効にするか、core.phpのAPP.BaseUrlの設定を有効にしてください。
またYukio SaitohさんがWindowsの場合の設定のポイントをまとめて下さいました!
Controller:: ディスパッチャを理解せよ
多くのフレームワークは指定されたURLに応じた所定のコントローラーを呼び出すという機構を採用しています。これをCakePHPではディスパッチャーが行なっており、指定されたURLに応じたコントローラーのメソッドを呼び出します。作ったコントローラーを呼び出す為のURLを考えたり、とあるURLに対応するコントローラーをどうすれば作れるのかを理解すれば自分で作った処理を自由に呼び出せるようになります。
この際に命名規則に従う必要もありません。$usesやアクションの設定を省略した場合は命名規則に従ったデフォルトが呼び出されるだけですので。きちんと指定をすれば自由に名前をつけられます。
Model:: find()を極めろ
CakePHPはモデルの機能が中心といってもよいフレームワークです特にfind()メソッドを使えばほとんど全てのケースのデータベース処理を自動化できます。このfind()に慣れれば慣れるほどにCakePHPでの開発がスムーズになります。
またこのfind()が返却する結果と要求するオプションは大きな配列変数になっています。
配列に依存しすぎという批判もありますが、とにかくえいやと配列を渡すとうりゃっと配列が返ってくるのがCakePHP流なのでそれに慣れるのが早道です。(そもそもPHP自体が配列中心なところがあるので僕はこの設計は成功していると思っています。)
View:: URLやフォームはヘルパーで自動生成せよ
ビューに関しては app/View/Layouts/default.ctpを変更してヘッダ、フッタなどを変更する事と、ヘルパーを利用したタグの自動生成くらいしか覚えることはありません。とりあえずはヘッダなどを任意のデザインに差し替えて、テンプレート内にURLを書くようなタグでヘルパーを使うところから始めればよいでしょう。
お疲れ様でした
実際にはいろいろとデモンストレーションや質疑応答をしながらの8時間の勉強会でしたが、多くの方がCakePHPを好きなように動かせました。(ソースコードを一字一句書き写すのではなく、好きな名前をつけたりしながら各自が確認をしていました)細かいことを詳細に確認するのも大事ですが、まずは全体像を掴んでいじり回せるようになる事が第一歩かと思います。
今回は下北沢OSSCafeという素晴らしい環境で、なおかつ@cognitomさんのハイクオリティUStreamの録画が残っています。動画を全画面表示するとソースコードすら確認できる脅威のクオリティをご堪能ください。(残念ながら午前中のところは録画がありません)
8時間耐久CakePHP(1/4) – Controller編
8時間耐久CakePHP(2/4) – Model編
8時間耐久CakePHP(3/4) – Model編の続き
8時間耐久CakePHP(4/4) – View編
デモで使っていたプロジェクトはとりあえずgithubに置きました。
https://github.com/yandod/shimokita8
同様の勉強会を大阪と福岡でやろうかなと思っています。他にも開催の要望があれば場所さえあればなんとかなりますのでご相談ください。
ダッシュボードからプラグインのインストールが可能に – CandyCane v0.8.5リリース
CandyCaneダウンロード
(ページ下部にZipとtar.gzの圧縮ファイルへのリンクがあります)
RedmineをPHPに移植したタスク管理システム、CandyCaneのバージョンが0.8.5になりました。一部で話題になったにゃーんダウンチャートを生んだプラグイン機構を改良し、プラグインのインストールとアンインストールがダッシュボードから出来るようになりました。またプラグインのひな形を生成するシェルコマンドも同梱され、プラグインの開発をすぐに始める事ができます。
今回は作例としてチケットに「イイね」の機能を付けるLike Itプラグインを作成してみました。CakePHPベースでの開発はやはり効率がよくかなり少ないコードの分量で機能を実装する事ができたと思います。このプラグインのデモ動画はこちらです。
プラグインのカタログはgist上で管理しています。みなさんが作成したプラグインもgithubで公開されていればカタログに追加する事でダッシュボードからの配布が可能になります。ガントチャートのような独立性の高い機能については是非ともプラグインとして実装された事例が出てくればと思います。また僕自身が公開しているプラグインもそうですが、ネタっぽいものでも作ってみると勉強になるのでCakePHPの学習題材としても良いのではと思います。
開発にかかった時間は25時間。また今回から@okonomiさんが送ってくださったプルリクエストも含まれています。
- Bug #207: Supporting plugin architecture. Part3
- Bug #208: Kindly notice mod_rewrite availability.
- Bug #209: list is broken on render if it has more than 3items.
- Bug #211: Plugin generation by console.
- Bug #214: 「トラッカー」画面でワークフロー未設定のエラーメッセージが表示されない
- Enhancement #185: “Like” feature for issue.
- Enhancement #210: Get plugin catalog from remote.
まだバグつぶしや実現できていない構想もありますが、プラグイン機構で自由に機能を追加しやすい土壌が整ってきました。機能だけでなくデザインなどについても自由に組み替えて利用できるようなシステムにしていければよいなと思います。インストールも簡単ですので、お時間のある方はインストールの上でいじってみたり、プラグインを作ってみて貰えれば大変嬉しいです。
最近の反響
2011年を振り返る(206投稿,176コミット,8プレゼンテーション)
12月 31, 2011 by yandod · Leave a Comment
激動の2011年が終っていきます。Nyan CatをBGMに今年の活動を振り返ってみようと思います。
ブログ記事
今年は新たに英語の情報を紹介するA-Listersというブログを立ち上げ、このブログと英語版のブログと併せてかなりたくさんのブログ記事を書いた一年になりました。それぞれのブログに投稿した記事数をせっかくなので数えてみます。
- A-Listers 119
- candycane development 47
- CandyCane yet another Redmine on CakePHP 5
- 個人の英語ブログ 35
合計で206本。こんなに書いたのは初めてです。ただ夏頃に体調を崩したのでここまで書くと健康を害するようなのであまりお勧めできません。
オープンソース活動
今年はCandyCaneに大きな手応えを感じる事が出来た一年でした。さまざまな国からプルリクエストや感想などが届きはじめ、業務で利用しているという話も多く聞きます。思い描いていた機能を実現するまで後少しなのでこのまま頑張って行きたいですね。また、「CandyCaneで起業すればいいじゃん」というアドバイスも国内外から受けています。これについても思案中です。
githubでのコミット数はcandycaneとにゃーんダウンチャートのリポジトリの合計で176コミットでした。どうしても私生活が忙しい時などは引っ張られてしまいますね。
candycane$ git shortlog -sn 43690c..06ed
118 Yusuke Ando
88 Graham Weldon
46 yandod
13 ha1t
3 elboletaire
3 Steve Grosbois
3 Michito Suzuki
2 Òscar Casajuana
1 hiromi2424
1 tomo
cc_nyancat$ git shortlog -sn
13 Yusuke Andoプレゼンテーション

プレゼンテーションの活動についてはCandyCaneの発表を中心に8回行いました。特に今年はイギリスで行われたCakeFestでの発表に採択されたおかげで初めて海外のイベントで発表する機会を得たのが良かったです。英語的には反省点はいくらでもありますが、発表した事によって世界中からフィードバックを得る事が出来たので成功したと思っています。とはいえもっとスムースに話せるようになりたいので英語の練習はまだまだ欠かせないです。
発表の後に得たフィードバックについては何本か記事を書いて多くの方に読んでもらえました。
CakeFest 2011に参加しました。
CandyCaneの発表で感じた発信と恩返しの大切さ
プログラマがコードを書き、公開する事の価値
とにかくアウトプットが大事
日本では震災の影響や海外進出が身近になったことでいろいろと日本のスタイルに対して物を言う空気が出来て来たように思います。自分自身も思う所はありますが、そういった事に対して議論をしているだけで労力を使うよりは自分が理想だと思う事を実行に移して、アウトプットを出して行く方が良いのではと思っています。
来年も引き続きアウトプットを意識して自分が良いと思った事を実行に移す一年にできればよいなと思います。
各地、各方面でお会いした皆様やオンラインでやりとりした皆様には大変お世話になりました。来年も宜しくお願い致します。
昨年の振り返り記事
2010年を振り返る
Windows Azure + PHPな環境でSymfonyを動かす #symfonyadvent
12月 22, 2011 by yandod · Leave a Comment
このエントリーはSymfonyアドベントカレンダー2011に参加しています。CakePHPの人として知られている私ですがSymfonyも業務では4年以上利用し続けております。今回は22日目担当とWindows Azure + PHPの環境でSymfonyを動かしてみました。いろいろと面倒なところがありそうな予感もしますが、これまでの知識を元に公式のチュートリアルを動かす事を目標にやってみます。
SQLite拡張の有効化

ではWindws Azure PHPプロジェクトを新規に作成し、Symfony2.0.7をダウンロードしたものをソースに取込んで動かしてみます。画面のようにSQLiteの拡張が見つからないというメッセージが表示されます。Azure SDKに同梱されたPHPではSQLiteが有効になっていなかったので、php/php.ini 内のコメントを外し、SQLiteを有効にします。

これでフレームワーク部分は動作していますので、デモ用のバンドルに含まれている画面などは上記のように動作しています。
データベースの接続設定

SQLiteを有効にした事で開発用のブートストラップからダッシュボードにアクセスできます。ここからデータベースの接続設定をしていきますが、残念ながらここにはMySQLやPDO_MSSqlといった選択肢しかありません。もちろんMySQLなどをAzureで動作させればここから設定をすれば問題はありません。とはいえせっかくAzureですからAzureSQLに接続して動かしたいですよね。
AzureSQLに接続するにはmicrosoftから配布されているsqlsrv拡張を導入する必要があります。Azureプロジェクトに同梱されているバージョンに併せた拡張をプロジェクト内にコピーして、これもphp.iniから正しく読み込まれるように設定します。
extension="php_azure.dll" extension="php_mysql.dll" extension="php_sqlsrv_53_nts_vc9.dll" extension="php_pdo_sqlsrv_53_nts_vc9.dll"
またデータベースへの接続設定はダッシュボードからではなく直接設定ファイルを編集して設定します。
[parameters]
database_driver = pdo_sqlsrv
database_host = YOUR-PC\SQLEXPRESS
database_port =
database_name = symfony
database_user = sa
database_password = yourpasswordDoctrineの操作

ここまでの設定を行った事でDoctrine経由でのスキーマ操作等が行えます。シェルを実行した際には少しエラーが出てしまいますが、タスクの実行自体に問題はありません。ソースコードの変更を伴うようなタスクを実行した後はプロジェクトを開発ファブリックに再度反映する必要がある点には注意してください。
ここまでの動作確認は開発ファブリック上で行っています。このプロジェクトを本当にデプロイできるかどうかを試してみたいのは山々なのですが、残念ながらAzureのアカウントを持っていません。とはいえsqlsrv拡張を通じてAzure SQLにアクセスできる事は周知されているので問題ないと言って差し支えないでしょう。




























