Python で Markdown を HTML に変換する

個人用途「Python で Markdown を HTML に変換する」スクリプト

公開日: 2025-11-30

パソコン環境

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/)


**画像**は `![代替テキスト](画像URL)` で作成します。(このサンプルでは表示されません)

![美しい山々の風景](https://example.com/mountain.jpg)


### 🧱 強調と引用

特定の箇所を際立たせたいときに使います。

* **太字**はアスタリスク2つ (`**太字**`)、またはアンダースコア2つ (`__太字__`)
* *斜体*はアスタリスク1つ (`*斜体*`)、またはアンダースコア1つ (`_斜体_`)

> この文章は引用です。ブロッククォート (`>`) を使って表現します。
>
> 重要なポイントを強調するのに役立ちます。

---

これで、マークダウンの基本的な要素を使ったサンプル記事は完了です。

日付、カテゴリー、タグなどは実装していないので、個人的に使いやすい「1行目がタイトルで、Pythonを使ってマークダウンをHTML変換する」スクリプトです。

個人的な目的は達成しました。