2025-03-19 Zenn記事フォーマットの修正
Zenn記事フォーマットの修正
はじめに
昨日はZenn記事フォーマットの修正を行いましたが、Zenn連携用リポジトリにPushされたファイルで、フォーマットが正しく反映されていない問題が残っていました。今日は、この問題の根本的な解決を目指します。
背景と目的
開発日記をZenn記事として公開する際、自動生成された記事のフォーマットが期待通りにならないという問題に直面しました。特に、コードブロックの扱いが不適切で、記事全体がコードブロックとして出力されてしまうという状況でした。この問題を解決し、より読みやすく、Zennのフォーマットに準拠した記事を自動生成できるようにすることが今回の目的です。
検討内容
課題の整理
現在のZenn記事フォーマット生成における課題は以下の通りです。
-
diary_converter.py
のgenerate_prompt
関数で、テンプレートの内容をコードブロックとして扱ってしまっている。 - その結果、生成された記事全体がコードブロックとして出力されてしまう。
- CI/CDパイプラインでのテスト実行時にGemini APIキーが設定されていないため、テストが正常に完了しない。
解決アプローチ
これらの課題を解決するために、以下のアプローチを検討しました。
-
generate_prompt
関数を修正し、テンプレートの内容をコードブロックとして扱わないようにする。 -
convert_diary_with_gemini
関数を修正し、余分なコードブロックマーカーを削除する処理を追加する。 - プロンプトに「コードブロックは必要な場合のみ使用し、記事全体をコードブロックで囲まないでください」という明示的な指示を追加する。
- CI/CDパイプラインにGemini APIキーを環境変数として設定する。
実装内容
diary_converter.py
の修正
変更点1: generate_prompt
関数を修正し、テンプレートの内容をコードブロックとして扱わないように変更しました。これにより、記事全体がコードブロックとして出力される問題を解決しました。
# 修正前のコード(例)
def generate_prompt(template, diary_content):
return f"```\n{template.format(diary_content=diary_content)}\n```"
# 修正後のコード(例)
def generate_prompt(template, diary_content):
return template.format(diary_content=diary_content)
convert_diary_with_gemini
関数の修正
変更点2: convert_diary_with_gemini
関数を修正し、余分なコードブロックマーカーを削除する処理を追加しました。これにより、記事の先頭や末尾に不要な```が付加される問題を解決しました。
# 修正前のコード(例)
def convert_diary_with_gemini(prompt, gemini_api_key):
# Gemini APIを呼び出す処理
return response
# 修正後のコード(例)
def convert_diary_with_gemini(prompt, gemini_api_key):
# Gemini APIを呼び出す処理
response = response.replace("```\n", "").replace("\n```", "")
return response
変更点3: プロンプトの修正
プロンプトに「コードブロックは必要な場合のみ使用し、記事全体をコードブロックで囲まないでください」という明示的な指示を追加しました。これにより、LLMがより適切なフォーマットで記事を生成するように誘導しました。
変更点4: CI/CDパイプラインの修正
CI/CDパイプラインにGemini APIキーを環境変数として設定しました。これにより、テストが正常に完了するようになり、自動テストの信頼性が向上しました。
技術的なポイント
今回の修正で特に重要だったのは、LLMに与えるプロンプトの重要性を再認識した点です。プロンプトを詳細化し、具体的な指示を与えることで、LLMの出力品質を大幅に向上させることができました。また、CI/CDパイプラインにAPIキーを設定することで、自動テストの実行を可能にし、開発プロセスの効率化に貢献できました。
所感
今回の開発では、Zenn記事のフォーマットが正しく生成されないという問題に直面し、その原因を特定して解決するまでに多くの試行錯誤がありました。特に、LLMの挙動を理解し、適切なプロンプトを作成することに苦労しましたが、最終的に問題を解決できたときの達成感は格別でした。また、CI/CDパイプラインの重要性を改めて認識し、自動テストの導入によって開発効率が向上することを実感しました。
今後の課題
- Zenn連携用リポジトリへのPushが正しく行われているか、エンドツーエンドのテストを実装する。
-
diary_converter.py
のテストカバレッジを向上させる。 - 生成される記事の品質をさらに向上させるためのプロンプト改善を検討する。
まとめ
今回は、Zenn記事フォーマットの修正を行い、記事全体がコードブロックとして出力される問題を解決しました。diary_converter.py
の修正、プロンプトの改善、CI/CDパイプラインの修正を通じて、より高品質なZenn記事を自動生成できる基盤を構築することができました。今後は、エンドツーエンドのテストやテストカバレッジの向上に取り組み、より信頼性の高い開発プロセスを確立していきたいと考えています。
Discussion