フッターコンテンツにスキップ
移行ガイド

C#でSpire.PDFからIronPDFへ移行する方法

Spire.PDFからIronPDFへの移行:完全なC#移行ガイド

Spire.PDFからIronPdfへの移行は、テキストを画像としてレンダリングするライブラリから、最新のChromiumレンダリングエンジンを使用して、選択可能で検索可能な真のテキストを生成するライブラリへとPDF生成ワークフローを変換します。このガイドでは、Spire.PDFの致命的なHTMLレンダリングの制限とフォント埋め込みの問題を解決する、完全でステップバイステップの移行パスを提供します。

なぜSpire.PDFからIronPDFへ移行するのか

スパイアを理解する.PDF

Spire.PDFは、.NET開発者がPDFドキュメントを効率的に扱えるように設計された、堅牢な商用PDFライブラリです。 Spire.PDFは、特にレガシーアプリケーションにおいて、その特異な機能によりプログラミングコミュニティでその名を知られており、その統合機能はE-iceblueツールセットの他のコンポーネントとシームレスに連携しています。

しかし、Spire.PDFには、特にHTMLからPDFへの変換や最新のWeb標準のサポートなど、実際の使用に影響するいくつかの根本的な問題があります。

重要な技術的問題

問題インパクトIronPDF ソリューション
画像としてレンダリングされたテキストPDFが検索できない、アクセスできない、テキストがコピーできない。リアルテキストレンダリング
インターネット・エクスプローラー依存性時代遅れのレンダリング、セキュリティリスク最新のChromiumエンジン
フォント埋め込みに失敗しましたドキュメントが他のシステムで間違って見える信頼性の高いフォント処理
大きなデプロイメントフットプリントメモリ使用量が多く、起動が遅い効率的なデプロイメント
限定的なCSSサポート最新のレイアウトが正しく表示されないCSS3をフルサポート

核となる問題:画像ベースのPDF

Spire.PDFの重大な欠点の1つは、HTMLドキュメント内のテキストを画像としてレンダリングする傾向があることです。 その結果、テキストを選択したり検索したりすることができないPDFができあがります。これは、検索機能や文書テキストのインタラクションが必要なアプリケーションにとっては重大な制限となります。

Spire.PDFのLoadFromHTML()メソッドを使用すると、テキストが実際のテキストではなくビットマップ画像としてレンダリングされることが多く、このような問題が発生します:

  • テキストは選択できません
  • テキストは検索できません
  • テキストはコピーできません
  • スクリーンリーダーでは読めません(アクセシビリティ違反)。
  • ファイルサイズは非常に大きくなります。
  • ズームするとピクセル化する

Spire.PDFとIronPDFの比較

