プロジェクト 開発日記 #1: Diary-Converter action.yml の改善
関連リンク
- プロジェクトリポジトリ: Diary-Converter
- 前回の開発日記: Zenn公開用日記のフォーマット最適化
Diary-Converter action.yml の改善
はじめに
昨日は、Zenn公開用日記のフォーマット最適化に取り組み、Issue #1 を解決しました。今日は、その流れで Diary-Converter の action.yml を改善し、生成されるドキュメントの品質向上を目指します。
背景と目的
Diary-Converter の action.yml によって生成されたドキュメントに、全体がコードブロック化されるという不備がありました。これは、LLM が文書を生成する際に起こりうる問題です。この問題を解決するために、ドキュメント生成後に自動で修正するプロセスを action.yml に追加します。また、将来的な拡張性を考慮し、このプロセスを Python ファイルに外出しします。
検討内容
課題の整理
現在の action.yml で生成されるドキュメントには、以下の課題があります。
- LLM によって生成されたドキュメント全体が、```markdown と ``` で囲まれてコードブロック化されている。
解決アプローチ
この課題を解決するために、以下のアプローチを採用します。
- ドキュメント生成後に、Python スクリプトを実行してコードブロックを削除する。
- Python スクリプトは、将来的に他の修正処理も追加できるように拡張性を考慮して設計する。
- action.yml に直接修正処理を記述せず、Python ファイルに外出しすることで、可読性と保守性を向上させる。
実装内容
document_processor.py
)
変更点1: ドキュメント処理用 Python ファイルの作成 (document_processor.py
という新しいファイルを作成し、以下の機能を実装しました。
- マークダウンファイル全体を囲むコードブロックを削除する
remove_markdown_code_block
関数 - 将来的な拡張性を考慮した設計 (処理関数をリスト化し、順番に適用する仕組み)
- デバッグモードのサポート
# 処理関数のリスト(順番に実行される)
self.processors: List[Callable[[str], str]] = [
self.remove_markdown_code_block,
# 将来的に他の処理関数を追加可能
# self.fix_frontmatter_format,
# self.normalize_headings,
# self.fix_image_paths,
# など
]
def remove_markdown_code_block(self, content: str) -> str:
"""
マークダウンファイル全体を囲むコードブロックを削除する
LLMが生成したマークダウンファイルでは、しばしば全体が```markdownと```で囲まれている
この関数は、そのようなコードブロックを検出して削除する
"""
# 文書全体がコードブロックで囲まれているかチェック
if content.startswith('```') and content.endswith('```'):
# 先頭行と末尾の```を削除
...
# 先頭が```markdownで始まるケース
if content.startswith('```markdown') or content.startswith('```Markdown'):
# 先頭行と末尾の```を削除
...
return content
変更点2: action.yml の修正
ドキュメント生成後に document_processor.py
を呼び出す新しいステップを追加しました。
- デバッグモードの引き継ぎ
- 処理完了メッセージの追加
技術的なポイント
document_processor.py
の設計において、将来的な拡張性を重視しました。処理関数をリスト化し、順番に適用する仕組みを採用することで、新しい修正処理を簡単に追加できるようになっています。また、デバッグモードをサポートすることで、問題発生時の原因特定を容易にしています。
所感
今回の開発では、LLM によって生成されたドキュメントの品質を向上させるための自動化プロセスを構築しました。特に、Python スクリプトに処理を外出しすることで、action.yml の可読性と保守性を高めることができました。また、将来的な拡張性を考慮した設計にすることで、長期的な運用を見据えた開発ができたと感じています。
当初は単純な修正作業だと思っていましたが、実際に取り組んでみると、LLM の特性を理解し、それに対応した処理を実装する必要があるなど、奥が深い作業でした。
今後の課題
今後の課題としては、以下が挙げられます。
-
document_processor.py
に、他の修正処理 (例: frontmatter のフォーマット修正、見出しの正規化、画像パスの修正) を追加する。 -
document_processor.py
のテストコードを作成し、品質を保証する。 - LLM が生成するドキュメントの品質をさらに向上させるための研究を行う。
まとめ
今回は、Diary-Converter の action.yml を改善し、LLM によって生成されたドキュメントの品質を自動的に修正するプロセスを構築しました。この改善により、Zenn 公開用日記の作成がよりスムーズになり、高品質な記事を効率的に作成できるようになることを期待しています。
Discussion