Sota411 ← Back
← Back to Articles

2026-03-02

ポートフォリオにブログ機能を追加しました

ブログ機能の追加

ポートフォリオサイトに, 記事を書いて公開できるブログ機能を追加しました.

これまではWorksやSkillsといった静的な情報だけだったので, 開発で得た知見をアウトプットできる場所が欲しくなり, 記事セクションを作りました.

技術的な仕組み

Markdown → HTML 変換

記事はMarkdownで書き, Pythonスクリプトで静的HTMLに変換しています. 外部パッケージは使わず, Python標準ライブラリのreosだけで実装しました.

変換処理の流れは以下のとおりです.

  1. Markdownファイルを読み込み
  2. フロントマター(YAML形式のメタデータ)をパース
  3. 本文を正規表現ベースでHTMLに変換
  4. テンプレートHTMLに埋め込んで記事ページを生成
  5. トップページの記事一覧を日付降順で更新

フロントマターのパース

各記事ファイルの先頭に --- で囲んだメタデータブロックを記述し, タイトル・日付・概要を管理しています.


---
title: 記事のタイトル
date: 2026-03-02
description: 記事の概要
---

これを正規表現で抽出し, キーと値のペアに分解しています. フォーマットを単純なkey: valueに限定しているので, YAMLパーサーなしでも安全にパースできます.

正規表現ベースのMarkdownパーサー

markdownライブラリなどは使わず, 自前で簡易パーサーを書きました. 対応している記法は見出し(########), 段落, リスト(-1.), コードブロック, インライン要素(太字・斜体・インラインコード・リンク・画像), 引用です.

処理は1行ずつ走査するステートマシン的なアプローチで, 「今コードブロックの中にいるか」「リストの途中か」といった状態を追跡しながら変換しています.

なぜ自前実装にしたのか

一番の理由は, Pythonさえあればどこでも動くようにしたかったからです. 外部パッケージに依存すると環境構築が面倒になります. もう一つは, 変換ロジックがブラックボックスにならないこと. ブログ記事に使う記法は限られているので, フル機能のパーサーは要りません.

テーブルやネストしたリストには対応していませんが, 今のところ困っていません. 必要になったら拡張します.

今後

まずはこの記事のように技術的な話題から書いていくつもりです.

← トップページに戻る