概要
- Org mode の標準パブリッシュ機能でブログ記事をHTML化している現状
- シンプルな静的サイトジェネレーターへの憧れと現実のギャップ
- Orgのエクスポート処理の複雑さと理解しきれない苦悩
- Babel によるコード実行・出力埋め込み機能の圧倒的利便性
- シンプル化の誘惑とBabel機能の再現困難さによる葛藤
Org modeと静的サイトジェネレーターへの憧れ
- 他人の シンプルな静的サイト生成環境 への羨望
- 自作すれば 2,000行程度 で理解しやすく、拡張性や共有性にも優れる可能性
- 現実は Org mode で記事執筆・標準パブリッシュ関数によるHTML出力運用
Orgパブリッシュ処理の複雑さと理解困難
- Orgのパブリッシュ処理は 脆弱さ もあるが、何より仕組みが理解できていない
- org-publish-current-file コマンド実行時の内部処理が不明
- Lispコードをトレースすれば分かるが、実際のエクスポート関連コードは膨大
- ox-html.el (HTMLエクスポート)だけで約5,000行
- ox-publish.el/ox.el (エクスポートフレームワーク)で約8,000行
- org-element.el (パース処理)で約9,000行
- 合計 2万行超 の複雑さ
Babel機能の圧倒的魅力
- 他の軽量マークアップ(MarkdownやReSTなど)も コードブロック埋め込み は可能
- Org+Babel はエクスポート時に コード実行・出力埋め込み が可能
- 出力が表や画像でもそのまま記事に反映
- セッション対応 でコード定義の再利用も可能
- マークアップからコードへの変数注入、逆も可能
- JavaScriptシンタックスハイライト 不要(Orgがインラインスタイル生成)
- 多数言語対応(筆者は主に R でプロット描画に利用)
- データ・図・テキスト を同時に下書きし、相互調整しながら執筆できる利便性
- 一度体験すると 手放せない 機能
シンプル化の誘惑と現実のジレンマ
- 2,000行の静的サイトジェネレーター なら週末プロジェクトで実現可能
- しかし Babelの機能再現 は、時間の限られた筆者には 数ヶ月規模の大仕事
- 結果として現状維持、複雑なワークフローを「自分で自分を責めつつ」使い続ける選択
参考リンク
- Org Babel公式ドキュメント:https://orgmode.org/worg/org-contrib/babel/