🛠️

2025-03-28 Diary-Converterのコード重複解消とメンテナンス性向上

に公開

関連リンク

Diary-Converterのコード重複解消とメンテナンス性向上

はじめに

昨日はDiary-Converterのaction.ymlを改善しました。今日は、その流れでコードの重複を解消し、メンテナンス性を向上させることに取り組みます。

背景と目的

Diary-Converterは、開発日記をZennの記事形式に変換するツールです。しかし、現状ではdiary_converter.pyzenn_template.mdの両方にZenn公開用記事のフォーマットに関する知識が重複して存在しており、メンテナンス性が低いという課題がありました。そこで、今回の開発では、この重複を解消し、より柔軟で保守しやすいコードを目指します。

検討内容

課題の整理

現在のコードには以下の課題があります。

  1. Zenn公開用記事のフォーマットに関する知識がdiary_converter.pyzenn_template.mdに重複している。
  2. フォーマットの変更があった場合、両方のファイルを修正する必要があるため、手間がかかる。
  3. diary_converter.pyがフォーマットに関する知識を持つことで、変換モジュールとしての純粋性が損なわれている。

解決アプローチ

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

  1. zenn_template.mdをZenn公開用記事のフォーマットに関する知識の一元管理場所とする。
  2. diary_converter.pyからフォーマットに関する知識を削除し、zenn_template.mdを参照するように変更する。
  3. テンプレートから各セクション(frontmatter、メッセージボックス、関連リンク、ガイドラインなど)を抽出する機能を実装する。

実装内容

変更点1: extract_template_sectionsメソッドの追加

zenn_template.mdから各セクションを抽出するextract_template_sectionsメソッドをdiary_converter.pyに追加しました。このメソッドは、テンプレートファイルを読み込み、指定された区切り文字に基づいてセクションを分割します。

変更点2: generate_promptメソッドの修正

generate_promptメソッドを修正し、ハードコードされていたフォーマット情報をzenn_template.mdから抽出した情報に置き換えました。これにより、フォーマットの変更があった場合でも、zenn_template.mdのみを更新すれば良くなります。

変更点3: Dockerコンテナの修正

テスト用のDockerコンテナを使用するために、以下の修正を行いました。

  1. docker-entrypoint.shを更新し、正しいPythonモジュールパスを使用するように変更しました。
    # 変更前
    python /app/diary_converter.py "$INPUT_FILE" "$OUTPUT_FILE" "$@"
    
    # 変更後
    python -m diary_converter.diary_converter "$INPUT_FILE" "$OUTPUT_FILE" "$@"
    
  2. tests/docker_test.shを修正し、現在のプロジェクト構造に合わせてパスを更新しました。

技術的なポイント

今回の実装で特に重要だったのは、zenn_template.mdの構造を尊重し、テンプレートに変更があった場合でも柔軟に対応できるようにした点です。extract_template_sectionsメソッドは、テンプレートファイルの区切り文字を柔軟に認識し、セクションを抽出することができます。

所感

今回の開発では、コードの重複を解消し、メンテナンス性を向上させるという目標を達成することができました。特に、テンプレートファイルから情報を抽出する仕組みを導入したことで、フォーマットの変更に対する柔軟性が大幅に向上しました。

しかし、テスト環境の整備が不十分であるという課題も浮き彫りになりました。ローカルでのテストは手間がかかり、CI/CDパイプラインでの自動テストの必要性を強く感じました。

今後の課題

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

  1. testsディレクトリの整理
  2. CI/CDパイプラインでのテスト自動化

これらの課題を解決するために、Issue #4を作成しました。

まとめ

今回の開発では、Diary-Converterのコード重複を解消し、メンテナンス性を向上させることができました。テンプレートファイルから情報を抽出する仕組みを導入したことで、フォーマットの変更に対する柔軟性が大幅に向上しました。今後は、テスト環境の整備を進め、より高品質なツールを目指していきます。

GitHubで編集を提案

Discussion