個人用途「Python で Markdown を HTML に変換する」スクリプト
公開日: 2025-11-30
パソコン環境
- X230(Lenovo ThinkPad、Ivy Bridge: 第3世代)
- LinuxMint 21.3(Xfce)
- Python 3.10.12
- Markdown 3.7
pip がインストールされていない場合は、次のコマンドでインストールできます:
sudo apt update
sudo apt install python3-pip
markdown パッケージのインストール
pip3 install markdown
LinuxMint 22.2(Xfce) だと、クリーンインストール後には、すぐに使える。
md_to_html.py
Python スクリプトのコード
import os
import re
import markdown
input_dir = "content"
output_dir = "output"
template_file = "template.txt"
os.makedirs(output_dir, exist_ok=True)
# 拡張機能を設定
extensions = ["extra", "codehilite"]
for filename in os.listdir(input_dir):
if filename.endswith(".md"):
with open(os.path.join(input_dir, filename), "r", encoding="utf-8") as f:
md_text = f.read()
# 最初の行をタイトルとして抽出(# で始まる最初の行)
title_match = re.match(r"^#\s*(.+)", md_text)
title = title_match.group(1) if title_match else filename.replace(".md", "") # 見つからなければファイル名を使用
# タイトル行を削除して、残りの部分をコンテンツとする
content_md = re.sub(r"^# .+\n+", "", md_text)
# MarkdownをHTMLに変換
html_body = markdown.markdown(content_md, extensions=extensions)
# テンプレートを読み込む
with open(template_file, "r", encoding="utf-8") as f:
template = f.read()
# HTML出力をテンプレートに埋め込む
html_output = template.format(title=title, content=html_body)
# HTMLファイルとして保存
with open(os.path.join(output_dir, filename.replace(".md", ".html")), "w", encoding="utf-8") as f:
f.write(html_output)
print("Markdownファイルの変換処理が完了しました!")
スクリプトの実行:
python3 md_to_html.py
ディレクトリ構成
プロジェクトの内容
contentのフォルダ と mdファイル は必須。
/project/
├── md_to_html.py # 1 Pythonスクリプトファイル
├── content/ # 2. 変換元のMarkdown
│ ├── post1.md
│ └── post2.md
├── template.txt # 3. HTMLテンプレート
│
└── output/ # 4. 変換後のHTMLが格納される (実行時に作成)
├── post1.html
└── post2.html
template.txt(テンプレート)
編集がしやすいので、あえて「テキストファイル」にしています。
シンプルな用途に相性が良いので、ベースは「new.css」です。
HTMLテンプレート例
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{title}</title>
<link rel="stylesheet" href="https://fonts.xz.style/serve/inter.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@exampledev/new.css@1.1.2/new.min.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<h1>{title}</h1>
</header>
<main>
{content}
</main>
<footer>
<p>© 2025 <a href="https://wordpress.p-mission.net/" target="_blank">ひかげStyle</a></p>
</footer>
</body>
</html>
mdファイルの例(post1.md)
1行目の「# 」はタイトルになる。
# 初めての投稿
## 🔰 はじめてのマークダウン記事サンプル
これは、マークダウン記法を使って書かれた**最初の記事**のサンプルです。
---
### 📝 見出しと段落
マークダウンを使うと、文章の構造を**簡単**に、そして**明確**にすることができます。
* `#` の数で見出しのレベルが変わります。
* この文章のように、ただ文章を書くだけで段落になります。
### 📜 リストを使ってみよう
情報を整理するにはリストが便利です。
#### 箇条書きリスト (順不同)
アスタリスク (`*`) やハイフン (`-`) を使います。
* コーヒー
* 紅茶
* 緑茶
* 煎茶
* 玉露
#### 番号付きリスト (順序あり)
数字とピリオド (`1.`) を使います。
1. 企画を立てる
2. 原稿を執筆する
3. レビューと校正を行う
4. 公開する
### 🔗 リンクと画像
ウェブコンテンツには欠かせません。
**リンク**は `[表示テキスト](URL)` で作成します。
[Google のウェブサイトへ](https://www.google.com/)
**画像**は `` で作成します。(このサンプルでは表示されません)

### 🧱 強調と引用
特定の箇所を際立たせたいときに使います。
* **太字**はアスタリスク2つ (`**太字**`)、またはアンダースコア2つ (`__太字__`)
* *斜体*はアスタリスク1つ (`*斜体*`)、またはアンダースコア1つ (`_斜体_`)
> この文章は引用です。ブロッククォート (`>`) を使って表現します。
>
> 重要なポイントを強調するのに役立ちます。
---
これで、マークダウンの基本的な要素を使ったサンプル記事は完了です。
日付、カテゴリー、タグなどは実装していないので、個人的に使いやすい「1行目がタイトルで、Pythonを使ってマークダウンをHTML変換する」スクリプトです。
個人的な目的は達成しました。