Skip to content

Dev-doc: Quden Backend

これは何?

toruca のバックエンドアプリケーション(NestJS)に関するドキュメントです。

全体像は Quden アーキテクチャ を参照してください。

デプロイフロー

  • default ブランチは development
    • 開発は feature ブランチを切って、PR → development にマージしていく
  • 定期的に main ブランチにマージする
    • main にマージしたら AWS CoduBuild でビルド・ECS にデプロイされる

ローカル開発の始め方

環境変数(重要)

ルートディレクトリに .env.development.local を作成して、シークレットを格納する(bitwarden で管理されています)。

shell
AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
AWS_COGNITO_USER_POOL_ID=<AWS_COGNITO_USER_POOL_ID>
AWS_COGNITO_APP_CLIENT_ID=<AWS_COGNITO_APP_CLIENT_ID>
AWS_COGNITO_APP_CLIENT_SECRET=<AWS_COGNITO_APP_CLIENT_SECRET>
SENDGRID_API_KEY=<SENDGRID_API_KEY>
AWS_S3_BUCKET_FOR_VIDEO_RECORD=<AWS_S3_BUCKET_FOR_VIDEO_RECORD>
AWS_LAMBDA_CONCAT_ARN=<AWS_LAMBDA_CONCAT_ARN>
AWS_CLOUDFRONT_KEY_PAIR_ID=<AWS_CLOUDFRONT_KEY_PAIR_ID>
AWS_CLOUDFRONT_PRIVATE_KEY_NAME=<AWS_CLOUDFRONT_PRIVATE_KEY_NAME>
AWS_CLOUDFRONT_DOMAIN=<AWS_CLOUDFRONT_DOMAIN>
COOKIE_DOMAIN=<COOKIE_DOMAIN>

サーバーの起動

bash
$ yarn dev:docker:up

# alias
$ yarn dev

# シードデータの流し込み(詳細は後述)

サーバーの HTTPS 化

フロントエンドのサーバーを HTTPS 化して立ち上げている場合には、バックエンド側も HTTPS として立ち上げる必要があります。

詳しい手順は フロントエンド概要 にまとめているので、参考にしてください。

すべての設定、準備が完了したら、以下のコマンドから HTTPS でサーバーを立ち上げることができます。

bash
# バックエンド
$ yarn dev:docker:up:https

シードデータの流し込み

まだデータは不十分なので、随時コードを書き足していく。

流し込むデータ自体も日々更新されているので、 ./scripts/seed-db.ts の更新履歴を見て、随時削除→シードデータの流し込みを行ってください。

bash
# データを全削除して、シードデータを流す
$ yarn dev:db:seed:init

# データの削除
$ yarn dev:db:seed:clear

# データを削除して、シードデータを改めて流す(= clear + init)
$ yarn dev:db:seed:reset

yarn add で新たにライブラリを追加した場合

yarn dev:docker:build_up でイメージを再ビルドしてください!

その際、コンテナが残っていると変更が反映されない可能性があるので、docker CLI などで手作業で remove するか、 yarn dev:docker:down コマンドでコンテナを消し去ってから、再ビルドを実行してください。

Why:

ローカル開発環境は ./dockerfiles/app/Dockerfile.local にイメージを定義して作っており、ライブラリはローカルの node_modules ではなく、コンテナ内にインストールされた node_modules を参照するようにしているためです。そのため、 yarn add しただけでは依存関係が解決できず、エラーが出る可能性があります!

ちなみに、古い image が残って PC のストレージを食うので、

などのコマンドで定期的にお掃除するのオススメ!

amplitudeにeventを飛ばしたいとき

analytics service に以下の変更を加える

javascript
const opts: AnalyticsModuleOptions = {
  enable: true
};

this.analytics = new AnalyticsModule(
  this.configService.get<string>("SEGMENT_WRITE_KEY") ||
    "<.env.development.local の SEGMENT_WRITE_KEY>",
  opts,
);

コンテナの起動時にエラーが起こってしまう場合(M1 macOS)

yarn installの途中で止まってしまう場合、dockerfiles/app/Dockerfile.localの先頭にある

docker
FROM node:lts-alpine

docker
FROM --platform=linux/amd64 node:lts-alpine

に書き換えてみてください。

ローカルでDBを確認する

ここではMongoDB Compass(以下compass)を紹介します。

MongoDB Compass

  1. compassをインストール

    1. 公式からなら https://www.mongodb.com/try/download/compass
    2. brewならbrew install --cask mongodb-compass
  2. 立ち上げる

  3. docker-composeに記載されているポートを入力してください

    json
    mongodb://localhost:27018/
  4. このような画面になっていたら疎通成功です

トラブルシューティング

node-canvasのinstallに失敗する

yarn install時にエラーが発生することがあります。

これは、node-canvasがローカルマシン上でコンパイルする必要があり、そのコンパイルのために必要なモジュールがないと言われています。

そのため必要なモジュールをインストールし、再度トライする必要があります。

brewの場合

bash
brew install pkg-config cairo pango libpng jpeg giflib librsvg pixman

サインインできない

エラーログを見て状況を確認しましょうと言うのが前提ですが、怪しいのは以下あたりです

  • backend & db間の通信
    • dbにseed dataを流し込んでないなどで、ユーザーデータが存在しない場合など
  • backend & cognito間の通信
    • envファイルが適切に設定されていないなど

その他、ありうること

  • branchの内容が最新でない、最新の変更をpullする
  • dockerのキャッシュ周り、imageやcontainerを作り直してみる
  • ブラウザのキャッシュ周り、シークレットモードで試してみる