このプロジェクトについて

Cratefield Harnessは、Cratefieldの背後にあるMITライセンスのオープンソースコアであり、独自のバックエンドをコンパイルするためのRustバックエンドハーネスです。その前提は、「あらゆる製品にはバックエンドが必要だが、ゼロから構築すべきものはほとんどない」ということであり、これがその「一度きりのバックエンド」となります。ユーザーはモジュールクレートを選択し、アダプタを接続して、独自のデータベースを持つ1つのステートレスなWorkerをデプロイします。 構成モデルでは、ベンチャーがベンチャーID、公開URL、CORSオリジンを持つHarnessビルダーを宣言し、モジュールを追加し、データベースバインディング、メーラー、キャプチャプロバイダーを備えたランタイムを選択します。ビルドプロセスでは、ランタイムが提供していないポートを要求するモジュール、同じテーブルやルートを主張する2つのモジュール、または異なるコントラクトバージョンで構築されたモジュールは拒否されます。ベンチャーテンプレートはcargo testの下で構成を実行するため、設定ミスはデプロイ前に検出されます。 モジュールとポートについて、モジュールはModuleトレイトを実装したクレートであり、モジュール名ごとのバージョン付きパスにマウントされます。モジュールは、名前、必要なポート、マイグレーション(SQLiteとPostgresの両方で受け入れられるサブセットでinclude_str!経由で埋め込まれたSQL)、およびaxumルーターを宣言します。モジュールがベンダーバインディング、環境変数、またはベンダークライアントに直接触れることはありません。代わりにDatabase、Mailer、Captcha、RateLimiter、Signer、KeyValueなどのポートを要求し、アダプタがそれに回答します。READMEによれば、この単一のルールがあるため、Cloudflareからの移行はランタイムクレートを1つ変更するだけで済みます。 含まれるクレートには、cratefieldファサード、ModuleトレイトやHarnessビルダー、ポートトレイト、problem+jsonエラー、リクエストスコープ、イベントバス、テンプレートを含むcratefield-core、cratefield-runtime-cloudflareがあります。また、Resendメール、Turnstileキャプチャ、rusqlite経由のSQLite用アダプタや、ダブルオプトイン・配信停止・管理者エクスポート機能を備えたemail-signupモジュール、確認・順位・紹介コードを備えたwaitlistモジュールが含まれます。さらに、Databaseポート上でエンベロープ暗号化を行うcratefield-secrets、データキーのラップ/アンラップを行うcratefield-kms(本番環境では拒否されるローカルファイルプロバイダー付き)、/uiでモジュール表面をHTMLとしてレンダリングするcratefield-ui、マイグレーション収集やdoctor、modulesコマンドを提供するfzバイナリを公開するcratefield-cli、および全モジュールが合格すべき適合性キットであるcratefield-testingがあります。計画中のクレートには、sqlxベースのcratefield-adapter-postgresとtokioベースのcratefield-runtime-nativeがあります。 マイグレーションとリクエストに関しては、クエリはsea-queryを経由するため、どちらのデータベースでもレンダリング可能です。確認および配信停止リンクはキーローテーション付きのHMAC署名付きトークンであるため、セッションストアは不要です。リクエストスコープは共有状態ではなくaxum拡張で伝播し、適合性キットに含まれる同時リクエストテストでこれが検証されます。 マウントについて、モジュールはデフォルトでWorkerにコンパイルされるか、またはサイドカーとして個別に構築・デプロイされ、同じデータベースとシークレットを持つサービスバインディングを介して同じパスにマウントされます。READMEでは、サイドカーオプションは設計済みであるものの、未実装であると述べられています。 オブザーバビリティでは、リクエストごとに1つの構造化スパンがrequest_id、method、route、module、status、duration_ms、ip_hash、ua_familyを保持し、メールアドレスは保持しません。テンプレートのwrangler.tomlでWorkers Logsが有効になっており、レスポンスはx-request-idをエコーします。エラータクソノミーはコアレジストリから生成され、CIでドリフトチェックが行われます。 リポジトリに記載されたロードマップでは、M0(ワークスペースツール、コア、Cloudflareランタイム、Resend/Turnstile/SQLiteアダプタ、fz、テストキット)、M1(最初のモジュール)、M2(crates.io公開、ドキュメント、コントラクトバージョニングを伴う最初のベンチャー稼働、進行中)、M3(Postgresアダプタ、ネイティブランタイム、パリティスイート、データ移行によるセルフホスト移植性)と定義されています。さらに3つのエピックが指定されていますが、スケジュールは未定です。 ツールチェーンとステータスについては、rust-toolchain.tomlでStable Rustが固定されており、ターゲットはwasm32-unknown-unknown、worker-build、wranglerです。CIではfmt、警告を禁止したclippy、テスト、cargo denyが実行され、サンプルベンチャーをwasmにビルドすることで、ネイティブ専用の依存関係がモジュールに混入しないようにしています。クレートはまだcrates.ioに公開されていないため、READMEではgitによるリポジトリ依存を推奨しています。プライベートクレートは別リポジトリではなくpublish = falseとしてマークされています。ライセンスはMITです。