Closed10

goでdocker接続からAPI作成

がおーがおー

記事の中で出てきたライブラリ
gin
https://gin-gonic.com/ja/docs/

ginを使用してサーバーを立てた

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {

	router := gin.Default()
	router.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "テスト",
		})
	})
	router.Run() // 0.0.0.0:8080 でサーバーを立てます。 default設定
}
がおーがおー

airは必要なのか?
ホットリロードするもの
https://zenn.dev/ring_belle/articles/go-docker-air-local

next.jsの場合は、volumesでローカルファイルをマウントされるように設定すれば行けた気がする

ChatGPTさん

・Next.jsの場合
    Node.jsのランタイム環境で動作
    開発モード(next dev)では、Node.jsのwatch機能を使用
    ソースコードの変更を検知して自動的に再コンパイル
    コンパイル済みのJavaScriptをメモリ上で実行
    再起動が不要
・Goの場合
    コンパイル言語
    ソースコードの変更を検知しても、自動的に再コンパイルされない
    コンパイル済みのバイナリを実行
    変更を反映するには再ビルドと再起動が必要

結論
Next.jsとGoでは、言語の特性が異なります:
Next.js: インタープリタ型(実行時にコードを解釈)
Go: コンパイル型(事前にバイナリにコンパイル)
そのため、Goではairのようなツールが必要で、Next.jsでは不要です。
がおーがおー

goのAPIドキュメント作成
https://github.com/swaggo/swag

設定追加
main.goへのSwagger設定追加
ハンドラーへのSwaggerアノテーション追加
コマンド叩く
swag init

下記ファイルができて無事にAPI仕様書完成
swagger.yaml
swagger.json
docs.go

がおーがおー

gormが不便!!
swaggerを作成してFEでswagger-typescript-apiで型を生成する
modelの定義が全てオプショナルになる

ChataGPTさん

OpenAPIスキーマでは、フィールドが明示的に「required」とマークされていない限り、デフォルトでオプショナルとして扱われます。

不便すぎる

がおーがおー

TODO:goのアーキテクチャを調べる
いろんな設計パターンがありそう

がおーがおー

envの取り扱いで沼ったのでメモ

以下のように環境変数の値を取得できる
os.Getenv("PORT")

ただ、localhostでは取得できない
renderでのdeploy時は取得できる

renderのEnvironmentで設定している場合は、プラットフォーム側で環境変数をシステムレベルで設定しているので上記のコードでdeploy時に環境変数が取得できるらしい

localhostでは.envファイルをおいても上記のコードではOSの環境変数のみを参照するため取得できない
→今回はdocker-compose.ymlでenv_fileを設定してdocker compose upで参照可能

がおーがおー

環境変数の設定はコンテナの作成時に行われる
buildはイメージの作成のみ
upでコンテナ作成時に環境変数が設定される

このスクラップは3ヶ月前にクローズされました