Slide 1

Slide 1 text

税理士ドットコムの 技術的挑戦 2020/02/03 タピオカLT 4杯目 @mizuki_r

Slide 2

Slide 2 text

@mizuki_r • エンジニア 2 2018年10月から税理士ドットコム に参加。開発、採用から雑務まで何 でもござれ。最近はミニ四駆アプリ の沼に沈んでいる about me こんな人です

Slide 3

Slide 3 text

僕のシャイニングスコーピオン

Slide 4

Slide 4 text

本日のテーマ

Slide 5

Slide 5 text

最近、税理ドットコム内で やってみてる実験の一部を ご紹介

Slide 6

Slide 6 text

背景

Slide 7

Slide 7 text

税理士ドットコム • 日本最大級の税理士/税務ポータルサイト • 税理士紹介、Q&A、ニュースなど • サービス開始: 2006年 • エンジニア: 社員x1, 業務委託x5

Slide 8

Slide 8 text

自分のポジション • 開発マネージャー • テックリード • エンジニア(フロント・バック・インフラ)

Slide 9

Slide 9 text

技術スタック • PHP 7.2 • Yii Framework 1.1 • JavaScript • jQuery 3.4 • Vue 2.6

Slide 10

Slide 10 text

Yii Framework • 大規模なウェブアプリケーションを迅速に 開発するための、高性能な、コンポーネン トベースの PHP フレームワーク • 速い? ... 安全? ... プロが使える? ... 次の プロジェクトに合っている? ... Yes, it is! • いわゆるフルスタックフレームワーク

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

どうしたものか…

Slide 13

Slide 13 text

実装上の問題

Slide 14

Slide 14 text

実装上の問題 • Controllerにベタ書きされた実装 • あらゆるところに偏在するModel(≒ ActiveRecord) • 危険なテンプレートエンジンPHP • 責務分担、開放閉鎖、PHP5的な実装、etc…

Slide 15

Slide 15 text

やりたいこと

Slide 16

Slide 16 text

やりたいこと 上位から疎なコードを分離 ルーター 古い仕組み 新しい仕組み

Slide 17

Slide 17 text

現実 とても密結合 誰がルーティングするの??? 既存のモデル・DB
 作り直す??? リダイレクト

Slide 18

Slide 18 text

現実的な問題 • ActiveRecordがあらゆるところに偏在して いるの分離が困難 • コードの関係性が密結合、不適切な分断が されている • コスト感…

Slide 19

Slide 19 text

アイディア

Slide 20

Slide 20 text

こうすればいいんじゃね? New WAF Controller Router Yii Controller Router Request 404 NotFound Model 既存リソース の参照

Slide 21

Slide 21 text

アイディア • 新しいフレームワークでリクエストを受け る • 新しいフレームワークのルーティングが 404ならYiiのルーティングを実行 • modelなどの移管が難しい既存のリソース を再利用可能

Slide 22

Slide 22 text

実装してみた

Slide 23

Slide 23 text

技術選定 • Slim Frameworkを採用 • 軽量、ルーティング・コンテナ・コントローラーを提 供している • 読める • PSR準拠 • ルーターもFastRouteを使っているので差し替えが容 易そう

Slide 24

Slide 24 text

Container • Ray.DiΛ༻͍ͯॲཧͷந৅Խͱ஫ೖΛߦ͍ͬͯΔ • ଟػೳ͔ͭڧྗɻ͜Ε͕ແ͍ͱ΍ͬͯΒΜͳ ͍ • SlimͷContainerΛRay.DiͰஔ͖׵͑Δ • PHPΞυΧϨͰॻ͍ͨهࣄ

Slide 25

Slide 25 text

Slimで404をハンドル

Slide 26

Slide 26 text

解説 • YiiとSlimのアプリを初期化 • このタイミングでDBとかのコンポーネントが作られる • SlimのHTTP-Exceptionをハンドルし、404のときにYiiのア プリを実行 • runすることでURLを解析しControllerを実行し、exitする • 新しい実装はSlimで書きつつ、Webの窓口をYiiから引き剥が すことができる

Slide 27

Slide 27 text

まとめ

Slide 28

Slide 28 text

まとめ • フレームワークの移管についてのアイディアをご 紹介しました • まとめて移管せずとも、段階的な移管は可能そう • なお、本番反映は見送りました。 • パフォーマンス的にどうか? まだ健闘の余地は ある

Slide 29

Slide 29 text

終わりに • レガシーコードとの戦いは、色々な発見や 挑戦があって面白い • まだ誰も試したことないチャレンジ、アイ ディアを見たい • ぜひ興味ある方はお声がけください!

Slide 30

Slide 30 text

次回 ビジネスロジックからYiiを消し去りたい? よろしい、ならば Clean Architecture だ ػձ͕͋Ε͹…