🐛

2025-03-18 Zenn Article Format Fix

に公開

Zenn記事フォーマット修正

はじめに

昨日はCI/CDパイプラインの修正を行いました。今日は、そのパイプラインで生成されるZenn公開用記事のフォーマット問題を修正していきます。具体的には、記事ファイルが誤ってコードブロックとして囲まれてしまう問題の原因を特定し、解決を目指します。

背景と目的

今回の開発テーマを選んだ背景は、CI/CDパイプラインによって自動生成されたZenn記事が、フォーマットエラーによって公開できなかったことです。この問題を解決することで、Zennへの記事公開プロセスを自動化し、開発効率を向上させることが目的です。

検討内容

課題の整理

現在のCI/CDパイプラインでは、生成されたZenn記事が以下のような問題点を抱えています。

  1. 記事全体がコードブロック(```markdown)で囲まれてしまう。
  2. Zennのフォーマットに準拠していないため、エラーが発生する。

解決アプローチ

これらの課題を解決するために、以下のアプローチを検討しました。

  1. 記事生成スクリプト(diary_converter.py)を調査し、コードブロックが挿入される原因を特定する。
  2. テンプレートの扱い方を見直し、コードブロックが不要な箇所から削除する。
  3. 生成される記事のフォーマットをZennの仕様に合わせる。
  4. 修正したスクリプトをCI/CDパイプラインに組み込み、テストを行う。

実装内容

実際に行った作業内容は以下の通りです。

変更点1: diary_converter.pyの修正

diary_converter.pyの実装を確認したところ、generate_prompt関数で、テンプレートの内容をコードブロックとして扱っていることが原因だと判明しました。具体的には、プロンプトの中でfrontmatterとメッセージボックスの部分をコードブロック(```)で囲んでいました。

# 修正前のコード(イメージ)
def generate_prompt(diary_content):
    frontmatter = """
---
title: "Example Title"
---
"""
    message_box = ":::message\nThis is a message.\n:::"
    prompt = f"""
```markdown
{frontmatter}
{message_box}
{diary_content}

"""
return prompt


そこで、`generate_prompt`関数を修正し、frontmatterとメッセージボックスのテンプレートを別の変数として定義し、コードブロックで囲まないようにしました。また、プロンプト内でテンプレートを直接表示するように変更し、コードブロックを使用しないようにしました。さらに、出力形式の説明に「コードブロックは必要な場合のみ使用し、記事全体をコードブロックで囲まないでください」という明示的な指示を追加しました。

```python
# 修正後のコード(イメージ)
def generate_prompt(diary_content):
    frontmatter = """
---
title: "Example Title"
---
"""
    message_box = ":::message\nThis is a message.\n:::"
    prompt = f"""
{frontmatter}
{message_box}
{diary_content}

コードブロックは必要な場合のみ使用し、記事全体をコードブロックで囲まないでください。
"""
    return prompt

技術的なポイント

今回の修正で特に重要だったのは、LLMに与えるプロンプトの構成です。LLMはプロンプトの内容を忠実に再現しようとするため、不要なコードブロックを含めてしまうことがありました。そこで、プロンプトをより明確にし、出力形式に関する指示を具体的に記述することで、意図したフォーマットで記事を生成できるようにしました。

所感

今回の開発では、CI/CDパイプラインの自動化におけるフォーマットの重要性を改めて認識しました。特に、LLMを利用したコンテンツ生成では、プロンプトの設計が非常に重要であり、細部にまで注意を払う必要があると感じました。最初は単純なフォーマットエラーだと思っていましたが、原因を特定し、解決策を実装する過程で、LLMの特性やプロンプトエンジニアリングの奥深さを学ぶことができました。また、自動化されたプロセスが正常に動作するようになったときの達成感は格別でした。

今後の課題

今後の課題としては、以下が挙げられます。

  1. 生成される記事の品質向上(文法、表現、内容の正確性など)。
  2. Zenn以外のプラットフォームへの対応。
  3. より複雑なフォーマットやレイアウトの自動生成。

まとめ

今回の開発では、CI/CDパイプラインで生成されるZenn公開用記事のフォーマット問題を修正し、記事全体がコードブロックで囲まれてしまう問題を解決しました。これにより、Zennへの記事公開プロセスを自動化し、開発効率を向上させることができました。今後は、生成される記事の品質向上や、他のプラットフォームへの対応など、さらなる改善に取り組んでいきたいと思います。

GitHubで編集を提案

Discussion