2020/02/03 タピオカLT 4杯目の発表資料です
税理士ドットコムの技術的挑戦2020/02/03 タピオカLT 4杯目@mizuki_r
View Slide
@mizuki_r• エンジニア22018年10月から税理士ドットコムに参加。開発、採用から雑務まで何でもござれ。最近はミニ四駆アプリの沼に沈んでいるabout meこんな人です
僕のシャイニングスコーピオン
本日のテーマ
最近、税理ドットコム内でやってみてる実験の一部をご紹介
背景
税理士ドットコム• 日本最大級の税理士/税務ポータルサイト• 税理士紹介、Q&A、ニュースなど• サービス開始: 2006年• エンジニア: 社員x1, 業務委託x5
自分のポジション• 開発マネージャー• テックリード• エンジニア(フロント・バック・インフラ)
技術スタック• PHP 7.2• Yii Framework 1.1• JavaScript• jQuery 3.4• Vue 2.6
Yii Framework• 大規模なウェブアプリケーションを迅速に開発するための、高性能な、コンポーネントベースの PHP フレームワーク• 速い? ... 安全? ... プロが使える? ... 次のプロジェクトに合っている? ... Yes, it is!• いわゆるフルスタックフレームワーク
どうしたものか…
実装上の問題
実装上の問題• Controllerにベタ書きされた実装• あらゆるところに偏在するModel(≒ActiveRecord)• 危険なテンプレートエンジンPHP• 責務分担、開放閉鎖、PHP5的な実装、etc…
やりたいこと
やりたいこと上位から疎なコードを分離ルーター 古い仕組み新しい仕組み
現実とても密結合誰がルーティングするの???既存のモデル・DB 作り直す???リダイレクト
現実的な問題• ActiveRecordがあらゆるところに偏在しているの分離が困難• コードの関係性が密結合、不適切な分断がされている• コスト感…
アイディア
こうすればいいんじゃね?New WAFControllerRouterYiiControllerRouterRequest 404 NotFoundModel既存リソースの参照
アイディア• 新しいフレームワークでリクエストを受ける• 新しいフレームワークのルーティングが404ならYiiのルーティングを実行• modelなどの移管が難しい既存のリソースを再利用可能
実装してみた
技術選定• Slim Frameworkを採用• 軽量、ルーティング・コンテナ・コントローラーを提供している• 読める• PSR準拠• ルーターもFastRouteを使っているので差し替えが容易そう
Container• Ray.DiΛ༻͍ͯॲཧͷநԽͱೖΛߦ͍ͬͯΔ• ଟػೳ͔ͭڧྗɻ͜Ε͕ແ͍ͱͬͯΒΜͳ͍• SlimͷContainerΛRay.DiͰஔ͖͑Δ• PHPΞυΧϨͰॻ͍ͨهࣄ
Slimで404をハンドル
解説• YiiとSlimのアプリを初期化• このタイミングでDBとかのコンポーネントが作られる• SlimのHTTP-Exceptionをハンドルし、404のときにYiiのアプリを実行• runすることでURLを解析しControllerを実行し、exitする• 新しい実装はSlimで書きつつ、Webの窓口をYiiから引き剥がすことができる
まとめ
まとめ• フレームワークの移管についてのアイディアをご紹介しました• まとめて移管せずとも、段階的な移管は可能そう• なお、本番反映は見送りました。• パフォーマンス的にどうか? まだ健闘の余地はある
終わりに• レガシーコードとの戦いは、色々な発見や挑戦があって面白い• まだ誰も試したことないチャレンジ、アイディアを見たい• ぜひ興味ある方はお声がけください!
次回ビジネスロジックからYiiを消し去りたい?よろしい、ならば Clean Architecture だػձ͕͋Ε…