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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
magavel
February 21, 2026
Programming
0
160
モジュラモノリスにおける境界をGoのinternalパッケージで守る
Go Conference mini 2026 in Sendai:
https://sendaigo.jp/
magavel
February 21, 2026
Tweet
Share
More Decks by magavel
See All by magavel
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
1.4k
Other Decks in Programming
See All in Programming
その「common」ディレクトリ、腐っていませんか?
kinocoboy2
1
110
CSC307 Lecture 11
javiergs
PRO
0
580
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
4
310
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
650
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
130
15年目のiOSアプリを1から作り直す技術
teakun
0
470
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
190
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
160
NOT A HOTEL - 建築や人と融合し、自由を創り出すソフトウェア
not_a_hokuts
2
400
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
380
ぼくの開発環境2026
yuzneri
1
280
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
370
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
270
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
100
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
500
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
The Limits of Empathy - UXLibs8
cassininazir
1
230
Building Adaptive Systems
keathley
44
2.9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
65
Documentation Writing (for coders)
carmenintech
77
5.3k
Optimizing for Happiness
mojombo
379
71k
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. ご清聴ありがとうございました!