.NET Azure Functions isolated worker model 更新ポイント|移行期限・設定変更・管理者の確認事項

.NET の Azure Functions を使っている開発者・管理者がまず確認すべき結論は、C# Azure Functions は今後、分離ワーカー モデルを前提に設計・移行計画を進めるべきという点です。2026年7月3日の公式ドキュメント更新履歴では大きな機能追加ではなく、主にパフォーマンス最適化に関する記述の整理が行われています。ただし、背景にある重要事項は変わっていません。in-process モデルのサポートは 2026年11月10日に終了予定であり、継続してサポートを受けるには isolated worker model への移行が必要です。(GitHub)

この記事では、Microsoft Learn の「Guide for running C# Azure Functions in the isolated worker model」をもとに、.NET の Azure Functions を運用する管理者・開発者が確認すべき更新ポイント、影響範囲、設定変更、移行期限、実務上のチェック項目を整理します。特に、.NET 8 / .NET 9 / .NET 10、Linux Consumption、Flex Consumption、Application Insights、CI/CD、FUNCTIONS_WORKER_RUNTIME の設定を扱っている環境では、単なるドキュメント更新として流さず、棚卸しと移行計画に落とし込むことが重要です。

目次

.NET の Azure Functions isolated worker model とは

Azure Functions の .NET 実行モデルには、大きく分けて in-process モデルとisolated worker modelがあります。

in-process モデルでは、関数コードが Azure Functions ホストと同じプロセス内で実行されます。一方、isolated worker model では、関数コードがホストとは別の .NET ワーカー プロセスで実行されます。Microsoft Learn では、isolated worker model の利点として、アセンブリ競合の低減、起動処理の制御、標準的な依存関係注入、.NET バージョン選択の柔軟性が挙げられています。(Microsoft Learn)

実務では、次のように理解すると分かりやすいです。

観点in-process モデルisolated worker model
実行場所Functions ホストと同一プロセスFunctions ホストとは別の .NET ワーカー プロセス
.NET バージョン選択LTS 中心で制約が強いLTS、STS、.NET Framework などに対応
依存関係の衝突ホスト側ライブラリとの競合リスクがあるアプリ側プロセスが分離され、競合を抑えやすい
ミドルウェア基本的に非対応対応
DI・起動処理Functions 固有の作法が多い通常の .NET アプリに近い構成
今後の推奨度移行対象新規開発・移行先の中心

重要なのは、isolated worker model が単なる「別の書き方」ではないことです。Program.cs を持つコンソール アプリに近い構成になり、依存関係注入、構成、ログ、ミドルウェア、Azure SDK クライアント登録などを、より標準的な .NET の作法で扱えるようになります。

2026年7月3日の更新ポイントは「機能追加」よりも確認事項の明確化

2026年7月3日の GitHub 履歴では、対象ドキュメントに「Apply LAA suggestions from code review」というコミットが入り、dotnet-isolated-process-guide.md では 3行追加・3行削除の差分が確認できます。変更内容は、プレースホルダー最適化の説明文と ReadyToRun の説明文の表現調整が中心であり、新しい設定項目が追加されたわけではありません。(GitHub)

ただし、更新箇所がパフォーマンス最適化セクションに関係しているため、管理者は次の点を再確認する価値があります。

確認対象確認すべき理由実務で見る場所
プレースホルダー設定.NET 8 以降のコールドスタート改善に関係するアプリ設定、WEBSITE_USE_PLACEHOLDER_DOTNETISOLATED
.NET バージョン設定アプリのターゲット フレームワークと Azure 側設定の不一致を避けるnetFrameworkVersion、linuxFxVersion
64ビット設定一部の最適化では 64ビット構成が前提になるAzure Functions の構成、CLI
ReadyToRunConsumption plan での起動性能改善に関係する.csproj、発行プロファイル、CI/CD
依存パッケージ最適化や新しい実行モデルで必要な最小バージョンがある.csproj、NuGet、Dependabot

