BEAR.Sunday Meetup #6 に参加・発表内容まとめ
2018/4/28(Sat)に開催されたBEAR.Sunday Meetup #6に参加してきました。
今回は、実際にproduction環境でBEAR.Sundayを採用している実例を中心とした発表でした。発表いただいた内容を個人的にまとめたものを整理したので、気になっていたけど参加できなかったといった方に少しでも雰囲気が伝わればと思います。
そもそもBEAR.Sundayとは
BEAR.Sunday is a framework for creating elegant, truly RESTful API centric web applications in PHP.
Tutorialがわかりやすいので、触ってみるのは簡単にできます。
Many web frameworks give you lots of components, modules and features. BEAR.Sunday however gives you just 3 consistent framework patterns into which you can then wire up to your favourite libraries and custom gizmos.
RestfulやDI・AOPなどのProgramming paradigmを書いている中でかなり意識するので、既存のMVCを当たり前のように使っている人は一度触ってみるとフレームワークの見方が変わってとてもおもしろいと思います👏
発表内容
実際に登壇された方の発表内容のメモです。 (以下、発表内容と文章の表現が異なる場合はご指摘いただけると・・・。)
Opening Session
BEAR.Sundayの作者である、@koriymさんによる発表でした。
BEARについて
- エキサイト株式会社で、実際にBEAR.Sundayが使われている
評価について
- 各人がどういう背景・視点を持っているかが重要、そこがずれると話はずれていく。
- 分類例
- RAD(Rapid Application Development):
- Enterprise:
- Symfony / Zend ...etc
- Component:
- micro ...etc
- micro (framework):
- エンドユーザーコードに制約を課していないのでframeworkではないという批判もある
- micro (framework)の作者にもマーケティング用語としての「framework」を使っているという声がある
大きな泥団子
- 大きな泥だんご - wikipediaという言葉がある
大きな泥だんご (おおきなどろだんご、英: Big ball of mud) は理解可能なアーキテクチャが欠けている ソフトウェアシステム のことを指す。 ソフトウェア工学の視点から望ましくない状態にも関わらず、このようなシステムは事業の圧力、開発者の 刷新 や コードエントロピー などの理由によって当たり前に発生している、アンチパターン の1つである。
PHPの変遷
- ~4.4: web自体に価値、紙をwebにしただけで価値がある時代
- 5.2: 早く簡単に(web2.0)、何がいいかわからない時代、早く世にだして受け入れられるかを検証
- 5.3+: 創造を継続すること:変更可能・品質担保
Developerの成長について
- OSI参照モデル等と同様にDeveloperにもレイヤーがある。
- Developer
- Practice
- Skill
- Idea
- Mindeset
- Health
- 「ツールの使い方」などのPracticeよりIdeaやMindsetを重要視すべき
- そして今回のMeetupはIdeaの話をしたい
その他
- 発表内で紹介されたリンク
Lightning Talk
アドテクの新規事業をBEAR.Sundayで作る実例について
スタートアップを経営されている林さんという方より、新規事業をBEAR.Sundayで作る実例について話していただきました。
- アドテクの広告効果測定
- BEAR.Sundayの特徴としてMicoro Service化するには過剰だが疎結合なアーキテクチャにしたいというシーンで機能しやすい -Micoro Service化する場合はデプロイ等のコストが高いので、6人くらい専任のDevOpsの人員が必要くらいの意気込みがいる
OTOBANKでのBEAR.Sunday実例
@kalibora さんより、株式会社オトバンクにて運営されているaudiobook.jpにてBEAR.Sundayを活用した事例について話していただきました。
- 選定理由
- 使ってよかったこと
- AOP
- swagger-php
- 実装のために書いたアノテーションなり設定なりコードがそのままドキュメンテーションやSDKクライアントの元になる swagger.json になる
- bodyにあるオブジェクトを配列にするinterceptorを用意する
- bodyの興味ではないので、rendererに機能を用意してrendererをinjectするという方法が良い
- BEAR.Sundayはリソースがrendererを持っている、MVCであればglobalはView classがもっているが
- swaggerを普通に使うと面倒しているので、改良しちゃってる
- ただし、メリットがちゃんと出ているかは微妙
- phpDoc同様、使い続けることが難しい
- 実際にswaggerが負債になってる事例が会場内で紹介された。
BEAR.Sundayに権限ライブラリを作成(?)して適用してみた
エキサイト株式会社の@poemn_caoさんより、BEAR.AclResourceを作った際の話をされました。
www.slideshare.net
- AclResource
- 権限に応じて表示される情報量が変わるという要件を実装するためのパッケージを作成した
- https://github.com/bearsunday/BEAR.AclResource
- ライブラリ作成工数:3日くらい
@madapajaさんによる発表
GitHub - madapaja/Madapaja.TwigModule: BEAR.Sunday ModuleというBEAR.Sundayのmoduleを作られている@madapajaによる新規事業をBEAR.Sundayで作るお話でした。
- 新規事業
- 構成の自由度、アプリケーションの合成という観点でBEAR.Sundayは魅力的。
- 使った結果感じた問題
- 毎回コンパイルするためDevelopモードでの動作が遅い。
- ただし、.do_not_clearというファイルを設置することで一旦解決する。
- その他の「案」
- Ray.Compilerを使わずにRay.Diのみを使うことでコンパイルを早くする方法もあるが、Ray.Compilerは仕様書になりうる利点がある。
- eval関数(http://php.net/manual/en/function.eval.php)を使うというフレームワークの実装案もあったが、xdebugでのトレーサビリティが悪いのでBad Ideaとして採用していない。
- リソースへのPost等で引数が多い
- @varに入出力のクラスを書いておく案、deep-assoc-completionを使えばPHPStormでの補完も効きやすい。
- 毎回コンパイルするためDevelopモードでの動作が遅い。
Symfony Configコンポーネント統合例の紹介
エキサイト株式会社のkuma_nanaによる「Symfony Configコンポーネント統合例の紹介」という話でした。
www.slideshare.net
The Birth of FormalBears
@iteman (Atsuhiko Kubo)さんによるこれから作るフレームワークについての話をしていただきました。
www.slideshare.net
- BEAR.Sundayを基盤としたApplication Framework
- 活動
- OSS
- PEARのメンテナー
- Piece_Unity: Framework
- phpmentors-jp/workflower
- Business Process Model and Notation - Wikipedia
- 10以上のproduction環境で稼働中
- object modeling group
- META
- メタプログラミング
- 始祖と呼ばれている人物:チャールズ・シモニュイ(Charles Simonyi)
- メタプログラミング
- FormalBears
- Configuration BEAR.Sunday
- SymfonyユーザーをBEAR.Sundayに移行してもらいたいという狙い
- その他
- Symfonyのconfigurationについて
- annotationのconfigurationに設定の中身が書いている点で、密結合している
- annotationはmarkingのみで中身は別であるべき
Varnishの利用
https://spur.hpplus.jp/にてVarnishを活用する実例についてでした。
- cacheの制御
- ttl cache
- cache無効化
- rankingやrecommend・動的に異なるものをどう扱うか
- varnishの活用
- vmod_key
- pageの構成要素をキーとして渡す
- vmod_key
- BEAR.SundayでVarnish用にxkeyヘッダを追加するモジュール
Web Page = GLUE + SPEC
- Controllerコードからinfra code関心事から取り除き、かつ実質的な仕事をするinfra codeの間までに「無駄な」レイヤーを挟まないためのアイデアについて
- Sample Code: https://github.com/koriym/Koriym.TicketSan
- @AliasQueryというアノテーションを使うことで直接sqlまでたどり着く
- https://github.com/koriym/Koriym.TicketSan/blob/ca1c371eee4a9a74dafbc9849a2759caa0e98835/src/Resource/App/Ticket.php#L39
- あくまでResource側のメソッドにはanotationをつけるだけ、sqlじゃなくてもdynamoなのかsqsなのかinfra側に対してはResourceが一切関心を持たない状態を作る
- interceptorにbind
- https://github.com/koriym/Koriym.TicketSan/blob/ca1c371eee4a9a74dafbc9849a2759caa0e98835/src/Module/AppModule.php#L41
- 使用するものによってmoduleをbindする、sqlなのかquery builderなのかは人それぞれ
- infra codeをリソースに入っている指摘
- infra codeをリソースの関心事から取り除く
- repository paternなどが用いられがち
- GLUE・SPECについて
- GLUE: 異なるレイヤーをつなぎ合わせる:バインド・インジェクト
- SPEC: アプリケーションがどういうものなのかをわかる
- laravelの場合
- Request Objectの中に手をつっこむ、その中に何があるかはコードを見ないとわからない
- DDD: 境界づけられたコンテキスト
- フレームワークを作るの捉え方
Skyの@mackstarさんによるリモートLT
Skyにいらっしゃる@mackstarさんによるリモートでの発表でした
- Skyが使用しているテクノロジーについて
- js
- GraphQL
- Mono Repo
- Micro: 誰が何やってるか分からない
- Atomic Design
- Atomic Design | Brad Frost
- Atomic Design を分かったつもりになる | DeNA DESIGN BLOG
- 全てReact Component
- story book
- https://github.com/storybooks/storybook
- buisiness側も含めて全員すべてのcomponentを見ることができる
- それぞれgraphqlに接続しに行く
- 工数・金
- headless CMS
感想
BEAR.Sundayはチュートリアルやって一度@koriymさんに教えていただいたものの、実際にアプリケーションを作ってはいなかったのですが、それでも普段MVCフレームワークを使っていて意識しにくいアーキテクチャについての実例や議論はとても勉強になりました。(と同時に、アーキテクチャレベルの議論に参加できない自分のレベルに落ち込みつつ😓) また、個人的には会場での議論の際にでた「フレームワークを作る側」の捉え方についての話がとても参考になったので、引き続きのOSS活動に活かそうと思います。