機能の追加
APIのコアやフロントエンドに加えて、実際のプロジェクトではセキュリティ、アクセス制御、バックグラウンドプロセスの実行などの追加機能が必要なことがよくあります。
Linoはこれらの機能を標準化された方法で追加できるようにし、バックエンド(エンドポイント)とフロントエンド(Blazorアプリケーション)の両方に反映されます。
セキュリティと認証
認証は、あらゆる安全なシステムの基盤です。LinoはAPIでBearerスキームを使用したJWT(JSON Web Tokens)認証をサポートしています。
一般的な認証フロー:
1. ユーザーがログインを行う(エンドポイントまたは専用ページ経由)。
2. アイデンティティ、役割、権限を表すクレームを含むJWTが発行される。
3. APIへの各リクエストにはヘッダーにトークンを含める:Authorization: Bearer <token>
4. 認証ミドルウェアがトークンを検証し、署名と有効期限を確認する。
ポリシーに基づく認可
Linoは細かい認可を実現するためにポリシー(Policies)を使用します:
- 各アクションは特定のポリシーを要求できる(例:People.Read, People.Create)。
- ポリシーはAddAuthorizationを通じて設定される。
- エンドポイントは次の宣言で保護可能:
.RequireAuthorization
Linoプロジェクトにセキュリティを追加する
プロジェクトにセキュリティを追加するには、次を実行:
lino features auth add
CLIのインタラクティブウィザードが次の設定を求めます:
- サービス – セキュリティリソースを設定するサービス。
- モジュール – セキュリティをインストールする特定のモジュール(モジュール型サービスにのみ適用)。
- Access Tokenの有効期間 – アクセストークンの有効期限。
- Refresh Tokenの有効期間 – リフレッシュトークンの有効期限。
- ユーザー識別子の種類 – UserIdとして使用されるデータ型を定義する(
int、long、Guid)。
これらの設定により、認証/認可パイプラインが自動的に構成され、APIで使用可能になり、Blazorと統合されます。
バックグラウンドジョブ
多くのシステムでは、次のようなバックグラウンドでの非同期処理が必要です:
- メール送信
- レポート生成
- 外部システムとの同期
Lino はジョブオーケストレーターとして Hangfire をネイティブサポートしています。
Hangfire の利点
- 非同期ジョブの信頼性の高い実行
- 組み込みのモニタリングダッシュボード
- 定期またはスケジュールジョブのサポート
- データベースにおけるジョブの確実な永続化
Outbox メッセージによるイベント統合
非同期統合の一貫性を保証するため、Lino は Outbox Message パターンを採用しています。
ビジネス操作(例:注文作成)を実行すると、対応するイベント(OrderCreated)が、ドメイン状態の永続化と同じトランザクションで Outbox テーブルに保存されます。 バックグラウンドプロセッサが Outbox テーブルを読み取り、イベントをメッセージングシステム(RabbitMQ、Kafka など)に公開します。
Outbox の利点:
- 原子性 → データベースと公開されたイベントが同期したまま
- 信頼性 → 障害が発生してもイベントが失われない
- スケーラビリティ → 複数のコンシューマがイベントを処理可能
このモデルにより、分散アーキテクチャにおいて安全で堅牢な統合が保証されます。
これらの追加機能により、Lino は強固なセキュリティ、細かいアクセス制御、信頼性の高い非同期処理を提供し、現代の本番アプリケーションの重要要件に対応します。
Lino プロジェクトにバックグラウンドジョブ機能を追加
非同期処理は、通知送信、レポート生成、イベント公開など、メインリクエストフローをブロックしてはならないタスクに不可欠です。
Lino では、単一コマンドでバックグラウンドジョブのサポート(ライブラリ経由)を有効化できます:
lino features background-job add
CLI は以下の構成パラメータを要求します:
- サービス – バックグラウンドジョブ機能を追加するサービス
- ライブラリ – ジョブの実行とスケジューリングのために選択されたライブラリ
- チェックと処理の間隔 - Outbox の新しいメッセージを確認するキューの間隔
- レコード数 - サイクルごとに処理する最大レコード数(並列処理とリソース消費を制御)
これらのオプションにより、システムを拡張性と堅牢性を保ちながら構成し、バックグラウンドジョブの信頼性の高い実行を保証します。
