📝

学習教材自動生成のGitHub Actionsパイプライン構築(開発日記 No.106)

に公開

関連リンク

はじめに

本開発日記では、ITIL 4ファンデーションの学習教材を自動生成するGitHub Actionsパイプラインの構築に向けた要件定義のプロセスを記録します。前回、Day 9の教材を手動で生成しGitリポジトリにプッシュする作業を行いましたが、この定型作業を自動化することで、学習コンテンツの継続的な提供と管理を効率化することが今回の目的です。

背景と目的

これまで、ITIL 4ファンデーションの学習教材は手動で作成しており、特に30日間の学習計画を効率的に進める上で、この手作業がボトルネックとなっていました。そこで、GitHub Actionsを活用し、日々の教材生成プロセスを自動化する仕組みを構築することを決定しました。

検討内容

ITIL 4学習教材の自動生成パイプライン構築に向けて、アシスタントと以下の要件についてディスカッションを行いました。

  1. ワークフローのトリガー: 毎日JST 0:00:00にスケジュール実行することに合意しました。
  2. 変数管理: フォーマットファイルへのパスと出力フォルダのパスをGitHub Actionsのenv変数として設定する方針で進めることにしました。
  3. 動的なファイル名と日付の管理: 最も議論を要した点です。GitHub Actionsのワークフローがステートレスであるため、日付(Day番号)のような「状態」を保持し、インクリメントするメカニズムが必要でした。結果として、リポジトリ内にcurrent_day.txtという外部ファイルを設置し、現在のDay番号を記録・更新する方法を採用することにしました。これにより、Max値の管理や、超過時のワークフロー終了も実現します。
  4. content-converterの利用とプロンプト生成: 学習教材の生成には既存のPython CLIアプリcontent-converterを使用します。その際、LLMに00_plan.mdから該当Dayの学習内容を抽出するよう指示する具体的なプロンプト文字列を--prompt引数として渡す方針を採りました。このプロンプト文字列は、Day番号を動的に埋め込むためのテンプレートファイルtemplates/itil_day_content_prompt_template.mdから生成します。

これらの議論を通じて、パイプラインの全体像と主要な技術的課題へのアプローチが明確になりました。

実装内容

今回の作業は主にGitHub Actionsパイプラインの要件定義であり、直接的なコード実装はまだ行っていません。しかし、content-converterの実行環境について調査を行い、既存のワークフロー(/home/centervil/repos/Docs/.github/workflows/diary-convert.yml)を参考に、pip installによるインストールとpython -m content_converter.cliコマンドでの実行方法を確認しました。この情報は、今後のパイプライン実装において重要な基盤となります。

技術的なポイント

本プロジェクトにおける技術的なポイントは以下の通りです。

  • ステートレスな環境での状態管理: GitHub ActionsのようなステートレスなCI/CD環境で、日々のDay番号という状態を永続的に管理するために、リポジトリ内のテキストファイル(current_day.txt)を用いるアプローチを採用しました。これはシンプルながら効果的な方法です。
  • LLMを活用した動的コンテンツ抽出: content-converter--prompt引数にLLMへの具体的な指示を含めることで、00_plan.mdからの学習内容の抽出をLLMに任せる設計としました。これにより、複雑な解析ロジックを自前で実装する手間を省き、LLMの柔軟性と表現力を最大限に活用できます。
  • プロンプトのテンプレート化: プロンプト自体もテンプレート化し、動的な情報を埋め込むことで、プロンプトの管理と生成プロセスを自動化し、ワークフロー全体の柔軟性を高めます。

所感

これまでの手動での教材作成作業が自動化されることで、学習コンテンツの継続提供と管理が格段に効率化される見込みです。GitHub Actionsのスケジュール機能と環境変数、そして外部ファイルによる状態管理の組み合わせは、このような定型的なコンテンツ生成タスクの自動化において非常に強力なツールとなると感じました。

Gitサブモジュールのファイルパスの問題で一時的にファイルの読み込みに課題が生じましたが、アシスタントとの協力により迅速に解決できたことは、スムーズな開発体験に繋がりました。LLMにコンテンツ抽出を委ねるというアプローチは、将来的な拡張性やメンテナンス性の面でも大きなメリットがあると期待しています。

今後の課題

要件定義は完了しましたが、実際のパイプライン構築には以下の課題が残されています。

  • GitHub Actionsワークフロー(.github/workflows/generate_itil_study_material.yml)の詳細な実装。
  • current_day.txtの初期値設定と、Day番号の最大値(MAX_DAY_NUMBER)の決定。
  • GOOGLE_API_KEYLLM_MODELといった機密情報をGitHub Actions Secretsとして安全に管理し、content-converterに渡す設定。
  • エラー発生時の適切な通知メカニズムの実装。

まとめ

本開発日記では、ITIL 4学習教材の自動生成パイプライン構築に向けたGitHub Actionsの要件定義のプロセスを詳述しました。日次実行、動的な日付管理、content-converterとLLMによるプロンプト生成といった主要な要件が確定し、今後の実装に向けた明確なロードマップが描かれました。これにより、学習教材の作成プロセスが大幅に効率化され、より安定したコンテンツ提供が可能となることを期待しています。

GitHubで編集を提案

Discussion