開発環境を作る
engawaの開発環境を作り、開発サーバーを起動するまでの手順です。サーバーとして運用するための手順は インストール を参照してください。
| ソフトウェア | 備考 |
|---|---|
| Node.js | バージョンはリポジトリの .node-version に書かれています(24系) |
| pnpm | corepack enable で、package.json の packageManager に書かれたバージョンが使われます |
| PostgreSQL | 15以上 |
| Redis | 7系 |
| FFmpeg | 動画のサムネイル生成などに使います |
| Git | サブモジュール(fluent-emojis)があるので --recursive で取得します |
ソースコードを取得する
Section titled “ソースコードを取得する”git clone --recursive https://github.com/bettaku/engawa.gitcd engawapnpm install --frozen-lockfileすでにcloneしていてサブモジュールを取得していない場合は、git submodule update --init を実行します。
PostgreSQLとRedisを用意する
Section titled “PostgreSQLとRedisを用意する”次のどれかの方法で用意します。
Docker Composeを使う
Section titled “Docker Composeを使う”PostgreSQLとRedisだけをコンテナで起動する設定が用意されています。
docker compose -f compose.local-db.yml up -dデータベースのユーザー名・パスワードは .config/docker.env で決まります(.config/docker_example.env をコピーして作ります)。
システムに直接入れる
Section titled “システムに直接入れる”パッケージマネージャーなどで、PostgreSQLとRedisをシステムに入れてもかまいません。
Dev Containerを使う
Section titled “Dev Containerを使う”VS Codeの Dev Containers 拡張で、リポジトリのディレクトリを開きます。コンテナ内で次のコマンドが自動で実行され、データベースまで準備されます。
git submodule update --initpnpm install --frozen-lockfilecp .devcontainer/devcontainer.yml .config/default.ymlpnpm buildpnpm migrate設定ファイルを書く
Section titled “設定ファイルを書く”cp .config/example.yml .config/default.yml.config/default.yml の url・db・redis を、自分の環境に合わせます。開発中は url: http://localhost:3000/ のようにしておけば十分です。
設定ファイルのパスは、環境変数 CHERRYPICK_CONFIG_YML で変えられます(例: 2nd.yml)。その他の環境変数は バックエンドの環境変数 を参照してください。
ビルドしてデータベースを初期化する
Section titled “ビルドしてデータベースを初期化する”pnpm buildpnpm migrate開発サーバーを起動する
Section titled “開発サーバーを起動する”pnpm dev- バックエンドのソースを監視し、変更されると自動でビルドしてサーバーを再起動します。
- Service Worker は esbuild が監視します。
- フロントエンドは Vite の HMR が使えます。本番ビルドとは挙動が異なることがあります。
- Vite はバックエンドの後ろで動きます(HMR用のWebSocketを除き、バックエンドが
/viteと/embed_viteをViteに中継します)。 http://localhost:3000で開けます(3000は.config/default.ymlのport)。
よく使うコマンド
Section titled “よく使うコマンド”| コマンド | 内容 |
|---|---|
pnpm dev |
全パッケージを監視モードで起動 |
pnpm build |
本番用のビルド |
pnpm migrate |
データベースのマイグレーションを実行 |
pnpm lint |
型チェックとESLint |
pnpm test |
全パッケージのテスト(詳しくは テスト) |
pnpm build-cherrypick-js-with-types |
バックエンドのAPIから、SDK(cherrypick-js)の型を生成し直す |
pnpm --filter frontend storybook-dev |
Storybookを起動(詳しくは フロントエンドの注意点) |
よくあるつまずき
Section titled “よくあるつまずき”pnpm-lock.yaml が競合した
Section titled “pnpm-lock.yaml が競合した”引数なしで pnpm を実行すると、作り直されます。
APIを変えたのに、フロントエンドの型が古いまま
Section titled “APIを変えたのに、フロントエンドの型が古いまま”バックエンドのAPI(エンドポイントやスキーマ)を変えたら、pnpm build-cherrypick-js-with-types でSDKの型を生成し直してください。CIでも、生成済みの型が最新かどうかを確認しています。
ロケールを変えたのに、型エラーになる
Section titled “ロケールを変えたのに、型エラーになる”ロケールファイルを編集したら、pnpm build-assets で型定義(locales/index.d.ts)を生成し直してください。pnpm dev を動かしていれば自動で行われます。