以下は、`make_textbook5.py`プログラムの解析結果です。

---

## 1. プログラムの動作

このPythonプログラム `make_textbook5.py` は、講義の文字起こしテキストと、オプションで提供される既存のスライドMarkdownファイルを基に、AI（OpenAIまたはGoogle Gemini）を利用して、教科書用のMarkdownとスライド用のMarkdownを生成するツールです。

**主な機能:**

1.  **設定と初期化**:
    *   コマンドライン引数を解析し、入力ファイル、出力ファイル、使用するAI（OpenAIまたはGemini）、モデル名、出力言語、専門分野、役割などを設定します。
    *   スクリプト名と同じINIファイル（例: `make_textbook5.ini`）からAIプロンプトテンプレートを読み込みます。
    *   `ai.env`ファイル（または環境変数）からOpenAIおよびGoogle GeminiのAPIキー、およびデフォルトモデル名を読み込みます。
2.  **入力ファイルの読み込み**:
    *   指定された文字起こしテキストファイル (`.txt`) と、オプションのスライドMarkdownファイル (`.md`) の内容を読み込みます。
3.  **AIプロンプトの構築**:
    *   読み込んだプロンプトテンプレートに、コマンドライン引数で指定された専門分野、役割、出力言語などの情報を埋め込み、AIへの指示（システムプロンプト）を作成します。
    *   選択されたAIサービス（OpenAIまたはGemini）に応じて、最適なメッセージ形式を構築します。
        *   **OpenAI (openai, openai5)**: `system`メッセージと複数の`user`メッセージ（文字起こしテキスト、スライド、最終指示）からなる会話形式。
        *   **Google Gemini (gemini, google)**: 全ての指示、文字起こし、スライドを一つの`user`メッセージにまとめた形式。
    *   AIからの出力形式を制御するため、最終指示として特定の開始/終了タグ（`[TEXTBOOK_START]`, `[TEXTBOOK_END]`, `[SLIDES_START]`, `[SLIDES_END]`）を含めます。
    *   AIに送信する前のメッセージ内容をJSON形式で`.log`ファイルに保存します。
4.  **AI APIの呼び出し**:
    *   構築したメッセージを、指定されたAPIキーとモデルを使用してOpenAIまたはGoogle GeminiのAPIに送信します。
    *   APIからの応答を受け取ります。
5.  **出力ファイルの生成**:
    *   AIからの応答テキストを解析し、`[TEXTBOOK_START]`と`[TEXTBOOK_END]`で囲まれた内容を教科書用Markdownファイルに書き出します。
    *   `[SLIDES_START]`と`[SLIDES_END]`で囲まれた内容をスライド用Markdownファイルに書き出します。
6.  **エラーハンドリング**:
    *   必要なライブラリがインストールされていない場合、APIキーが未設定の場合、入力ファイルが見つからない場合、AIからの応答が期待された形式でない場合などにエラーメッセージを表示し、プログラムを終了します。
    *   `--pause 1`オプションが指定されている場合、終了時に`ENTER`キーの入力を求めます。

## 2. 必要な非標準ライブラリとインストールコマンドとインストール方法

このプログラムは、AIサービスとの連携のために以下の非標準ライブラリを必要とします。

### 必要なライブラリ

*   `google-generativeai`: Google Gemini APIを使用するために必要です。
*   `openai`: OpenAI APIを使用するために必要です。
*   `python-dotenv`: 環境変数（APIキーなど）を`.env`ファイルから読み込むために使用されます（`tkai_lib.read_ai_config`関数が内部的に使用すると推測されます）。

### インストールコマンド

```bash
pip install google-generativeai openai python-dotenv
```

### インストール方法

1.  **Pythonとpipの確認**:
    システムにPythonとパッケージマネージャー`pip`がインストールされていることを確認してください。
    ```bash
    python --version
    pip --version
    ```
2.  **仮想環境の作成 (推奨)**:
    プロジェクトごとに仮想環境を作成し、依存関係を分離することをお勧めします。
    ```bash
    python -m venv venv
    ```
3.  **仮想環境のアクティベート**:
    *   **Windows**:
        ```bash
        .\venv\Scripts\activate
        ```
    *   **macOS / Linux**:
        ```bash
        source venv/bin/activate
        ```
4.  **ライブラリのインストール**:
    仮想環境がアクティベートされた状態で、上記のインストールコマンドを実行します。
    ```bash
    pip install google-generativeai openai python-dotenv
    ```
    これで、プログラムを実行するために必要なすべてのライブラリがインストールされます。

## 3. 必要な入力ファイル

プログラムの実行には、以下のファイルが必要となります。

1.  **プログラム本体**:
    *   `make_textbook5.py`

2.  **INI設定ファイル**:
    *   **ファイル名**: `make_textbook5.ini` (または `--inifile` オプションで指定)
    *   **説明**: AIプロンプトのテンプレートなど、プログラムの動作に関する設定が記述されたファイルです。
    *   **例 (`make_textbook5.ini`)**:
        ```ini
        PROMPT_TEMPLATE_JA = あなたは{role}です。{field}の専門家として、以下の文字起こしとスライドから、教科書用Markdownとスライド用Markdownを{language}で生成してください。
        PROMPT_TEMPLATE_EN = You are a {role}. As an expert in {field}, generate textbook Markdown and slide Markdown in {language} from the following transcript and slides.
        ```