フィーチャーSpire.PDFIronPDF
HTMLからPDFへのレンダリング画像としてレンダリングされたテキスト真のテキストレンダリング(選択および検索可能)
レンダリングエンジンInternet Explorerに依存するシステムもあります。Chromiumベース、最新のウェブ標準準拠
フォントの扱いフォント埋め込みに関する既知の問題信頼性の高い堅牢なフォント処理
CSS3のサポート制限的フル
フレックスボックス/グリッドサポートされていませんフルサポート
JavaScript(ジャバスクリプト制限的完全なES6
PDFアクセシビリティ悪い(画像ベース)優秀
APIデザイン複雑シンプルで直感的
展開フットプリント大規模適度
ライセンスについてフリーミアム/商用商用

2025年と2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFはSpire.PDFのHTMLからPDFへの変換における重要な問題を解決し、テキストを画像ではなく実際に選択可能なテキストとしてレンダリングすることで、PDFの検索性とアクセス性を確保します。


始める前に

前提条件

1..NET環境: .NET Framework 4.6.2+ または .NET Core 3.1+ / .NET 5/6/7/8/9+. 2.NuGetアクセス:NuGetパッケージをインストールする能力。 3.IronPDFライセンスironPdf.comからライセンスキーを取得してください。

NuGetパッケージの変更

# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
SHELL

ライセンス構成

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

完全な API リファレンス

名前空間の変更

// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

コア API マッピング

Spire.PDFIronPDFノート
new PdfDocument().new ChromePdfRenderer().HTMLレンダリング
pdf.LoadFromHTML()を使用してください。<コード>renderer.RenderHtmlAsPdf()</コードHTML変換
pdf.LoadFromFile()を使用してください。PdfDocument.FromFile()を使用してください。既存のPDFを読み込む
pdf.SaveToFile()を使用してください。<コード>pdf.SaveAs()</コードファイルに保存
<コード>pdf.Close()</コード不要dispose パターンの使用
pdf.Pages.Add().<コード>renderer.RenderHtmlAsPdf()</コードHTMLからページを作成
<コード>pdf.InsertPageRange()</コードPdfDocument.Merge()を使用してください。PDFのマージ
page.Canvas.DrawString()<コード>TextStamper</コード> + <コード>ApplyStamp()</コードテキストの追加
<コード>PdfFont</コードHTMLのCSSスタイリングフォント設定
<コード>PdfBrush</コードHTMLのCSSスタイリング色/塗りつぶし設定

コード移行の例

例1: HTMLからPDFへの変換

翻訳前 (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

この例は、HTMLレンダリングの基本的な違いを示しています。 Spire.PDFは、PdfHtmlLayoutFormatオブジェクトでLoadFromHTML()を使用し、多くの場合、テキストをビットマップ画像としてレンダリングします。 その結果、ユーザーがテキストを選択、コピー、検索できないPDFが出来上がりました。

IronPDFはChromePdfRendererRenderHtmlAsPdf()を使用し、完全に選択可能で、検索可能で、アクセス可能な真のテキストを生成します。 Close()呼び出しは必要ありません-IronPDFは自動クリーンアップのためにdisposeパターンを使用します。HTML to PDF documentation を参照してください。

例2: 複数のPDFをマージする

翻訳前 (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Spire.PDFでは、new PdfDocument() + LoadFromFile()で各ドキュメントを手動で読み込み、InsertPageRange()を使って挿入するページを指定し、最後に各ドキュメントでClose()を呼び出す必要があります。

IronPDFはよりシンプルなPdfDocument.FromFile()パターンと、複数のドキュメントを受け入れる静的なPdfDocument.Merge()メソッドを使用します。 Close()コールは不要です。 詳しくは、チュートリアルをご覧ください。

例3: PDFにテキストを追加する

翻訳前 (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Spire.PDFは、PdfFontPdfBrush、およびpage.Canvas.DrawString()によるキャンバスベースの描画モデルを使用し、PointFを使用して特定の座標にテキストを配置します。

IronPDFはTextFontSizeVerticalOffsetHorizontalOffsetのような直感的なプロパティを持つTextStamperオブジェクトを使用し、それをApplyStamp()で適用します。 このアプローチは、より宣言的で保守が容易です。


画像としてのテキスト問題

これが重要な理由

Spire.PDFが画像ベースのレンダリングを使用してHTMLをPDFに変換する場合、ドキュメントは本質的な機能を失います:

1.テキスト検索ができない:ユーザーは Ctrl+F でテキストを検索できません。 文書管理システムは、コンテンツにインデックスを付けることができません。

2.テキスト選択/コピーの禁止:引用、参照、またはデータをコピーしようとするユーザーは、テキストを選択できません。

3.アクセシビリティ違反:画像ベースのPDFは、WCAG 2.1コンプライアンス、セクション508コンプライアンス(米国政府)、ADA要件、スクリーンリーダー互換性に違反しています。

4.ファイルサイズが大きい: 同じ内容の比較では、Spire.PDF(画像ベース)はIronPDF(テキストベース)より最大16倍大きなファイルを生成します。

検出:あなたのPDFは画像ベースですか?

Spire.PDFで作成したドキュメントを開き、以下のテストをお試しください:

1.テキスト選択:テキストをクリックしてドラッグします。 何もハイライトがない場合 → IMAGE-BASED 2.Ctrl+F検索: ページ上の任意の単語を検索します。 該当するものがない"場合 → IMAGE-BASED 3.コピー/貼り付け:テキストを選択してメモ帳にコピーします。 何も貼り付けられない場合 → IMAGE-BASED


インターネット エクスプローラーの問題

Spire.PDFのレンダリングエンジンについて

Spire.PDFは、環境によってはHTMLレンダリングをInternet Explorer/Edge Legacyに依存しています。 IEは2022年に非推奨となり、モダンなCSSは機能せず、JavaScriptのサポートは限られており、レンダリングはシステム間で一貫性がありません。

スパイアで失敗するモダン CSS.PDF

<!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
<!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
HTML

IronPDFは最新のChromiumレンダリングを使用しているため、これらのCSS機能はすべて正しく動作します。


移行後の新機能

IronPdfに移行した後は、Spire.PDFでは提供できない機能を得ることができます:

選択可能で、検索可能なテキスト。

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

最新の CSS サポート

var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HTMLベースの透かし

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

移行チェックリスト

移行前

  • [ ] コードベース内のすべてのSpire.PDFの使用状況をインベントリ化する。
  • [既存のPDFのテキスト選択性のテスト(重大な問題の検出)
  • [ ] ドキュメントの LoadFromHTML() 呼び出し(これらは優先的に修正する必要があります。)
  • [ironpdf.comからIronPDFライセンスキーを入手してください。

コードの更新

  • [ ] Spire.PDF<//code> NuGetパッケージを削除する(無料版を使用している場合は<code>FreeSpire.PDFも削除する)。
  • [ ] IronPdf NuGetパッケージをインストールしてください。
  • [ ] 名前空間のインポートを更新する (using Spire.Pdf;using IronPdf;)
  • [ ] LoadFromHTML()RenderHtmlAsPdf()に置き換える (CRITICAL FIX)
  • [ ]new PdfDocument().+ LoadFromFile()PdfDocument.FromFile()を使用してください。に置き換えてください。
  • [ ] InsertPageRange()PdfDocument.Merge()に置き換えてください。
  • [ ] Canvas.DrawString() を<コード>TextStamper</コード> + <コード>ApplyStamp()</コードに置き換えてください。
  • [SaveToFile()SaveAs() に置き換えてください。
  • [ ] すべてのClose()呼び出しを削除する(IronPDFでは不要)
  • [アプリケーション起動時のライセンス初期化機能の追加

テスティング

  • [生成されたPDFでテキストが選択可能であることを確認してください。
  • [ ] CSSレンダリングの改善を確認する(Flexbox/Gridが動作するようになった)
  • [ファイルサイズが小さいことを確認してください。
  • [スクリーンリーダーによるアクセシビリティのテスト
  • [性能比較

結論

Spire.PDFは、レガシーアプリケーションやスイートベースの操作に凝り固まった開発者にとって適切な一連の機能を提供する一方で、テキストレンダリングにおける制限、旧式のレンダリングエンジンへの依存、フォント処理の問題は重要な考慮事項です。 IronPdfは最新のレンダリング技術と堅牢なテキスト処理によって優れたHTMLからPDFへの変換機能を示し、競争力のある選択肢として際立っています。

この移行における主な変更点は以下のとおりです: 1.テキストレンダリング:画像ベース(選択不可)→真のテキスト(選択可能、検索可能) 2.レンダリングエンジン:Internet Explorer依存 → Modern Chromium 3.CSSサポート:限定的 → 完全な CSS3 (Flexbox, Grid, CSS Variables) 4.HTML変換pdf.LoadFromHTML()renderer.RenderHtmlAsPdf(). 5.既存のPDFを読み込むnew PdfDocument() + LoadFromFile()PdfDocument.FromFile(). 6.PDFをマージするInsertPageRange()PdfDocument.Merge(). 7.テキストを追加するCanvas.DrawString() with PdfFont/PdfBrushTextStamper + ApplyStamp() 8.保存SaveToFile()SaveAs() です。 9.クリーンアップClose()必須 → 不要(disposeパターン) 10.ファイルサイズ:ラージ(画像ベース)→コンパクト(トゥルーPDF) 11.アクセシビリティ:悪い → 良い

PDF ライブラリを選択する際には、ドキュメントの忠実度、検索性、最新の Web との互換性などの要素を考慮し、手元のプロジェクトの具体的な要求に合わせて選択することが重要です。 これらのダイナミクスを理解することで、開発者は、ドキュメントの取り扱いとユーザーエクスペリエンスを最適化するための情報に基づいた意思決定を行うことができます。

IronPDFドキュメントチュートリアルAPIリファレンスを参照して、Spire.PDFへの移行を加速してください。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。