私たちの進捗と今後の機能を追跡してください。私たちは最高の開発体験を提供するために常に進化しています。
lino entity new --audit と lino entity edit --audit のオプションは、生成エンティティの標準的な監査構造を自動化します。以前は、CreatedById のようなフィールドを作成し、User エンティティを参照し、CreatedAt、UpdatedAt、UpdatedById を追加し、それらの値が画面や API から入力されるのではなく自動的に設定されるよう構成する必要がありました。
--audit を使うと、Lino は CreatedAt、CreatedById、UpdatedAt、UpdatedById を自動で作成して構成します。フローでは論理削除を使うかどうかも確認します。有効にすると、IsDeleted、DeletedAt、DeletedById が作成され、論理削除済みレコードを誤って返さないように Entity Framework Core の .HasQueryFilter が既定で構成されます。
物理削除は引き続き Delete を使用し、データベースからレコードを削除します。論理削除は IsDeleted でレコードをマークし、追跡性のために行と監査メタデータを保持します。生成された画面と API は、監査と soft delete の基本要件を満たした状態で動作します。
lino entity new --tenant と lino entity edit --tenant のオプションにより、生成された各レイヤーで手動設定を行わずに、エンティティが tenant に属することを示せます。
生成時に、Lino はそのエンティティで tenant が必須かどうかを確認します。必須の場合、tenant コンテキストだけがレコードを作成でき、各レコードは現在の tenant に関連付けられます。任意の場合、tenant を持たない管理領域も、tenant の商品とは別にシステム商品のような独自のレコードを作成できます。
生成されたエンティティ、API、画面、永続化設定は、tenant との関連を考慮した状態で作成されます。Lino は Entity Framework Core の .HasQueryFilter も追加の保護層として構成し、tenant 間のデータ漏えいリスクを減らします。
--tenant と --audit の flags は制限なく併用できます。
分散された処理では、シャドウエンティティは元のエンティティから必要なデータだけを保持するローカルエンティティであり、サービスやモジュールを元のモデルへ直接結合せずに扱えます。
lino shadow new コマンドは、元の構造をコピーし、別のサービスまたは別のモジュールに作成するシャドウエンティティへ含めるプロパティだけを選択できるため、この作業をより速くします。
コピーには FK も含めることができます。その場合、必要な関連エンティティも宛先コンテキストに存在しているか、そこで作成される必要があります。その後、統合イベントとメッセージングによって、元のエンティティからシャドウエンティティへデータを運ぶことができます。
重要な注意: このコマンドが作成するのはエンティティ構造だけです。統合イベントを実際に消費するには、対応する event handler を lino event-handler new で別途作成してください。
生成される API は、初回実行時から rate limiting が既定で構成された状態 になります。固定ウィンドウのポリシーにより、公開トラフィック、API key で保護された内部ルート、一時ダウンロードトークンの生成を手動設定なしで保護します。
これにより、新しいプロジェクトには実用的な可用性保護が最初から入ります。公開エンドポイントは IP ごとの上限を持ち、サービス間の内部呼び出しにはより厳しい専用ポリシーが適用され、ダウンロードトークンの無制限な発行も抑制されます。
認証と認可を追加すると、セキュリティ層はユーザーごとの認証済み API トラフィックと、ログイン、登録、refresh token、パスワード復旧、資格情報変更などの Identity の重要エンドポイントにも専用の制限を適用します。
主な利点:
• ブルートフォース攻撃や資格情報操作の繰り返しを減らします。
• スクレイピング、自動化された悪用、偶発的なリクエスト急増を制限します。
• 過剰なトラフィック下でも API の可用性を保ちます。
• RateLimiting オプションで明示的に構成できます。
Lino では、現在のプロジェクトの user secrets を一覧表示、設定、削除、クリア するコマンドを利用できるようになりました。これはローカル開発用のシークレットに対する dotnet user-secrets の実用的なラッパーとして機能します。
Lino から手動で追加したキーは user secret としてのみ管理されます。より広い自動化は、background jobs のダッシュボードパスワード、JWT secret key、内部 API key、SMTP パスワードなど、Lino 自身が生成して使用するシークレットに適用されます。これらの値はプロジェクトの user secrets に自動登録され、AppHost では Aspire Parameters としても表現されます。
これはセキュリティと公開準備の面で実際の改善です。開発用の機密値をバージョン管理対象ファイルから外しつつ、Aspire は publish や deploy の時点で後から提供すべき外部値を把握できます。Docker Compose、Kubernetes、その他の Aspire publish ターゲットでは、これらのキーが Parameters としてモデル化されていることで、必要な環境変数、secrets、または placeholders がマッピングされた成果物を生成しやすくなります。
重要な注意点: Microsoft のドキュメントによると、user secrets は開発用途を想定しており、プロジェクトツリーの外に保存されますが暗号化はされません。本番環境では、対象プラットフォームに適したシークレットストアを使用する必要があります。
コマンドラインから、生成されたプロジェクトに テナント と マルチテナント シナリオのサポートを追加でき、組織、顧客、またはドメインごとにデータ、ビジュアルアイデンティティ、設定を分離できます。
テナントを作成すると、システムは安全な運用に必要な構造をあらかじめ準備し、テナントに紐づく管理者ユーザーも作成します。また、名前や色などのドメイン情報とビジュアルアイデンティティを設定できるため、事前に登録されたドメインからアクセスされたときに、アプリケーションは適切なエクスペリエンスを自動的に表示します。
セキュリティは認証と認可のフローに統合されています。JWT トークンにはテナントの情報が含まれ、サーバーはトークン内のテナントをリクエストコンテキストで解決されたテナントと照合し、データアクセスは対応するテナントに制限されたままになります。
主な利点:
• テナントごとのデータ分離をサポート。
• テナントの初期管理者を自動作成。
• 設定済みドメインによるテナント解決。
• テナントごとの名前、色、設定のカスタマイズ。
• JWT、ASP.NET Core Policies、機能別権限との統合。
• 複数のサービスまたはモジュールを持つモジュラーサービス構成のアーキテクチャをサポート。
Lino は現在、自然言語による指示を受け取り、それらをプロジェクト内の具体的なアクションへ自動的に変換できるようになりました。
この機能により、開発者は通常の言葉で実行したい内容を説明するだけで、ツールが意図を解釈し、プロジェクト、サービス、モジュール、エンティティ、フロントエンド、ワーカー、セキュリティ、ページの作成などのタスクを実行します。
また、同じフローを通じて開発サイクルの操作もサポートするようになり、アプリケーションの build や database migrations の実行も可能になりました。これにより、手動コマンドへの依存を減らし、生産性を向上させます。
主なメリット:
• 一般的な操作から高度な操作まで、学習コストを低減。
• 完全なソリューションの作成と進化をより高速に実現。
• 単一の会話型インターフェースから、バックエンド、フロントエンド、アプリケーションインフラをオーケストレーション。
• 実際のツール利用に基づき、新しいコマンドや改善を継続的に拡張できる基盤。
新しい lino error-definition コマンドを実装し、エラーおよびバリデーションのレスポンスを容易かつ一貫して作成・標準化できるようにしました。
この機能では、特定のエンティティに紐づく戻りメッセージ定義を登録でき、これらは IResult パターン(Result Pattern)を使用したバリデーションフローおよび結果の返却に利用されます。
このコマンドにより、開発者は次のことが可能になります:
• 特定のエンティティ向けに静的なエラークラスを生成する;
• 各戻りメッセージのタイトルと詳細を定義する;
• アプリケーションおよびドメイン全体でレスポンスを標準化する;
• プロジェクトで設定されたすべての言語に対する自動メッセージ翻訳サポートを活用し、テキストを適切なリソースファイルに保存する。
この改善により、ルールのバリデーションおよびエラーメッセージの返却が、より高速で一貫性があり、多言語対応になります。
lino integration コマンドセットは、明確に定義された契約 に基づいて、内部または外部の統合を作成・整理できます。
lino integration new コマンドは、契約用の .csproj プロジェクトと、Http や InProcess などの 実装 プロジェクトを含む統合の基本構造を生成し、モジュラーモノリス と マイクロサービス の両方をサポートします。
統合リソースは lino integration resource new によって作成され、契約によって公開されるサービス を表し、インターフェースとして定義されます。各リソースには lino integration operation new により作成される操作を含めることができ、Request および Response クラスが生成されます。
最後に、lino resource consume コマンドは、モジュールやサービスを既存の統合に接続し、消費と依存関係の設定を自動化します。
Lino は現在、Early Access 版として商用リリースされており、ベータ段階の終了と実際の開発環境での導入開始を示しています。
バージョン 1.0.0 に予定されている主要な機能はすべて実装されており、製品は完成し、実用的な用途に対応できる状態です。
この初期段階では、パフォーマンス調整、安定性の向上、実際のユーザー利用に基づく細かな最適化など、継続的な改善に注力しています。
この段階で Lino を導入したユーザーは、すべてのアップデートへの完全なアクセス、専任の技術サポート、そして製品の進化に積極的に参加する機会を得られます。
Linoは現在、.NET 10と完全に互換性のあるプロジェクトを生成し、Microsoftプラットフォームの最新バージョンとの統合を強化しています。
.NET 9から.NET 10への移行は、生成されたプロジェクトが.NETエコシステムの最新の進化を活用できるようにするために不可欠でした。これには、パフォーマンスの最適化、コンパイル時間の改善、C# 13の新機能、およびASP.NET Coreの体験向上が含まれます。
この更新により、生成されるすべてのコードは将来のプラットフォームに対応し、テンプレートの見直し、Target Framework設定の更新、そして新しい言語およびランタイム標準に合わせたスキャフォールディングが行われます。
開発中の REST エンドポイントのテストとドキュメント化を簡素化するために、.http ファイルの自動生成が実装されました。
この機能により、リクエストを整理し、互換性のあるツールで簡単に実行でき、API 検証のスピードを上げ、開発者の体験を向上させます。
主な利点:
• エンドポイントテスト用のファイルを自動生成。
• リクエスト例のドキュメント化と共有を容易にする。
• 追加設定なしで開発フローに統合可能。
• 異なる環境での API 検証を迅速化。
エンティティの明示的なプロパティ選択に基づいて統合イベントを生成する機能が追加されました。
この機能がない場合、イベントは通常エンティティ全体を公開するか、特定の DTO を手動で作成する必要があり、冗長性が増し、不要なデータが公開される可能性がありました。
新しいアプローチにより、開発者は含めるプロパティを詳細に制御でき、よりコンパクトで安全、かつモダンなメッセージングのベストプラクティスに沿ったイベントを作成できます。
主な利点:
• イベントに関連するプロパティのみを選択。
• オーバーヘッドを削減し、不要なデータの公開を防止。
• キューやトピックでのメッセージサイズを削減し、効率を向上。
• 統合契約の進化を容易に。
FluentValidation ベースのすべてのバリデータを Tolitech.FluentValidation.Generators ライブラリを使用して自動登録できるようになりました。
従来のモデルでは、バリデータはランタイムで手動またはリフレクションによって発見・登録する必要があり、コードが重複し、パフォーマンスに影響します。
Source Generators を使用することで、このプロセスはコンパイル時に行われ、最適化され、安全で追跡しやすいコードが生成されます。
主な利点:
• バリデータの手動登録の排除。
• リフレクションの使用削除によるパフォーマンス向上とリソース使用量の削減。
• コンパイル時に型安全性と検証を保証。
• プロジェクトの保守性と進化の容易化。
Source Generators を使用して、Entity Framework Core のすべてのエンティティ設定クラス(EntityTypeConfiguration)を自動的に検出および登録するサポートが追加されました。
現在、このプロセスは OnModelCreating 内でのリフレクションや手動登録に依存しており、複雑さが増し、パフォーマンスに影響し、保守が困難です。
新機能を使用すると、マッピングはコンパイル時に解決され、リフレクションの必要がなくなり、設定をより効率的に集中管理できます。
主な利点:
• EF Core でのリフレクションの使用を置き換えます。
• アプリケーションの起動時間を短縮します。
• すべての設定が正しく適用されることを保証します。
• ドメインモデリングの堅牢性と明確性を向上させます。
ASP.NET Core の Policies を使用した権限ベース(PBAC)のアクセス制御システム。
権限は Source Generators によって自動生成され、.NET で Policies として登録されます。
これらの権限を使用する各サービスは、システムの権限データベースを自動的に更新するイベントを発生させます。
主な特徴:
• Source Generators による権限の自動生成
• ASP.NET Core での Policies の自動登録
• イベント/メッセージによる権限データベースの動的更新
• 役割の簡便性と権限の粒度を組み合わせたハイブリッド RBAC をサポート
メリット:
• 高いパフォーマンスとスケーラビリティ
• 自動化された管理と簡単な保守
• 様々なセキュリティシナリオに対応する柔軟性
Minimal APIs で作成されたエンドポイントに対して IFormFile 型のネイティブサポートを実装します。この機能により、ファイルアップロード対応のルートが自動生成され、以下が含まれます:
• multipart/form-data によるアップロードをサポートするエンドポイントの定義;
• MIME タイプと最大サイズの自動バリデーション;
• ローカルストレージのサポートおよび Azure Blob Storage や AWS S3 などのクラウドサービスとの統合;
画像、ドキュメント、メディアファイルなど、安全で高性能なアップロードが必要なアプリケーションに最適です。
このバージョンから、Lino CLIは生成されたファイルのスマート自動マージを実行します。
以前は、Linoが作成したファイルが既存のファイルを直接置き換えてしまい、開発者が手動で行った変更が上書きされる可能性がありました。
現在、3-way merge(元の生成ファイル、ユーザーが編集したバージョン、新たに生成されたファイル)の新しい戦略により、Linoはカスタマイズを保持しつつ、テンプレートの構造的な更新も適用できます。
このアプローチの利点:
• 手動コードの誤上書きを防ぎます。
• テンプレートベースのプロジェクトの継続的な進化を促進します。
• 更新時の手動コンフリクトを減らします。
• ローカルカスタマイズとフレームワークの進化の統合を向上させます。
Lino CLI で生成されたプロジェクトは、Source Generators に基づく Tolitech.MinimalApis.Generators ライブラリを使用して、Minimal APIs を自動的に登録できるようになりました。
このアプローチにより、次の必要性がなくなります:
• 各エンドポイントを MapGet や MapPost などで手動登録すること
• Reflection を使ってルートをスキャン・マッピングする処理 — パフォーマンスに負担をかけます。
Source Generators を使用すると、ルーティングはコンパイル時に行われ、最適化され、クリーンで追跡可能なコードが生成されます。
主な利点:
• ルートの手動登録における冗長性と繰り返しを排除
• Reflection の必要がなくなり、CPU とメモリの使用を削減
• コードの整理と責務分離を改善
• コンパイル時検証による安全なルートの自動生成
• メンテナンスと拡張性の向上
現在は Tolitech.DependencyInjection.Generators ライブラリを使用しており、これは Tolitech.DependencyInjection.Extensions の Reflection ベースのアプローチを置き換えます。
この新しいライブラリは、.NET の Source Generators 機能を利用して、コンパイル時に依存関係の登録を自動生成します。
これにより、さまざまな利点があります:
• 実行時の Reflection を排除し、アプリケーションのパフォーマンスを向上
• より予測可能で追跡可能なコード生成
• コンパイル時にエラーを早期に検出
• .NET のビルドパイプラインとネイティブに統合
私たちは Central Package Manager(CPM)を導入しました。これは、複数プロジェクトを含むソリューションにおける NuGet パッケージ管理の最新手法です。
これにより、すべてのパッケージのバージョンは Directory.Packages.props ファイルで集中管理され、不整合が解消され、安全かつ一貫した更新が可能になります。
その結果、プロジェクト間のバージョン差異によるエラーが減少し、追跡性が向上し、大規模な依存関係の更新作業が簡素化されます。
Lino は、従来の .sln を進化させた新しい形式 .slnx でソリューションを生成するようになりました。
XML ベースの .slnx は、人間とツールの両方にとって可読性が高く、外部システムや CI/CD パイプラインとの統合の複雑さを軽減するために採用されました。
さらに、よりクリーンな構造により、バージョン管理が大幅に改善され、変更が予測しやすく、レビューもしやすくなります。
この変更は .NET エコシステムの将来の方向性と一致しており、プロジェクト開発における相互運用性、拡張性、および自動化を促進します。
Community サブスクリプションは、.NET 9 および Aspire 9.2.1 に基づくプロジェクトの作成をサポートし、ユーザーがプラットフォームの機能を無料かつ技術的に探求できるようにします。
このリリースには以下が含まれます:
• 自動 scaffolding を使用したサービスとエンティティの作成;
• データベースの選択と完全な初期設定;
• EF Core Migrations の段階までの機能生成。
マイクロサービスやモジュール型モノリスなどの高度な機能は有料プランに制限されていますが、このバージョンは生成されたアーキテクチャ、コード品質、および現代的な .NET エコシステムとの統合を評価するための堅固な基盤を提供します。
CLIは現在、プロジェクトの任意のサービスまたはモジュールのマイグレーション作成を容易にするコマンド lino database migrations add を提供しています。
この機能は、ビルドバージョンに紐付いたマイグレーションスクリプトの生成を自動化し、変更内容を一貫して文書化できるようにします。
主な利点:
• シンプルで直接的なコマンドによるサービスまたはモジュール単位の迅速なマイグレーション作成。
• プロジェクトのバージョン管理と互換性のある .sql スクリプトの自動生成。
• 分散アーキテクチャにおいてもデータベースのバージョン管理を容易に。
• 安全で監査可能な方法でデータベース構造の変更を標準化・文書化。
• アプリケーションのビルドおよびデプロイのフローと自然に統合。
新しいバージョン管理機能では、ツールによって生成されたサービスやWebアプリケーションの既存のバージョンを一覧表示し、SemVer(セマンティック バージョニング)に従ってバージョンのバンプを行うことができます。これにより、リリースサイクルにおける追跡性、標準化、および制御が向上します。version コマンドを使用すると、各サービスやアプリケーションのバージョン番号を簡単に設定および更新でき、監査が容易になり、開発フローにベストプラクティスを組み込むことができます。
また、build コマンドも強化されており、指定されたバージョンタグ付きの Docker イメージを生成し、パッケージングを簡素化し、デプロイの準備を整えます。
これらの改善により、リリース管理の一貫性と予測可能性が向上し、開発および運用チームにさらなる透明性がもたらされます。
Command(Post、Put、Patch)および Query(Get)タイプのアーティファクト生成時に考慮するプロパティをカスタマイズ可能。
この機能は以下を提供します:
• エンティティのscaffoldingプロセス中にプロパティを選択できるCLIの対話型インターフェース;
• 選択したフィールドのみを含むinput/outputオブジェクトの自動生成;
• REST APIにおけるpayloadの完全なカスタマイズサポートで、データ制御と柔軟性が向上;
• 必須ルールと整合性を尊重したバリデーションおよびデータ契約との統合。
この改善により、CLIで生成されたアーキテクチャを通じて、何が公開され、永続化され、またはクエリ対象となるかを開発者が正確に制御できるようになります。
Lino CLIにおいて、ファイルの生成および上書きプロセスにおけるセキュリティと追跡可能性を確保するため、自動バージョン管理およびバックアップ機構が実装されました。
すべての生成されたファイルは、/.lino/files/.../received/フォルダに保存され、時間順に整理され、容易に見つけることができます。
置き換えられたファイルは/.lino/files/.../replaced/フォルダに保持され、必要に応じて以前のバージョンを復元することが可能です。このバックアップ構造により、より高度な制御とセキュリティが提供され、特に協調的かつ自動化された開発環境において、生成されたファイルの完全な監査が可能となります。
フロントエンドおよびバックエンドプロジェクト向けの完全な認証および認可の実装で、JWT(JSON Web Tokens)に基づき、ASP.NET CoreのカスタムAuthorization Policiesによる細かな権限管理を提供します。
ハイライト:
• JWTの発行と検証による安全なログイン。
• カスタムポリシー(ClaimsとRoles)に基づく認可。
• 生成されたAPIとフロントエンド(Blazor)間の自動統合。
• ユーザー権限に基づくルートおよびコンポーネントの保護。
利点:
• 現代的なアプリケーションにおける堅牢なセキュリティ。
• プロファイルとドメインによるアクセスモデルの標準化。
• アプリケーション層間の安全で統合された体験。
• 企業のシナリオに応じた拡張や適応の容易さ。
生成されたプロジェクトに1つ以上のフロントエンドを追加できるようになり、Blazor Web Apps(ServerモデルとWebAssemblyモデルを含む)に初期対応しています。
これらのフロントエンドはツールで生成されたAPIと自動的に統合され、バックエンドのエンドポイントに直接呼び出しを行い、データベースへの永続化を伴う完全なCRUDページの作成を可能にします。
ハイライト:
• ドメインエンティティに基づくUI生成。
• 生成されたAPIとのネイティブ通信。
• エンドツーエンド機能:フロントエンド、バックエンド、データベースが連携。
• 同一プロジェクト内で複数のフロントエンドを持つことが可能(例:管理者、ポータル、パブリック)。
利点:
• インターフェース開発の迅速化。
• 手戻り作業と手動統合の削減。
• 統一されたナビゲーション、スタイル、データアクセス標準。
• CRUDページの自動生成による生産性向上。
統合イベントの送信信頼性を確保するために、Transactional Outbox パターンを実装しました。
アプリケーションのトランザクション中に直接イベントを公開する代わりに、今は同じデータベーストランザクション内の特定のテーブルに登録されています。
その後、background jobがこのアウトボックスを読み取り、実際のイベントをトリガーします。
このアプローチの利点:
• データベースの変更とイベント公開の整合性を保証します。
• 中間障害時のメッセージ損失を防ぎます。
• 公開されたイベントの再送制御と監査が可能です。
• イベント駆動アーキテクチャとマイクロサービスのベストプラクティスに準拠しています。
Hangfireライブラリを使用して、生成されたサービス(シンプルまたはモジュール型)にBackground Jobsを含めるオプションが追加されました。
これにより、プロジェクトにはネイティブにバックグラウンドジョブのスケジューリングと実行が組み込まれ、以下の機能が提供されます:
• 繰り返し(cron)、予約、または即時の実行。
• 統合ダッシュボードによるモニタリング。
• ジョブの安全な永続化と再処理。
この仕組みはTransactional Outbox Patternと連携して使用することもでき、部分的な障害や分散システムにおいても信頼性の高いイベント送信を保証します。
主な利点:
• 主な処理を妨げることなく、繰り返しおよび長時間処理を自動化。
• 高いレジリエンスとバックグラウンドジョブの永続性。
• Outboxパターンとの即時統合による信頼性のあるイベント処理。
• サービスごとのジョブの簡単な設定とカスタマイズ。
• 実行状況の監視と制御のための組み込みダッシュボード。
MassTransitの抽象化と高度な機能を利用して、RabbitMQによる非同期メッセージングのサポートを設定できるようになりました。
これにより、生成されたサービスは分散イベントとコマンドを使って疎結合かつ高耐久に通信できます。
統合のハイライト:
• RabbitMQを使用したトランスポートの自動構成。
• ネイティブ依存性注入によるMassTransitのイベント公開およびリスニング。
• 高い信頼性のためのTransactional Outboxパターン対応。
利点:
• イベントベースの通信による高いスケーラビリティ。
• プロデューサーとコンシューマーの疎結合。
• 高い障害耐性と自動再処理。
• 非同期ビジネスフローの保守と拡張が容易。
トランザクションの完全制御、ドメインイベントの管理、統合イベントの公開(Outboxパターン)、自動ロールバック、および操作の成功または失敗に基づくコミット/ロールバックのための Result パターンを備えた堅牢な Unit of Work メカニズムが実装されました。
ハイライト:
• 分離レベル制御付きの明示的なトランザクション作成。
• データ永続化と同期された Domain Events の公開。
• Outboxパターンを介した疎結合の Integration Events 公開。
• 制約検証をサポートした自動ロールバックと例外処理。
• 操作の Result に基づくコミット条件。
• イベント、トランザクション、および障害の構造化ログ。
利点:
• データベースの書き込みと生成されたイベント間のトランザクションの一貫性。
• 標準の SaveChanges または完全なフロー制御の柔軟性。
• ユニットテストと障害追跡の容易さ。
• MediatRをサポートしたドメインとインフラの明確な分離。
各生成サービスごとに使用するデータベースを個別に指定できるようになり、SQL Server と PostgreSQL をネイティブにサポートします。
このアプローチにより、各サービスは 専用のデータベース を持つことができ、完全な分離が保証され、現実的なマイクロサービスアーキテクチャの実装が容易になります。
モジュール型サービスの場合、アプリケーションはサービスごとに1つのデータベースを引き続き使用し、各モジュールは schema によって分離され、構成と一貫性が保たれます。
主な利点:
• サービス間のデータ分離により、セキュリティと責任の明確化が向上。
• 独立したデータベースによる段階的なマイクロサービスの導入が可能。
• schema によるモジュール分離で保守性とドメインの理解が向上。
• サービスごとに最適なDBMSを柔軟に選択可能。
• テスト、個別デプロイ、水平スケーラビリティの容易さ。
Lino CLIでは、プロジェクト生成時に開発者がシンプルサービス(従来型)とモジュラーサービスのどちらか、または両方を自由に組み合わせて選択できるようになりました。
このアプローチは、複数のアーキテクチャスタイルを直接サポートします:
シンプルサービス:マイクロサービスベースのソリューションや伝統的なモノリシックアプリケーションを独立して構築するのに最適です。
モジュラーサービス:アプリケーションのドメインをBounded Contextsに整理し、責任の明確な分離とコンポーネント間のより良い凝集性を備えたモジュラーモノリスの採用を容易にします。
アプリケーションの要件に応じて、シンプルサービス、モジュラーサービス、またはその両方を任意の数追加できます。
このアプローチの利点:
• アーキテクチャのモデリングにおける柔軟性の向上。
• モノリスからマイクロサービスへの段階的なスケーリングが容易。
• ドメインまたはコンテキストごとの明確な責任分離。
• コードの整理とモダンなアーキテクチャベストプラクティスとの整合。
• 結合度の低減と保守性の向上。
マイクロサービスで開発するか、モジュラーモノリスを採用するかは自由に選べます — アプリケーションにとって理想的な道を選んでください。
ハイブリッドキャッシュのネイティブサポートが、Microsoft.Extensions.Caching.Hybrid ライブラリを使用して追加されました。
この実装では、メモリキャッシュ(MemoryCache)と分散キャッシュ(DistributedCache)を組み合わせることで、両者の利点を兼ね備えています。
このアプローチにより、頻繁なリクエストに対して非常に高速なレスポンスを提供しつつ、分散環境での同期とスケーラビリティを維持します。
ハイブリッド戦略の利点:
• ローカルメモリからの即時読み取りによる高性能。
• 分散キャッシュを介したインスタンス間のデータ共有と永続化。
• データベースおよび外部 API 呼び出しの削減。
• 複数のレプリカを持つアプリケーションにおける優れた水平スケーラビリティ。
• 2つのキャッシュ層間のスマートな同期。
パフォーマンスと整合性が要求され、かつ柔軟なアーキテクチャが求められるシナリオに最適です。
Lino CLI は 複数言語の統合サポートを備えたプロジェクトを生成するようになり、以下のカルチャーへの自動翻訳を含みます:
en, pt-BR, es, fr, it, de, ja, ko, zh-Hans および ru。
リソースファイル(resx)はメイン言語を基に自動生成され、内容は自動翻訳されており、グローバルなアプリケーションで即時使用可能です。
多言語サポートの利点:
• 異なる地域や文化に対応したアプリケーションの作成を容易にします。
• 国際化にかかる時間を短縮します。
• .NET のローカリゼーションシステムとネイティブに統合されます。
• 多言語アプリケーションでのユーザー体験を向上させます。
• グローバル市場向けのソリューションを迅速に拡張可能です。
Lino CLIで生成されたコードは、より効率的で高性能なログ記録のためにLoggerMessageを使用するようになりました。
従来のILogger拡張メソッドは値型のboxingを発生させ、実行時のメモリ割り当てに影響しますが、LoggerMessageパターンは各ログメッセージごとに強く型付けされた静的なActionsを生成します。
このアプローチの利点:
• メモリ割り当ての大幅な削減。
• int、Guid、DateTimeなどの値型のboxingを回避。
• 大量ログシナリオでのパフォーマンス向上。
• ログメッセージの標準化と集中管理。
• 監査、診断、モニタリングの明確化。
この改善は、パフォーマンスと追跡性が重要なAPIやバックエンドサービスで特に有用です。
Lino CLI は、Strongly Typed Ids のオプションサポートを提供し、Guid や int のような汎用型の代わりに、エンティティ識別子を強く型付けされた特定の型で表現できます。
この機能により、誤って異なるエンティティ間で識別子を割り当てるような一般的なミスを防ぎ、コードがより表現力豊かでアプリケーションのドメインに適合するようになります。
Strongly Typed Ids の利点:
• コンパイル時のより強力な型安全性。
• 異なるエンティティ間の誤った割り当ての防止。
• コードの可読性と意図の明確さの向上。
• ドメイン内での識別子の追跡やデバッグが容易に。
• EF Core、JSON シリアライゼーション、およびバリデーションとの統合。
この機能はオプションであり、プロジェクト生成時に有効にできます。
生成されたプロジェクトは、.NET エコシステムの主要な解析ツールを使用して静的コード解析のサポートを設定できるようになりました。
これらのツールはビルドに直接統合されており、フォーマット、スタイル、アーキテクチャの問題や開発初期段階での論理的な欠陥を特定するのに役立ちます。
利点:
• コードの一貫性と標準化を最初から促進します。
• バグや悪い慣行を早期に検出します。
• コードレビューや技術的オンボーディングを容易にします。
• コードベースの品質と保守性を向上させます。
• 一般的なエラーを防ぎ、.NET のベストプラクティスへの準拠を向上させます。
構成はプロジェクトごとにカスタマイズ可能で、望ましい厳密さのレベルで柔軟性を高めます。
Tolitech.Results ライブラリを作成し、.NET で Result Pattern を完全かつ流暢に実装しました。
このライブラリは、成功・失敗にかかわらず操作結果を HTTP ステータス、メッセージ、エラー、タイトル、詳細、およびオプションのデータ(Result<T> 対応)を含む構造化されたオブジェクトにカプセル化します。
Result Pattern 利用の利点:
• アプリケーション全体での操作結果の標準化。
• フロー制御としての例外の削減。
• 操作の組み合わせおよびチェーンが容易。
• レイヤー間およびサービス間の通信サポートの向上。
• HTTP API、バリデーション、エラーメッセージとのスムーズな統合。
• デバッグおよび構造化ログの体験向上。
さらに、Tolitech.Results.Http と Tolitech.Results.Guards のような拡張により、REST API および防御的バリデーションとの統合が拡大します。