ローカル環境で動かす場合、yarn のインストールが必須となります。npm や pnpm には対応していません。
Flocon は yarn v31 のワークスペースを採用しています。パッケージ 📦 の一覧は次のとおりです。
Flocon
┣ 📂 apps
┃ ┣ 📦 api-server
┃ ┗ 📦 web-server
┣ 📂 packages
┃ ┣ 📦 cache
┃ ┣ 📦 core
┃ ┣ 📦 default-pino-transport
┃ ┣ 📦 eslint-config
┃ ┣ 📦 flocon-script
┃ ┣ 📦 prettier-config
┃ ┣ 📦 rollup-config
┃ ┣ 📦 sdk
┃ ┣ 📦 sdk-react
┃ ┣ 📦 sdk-urql
┃ ┣ 📦 tsconfig
┃ ┣ 📦 typed-document-node
┃ ┣ 📦 utils
┃ ┗ 📦 web-server-utils
┣ 📄 README_developer.md (このファイル)
┗ ……
ビルドやテストは、全体で行うことも、特定のパッケージのみに対して行うこともできます。例えば、この Markdown ファイルがあるディレクトリでyarn run buildを実行すると、全パッケージがビルドされます。./packages/coreに移動してからyarn run buildを実行すると、coreパッケージとそれに依存するパッケージのみがビルドされます。
現時点では watch スクリプトはありません。ご了承ください。
(Netlify や fly.io にデプロイする場合は必要ありません)
- yarn のインストール(corepack を有効化している場合は、corepack によって自動的にインストールされます)
- Node.js v18, v20 のいずれかのインストール
Flocon は husky を用いて https://www.npmjs.com/package/@commitlint/cli によるコミットメッセージの自動チェックを行う機能がありますが、husky のインストールは自動的には行われません。インストールするには、この Markdown ファイルがあるディレクトリで yarn install-husky を手動で実行する必要があります。
Flocon リポジトリへの Pull Request の作成を考えていない場合、husky のインストールは必要ありません。また、Pull Request を作成する予定がある場合でも husky のインストールは任意です。
環境変数のセットが必須です。また、環境変数のセットにおいて、Firebase プロジェクトの準備も必要になります。
データベースとして PostgreSQL もしくは MySQL を使う場合は対応するデータベースサーバーを起動しておく必要があります。SQLite の場合は不要です。
main ブランチから checkout した場合は、次のコマンドを実行しておく必要があります。このコマンドでは TypeScript コードをコンパイルして JavaScript コードの生成が行われます。他のブランチ(main-build、release など)ではコンパイル済みの JavaScript コードが同梱しているためこのコマンドの実行は不要です。
cd ./apps/api-server
yarn run buildAPI サーバーを動かすには、次のコマンドを実行してください。
cd ./apps/api-server
yarn run start環境変数のセットが必須です。また、環境変数のセットにおいて、Firebase プロジェクトの準備も必要になります。
main ブランチから checkout した場合は、API サーバーと同様に TypeScript コードのコンパイルが必要なため、次のコマンドを実行しておく必要があります。
cd ./apps/web-server
yarn run build:depsWeb サーバーを動かすには、次のコマンドを実行してください。
開発用サーバーを動かす場合:
cd ./apps/web-server
yarn run dev静的ファイルを利用せずに本番サーバーを動かす場合:
cd ./apps/web-server
yarn run start静的ファイルを利用して本番サーバーを動かす場合:
cd ./apps/web-server
yarn run export
yarn run servecd ./apps/web-server
yarn run storybookテストの実行方法には次の 2 つがあります。
- Github Actions(act は services に対応していないため使えません)
- ローカルで実行
このドキュメントではローカルで実行する方法を説明します。
一例として、次のコマンドを実行することで、全てのパッケージをテストできます。
yarn run build
yarn run testパッケージのディレクトリ内でyarn run testを実行することで、パッケージ単体をテストすることもできます。
Flocon のテストには、リレーショナルデータベースを使用したテストが含まれます。
デフォルトでは SQLite のみが用いられますが、環境変数の MYSQL_TEST、POSTGRESQL_TEST に値をセットすることで MySQL や PostgreSQL を用いたテストを実行することもできます。値の形式はそれぞれ MYSQL、POSTGRESQL と同じです。SQLite でも、SQLITE_TEST に SQLITE と同様の形式の値をセットすることでテストに用いるデータベースの指定ができます。
SQLite のテストではデータベースの指定をせずとも自動的に SQLite のファイルが作成されるので指定は必須ではありません。指定したい場合は PostgreSQL や MySQL のテストのときと同様に SQLITE_TEST に SQLITE と同じ形式の値をセットすることができます。SQLITE_TEST ではそれ以外にも boolean-like な値をセットすることもでき、falsy な値をセットすることで SQLite のテストをスキップさせることができます。truthy な値をセットした場合はデフォルトの動作と同じように SQLite のテストが実行されます。
リレーショナルデータベースを使用したテストは api-server パッケージにのみ存在します。このパッケージをテストしない場合はMYSQL_TEST、POSTGRESQL_TEST、SQLITE_TESTの値は利用されません。
例として、SQLite でのテストは行わず、MySQL と PostgreSQL のテストを行うコマンドは下のとおりになります。
Linux の場合:
yarn run build
SQLITE_TEST=0 MYSQL_TEST="{\"clientUrl\": \"mysql://test:test@localhost:3306/test\"}" POSTGRESQL_TEST="{\"clientUrl\": \"postgresql://test:test@localhost:5432/test\"}" yarn run testPowerShell の場合:
yarn run build
$env:SQLITE_TEST=0
$env:MYSQL_TEST="{\"clientUrl\": \"mysql://test:test@localhost:3306/test\"}"
$env:POSTGRESQL_TEST="{\"clientUrl\": \"postgresql://test:test@localhost:5432/test\"}"
yarn run testFlocon のテストには、Redis を使用したテストも含まれます。デフォルトでは Redis を用いたテストはスキップされます。REDIS_TESTに truthy な値をセットすることで Redis を使用したテストを実行できます。Redis を使用したテストを実行する場合は Redis サーバーを起動しておく必要があります。Redis を使用したテストは./packages/cacheパッケージにのみ存在します。このパッケージをテストしない場合はREDIS_TESTの値は利用されません。現時点では Flocon の Web サーバーと API サーバーでは Redis を使っていないため、Redis を使用したテストは基本的にスキップして構いません。
※ 現在採用しているフローおよびブランチ名は暫定です。
main: 開発ブランチです。Flocon の TypeScript ソースコードからコンパイルされた JavaScript コードは含まれていません(.gitignoreに含まれているdist/によって git からは無視されます)。main-build:mainブランチと似ていますが、コンパイルされた JavaScript コードが含まれている点が異なります。mainブランチに push があった場合、GitHub Actions によって自動的にビルドされた後にmain-buildブランチにも push されます。手動でmain-buildブランチに直接 push することは通常はありません。prerelease/v*.*.*: 重要度の高いバグ修正を含んだリリースの前段階となるブランチです。* には数値等が入ります。必ずしも存在するとは限りません。コンパイルされた JavaScript コードが含まれます。通常はmain-buildブランチから pull request が作成され、merge されます。release: リリース済みのコード置き場です。コンパイルされた JavaScript コードが含まれます。通常はprerelease/v*.*.*もしくはmain-buildブランチから pull request が作成され、merge されます。
releaseブランチにマージされたコードがリリースされます2。基本的にはmainブランチからマージされます。ただし、重要度の高いバグ修正をリリースしたいがmainブランチがまだ不安定でマージできない場合は、代わりにreleaseブランチからprerelease/v*.*.*ブランチを切り、そのバグ修正をコミットして、releaseブランチにマージしてリリースします。バグ修正の内容をmainブランチに反映させるため、そちらにもマージします。
Footnotes
-
グローバルインストールする yarn のバージョンは v1 で構いません。詳細は https://www.wantedly.com/companies/wantedly/post_articles/325643 のポイント 3 を参照してください。 ↩
-
正確にはタグの push によって自動リリースされます。 ↩