1. 背景

簡易なAPIをサンプル的に作ってほしいとリクエストがありました。

在庫を登録して、在庫を引き当てて売上を計上する。というようなAPIです。

細かくいうとAPIは以下のようなイメージでした。

  • 在庫登録
  • 登録した在庫確認
  • 売上をたてる
  • たてた売上を確認する
  • テーブル初期化する

簡易といっても、上記のようにそれなりの処理があります。また、データベースとの連携もありました。

実装

以下のリポジトリに実装したものをおいておきます。

yamadatt/api-sample: golangのAPIサンプル

どんな考え方で実装したかを記録。

サンプルAPIはAWSのAPIGWで最終的には実装する計画ではあるものの、いったんはローカルで動けば良いです。(もしかしたら、ECSでコンテナ化もある)

そして、実装はスピードが必要でした。

言語はgolang

言語はgolangを選択しました。理由は慣れているから。

golangは標準ライブラリでwebサーバを構築できるし、ハンドラーによる制御も容易だと考えました。

データベースはSQLite

データベースはmysqlやpostgresqlを使うと、環境作るのに時間がかかります。

性能は求められないし、動けばいいです。なので、SQLiteを使用することにしました。

実装の流れ

1つのAPIごとに、以下の流れで実装しました。

  1. GitHubにISSUEをたてる
  2. GitHub Copilot Workspaceに書いてもらう
  3. コードをpullして、動作確認とデバッグ
  4. コードをGitHubにPUSH。上の1に戻る

GitHub Copilot Workspaceは本当に便利です。ゼロからコードを書くには適していると思います。

ですが、動きません。パッケージ管理方法が古かったり、ローカルパッケージの読み込みが正確ではなかったりします。

なので、実際に動かしてデバッグする。デバッグしたコードをGitHubにPUSHする。というのを繰り返しました。

デバッガーのような作業にはなるのですが、なんとなくの勘所は掴めます。APIへの分岐はmainに書くんだなーとか、データベースの処理はdatabase.goにまとめるんだなーとか、そういう感覚があるとないとでは違うと思うので。

なんて勉強しながらやっていたら、実装までに3時間から4時間ぐらいはかかりました。

またClineも試したいこともあり、GitHubCopilotやCline(GPT-4o)も使ってました。

甘い部分

エラー処理が甘かったり、コードをうまく共通化できていなかったりします。

また、テストを書いたり、CI/CDもやりたいなとは思うので、これは次の課題かな。