IRONSOFTWAREHOME
開発者向けアップデート

Hangfire .NET Core (開発者向けの仕組み)

Jacob Mellor、Ironチームの最高技術責任者(CTO)
Jacob Mellor
Updated: 2026年4月21日

現代のアプリケーション開発では、大規模なワークロードを処理するためにバックグラウンドタスクを処理することがよく必要です。 そのようなシナリオでは、複数のジョブを実行できるバックグラウンドジョブハンドラーが必要です。 C# .NET Core アプリケーション向けのバックグラウンドジョブハンドラーの1つに Hangfire があります。このブログでは、Hangfire バックグラウンドジョブの管理方法と、IronPDF for PDF Generation のような他のパッケージと組み合わせてバックグラウンドで PDF ドキュメントを生成する方法について学びます。

Hangfire は、ASP.NET Core または .NET Core 6 Web API アプリケーションでバックグラウンド処理を実装するのを簡単にし、バックグラウンドジョブの管理と実行に信頼性が高く柔軟なフレームワークを提供します。 Hangfire は NuGet パッケージとして利用可能で、以下のように .NET CLI を使用してインストールできます:

dotnet add package Hangfire --version 1.8.6

.NET Core Web API での実装

Hangfire について学ぶために、簡単な .NET Core API アプリケーションを作成し、CLI を使用して Hangfire をインストールしましょう。

dotnet new webapi -n HangfireDemo
cd HangfireDemo
dotnet build
dotnet add package Hangfire --version 1.8.6
dotnet build
SHELL

ここでは .NET CLI を使用してシンプルな天気予報 REST API を作成します。 .NET Core Web API プロジェクト HangfireDemo を作成し、API エンドポイントを実行します。 2行目で、新しく作成したフォルダー "HangfireDemo" に移動し、プロジェクトをビルドします。 次に、プロジェクトに Hangfire NuGet パッケージを追加し、再度ビルドします。 その後、任意のエディタ(Visual Studio 2022 や JetBrains Rider など)でプロジェクトを開くことができます。 この時点でプロジェクトを実行すると、Swagger が以下のように表示されます。

Hangfire .NET Core (開発者向けの動作方法): 図1 - Swagger

ここでは、日付、概要、気温を返す天気 GET API を見ることができます。

Hangfire .NET Core (開発者向けの動作方法): 図2 - 天気情報取得API

それでは、Hangfire バックグラウンドジョブプロセッサを追加しましょう。 Visual Studio でプロジェクトを開きます。

Hangfire ジョブプロセッサを追加

通常、アプリケーションのStartup.csファイルでHangfireを設定します。ジョブストレージの設定とHangfireサーバーの初期化を含みます。

// Startup.cs
using Hangfire;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Hangfire services and use SQL Server as storage option
        services.AddHangfire(config => config.UseSqlServerStorage("your_connection_string"));
        services.AddHangfireServer();
    }
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // Use Hangfire Server and Dashboard for monitoring and managing jobs
        app.UseHangfireServer();
        app.UseHangfireDashboard();
        // Your other configuration settings
    }
}

ConfigureServices メソッドは、Hangfireの新しく作成されたジョブを保存するストレージを追加するために使用されます。 ここでは、SQL Server データベースが使用されています。 SQL Server 接続文字列は "your_connection_string" に置き換える必要があります。 Hangfire.InMemory を使用してインメモリストレージとしても利用できます。

dotnet add package Hangfire.InMemory --version 0.6.0

そして、次のように置き換えます:

services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });

バックグラウンドジョブを作成

バックグラウンドジョブとして実行したいメソッドを定義します。 これらのメソッドは、引数のないコンストラクタを持つクラスのスタティックメソッドまたはインスタンスメソッドである必要があります。 ジョブは再帰ジョブとして実行することも、複数のジョブを同時に実行することもできます。

public class MyBackgroundJob
{
    public void ProcessJob()
    {
        // Background job logic, can be a recurring job or multiple jobs
        Console.WriteLine("Background job is running...");
    }
}

ジョブをキューに入れる

Hangfire API を使用してバックグラウンドジョブをキューに入れます。 バックグラウンドジョブを特定の時間に、遅延後に、または定期的に実行するようにスケジュールできます。

