CakeFestに参加してきたぞ!
わきゃ!
CakePHPの国際カンファレンスが今年TOKYOで開かれるということで、これは行くしかないと思い行ってきました。
メモを取っていないスピーカー等もありますし、雑なメモになっているのをご了承ください。
やはり日本のカンファレンスとは違い、様々な国籍の方が会場にはいて、受付も英語だったのでかなり戸惑ってしまいましたがなんとか受付をすませ着席しました。
来場者特典として、ノートといわゆるぺちぞーがみんなに配られました。
途中のbreak timeはなぜかむき出しのバナナが無造作に置かれておりました。
日本のエンジニアも英語でのスピーチをしていました。
最後にはCakePHPCakeが振る舞われ、来場者の皆様に配られていました。
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
eaery feedbackを受けられる
早くフィードバックを受け取ることでエラーを早期に見つけることができる
エラーフィードバックを改善
エラーページもアップデートしていった
UPGRADE TOOLを導入
アップデートをサポートをしてくれるCLIを導入
rectorを使用した。
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/
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
SSRを考慮すると、まだaxiosライブラリを使用しているようです。
サーバーとクライアントで日付を取得するためです。
Building interactivity with websockets
Wim Godden
websoket
1つのコネクションを使ってコミュニケーションを取ることができる
http, httpsを使用する
同じコネクションを使えるし、同時複数送信もできる。
websocketの知識が自分にあまりなく、理解しきるのはなかなか難しかった。
日本語の記事で改めて学ぼう。
https://qiita.com/chihiro/items/9d280704c6eff8603389
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
repositoryを作った時点で半分作業は終わっているようなもの
- OSSを改善するための視点
OSSを改善していくためには、有名OSSがどんなものかを見ていった。
人気の3C利便性、明瞭、継続性が目立った。
コンビニエンス=OSS使ったときのベネフィットについてです。
多くの人に使ってもらうためには利便性を持たなければならない。
easy queryのベネフィットはパフォーマンスです。
クラリティ=明瞭さ
かんたんに迅速に使うことができる。
エコシステムが必要だと思う。
インストールが無駄に難しいとか、標準機能とインターフェースが大きくかけ離れているのは避けるべき。
continuity=継続性
starに引きづられてはいけない。
ダイナミックに変化する業界なので、常に変化をしないといけない
- 企業としてのOSS活動への取り組み
OSSのコントリビューション等をすると、マイルが溜まっていく
このマイルはインプット目的(資格取得や国際カンファレンスの旅費等)に使うことができる。
お金のモチベーションは長続きしない。
インプットのためのマイルの使いみちはみんなで議論する。
CMSでスマイルカウンターを作って運用している。
なぜこのような仕組みを作ったのか
→OSSを通じてお返しをしたいと考えていたため
エンジニアコミュニティへの貢献(カンファレンスのスポンサード等に使う)
個人の感想
正直賭けでしたが、通訳の方がいらっしゃたのでなんとか話している内容は理解できました。
初めて国際カンファレンスに参加したので、海外の方が多く参加さあれており、気圧されていましたが、結果参加してよかったなと思いました。
将来的に自分も登壇側で参加できるように頑張っていこうと思えるカンファレンスでした。
ありがとうございます。