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

hacomono Platform Engineering Showcase #2

hacomono Platform Engineering Showcase #2

hacomono Inc.

July 27, 2023
Tweet

More Decks by hacomono Inc.

Other Decks in Technology

Transcript

  1. Copyright hacomono Inc. All Rights Reserved.
    hacomono
    Platform Engineering Showcase #2
    ~hacomonoのモジュラーモノリス~

    View Slide

  2. Copyright hacomono Inc. All Rights Reserved.
    本イベントは、hacomono の
    Platform Engineeringに対する取り組みを
    Showcaseに並べて紹介するものです。

    View Slide

  3. 4
    Copyright hacomono Inc. All Rights Reserved.
    中村 竜甫
    職種:EM
    経歴:広告系Sier→事業会社(JMDC)→hacomono(2023/05)
    好き:電子書籍、海沿いへの旅行、見る将
    ハマっていること:ソーダ味のスイカバーを食べる
    聞き手

    View Slide

  4. 5
    Copyright hacomono Inc. All Rights Reserved.
    志賀 誠(まこたす)
    Makoto Shiga / twitter: @macotasu
    株式会社hacomono Engineer, プラットフォーム所属
    古くから動いているシステムを事業の成長に合わせて見直
    すことが好き
    普段はバイク(GB350)に乗ってツーリング
    本日のパネラー

    View Slide

  5. 6
    Copyright hacomono Inc. All Rights Reserved.
    経歴紹介など
    2013.4
    株式会社カヤックに新卒で入社
    ソシャゲのバックエンド開発 /運用
    2015.12
    株式会社アニメイトラボ
    アニメ配信サービス
    オウンドメディアのECS化
    2017.8
    freee株式会社
    マイクロサービス共通モジュール作成
    認証認可リプレース担当
    2022.8
    株式会社hacomono
    開発 /基盤/プラットフォーム

    View Slide

  6. プラットフォーム チームの紹介

    View Slide

  7. 8
    Copyright hacomono Inc. All Rights Reserved.
    これまでの基盤チームの体制
    開発組織および基盤の 体制について
    開発基盤
    QA
    SRE
    IoT
    機能開発チーム2
    (エンプラ)
    機能開発チーム1
    (スクール)
    機能開発チーム3
    (POS)
    PdM/PMM
    UI/UX デザイナー
    CTO 工藤 VPoE
    VPoPE 矢嶋

    View Slide

  8. 9
    Copyright hacomono Inc. All Rights Reserved.
    今期から基盤チームの体制
    開発組織および基盤の 体制について
    プラットフォーム
    QA SRE
    IoT
    機能開発チーム2
    (エンプラ)
    機能開発チーム1
    (スクール)
    機能開発チーム3
    (POS)
    PdM/PMM
    UI/UX デザイナー
    CTO 工藤 VPoE
    VPoPE 矢嶋
    イネーブリング

    View Slide

  9. 10
    Copyright hacomono Inc. All Rights Reserved.
    プラットフォームチームとは
    チーム紹介
    プロダクト開発チームが価値を提供する上で、必要なモノ
    (共通機能、知識等)を整えるチーム

    View Slide

  10. モジュラーモノリス導入に至るまで
    口座振替

    View Slide

  11. 12
    Copyright hacomono Inc. All Rights Reserved.
    これまでのhacomono
    モジュラーモノリス導入に至るまで
    hacomono app
    予約 入退館
    レジ
    メール
    各マスタ

    ➔ 内部的にはCleanArchitectureで、一定のルール
    がある
    ➔ 各機能同士が好きなメソッド自由に呼び出せる
    ➔ 機能間で結合度が高い状態
    Engineers

    View Slide

  12. 13
    Copyright hacomono Inc. All Rights Reserved.
    これまでのhacomono
    モジュラーモノリス導入に至るまで
    hacomono app
    予約 入退館
    レジ
    メール
    各マスタ

    2022/04 ~
    Team2
    Team1
    Team3

    View Slide

  13. 14
    Copyright hacomono Inc. All Rights Reserved.
    これまでのhacomono
    モジュラーモノリス導入に至るまで
    開発人数
    20xx年
    2018年
    リリース
    自由予約
    スクール
    SSO
    xx制限
    予約キャンセル待ち
    年会費
    ロールレベルカスタマイズ
    口座振替
    POS
    OIDC
    ライセンス編集
    etc…

    View Slide

  14. 15
    Copyright hacomono Inc. All Rights Reserved.
    hacomono appに起こりうる課題
    モジュラーモノリス導入に至るまで
    hacomono app
    予約 入退館
    レジ
    メール
    各マスタ

    ➔ チーム間のコンフリクト
    ◆ e.g. xx機能を修正した場合の影響は?正しい
    仕様はなにか?
    ➔ 特定ドメインが成長
    ◆ 専用チーム誕生
    ◆ hacomono本体からの分離
    ➔ 新サービス誕生
    ◆ hacomonoから共通機能を分離
    ➔ etc…

    View Slide

  15. 16
    Copyright hacomono Inc. All Rights Reserved.
    達成したいこと
    モジュラーモノリス導入に至るまで
    ● 人が増えてチームが分割されても生産性を維持したい
    ● 将来的に起こる(かもしれない)物理的な分離に備えた

    View Slide

  16. 17
    Copyright hacomono Inc. All Rights Reserved.
    問題の解決方針
    モジュラーモノリス導入に至るまで
    それぞれの領域について、知識と実装面で分離できる仕
    組みをつくる

    View Slide

  17. 18
    Copyright hacomono Inc. All Rights Reserved.
    モジュラーモノリス
    モジュラーモノリス導入に至るまで
    hacomono サービス
    論理イメージ
    レジ メール
    各マスタ
    予約 入退館

    team1 team2
    team4
    team3
    ※黒線は、各領域毎の API

    View Slide

  18. 19
    Copyright hacomono Inc. All Rights Reserved.
    モジュラーモノリス or マイクロサービス
    モジュラーモノリス導入に至るまで
    hacomono app
    モジュラーモノリス 物理イメージ


    モジュールA
    モジュールC

    モジュールB

    モジュールD
    hacomono app
    マイクロサービス 物理イメージ
    サービスA サービスB サービスC

    View Slide

  19. 20
    Copyright hacomono Inc. All Rights Reserved.
    モジュラーモノリス or マイクロサービス
    モジュラーモノリス導入に至るまで
    モジュラーモノリス マイクロサービス
    コミュニケーション △ △
    開発生産性 ◯ △
    事業成長に対する柔軟性 ◯ x
    価値提供速度 △ ※◯
    安定性 △ ◯
    導入コスト △ x
    運用コスト ◯ x

    View Slide

  20. モジュラーモノリス x Rails
    口座振替

    View Slide

  21. 22
    Copyright hacomono Inc. All Rights Reserved.
    Railsでモジュラーモノリスに向けた境界をどうやってわけるか
    モジュラーモノリス x Rails
    ● 各モジュール間でコード上の境界を持つ方法
    ○ Rubyなので越境が簡単
    ● 各モジュールが扱う永続仮想化層の境界分け
    ○ ActiveRecordが強力

    View Slide

  22. 23
    Copyright hacomono Inc. All Rights Reserved.
    Railsでモジュラーモノリスに向けた境界をどうやってわけるか
    モジュラーモノリス x Rails
    https://github.com/Shopify/packwerk

    View Slide

  23. 24
    Copyright hacomono Inc. All Rights Reserved.
    取り組み1: packwerkとは
    モジュラーモノリス x Rails
    hacomono app
    packages
    予約 …
    メール配信
    入退館
    顧客管理 …
    pkg pkg pkg
    ➔ 機能を論理的分離(pkg = package)
    ➔ pkgと外部で意図せぬ依存がないかを、
    package内のnamespaceをもとに静的
    解析できる
    ➔ pkg毎にcodeowner設定
    概要

    View Slide

  24. 25
    Copyright hacomono Inc. All Rights Reserved.
    取り組み1: package毎にルールをymlで定義できる
    モジュラーモノリス x Rails
    ● pkgが外部APIとして許可するEntryPoint
    ● pkgが依存できるpkgの定義
    ● pkgが一時的に依存するnamespace
    ● pkgのステータス(開発中か公開済みか)
    ● etc…
    bundle exec packwerk check

    View Slide

  25. 26
    Copyright hacomono Inc. All Rights Reserved.
    取り組み2: 外部APIはprotoを活用
    モジュラーモノリス x Rails
    hacomono app
    packages
    予約 …
    メール配信
    入退館
    顧客管理 …
    proto proto proto
    ➔ pkgのEntryPointは、proto定義から生
    成されたRubyコードを用いる
    ➔ 将来的にpkgがマイクロサービスとなっ
    た際を考慮

    View Slide

  26. 27
    Copyright hacomono Inc. All Rights Reserved.
    # .protoファイル
    service Mailer {
    rpc GetMail(GetMailRequest) return (GetMailResponse) {}
    }
    取り組み2: 外部APIはprotoを活用
    モジュラーモノリス x Rails
    ● rpc_desc
    ○ RPCに紐づく、input, outputの型の情報が取れる
    # packages/mailer/public/get_mail.rbへのリクエスト
    rpc_desc[:GetMail] # GetMail rpcの説明が取れる
    rpc_desc[:GetMail][:input] # GetMailが扱うRequest -> GetMailRequest

    View Slide

  27. 28
    Copyright hacomono Inc. All Rights Reserved.
    取り組み3: 永続化層への制限
    モジュラーモノリス x Rails
    ● ActiveRecord, Arelと自由な書き方ができるため、そ
    の層で弾くのは厳しい
    ● ARProxyでクエリ実行手前で検知(prod以外)
    ○ https://github.com/cookpad/arproxy

    View Slide

  28. 29
    Copyright hacomono Inc. All Rights Reserved.
    取り組み3: 永続化層への制限
    モジュラーモノリス x Rails
    hacomono app
    packages
    予約 …
    メール配信
    入退館
    顧客管理 …
    proto proto proto
    pkgアクセスするタイミングで、
    RequestContextに許可テーブルを設定
    DB
    ARProxyのpluginとしてQueryTracerを
    実行
    RequestContextの許可テーブルとSQL
    を比較して、チェック

    View Slide

  29. 30
    Copyright hacomono Inc. All Rights Reserved.
    取り組み4: 細かい開発体験向上
    モジュラーモノリス x Rails
    bundle exec rails g hacoway {module} --module=true

    View Slide

  30. 31
    Copyright hacomono Inc. All Rights Reserved.
    共に戦う戦士たちを募集中
    お客様に 「WOW!」を届ける基盤づくり
    hacomono カルチャーを支えるエンジニア組織
    圧倒的な成長を私達と共に成し遂げましょう!

    View Slide