選択後は CSV インポートで自動上書きされません(手動確定)。
利用者
—
統合件数
職員
—
統合件数
事業所
—
登録件数
最終取込
—
—
最近の取込履歴
| 日時 | 拠点 | ファイル | ステータス | 詳細 |
|---|---|---|---|---|
| 読み込み中... | ||||
ZIPファイルアップロード
FirstCareV7.zip をここにドロップ
またはクリックして選択
Drive 自動取込
スケジューラー稼働中
Google Drive の監視フォルダを今すぐチェックして新しい ZIP を取込みます。
自動実行間隔
※ スケジューラーは設定間隔に満たない場合スキップされます。
FC エージェント管理
読み込み中...
手動アップロード同期
サーバー上の FC エージェントに対して、今すぐ ZIP を吐き出して Storage にアップロードするよう指示します。
エージェントが次回ポーリング(最大1分以内)で受け取り実行します。
取込履歴
| 日時 | 拠点 | ファイル | 所要時間 | ステータス | 詳細 |
|---|---|---|---|---|---|
| 読み込み中... | |||||
利用者マスター(統合)
「読み込む」をクリックしてください
職員マスター(統合)
「読み込む」をクリックしてください
freee 除外リスト
同期対象から外す freee 従業員の管理
読み込み中...
事業所マスター
「読み込む」をクリックしてください
職員変更履歴(入社・退職・改名)
「読み込む」をクリックしてください
職員DB × Workspace 照合
APIマニュアル読み取り専用エンドポイント
🔑
全リクエストにヘッダー
x-api-key: <MASTER_API_KEY> が必要です(Secret Manager: tougou-db-f9f9e)Jigyosho(1,220件+)
GEThttps://asia-northeast1-tougou-db-f9f9e.cloudfunctions.net/getJigyosho
Shokuin(78件+)
GEThttps://asia-northeast1-tougou-db-f9f9e.cloudfunctions.net/getShokuin
Riyousha(1,700件+)
GEThttps://asia-northeast1-tougou-db-f9f9e.cloudfunctions.net/getRiyousha
クイックスタート
<!-- headに追加 --> <script src="https://tougou-db-f9f9e.web.app/master-api.js"></script> // APIキーを初期化(Secret Manager: MASTER_API_KEY) MasterAPI.init("your-master-api-key"); // どこからでも呼び出せます const jigyosho = await MasterAPI.getJigyosho(); const shokuin = await MasterAPI.getShokuin(); const riyousha = await MasterAPI.getRiyousha(); // 氏名検索 const results = await MasterAPI.searchRiyousha("田中");
スキーマ: 事業所
| # | 列名 | 説明 | 種別 |
|---|---|---|---|
| 1 | 統合事業所ID | 主キー | PK |
| 2 | 事業所番号 | 10桁コード | 基本 |
| 3 | 名称 / 正式名称 | 名前 | 基本 |
| 4 | 住所_郵便番号〜その他2 | 住所 | 住所 |
| 5 | TEL / FAX / eメール | 連絡先 | 連絡先 |
| 6 | 担当_1〜2 | 担当者情報 | 連絡先 |
| 7 | 有効フラグ | 有効=1 | システム |
| 8 | レコード更新情報 | 最終更新 | システム |
スキーマ: 職員
| # | 列名 | 説明 | 種別 |
|---|---|---|---|
| 1 | 統合職員ID | 主キー | PK |
| 2 | 職員名称_姓 / 名 / 姓名 | 氏名 | 基本 |
| 3 | 性別 / 生年月日 | 属性 | 基本 |
| 4 | 自宅電話 / 携帯 / eメール | 連絡先 | 連絡先 |
| 5 | 介護支援専門員番号 | ケアマネ番号 | 介護 |
| 6 | 有効フラグ | 有効=1 | システム |
スキーマ: 利用者
| # | 列名 | 説明 | 種別 |
|---|---|---|---|
| 1 | 利用者ID / 統合利用者ID | 主キー(UUID) | PK |
| 2 | 姓 / 名 / 姓名 | 氏名 | 基本 |
| 3 | 統合職員ID / 担当者名 | 担当ケアマネ | FK |
| 4 | 性別 / 生年月日 | 属性 | 基本 |
| 5 | 住所_郵便番号〜その他2 | 住所 | 住所 |
| 6 | 電話 / 携帯 / FAX | 連絡先 | 連絡先 |
| 7 | 連絡先1〜3 | 緊急連絡先 | 連絡先 |
| 8 | 主治医 / 歯科医 / 薬局 | 医療 | 医療 |
| 9 | 保険者番号 / 被保険者番号 | 介護保険 | 介護 |
| 10 | 要介護状態区分等 | 要介護度 | 介護 |
| 11 | 拠点 | 所属拠点 | 基本 |
System Design Document
279 統合利用者DB — システム設計書
ファーストケア(FC)自動エクスポート → GCS → Cloud Functions → Firestore | 2026-04-12 更新
Node.js 22
Cloud Functions v2
Cloud Firestore
GCS(Cloud Storage)
fc_agent(Windows)
月額コスト(旧)
$255
Cloud Run 常時稼働
月額コスト(現在)
$1.62
fc_agent + Cloud Functions
削減率
▼99%
$253/月 削減
アーキテクチャ概要(2026-04-12 現在)
💻
ファーストケア
いわき・札幌
10分ごとにZIP自動エクスポート
C:\FcCsvExport\
C:\FcCsvExport\
→
🔨
fc_agent
Pub/Sub Pull型 / NSSMサービス
1時間ごとに起動
ZIPをGCSへアップロード
ZIPをGCSへアップロード
→
☁
GCS
Cloud Storage
firstcare-imports-v2/
kyoten/file.zip
kyoten/file.zip
GCSトリガー ↓ Cloud Functions
🔆
processFirstCareZipV2
Cloud Functions
ZIPを展開・CSV解析
keika_kiroku は即時委譲
keika_kiroku は即時委譲
→
⚡
processKeikaCsv
最優先処理
経過記録を約4秒で反映
差分チェックポイント管理
差分チェックポイント管理
→
🗄
Firestore
統合利用者DB
riyousha / records
hihosho / jigyosho
hihosho / jigyosho
稼働拠点(2026-04-12 現在)
| 拠点 | kyoten ID | 利用者数 | ZIP処理時間 | fc_agent サーバー | ステータス |
|---|---|---|---|---|---|
| いわき | iwaki | 240名 | 約15分/ZIP | Windows Server(いわき) | 稼働中 |
| 札幌 | sapporo | 1,567名 | 約30分/ZIP | Windows Server(札幌) | 稼働中 |
fc_agent — Windows自動アップロードエージェント2026-04-11 追加
動作フロー
- ファーストケアが10分ごとにZIPをエクスポート
- Cloud Scheduler が2時間ごとに Pub/Sub へ命令発行
- fc_agent_pubsub.ps1(NSSMサービス)が30秒ポーリングで命令を受信
- fc_agent が C:\FcCsvExport\ のZIPをGCSへアップロード(ZIPハッシュ比較で差分のみ処理)
- アップロード成功後にZIPを自動削除
- GCSトリガーで processFirstCareZipV2 が自動起動
設定ファイル(uploader_servers コレクション)
| 実行スケジュール | 2時間ごと(Cloud Scheduler → Pub/Sub) |
| ZIPパス | C:\FcCsvExport\*.zip |
| GCSバケット | firstcare-imports-v2 |
| 削除設定 | アップロード後に自動削除 |
| 設定管理 | Firestore: uploader_servers |
技術スタック
Agent(NEW)
fc_agent(PowerShell)
Cloud Scheduler + Pub/Sub / NSSMサービス常駐
Runtime
Cloud Functions v2
Node.js 22 / TypeScript
Trigger
GCS Storage トリガー
onObjectFinalized(v2)
Database
Cloud Firestore
NoSQL Document DB
Storage
Cloud Storage(GCS)
asia-northeast1 (東京)
Auth
Firebase Auth + Google
279279.net ドメイン制限
Cloud Functions 一覧
| 関数名 | トリガー | 役割 | 優先度 |
|---|---|---|---|
| processFirstCareZipV2 | GCS Storage | ZIPを展開、CSV分類、keika_kiroku を processKeikaCsv に委譲、他CSVをポリシーゲート経由で処理 | メイン |
| processKeikaCsv | 直接呼び出し | 経過記録(keika_kiroku)を最優先処理。差分チェックポイントで重複書き込みを防止。約4秒で完了 | 最優先 |
| csv_process_policy | Firestore設定 | keika_kiroku以外のCSVの処理間隔を制御するポリシーゲート | 設定 |
| getUploaderConfig | HTTP | fc_agent がGCSアップロード先・設定を取得するためのAPI | — |
Firestore コレクション一覧(2026-04-12 現在)
| コレクション | Doc ID | 説明 | ソース | 種別 |
|---|---|---|---|---|
| riyousha | FC UUID | 統合利用者(2拠点統合、名寄せ済み) | riyousha.csv | Master |
| records | keika_kiroku_{uuid}_{kyoten}_{ts} | 経過記録(履歴保持。上書きしない設計) | keika_kiroku.csv | 記録 |
| hihosho | {uuid}_{kyoten}_{num} | 被保険者証 | hihosho.csv | 介護 |
| jigyosho | PK_サービス事業者 | 事業所マスタ | jigyosho.csv | Master |
| shokuin / unified_shokuin | {code}_{seq} | 職員マスタ(統合職員) | shokuin.csv | Master |
| import_logs | auto | インポートログ | — | システム |
| import_checkpoints | kyoten_csv | keika差分チェックポイント(重複防止) | — | システム |
| csv_process_policy | default | CSV処理ポリシー・間隔設定 | — | システム |
| kyoten_id_mapping | auto | 拠点ローカルID ↔ UUID 対応表 | — | システム |
| uploader_servers | server-id | fc_agent サーバー設定(ZIP経路・スケジュール) | — | システム |
| kyoten_config | sapporo / iwaki | 拠点設定マスタ | — | システム |
セキュリティ & 認証
| レイヤー | 方式 | 詳細 |
|---|---|---|
| Web Console | Firebase Auth + Google OAuth | 279279.net ドメイン制限 |
| API Endpoints | x-api-key ヘッダー | Secret Manager 管理(MASTER_API_KEY) |
| CORS | applyCors() ホワイトリスト | 279279.net / tougou-db-f9f9e.web.app のみ |
| GCS(Storage)Rules | Firebase Security Rules | 279279.net ユーザーのみ firstcare-imports-v2/** へ書き込み可 |
| fc_agent 認証 | Firebase Service Account | Windows Server に SA キーを配置、GCS直接アップロード |
リポジトリ
GitHubytsukuda4470/master-db-cloud-sync
Branchmain
GCPプロジェクトtougou-db-f9f9e
Regionasia-northeast1 (東京)
fc_agent格納scripts/fc_agent/(PowerShell)
拠点一覧ファーストケアの拠点設定
読み込み中...
アップローダー管理Windows Server → Cloud Storage 自動アップロード
読み込み中...
アップロード履歴
各サーバーの最近のアップロード状況
| 日時(JST) | サーバー | 拠点 | ステータス | ファイルサイズ | 詳細 |
|---|---|---|---|---|---|
| 読み込み中... | |||||
管理者設定コンソール管理者の追加・削除
管理者のみが システム設計書 / 拠点設定 / 管理者設定 にアクセスできます。
| メール | ロール | 追加者 | 操作 |
|---|---|---|---|
| 読み込み中... | |||
freee 認証管理
再デプロイ不要でトークンを更新できます
Google Chat 通知設定
取込・エラー発生時のチャット投稿ルールを設定
確認中...
投稿タイミング
Webhook URL
Google Chat の受信 Webhook URL(変更する場合のみ入力)
※ 空欄のまま保存すると、現在登録済みのURLはそのまま保持されます。上書きされません。
※ 空欄のまま保存すると、現在登録済みのURLはそのまま保持されます。上書きされません。
2026-04-12 データモデル最新状況
2026-04-10: pk_sapporo / pk_iwaki →
firstcare_pks: { sapporo, iwaki }全拠点のPKを1フィールドに集約。新拠点追加時はコード修正不要。
2026-04-11: records コレクション追加(経過記録)
keika_kiroku_{uuid}_{kyoten}_{timestamp} 形式。上書きせず履歴を保持。import_checkpoints で差分管理。
🗂 Firestore ER図統合利用者DBの全コレクション構造
erDiagram
kyoten_config {
string id PK "sapporo / iwaki"
string name "表示名"
number code "FC ID種類ID"
string drivePattern "ZIPファイル名"
boolean active "取込ON/OFF"
}
riyousha {
string id PK "FC UUID"
string shimei "氏名"
string birthdate "生年月日"
object firstcare_pks "拠点別PK map"
string source "fc/merged/ss_only"
string ss_riyoushaId "旧SS doc ID"
}
records {
string id PK "keika_{uuid}_{kyoten}_{ts}"
string riyoushaId "利用者UUID"
string kyoten "拠点ID"
string csvType "keika_kiroku"
string content "記録内容"
string importedAt "取込日時"
}
hihosho {
string id PK "{uuid}_{kyoten}_{num}"
string riyoushaId "利用者UUID"
string kyoten "拠点ID"
string hokenNo "保険番号"
}
unified_shokuin {
string id PK "{code}_{seq}"
string shokuinName "職員名"
string email "Workspace照合キー"
string primary_kyoten "主所属拠点"
object app_roles "アプリ別権限"
}
jigyosho {
string id PK "PK_サービス事業者"
string jigyoshoName "事業所名"
string jigyoshoCode "介護保険番号"
string kyoten "拠点ID"
}
import_logs {
string id PK "auto"
string kyoten "拠点ID"
string fileName "ZIPファイル名"
string status "dispatched/completed/error"
string importedAt "取込日時"
}
import_checkpoints {
string id PK "{kyoten}_{csvType}"
string lastTimestamp "最終処理タイムスタンプ"
string lastRowId "最終行ID"
}
csv_process_policy {
string id PK "default"
number intervalMinutes "処理間隔(分)"
boolean enabled "有効/無効"
}
uploader_servers {
string id PK "server-id"
string name "サーバー名"
string schedule "実行スケジュール"
array kyotenPaths "拠点ZIPパス配列"
boolean deleteAfterUpload "アップロード後削除"
}
kyoten_id_mapping {
string id PK "auto"
string kyoten "拠点ID"
string localId "旧SS doc ID"
string unifiedId "新FC doc ID"
string csvType "riyousha/shokuin"
}
kyoten_config ||--o{ riyousha : "firstcare_pks key"
kyoten_config ||--o{ unified_shokuin : "primary_kyoten"
kyoten_config ||--o{ jigyosho : "kyoten"
kyoten_config ||--o{ import_logs : "kyoten"
kyoten_config ||--o{ kyoten_id_mapping : "kyoten"
kyoten_config ||--o{ records : "kyoten"
kyoten_config ||--o{ hihosho : "kyoten"
kyoten_config ||--o{ import_checkpoints : "kyoten"
riyousha ||--o{ kyoten_id_mapping : "unifiedId"
riyousha ||--o{ records : "riyoushaId"
riyousha ||--o{ hihosho : "riyoushaId"
★ 新フィールド(firstcare_pks)
旧フィールド廃止予定(pk_sapporo/pk_iwaki)
参照キー
現在の設定による月額試算
$–
(¥–)
Cloud Run 実行コスト($0.0000295/秒・512MB)の試算値
ZIP処理 月間回数
–
月間処理時間
–
現状比
–
⬆ ZIPアップロード間隔(fc_agent)
Windowsサーバーから GCS へのアップロード頻度
※ fc_agent のスケジュールタスク設定と合わせてください
現在の設定(Firestore)
読み込み中...
📋 CSV種別ごとの処理間隔
ZIPが届いても、設定間隔未満なら処理をスキップします
| CSV種別 | 説明 | 処理間隔 | 有効 | 最終処理 | 次回処理予定 | コスト寄与 |
|---|---|---|---|---|---|---|
| 読み込み中... | ||||||
💰 コスト内訳
設定変更に連動してリアルタイム更新
🗄
Technical Design Document
279 統合利用者DB — 設計資料
ファーストケア自動エクスポート → fc_agent → GCS → Cloud Functions → Firestore 統合アーキテクチャ | 2026-04-12 更新
作成: 次田 / Claude
相談相手: 本田エンジニア
CONFIDENTIAL
🌐 システム全体像
flowchart LR
SCHED[Cloud Scheduler\n2時間ごと]
PUBSUB[Pub/Sub\nfc-agent-commands]
SCHED -->|命令発行| PUBSUB
subgraph WIN[Windows Server 279_SVR\n札幌・いわき両拠点担当]
FC_IWA[ファーストケア いわき\n利用者240名]
FC_SAP[ファーストケア 札幌\n利用者1567名]
AGENT[fc_agent_pubsub.ps1\nNSSMサービス・30秒ポーリング]
FC_IWA -->|ZIP生成| AGENT
FC_SAP -->|ZIP生成| AGENT
end
PUBSUB -->|pullAgentCommand API経由| AGENT
GCS[(GCS\nfirstcare-imports-v2)]
AGENT -->|札幌ZIP upload| GCS
AGENT -->|いわきZIP upload| GCS
subgraph CF[Cloud Functions]
ZIP_PROC[processFirstCareZipV2\nGCS Trigger]
KEIKA[processKeikaCsv\n最優先 約4秒]
ZIP_PROC -->|keika委譲| KEIKA
end
GCS -->|Storage Trigger| ZIP_PROC
subgraph FS[Firestore 統合DB]
RIY[riyousha\n利用者]
REC[records\n経過記録 履歴保持]
HIH[hihosho\n被保険者証]
SHO[shokuin\n職員]
JIG[jigyosho\n事業所]
CHK[import_checkpoints\n差分管理]
POL[csv_process_policy\nポリシーゲート]
LOG[import_logs\n取込履歴]
end
ZIP_PROC --> RIY
ZIP_PROC --> SHO
ZIP_PROC --> JIG
ZIP_PROC --> HIH
ZIP_PROC --> LOG
KEIKA --> REC
KEIKA --> CHK
subgraph APPS[利用アプリ]
CARENOTE[CareNote]
SOUDAN[新規相談受付]
JIGYOSHO_APP[事業所検索]
end
RIY --> CARENOTE
REC --> CARENOTE
RIY --> SOUDAN
SHO --> CARENOTE
JIG --> JIGYOSHO_APP
—
統合利用者数(riyousha)
—
統合職員数(unified_shokuin)
—
事業所数(jigyosho)
2
稼働拠点数(kyoten_config)