7日目の振り返りを踏まえてのネクストアクション

以下の内容は、方針、使用技術、ディレクトリ構成、開発フローを含む改訂版の開発マニュアルです。これにより、開発者がプロジェクトの全体像を把握しやすく、スムーズに作業を進められるようになります。

---

## **開発マニュアル（改訂版）**

### **1. 開発方針**

1. **段階的に開発**:
   - チャットボット開発を段階的に進め、最初にプロトタイプを作成、その後に必要な機能や最適化を追加。
   
2. **シンプルで可読性の高いコード**:
   - 初学者向けのシンプルで直感的なコードを心がけ、ドキュメントやコメントで理解を促進。

3. **テストと自動化**:
   - 各段階ごとにテストを行い、自動化スクリプトやホットリロードを積極的に活用。
   
4. **開発環境と本番環境での切り分け**:
   - 詳細なログを開発環境で出力し、本番環境では簡潔で重要なメッセージのみを表示。

5. **効率的なエラー管理**:
   - 開発中のエラーは詳細なログを提供し、本番では重要なエラーのみを表示。

---

### **2. 使用技術**

- **Streamlit**: ユーザーインターフェースの作成。直感的で簡単なUIを提供。
- **FastAPI**: バックエンドAPIの開発。高性能で使いやすいREST APIを作成。
- **Chroma**: ベクトルデータベースを利用し、検索と情報抽出を行う。
- **Docker**: 開発環境のコンテナ化により、開発者全員が一貫した環境で作業可能。
- **python-dotenv**: `.env`ファイルで環境変数を管理、セキュリティ向上。
- **uvicorn**: FastAPIのサーバーを実行し、ホットリロード機能を提供。

---

### **3. ディレクトリ構成**

プロジェクトのディレクトリ構成は以下の通りです：

```text
your_project_directory/
│
├── app/                # アプリケーションコード
│   ├── __init__.py
│   ├── main.py         # FastAPIアプリケーション
│   └── chatbot.py      # チャットボットに関するロジック
│
├── assets/             # 静的ファイル（画像、データファイルなど）
│
├── .env                # 環境変数ファイル（機密情報）
├── Dockerfile          # Docker設定ファイル
├── docker-compose.yml  # Docker Compose設定ファイル
├── requirements.txt    # 必要ライブラリとバージョン
└── .gitignore          # Gitで管理しないファイル
```

- **app/**: アプリケーションコードを格納するディレクトリ。FastAPIのエンドポイントや、チャットボットのロジックをここに実装。
- **assets/**: 画像やCSVファイルなど、静的なデータを格納する場所。
- **.env**: APIキーやデータベースURLなどの機密情報を環境変数として格納するファイル。
- **Dockerfile**: アプリケーションをコンテナとして動かすための設定ファイル。
- **docker-compose.yml**: 複数のコンテナを一括管理するための設定ファイル。
- **requirements.txt**: 必要なPythonパッケージとそのバージョンを記述したファイル。

---

### **4. 開発フロー**

#### **4.1 開発の準備**

1. プロジェクトディレクトリに移動：
   ```bash
   cd your_project_directory
   ```

2. 仮想環境を作成し、アクティブ化：
   ```bash
   python -m venv .venv
   source .venv/bin/activate  # Mac/Linux
   .venv\Scripts\activate     # Windows
   ```

3. 必要なパッケージをインストール：
   ```bash
   pip install -r requirements.txt
   ```

4. 環境変数の設定：
   `.env`ファイルを作成し、必要な環境変数（APIキーなど）を設定。

#### **4.2 開発プロセス**

1. **FastAPIエンドポイントの作成**:
   - `app/main.py`にAPIエンドポイントを定義。
   - 例：
     ```python
     from fastapi import FastAPI

     app = FastAPI()

     @app.get("/chat")
     def get_chat_response(query: str):
         return {"response": "This is a sample response to your query"}
     ```

2. **Streamlit UIの作成**:
   - `app/chatbot.py`でStreamlit UIを作成。
   - 例：
     ```python
     import streamlit as st

     st.title('Chatbot Interface')

     user_input = st.text_input('Ask me something:')
     if user_input:
         st.write(f"Chatbot says: {get_chat_response(user_input)['response']}")
     ```

3. **データベースの設定**:
   - `Chroma`を利用してベクトルデータベースをセットアップし、情報を検索・格納。
   - 必要なモデルやデータを`chatbot.py`でロード。

4. **テストの作成**:
   - 各機能の動作確認をテストコードで行います。
   - 例えば、FastAPIのテストを作成：
     ```python
     from fastapi.testclient import TestClient

     client = TestClient(app)

     def test_get_chat_response():
         response = client.get("/chat?query=Hello")
         assert response.status_code == 200
         assert "response" in response.json()
     ```

5. **開発環境でのホットリロード**:
   - FastAPIサーバーをホットリロードモードで起動。
   - ```bash
     uvicorn app.main:app --reload
     ```

#### **4.3 Docker化**

1. Dockerfileとdocker-compose.ymlを用いて、開発環境をコンテナ化。
2. コンテナをビルドし、起動：
   ```bash
   docker-compose up --build
   ```

#### **4.4 本番環境へのデプロイ**

1. 本番環境用にログレベルを変更し、簡潔なエラーメッセージを出力。
2. 最終テストを行い、デプロイ準備完了。

---