Upgrade to Pro — share decks privately, control downloads, hide ads and more …

なぜ
リアーキテクティング専任チームを作ったのか

 なぜ
リアーキテクティング専任チームを作ったのか

コード品質向上のいろは - 先達に学ぶ実践例 Lunch LT
https://findy.connpass.com/event/300912/

Kei Shiratsuchi

November 22, 2023
Tweet

More Decks by Kei Shiratsuchi

Other Decks in Technology

Transcript

  1. なぜ

    リアーキテクティング専任チームを


    作ったのか
    白土 慧, Kei Shiratsuchi, @kei_s
    ίʔυ඼࣭޲্ͷ͍Ζ͸ - ઌୡʹֶͿ࣮ફྫ Lunch LT, 2023.11.22(Wed)

    View full-size slide

  2. 自己紹介
    • 白土 慧 (シラツチ ケイ)


    • kei-s


    • @kei_s


    • 2021〜: 株式会社アンドパッド


    • リアーキテクティングチーム(リアーキチーム)を立ち上げ


    • 主に大規模な Rails アプリケーションを対象

    View full-size slide

  3. このトークでは
    • コード品質の向上・維持のために「専任チーム」を作るとい
    うアプローチがある、という事例をお伝えしたい


    • 特にライブラリ等のバージョンアップを事例にして


    • トークの流れ


    1. リアーキチームができる前の状況


    2. リアーキチームを立ち上げるときに考えたこと


    3. リアーキチームでやっていること

    View full-size slide

  4. 前提
    • ANDPAD: 建築・建設業向けのSaaS


    • 様々な業務ドメイン向けのプロダクトを提供


    • 施工管理、検査、チャット、etc…


    • 顧客がサービスを様々な組み合わせで利用できる


    • 提供するプロダクトが多く、開発チームも多い

    View full-size slide

  5. アーキテクチャ
    • 中心となるRailsアプリ(本体Railsアプリ)と、それに接
    続する各ドメイン向けプロダクトで複数のプロダクトを提



    • 本体Railsアプリだけでも複数のプロダクトを提供


    • 開発開始から8年の歴史


    • プロダクトごとの約10チームが同時に開発


    • 比較的新しいプロダクトはGoなどで構築

    View full-size slide

  6. 1.

    リアーキチーム開始以前の状況

    View full-size slide

  7. 「何か開発がうまく行かない」
    • 障害が発生する


    • 機能開発に時間がかかる


    • ライブラリアップデートが滞る


    • 「価値を遅滞なく提供し続ける」ことが難しい状況

    View full-size slide

  8. ライブラリアップデートが滞る
    • 具体的には、本体Railsアプリの一部ライブラリのバージョン
    アップが滞っている


    • いくつかのライブラリは開発停止していたり、マイグレー
    ションパスが長いものがある


    • 複数のプロダクトチームにまたがって使われているライブ
    ラリは、一つのチームで責務を持ちにくい


    • Ruby、Rails自体も同様


    • 上記二つの理由から、各プロダクトチームのロードマップに載
    せにくい

    View full-size slide

  9. ライブラリアップデートの重要性
    • 「価値を遅滞なく提供し続ける」ことが難しくなる


    • 古いライブラリに依存したコードによるメンテナンス性
    の低下


    • ドキュメント・知見が見つからなくなっていく


    • セキュリティリスクの増加


    • OSSを用いるメリットを受けられない


    • パフォーマンスの向上


    • 新機能による生産性向上

    View full-size slide

  10. 2.


    リアーキチームを

    立ち上げるまで

    View full-size slide

  11. リアーキチームの発足
    • 全体を俯瞰して課題を発見、解決していきたい


    • 既存の各チームはプロダクトロードマップを進めること
    を優先し、広い動きがしづらい状況


    • チームの特徴


    • 特定のサービス・ドメインに責務を持たない


    • 全体の中で改善が追いついていないところをやる


    • 専任。リアーキにフルコミットする

    View full-size slide

  12. リアーキチームの位置付け
    • 目的


    • 既存の仕組みのつらみを解消


    • 新規サービスの開発を楽にできるように


    • 改善を継続してやるぞ、という文化を醸成


    • その背景


    • 放っておくと既存のつらみを踏襲した部分が増えていくので阻止


    • リアーキチームだけでは限界がある。エンジニア全体でよりよい
    コードが書けるように

    View full-size slide

  13. リアーキチームの位置付け
    • スコープ


    • プロダクトを跨いで共通に利用される箇所


    • プロダクトに閉じた部分は各チームに任せ、スコープ
    外とする


    • その背景


    • 共通に利用される箇所の改善が追いついていない。
    影響が広く、各チームだけで改善を進めにくい

    View full-size slide

  14. 3.


    リアーキチームで

    やっていること

    View full-size slide

  15. ライブラリアップデートの対応
    • 重要度・危険度を加味して優先順位をつけ、上から倒していく


    • 重要機能を担っているか


    • 開発予定の新機能が依存しそうか


    • セキュリティリスクが高まっているか


    • リアーキチームで対応する


    • リソース(対応人数)を固定し、与えられたリソースで可能
    なところまでやる


    • 「兼任」「有志」では対応が難しい長期課題に取り組む

    View full-size slide

  16. ライブラリアップデートの例
    • Ruby,Railsのアップデート


    • Ruby 3.0→3.2 をリアーキチームで対応


    • 各チームの動作確認をスムーズに抜け漏れなく行うための環境
    整備


    • なぜ、アンドパッドは最新のRuby/Railsにこだわるのか?アップデートを
    止めないための体制と仕組み


    • 古いライブラリのアップデート


    • 例: Webpack から Vite への移行(作業中)


    • プロダクトチームでは作業見積りが難しく着手されていなかった
    ライブラリのアップデート作業を実施

    View full-size slide

  17. その他チームでやってきたこと
    • エラー通知の整理


    • 本体Railsアプリの開発者向け


    • 共通で利用されるデータのリファクタリング


    • 中長期の課題向け


    • 🔎 @kei-s 実践 Rails アソシエーションリファクタリング - Kaigi on Rails
    2023


    • 本体Railsアプリ内部で広く使われていた独自の仕組みを廃止


    • 新たに参加する開発者向け


    • 🔎 @makicamel 歴史あるプロジェクトのとある技術的負債を隙間プロジェクト
    の 210 PullRequests で倒しきった話 - Kaigi on Rails 2023

    View full-size slide

  18. 責務のさじ加減
    • 「ライブラリアップデートは特定チームの仕事」にはしたくない


    • ライブラリも我々のプロダクト・コードの一部


    • エンジニアチーム全体で責任を持つべき


    • とはいえ、放っておくと進まない領域は存在する


    • 広く共有されるライブラリや、極端に古くなったライブラ



    • 「ライブラリアップデートを進めていく姿勢」をエンジニアチー
    ム全体に広めていきたい

    View full-size slide

  19. まとめ
    • ANDPADでは、コード品質向上・開発者体験の向上の
    ために、リアーキテクティング専任のチームを立ち上げ



    • 今回はライブラリアップデートを事例に紹介

    View full-size slide