つまり、7月3日の更新は「新機能が追加されたので即時対応」というより、isolated worker model へ移行済み、または移行予定の環境で、パフォーマンス関連設定が正しくそろっているか確認するきっかけと捉えるのが現実的です。

影響範囲:どの .NET Azure Functions が確認対象になるか

今回の内容で特に影響を受けるのは、次のような環境です。

対象影響度確認ポイント
C# Azure Functions を in-process で運用中高2026年11月10日までの移行計画が必要
.NET 8 の Azure Functions を運用中高in-process か isolated かを確認
.NET 9 / .NET 10 を使いたい環境高isolated worker model が前提
Linux Consumption plan を利用中高.NET 10 では制約があり、Flex Consumption の検討が必要
HTTP トリガー中心の Functions中〜高ASP.NET Core integration の利用可否を確認
Application Insights を使っている環境中ログ設定が host.json だけで完結しない点を確認
CI/CD で Azure Functions を自動デプロイしている環境中〜高ランタイム設定、アプリ設定、発行成果物の整合性を確認

特に注意したいのは、Azure Portal 上で「動いているように見える」環境でも、アプリの実行モデル、ターゲット フレームワーク、Azure 側のスタック設定、CI/CD の発行設定がずれているケースです。isolated worker model への移行では、コードだけでなく Azure 側の構成変更も同時に必要になります。

サポート期限:in-process モデルは 2026年11月10日終了予定

Microsoft Learn では、.NET Azure Functions の in-process モデルのサポートは 2026年11月10日に終了すると案内されています。継続してフルサポートを受けるには、isolated worker model への移行が推奨されています。(Microsoft Learn)

また、Azure Functions ランタイム 1.x のサポートは 2026年9月14日に終了予定です。Functions 2.x と 3.x はすでにサポート対象外であり、現在の推奨ランタイムは 4.x です。(Microsoft Learn)

項目期限・状態対応方針
Azure Functions in-process モデル2026年11月10日サポート終了予定isolated worker model へ移行
Azure Functions ランタイム 1.x2026年9月14日サポート終了予定Functions 4.x へ移行
Azure Functions ランタイム 2.x / 3.xサポート終了済み速やかに 4.x へ移行
Linux Consumption plan2028年9月30日廃止予定Flex Consumption plan への移行を検討
.NET 6 / .NET 7公式サポート終了済み.NET 8 以降へ移行

管理者が避けたいのは、2026年秋に「ランタイム移行」「実行モデル移行」「.NET バージョン更新」「ホスティングプラン見直し」を同時に抱えることです。とくに基幹系や外部連携の多い Functions では、2026年11月を期限と見なすのではなく、検証・ステージング・本番切り替えを含めた社内期限を前倒しで設定するべきです。

サポートされる .NET バージョンの見方

Azure Functions 4.x の isolated worker model では、.NET 10、.NET 9、.NET 8、.NET Framework 4.8 系が対象として示されています。一方、in-process モデルは .NET 8 までであり、より新しい .NET バージョンを使うには isolated worker model への移行が必要です。(Microsoft Learn)

.NET バージョンisolated worker modelin-process モデル実務上の判断
.NET 10対応非対応新規開発・長期運用候補。ただし Linux Consumption では制約あり
.NET 9対応非対応STS 前提。採用時はサポート期限を確認
.NET 8対応対応既存移行の現実的な第一候補
.NET Framework 4.8 系対応Functions 1.x などで利用レガシー資産の延命策として検討
.NET 6 / .NET 7サポート終了済みサポート終了済み移行対象

新規開発なら、原則として Azure Functions 4.x + isolated worker model を前提にします。既存の in-process アプリでは、まず .NET 8 isolated への移行を検討し、その後 .NET 10 などへの更新余地を確保する進め方が安全です。

.NET 10 と Linux Consumption plan の注意点

