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
4.1k
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
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.4k
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
260
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
140
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
760
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
130
不幸な GC
chencmd
0
860
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
280
初めての模倣学習とVLA
natsutan
0
420
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.4k
Press start. Python's next generation.
willingc
PRO
3
300
自分的「カンファレンスの楽しみ方」
syumai
0
170
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
280
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
480
Art, The Web, and Tiny UX
lynnandtonic
304
22k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
810
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Odyssey Design
rkendrick25
PRO
2
790
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
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さんをはじめ、担当ドメインのモジュール分割に関 わってくれている人たちによって支えられています。