Go言語のポートとアダプタ(Hexagonal Architecture)の基本をやさしく解説!初心者向け設計入門
生徒
「Go言語でアプリを作るとき、きれいな設計ってどうやるんですか?」
先生
「Go言語ではポートとアダプタという設計手法があります。Hexagonal Architectureとも呼ばれます。」
生徒
「名前がむずかしそうです。初心者でも理解できますか?」
先生
「仕組みは意外とシンプルです。たとえ話とGo言語のコード例で説明します。」
1. ポートとアダプタとは何か
ポートとアダプタはソフトウェア設計の考え方の一つです。Hexagonal Architectureとも呼ばれます。六角形という意味ですが、形そのものよりも中心と外側を分ける考え方が重要です。
中心にはアプリケーションの本質的な処理を置きます。これをドメインやビジネスロジックと呼びます。外側にはデータベースや画面や外部サービスがあります。
ポートとは出入り口の約束です。アダプタとは実際に外とつなぐ具体的な実装です。Go言語ではインターフェースを使ってポートを表現します。
2. 身近なたとえで理解する
家庭用ゲーム機を想像してください。本体が中心です。コントローラーやテレビは外側です。本体には接続口があります。これがポートです。
実際に差し込むケーブルや機器がアダプタです。本体はコントローラーの細かい作りを知りません。ただ操作信号を受け取る約束だけを知っています。
Go言語のHexagonal Architectureも同じです。中心の処理はデータベースの種類や通信方法を知りません。約束だけを知ります。
3. シンプルなドメインの例
まずは中心となるビジネスロジックを作ります。ユーザーを登録する処理を例にします。
package main
type User struct {
Name string
}
type UserService struct {
repo UserRepository
}
func (u UserService) Register(name string) {
user := User{Name: name}
u.repo.Save(user)
}
ここで重要なのはUserRepositoryという型です。まだ具体的な中身は決めていません。これがポートになります。
4. ポートをインターフェースで定義する
Go言語ではインターフェースを使ってポートを定義します。インターフェースとは動きの約束です。
type UserRepository interface {
Save(user User)
}
この定義により中心のUserServiceは保存できるという約束だけに依存します。データベースが何であるかは知りません。
この状態が依存の分離です。Go言語のクリーンアーキテクチャやレイヤードアーキテクチャでも同じ考え方が使われます。
5. アダプタの実装例
次に外側のアダプタを作ります。ここでは簡単なメモリ保存を行います。
import "fmt"
type MemoryRepository struct{}
func (m MemoryRepository) Save(user User) {
fmt.Println("保存しました:", user.Name)
}
このMemoryRepositoryがアダプタです。ポートであるUserRepositoryを実装しています。
main関数でつなげます。
func main() {
repo := MemoryRepository{}
service := UserService{repo: repo}
service.Register("Taro")
}
実行結果は次のようになります。
保存しました: Taro
6. データベースを差し替える
Hexagonal Architectureの強みは差し替えのしやすさです。別のアダプタを作ります。
type ConsoleRepository struct{}
func (c ConsoleRepository) Save(user User) {
fmt.Println("コンソール出力:", user.Name)
}
mainで差し替えるだけです。
func main() {
repo := ConsoleRepository{}
service := UserService{repo: repo}
service.Register("Hanako")
}
中心のロジックは一切変更していません。これがGo言語でポートとアダプタを使うメリットです。
7. なぜ初心者におすすめなのか
ポートとアダプタは難しく見えますが、考え方は単純です。中心を守る設計です。外側の変化に強い構造になります。
Go言語はインターフェースがシンプルなので、Hexagonal Architectureと相性が良い言語です。大規模開発やマイクロサービスでも使われています。
設計段階で中心と外側を分ける意識を持つだけで、保守性や拡張性が大きく向上します。これがGo言語アーキテクチャ設計の基本になります。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!