移行ガイド C#でPDFreactorからIronPDFに移行する方法 カーティス・チャウ 公開日:2026年2月1日 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る PDFreactorからIronPDFに移行することで、.NETネイティブライブラリを通して同等のHTMLからPDFへの変換機能を提供しながら、Java依存とサーバーインフラを排除します。 このガイドでは、Javaベースのサーバーアーキテクチャを.NETアプリケーションにシームレスに統合するインプロセスライブラリに置き換える、完全でステップバイステップの移行パスを提供します。 なぜPDFreactorからIronPDFに移行するのか PDFreactorについて PDFreactorは、さまざまなプラットフォームに統合された強力なHTMLからPDFへの変換サーバーです。 商用ソリューションとして、PDFreactorは独自の技術を活用し、HTMLとCSSコンテンツを高品質のPDFドキュメントに変換します。 特筆すべき属性として、PDFreactorは幅広いCSSプロパティに対応しており、複雑なレイアウトレンダリングの有力な候補となります。 しかし、PDFreactorがJavaに依存しているため、.NET環境では、その非ネイティブの性質がデプロイと統合を複雑にする可能性があるという課題があります。 Javaに依存しているため、.NETアプリケーションに余分なオーバーヘッドが発生し、追加の統合作業が必要になることがよくあります。 Javaの依存性の問題 PDFreactorのアーキテクチャは、.NET環境においていくつかの課題を生み出します: Java ランタイムが必要:すべてのサーバーに JRE/JDK がインストールされている必要があります。 2.サーバー アーキテクチャ:追加のインフラストラクチャを必要とする個別のサービスとして実行されます。 サーバーベースのソリューションとして、PDFreactorはすべての変換にREST APIコールを必要とします。 3.複雑な展開:主に .NET エコシステムで Java の依存関係を管理すると、セットアップが複雑になり、メンテナンス コストが増加する可能性があります。 CI/CDパイプラインで管理する2つのランタイム(Java + .NET)。 4.プロセス間通信: REST API またはソケット通信により遅延が発生します。 すべてのPDF変換には、サーバーへのHTTPラウンドトリップが必要です。 5.個別のライセンス管理:ライセンスはアプリケーションではなくサーバー インスタンスにバインドされます。 Javaサービスインスタンスに関連付けられたサーバーごとのライセンス。 6.リソースの分離:プロセス メモリと CPU 管理を分離します。 監視、拡張、保守のための追加サーバー。 PDFreactorとIronPDFの比較 特徴/側面 PDFreactor IronPDF ネイティブ.NETライブラリ なし(Javaベース) はい ランタイム Java(外部サーバー) .NET ネイティブ(進行中) アーキテクチャ REST API サービス NuGetライブラリ デプロイメント Java + サーバー設定 単一のNuGetパッケージ 依存関係について JRE + HTTPクライアント 自己完結型 レイテンシーについて ネットワーク往復 直接メソッド呼び出し クロスプラットフォーム対応 可(Javaに依存) はい(バンドルされているChromium) CSSサポート CSS3、CSS Paged Mediaの高度なサポート 包括的なHTML5/CSS3のサポート 展開の複雑さ Javaのため、より複雑 シンプル、.NETと直接統合 PDF操作の特徴 基本(生成のみ) マージ、分割、編集、注釈を含む広範囲な作業 PDFreactorとは対照的に、IronPDFはネイティブの.NETライブラリであり、Javaのような外部依存なしに.NETプロジェクトにシームレスに統合できるように設計されています。 IronPdfはバンドルされているChromiumレンダリングエンジンを使用しており、わずか数行のコードでHTMLをPDFに変換することができます。 2025年と2026年まで.NET 10とC# 14の導入を計画しているチームにとって、IronPDFは包括的なPDFライフサイクル管理を提供しながらJavaサーバーの複雑さを解消する.NETネイティブソリューションを提供します。 始める前に 前提条件 .NET 環境: .NET Framework 4.6.2+ または .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGetアクセス: NuGetパッケージをインストールする機能 IronPDFライセンス: ironpdf.comからライセンスキーを取得します。 NuGetパッケージの変更 # RemovePDFreactorNuGet packages dotnet remove package PDFreactor.NET dotnet remove package PDFreactor.Native.Windows.x64 # StopPDFreactorserver service (if running locally) # Windows: net stop PDFreactor # Linux: sudo systemctl stop pdfreactor # Install IronPDF dotnet add package IronPdf # RemovePDFreactorNuGet packages dotnet remove package PDFreactor.NET dotnet remove package PDFreactor.Native.Windows.x64 # StopPDFreactorserver service (if running locally) # Windows: net stop PDFreactor # Linux: sudo systemctl stop pdfreactor # Install IronPDF dotnet add package IronPdf SHELL ライセンス構成 PDFreactor(サーバーベース):。 // License configured on server via config file or command line // Client connects to licensed server var pdfReactor = new PDFreactor("http://pdfreactor-server:9423"); // License configured on server via config file or command line // Client connects to licensed server var pdfReactor = new PDFreactor("http://pdfreactor-server:9423"); $vbLabelText $csharpLabel IronPDF(アプリケーションレベル):。 // One-time setup at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; // One-time setup at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; $vbLabelText $csharpLabel PDFreactorの使用法を特定する # FindPDFreactorusage grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" . # FindCSSページングメディアrules to convert grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" . # FindPDFreactorusage grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" . # FindCSSページングメディアrules to convert grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" . SHELL 完全な API リファレンス 名前空間の変更 // Before: PDFreactor using RealObjects.PDFreactor; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; // Before: PDFreactor using RealObjects.PDFreactor; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; $vbLabelText $csharpLabel コア クラス マッピング PDFreactor IronPDF ノート PDFreactor ChromePdfRenderer 主な変換クラス コンフィギュレーション ChromePdfRenderOptions PDF設定 結果 PdfDocument 出力文書 config.Document = html. renderer.RenderHtmlAsPdf(html). HTML入力 result.Document (byte[]) pdf.BinaryData 生バイト 構成プロパティのマッピング PDFreactorの構成 IronPDF レンダリングオプション ノート config.Document = html. renderer.RenderHtmlAsPdf(html). HTMLコンテンツ config.Document = url. renderer.RenderUrlAsPdf(url)のようにします。 URL変換 config.PageFormat = PageFormat.A4. RenderingOptions.PaperSize=PdfPaperSize.A4。 用紙サイズ config.PageOrientation RenderingOptions.PaperOrientation オリエンテーション config.PageMargins RenderingOptions.MarginTop/Bottom/Left/Right。 マージン (mm) config.EnableJavaScript = true. RenderingOptions.EnableJavaScript = true. JS実行 config.AddUserStyleSheet(css). HTMLにCSSを埋め込む CSSインジェクション config.Title pdf.MetaData.Title メタデータ config.Encryption pdf.SecuritySettings セキュリティ PDFreactorでは利用できない新機能 IronPDFの特徴 翻訳内容 PdfDocument.Merge()を使用してください。 複数のPDFをマージ pdf.ApplyWatermark()</code> 透かしの追加 pdf.ExtractAllText()を使用してください。 テキスト抽出 pdf.Form フォーム入力 pdf.Sign() デジタル署名 コード移行の例 例1: HTML文字列からPDFへの変換 翻訳前 (PDFreactor): // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDFreactorpdfReactor = new PDFreactor(); string html = "<html><body><h1>Hello World</h1></body></html>"; Configuration config = new Configuration(); config.Document = html; Result result = pdfReactor.Convert(config); File.WriteAllBytes("output.pdf", result.Document); } } // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDFreactorpdfReactor = new PDFreactor(); string html = "<html><body><h1>Hello World</h1></body></html>"; Configuration config = new Configuration(); config.Document = html; Result result = pdfReactor.Convert(config); File.WriteAllBytes("output.pdf", result.Document); } } $vbLabelText $csharpLabel 翻訳後(IronPDF):。 // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel 基本的な違いは、アーキテクチャ・パターンです。 PDFreactorは、PDFreactorインスタンス(Javaサーバーに接続する)、設定とHTMLコンテンツを保持するための別のConfigurationオブジェクトを作成し、Resultオブジェクトを返すConvert()を呼び出し、最後にFile.WriteAllBytes()を使用してresult.Documentバイトをファイルに書き込む必要があります。 IronPDFはこれを単純化し、ChromePdfRendererを作成し、RenderHtmlAsPdf()をHTML文字列で直接呼び出し、返されたPdfDocumentに組み込みのSaveAs()メソッドを使用します。 サーバー接続、設定オブジェクト、手動でのバイト処理はありません。 包括的な例については、HTML to PDF documentationを参照してください。 例2: URLからPDFへの変換 翻訳前 (PDFreactor): // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDFreactorpdfReactor = new PDFreactor(); Configuration config = new Configuration(); config.Document = "https://www.example.com"; Result result = pdfReactor.Convert(config); File.WriteAllBytes("webpage.pdf", result.Document); } } // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDFreactorpdfReactor = new PDFreactor(); Configuration config = new Configuration(); config.Document = "https://www.example.com"; Result result = pdfReactor.Convert(config); File.WriteAllBytes("webpage.pdf", result.Document); } } $vbLabelText $csharpLabel 翻訳後(IronPDF):。 // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel PDFreactorは、HTML文字列とURLの両方に同じconfig.Documentプロパティを使用し、自動的にタイプを決定します。 IronPDFは明示的なメソッドを提供します:HTML文字列のRenderHtmlAsPdf()とURLのRenderUrlAsPdf()です。 この明示的なアプローチにより、コードの明快さとインテリセンスのサポートが向上します。 詳しくは、チュートリアルをご覧ください。 例3:ページ番号を含むヘッダーとフッター 翻訳前 (PDFreactor): // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDFreactorpdfReactor = new PDFreactor(); string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; Configuration config = new Configuration(); config.Document = html; config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }"); Result result = pdfReactor.Convert(config); File.WriteAllBytes("document.pdf", result.Document); } } // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDFreactorpdfReactor = new PDFreactor(); string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; Configuration config = new Configuration(); config.Document = html; config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }"); Result result = pdfReactor.Convert(config); File.WriteAllBytes("document.pdf", result.Document); } } $vbLabelText $csharpLabel 翻訳後(IronPDF):。 // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Header Text" }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { CenterText = "Page {page}" }; string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("document.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Header Text" }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { CenterText = "Page {page}" }; string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("document.pdf"); } } $vbLabelText $csharpLabel この例は、最も重要な構文の違いを示しています。 PDFreactorは、@pageルール、@top-center/@bottom-centerリージョン、およびAddUserStyleSheet()を介して注入されたページ番号のためのcounter(page)を持つCSSページメディア構文を使用しています。 IronPDFはTextHeaderFooterオブジェクトをRenderingOptions.TextHeaderとRenderingOptions.TextFooterに割り当てた.NETネイティブAPIを使用しています。 ページ番号は、CSSのcounter(page)の代わりに{page}プレースホルダを使用します。 IronPDFはヘッダー/フッタークラスのためにIronPdf.Rendering名前空間をインポートする必要があることに注意してください。 重要な移行に関する注意事項 サーバーは必要ありません IronPdfはインプロセスで動作します。Javaサーバーを設定する必要はありません: // PDFreactor: Requires server connection var pdfReactor = new PDFreactor("http://localhost:9423"); // IronPDF: No server URL needed var renderer = new ChromePdfRenderer(); // PDFreactor: Requires server connection var pdfReactor = new PDFreactor("http://localhost:9423"); // IronPDF: No server URL needed var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel CSSページドメディアからIronPDF APIへ CSSの@pageルールをRenderingOptionsに置き換えてください: //PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } } //IronPDFequivalent: renderer.RenderingOptions.TextFooter = new TextHeaderFooter { CenterText = "Page {page}" }; //PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } } //IronPDFequivalent: renderer.RenderingOptions.TextFooter = new TextHeaderFooter { CenterText = "Page {page}" }; $vbLabelText $csharpLabel ページ番号プレースホルダーの構文 //PDFreactorCSS: counter(page) // IronPDF: {page} //PDFreactorCSS: counter(pages) // IronPDF: {total-pages} //PDFreactorCSS: counter(page) // IronPDF: {page} //PDFreactorCSS: counter(pages) // IronPDF: {total-pages} $vbLabelText $csharpLabel 結果処理の変更 Configuration + Resultのパターンが直接PdfDocumentになります: // PDFreactor: Configuration → Convert → Result → bytes Result result = pdfReactor.Convert(config); byte[] bytes = result.Document; File.WriteAllBytes("output.pdf", bytes); // IronPDF: Direct PdfDocument with built-in methods var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or: byte[] bytes = pdf.BinaryData; // PDFreactor: Configuration → Convert → Result → bytes Result result = pdfReactor.Convert(config); byte[] bytes = result.Document; File.WriteAllBytes("output.pdf", bytes); // IronPDF: Direct PdfDocument with built-in methods var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or: byte[] bytes = pdf.BinaryData; $vbLabelText $csharpLabel マージン単位の変更 PDFreactorは文字列を使用します; IronPDFはミリメートルを使用しています: // PDFreactor: config.PageMargins.Top = "1in" // IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm // PDFreactor: config.PageMargins.Top = "1in" // IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm $vbLabelText $csharpLabel 移行後の新機能 IronPDFに移行すると、PDFreactorでは提供できない機能が得られます: PDFマージ var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel ウォーターマーク pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); $vbLabelText $csharpLabel テキスト抽出 string text = pdf.ExtractAllText(); string text = pdf.ExtractAllText(); $vbLabelText $csharpLabel パスワード保護 pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; $vbLabelText $csharpLabel 機能比較の概要 フィーチャー PDFreactor IronPDF HTMLからPDFへ ✓ ✓ URLからPDFへ ✓ ✓ ヘッダー/フッター CSSページングメディア ネイティブAPI ページ設定 ✓ ✓ JavaScriptサポート ✓ ✓ .NET ネイティブ ✗ ✓ インプロセス ✗ ✓ PDFのマージ ✗ ✓ PDFの分割 ✗ ✓ 透かし ✗ ✓ テキスト抽出 ✗ ✓ フォーム入力 ✗ ✓ デジタル署名 ✗ ✓ 移行チェックリスト 移行前 コードベース内のすべてのPDFreactorの使用状況を一覧表示する 使用されているすべてのCSSページメディアルールを文書化する すべての構成設定(余白、ページサイズ、JavaScript)をメモします。 -IronPDFライセンス キーの保存を計画する (環境変数を推奨) まずはIronPDFの試用ライセンスでテストしてください パッケージの変更 PDFreactor.NET NuGet パッケージを削除する PDFreactor.Native.Windows.x64 NuGet パッケージを削除します IronPdf NuGet パッケージをインストールします: dotnet add package IronPdf コードの変更 名前空間のインポートを更新します ( using RealObjects.PDFreactor; → using IronPdf; ) ヘッダー/フッタークラスにusing IronPdf.Rendering;を追加します PDFreactorクラスをChromePdfRendererに置き換えます ConfigurationオブジェクトをRenderingOptionsプロパティに変換する config.Document = htmlをrenderer.RenderHtmlAsPdf(html)に置き換えます -config.Document = url.renderer.RenderUrlAsPdf(url)に置き換えます File.WriteAllBytes(path, result.Document)をpdf.SaveAs(path)に置き換えます。 CSS @pageルールをTextHeader / TextFooterオブジェクトに変換する ページ番号プレースホルダーを更新します( counter(page) → {page} ) マージン単位を文字列からミリメートルに変換する インフラストラクチャの移行 Javaランタイム要件を削除 PDFreactorサーバーの廃止 Docker/デプロイメント構成を更新する CI/CDパイプラインを更新する 移行後 PDF出力の品質が期待に沿うかテスト ヘッダー/フッターのレンダリングを確認する JavaScript が使用されている場合は実行を検証する 必要に応じて新しい機能(結合、透かし、セキュリティ)を追加します カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 公開日 2026年2月1日 C#でZetPDFからIronPDFに移行する方法 この完全なC#ガイドでZetPDFからIronPDFへの移行をマスターしてください。座標ベースのライブラリから最新のHTML-to-PDFソリューションに切り替えます。HTML変換、PDFのマージ、PDFSharpの依存関係の削除のコード例が含まれています。 詳しく読む 公開日 2026年2月1日 C#でScryber.CoreからIronPDFに移行する方法 この完全なC#ガイドでScryber.CoreからIronPDFへの移行をマスターしてください。カスタムXML/HTMLパースから最新のChromiumレンダラーに切り替えます。HTML変換、URLレンダリング、独自のバインディングを置き換えるコード例を含みます。 詳しく読む 公開日 2026年2月1日 C#でXFINIUM.PDFからIronPdfへ移行する方法 この完全なC#ガイドでXFINIUM.PDFからIronPDFへの移行をマスターしてください。座標ベースの手動ポジショニングから宣言的なHTML/CSSレンダリングに切り替えます。グラフィックスプリミティブの置き換えと自動レイアウトのコード例を含みます。 詳しく読む C#でPDFSharpからIronPDFに移行する方法C#でPDFPrinting.NETからIronPDF...
公開日 2026年2月1日 C#でZetPDFからIronPDFに移行する方法 この完全なC#ガイドでZetPDFからIronPDFへの移行をマスターしてください。座標ベースのライブラリから最新のHTML-to-PDFソリューションに切り替えます。HTML変換、PDFのマージ、PDFSharpの依存関係の削除のコード例が含まれています。 詳しく読む
公開日 2026年2月1日 C#でScryber.CoreからIronPDFに移行する方法 この完全なC#ガイドでScryber.CoreからIronPDFへの移行をマスターしてください。カスタムXML/HTMLパースから最新のChromiumレンダラーに切り替えます。HTML変換、URLレンダリング、独自のバインディングを置き換えるコード例を含みます。 詳しく読む
公開日 2026年2月1日 C#でXFINIUM.PDFからIronPdfへ移行する方法 この完全なC#ガイドでXFINIUM.PDFからIronPDFへの移行をマスターしてください。座標ベースの手動ポジショニングから宣言的なHTML/CSSレンダリングに切り替えます。グラフィックスプリミティブの置き換えと自動レイアウトのコード例を含みます。 詳しく読む