CakeFest2016レポート


We-bake-with-CakePHP

はじめに
2016.05.28, 29(土、日)の 2 日間で CakeFest2016 がアムステルダムで開催されました。昨年のニューヨークに続いて参加してきたので、内容を報告します。また、2016/06/22(水)の夜にイベントを開催しますので、興味のある方はそちらもご参加ください。

結構長くなってしまいましたが、発表者のスライドや動画なども埋め込んでいるため、読み応えがあると思っていただければ幸いです。多少カンファレンスの時系列とは違う箇所がありますが、予めご注意ください。

カンファレンスの全体を通して
DSC02678
参加者は合計で約 80 人くらい、半数以上がおそらくヨーロッパからの出身と思われます。日本人は一緒に行った私達だけの 3 人でした。ヨーロッパ開催だと、こっちが地元の方が多いかなと思いました。カメルーン出身の方とお話したのですが、この方は今ドイツでお仕事をしており、車で数時間できたとのことでした。EU の国の近さを感じるお話でした。

去年のように CakePHP のロードマップについてしっかりと発表はされず、今年は CakePHP3 の使い方について発表されることが多かったです。しかし、カンファレンス参加者に聞き歩いたところ、みんな CakePHP2 系を使っていました。過去の資産を引き継いでいるケースが多いようで、この辺を意識して CakePHP3 を使う便利な方法が色々紹介されたのかなと思いました。

去年と同様、CakePHP から少し周縁の発表もありました。「PHP7」、「React PHP」、「APIの作り方」、「ファイルシステムの危なさ」など、再確認できたりプラグインの名前をメモできたりと有益な情報が多かったです。ちなみに、このタイミングでもう所感を挟みますが、一番のサプライズは全ての発表においてそこそこ聞き取れたということです!内容が素晴らしいのはもちろんですが、さりげなくこういうことが嬉しいです。ゆっくり話してくれたのか、普段活動している公式ドキュメントの翻訳の成果が表れたのか、ちょっと頭良くなったのか、何が影響しているのかわかりませんが感動しました。

CakePHP Keynote – Larry Masters
最初にロゴの変更が発表されました。また、それに合わせて公式ページもデザインが変更されました。見慣れた公式マニュアルのドキュメントもガラッとおしゃれになりました。やはりこういったインパクトは大事ですね、発表の開始から見事に引き込まれていきました。こちらの動画は過去から現在の新ロゴに至るまでの遷移になります。クールです。音声ありで再生されることをお勧めします。

現在、CakePHP の Contributer は 418 人、CakePHP3 の Commit は 29791 とのこと、相変わらず大きなフレームワークの一つであることを再確認される内容でした。CakePHP3 系のリリースはすでに 58 回行われているようで、気づけばリリースから 1 年以上経っていることも納得です。ちなみに、コアコミッターの Mark Story のコミットは、他のコアコミッターの合計よりも倍以上多く、彼のハードワークに驚きました。

英語がきちんと聞き取れているか不安ですが、CakeFest は年に 2 回やることになったようです。スライドには、奇数年に east coast と west coast、偶数年に east coast と international と 2 行にわたって書いてありました。結構従来からの大幅変更と思われるのですが、みんなそんなに驚いてなさそうだったのでひょっとしたら間違いかもしれません。いずれにせよ世界のどこか(international)というキーワードで east/west coast 以外で開催されるのは楽しみです。また、2017 年の開催地が発表されました。Pace University / east coast とのことで、おそらく2015 年のニューヨークが再び選ばれたようです。

Meetup CakePHP というのを希望があればどんどん開催していきましょうとアナウンスがありました。私たちはすでに公式ドキュメントの翻訳を週に1 回のペースで行っていますので、これは積極的に開催していこうと思います。この辺は発表の後に色々あったので本文最後の方に詳しく書きます。

Megan Lalk さんが新しいコミュニティマネージャに就任されました。この方は南アフリカ出身の女性です。私はちょっとしたことから数カ月前からやり取りしていたのでちょっと親近感を湧いて彼女の自己紹介を聞きました。

最後に LT のアナウンスがあり、また、みんなでケーキを食べようとの言葉で締められました。ちなみに、LT は今年は 10 分とのこと、従来の 5 分からの変更で私たちが準備してきた 5 分用のスライドをアドリブでどう膨らますかが勝負になりました。

コアコミッターとのQ&A
DSC02675
昨年に続き今年もコアコミッターへの質問タイムがありました。以下、私が気になった Q&A です。

日常の勤務以外に、無給で CakePHP の開発に携わるモチベーションをどうやって維持していますか?
そもそもやるのが楽しい
勉強になる
グローバルチームでの開発は素晴らしい経験
ブラジル、デンマーク、オランダ、カナダ、ニューヨーク等が繋がるのは楽しい
コミュニケーションはどうやって取っていますか?
slack と github の pull request
世界中にコミッターが散らばっているので、起きれば誰かがonlineだから基本コミュニケーションできるとのこと
何が話されているかはスレッドを追えば理解出来る
リモートワークの秘訣はなんですか?
おそらく個人のモチベーションにかかっている
私の所感は一言になりますが、妻や家族の理解がないと、おそらくコアコミッターは続けられないと思いました。