// Enqueue a job to run immediately
BackgroundJob.Enqueue<MyBackgroundJob>(x => x.ProcessJob());

// Schedule a job to run after a 5-minute delay
BackgroundJob.Schedule<MyBackgroundJob>(x => x.ProcessJob(), TimeSpan.FromMinutes(5));

// Schedule a recurring job using a job ID
RecurringJob.AddOrUpdate<MyBackgroundJob>("jobId", x => x.ProcessJob(), Cron.Daily);

Hangfire ダッシュボードとサーバー

リアルタイムのジョブ監視のために、Configure メソッドで Hangfire ダッシュボードとサーバーを追加できます。

// Run Hangfire server and dashboard
app.UseHangfireServer();
app.UseHangfireDashboard();

サーバーはConfigureServicesに追加することもできます。

services.AddHangfireServer();

忘れっぽいジョブ

// Fire and forget jobs are executed only once and almost immediately after creation.
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!")); // Job ID for fire and forget job

定期的なジョブ

// Recurring jobs fire many times based on a specified CRON schedule.
RecurringJob.AddOrUpdate("myrecurringjob", () => Console.WriteLine("Recurring!"), Cron.Daily);

遅延ジョブ

// Delayed jobs are executed only once but after a specified interval.
var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"), TimeSpan.FromDays(7));

継続

// Continuation jobs are executed once their parent jobs have completed.
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine("Continuation!"));

バッチジョブ

// Batch is a group of background jobs created atomically and considered as a single entity.
var batchId = BatchJob.StartNew(x =>
{
    x.Enqueue(() => Console.WriteLine("Job 1"));
    x.Enqueue(() => Console.WriteLine("Job 2"));
});

バッチ継続ジョブ

// Batch continuation is fired when all background jobs in a parent batch are finished.
BatchJob.ContinueBatchWith(batchId, x =>
{
    x.Enqueue(() => Console.WriteLine("Last Job"));
});

ダッシュボード

Hangfire ダッシュボードでは、バックグラウンドジョブのすべての情報を見つけることができます。 これは OWIN ミドルウェアとして記述されており(OWIN に詳しくない場合でも心配ありません)、ASP.NET、ASP.NET MVC、Nancy、ServiceStack アプリケーションに接続することができ、OWIN Self-Host 機能を使用して、コンソールアプリケーションまたは Windows サービス内でダッシュボードをホストすることができます。

ダッシュボードが有効になっている場合、/hangfire/ エクステンションで利用可能です。 このダッシュボードでは、バックグラウンドで実行されているジョブを管理したり、バックグラウンドジョブをスケジュールしたり、頻繁に忘れてしまうジョブを管理したりできます。 ジョブはジョブIDを使用して識別できます。

ライブ処理

Hangfire .NET Core (開発者向けの動作方法): 図3 - ジョブのライブ処理

成功したジョブ

成功したジョブを以下に表示します。

Hangfire .NET Core (開発者向けの動作方法): 図4 - 完了したジョブ

スケジュールされたジョブ

Hangfire .NET Core (開発者向けの動作方法): 図5 - スケジュールされたジョブ

アプリケーションが実行すると、Hangfire は設定された設定に基づいてバックグラウンドジョブの処理を行います。

Hangfire のより高度な構成オプションと機能については、Hangfire ドキュメント を確認し、GitHub Hangfire デモ から完全なコードを見つけることができます。

IronPDFの紹介

IronPDF .NET 向け PDF Generation は、Iron Software の PDF ライブラリNuGet パッケージであり、PDF ドキュメントの読み取りと生成を支援します。 スタイル情報を含むフォーマットされたドキュメントを簡単にPDFに変換できる。 IronPDF は HTML コンテンツから簡単に PDF を生成できます。 URL から HTML をダウンロードし、PDF を生成することができます。

IronPDF の主な魅力は、レイアウトとスタイルを保持する HTML から PDF への変換 機能です。 ウェブコンテンツから PDF を作成でき、レポート、請求書、ドキュメントに最適です。 この機能は、HTML ファイル、URL、および HTML 文字列を PDF に変換することをサポートします。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

IronPDFの使い方

IronPDFライブラリをインストールする

NuGet パッケージマネージャーを使用してインストール

