v-html 生の HTML のレンダリング
最終更新:2026-10-22
v-html 生の HTML のレンダリング
v-html は文字列を HTML として解析して要素に挿入します。リッチテキストの表示に使われます。
| グループ | ディレクティブ |
|---|---|
| 種類 | ディレクティブ |
| スコープ | テンプレート |
| Vue バージョン | 3.0+ |
| SSR 対応 | 対応 |
📝 構文
<div v-html="htmlContent"></div>
⚙️ 引数
| expression | HTML 文字列(自動的にエスケープされません) |
|---|
戻り値:ディレクティブ。戻り値なし
▶ 例
以下のコードを編集して結果を確認しましょう:
出力:
The page shows bold and italic text — the HTML string is parsed and rendered.
💡 ポイント
⚠️ 注意 v-html は信頼できるコンテンツにのみ使用してください。エスケープされないため、ユーザー入力をそのまま表示すると XSS 注入につながります。
⚠️ 注意 v-html の内容に v-bind などのディレクティブを含めることは絶対にできません。挿入されたテンプレートはコンパイルされず、ディレクティブは機能しません。
💡 ヒント プレーンテキストには v-text か {{ }} で十分です。本当に HTML 構造が必要な場合のみ v-html を使ってください。
🏷️ 関連ディレクティブ
💡 関連ケース
関連ケースは近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q v-html にはセキュリティリスクがありますか?
A はい。エスケープされないため、ユーザーが制御できるデータを表示すると XSS が発生します。信頼できるソース(自分で書いた内容、サニタイズ済みの HTML)にのみ使用してください。
Q v-html の中のディレクティブが機能しないのはなぜですか?
A 挿入された HTML はテンプレートコンパイラを経由しないため、v-bind などのディレクティブは認識されません。動的なテンプレートにはレンダー関数やコンポーネントを使ってください。
Q リッチテキストを安全に表示するには?
A v-html に渡す前に HTML をサニタイズします(例:DOMPurify)。書式表示が不要な場合は v-text を優先してください。