Skip to content

HTTP Error 500.30 - ASP.NET Core アプリの起動失敗

概要

ASP.NET Core アプリケーションをデプロイした際に「HTTP Error 500.30 - ASP.NET Core app failed to start」というエラーが発生する問題について解説します。このエラーはアプリケーションの起動に失敗したことを示しており、様々な原因が考えられます。

問題の特定方法

1. Windows イベントビューアーの確認

推奨方法

Windows イベントビューアーは最も確実なエラー情報の取得方法です。

  1. Windows 検索で「イベント ビューアー」を開く
  2. 「Windows ログ」 > 「アプリケーション」を選択
  3. 「エラー」レベルの警告を確認

2. 標準出力ログの有効化

web.config ファイルで標準出力ログを有効にします:

xml
<system.webServer>
  <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
  </handlers>
  <aspNetCore processPath="dotnet" 
              arguments=".\YourApp.dll" 
              stdoutLogEnabled="true" 
              stdoutLogFile=".\logs\stdout" />
</system.webServer>

3. Program.cs に例外処理を追加

アプリケーションのエントリーポイントで例外をキャッチします:

csharp
public static void Main(string[] args)
{
    try
    {
        CreateHostBuilder(args).Build().Run();
    }
    catch (Exception ex)
    {
        // ログに記録またはコンソールに出力
        Console.WriteLine($"起動エラー: {ex.Message}");
        throw;
    }
}

主な原因と解決策

1. 依存関係インジェクションの問題

よくある間違い

インターフェースを実装クラスとして登録する誤り:

csharp
// 誤り
services.AddScoped<IService, IService>();

// 正しい
services.AddScoped<IService, Service>();

設定の読み込みの問題:

csharp
// 従来の方法(問題が発生する場合あり)
builder.Services.AddSingleton(new EmailConfiguration(
    builder.Configuration["EmailConfiguration:Host"],
    // ... 他のパラメータ
));

// 推奨方法
builder.Services.Configure<EmailConfiguration>(
    builder.Configuration.GetSection("EmailConfiguration")
);
builder.Services.AddTransient<IEmailService, EmailService>();

2. ランタイムの不一致

ホスティングバンドルのバージョン確認:

bash
dotnet --info

出力されたホストバージョンとアプリケーションのターゲットフレームワークが一致していることを確認します。

3. ファイルパーミッションの問題

IIS_IUSRS ユーザーに以下のフォルダへのフルコントロール権限を付与:

  • App_Data
  • Logs
  • アプリケーションルートフォルダ

4. 32ビット/64ビットの不一致

IIS アプリケーションプール設定で「32 ビット アプリケーションを有効にする」を無効にします。

5. ポートとファイアウォールの設定

カスタムポートを使用している場合、ファイアウォールで該当ポートが開放されているか確認します。

6. Azure 特有の問題

Azure App Service で発生する場合のチェック項目:

  • データベースのファイアウォール設定(Azure サービスからのアクセスを許可)
  • Azure Key Vault のアクセス権限設定
  • 証明書の有効期限切れ

デプロイ設定の最適化

Visual Studio 発行プロファイル

xml
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <TargetFramework>net8.0</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <SelfContained>false</SelfContained>
  </PropertyGroup>
</Project>

推奨発行設定

設定項目推奨値説明
配置モードフレームワーク依存ターゲット環境に.NET runtimeがインストールされている場合
ターゲット ランタイムwin-x6464ビット環境向け
既存のファイルを削除✅ はい古いファイルによる競合を防ぐ

トラブルシューティングフロー

予防策

  1. ローカルテストの徹底: 開発環境では様々な設定をシミュレート
  2. 段階的デプロイ: 設定を少しずつ変更しながら問題を特定
  3. ログの活用: 常に詳細なログ出力を設定
  4. 権限の最小限化: 必要最小限の権限で動作するよう設計

まとめ

HTTP Error 500.30 は様々な原因で発生するため、系統的な調査が必要です。イベントビューアーでのエラー確認を第一歩とし、依存関係の注入、ファイル権限、ランタイムバージョンなどの主要な原因を順に排查していくことが効果的です。

Azure App Service を使用している場合は、「診断して解決」機能やアプリケーションログを活用することで、より効率的に問題を特定できます。