Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
hacomono Platform Engineering Showcase #2
Search
hacomono Inc.
PRO
July 27, 2023
Technology
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
hacomono Platform Engineering Showcase #2
hacomono Inc.
PRO
July 27, 2023
More Decks by hacomono Inc.
See All by hacomono Inc.
正しく凹む技術:運動で感情を GC(ガベージコレクション )しよう
hacomono
PRO
1
100
開発者の認知負荷軽減を目指して選んだCrossplane - Self-serviceの理想と現実
hacomono
PRO
0
250
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
7
1.7k
AI ネイティブな開発プロセスを目指して ~田中のローカルmac編~
hacomono
PRO
1
84
新規事業×QAの挑戦:不確実性を乗りこなす!フェーズごとに求められるQAの役割変革
hacomono
PRO
0
560
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
490
作ったのに使われなかったを繰り返さないために。
hacomono
PRO
0
410
NewSQL_ ストレージ分離と分散合意を用いたスケーラブルアーキテクチャ
hacomono
PRO
4
560
インプロセスQA、テスト自動化にどう向き合う?挑戦の道のり
hacomono
PRO
0
120
Other Decks in Technology
See All in Technology
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.5k
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
440
テックカンファレンス三大ステークホルダーの文化人類学 ─ 違いを認め合う関係性作り
bash0c7
0
140
Vポイント分析基盤におけるデータモデリング20年史
taromatsui_cccmkhd
4
710
GoでCコンパイラを作った話
repunit
0
150
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
390
書籍セキュアAPIについて
riiimparm
0
200
それでも、技術なブログを書く理由 #kichijojipm / Why I Still Write Tech Blogs Even Now
shinkufencer
0
320
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
7
2.8k
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
270
AI工学特論: MLOps・継続的評価
asei
4
920
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
4
1.1k
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
380
WCS-LA-2024
lcolladotor
0
750
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
My Coaching Mixtape
mlcsv
0
170
Balancing Empowerment & Direction
lara
6
1.2k
Navigating Team Friction
lara
192
16k
Become a Pro
speakerdeck
PRO
31
6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Transcript
Copyright hacomono Inc. All Rights Reserved. hacomono Platform Engineering Showcase
#2 ~hacomonoのモジュラーモノリス~
Copyright hacomono Inc. All Rights Reserved. 本イベントは、hacomono の Platform Engineeringに対する取り組みを
Showcaseに並べて紹介するものです。
4 Copyright hacomono Inc. All Rights Reserved. 中村 竜甫 職種:EM 経歴:広告系Sier→事業会社(JMDC)→hacomono(2023/05)
好き:電子書籍、海沿いへの旅行、見る将 ハマっていること:ソーダ味のスイカバーを食べる 聞き手
5 Copyright hacomono Inc. All Rights Reserved. 志賀 誠(まこたす) Makoto
Shiga / twitter: @macotasu 株式会社hacomono Engineer, プラットフォーム所属 古くから動いているシステムを事業の成長に合わせて見直 すことが好き 普段はバイク(GB350)に乗ってツーリング 本日のパネラー
6 Copyright hacomono Inc. All Rights Reserved. 経歴紹介など 2013.4 株式会社カヤックに新卒で入社
ソシャゲのバックエンド開発 /運用 2015.12 株式会社アニメイトラボ アニメ配信サービス オウンドメディアのECS化 2017.8 freee株式会社 マイクロサービス共通モジュール作成 認証認可リプレース担当 2022.8 株式会社hacomono 開発 /基盤/プラットフォーム
プラットフォーム チームの紹介
8 Copyright hacomono Inc. All Rights Reserved. これまでの基盤チームの体制 開発組織および基盤の 体制について
開発基盤 QA SRE IoT 機能開発チーム2 (エンプラ) 機能開発チーム1 (スクール) 機能開発チーム3 (POS) PdM/PMM UI/UX デザイナー CTO 工藤 VPoE VPoPE 矢嶋
9 Copyright hacomono Inc. All Rights Reserved. 今期から基盤チームの体制 開発組織および基盤の 体制について
プラットフォーム QA SRE IoT 機能開発チーム2 (エンプラ) 機能開発チーム1 (スクール) 機能開発チーム3 (POS) PdM/PMM UI/UX デザイナー CTO 工藤 VPoE VPoPE 矢嶋 イネーブリング
10 Copyright hacomono Inc. All Rights Reserved. プラットフォームチームとは チーム紹介 プロダクト開発チームが価値を提供する上で、必要なモノ
(共通機能、知識等)を整えるチーム
モジュラーモノリス導入に至るまで 口座振替
12 Copyright hacomono Inc. All Rights Reserved. これまでのhacomono モジュラーモノリス導入に至るまで hacomono
app 予約 入退館 レジ メール 各マスタ … ➔ 内部的にはCleanArchitectureで、一定のルール がある ➔ 各機能同士が好きなメソッド自由に呼び出せる ➔ 機能間で結合度が高い状態 Engineers
13 Copyright hacomono Inc. All Rights Reserved. これまでのhacomono モジュラーモノリス導入に至るまで hacomono
app 予約 入退館 レジ メール 各マスタ … 2022/04 ~ Team2 Team1 Team3
14 Copyright hacomono Inc. All Rights Reserved. これまでのhacomono モジュラーモノリス導入に至るまで 開発人数
20xx年 2018年 リリース 自由予約 スクール SSO xx制限 予約キャンセル待ち 年会費 ロールレベルカスタマイズ 口座振替 POS OIDC ライセンス編集 etc…
15 Copyright hacomono Inc. All Rights Reserved. hacomono appに起こりうる課題 モジュラーモノリス導入に至るまで
hacomono app 予約 入退館 レジ メール 各マスタ … ➔ チーム間のコンフリクト ◆ e.g. xx機能を修正した場合の影響は?正しい 仕様はなにか? ➔ 特定ドメインが成長 ◆ 専用チーム誕生 ◆ hacomono本体からの分離 ➔ 新サービス誕生 ◆ hacomonoから共通機能を分離 ➔ etc…
16 Copyright hacomono Inc. All Rights Reserved. 達成したいこと モジュラーモノリス導入に至るまで •
人が増えてチームが分割されても生産性を維持したい • 将来的に起こる(かもしれない)物理的な分離に備えた い
17 Copyright hacomono Inc. All Rights Reserved. 問題の解決方針 モジュラーモノリス導入に至るまで それぞれの領域について、知識と実装面で分離できる仕
組みをつくる
18 Copyright hacomono Inc. All Rights Reserved. モジュラーモノリス モジュラーモノリス導入に至るまで hacomono
サービス 論理イメージ レジ メール 各マスタ 予約 入退館 … team1 team2 team4 team3 ※黒線は、各領域毎の API
19 Copyright hacomono Inc. All Rights Reserved. モジュラーモノリス or マイクロサービス
モジュラーモノリス導入に至るまで hacomono app モジュラーモノリス 物理イメージ … … モジュールA モジュールC … モジュールB … モジュールD hacomono app マイクロサービス 物理イメージ サービスA サービスB サービスC
20 Copyright hacomono Inc. All Rights Reserved. モジュラーモノリス or マイクロサービス
モジュラーモノリス導入に至るまで モジュラーモノリス マイクロサービス コミュニケーション △ △ 開発生産性 ◯ △ 事業成長に対する柔軟性 ◯ x 価値提供速度 △ ※◯ 安定性 △ ◯ 導入コスト △ x 運用コスト ◯ x
モジュラーモノリス x Rails 口座振替
22 Copyright hacomono Inc. All Rights Reserved. Railsでモジュラーモノリスに向けた境界をどうやってわけるか モジュラーモノリス x
Rails • 各モジュール間でコード上の境界を持つ方法 ◦ Rubyなので越境が簡単 • 各モジュールが扱う永続仮想化層の境界分け ◦ ActiveRecordが強力
23 Copyright hacomono Inc. All Rights Reserved. Railsでモジュラーモノリスに向けた境界をどうやってわけるか モジュラーモノリス x
Rails https://github.com/Shopify/packwerk
24 Copyright hacomono Inc. All Rights Reserved. 取り組み1: packwerkとは モジュラーモノリス
x Rails hacomono app packages 予約 … メール配信 入退館 顧客管理 … pkg pkg pkg ➔ 機能を論理的分離(pkg = package) ➔ pkgと外部で意図せぬ依存がないかを、 package内のnamespaceをもとに静的 解析できる ➔ pkg毎にcodeowner設定 概要
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
26 Copyright hacomono Inc. All Rights Reserved. 取り組み2: 外部APIはprotoを活用 モジュラーモノリス
x Rails hacomono app packages 予約 … メール配信 入退館 顧客管理 … proto proto proto ➔ pkgのEntryPointは、proto定義から生 成されたRubyコードを用いる ➔ 将来的にpkgがマイクロサービスとなっ た際を考慮
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
28 Copyright hacomono Inc. All Rights Reserved. 取り組み3: 永続化層への制限 モジュラーモノリス
x Rails • ActiveRecord, Arelと自由な書き方ができるため、そ の層で弾くのは厳しい • ARProxyでクエリ実行手前で検知(prod以外) ◦ https://github.com/cookpad/arproxy
29 Copyright hacomono Inc. All Rights Reserved. 取り組み3: 永続化層への制限 モジュラーモノリス
x Rails hacomono app packages 予約 … メール配信 入退館 顧客管理 … proto proto proto pkgアクセスするタイミングで、 RequestContextに許可テーブルを設定 DB ARProxyのpluginとしてQueryTracerを 実行 RequestContextの許可テーブルとSQL を比較して、チェック
30 Copyright hacomono Inc. All Rights Reserved. 取り組み4: 細かい開発体験向上 モジュラーモノリス
x Rails bundle exec rails g hacoway {module} --module=true
31 Copyright hacomono Inc. All Rights Reserved. 共に戦う戦士たちを募集中 お客様に 「WOW!」を届ける基盤づくり
hacomono カルチャーを支えるエンジニア組織 圧倒的な成長を私達と共に成し遂げましょう!