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
500
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.
開発者の認知負荷軽減を目指して選んだCrossplane - Self-serviceの理想と現実
hacomono
PRO
0
220
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
6
1.5k
AI ネイティブな開発プロセスを目指して ~田中のローカルmac編~
hacomono
PRO
1
79
新規事業×QAの挑戦:不確実性を乗りこなす!フェーズごとに求められるQAの役割変革
hacomono
PRO
0
490
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
450
作ったのに使われなかったを繰り返さないために。
hacomono
PRO
0
360
NewSQL_ ストレージ分離と分散合意を用いたスケーラブルアーキテクチャ
hacomono
PRO
4
540
インプロセスQA、テスト自動化にどう向き合う?挑戦の道のり
hacomono
PRO
0
110
ウェルネス SaaS × AI、1,000万ユーザーを支える 業界特化 AI プロダクト開発への道のり
hacomono
PRO
0
2.2k
Other Decks in Technology
See All in Technology
新しいVibe Codingと”自走”について
watany
6
320
Snowflakeと仲良くなる第一歩
coco_se
4
470
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
190
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.4k
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
0
130
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
340
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
310
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
5
2.4k
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
680
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
2.2k
失敗を資産に変えるClaude Code
shinyasaita
0
660
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
840
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Paper Plane
katiecoart
PRO
1
51k
Unsuck your backbone
ammeep
672
58k
Designing Powerful Visuals for Engaging Learning
tmiket
1
410
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
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 カルチャーを支えるエンジニア組織 圧倒的な成長を私達と共に成し遂げましょう!