NuGet パッケージマネージャーを使用して Hangfire .NET プロジェクトに IronPDF を統合するには、以下の手順に従います:

  1. Visual Studio を開き、ソリューションエクスプローラーでプロジェクトを右クリックします。
  2. コンテキストメニューから"NuGet パッケージの管理..."を選択します。
  3. [参照]タブに移動して、IronPDFを検索します。
  4. 検索結果から IronPDF ライブラリを選択し、"インストール"ボタンをクリックします。
  5. ライセンス契約のプロンプトを承諾します。

このメソッドを使用して、指定した場所にダウンロードして保存します。

PM > Install-Package IronPdf

これにより、IronPDFをプロジェクトに取得してインストールします。

NuGet ウェブサイトを使ってインストール

機能、互換性、追加のダウンロードオプションを含むIronPDFの詳細な概要については、NuGetウェブサイトのIronPDFページを訪問してください。

DLLを介してインストール

また、DLL ファイルを使用して IronPDF をプロジェクトに直接組み込むことができます。この IronPDF ダイレクトダウンロード から DLL を含む ZIP ファイルをダウンロードし、解凍してプロジェクトに DLL を含めます。 それを解凍し、プロジェクトにDLLを含めます。

今、アプリケーションを修正して、ウェブサイトをPDFファイルとしてダウンロードするバックグラウンド処理ジョブを追加しましょう。

namespace HangfireDemo.Core;

public class PdfGenerationJob
{
    public void Start(string website)
    {
        // Create a PDF from any existing web page
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderUrlAsPdf(website);
        var filePath = AppContext.BaseDirectory + "result.pdf";
        pdf.SaveAs(filePath);
    }
}

IronPDFには、URLからウェブサイトをダウンロードし、PDF文書として保存するための組み込みメソッドがあります。 このメソッドを使用して、指定された場所にダウンロードして保存します。 このバックグラウンドジョブは、複数のウェブサイトURLを受け取り、それらをPDFとして保存するように修正できます。

ここでは、バックグラウンドジョブを開始するためにウェブサイト URL を取得し、ダウンロードを開始する API と、結果の PDF をダウンロードするもう1つの API を作成しました。

using Hangfire;
using HangfireDemo.Core;
using Microsoft.AspNetCore.Mvc;

namespace HangfireDemo.Controllers;

[ApiController]
[Route("[controller]")]
public class PdfGeneratorController : ControllerBase
{
    [HttpGet("request", Name = "Start PDF Generation")]
    public void Start([FromQuery] string websiteUrl)
    {
        BackgroundJob.Enqueue<PdfGenerationJob>(x => x.Start(websiteUrl));
    }

    [HttpGet("result", Name = "Download PDF Generation")]
    public IActionResult WebResult()
    {
        var filePath = AppContext.BaseDirectory + "result.pdf";
        var stream = new FileStream(filePath, FileMode.Open);
        return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = "website.pdf" };
    }
}

ここでは、1つはバックグラウンドジョブを開始し、ダウンロードを開始するためのウェブサイトURLを受け取るAPI、もう1つは結果のPDFをダウンロードするAPIを作成しました。 Hangfire .NET Core (開発者向けの動作方法): 図 7 - PDFジェネレーター API

Hangfire .NET Core (開発者向けの動作方法): 図7 - PDFGenerator API

そして結果はこのようになります:

Hangfire .NET Core (開発者向けの動作方法): 図8 - 出力

ライセンス (無料トライアル利用可能)

開発者は IronPDF フリートライアル に登録することでトライアルライセンスを入手できます。 トライアルライセンスは、IronPDF無料トライアルに登録することで開発者に提供されます。 メールアドレスを提供して、フリートライアルに登録できます。 メールIDを提供して、無料トライアルに登録できます。

結論

HangfireとIronPDFは共に、バックグラウンドでPDFを生成およびダウンロードするための優れた組み合わせです。 Hangfireは長時間実行されるタスクの効率的な処理を可能にし、IronPDFはPDF生成のための柔軟で使いやすいソリューションを提供します。 IronPDFについて詳しく学ぶには、IronPDFドキュメントを訪れてください。

また、ソフトウェア製品スイートから、コーディングスキルを向上させ、最新のアプリケーション要件を満たすことができる他のツールも紹介します。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

bullet_checkedクレジットカードやアカウントの作成は不要です。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。