# Implementation Plan - 愛犬給餌量計算Webアプリ `Lab_gr`

愛犬（ラブラドール・レトリバー「ろみ」）の給餌量を計算・管理するためのStreamlit Webアプリケーション `Lab_gr` を構築します。

## Proposed Architecture & Component Overview

以下の構成に従い、プロジェクトルート `/Users/＊＊＊＊/lab_gr/` 配下にファイルを配置します。

```
text





lab_gr/

├── Lab_gr.py                      # Streamlitメインアプリケーション

├── requirements.txt               # 依存ライブラリ

├── README.md                      # プロジェクト概要・使い方・設定ガイド

├── .gitignore                     # Git除外設定 (.streamlit/secrets.toml等)

├── .antigravity/

│   └── rules.md                   # エージェント行動規範・プロジェクト開発ルール

├── .streamlit/

│   ├── config.toml                # Streamlit UIテーマ・基本設定

│   └── secrets.toml.example        # GCP Credentials & Sheet ID テンプレート

└── modules/

    ├── __init__.py                # パッケージ宣言

    ├── calc.py                    # RER / DER / フード量 / ブレンド計算ロジック

    ├── google_sheets.py           # Google Sheets (gspread) 連携＆キャッシュ (サンプルデータフォールバック付き)

    └── ui_helpers.py              # 免責事項表示 / メーター表示 / デザインヘルパー
```

------

## Detailed Specification per File

### 1. `.antigravity/rules.md`

- ワークスペースルートの維持と勝手なディレクトリ作成禁止
- `.streamlit/secrets.toml` 等の秘密情報のGitコミット禁止
- 計算ロジック・Google Sheets連携・UI表示のモジュール分離原則

### 2. `modules/calc.py`

- **RER (Resting Energy Requirement)**: $70 \times (\text{体重})^{0.75}$
- **DER (Daily Energy Requirement)**: $\text{RER} \times \text{ライフステージ係数}$
- **単一フード給餌量 (g)**: $(\text{DER} / \text{100gあたりkcal}) \times 100$
- **ブレンド給餌量計算**:
  - フードA割合 $x$ (%) または 目標カロリー密度 $C_{\text{target}}$ に対するブレンド比率計算 ($xA + (1-x)B = Target$)
  - フードAとフードBの重量 (g) およびそれぞれの摂取カロリー算出

### 3. `modules/google_sheets.py`

- `st.secrets["gcp_service_account"]` および `st.secrets["spreadsheet_id"]` によるGoogle Sheets接続
- `gspread` & `google-auth` を使用した `food_master` / `breed_master` 取得と `@st.cache_data` によるキャッシュ
- **フォールバック機能**: `secrets.toml` が設定されていない場合や接続失敗時に、ラブラドール向け標準フードおよびライフステージ係数のサンプルDataFrameを自動生成してアプリが即座に動作するように実装。

### 4. `modules/ui_helpers.py`

- 「※本アプリの計算結果は医療判断ではありません」等の注意書き表示
- Streamlit / Plotly を活用した視覚的カロリーメーター / ゲージ表示関数

### 5. `Lab_gr.py`

- **サイドバー**:
  - 愛犬プロフィール設定（体重kg, 年齢/ライフステージ, 1日の食事回数）
  - フード選択（単一または2種類ブレンド）
- **メイン画面**:
  - BIG KPI表示（推奨給餌量g, 1日必要カロリーDER, 1回あたり給餌量g）
  - Plotly ゲージチャート (DER vs RER, カロリーメーター)
  - 2種類フードブレンド計算トグルと対話的コントロール
  - データマスター確認エリア（Tabコンポーネントで `food_master` / `breed_master` 表示）

### 6. 設定・ドキュメントファイル

- `requirements.txt`: `streamlit`, `pandas`, `gspread`, `google-auth`, `plotly`
- `.streamlit/config.toml`: モダンで視認性の高いカスタムカラーテーマ
- `.streamlit/secrets.toml.example`: ダミーGCP認証情報とSpreadsheet ID例
- `README.md`: インストール方法・`secrets.toml`の設定手順・ローカル起動コマンド
- `.gitignore`: 秘密情報・Pythonキャッシュの除外設定

------

## Verification Plan

### Automated / Command Verification

1. `modules/calc.py` の単体動作テスト（PythonワンライナーでRER/DER/ブレンド計算が正しいか確認）
2. 依存関係インストールの確認（`pip install -r requirements.txt`）
3. Streamlit アプリ起動チェック（`streamlit run Lab_gr.py`）

### Manual Verification

1. UIのデザイン・配色・BIG KPI表示・Plotlyゲージグラフの描画確認
2. ブレンド計算トグルの切替動作とA/Bフード各グラム数の整合性確認
3. スプレッドシート未設定時のサンプルデータ動作確認

あなたはPython / Streamlit / Google Sheets連携に強いフルスタックエンジニアです。 現在開いているワークスペース `/MyVS/Gemini/lab_gr/` 直下に、愛犬ラブラドール・レトリバーの給餌量計算Webアプリ `Lab_gr` を構築してください。 ## 目的 愛犬ろみのご飯量を安全かつ継続的に管理するための「デジタル日用品」を作ります。 RER / DER計算、Googleスプレッドシート連携、2種類のドッグフードのブレンド計算、Streamlitダッシュボード表示を実装してください。 ## 作成してほしいファイル群 以下の構成に従い、各ファイルを生成・配置してください。 lab_gr/ ├── Lab_gr.py ├── requirements.txt ├── README.md ├── .gitignore ├── .antigravity/ │ └── rules.md ├── .streamlit/ │ ├── config.toml │ └── secrets.toml.example └── modules/ ├── __init__.py ├── calc.py ├── google_sheets.py └── ui_helpers.py ## 各ファイルの要件 1. `.antigravity/rules.md`: - 勝手なディレクトリ作成や、ワークスペース外でのGit操作を禁止するルールを記載。 2. `modules/calc.py`: - RER = 70 × (体重kg)^0.75 - DER = RER × ライフステージ係数 - 給餌量(g) = (DER / 100gあたりkcal) × 100 - 2種類のフードのブレンド比率計算ロジック（xA + (1-x)B = Target） 3. `modules/google_sheets.py`: - gspreadとgoogle-authを使用し、`st.secrets["gcp_service_account"]` から認証情報を読み込んで Googleスプレッドシート（food_master / breed_master）をPandas DataFrameとして取得・キャッシュする処理。 4. `modules/ui_helpers.py`: - 注意書き（医療判断ではない旨）およびカロリーメーター表示関数。 5. `Lab_gr.py`: - Streamlitメイン画面。 - サイドバーでプロフィール（体重・年齢・食事回数）およびフード選択（food_masterから自動取得）。 - メイン画面にBIG KPI（本日の推奨給餌量g）、ゲージグラフ（Plotly）、ブレンド計算トグルスイッチ、マスターデータ確認エリアを配置。 6. `requirements.txt`: - `streamlit`, `pandas`, `gspread`, `google-auth`, `plotly` 7. `.streamlit/secrets.toml.example`: - GCPサービスアカウント情報と `spreadsheet_id` のダミーサンプル。 まずは上記すべてのファイルを一括生成し、ローカルで `streamlit run Lab_gr.py` が実行できる状態にしてください。

9:33

愛犬ラブラドール・レトリバーの給餌量計算Webアプリ `Lab_gr` の実装計画を作成しました。