ハッカソン2022で作成するポイントアプリのバックエンドプロジェクト
MIT License
ハッカソン2022で作成するポイントアプリのバックエンドプロジェクト
# 環境手順
$ git clone https://github.com/hack-31/point-app-backend.git
$ cd ./point-app-backend
# JWTに必要なキー生成
$ make create-key
# ビルド、コンテナ起動
$ make build-up
# コンテナの中に入る
$ make in
# マイグレーション適用
$ make migrate
$ make seed
# コンテナを抜ける
$ exit
# サーバーログ
$ make log
# 2回目位以降
$ make up
$ make log
詳しくは、makeコマンドを実行
サーバー起動したら、ホスト側で以下のURLでアクセス可能
ソースコードを書く際、vscodeを利用しているユーザは、Dev containerを利用して開発することを推奨する。 コンテナ内のファイルを直接修正でき、Goの拡張機能により型補完や保存時フォーマットが使えるようになる。
dev containerでの開発方法
>open folder in container
を押し、このプロジェクトを選択$ air
でサーバー起動今回、ホットリロードを利用しているため、保存のたびにサーバーを再起動する必要はない。
コンテナ内で以下のコマンドを実行
# フォーマッター
$ make format
# リンター(フォーマッターを事前)
$ make lint
テストを実行するのみであれば以下のコマンドで行う
$ maek test
より詳細なテストのカバレッジを表示したい場合は以下のコマンドを実行
# ブラウザで表示(ホスト側)
$ make wc
開発用データベース情報
項目 | 値 |
---|---|
データベース種類 | MySQL |
サーバ | db |
ユーザ名 | admin |
パスワード | password |
データベース | point_app |
$ make dry-migrate
でDDLを確認して、$ make migrate
でマイグレーションする流れとなる
# マイグレーションする際に発光されるDDLを確認(実行はされない)
$ make dry-migrate
# マイグレーション適用
$ maae migrate
./_tool/mysql/seed.sql
に初期データを挿入するコマンドを記述
AWS cloud9のpoint-app-devで以下のコマンドで挿入
$ make seed
DIを行う際には、google/wireというDIツールを使用します。新しいルーティングを追加したり、既存のルーティングのIFが変更された場合は、それに合わせて更新する必要があります。以下のコマンドで更新できます。
# api
$ make wire
# batch
$ make wire-b
router/wire.go
は定義元のファイルであり、router/wire_gen.go
は生成されたファイルです。実際の利用では、router/wire_gen.go
が使用されます。
詳しい説明は、各ディレクトリのREADME.mdに些細されているものもあります。
/auth
/router
/docs
/docs/openapi.yml
で行う/cmd
/handler
/service
/domain
/repository
/myerror
/_tools
/_tools/mysql/schema.sql
にテーブル作成のためのDDL定義/config
/constant
/utils
# バッチアプリの作成
$ make batch
success! try batch command!
# batchの実行
$ batch
NAME:
batch - point app batch processing
USAGE:
batch [global options] command [command options]
COMMANDS:
reset_sendable_point, rsp Reset sendable point
help, h Shows a list of commands or help for one command
以下の方法で実行。
$ make mock
各インターフェース定義書があるディレクトリに/_mock
があり、mock_*.go
というファイルが作成される。
そのファイルがモックファイルになる。
以下の方法は古いため、mockgenを利用した方法に書き換える。
以下のコマンドでモックを作成する
$ make moq
各層でモックを作成する。
モックを追加する際は、./Makefile
のgo moq
に記載されたmoq
コマンドのオプションにIF名を追加する
$ moq -out ./handler/moq_test.go ./handler RegisterUserService [ここにIF名を追加する]
今後モックファイルを追加する際は*_moq_test.go
と命名にすること
GitHub Action, Codepipelineによる自動デプロイになります。mainブランチにマージされると自動でデプロイされます。 GitHub Actionでは、Docker Imageを作成、ECRに登録を行い、Codepipelineでは、ECRからImageを取得し、ECSにデプロイします。
AWS cloud9のpoint-app-devにて以下のコマンド実行
$ pwd
/home/ec2-user/environment/point-app-backend
# 値の設定
$ AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
$ IMAGE_TAG=$(git rev-parse HEAD)
$ ECR_REGISTRY=${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com
# ビルド
$ docker image build \
-t ${ECR_REGISTRY}/point-app-backend:latest \
-t ${ECR_REGISTRY}/point-app-backend:${IMAGE_TAG} \
--target deploy ./ --no-cache
# ECRログイン
$ aws ecr --region ap-northeast-1 get-login-password | docker login --username AWS --password-stdin ${ECR_REGISTRY}/point-app-backend
# ECR push
$ docker image push -a ${ECR_REGISTRY}/point-app-backend
makeコマンドを利用する場合は、以下の2つでデプロイ可能
$ make build
$ make push
ECRにデプロイされると、latestタグの更新がトリガーとなり、codepipelineによってECSにデプロイが走ります。