公式ガイドでは、.NET 10 アプリは Linux の Consumption plan では実行できず、Linux で実行する場合は Flex Consumption plan の利用が案内されています。(Microsoft Learn)

これは、グローバル展開している環境では特に重要です。たとえば、リージョンごとに Functions のホスティングプランが異なる、IaC テンプレートで Windows と Linux が混在している、古い Consumption plan をそのまま使っている、といったケースでは、.NET バージョンだけを更新してもデプロイや起動に失敗する可能性があります。

確認すべき観点は次のとおりです。

確認項目具体的な確認内容
OSWindows か Linux か
ホスティングプランConsumption、Flex Consumption、Premium、Dedicated など
ターゲット .NETnet8.0、net9.0、net10.0 など
Azure 側スタック設定Windows は netFrameworkVersion、Linux は linuxFxVersion
IaCBicep / ARM / Terraform 側の値が最新化されているか

特に、グローバル企業では「開発環境は Windows、検証環境は Linux、本番の一部リージョンだけ Consumption plan」という構成も珍しくありません。移行時はアプリ単位ではなく、サブスクリプション、リソースグループ、リージョン、ホスティングプラン単位で棚卸しすることが大切です。

パッケージ参照の更新ポイント

isolated worker model では、in-process モデルとは使用する NuGet パッケージが異なります。基本となるパッケージは Microsoft.Azure.Functions.Worker と Microsoft.Azure.Functions.Worker.Sdk です。ターゲット .NET バージョンごとに必要な最小バージョンも示されています。(Microsoft Learn)

ターゲットMicrosoft.Azure.Functions.WorkerMicrosoft.Azure.Functions.Worker.Sdk
.NET 102.50.0 以降2.0.5 以降
.NET 92.0.0 以降2.0.0 以降
.NET 81.16.0 以降1.11.0 以降
.NET Framework1.16.0 以降1.11.0 以降

ただし、実務では「最小バージョンを満たしているか」だけでは不十分です。公式ガイドでは、パフォーマンス最適化の文脈で、少なくとも Microsoft.Azure.Functions.Worker 1.19.0 以降、Microsoft.Azure.Functions.Worker.Sdk 1.16.4 以降、そして .NET Framework を除き Microsoft.AspNetCore.App の FrameworkReference を追加する構成が示されています。(Microsoft Learn)

移行時にやりがちな失敗は、Microsoft.NET.Sdk.Functions や Microsoft.Azure.WebJobs.* 系のパッケージが残ることです。isolated worker model では、Microsoft.Azure.Functions.Worker.Extensions.* 系の拡張パッケージへ置き換える必要があります。(Microsoft Learn)

確認すべき .csproj の例

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" />
    <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
  </ItemGroup>
</Project>

上記はあくまで .NET 8 移行例の考え方です。実際には、利用しているトリガーやバインディングに応じて、Storage、Service Bus、Event Hubs、Cosmos DB、Durable Functions などの拡張パッケージを個別に見直します。

Program.cs が移行の中心になる

isolated worker model では、Program.cs がアプリの起点になります。in-process モデルで Startup.cs や FunctionsStartup に書いていた依存関係注入や初期化処理は、Program.cs に移します。Microsoft の移行ガイドでも、isolated worker process へ移行する際は Program.cs の追加が必要とされています。(Microsoft Learn)

HTTP トリガーを使う場合は、ASP.NET Core integration を利用する構成が推奨される場面があります。

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(services =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
    })
    .Build();

host.Run();

HTTP トリガーを使わない、または ASP.NET Core integration を使わない構成では、ConfigureFunctionsWorkerDefaults() を使うケースもあります。ただし、既存コードを機械的に置き換えるのではなく、HTTP トリガーの有無、ASP.NET Core の型を使うか、Application Insights の構成をどうするかを確認してから決めるべきです。

FUNCTIONS_WORKER_RUNTIME は dotnet-isolated に変更する

