1. 背景
簡易なAPIをサンプル的に作ってほしいとリクエストがありました。
在庫を登録して、在庫を引き当てて売上を計上する。というようなAPIです。
細かくいうとAPIは以下のようなイメージでした。
- 在庫登録
- 登録した在庫確認
- 売上をたてる
- たてた売上を確認する
- テーブル初期化する
簡易といっても、上記のようにそれなりの処理があります。また、データベースとの連携もありました。
実装
以下のリポジトリに実装したものをおいておきます。
yamadatt/api-sample: golangのAPIサンプル
どんな考え方で実装したかを記録。
サンプルAPIはAWSのAPIGWで最終的には実装する計画ではあるものの、いったんはローカルで動けば良いです。(もしかしたら、ECSでコンテナ化もある)
そして、実装はスピードが必要でした。
言語はgolang
言語はgolangを選択しました。理由は慣れているから。
golangは標準ライブラリでwebサーバを構築できるし、ハンドラーによる制御も容易だと考えました。
データベースはSQLite
データベースはmysqlやpostgresqlを使うと、環境作るのに時間がかかります。
性能は求められないし、動けばいいです。なので、SQLiteを使用することにしました。
実装の流れ
1つのAPIごとに、以下の流れで実装しました。
- GitHubにISSUEをたてる
- GitHub Copilot Workspaceに書いてもらう
- コードをpullして、動作確認とデバッグ
- コードをGitHubにPUSH。上の1に戻る
GitHub Copilot Workspaceは本当に便利です。ゼロからコードを書くには適していると思います。
ですが、動きません。パッケージ管理方法が古かったり、ローカルパッケージの読み込みが正確ではなかったりします。
なので、実際に動かしてデバッグする。デバッグしたコードをGitHubにPUSHする。というのを繰り返しました。
デバッガーのような作業にはなるのですが、なんとなくの勘所は掴めます。APIへの分岐はmainに書くんだなーとか、データベースの処理はdatabase.goにまとめるんだなーとか、そういう感覚があるとないとでは違うと思うので。
なんて勉強しながらやっていたら、実装までに3時間から4時間ぐらいはかかりました。
またClineも試したいこともあり、GitHubCopilotやCline(GPT-4o)も使ってました。
甘い部分
エラー処理が甘かったり、コードをうまく共通化できていなかったりします。
また、テストを書いたり、CI/CDもやりたいなとは思うので、これは次の課題かな。