and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 rails stats で紐解く ANDPAD のイマを支える技術たち 株式会社 アンドパッド 開発本部 執行役員 佐藤竜之介
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 アンドパッドのプロダクト開発の背景 • アンドパッドではマルチプロダクトでプロダクト開発を行っています ◦ 多くのプロダクトが相乗りするモノリス (Rails) ◦ 個別のプロダクトごとのリポジトリ (Rails / Go) ◦ プロダクトごとの Web フロント・アプリのリポジトリ • 各プロダクト開発チームごとの意思決定を行っています • 横断施策を実施するチームもあります
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 アンドパッドのプロダクト開発の背景 • アンドパッドではマルチプロダクトでプロダクト開発を行っています ◦ 多くのプロダクトが相乗りするモノリス (Rails) ← 今日はここの話 ◦ 個別のプロダクトごとのリポジトリ (Rails / Go) ◦ プロダクトごとの Web フロント・アプリのリポジトリ • 各プロダクト開発チームごとの意思決定を行っています • 横断施策を実施するチームもあります 本日はモノリスの話を扱います。 「モノリス上で各チームが独立した意思決定を行っている」という背景を 踏まえてお話します。
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 01 $ rails stats 本日の話 イマを支える技術要素 02 03 今後の展望
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 (余談) ※見慣れないコンポーネントが表示されているかと思いますが、 rails stats はカスタマイズ可能です
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 MVC • models ◦ AR, module, Utility などを app/models に保存している ◦ クラス数よりは、テーブル数は少ない • controllers ◦ 各プロダクト毎の独自領域、かつ API の提供先毎にコントロー ラーを作成しているので比率が高い(Code LOC 比率 = 1:0.69) • services ◦ 各プロダクトがそれぞれの判断で利用しているので、中身は多種 多様 イマを支える技術要素
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 イマを支える技術要素 有名どころのgem • ActiveDecorator • Sidekiq • CarrierWave そこそこ込み入った活用をしている部分がありますが、本日は割愛します
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 イマを支える技術要素 アンドパッド独自の仕組み • Rubocop ◦ コーディング規約、セキュリティ観点など、モノリス横断でルー ルを強制したい場合に利用 ◦ 歴史ある部分の近代化改修にも用いられる ◦ 該当コード全てを auto correct し、以降の導入を禁止するという 用途 • Rack Middlewares • Monkey Patches • RPCs
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 イマを支える技術要素 アンドパッド独自の仕組み • Rubocop • Rack Middlewares ◦ モノリス横断でのセキュリティ対策、リクエスト全てを対象にし たログ出力で利用 ◦ Array#each の中など、あるリクエストに対して複数のログが出 力される場合の省エネ処理 • Monkey Patches • RPCs
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 イマを支える技術要素 アンドパッド独自の仕組み • Rubocop • Rack Middlewares • Monkey Patches ◦ やむをえない事情による gem の拡張置き場 ◦ 歴史的なもの、先のバージョンの変更を取り込んだもの、仕方が ないもの、本当に仕方がないもの、etc • RPCs
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 イマを支える技術要素 アンドパッド独自の仕組み • Rubocop • Rack Middlewares • Monkey Patches • RPCs ◦ 別プロダクトからモノリスのデータを取得するための gPRC サー バ ◦ モデルをアプリケーションと共有し、モノリスから他のプロダク トに対してのデータを公開している。絶賛開発中 ◦ 社内名称「Tsugite」(つぎて)
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 イマを支える技術要素 テスト • RSpec / FactoryBot を利用 ◦ データ構造が複雑なため、factory に名前を付けて生成データを 管理している • Code to Test Ratio: 1 : 2.7 ◦ 手に乗るくらいのアプリだと、1 : 0.5 前後(※) ◦ 業務アプリ、かつ規模が大きいと 1 : 3 前後(※) ※ 話者の主観です
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 イマを支える技術要素 Assets • 主に創成期に書かれた Sprockets 管理の JS / CSS が中心 • ゆるやかにエンハンスを行っているが、各プロダクトでの共通部分が 多いためなかなか整理が進められてこなかった JavaScript • https://github.com/sergii/vite_rails でビルドしているファイル群 • Webpacker からの移行先として選定
and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. 無断転載・無断複製の禁止 ここまでのまとめ • プロダクト開発チームそれぞれで意思決定できる部分ほど、いろいろ なコンテキストが入り整合性を取るのが難しくなる(Service, Assets, etc) • 「横断的に導入した部分」 = 「プロダクト開発チームの技術判断と直 行する部分」は枠組みとして機能しやすい => プロダクト開発チームでの技術的意思決定の裁量を増やすため、構造 的な整理を進めていく価値が大きい