移行で必ず確認すべきアプリ設定が FUNCTIONS_WORKER_RUNTIME です。in-process では通常 dotnet を使いますが、isolated worker model では dotnet-isolated に変更します。ローカル環境の local.settings.json でも同じ考え方です。(Microsoft Learn)

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
  }
}

Azure 上でも、ステージングスロットや本番スロットのアプリ設定を確認します。特に CI/CD や IaC で設定を上書きしている場合、ポータル上で手動変更しても次回デプロイで元に戻ることがあります。

実務では次の順序で確認すると安全です。

| 順番 | 確認対象 | 見るべき内容 |
| -: | ———– | ————————————————– |
| 1 | ローカル設定 | local.settings.json の FUNCTIONS_WORKER_RUNTIME |
| 2 | Azure アプリ設定 | dotnet-isolated になっているか |
| 3 | スロット設定 | ステージングと本番で差異がないか |
| 4 | IaC | Bicep / ARM / Terraform の設定値 |
| 5 | CI/CD | デプロイ時にアプリ設定を上書きしていないか |

Azure 側のランタイム設定はコードと同時に変更する

isolated worker model への移行では、コードだけを先にデプロイしたり、Azure 側の設定だけを先に変えたりすると、アプリがエラー状態になる可能性があります。Microsoft の移行ガイドでは、デプロイ済みペイロードと構成済みランタイムが一致しない場合にエラー状態になるため、ステージングスロットを使って更新することが推奨されています。(Microsoft Learn)

本番環境では、次の流れが現実的です。

| 手順 | 作業 | 目的 |
| -: | —————————————– | —————————————– |
| 1 | 対象 Function App を棚卸し | in-process、Functions v1/v3、.NET 6/7 を洗い出す |
| 2 | ローカルプロジェクトを isolated worker model へ移行 | .csproj、Program.cs、属性、パッケージを変更 |
| 3 | ローカルで Azure Functions Core Tools により動作確認 | 起動、トリガー、ログ、例外処理を確認 |
| 4 | ステージングスロットを作成 | 本番影響を避ける |
| 5 | ステージング側で dotnet-isolated と .NET スタックを設定 | Azure 側のランタイムをコードに合わせる |
| 6 | ステージングへデプロイ | 実環境に近い条件で検証 |
| 7 | ログとメトリックを確認 | Application Insights、失敗率、コールドスタートを確認 |
| 8 | スロットスワップ | 本番へ反映 |
| 9 | 本番で再確認 | エラー率、応答時間、トリガー実行状況を確認 |

「設定変更とコード変更を同時に扱う」ことが移行の肝です。とくに複数スロットを使っている環境では、FUNCTIONS_WORKER_RUNTIME をスロット設定にするかどうかも含めて慎重に確認してください。Microsoft の移行手順では、FUNCTIONS_WORKER_RUNTIME はスロット設定としてマークしないよう案内されています。(Microsoft Learn)

HTTP トリガーは ASP.NET Core integration を検討する

HTTP トリガーでは、isolated worker model で次の2つのアプローチを選べます。

方式主な型向いているケース
ASP.NET Core integrationHttpRequest、IActionResultASP.NET Core に慣れた開発チーム、HTTP API 中心の Functions
built-in HTTP modelHttpRequestData、HttpResponseData既存の isolated worker アプリとの互換性を重視する場合

公式ガイドでは、ASP.NET Core integration は ASP.NET Core 開発者になじみのある型を使える一方で、ASP.NET Core の全機能を提供するわけではないと説明されています。また、.NET Framework を対象とするアプリでは ASP.NET Core integration は利用できません。(Microsoft Learn)

移行時には、単に HttpRequestData に置き換えるのではなく、今後の保守性を考えて HttpRequest / IActionResult に寄せるかどうかを判断します。

判断基準

