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
モジュラモノリスにおける境界をGoのinternalパッケージで守る
Search
magavel
February 21, 2026
Programming
3.9k
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.6k
Other Decks in Programming
See All in Programming
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.6k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
410
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
120
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
120
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
120
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
2
630
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
140
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
280
AI時代のUIはどこへ行く?その2!
yusukebe
21
7.1k
Vite+ Unified Toolchain for the Web
naokihaba
0
290
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
Being A Developer After 40
akosma
91
590k
WENDY [Excerpt]
tessaabrams
11
38k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Site-Speed That Sticks
csswizardry
13
1.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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さんをはじめ、担当ドメインのモジュール分割に関 わってくれている人たちによって支えられています。