Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
hacomono Platform Engineering Showcase #2
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
hacomono Inc.
PRO
July 27, 2023
Technology
520
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.
マルチプロダクトを支えるSelf-service基盤構築の軌跡
hacomono
PRO
0
57
師匠と弟子が「現場」で戦う —フルリモート時代のプロダクトエンジニアJEDI育成プログラムの全貌
hacomono
PRO
0
640
10人は喜んでも、10万人は喜ばない。 10万人の”来たい”を、構造で作る。
hacomono
PRO
0
110
正しく凹む技術:運動で感情を GC(ガベージコレクション )しよう
hacomono
PRO
1
290
開発者の認知負荷軽減を目指して選んだCrossplane - Self-serviceの理想と現実
hacomono
PRO
0
430
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
8
2k
AI ネイティブな開発プロセスを目指して ~田中のローカルmac編~
hacomono
PRO
1
110
新規事業×QAの挑戦:不確実性を乗りこなす!フェーズごとに求められるQAの役割変革
hacomono
PRO
0
710
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
660
Other Decks in Technology
See All in Technology
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
310
Let's Change Our World—Again
snoozer05
PRO
2
220
会社紹介資料 / Sansan Company Profile
sansan33
PRO
31
430k
野蛮なアジャイル [サイボウズ発!]組織の常識を覆した反骨のスクラム実践記 / Barbaric Agile - Enterprise Agile Study Group
ama_ch
0
120
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
420
こんにちは!SORACOM です & IoT とは【SORACOM UG 東北 in 八戸】
soracom
PRO
0
130
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
0
170
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
930
Local CI × GitHub Actions
gogutan
3
240
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
150
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
190
How to Design Configuration for Rails Applications
willnet
1
960
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Git: the NoSQL Database
bkeepers
PRO
433
67k
WCS-LA-2024
lcolladotor
0
900
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
エンジニアに許された特別な時間の終わり
watany
109
250k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
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 カルチャーを支えるエンジニア組織 圧倒的な成長を私達と共に成し遂げましょう!