見出し画像

【Go言語】Go+Echo+GORMでREST APIを構築した話

対象読者

・Go言語を用いてサーバーを構築してみたい方
・Echoフレームワークを勉強したい方
・Clean Architectureを理解したい方

はじめに

本記事では、Go言語を使用して、EchoフレームワークとGORM(Go言語のORMライブラリ)を組み合わせてREST APIを構築する実践的な手法について紹介します。

Go言語の特徴であるシンプルさと高いパフォーマンスに加え、軽量かつ高速なEchoフレームワークと柔軟なデータベース操作が可能なGORMが組み合わさることで、効率的で信頼性の高いAPIを構築することができます。

記事では、APIの設計からルーティング、データベースとの連携まで、具体的なコード例を交えながら詳しく解説します。Go言語を利用してREST APIを構築する際の手引きとして、ぜひご参考ください。

事前準備

本ハンズオンの前提は以下の通りです。

・OS:macOS Ventura
・開発環境:Visual Studio Code
・Webフレームワーク:Echo v4.10.2
・ORM:GORM v1.25.0
・言語:go 1.19

§1 基礎から学ぶClean Architecture

まずはハンズオンを始める前に、Clean Architectureの概念について理解しておきましょう。

各レイヤーの責務

Clean Architectureとは、ソフトウェアシステムを柔軟で保守可能な形で設計するための原則とパターンです。

以下で、Clean Architectureの各レイヤーであるEntities、Use Cases、Interface Adapters、Frameworks & Driversの責務を簡潔に説明します

Entities(エンティティ):
・ビジネスドメインの核となるもの。
・ビジネスルールやデータの状態を表現し、永続化の方法に依存しない純粋なオブジェクト。
・データモデルやデータベーススキーマの変更に対しても安定性を保つ。

Use Cases(ユースケース):
・ユースケースは、ビジネスルールを実現するための具体的な操作や処理を表現。
・エンティティを利用し、ビジネスロジックを実装。
・入力データのバリデーション、エラーハンドリング、データの操作や変換などを担当。

Interface Adapters(インターフェースアダプタ):
・外部のデータやリソースとのやり取りを担当。
・プレゼンテーション層(UI)、データベース、外部サービスなどのインターフェースを実装。
・ユースケースと外部要素の間のデータの変換や調整を行う。

Frameworks & Drivers(フレームワークとドライバ):
・外部のフレームワークやツール、デバイスとの連携を担当。
・データベース接続、UIフレームワーク、Webサーバなどが含まれる。
・外部要素と内部のレイヤーをつなぐ役割を果たし、通信やデータの変換を処理。

いかがでしょうか。
これで、Clean Architectureの理解は完璧、、、、とはならないと思います。

実際に処理が流れる方向と依存関係の方向が異なるなど、ポイントが分かったようで、具体的なコードのイメージは湧いていないのではないでしょうか。  

ここからは、今回のハンズオンにClean Architectureを適用して解説していきます。

ハンズオンにアーキテクチャを適用

処理フローと依存関係の方向

サーバーサイドは、router、controller、usecase、repositoryの4つの処理で実装していきます。

routerで、クライアントから送られるHttpリクエストを受け取り、requestに対応するcontrollerを呼び出します。controllerでは、usecaseが処理しやすいように入力値を加工します。usecaseではアプリケーション固有のビジネスロジック、今回でいえばCRUD操作の制御などを担当し、最後にrepositoryでDBへの書き込み処理を行います。

クラス図(簡易版)

Clean Architectureの特徴とも言える依存性逆転の原則(DIP)は、図のように「各モジュールが抽象インターフェースに依存し具体的な実装に依存しない形で結合する方法」で実現しています。そうすることで、アプリケーションロジックを実装するUse Cases層が依存関係の中心になるということです。

§2 プロジェクト作成

事前準備の項目を用意した上で、以下のコマンドを実行していきます。階層はお好みで構いません。

// Goのバージョンを確認
go version

// 新規でGoプロジェクトを作成
go mod init  go-echo-api

§3 実装内容(コード付)

ディレクトリ構造は以下の通りです。

ここから先は

12,591字 / 5画像

¥ 300

この記事が気に入ったらサポートをしてみませんか?