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
モジュラモノリスにおける境界をGoのinternalパッケージで守る
Search
magavel
February 21, 2026
Programming
4.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モジュラモノリスにおける境界をGoのinternalパッケージで守る
Go Conference mini 2026 in Sendai:
https://sendaigo.jp/
magavel
February 21, 2026
More Decks by magavel
See All by magavel
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
1.7k
Other Decks in Programming
See All in Programming
残高管理から台帳サービスへの進化
artoy
1
210
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.3k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
No More NoSuchMethodError
exoego
1
110
Railsバージョンを4倍にした話
optim
0
500
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
290
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.7k
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
290
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
3
1.1k
Featured
See All Featured
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
790
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
New Earth Scene 8
popppiees
4
2.7k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
Transcript
モジュラモノリスにおける境界を Goのinternalパッケージで守る Go Conference mini 2026 in Sendai magavel /
SODA inc.
自己紹介 • 大阪からやってきました • 普段はGoでSNKRDUNKを開発しています magavel / SODA inc. @magavel_dev
\ 2秒でフォロバします/
本日のテーマ 結合とGo
ソフトウェア文脈でいう結合って何ですか?
”結合はむしろ、 忘れてはならない設計ツールだ。” ソフトウェア設計の結合バランス (2025) 第1章 結合とシステム設計 P14
前回の仙台での発表から約3年... モジュール分割、今もしっかり進めています! ref: https://speakerdeck.com/sh0e1/snkrdunkdego-plus-grpcde-susumerumoziyuramonorisu
前回の仙台での発表から約3年... コードベースの規模もさらに拡大中 🤯 13,309 2,238,707 Goのファイル数 Goのコード行数 2026/02/20時点
CASE. 1 internalパッケージで結合強度を コントロールする
Goのinternalパッケージを使うと • あるモジュールのinternal配下へはその モジュールからしか参照できなくなる • コードレビューや運用ルールではな く、Go標準の仕組みを使ってビルド段 階で境界を守れる • 各モジュールを
interface/(公開層) と internal/(内部実装層)の二層に分 けて、ドメイン・ユースケース・イン フラなどはすべて internal に閉じ込め ている
internalパッケージの抜け穴 • ちなみに絶対に突破できない仕組みというわけではない • 例えばtsgoとtsgolintのケース ◦ • とはいえ、Goチームでも使われているので、硬い仕組みであることには変 わりない ref:
https://speakerdeck.com/syumai/how-tsgolint-exposes-typescript-gos-private-apis
CASE. 2 public functionsパターン(※1)を 導入する ※1:public functionsパターンは造語なので覚える必要はありません。
モジュールの公開インターフェース設計 • interface/配下に通信方式ごとにディレ クトリを切って外部に公開する • 他モジュールからはこの公開関数(Go のinterface)を呼び出す • モジュールから直接クライアントアプ リにAPIを提供する場合は、httpディレ
クトリ配下にhandlerを実装する
実例:商品カタログモジュールの公開関数と呼び出しイメージ 呼び出し元↓ ↑定義元
CASE. 3 depguardで旧コードへの依存を防ぐ
OpenPeeDeeP/depguardとは • golangci-lintに組み込まれているリン ターの一つ。 • importパスのホワイトリスト/ブラック リストを定義し、禁止したい依存をCI で自動検知・制限できる • SNKRDUNKでは、分離モジュールから
モノリス(旧コード)への依存を防ぐ ルールを.golangci.ymlに定義し、CIで全 PRをチェックしている
段階的に移行を進めている • DBはコンテキスト境界がより明確になってきた段階で分割する方針に変わ りなし、なのでモジュールとモノリスでDBを共有している • モジュールのinfrastructure層だけはモノリスへの依存を許容する • ここでも、将来的な抵抗要因と現時点でのコストを天秤にかけるなど、結 合バランスの考え方が必要になってくる •
現在進行形の重要トピック ◦ コンテキスト/モジュール間でトランザクションを受け渡し可能にする か、Sagaパターンなど分散トランザクションを導入するか...等
まとめ • 結合は設計ツール。 ◦ 教科書通り(完全な疎結合)を目指すのではなく、トレードオフ や組織戦略を踏まえたうえで結合をむやみに恐れないことも大 事。 • Goのコードベースでモジュラモノリスを実現するために、Goの internalと公開関数という建て付けを採用して今のところうまくいっ
てそう。 • リアーキテクチャ推進の文脈でもガードレール設計は大事。 ◦ 今回取り上げたdepguardなどlinterを活用しよう。
おまけ ブースに居る鑑定士Gopherくん にぜひ会いにきてください! Xにイラストの感想投稿してもらえる と、手伝ってくれたイラストレーター が喜びます🙏
Thank you. ご清聴ありがとうございました! Special Thanks SNKRDUNKにおけるモジュラモノリスへの移行は、 同じリアーキテクチャ推進チームの@avexbesukeさん、@mishさ ん、@shinodaさんをはじめ、担当ドメインのモジュール分割に関 わってくれている人たちによって支えられています。