English version: README.md
カスタムMarkdownアセットタイプとライブプレビューエディタを追加するUnreal Engine 5.5以降用プラグイン。
- カスタムMarkdownアセット —
UMarkdownAssetは生のMarkdownテキストをファーストクラスのUObjectとして保存します。 - ライブHTMLプレビュー — 左側にテキストエディタ、右側にリアルタイムのHTMLプレビューを備えたデュアルペインエディタ(スムーズな編集のため、0.3秒のデバウンス処理により更新されます)。
- md4c統合 — 組み込まれたmd4c Cライブラリを利用した高速なMarkdownからHTMLへの変換を実現しました。
- ダークテーマ — 快適に読めるように暗い背景でスタイリングされたHTML出力。
- コンテンツブラウザの統合 — コンテキストメニューから直接新しいMarkdownアセットを作成できます。「MD」ラベルとコンテンツの最初の数行を表示するカスタムサムネイルプレビュー付きです。
- インポート / エクスポート —
.md/.markdownファイルをコンテンツブラウザにドラッグ&ドロップしてインポート、ソースファイルからのリインポート、および.mdファイルへのエクスポートに対応しています。 - Markitdown 連携 — Microsoft の markitdown CLI を経由して
.pdf/.docx/.pptx/.html/.htmファイルをコンテンツブラウザに直接インポートできます。Reimport は保存された元ファイルパスに対して再変換を実行します。Tools > Markdown > Batch Convert to Markdown... からファイル選択ダイアログを開いて複数のUMarkdownAssetをまとめて作成でき、進捗ダイアログはキャンセル可能です。UMarkitdownBlueprintLibraryを通じて Editor Utility Widget やエディタスクリプトから変換ヘルパーを呼び出せます。 - GitHub Flavored Markdown —
MD_DIALECT_GITHUBフラグにより、テーブル、タスクリスト、取り消し線などの GFM 拡張構文をサポートしました。 - Wikilink —
[[アセット名]]と記述するだけでアセット間リンクを作成できます。プレビュー内のリンクをクリックすると、対象のMarkdownアセットが新しいタブで開きます。存在しないアセットへのリンクは赤色で表示されます。 - アセット・クラスリンク — 標準Markdown構文
[ラベル](/Game/Path/To/Asset)でContent Browserのアセット(Blueprintを含む)、[ラベル](class://クラス名)でC++またはBlueprintクラスへのリンクを記述できます。クリックすると対応するアセットエディタが開き、C++クラスの場合はIDEでソースファイルが開きます。解決できないリンクは赤色で表示されます。 - Blueprint サポート — Blueprint から
RawMarkdownTextの読み書きとGetParsedHTML()、GetRawMarkdownText()、GetPlainText()の呼び出しが可能です。 - ツールバーとキーボードショートカット — 一般的なMarkdown操作のためのキーボードショートカットを備えた組み込みのフォーマットツールバーを用意しています。
- 元に戻す / やり直し — Unreal Editorのトランザクションシステムと統合された完全なUndo/Redoサポート(Ctrl+Z / Ctrl+Y)
- セキュリティ — ユーザー提供のMarkdownレンダリング時のXSSを防止するため、生のHTMLブロックおよびインラインHTMLはデフォルトで無効化しています。また、プレビューブラウザのナビゲーションはホワイトリスト方式を採用しており、
data:・about:・mdasset://・ueasset://・class://・http(s)://のみを許可し、javascript:やfile:などの未知スキームをブロックすることで、信頼できないMarkdownによるスクリプト実行やローカルファイルアクセスを防いでいます。さらに、プレビューページにはContent-Security-Policy(default-src 'none'; style-src 'unsafe-inline'; img-src data:)を注入し、外部ネットワークへのリクエスト(外部画像・fetch/XHR・フレーム等)をブロックすることで、IP追跡やローカルサービスへのSSRFを防止しています。外部http(s)://リンクをクリックした際は必ず確認ダイアログで完全なURLを表示してからシステムブラウザで開くため、細工されたMarkdownアセットによるフィッシングを軽減します。 - ローカライズ — エディタUIは英語と日本語に対応しています。
- ニバイト文字対応 — 日本語などのニバイト文字を含むMarkdownテキストを正しく処理・表示できます。
| コマンド | ショートカット |
|---|---|
| 太字 | Ctrl+B |
| 斜体 | Ctrl+I |
| 取り消し線 | Ctrl+Shift+X |
| コードブロック | Ctrl+Shift+C |
| 見出し 1 | Ctrl+1 |
| 見出し 2 | Ctrl+2 |
| 見出し 3 | Ctrl+3 |
| 箇条書き | Ctrl+Shift+U |
| 番号付きリスト | Ctrl+Shift+O |
| 引用ブロック | Ctrl+Shift+Q |
| テーブル挿入 | — |
| 水平線 | — |
- Unreal Engine 5.5 以降
- C++プロジェクト (プラグインにネイティブモジュールが含まれているため)
WebBrowserWidgetプラグイン (依存関係として自動的に有効になります)- オプション (Markitdown 使用時のみ): Python 3.10 以降 +
markitdownパッケージ (pip install "markitdown[all]")、またはuvがPATH上にあること。[all]エクストラは.pdf/.docx/.pptx変換に必要なフォーマット別依存を導入します。素のpip install markitdownではこれらのフォーマットで依存不足エラーになる場合があります。.pdf/.docx/.pptx/.html等のインポートでのみ必要で、.md中心のワークフローでは不要です。
Plugins/MarkdownEditorディレクトリをプロジェクトのPlugins/フォルダにクローンまたはコピーします。- プロジェクトファイルを再生成してビルドします。
- エディタ起動時にプラグインが自動的に読み込まれます。
クイックスタート: ステップバイステップのガイドは QUICKSTART.ja.md をご覧ください。
- コンテンツブラウザで右クリックし、Markdown > Markdown Text を選択して新しいアセットを作成します。
- アセットをダブルクリックしてMarkdownエディタを開きます。
- 左側のペインにMarkdownを記述すると、右側のペインでHTMLプレビューがリアルタイムに更新されます。
- インポート:
.mdまたは.markdownファイルをコンテンツブラウザにドラッグするとMarkdownアセットが作成されます。 - リインポート: インポートしたアセットを右クリックし、Reimport を選択すると元のソースファイルから再読み込みできます。
- エクスポート: Markdownアセットを右クリックし、Asset Actions > Export を選択すると
.mdファイルとして保存できます。
Markdown 以外のソースファイルは markitdown CLI を経由して取り込めます。変換結果が新規 UMarkdownAsset の本文になります。
- 設定: Project Settings > Plugins > Markitdown で実行モードを選択します:
uvx(デフォルト) —uvx markitdown ...を実行。uvがPATH上にある必要があります。フォーマット別エクストラを導入するには Extra Arguments を設定するか、uvx --from "markitdown[all]" markitdownのようなカスタムコマンドを使用してくださいSystem Python—python -m markitdown ...を実行。PATHに無い場合は Python Executable Path を指定。事前にフォーマット別エクストラ付きでインストールしてください:pip install "markitdown[all]"Custom— 任意の実行ファイルパスを Custom Command で指定
- 単一ファイル:
.pdf/.docx/.pptx/.html/.htmをコンテンツブラウザにドラッグ。markitdown 実行中は進捗ダイアログが表示され、ソースパスが保存されるので Reimport で再変換できます。 - 一括変換: Tools > Markdown > Batch Convert to Markdown... からファイルを複数選択して
/Game/Markdown/配下(または Blueprint ヘルパーに渡したパス)に一括生成。進捗ダイアログはキャンセル可能です。 - Blueprint / EUW:
UMarkitdownBlueprintLibraryがPromptForSourceFiles/ConvertFileToMarkdownAsset/ConvertFilesToMarkdownAssets/RunBatchConvertWizardを公開しているので、独自の Editor Utility Widget に組み込めます。
Markdownアセットは他のMarkdownノート、Content Browserアセット、Blueprint、C++クラスへクロスリンクできます。ライブプレビューでリンクをクリックすると対象が開きます:
| 構文 | 対象 | 開かれるもの |
|---|---|---|
[[ノート名]] |
他の UMarkdownAsset |
Markdownエディタタブ |
[ラベル](/Game/Path/To/Asset) |
Content Browserの任意のアセット | アセットエディタ |
[ラベル](/Engine/BasicShapes/Cube) |
Engine同梱アセット | アセットエディタ |
[ラベル](class://クラス名) |
ネイティブC++クラス | IDEのソースファイル(.cpp 優先、.h フォールバック) |
[ラベル](class://BP_MyActor) |
Blueprintクラス | Blueprintエディタ |
[ラベル](https://...) |
外部URL | システムブラウザ |
Unrealアセットリンクとして認識されるパスルート: /Game/, /Engine/, /Plugins/, /Script/。クラス名はUHTのリフレクション名と照合されるため、プレフィックス付き (AActor) と除去済み (Actor) の両形式が正しく解決されます。解決できない対象は赤色で表示されます。
UMarkdownAsset は以下の Blueprint から呼び出し可能な関数を公開しています:
| ノード | 戻り値の型 | 説明 |
|---|---|---|
GetParsedHTML |
FString |
md4c を使用して Markdown テキストを HTML 文字列に変換します |
GetRawMarkdownText |
FString |
生の Markdown テキストをそのまま返します |
GetPlainText |
FString |
すべての Markdown 記号を除去したテキストを返します |
- GetPlainText は、Markdown / HTML の描画ができない UMG Widget や 3D テキストで Markdown コンテンツを表示する場合に便利です。
- GetRawMarkdownText は、ソースの Markdown をそのまま返します。将来の拡張(カスタムレンダリングパイプラインなど)を想定しています。
UMarkitdownBlueprintLibrary (エディタ専用) は Editor Utility Widget やエディタスクリプトから呼び出せる一括変換ヘルパーを提供します:
| ノード | 戻り値の型 | 説明 |
|---|---|---|
PromptForSourceFiles |
TArray<FString> |
markitdown 対応形式でフィルタした OS ファイルピッカーを開きます |
ConvertFileToMarkdownAsset |
UMarkdownAsset* |
単一ファイルを同期変換し、指定パッケージパス配下に新規アセットを作成します |
ConvertFilesToMarkdownAssets |
TArray<UMarkdownAsset*> |
複数ファイルをキャンセル可能な進捗ダイアログ付きで一括変換します |
RunBatchConvertWizard |
void |
ファイル選択 → バッチ変換 → 完了通知までを一括実行するウィザード |
Plugins/MarkdownEditor/
├── Source/
│ ├── MarkdownAsset/ # ランタイムモジュール
│ │ ├── Public/Private/ # UMarkdownAssetクラスとmd4cラッパー
│ │ └── ThirdParty/md4c/ # 組み込みのmd4cパーサーライブラリ
│ └── MarkdownAssetEditor/ # エディタモジュール
│ └── Public/Private/ # アセットファクトリ、アクション、エディタツールキット
└── MarkdownEditor.uplugin
| モジュール | ロードフェーズ | 目的 |
|---|---|---|
MarkdownAsset |
Runtime | コアアセットクラスとMarkdownからHTMLへの変換 |
MarkdownAssetEditor |
Editor | ライブプレビューを備えたカスタムアセットエディタUI |
- シンタックスハイライト — テキストエディタ内でMarkdown構文をカラーハイライト表示
- 検索と置換 — エディタ内テキスト検索・置換機能(Ctrl+F / Ctrl+H)
- テーマ切り替え — ライトテーマの追加とテーマ選択機能
- Mermaid図表サポート — Mermaidによるフローチャート・シーケンス図などの描画
- 画像プレビュー — Markdown内で参照されている画像をHTMLプレビューに表示
- PDF / HTMLエクスポート — MarkdownアセットをPDFまたはスタンドアロンHTMLファイルとしてエクスポート
- マルチプラットフォーム対応 — macOSおよびLinuxへの対応
- UMG Markdownウィジェット — ゲーム内UIでMarkdownを直接レンダリングするUMGウィジェット
Q. このプラグインはパッケージ化されたゲームで動作しますか?
A. はい。Markdownエディタとライブプレビューはエディタ専用の機能ですが、UMarkdownAsset とそのBlueprintから呼び出し可能な関数(GetParsedHTML など)はランタイムモジュールの一部であり、パッケージ化されたビルドでも問題なく動作します。
Q. Markdownの解析にインターネット接続は必要ですか? A. いいえ。プラグインはモジュールに静的リンクされた軽量な md4c Cライブラリを使用しています。すべてのMarkdownからHTMLへの変換はローカルで即座に行われます。
Q. ゲームのUIでMarkdownコンテンツを表示するにはどうすればよいですか? A. いくつかの方法があります:
GetParsedHTMLBlueprintノードを使用し、その結果を WebBrowser UMG ウィジェットに渡すことで、完全にスタイリングされたテキストを表示できます。GetPlainTextノードを使用して、すべてのMarkdownフォーマットを除去し、標準の UMG Text Block に表示できます。
Q. VSCodeなどの外部エディタで .md ファイルを編集できますか?
A. はい。任意の .md または .markdown ファイルをコンテンツブラウザにインポートできます。外部で元のファイルを編集した場合は、Unreal Engineでアセットを右クリックし、Reimport を選択するだけで更新できます。
Q. WebBrowserWidget プラグインは必須ですか? A. はい。カスタムエディタでライブHTMLプレビューを描画するには、エンジン組み込みの WebBrowserWidget プラグインが必要です。このプラグインが自動的に有効化します。
このプロジェクトは MIT License の下でライセンスされています。





