Files
windmill_workflow/CLAUDE.md
2026-04-04 09:15:09 +09:00

124 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Windmill Workflow プロジェクト
白皇集落営農組合 統合システム向けの Windmill ワークフロー管理リポジトリ。
## 環境
| 項目 | 値 |
|------|-----|
| Windmillサーバー | https://windmill.keinafarm.net |
| ワークスペース | `admins` |
| APIトークン | `wm-api.sh` に設定済み |
| Gitリモート | https://gitea.keinafarm.net/akira/windmill_workflow.git |
## 重要な制約
- **`wmill` CLIは使用不可**CE版のグローバルAPI認証制限`wm-api.sh` または curl で直接REST APIを叩く
- **フローの PUT更新は 405**Windmill CE版の制限→ DELETE してから POST で再作成する
- **`wmill.get_state()` はインラインフロースクリプトで永続化されない**→ 状態管理は必ず `wmill.get_variable()` / `set_variable()` を使う
- **`python3` コマンドは Windows環境で失敗する**→ curl の出力は grep等で直接処理する
## ディレクトリ構成
```
windmill_workflow/
├── flows/ # フロー定義JSON
│ ├── system_heartbeat.flow.json # Windmill自己診断フロー
│ ├── shiraou_notification.flow.json # 白皇集落 変更通知フロー
│ └── mail_filter.flow.json # メールフィルタリングフロー
├── docs/
│ └── shiraou/ # 白皇集落営農組合関連ドキュメント
│ ├── 19_windmill_通知ワークフロー連携仕様.md # API仕様書
│ └── 20_マスタードキュメント_Windmill通知ワークフロー編.md # マスタードキュメント
├── .agent/workflows/ # エージェント作業手順
│ ├── windmill-push.md # サーバーへのpush手順
│ ├── windmill-pull.md # サーバーからのpull手順
│ └── windmill-new-script.md # 新規スクリプト作成手順
├── wm-api.sh # Windmill REST APIヘルパー
└── wmill.yaml # wmill設定defaultTs: bun
```
## 登録済みワークフロー
| パス | 概要 | スケジュール |
|------|------|-------------|
| `f/app_custom/system_heartbeat` | Windmill自己診断 | なし(手動) |
| `f/shiraou/shiraou_notification` | 白皇集落営農 変更通知 | 5分毎JST |
| `f/mail/mail_filter` | メールフィルタリングIMAP→LLM→LINE | 10分毎JST予定 |
| `u/antigravity/git_sync` | Git同期 | 30分毎 |
## wm-api.sh コマンド一覧
```bash
./wm-api.sh version # サーバーバージョン確認
./wm-api.sh flows # フロー一覧
./wm-api.sh schedules # スケジュール一覧
./wm-api.sh get-flow <path> # フロー詳細取得
./wm-api.sh create-flow <json-file> # フロー作成
./wm-api.sh create-schedule <json-file> # スケジュール作成
./wm-api.sh run-flow <path> # フロー手動実行
./wm-api.sh job-status <job-id> # ジョブ状態確認
```
## フローのデプロイ手順
```bash
# 1. flows/*.flow.json を編集
# 2. 削除して再作成PUTは405のため
curl -sk -X DELETE \
-H "Authorization: Bearer qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh" \
"https://windmill.keinafarm.net/api/w/admins/flows/delete/<path>"
curl -sk -X POST \
-H "Authorization: Bearer qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh" \
-H "Content-Type: application/json" \
-d @flows/<file>.flow.json \
"https://windmill.keinafarm.net/api/w/admins/flows/create"
# 3. コミット&プッシュ
git add flows/<file>.flow.json
git commit -m "..."
git push origin main
```
## Windmill Variables
| 変数パス | Secret | 説明 |
|---------|--------|------|
| `u/admin/NOTIFICATION_API_KEY` | ✅ | shiraou APIキー |
| `u/admin/LINE_CHANNEL_ACCESS_TOKEN` | ✅ | LINE Messaging APIトークン |
| `u/admin/LINE_TO` | ✅ | LINE通知先IDユーザーまたはグループ |
| `u/admin/SHIRAOU_LAST_CHECKED_AT` | ❌ | 前回確認時刻(ワークフローが自動更新) |
| `u/admin/KEINASYSTEM_API_KEY` | ✅ | Keinasystem MAIL_API_KEY.envと同じ値 |
| `u/admin/KEINASYSTEM_API_URL` | ❌ | `https://keinafarm.net` |
| `u/admin/GEMINI_API_KEY` | ✅ | Google Gemini API キーLLM判定用 |
| `u/admin/GMAIL_IMAP_USER` | ✅ | GmailアカウントのIMAPユーザー名メールアドレス |
| `u/admin/GMAIL_IMAP_PASSWORD` | ✅ | GmailのアプリパスワードIMAPパスワード |
| `u/admin/MAIL_FILTER_GMAIL_LAST_UID` | ❌ | Gmail最終処理UIDワークフローが自動更新 |
| `u/admin/HOTMAIL_IMAP_USER` | ✅ | Hotmail IMAPユーザー名有効化時に登録 |
| `u/admin/HOTMAIL_IMAP_PASSWORD` | ✅ | Hotmail IMAPパスワード有効化時に登録 |
| `u/admin/MAIL_FILTER_HOTMAIL_LAST_UID` | ❌ | Hotmail最終処理UID有効化時に登録 |
| `u/admin/XSERVER_IMAP_USER` | ✅ | Xserver IMAPユーザー名有効化時に登録 |
| `u/admin/XSERVER_IMAP_PASSWORD` | ✅ | Xserver IMAPパスワード有効化時に登録 |
| `u/admin/MAIL_FILTER_XSERVER_LAST_UID` | ❌ | Xserver最終処理UID有効化時に登録 |
## マスタードキュメント
- [白皇集落 Windmill通知ワークフロー](docs/shiraou/20_マスタードキュメント_Windmill通知ワークフロー編.md)
## メールフィルタリング — アカウント有効化手順
Gmail → Hotmail → Xserver の順で段階的に有効化する。
### Gmail 初期設定
1. GoogleアカウントでIMAPを有効化Googleアカウント設定 → セキュリティ → アプリパスワード)
2. Windmill Variables に `GMAIL_IMAP_USER`, `GMAIL_IMAP_PASSWORD` を登録
3. フローを手動実行(初回: 既存メールスキップ、最大UIDを記録
4. スケジュール登録10分毎
### Hotmail/Xserver 追加時
1. Windmill Variables に対応する変数を登録
2. `flows/mail_filter.flow.json` の該当アカウントの `"enabled": false``true` に変更
3. フローを DELETE → POST で再デプロイ