【サルが書く】CakeFest2019に行ってきた話

## CakeFestに参加してきたぞ!

わきゃ!

CakePHPの国際カンファレンスが今年TOKYOで開かれるということで、これは行くしかないと思い行ってきました。
メモを取っていないスピーカー等もありますし、雑なメモになっているのをご了承ください。

やはり日本のカンファレンスとは違い、様々な国籍の方が会場にはいて、受付も英語だったのでかなり戸惑ってしまいましたがなんとか受付をすませ着席しました。

来場者特典として、ノートといわゆるぺちぞーがみんなに配られました。
![iOS の画像 (5).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177293/6834fdaf-7d91-6d49-5775-1266e1d3af20.jpeg)


途中のbreak timeはなぜかむき出しのバナナが無造作に置かれておりました。

![iOS の画像 (4).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177293/8ec8ffb7-b1fe-ace4-9e70-173de656ef83.jpeg)


日本のエンジニアも英語でのスピーチをしていました。

最後にはCakePHPCakeが振る舞われ、来場者の皆様に配られていました。
![iOS の画像 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177293/b8bec11c-563f-0fc1-433f-f40e9d29fe3e.jpeg)


# Conference DAY1

## A safer and more helpful CakePHP in 4.0

Mark Story

CakePHP4の開発における最後のブランチを5分前にマージした
bataの状態で、来週リリースになるかもしれない。

- 今後のCakePHP

2.x系
4のリリース後
アップデートは12ヶ月で終了
セキュリティアップデートは18ヶ月で終了

3.x系
4のリリース後は36ヶ月でセキュリティアップデートは終了

- CakePHP4系の特徴

**safetyになった**
stricter
ストリクトモードがある

php7.2以上が必要

templateを呼びだすときにない場合はfatalになっていたのがあるが、メソッド名を変更することで安全に
NULL安全

静的解析機能がよくなった