CakeFest Tokyoのお誘い!!
カンファレンスの最中に、Larry から CakeFest Tokyo をやれないか?とお誘いを受けました。結構びっくりしましたが、今まで何回か検討はされていたようです。ただ、日本のユーザの関心やホテル事情、イベント会場関連など、コアメンバーが分からないポイントを相談できる人が見つからず見送られていたようです。翻訳とか大丈夫でしょ?と聞かれ、とっさにオッケーと答えました。

CakeFest を東京で開催するため、まずは公式に MeetUp をバックアップしてくれるとのことです。この MeetUp を通じてユーザのコミュニティを作り、開催できる準備があることを伝えれれば、海外のカンファレンスを東京に呼ぶことができます。積極的に MeetUp を主催していきますので、関心のある皆様、奮ってご参加ください。

CakePHP MeetUp コミュニティページ

外国の友人が訪問してきた時はいつも受け入れをやってきましたが、一度に多くの外国人を受け入れるというのは想像つきません。実現したらどうなるんでしょう。考えるとワクワクしてきます。

Lightning Talk での登壇
DSC02730昨年はカンファレンスの雰囲気に飲まれて全く気にもとめていなかったのですが、今年はアドバイスを受けて登壇してきました。その時の様子を撮影頂いたので紹介します。
報告イベントで上映したものと同じになります。なお、左の 2 人が登壇しました。右の 2 人はコアコミッターの Mark と Jose になります。

Lightning Talk at CakeFest 2016 Amsterdam: Junichi Okuyama

Lightning Talk at CakeFest 2016 Amsterdam: Mizuki Ishiguro

個別のスライド
ここからは各発表の内容になります。公開資料として見つけられたものはなるべくあげましたが、全て見つけることはできませんでした。私のメモを合わせて記載しておりますが、間違っていたらご指摘いただけると助かります。

Effective Background Processing with CakePHP3


スケジュール化されたタスクをやめることで、すぐに実行、再開が簡単、特別な時間に何かをやることから避けるというメリットを挙げられました。そのためには RabbitMQ というのを利用すると実現できるようです。色々注意点や Tips が説明されましたが、最後に「機械を信用しないでね」と締めたのがオチとして面白かったです。

What to Expect from PHP 7


php5 系は結構寿命切れるのが早く、php7.0 はまだサポート内だけど、意外とサポート切れるの早いから注意が必要とのことです。php7 は Hack 言語に影響されてパフォーマンスが早くなったとのことで、外的要因でプログラム言語が進化していくのはオープンソースの醍醐味かなと思いました。「json extentionが良くなった」、「static analyser の紹介」、「foreach が変わった」、「Hex 番号のキャスト時の取り扱い」などを挙げられました。

Implementing an API in CakePHP


結構知っていることだったので、再確認として内容を聞いていました。検索キーワードとして拾ったのは find()->bydrate(false); です。

Getting started with ReactPHP


気になるタイトルでしたが、あまりよく分かりませんでした。以下にデモコードが公開されているので、事前知識を少し蓄えてからチェックしようと思います。

https://github.com/WyriHaximus/cakephp-reactphp-cakefest2016

The future of HTTP messages in CakePHP


CakePHP は PSR-7 に準拠していくとのことです。この発表は、同行された瀬川さんが解説してくれたおかげで非常によくわかりました。私はそもそも HTTP の Request & Response について深く考えたことがなく、ファイルアップロード、API 仕様書で指定されたヘッダーを返却する、PDF 出力など使うことがメインでした。$middleware = new \Cake\Http\MiddlewareStack(); でミドルウェアを作成し、アプリが Request & Response を制御する方法を発表されました。

The hidden gems in CakePHP3


DebugKit の使い方から始まり、数字の国際化フォーマットの対応方法、メッセージのフォーマットのカスタマイズなどがありました。クエリにグローバル関数を使えるなど、まだやりたいと思ったことはありませんが前知識として興味深いのが多かったです。

The CakePHP3 ORM, Even More Awesome Than You Realize


この辺りは私が翻訳した公式ドキュメントのページと少しかぶっているため、前情報ありで聞けました。 getQuery のエクセプション返却みたいなものを独自実装できるようです。$table->get($primaryKey) の時に1件だけエンティティを取得する時に見つからないとエクセプションが自動で返却されますが、ひょっとしてこれをカスタマイズできるのかなと思いました。標準の機能のため変更できるのか不明なので、この辺は調査してみないとなんともいえないかなと思います。ご注意ください。

ちなみに彼の発表後の休憩時間で、現在開発中のコードをコアディベロッパーに見せてレビューしてもらいました。これぞカンファレンス参加者の特権、ORM の解説をしたコアディベロッパーに ORM の細かい実装方法について聞けるのは非常に有益でした。文脈上のバリデーションは validationDefault に、確実に変わらないものは addRules に書くのが定石とのことです。自分の認識とあっててよかった。

