ロードマップ
wakuwaku の現状、1.0.0 と 2.0.0 の意味、そして Spring のどのモジュールにすでに対応するものがあるか。
wakuwaku は、Java における Spring のような、強力で堅牢な Rust 向けマイクロサービスフレームワークを目指しています。バージョン番号は、その目標にどこまで近づいたかを表します。
マイルストーン
1.0.0-rc1
最初のリリース候補です。サービスビルダー、gRPC の登録、cron ジョブ、Apache Iggy 上の型付きイベント、PostgreSQL・MySQL・Redis・Meilisearch へのケイパビリティで型付けされたデータアクセス、証明を伴うバリデーションを含んでいました。
1.0.0-rc2
2 番目のリリース候補は、rc1 の内容をすべて引き継ぎ、次の点を改良しました。
- データアクセス: すべてのクエリが自分のエラー型を宣言します。そのため、自ら拒否しうるクエリ (楽観ロックの喪失、ビジネスルール違反) はそれをエラーで伝えます。トランザクションは、開いたトランザクションの中でステップがクエリを実行するフローです。BEGIN・COMMIT・ROLLBACK と、トランザクションが中断されたときや COMMIT の結果が失われたときの意味は、ライブラリが受け持ちます。
- サービス: 複数の依存から作るコンポーネントは、クロージャで登録します (
compose_cron_job、compose_grpc_service、compose_iggy_consumer)。cron ジョブはスケジュールのモードを選べます。前回の実行が終わってから、少なくとも間隔を空けて、または固定のグリッドで、のいずれかです。 - シャットダウン: cron ジョブとイベントコンシューマーは
shutdownでグレースフルに後片付けし、abortでキャンセルできます。 - イベント: 同じ型の多数のイベントをバッチで発行できます。
- バリデーション: 定数として宣言できる純粋な検証器が、コンテキストや I/O を必要としない性質を証明します。
1.0.0-rc3 (現在)
現在のリリース候補は、本番のサービスを rc2 へ移植する中で見つかった点を修正しています。
- データアクセス: トランザクションフローは、読み書きするエンティティを
tx_effect!で宣言し、フローが実行するクエリはすべてその宣言の範囲に収まらなければなりません。フロー自身もハンドルもカバーしていないエンティティに、フローが触れることはもうできません。 - バリデーション:
ValidateErrorは標準のエラー型になり、?で伝播できます。Provenの値はDebugで表示でき、純粋な検証器はStringを&strとして検査できます。 - ドキュメント: トランザクションの実行方法と状態の設計、コンシューマーのパーティションの割り当て方を説明しました。
下の表で「提供中」となっているものは、すべてこのリリースに含まれています。
1.0.0
1.0.0 は、実際のプロジェクトでの E2E テストに合格した時点でリリースされます。それまでは、テストで必要と分かった箇所についてリリース候補が変更される可能性があります。
2.0.0
2.0.0 は、Spring の意味のあるモジュールすべてに wakuwaku の対応物がそろう時点のマイルストーンです。下の表で「未対応」となっている行が、現在と 2.0.0 との差です。
これらのマイルストーンに日付は設定していません。
Spring のモジュールと対応物
「提供中」は、1.0.0-rc3 に対応物があることを意味します。Spring の API をそのまま写しているという意味ではありません。対応物はできるだけ多くをコンパイラが検査できるように設計されているため、動作が異なることもよくあります。違いは Spring から来た方へ で説明しています。
| Spring | wakuwaku | 状況 |
|---|---|---|
| Spring Framework のコア: IoC コンテナ、依存性注入 | ServiceBuilder、ServiceCreation | 提供中 |
| Spring Boot のスターター | フィーチャーフラグ 付きの wakuwaku 依存ひとつ | 提供中 |
Spring Boot の自動構成、@ConfigurationProperties、プロファイル | なし | 未対応 |
タスクスケジューリング (@Scheduled(fixedDelay/fixedRate = ...)) | cron ジョブ (間隔のモードあり、cron 式なし) | 提供中 |
| gRPC (Spring gRPC、grpc-spring-boot-starter) | gRPC サービス | 提供中 |
| Spring for Apache Kafka、Spring Cloud Stream、Spring AMQP | Apache Iggy 上のイベント | 提供中 |
| Spring Data JDBC / JPA のリポジトリ | クエリ と sqlx (SQL を明示、ORM なし) | 提供中 |
| Spring のトランザクション管理 | トランザクション | 提供中 |
| Spring Data Redis | Redis | 提供中 |
| Spring のキャッシュ抽象化 (Redis) | Redis のキャッシュ (明示的な呼び出し、アノテーションなし) | 提供中 |
分散ロック (ShedLock、Spring Integration の RedisLockRegistry) | Redis のロック | 提供中 |
レート制限 (Spring Cloud Gateway の RedisRateLimiter) | Redis のトークンバケット | 提供中 |
| Spring Data Elasticsearch (全文検索) | Meilisearch | 提供中 |
Bean Validation (@Valid、Hibernate Validator) | バリデーション | 提供中 |
| Spring Boot Test | テスト: コンポーネントを直接ユニットテストする | 提供中 |
| Spring Web MVC / WebFlux (HTTP、REST) | なし | 未対応 |
| Spring Security | なし | 未対応 |
| Spring Boot Actuator (ヘルスチェック、メトリクス) | なし | 未対応 |
| Micrometer のメトリクスとトレーシング | なし (wakuwaku はエラーを tracing でログ出力します) | 未対応 |
| Spring Cloud Config、サービスディスカバリー、ゲートウェイ、サーキットブレーカー | なし | 未対応 |
| Spring Batch | なし | 未対応 |
| Spring Integration | なし | 未対応 |
「未対応」の行は、現時点で wakuwaku に該当するものがないことを意味します。対応物ができるまでは、その用途には wakuwaku と並べて Rust のクレートを使ってください。ServiceCreation で組み立てるコンポーネントは、他のクレートのクライアントを含め、登録した任意の値に依存できます。
0.3 からの変更
0.3 は RabbitMQ・Redis・sqlx まわりのユーティリティ集でした。1.0.0-rc3 はそのほとんどを置き換えています。0.3 からの移行 を参照してください。