phpstanに近いけど、完全に一緒ではない
[https://qiita.com/qiita_masaharu/items/24bf34579119628eefe2](https://qiita.com/qiita_masaharu/items/24bf34579119628eefe2)

**eaery feedbackを受けられる**
早くフィードバックを受け取ることでエラーを早期に見つけることができる

エラーフィードバックを改善
エラーページもアップデートしていった

**UPGRADE TOOLを導入**
アップデートをサポートをしてくれるCLIを導入
rectorを使用した。
[https://fortkle.hatenablog.com/entry/2018/12/16/235830](https://fortkle.hatenablog.com/entry/2018/12/16/235830)

## The CakePHP features I wish you were using more

José Rodríguez

カスタムアソシエーション
自分でアソシエーションを作らなければならないシチュエーションで使ってほしい
HasOneをカスタマイズして作ったりする。

カスタムエクスプレッション
cakephpのclassがsqlになったようなもの
ORMに作るsqlを作ってくれる関数のようなものらしい

## 12 Factor CakePHP Applications - The Remix

Jose Gonzalez

ScalableAppとはどんなもの?
スケーラブルにするためにはどうすれば良い

組織のパターンによる
どんなパターンに沿ってスケーラブルなアプリケーションを作るか
12 factor appに従ってアプリケーションを作成しよう。

12 factor app
[https://12factor.net/ja/](https://12factor.net/ja/)

2011年にHerokuが作った

**codebase**
monorepoの状態は良くない
repositryは複数に分けて管理するべき
1つのcodebaseで複数の環境にデプロイされるべき

**Dependencies**
composerのバージョンはちゃんと指定しよう
バックアップは取りましょう

**config**
設定をコードから厳密に分離すること
環境変数をつかえ!
アプリケーションコード内には秘密情報は入れない
CakePHPの場合は環境変数で設定できるので、それを使いましょう
サーバーの外で環境変数を設定できるので安全

**backend service**
外部のAPIや接続する先も環境変数でしていする
ローカルサービスとサードパーティサービスを区別しない。

**build release run**
ビルド、リリース、実行の3つのステージを厳密に分離する

**process**
アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する

**port binding**
Dont care

**Concurrency**
並行性をもて
簡単に並行スケールをできるように

**Disposability**
プロセスを消すときは簡単にできるようにする

**parity dev prod**
開発環境、ステージング、本番の環境は統一すべき
OSも統一すべき、テスト環境も統一しろ
local環境も本番に親しい環境にしなさい
Docker等を使うことで、簡単に統一することもできるかもしれない。

**logs**
イベントストリームとして使う
logは標準的なフォーマットでかくべきだと思っている
metadataを入れる
-> timestampはISO8601
-> user情報は誰が見ても特定できるように

**admin processes**
重要な操作に関してはGUIで操作するのではなく、codeで管理する。
管理ページを作成すれば、developerでなくてもできるので、効率的

## Test-driven development to avoid painful of test code

KAZUKI HIGASHIGUCHI

TDDはテスト辛い問題を解決してくれる

**テストの辛い理由**
テストの知識がない
プロジェクトが忙しい
本番にテストコードがない
テストが膨大である
メンテができない状態になる

テストコードをアプリケーションのオプションとして考えてしまう
アプリケーションを書くときに、テストありきで書けていない
そのためテストが辛くなる

**TDDとは**
TDDは恐怖をなくすための手法である

**TDDのルール**
テストのないコードを書くな
重複を排除せよ

**TDDのサイクル**
テストを追加
テスト実行させて失敗させる
変更を加える
テストを実行して成功させる
重複をリファクタリングする

**TDDのやり方**
開発サイクルに入れることで、テストを書かざる負えない状態になる
テストを最初に書くことで、テスト設計を加味したコードになるので、テストの実装が容易になる

**まとめ**
テストがコストかかるからと言って、やらないのではなくうまくやる

## Working with Database Replication

Tadahisa MOTOOKA

SPOF（単一障害点）

レプリケーションラグどうすんの?
コミットされてから、レプリケーションに追加されるまでの時間

UNITTEST
ローカルで一番気をつけなければならないのは、replicaDBに書き込んでしまうこと。なのでread only userを作るのは有用な対策である。

# Conference DAY2

## Beyond unit testing: How to make your applications more reliable

José Rodríguez

単体テストはほとんど無駄になっているのではと思う。

単体テストの問題
一部のテストしかしない
100％カバレッジのものでもテストしたということしか残らないし、100％にするために削除したものや、通らなかったものはテストがおかしいと疑い始める。

テストもコードであり、コードにはバグがあるものだ。

1年間失敗しないテストに関しては削除してしまったほうが良い、メンテにかかる工数のほうが高くなってしまう。
無駄なテストは削除せよ。

明らかなテストは削除せよ。

テストをすることで減るリスクと、メンテナンスにかかるコストを天秤にかけて判断をせよ。

単体テストをアサーションに変換していくことを個人的には推奨している。

静的解析ツールを入れていくことを勧める。
PHPstanやSonarQube等のツールでやってみては？

## **Baking with Vue.js**

**David Yell**

**David Yell**がjQueryより素晴らしいといった瞬間に軽いブーイング

それに対して、"Sorry, jQuery"と応答

cakephpで使うときは/srcと同じ仮想に/vueを作成する。

デバッグはchromeのエクステンションを入れよう。

vueの基本的な機能とvuex, axios, moment.jsの紹介

Twitterの実況では「現在ではaxiosを使うのではなくFETCH APIを使うのが標準です」ともコメントがありました。

詳しくはハッシュタグを追ってください！！
[#cakefest2019](https://twitter.com/search?q=%23cakefest2019)

[FETCH API](https://t.co/4yCAMATJYE)

SSRを考慮すると、まだaxiosライブラリを使用しているようです。
サーバーとクライアントで日付を取得するためです。

## **Building interactivity with websockets**

**Wim Godden**

websoket

1つのコネクションを使ってコミュニケーションを取ることができる

http, httpsを使用する

同じコネクションを使えるし、同時複数送信もできる。

websocketの知識が自分にあまりなく、理解しきるのはなかなか難しかった。

日本語の記事で改めて学ぼう。

[https://qiita.com/chihiro/items/9d280704c6eff8603389](https://qiita.com/chihiro/items/9d280704c6eff8603389)

[https://triple-underscore.github.io/RFC6455-ja.html](https://triple-underscore.github.io/RFC6455-ja.html)

## **Life after CakePHP**

**Andrej Griniuk**

2005−2006

CakePHPと私

自分のエンジニア人生とCakePHPの関係性を述べていった

## **Let's start your first OSS with CakePHP**

**Sho Ito**

OSSをやってみたいというヒトは多いけど、やってみたことある人は少なくなってしまう。

1.どうやってOSSに貢献するか。

2.OSSを改善するための視点

3.企業としてのOSS活動への取り組み

1.どうやってOSSに貢献するか。

実際に自分はeasy queryというプラグインを作りました。

[https://github.com/itosho/easy-query](https://github.com/itosho/easy-query)

repositoryを作った時点で半分作業は終わっているようなもの

- OSSを改善するための視点

OSSを改善していくためには、有名OSSがどんなものかを見ていった。

人気の3C利便性、明瞭、継続性が目立った。

コンビニエンス=OSS使ったときのベネフィットについてです。

多くの人に使ってもらうためには利便性を持たなければならない。

easy queryのベネフィットはパフォーマンスです。

クラリティ=明瞭さ

かんたんに迅速に使うことができる。

エコシステムが必要だと思う。

インストールが無駄に難しいとか、標準機能とインターフェースが大きくかけ離れているのは避けるべき。

continuity=継続性

starに引きづられてはいけない。

ダイナミックに変化する業界なので、常に変化をしないといけない

- 企業としてのOSS活動への取り組み

OSSのコントリビューション等をすると、マイルが溜まっていく

このマイルはインプット目的（資格取得や国際カンファレンスの旅費等）に使うことができる。

お金のモチベーションは長続きしない。

インプットのためのマイルの使いみちはみんなで議論する。

CMSでスマイルカウンターを作って運用している。

なぜこのような仕組みを作ったのか

 →OSSを通じてお返しをしたいと考えていたため

エンジニアコミュニティへの貢献（カンファレンスのスポンサード等に使う）

## 個人の感想
正直賭けでしたが、通訳の方がいらっしゃたのでなんとか話している内容は理解できました。
初めて国際カンファレンスに参加したので、海外の方が多く参加さあれており、気圧されていましたが、結果参加してよかったなと思いました。
将来的に自分も登壇側で参加できるように頑張っていこうと思えるカンファレンスでした。
ありがとうございます。