sk-goa-chat は SvelteKit と Goa を使ったWebアプリケーションの検証のためのプロジェクトです。
Goa は OpenAPI で定義された HTTP と protoc に基づいた gRPC による通信を同時にサポートするWebアプリケーションのフレームワークです。 Goa は gRPC のようなストリーミングを HTTP においては WebSockets を用いて実現します。
SvelteKit は Svelte と Vite を用いたWebアプリケーション開発のフレームワークです。
Vite は SSR(Server Side Rendering) の機能と Proxy の機能を提供します。 つまりこのアプリケーションには2つのWebアプリケーションサーバーが存在します。
APIを提供する Goa のサーバーを apisvr と呼び、主にUIのアセットのホスティングとルーティングを行う SvelteKit + Viteのサーバーを uisvr と呼ぶことにします。
uisvr は Vite の Proxy の機能によって パスが /api と /ws にマッチするブラウザからのHTTPリクエストを apisvr に転送します。
また uisvr が SSRする際に必要なデータは、 gRPC を使って apisvr から取得します。
flowchart LR
A[Client] -->|HTTP + websockets| B[vite proxy]
B -->|/api /ws 以外 HTTP| E[uisvr]
B -->|/ws websockets| C[apisvr]
B -->|/api HTTP| C[apisvr]
A --> D[Firebase]
E -->|gRPC| C
C --> D
- make
- asdf (あるいはasdf互換のバージョン管理ツール)
- Docker Desktop
- Docker Compose を主に使います
make install
make build
make dev
See Development.md
| Name | Description |
|---|---|
| servers/apisvr | APIを提供するサーバーのソースコード |
| servers/applib | バックエンドのライブラリ的なパッケージ群 |
| servers/biz | バックエンドのビジネスロジックのパッケージ群 |
| servers/containers | ローカルで使用する MySQL や Firebase Emulators のコンテナ |
| servers/dbmigrations | RDBのマイグレーション |
| clients/uisvr | UIとそれを提供するサーバー(uisvr)のソースコード |
| modifiers | 自動生成されるコードに更に変更を加えるための ruby のスクリプト群 |
| tools | 開発や運用で使用するツール群 |
- clients
- servers
- Middleware
- E2E test
- Tools
- Webサービスとしてのリリースは行うつもりはありません
- しかし実際のリリースに関する検証は行いたいので、一時的に何処かにリリースするかもしれません
- このリポジトリはコンセプトを検証するためのものであり、アプリケーションとして完成させることは主目的ではありませんので、不要と判断したバグ修正は行いません
MIT