Skip to content

Markdown で JavaScript を使用する

Markdown は主にテキストをフォーマットするためのマークアップ言語ですが、JavaScript を使用して Markdown ドキュメントを強化し、インタラクティブ性と動的機能を追加できます。

制限を理解する

標準的な Markdown パーサーは JavaScript コードを実行しません。ただし、JavaScript を Markdown と統合するいくつかの方法があります:

  1. HTML Script タグ:HTML ブロックに JavaScript を直接含める
  2. Markdown プロセッサ:JavaScript 実行をサポートするプロセッサを使用
  3. 静的サイトジェネレータ:ビルド時の JavaScript 処理を活用
  4. クライアントサイドレンダリング:Markdown が HTML に変換された後に JavaScript を追加

基本的な JavaScript 統合

インラインスクリプトタグ

HTML script タグを使用して、Markdown に JavaScript を直接埋め込むことができます:

markdown
# インタラクティブなドキュメント

<script>
function greet() {
  alert('Markdown からこんにちは!');
}
</script>

<button onclick="greet()">クリックしてください</button>

外部スクリプト

外部 JavaScript ファイルを参照:

markdown
<script src="https://cdn.example.com/script.js"></script>

<div id="dynamic-content"></div>

一般的な使用例

1. インタラクティブフォーム

markdown
# お問い合わせフォーム

<form id="contactForm">
  <input type="text" id="name" placeholder="お名前">
  <input type="email" id="email" placeholder="メールアドレス">
  <button type="submit">送信</button>
</form>

<script>
document.getElementById('contactForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const name = document.getElementById('name').value;
  alert('ありがとうございます、' + name + 'さん!');
});
</script>

2. 動的コンテンツの読み込み

markdown
# 最新の投稿

<div id="posts-container"></div>

<script>
fetch('/api/posts')
  .then(response => response.json())
  .then(posts => {
    const container = document.getElementById('posts-container');
    posts.forEach(post => {
      container.innerHTML += `<h3>${post.title}</h3><p>${post.excerpt}</p>`;
    });
  });
</script>

3. データ可視化

markdown
# 売上グラフ

<canvas id="salesChart" width="400" height="200"></canvas>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('salesChart').getContext('2d');
new Chart(ctx, {
  type: 'line',
  data: {
    labels: ['1月', '2月', '3月', '4月'],
    datasets: [{
      label: '売上',
      data: [12, 19, 3, 5]
    }]
  }
});
</script>

セキュリティに関する注意事項

XSS 保護

Markdown で JavaScript を使用する際は、常にユーザー入力をサニタイズしてください:

javascript
// 悪い例:直接 HTML 注入
element.innerHTML = userInput;

// 良い例:textContent またはサニタイズを使用
element.textContent = userInput;
// または
element.innerHTML = DOMPurify.sanitize(userInput);

コンテンツセキュリティポリシー

CSP ヘッダーを実装してスクリプトの実行を制限:

html
<meta http-equiv="Content-Security-Policy" 
      content="script-src 'self' https://trusted-cdn.com;">

ベストプラクティス

  1. JavaScript を分離:可能な限り JavaScript を外部ファイルに保存
  2. プログレッシブエンハンスメント:JavaScript なしでもコンテンツが機能することを確認
  3. CDN を使用:人気のあるライブラリは CDN から読み込んでキャッシュを改善
  4. インラインスクリプトを最小化:インラインハンドラーの代わりにイベント委譲を使用
  5. 依存関係を文書化:必要な JavaScript ライブラリを明確に記載

結論

Markdown 自体は JavaScript を実行しませんが、これら2つの技術を効果的に組み合わせて、豊かでインタラクティブなドキュメントを作成できます。ユースケースに最適な方法を選択し、常にセキュリティとユーザーエクスペリエンスを優先してください。

その他のリソース

Build by www.markdownlang.com