最初のアプリ
Spine CLIで新しいプロジェクトを作成し、GET /healthが{"status":"ok"}を返すことを確認します。生成されたファイルを読みながら、アプリを構成し、検証してから実行する流れも確認します。
Go 1.25.5以上が必要です。CLIの推奨バージョンはGo 1.27.3です。初回の依存関係のダウンロードにかかる時間は環境によって異なります。
1. CLIのインストールとコマンドの確認
go install github.com/NARUBROWN/spine-cli/cmd/spine@v0.1.4
spine versionspine versionはspine-cli 0.1.4を表示します。コマンドが見つからない場合は、インストール手順でGoの実行ファイルのパス設定を確認してください。
2. プロジェクトの生成
プロジェクトを配置する親ディレクトリで実行します。hello-spineディレクトリがすでにある場合は、別の名前を使ってください。
spine new hello-spine --module example.com/hello-spine
cd hello-spine
go mod tidyhello-spineディレクトリにプロジェクトファイルが生成されます。CLIはgo.modにSpine v0.5.1を指定し、go mod tidyが必要な依存関係をダウンロードします。
3. 生成された構造の確認
hello-spine/
├── .gitignore
├── README.md
├── go.mod
├── main.go
├── spine.toml
└── internal/application/
├── application.go
└── application_test.goプロジェクトには、実行の起点となるmain.goと、アプリの構成コードを含むinternal/applicationディレクトリがあります。spine.tomlは、モジュールパス、エントリーポイント、アプリの構成コードの場所とポートをCLIに伝えます。
module = "example.com/hello-spine"
entrypoint = "."
composition = "./internal/application"
port = 8080internal/application/application.goのBuildApplication()は、アプリと実行オプションを返します。生成されたコードはHealthControllerのコンストラクタとGET /healthを登録し、HTTPの実行オプションとしてboot.HTTPOptionsを明示します。
機能を追加するときは、この関数、またはここから呼び出すRegister(app) error関数に、ルート、コンストラクタ、インターセプターの登録をまとめます。詳しい方法はプロジェクト構造で説明します。
main.goはすでに生成されているため、変更する必要はありません。次のコードで、アプリの構成、検証、実行の順序を確認してください。
func main() {
app, options, err := application.BuildApplication()
if err != nil {
log.Fatal(err)
}
if err := app.Validate(options); err != nil {
log.Fatal(err)
}
if err := app.Run(options); err != nil {
log.Fatal(err)
}
}4. アプリ構成とコードの検証
生成したプロジェクトのルートディレクトリで実行します。
spine doctor
spine inspect
spine contract check
spine verifydoctorはツールとプロジェクト設定を診断します。inspectは、コードに登録されたルートや依存関係などのアプリ構成を表示します。CLIが登録コードから抽出したこの情報を、実行契約と呼びます。
contract checkは実行契約を検査します。verifyは契約の検査に加えて、gofmt、go vet、Goのテストを実行します。生成されたapplication_test.goも、サーバーを起動せずにBuildApplication()とapp.Validate(options)を検査します。すべてのコマンドがエラーなく終了すれば、サーバーを実行する準備は完了です。
5. 実行とレスポンスの確認
spine devサーバーが動いている状態で、別のターミナルを開いてリクエストを送信します。
curl http://localhost:8080/health{"status":"ok"}上のJSONレスポンスが返れば、GET /healthが動作したことを確認できます。サーバーを実行したターミナルでCtrl+Cを押し、開発サーバーを終了します。