3.  **AI設定ファイル (環境変数または`.env`ファイル)**:
    *   **ファイル名**: `ai.env` (または `tkai_lib.read_ai_config` が読み込むファイル)
    *   **説明**: AIサービスのAPIキーと、必要に応じてデフォルトのAIモデル名が記述されたファイルです。これらの設定は環境変数としても設定可能です。
    *   **例 (`ai.env`)**:
        ```dotenv
        OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        GOOGLE_API_KEY="AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        OPENAI_MODEL="gpt-4o"
        GOOGLE_MODEL="gemini-1.5-pro"
        ```

4.  **文字起こしテキストファイル**:
    *   **ファイル名**: 任意 (例: `lecture.txt`)
    *   **指定方法**: `-i` または `--infile` オプションで指定。
    *   **内容**: 講義の文字起こし内容をプレーンテキストで記述したファイルです。

5.  **講義スライドMarkdownファイル (オプション)**:
    *   **ファイル名**: 任意 (例: `slide.md`)
    *   **指定方法**: `-im` または `--in_slide` オプションで指定。
    *   **内容**: 既存の講義スライドをMarkdown形式で記述したファイルです。指定しない場合でも動作しますが、AIは文字起こしテキストのみを基に生成します。

## 4. 実行後に生成される出力ファイル

プログラムが正常に実行されると、以下のファイルが生成されます。

1.  **教科書用Markdownファイル**:
    *   **ファイル名**: デフォルトでは、入力ファイル名（`-i`で指定されたファイル）のベース名に `_textbook.md` を付加したもの（例: `lecture_textbook.md`）。`-t` または `--textbook` オプションで出力ファイル名を変更できます。
    *   **内容**: AIが生成した、詳細な教科書形式のMarkdownテキスト。

2.  **スライド用Markdownファイル**:
    *   **ファイル名**: デフォルトでは、入力ファイル名（`-i`で指定されたファイル）のベース名に `_slide.md` を付加したもの（例: `lecture_slide.md`）。`-s` または `--slide` オプションで出力ファイル名を変更できます。
    *   **内容**: AIが生成した、講義スライドに適した簡潔なMarkdownテキスト。

3.  **AIメッセージログファイル**:
    *   **ファイル名**: 入力ファイル名（`-i`で指定されたファイル）のベース名に `.log` を付加したもの（例: `lecture.log`）。
    *   **内容**: AIサービスに送信されたメッセージの内容がJSON形式で記録されています。デバッグやプロンプトの検証に役立ちます。

## 5. コマンドラインでの使用例 (Usage)

### 基本構文

```bash
python make_textbook5.py [OPTIONS]
```

### 必須条件

-   `-i <infile>` (文字起こしテキスト) または `-im <in_slide>` (スライドMarkdown) の**どちらか一方、または両方**を必ず指定する必要があります。

### 例1: OpenAIを使用して日本語の教科書とスライドを生成

`lecture.txt` の文字起こしテキストと `slide.md` の既存スライドを基に、OpenAI API (`gpt-4o`がデフォルト) を使用して、日本語で「コンピュータ科学」の専門家として教科書とスライドを生成します。

```bash
python make_textbook5.py \
    -i lecture.txt \
    -im slide.md \
    -a openai \
    --lang ja \
    --field "コンピュータ科学" \
    --role "情報科学の専門家"
```

*   **入力**: `lecture.txt`, `slide.md`, `make_textbook5.ini`, `ai.env` (または環境変数)
*   **出力**: `lecture_textbook.md`, `lecture_slide.md`, `lecture.log`

### 例2: Google Geminiを使用し、出力ファイル名を指定して英語で生成

`transcript.txt` と `existing_slides.md` を入力として、Google Gemini API (`gemini-2.5-pro`がデフォルト) を使用し、英語で「Machine Learning」の専門家として教科書とスライドを生成します。出力ファイル名も明示的に指定します。

```bash
python make_textbook5.py \
    -i transcript.txt \
    --in_slide existing_slides.md \
    -a gemini \
    --lang en \
    --field "Machine Learning" \
    --textbook ml_textbook.md \
    --slide ml_slides.md
```

*   **入力**: `transcript.txt`, `existing_slides.md`, `make_textbook5.ini`, `ai.env` (または環境変数)
*   **出力**: `ml_textbook.md`, `ml_slides.md`, `transcript.log`

### 例3: 特定のINIファイルとモデルを指定

`my_lecture.txt` を入力とし、`my_prompts.ini` からプロンプト設定を読み込み、OpenAIの`gpt-3.5-turbo`モデルを使用します。

```bash
python make_textbook5.py \
    -i my_lecture.txt \
    --inifile my_prompts.ini \
    -a openai \
    --model gpt-3.5-turbo \
    --lang ja
```

*   **入力**: `my_lecture.txt`, `my_prompts.ini`, `ai.env` (または環境変数)
*   **出力**: `my_lecture_textbook.md`, `my_lecture_slide.md`, `my_lecture.log`

### 例4: ヘルプメッセージの表示

利用可能なオプションのリストと簡単な説明を表示します。

```bash
python make_textbook5.py --help
```

---