🛠️

開発日記処理とZennテンプレート改善 自動生成Zenn記事の品質向上(開発日記 No.033)

に公開

関連リンク

はじめに

昨日は、開発日記をZenn記事に自動変換するツール、DiaryConverterを開発しました。今日は、そのDiaryConverterが生成する記事の品質をさらに高めるため、開発日記の処理とZennテンプレートの改善に取り組みました。具体的には、より自然な記事構成を目指し、テンプレートの修正と、それに合わせた日記処理スクリプトの調整を行います。

背景と目的

これまで開発日記をZennに公開するプロセスを自動化してきましたが、生成された記事の品質にはまだ改善の余地がありました。特に、記事のタイトルや関連リンクの形式、そして記事全体の構成において、よりZennの記事として自然で読みやすい形に近づけることが目標です。今回の改善を通じて、自動生成される記事の完成度を高め、よりスムーズな情報発信を目指します。

検討内容

まず、昨日の開発で生成された記事を確認したところ、いくつかの課題が見つかりました。

  • タイトル: テンプレートで指定していたタイトル形式が、必ずしも記事の内容を適切に反映しているとは言えませんでした。特に、テーマ名を外部から渡す形式では、柔軟性に欠けると感じました。
  • 関連リンク: 関連リンクの形式が、テンプレートの記述と実際の出力でズレが生じていました。また、前回の開発日記へのリンク形式をよりシンプルにしたいと考えました。
  • 記述ガイドライン: LLMへの指示と記述ガイドラインが分散しており、少し分かりにくい状態でした。これらを整理し、一箇所にまとめることで、テンプレートの可読性とメンテナンス性を向上させたいと考えました。

これらの課題を踏まえ、今回は以下の点を中心に改善を行うことにしました。

  • タイトル: 記事の内容から自動生成するように変更し、より具体的なタイトルを生成できるようにします。
  • 関連リンク: 前回の開発日記へのリンクのみとし、形式をシンプルで分かりやすいものに修正します。
  • テンプレート: LLMへの指示と記述ガイドラインを整理し、一箇所に集約します。また、Frontmatterの設定や不要な記述を整理し、テンプレート自体をより洗練されたものにします。

実装内容

具体的な実装内容としては、以下のファイルの修正を行いました。

  1. diary-filename-processor.sh: 開発日記のファイル名処理スクリプトを修正しました。

    • 日付部分と通し番号を正確に抽出するように修正しました。
    • テーマ部分の抽出を廃止しました。
    • 生成するSLUGを "${DATE_PART}_{通し番号}_dev-diary" に固定しました。

    これにより、ファイル名から必要な情報を正確に抽出し、一貫性のあるSLUGを生成できるようになりました。

  2. diary_converter.py: Python製の変換スクリプトを修正しました。

    • テーマ名とプロジェクト名の参照箇所を削除しました。今後はこれらを使用しない方針としました。
    • Issue番号の使用を廃止しました。
    • 通し番号をZennテンプレートの [連番] に挿入するように修正しました。

    これらの修正により、不要な情報を排除し、必要な情報のみをテンプレートに渡すようにしました。

  3. zenn_template.md: Zenn記事のテンプレートを大幅に修正しました。

    • title[テーマ名] を削除し、日記の内容からタイトルを生成するようにLLMへの指示を変更しました。
    • 関連リンクに表示する項目を「前回の開発日記」のみに限定しました。
    • Frontmatter設定で type: idea を固定するように設定しました。
    • 開発サイクルの紹介文を削除しました。
    • LLM変換指示と記述ガイドラインの内容を整理し、一箇所にまとめました。

    テンプレートの修正により、生成される記事の構成がより洗練され、指示も明確になりました。

  4. action.yml: GitHub Actionsの定義ファイルも、diary_converter.py の変更に合わせて修正しました。

    これにより、CI/CDパイプライン全体で整合性が保たれるようにしました。

  5. テストファイルの確認: ユニットテストおよび結合テストのファイル (test_diary_converter.py, test_end_to_end.py) を確認しましたが、今回の変更による修正は不要と判断しました。また、テスト実行スクリプト (run_all_tests.sh, run_docker_unit_tests.sh) も同様に修正不要でした。

    テストファイルに修正が不要だったことは、今回の変更が既存の機能に影響を与えていないことを示しており、安心して変更を適用できました。

技術的なポイント

今回の実装における技術的なポイントは、ZennテンプレートにおけるLLMへの指示をより具体的にした点です。特に、関連リンクの形式を具体的に指示することで、意図した通りのマークダウンが出力されるようになりました。

また、タイトルを外部から与えるのではなく、日記の内容から生成するように変更したことで、より柔軟で内容に即したタイトル生成が可能になったと考えています。

所感

今回の開発では、Zennテンプレートと開発日記処理スクリプトの両方を改善することで、自動生成される記事の品質を一段階向上させることができました。特に、テンプレートの修正を通じて、LLMへの指示の重要性を改めて認識しました。曖昧な指示では、意図しない出力になる可能性があるため、具体的な指示を与えることが重要だと学びました。

また、生成された記事に問題が見つかった際に、原因を特定し、テンプレートとスクリプトの両面から修正を行うことで、着実に改善を進めることができました。地道な修正の積み重ねが、最終的な品質向上に繋がることを実感しました。

今後の課題

今回の改善で記事の品質は向上しましたが、まだ完全に理想的な状態ではありません。今後は、以下のような課題に取り組んでいきたいと考えています。

  • 記事タイトルの自動生成: 現在はLLMにタイトル生成を指示していますが、より洗練されたタイトルを自動生成するためのロジックを検討したいです。
  • 記事構成の最適化: Zennの記事としてさらに読みやすい構成にするために、テンプレートの構造やセクションの見出しなどを継続的に見直していきたいです。
  • テストの拡充: より多様なケースを想定したテストを追加し、自動生成の品質をより安定させたいと考えています。

まとめ

今日は、開発日記処理とZennテンプレートの改善を行い、自動生成されるZenn記事の品質向上に取り組みました。テンプレートの修正、スクリプトの調整、そして細かな問題点の修正を通じて、より洗練されたZenn記事を自動生成できる基盤を構築できました。今回の改善を土台として、今後も継続的に改善を進め、より高品質なZenn記事の自動生成を目指していきたいと思います。

GitHubで編集を提案

Discussion