<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Architecture | The .NET Blog</title><link>https://thedotnetblog.com/ja/tags/architecture/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ja</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ja/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>SDD Conference 2026</title><link>https://thedotnetblog.com/ja/events/sdd-conference-2026/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/ja/events/sdd-conference-2026/</guid><description>ロンドンのBarbican Centreで開催される5日間のソフトウェア開発カンファレンス — 78セッションと14ワークショップ。アーキテクチャ、.NET、AI、Azure、DevOpsなどをカバー。</description><content:encoded>&lt;p&gt;&lt;strong&gt;SDD 2026&lt;/strong&gt; は &lt;strong&gt;2026年5月11日〜15日&lt;/strong&gt; に &lt;strong&gt;ロンドンの Barbican Centre&lt;/strong&gt; で開催されます。3日間のメインカンファレンスは火曜日から木曜日で、月曜日と金曜日にはオプションの終日ワークショップがあります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;78セッション&lt;/strong&gt; と &lt;strong&gt;14ワークショップ&lt;/strong&gt; を擁し、ヨーロッパで最も充実した開発者カンファレンスの一つです。&lt;/p&gt;
&lt;h2 id="トピック"&gt;トピック&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;アーキテクチャ的思考&lt;/li&gt;
&lt;li&gt;C# 13 における関数型コード&lt;/li&gt;
&lt;li&gt;サーバーレスデザイン&lt;/li&gt;
&lt;li&gt;セマンティック AI&lt;/li&gt;
&lt;li&gt;Azure Kubernetes Services&lt;/li&gt;
&lt;li&gt;リーン DevOps 戦略&lt;/li&gt;
&lt;li&gt;The Model Context Protocol (MCP)&lt;/li&gt;
&lt;li&gt;.NET におけるエージェント AI&lt;/li&gt;
&lt;li&gt;モノリスのリファクタリング&lt;/li&gt;
&lt;li&gt;LLM でより速くコーディング&lt;/li&gt;
&lt;li&gt;ポスト量子世界における暗号技術&lt;/li&gt;
&lt;li&gt;ローカルファースト開発&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="スピーカー"&gt;スピーカー&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Kevlin Henney&lt;/strong&gt;、&lt;strong&gt;Neal Ford&lt;/strong&gt;、&lt;strong&gt;Sander Hoogendoorn&lt;/strong&gt;、&lt;strong&gt;Andrew Clymer&lt;/strong&gt;、&lt;strong&gt;Jacqui Read&lt;/strong&gt;、&lt;strong&gt;Christian Weyer&lt;/strong&gt;、&lt;strong&gt;Jeff Prosise&lt;/strong&gt;、&lt;strong&gt;Jules May&lt;/strong&gt;、&lt;strong&gt;Oliver Sturm&lt;/strong&gt;、&lt;strong&gt;Raju Gandhi&lt;/strong&gt; を含むワールドクラスのラインナップ。&lt;/p&gt;
&lt;h2 id="チケットと情報"&gt;チケットと情報&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/"&gt;イベントサイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddvault.s3.amazonaws.com/assets/SDD_2026_schedule.pdf"&gt;完全アジェンダ PDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/register"&gt;登録オプション&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SDD 2025 参加者の98%が全体的な体験を「良い」、「とても良い」、「素晴らしい」と評価しました。&lt;/p&gt;</content:encoded></item><item><title>.NETのComposable StackでAI搭載カンファレンスアプリを構築する</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</guid><description>MicrosoftはConferencePulseを構築しました — Microsoft.Extensions.AI、DataIngestion、VectorData、MCP、Agent Frameworkを組み合わせたライブカンファレンスBlazorアプリ。パーツがどう組み合わさるかを説明します。</description><content:encoded>&lt;p&gt;&lt;em&gt;この投稿は自動翻訳されました。元のバージョンは&lt;a href="https://thedotnetblog.com/ja/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/"&gt;こちら&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;.NETのComposable StackでAI搭載カンファレンスアプリを構築する&lt;/a&gt; — Microsoftは、5つの.NET拡張ライブラリを組み合わせることで、ライブカンファレンスセッション向けのBlazor ServerアプリであるConferencePulseを構築しました。MVP Summitで使用されました。&lt;/p&gt;
&lt;h2 id="conferencepulseの機能"&gt;ConferencePulseの機能&lt;/h2&gt;
&lt;p&gt;ConferencePulseはライブセッション中に動作し、以下を提供します：セッションコンテンツからAIが生成するポール、ライブナレッジベースからRAGパイプラインで引き出す聴衆Q&amp;amp;A、自動生成されたインサイト、複数の同時AIエージェントが生成するセッションサマリー。スタックは.NET 10、Blazor Server、Aspireで、5つのプロジェクトに分割されています：Web、Core、Ingestion、Agents、Mcp、AppHost。&lt;/p&gt;
&lt;h2 id="microsoftextensionsaiすべてのための1つの抽象化"&gt;Microsoft.Extensions.AI：すべてのための1つの抽象化&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IChatClient&lt;/code&gt;は統合抽象化です — 一度セットアップすれば、同じインターフェイスがAzure OpenAI、OpenAI、Anthropic、または他のプロバイダーで動作します。関数呼び出し、OpenTelemetryトレーシング、ロギングミドルウェアを備えた完全設定クライアントを6行で取得できます：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(...).&lt;/span&gt;&lt;span class="n"&gt;GetChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFunctionInvocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseOpenTelemetry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseLogging&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同じ&lt;code&gt;IChatClient&lt;/code&gt;は後でデータ取り込みのエンリッチメントステップに再利用されます — そのための別クライアントは不要です。&lt;/p&gt;
&lt;h2 id="dataingestionパイプライン"&gt;DataIngestionパイプライン&lt;/h2&gt;
&lt;p&gt;セッションコンテンツはパイプラインを流れます：&lt;code&gt;MarkdownReader&lt;/code&gt; → &lt;code&gt;HeaderChunker&lt;/code&gt;（500トークン、50トークンオーバーラップ）→ &lt;code&gt;SummaryEnricher&lt;/code&gt; + &lt;code&gt;KeywordEnricher&lt;/code&gt; → &lt;code&gt;VectorStoreWriter&lt;/code&gt;（Qdrant）。エンリッチャーはインデックス作成前にサマリーを生成してキーワードを抽出するために同じ&lt;code&gt;IChatClient&lt;/code&gt;を使用します。聴衆の質問、Q&amp;amp;Aペア、ポール結果はセッションが進むにつれてリアルタイムで取り込まれます — ナレッジベースはトーク中に成長します。&lt;/p&gt;
&lt;h2 id="vectordataプロバイダーに依存しない検索"&gt;VectorData：プロバイダーに依存しない検索&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;VectorStoreCollection.SearchAsync()&lt;/code&gt;は、バッキングストアがQdrantであるかAzure AI Searchであるかに関係なく同じように動作します。ハイブリッド検索（ベクトル + 全文）がサポートされています。聴衆Q&amp;amp;AのRAGパイプラインはこのコレクションをクエリし、チャットクライアントにコンテキストとして渡す関連チャンクを取得します。&lt;/p&gt;
&lt;h2 id="mcpツールとしてのセッションコンテンツ"&gt;MCP：ツールとしてのセッションコンテンツ&lt;/h2&gt;
&lt;p&gt;セッションコンテンツはMCPを通じて公開されるため、MCPと互換性のあるクライアントからアクセスできます。サーバーとクライアントの両方が実装されています — サーバーはセッションの知識をMCPツールとして公開し、クライアントはエージェントパイプライン内からそれらのツールを呼び出すことを可能にします。&lt;/p&gt;
&lt;h2 id="agent-framework並列マルチエージェントサマリー"&gt;Agent Framework：並列マルチエージェントサマリー&lt;/h2&gt;
&lt;p&gt;セッションサマリーは3つのエージェントが並行して実行されることで生成されます — &lt;code&gt;PollSummaryAgent&lt;/code&gt;、&lt;code&gt;QuestionSummaryAgent&lt;/code&gt;、&lt;code&gt;InsightSummaryAgent&lt;/code&gt; — その後マージされます。これはMicrosoft Agent Frameworkのグループチャットまたは並列実行パターンを使用します。各エージェントが1つの関心事を担当し、オーケストレーターが出力をマージします。&lt;/p&gt;
&lt;h2 id="設計原則"&gt;設計原則&lt;/h2&gt;
&lt;p&gt;この投稿では覚えておく価値のある点が述べられています：最もシンプルなツールを使用する。シンプルな生成タスクには直接の&lt;code&gt;IChatClient&lt;/code&gt;呼び出し。構造化データ抽出にはツール/関数呼び出し。自律的なマルチステップ推論が必要な場合のみフルエージェントを使用。ライブラリのレイヤリングがこれを強制します — フルAgent Frameworkを引き込まずに&lt;code&gt;Microsoft.Extensions.AI&lt;/code&gt;を使用できます。&lt;/p&gt;
&lt;p&gt;完全なプロジェクト構造とソースリンクについては、&lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;フルポスト&lt;/a&gt;を参照してください。&lt;/p&gt;</content:encoded></item><item><title>あなたのエージェントはどこで物事を覚えているか？チャット履歴ストレージの実践ガイド</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>サービス管理かクライアント管理か？線形か分岐型か？AIエージェントが実際に何ができるかを決める重要なアーキテクチャ上の決定。C#とPythonのコード例付き。</description><content:encoded>&lt;p&gt;&lt;em&gt;この投稿は自動翻訳されました。元の記事は&lt;a href="https://thedotnetblog.com/ja/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;こちら&lt;/a&gt;をご覧ください。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;AIエージェントを構築する際、ほとんどのエネルギーをモデル、ツール、プロンプトに費やします。&lt;em&gt;会話履歴がどこに保存されるか&lt;/em&gt;という問題は実装の詳細に見えますが、実は最も重要なアーキテクチャ上の決定の一つです。&lt;/p&gt;
&lt;p&gt;これにより、ユーザーが会話を分岐させたり、回答を元に戻したり、再起動後にセッションを再開したりできるかどうか、そしてデータがインフラから出るかどうかが決まります。&lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;Agent FrameworkチームはLデープな分析を公開しました&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="2つの基本パターン"&gt;2つの基本パターン&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;サービス管理型&lt;/strong&gt;: AIサービスが会話状態を保存します。アプリは参照（スレッドID、レスポンスID）を保持し、サービスは各リクエストに関連する履歴を自動的に含めます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;クライアント管理型&lt;/strong&gt;: アプリが完全な履歴を管理し、各リクエストに関連メッセージを送信します。サービスはステートレスです。すべてを制御できます。&lt;/p&gt;
&lt;h2 id="agent-frameworkによる抽象化"&gt;Agent Frameworkによる抽象化&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;私の名前はAliceです。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;私の名前は何ですか？&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;私の名前はAliceです。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;私の名前は何ですか？&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;セッションが基礎的な違いを処理します。プロバイダーを切り替えてもアプリケーションコードは変わりません。&lt;/p&gt;
&lt;h2 id="プロバイダー早見表"&gt;プロバイダー早見表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロバイダー&lt;/th&gt;
&lt;th&gt;ストレージ&lt;/th&gt;
&lt;th&gt;モデル&lt;/th&gt;
&lt;th&gt;圧縮&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;クライアント&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;開発者&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;サービス&lt;/td&gt;
&lt;td&gt;線形&lt;/td&gt;
&lt;td&gt;サービス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API（デフォルト）&lt;/td&gt;
&lt;td&gt;サービス&lt;/td&gt;
&lt;td&gt;分岐型&lt;/td&gt;
&lt;td&gt;サービス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;クライアント&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;開発者&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="選び方"&gt;選び方&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;会話の分岐や「やり直し」が必要？&lt;/strong&gt; → サービス管理型のResponses API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;データ主権が必要？&lt;/strong&gt; → データベースバックドプロバイダーのクライアント管理型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;シンプルなチャットボット？&lt;/strong&gt; → サービス管理型の線形で十分&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;完全な記事&lt;/a&gt;で意思決定ツリー全体を確認してください。&lt;/p&gt;</content:encoded></item></channel></rss>