WEBフレームワークとして、ginを使って書きました。 ginのルーター機能を使って、8080ポートへのGETメソッドに対するレスポンスをHelloWorldで行っています。
herokuを使って課題1のアプリケーションを公開しました。
URLはこちらです。
herokuにおいては、Dockerコンテナを起動するポートを環境変数で指定するという仕組みになっているため、課題1のコードをベースに環境変数から起動ポートを取得するということを行いました。
また、外部に公開するということなので、go run
ではなくビルドして、実行コードを生成するという方式にしました。
goで書いたapiサーバーのコンテナ(serverディレクトリ)と、postgresqlを使って構築したデータベースコンテナ(dbディレクトリ)をdocker-composeを使って同時に起動する仕組みにしました。 apiサーバーではserver.goでサーバーのセットアップとルーティング、user.goでリクエストのハンドリング、model.goでデータベースコンテナとのやり取りを実装しています。 Dockerfile内のfreshというコマンドは、コードの変更を感知して自動ビルド、実行してくれるものです。また、goのmodule機能を使って、使っている外部モジュールを管理しています。 dbコンテナでは、起動時に自動実行されるディレクトリにinit.sqlを配置することで、コンテナ起動時に自動的に必要なデータベースとテーブルを作成するようにし、apiサーバーのdepend on にdbコンテナを指定することで、dbコンテナが起動していることを担保するようにしました。 仕様から、idはユニークであることが予想されたため、データベースの主キーはidとし、データベース側でユニークかつ連続であることを担保しました。 タイムスタンプに関してはmodel.goで実際にデータベースを操作するタイミングで時間を取得しクエリを構成しました。
説明を聞いた際に、攻めのインフラという考えに興味を持ち、インフラコースに応募しました。まだまだ技術的には未熟ですが、参加できたら様々なことを吸収していけたらと考えています。