Appearance
アカウントID・コード仕様
最終確認: 2026-08-18
1. 適用範囲
本仕様は、本番運用で発行する児童、保護者、職員の公開IDおよびログインIDに適用する。 データベースの数値主キー、user_uid、guardian_uidなどの内部識別子は変更しない。
2. 法人コード・施設コード
| コード | 形式 | 文字種 | 容量 |
|---|---|---|---|
| 法人コード | 3文字 | 英数大文字 | 31^3 = 29,791 |
| 施設コード | 2文字 | 英数大文字 | 31^2 = 961(システム全体) |
使用可能文字は次の31文字とする。
text
ABCDEFGHJKMNPQRSTUVWXYZ23456789誤入力防止のため、I、L、O、0、1は使用しない。コードはAPIで大文字に正規化し、既存コードの再利用は禁止する。現行DBでは施設コードをシステム全体で一意に管理するため、法人が異なっても同じ施設コードは使用しない。
3. 初期パスワード
初期パスワードは8文字とし、大文字・小文字・数字・記号を各1文字以上含める。パスワードはIDと別経路で通知し、初回ログイン後の変更を必須とする。既存のクライアントストレッチ済み128文字値は移行互換のため受け付ける。
4. 公開ID・ログインID
text
C + 法人コード3 + 施設コード2 + ランダム4 # 児童
P + 法人コード3 + 施設コード2 + ランダム4 # 保護者
S + 法人コード3 + 施設コード2 + ランダム4 # 職員いずれも10文字で、ランダム部分は制限英数4文字とする。1職種・1法人・1施設あたりの発行空間は31^4 = 923,521件である。年間100件の発行を想定しても、理論上は約9,235年間に相当する。
child_id、guardian_id、staff_idは、原則として対応するlogin_idと同じ値を保持する。既存のデモ用・移行前IDは互換のため残すが、新規発行では本仕様を使用する。
新規登録時にIDを手入力する場合も、自動発行と同じ形式で、登録対象の法人コード・施設コードに一致していなければ登録を受け付けない。既存アカウントのログイン互換性とは分離し、新規IDの発行では旧形式を再利用しない。
実装上は、APIの職員・保護者・児童登録、Providerの法人初期管理者登録、Managementのオフライン児童登録を同じ規則で検証・発行する。デモ生成スクリプトと各PWAのモックデータも、法人コードD3M・施設コードA2等を含む10文字IDを使用する。
5. 一意性と衝突処理
乱数だけで一意性を保証しない。APIが発行候補を生成し、DBの一意制約付き登録に成功した時点で確定する。
- APIが暗号学的乱数で候補を生成する。
- 発行前に既存IDを確認する。
- DBの
UNIQUE制約付きで登録する。 - 競合した場合のみ、通知前に再生成する。
既に利用者へ通知したIDは変更・再利用しない。複数端末のオフライン発行では、オンライン復帰時の同期処理でも同じ一意性検証を行う。
6. 将来拡張
使用率が高くなった場合は旧IDを変更せず、新規発行を拡張形式へ切り替える。
text
C + 法人コード3 + 施設コード2 + ランダム5
P + 法人コード3 + 施設コード2 + ランダム5
S + 法人コード3 + 施設コード2 + ランダム5制限英数5文字は31^5 = 28,629,151件である。旧形式と新形式を同時に認証できるようにし、旧IDの再利用は行わない。
7. 運用上の注意
- IDは認証秘密情報ではないため、パスワード、レート制限、アカウントロックを別途適用する。
- 転施設時にIDを変更するか、旧IDを維持するかを契約・履歴要件と合わせて決定する。
- 1人の職員が複数施設に所属する場合は、施設ごとの所属ID発行または施設横断アカウントの別設計が必要である。
8. 既存環境の移行
**現行のdb:migrate:account-codesを本番データへ実行してはいけない。**このスクリプトが変更するのはOrganization.codeとFacility.codeだけで、既存のlogin_id、child_id、guardian_id、staff_idは書き換えない。
本仕様のログインIDは法人コード・施設コードを内部に含み、法人コードを省略したログインではAPIがログインIDから法人コードを解決する。そのため、コードだけを変更すると、旧IDが新しい法人を解決できずログイン不能またはスコープ不一致になる可能性がある。既存環境では、次のいずれかを実装・検証するまでコード移行をリリース作業に含めない。
- 既存IDの一括再発行と、利用者への安全な再通知。ログインIDを変更する場合は、ログインIDをソルトに使うクライアントストレッチ済みパスワードの再設定も同時に行う。
- 旧法人・施設コードを認証時だけ解決する互換エイリアス。新規発行IDには新コードだけを使用し、旧コードは再利用しない。
- 旧IDを維持したまま
organization_codeを必須入力にする移行期間。ただし、Guardianの正式UI方針(法人コード入力不要)とは別のレガシー対応画面になる。
既存環境の移行を実施する場合は、DBバックアップ、対象IDと所属の事前照合、ログイン・同期の受入テスト、ロールバック手順を必須とする。現時点のコマンドはローカル検証用に限定する。
bash
cd app/api
# 現行スクリプトは本番実行不可。実行前に上記の移行方式を実装・承認する。
npm run db:migrate:account-codes