判断ポイントASP.NET Core integration が向くbuilt-in HTTP model が向く
チームの経験ASP.NET Core MVC / Minimal API 経験が多いFunctions 独自モデルに慣れている
既存コードIActionResult を多用しているHttpRequestData ベースで既に実装済み
シリアライズASP.NET Core 側の JSON 設定を使いたいworker の一般的な JSON 設定で十分
.NET Framework不向き選択肢になる
長期保守Web API に近い書き方にしたい小規模・単純な HTTP 関数

なお、HttpRequestData を使う場合、特定の HTTP リクエストボディの扱いで制約があるため、ストリーミングを扱うような API では ASP.NET Core integration を検討した方が安全です。(Microsoft Learn)

ログ設定は host.json だけでは不十分になる

isolated worker model でよくある落とし穴がログ設定です。Functions ホストと isolated process worker はログレベルの構成が分かれており、host.json の設定は worker 側のアプリコードから出るログには直接効きません。worker 側のログレベルは、コードまたは appsettings.json などで設定します。(Microsoft Learn)

たとえば、移行前に host.json で Application Insights のログレベルを制御していた環境では、移行後に「ログが増えた」「特定カテゴリのログが出ない」「Application Insights の課金が増えた」といった変化が起きる可能性があります。

確認すべきポイントは次の3つです。

確認項目内容
ホスト側ログhost.json で Functions host のログを制御
アプリ側ログProgram.cs または appsettings.json で worker 側ログを制御
Application Insightshost と worker の両方から送られるログのカテゴリ・レベルを確認

新規プロジェクトでは FunctionsApplication.CreateBuilder() の利用が推奨される流れになっており、appsettings.json の読み込みや worker 構成が扱いやすくなります。既存の new HostBuilder() 構成を使っている場合は、必要に応じて ConfigureAppConfiguration() で appsettings.json を読み込む設計にします。(Microsoft Learn)

パフォーマンス最適化:Placeholders と ReadyToRun を確認する

今回の更新履歴で直接触れられているのが、パフォーマンス最適化セクションです。公式ガイドでは、コールドスタート改善に関する選択肢として、プレースホルダー、最適化済み executor、ReadyToRun が説明されています。(Microsoft Learn)

Placeholders

.NET 8 以降を対象とするアプリでは、プレースホルダーによってコールドスタート改善が期待できます。利用するには、依存関係を更新したうえで、WEBSITE_USE_PLACEHOLDER_DOTNETISOLATED=1 を設定し、Azure 側の .NET バージョン設定や 64ビット設定も正しく合わせる必要があります。(Microsoft Learn)

az functionapp config appsettings set \
  -g <groupName> \
  -n <appName> \
  --settings WEBSITE_USE_PLACEHOLDER_DOTNETISOLATED=1

注意点は、設定を1つ入れれば完了ではないことです。netFrameworkVersion、ターゲットフレームワーク、64ビット設定などが不一致だと、アプリが起動に失敗する可能性があります。

ReadyToRun

ReadyToRun は、アプリを ahead-of-time コンパイルに近い形で発行し、Consumption plan でのコールドスタート影響を抑えるための選択肢です。公式ガイドでは、.NET 8 以降かつ Azure Functions runtime 4.0 以降で利用できると説明されています。(Microsoft Learn)

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
  <AzureFunctionsVersion>v4</AzureFunctionsVersion>
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  <PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>

ReadyToRun で重要なのは、ホスティング環境のアーキテクチャと RuntimeIdentifier を一致させることです。Windows 64ビットなら win-x64、Linux 64ビットなら linux-x64 を選ぶといった確認が必要です。アーキテクチャが合わないと、起動時エラーにつながります。

移行時に変更が必要になりやすいコード

isolated worker model への移行では、次のようなコード変更が発生します。

変更箇所in-processisolated worker model
関数属性[FunctionName("...")][Function("...")]
usingMicrosoft.Azure.WebJobsMicrosoft.Azure.Functions.Worker
ログメソッド引数の ILoggerDI で ILogger<T> を注入
出力バインドout、IAsyncCollector など戻り値、複数出力用クラス、SDK クライアント
起動処理Startup.cs、FunctionsStartupProgram.cs
ランタイム設定dotnetdotnet-isolated