Developing CakePHP plugins


How To というより、概念的なことをお話されていました。正直この辺はよく聞き取れず&分かりませんでした。スライドを見返そうと思います。

PHP deployment, 2016 flavor


彼のスライドは何にせよ目を引く画像が盛りだくさんでした。ちょっと興味を引きすぎて、意識しないと内容が頭に入ってこないレベルでした。gif アニメ画像も多く、上記資料では動かないのが残念です。

まず、ファイルシステムでデータ管理することについて注意喚起されました。ファイルシステムを利用することは、エラーが起きやすくなるとのことです。ミドルウェアを信用し、データストアの利用を勧められていました。また、ログをファイルで管理すると、プロセスが落ちた場合にファイルがなくなることがあるからDB管理のが便利とのことです。この辺、gif アニメ画像に目がいってしまって内容がきちんと合っているか不安です。詳細はスライドでご確認ください。PHPのセッション管理はファイルでやらないことをおっしゃっていました。デメリットは負荷分散の時に困るなど、結構初歩的なところも触れていました。そして、ファイルを保存するときはオブジェクトストレージ(Clever Cloud Cellar, AWS S3, CEPH, riak S2)に保存しましょうとのことでした。

以下、あまりにも多くメモを取ったので一気に挙げます。

CDN を使おう
どんどんアップデートしていこう
PHP7 を使うことは大切
.php ファイルは実行時に作成されません
FTP を忘れないで、デプロイに使ってても恐れないで名乗りあげよう
vendor 以下のファイルは触らないで
BTW はフロントで
ENV を設定で利用しよう
MOD ITK は利用しないほうがいい、MOD PHP で
FASTCGI – PHPFPM を使おう
HHVM は?使ってみよう
auto increment は危険なアイディアよ
– 集計するために計算を待つ必要がある
– 自動で加えられるから制御ができない

How I built web services in CakePHP


彼の開発の遷移を発表されました。共感ポイントが多かったのかもしれませんが、あまり英語が聞き取れなかったことに加え、スライドの文字が小さく内容がよく分かりませんでした。聞き取れたことはこちらになります。

Crud pluginはApi作るときに便利らしいです。これは後日調べようと思います。
Router::prefex使ってバージョンを切り替えることで過去のものと共存させたようです。この辺は共感ポイントです。
router->prefix(‘v3’, function(){
 ロジックの実装
});

API Tips From the Frontline


API を作成するときの定石のようなものを発表されました。同じように開発しているなという確認と、幾つか有益な情報をもらいました。

アルファベット圏の方たちにとって、api のクエリ文字列にアルファベット以外を使う時、何が起きるのか想像つかないようで、発表の途中で会場から質問がありました。途中で質問が挙がるというのは海外のカンファレンスの醍醐味、結構アドリブが求められます。そしてアドリブが必要なのは発表を聞いている側も同じで、発表者も分からないときは聞いている側が答えたりします。この質問は私が答えることで、みんなで知識の共有ができました。検索などは urlencode で渡せば大丈夫と答えましたので、大丈夫じゃなかったら日本の皆様すいません。私のプログラマー人生では今のところ大丈夫だったんです。ちなみに UTF-8 前提で話してます。

ファイルアップロードには、plupload というプラグインが便利なようです。そしてサーバサイドは Guzzle というライブラリが有益なようです。この辺りはいつか組み合わせて使いたいと思いました。また、アップロード処理は、「tmp にアップロード」と「ファイルパスを次のAPIに渡す」を分けて実装した方がいいようです。この辺注意して開発したいと思います。

OAuth2がおすすめというのは同感です。あとは、SPA は lazy loading だとパフォーマンスが落ちる、リレーションやカラムは慎重に取ってこないと遅くなる、という Tipsや、DDoS 対策のために API キーを利用し、毎回公開エンドポイントに付与する、Memcached を積極利用するなどが挙げられました。

最後に、api のフォーマットを考える際、この方はhttp://jsonapi.org/format/をバイブルにしているとのことでした。私も参考にしようと思います。

CakePHP 3 as a powerful backend API framework

これはスライドが見つからず、僕の頭も限界にきてしまったため、すいませんが何もお伝えできません。

Architecting Design Decisions !!!


これは恐ろしくマシンガントークで、最初の導入部分のジョークのところしか分かりませんでした。インド系の彼の英語でマシンガンが約 40 分続きました。内容が聞き取れず、何人か退席する姿を見て同じ気持ちなんだなと思いました。発表の内容がいくら優れていても、人の注意を引きつけるような話し方が大切だなと感じました。

終わりに
以上が私が体験してきた海外のカンファレンスの報告です。コアコミッターの Mark は現在、日常業務で Ruby on Rails を利用しており、余暇の時間で CakePHP を開発しているとのこと、日本ではあまり聞いたことのないようなオープンソースな人でした。彼と話すといつも言語やフレームワークに縛らない人生を感じられます。

プログラマー人生を楽しむためにも CakePHP MeetUp Tokyo を開催していきますので、コミュニティの参加よろしくお願いします。

Enjoy!!