たとえば、Blob 出力バインドでは、in-process の [Blob(...)] が isolated worker model では [BlobOutput(...)] になるなど、属性名や引数が変わる場合があります。Microsoft の移行ガイドでは、出力バインドを関数パラメーターリストから移動することや、必要に応じて Azure SDK クライアントを直接使うことも案内されています。(Microsoft Learn)

実務では、まずビルドエラーを出しながら機械的に置換し、その後にトリガーごとの動作確認を行う進め方が効率的です。ただし、Queue、Blob、Service Bus、Event Hubs、Cosmos DB、Durable Functions は拡張パッケージやバインディングの変更影響が大きいため、単体テストだけでなく実際の Azure リソースを使った検証も必要です。

管理者が最初にやるべき棚卸し

移行を始める前に、管理者は対象アプリを棚卸しします。Azure PowerShell や Azure CLI、Azure Resource Graph、タグ情報、CI/CD の一覧を使い、少なくとも次の情報を整理します。

棚卸し項目例
Function App 名func-order-prod、func-billing-api
リージョンJapan East、East US、West Europe
OSWindows / Linux
ホスティングプランConsumption / Flex Consumption / Premium / Dedicated
Functions runtime4.x / 1.x / 旧バージョン
実行モデルdotnet / dotnet-isolated
ターゲット .NETnet8.0、net6.0、net48 など
トリガーHTTP、Timer、Queue、Blob、Service Bus など
CI/CDGitHub Actions、Azure DevOps、手動発行
監視Application Insights、Log Analytics
業務重要度高 / 中 / 低
移行難易度低 / 中 / 高

優先順位は、次の順で付けると実務的です。

  1. サポート切れ、または期限が近いもの
  2. 外部公開 API や基幹連携など停止影響が大きいもの
  3. Linux Consumption など将来の制約が大きいもの
  4. HTTP トリガーやバインディングが複雑で検証に時間がかかるもの
  5. 小規模で移行しやすく、先行事例にできるもの

最初から全アプリを一括移行しようとすると、障害時の切り分けが難しくなります。まずは低リスクな Function App を1つ選び、移行手順、CI/CD、監視、ロールバック手順をテンプレート化してから横展開するのが安全です。

移行チェックリスト

以下は、Azure Functions の .NET isolated worker model 移行で使える実務チェックリストです。

フェーズチェック項目完了条件
事前調査FUNCTIONS_WORKER_RUNTIME を確認dotnet のアプリを移行対象として抽出
事前調査Functions runtime を確認4.x 以外は先に runtime 移行を計画
事前調査.NET バージョンを確認.NET 6 / 7 などサポート切れを抽出
設計ターゲット .NET を決定net8.0、net10.0 などを明確化
設計ホスティングプランを確認Linux Consumption 制約を確認
コード変更.csproj を更新Worker / Worker.Sdk / 拡張パッケージへ変更
コード変更Program.cs を追加起動処理、DI、Application Insights を移行
コード変更属性・バインディングを更新[Function]、BlobOutput などに変更
設定変更local.settings.json を更新dotnet-isolated に変更
設定変更Azure アプリ設定を更新FUNCTIONS_WORKER_RUNTIME=dotnet-isolated
設定変更スタック設定を更新Windows / Linux に応じた .NET 設定
検証ローカル実行主要トリガーが動作
検証ステージングデプロイ実 Azure 環境で動作
検証ログ・メトリック確認例外、失敗率、遅延、ログ量を確認
本番スロットスワップ本番影響を最小化
本番後監視強化数日間はエラー率と実行回数を重点監視

失敗しやすいポイント

FUNCTIONS_WORKER_RUNTIME だけ変更してしまう

FUNCTIONS_WORKER_RUNTIME を dotnet-isolated に変えても、デプロイされているコードが in-process のままだとエラーになります。逆に、コードだけ isolated にして Azure 側設定が dotnet のままでも失敗します。コード、パッケージ、アプリ設定、スタック設定はセットで変更します。

Microsoft.Azure.WebJobs.* が残っている

in-process 時代のパッケージや using Microsoft.Azure.WebJobs; が残っていると、ビルドエラーや実行時エラーの原因になります。拡張パッケージは Microsoft.Azure.Functions.Worker.Extensions.* 系へ見直します。

Application Insights のログ量が変わる

移行後は host 側と worker 側でログ設定が分かれます。host.json だけを見ていると、アプリコード側のログ制御を見落とします。移行後は Application Insights の取り込み量、カテゴリ別ログ、サンプリング設定を確認します。

HTTP トリガーの型を安易に選ぶ

HttpRequestData / HttpResponseData に寄せるのか、ASP.NET Core integration で HttpRequest / IActionResult を使うのかは、保守性に影響します。既存コード、チームスキル、シリアライズ要件、.NET Framework 対応の有無で判断します。

Linux Consumption の将来制約を見落とす

.NET 10 や新しい言語バージョンを使う計画がある場合、Linux Consumption plan の制約を必ず確認します。必要に応じて Flex Consumption plan への移行も同じロードマップに入れます。

新規開発ではどう設計すべきか

これから C# Azure Functions を新規作成する場合は、次の方針が現実的です。

設計項目推奨方針
実行モデルisolated worker model
Functions runtime4.x
.NET バージョン長期運用なら LTS を優先
HTTP APIASP.NET Core integration を優先検討
依存関係注入Program.cs に集約
Azure SDKDI でクライアント登録
ログhost 側と worker 側を分けて設計
デプロイステージングスロットと CI/CD を前提
パフォーマンス.NET 8 以降では Placeholders / ReadyToRun を検討

特に、今から in-process モデルで新規開発する理由はほとんどありません。既存資産との一時的な整合性が必要な場合を除き、isolated worker model を標準としたテンプレートを社内に用意するのがよいでしょう。

既存環境の移行判断:すぐ移行すべきか、段階移行すべきか

すべての Function App を即時移行する必要はありません。ただし、移行計画はすぐに作るべきです。

状況推奨アクション
.NET 6 / .NET 7 で稼働中優先度高。サポート切れのため早急に移行計画を作成
.NET 8 in-process で稼働中2026年11月10日までに isolated worker model へ移行
.NET 8 isolated で稼働中パッケージ、ログ、パフォーマンス設定を確認
.NET 10 を検討中ホスティングプラン、Linux Consumption 制約を先に確認
Functions runtime 1.x2026年9月14日までに 4.x 移行を計画
Functions runtime 2.x / 3.xすでにサポート外のため、優先対応

移行期限だけを見ると 2026年11月まで余裕があるように見えます。しかし、業務アプリでは検証、承認、本番切り替え、監視、障害時ロールバックの期間が必要です。管理者は「期限までに着手」ではなく、「期限までに本番安定稼働」をゴールにするべきです。

まとめ:.NET Azure Functions は isolated worker model 前提で移行計画を作る

今回の「Guide for running C# Azure Functions in the isolated worker model」の更新は、機能追加というより、パフォーマンス最適化まわりの説明整理が中心です。しかし、運用担当者が見るべき本質は変わりません。C# Azure Functions の in-process モデルは 2026年11月10日にサポート終了予定であり、今後の .NET バージョン対応、依存関係管理、ログ設計、パフォーマンス最適化を考えると、isolated worker model への移行は避けて通れません。

まずは、現在の Function App を棚卸しし、FUNCTIONS_WORKER_RUNTIME、Functions runtime、ターゲット .NET、ホスティングプラン、利用トリガー、CI/CD、Application Insights 設定を確認してください。そのうえで、低リスクなアプリからステージングスロットを使って移行手順を固め、期限前に本番環境で安定稼働できる状態を目指すのが最も安全です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次