API仕様書を読む前に、まずこの1ページ。6つの概念だけ覚えれば全体が読める。
Userユーザー アカウント本体。username・display name・avatar・bioを持つ。Userは単体ではコンテンツを持たない — 全てのコンテンツはGroup配下にある。 例: たかのり(@takanori)
↓
Groupグループ 記録を共有する「場」。1人用(個人Group)でも複数人用(家族・カップル・チーム)でもよい。全てのDiary・Financial Account・Trackerは必ずどれか1つのGroupに属する。メンバーには owner/admin/member の役割があり、さらにグループ独自のカスタム権限ロール(例: "Editor")も設定できる。 例: 「たかのりの個人スペース」「ベルリン旅行チーム」「家計簿(夫婦)」↓
Diary日記帳 1冊のノート。名前・アイコン・タイムゾーン・デフォルト通貨を持つ。「本棚」に並ぶ1冊、というイメージ。 例: 「旅行日記」「ヨーロッパ旅行」「食事記録」↓
Entryエントリー(1日分の記録) その日1日の記録。同じDiary・同じ日付でEntryは1つしか作れない(1日1Entry制約)。EntryはGitのリポジトリのように振る舞い、中身の実体は持たず「今どのCommitを指しているか」だけを覚えている。 例: 「2026年7月17日」のEntry↓
Commitコミット(編集履歴の1コマ) Gitのコミットと同じ考え方。編集するたびに、その時点の中身を丸ごとスナップショットとして保存する(差分ではなく全体)。過去のCommitは変更されず残り続けるので、いつでも見返せる・元に戻せる(Revert)。Entryは常に「今の見た目=一番新しいCommitの中身」を指す。 例: 「初回投稿」→「夕食の写真を追加」→「誤字修正」という3つのCommit↓
Itemアイテム(実際の中身) Commitの中に入っている、実際に画面に表示される中身。種類(type)ごとに別の情報を持つ。1つのCommitに複数種類のItemを同時に含められるのがWhatchaの特徴(例: 本文+食事+支出を1回の投稿で一緒に記録する)。 | Item種類 | 内容 | 紐づく機能 | | --- | --- | --- | |text| 本文(Markdown) | Diary本文 | |meal| 食事の写真・タイトル・値段 | What I Ate | |transaction| 支出/収入/振替の金額・口座 | Finance | |tracker| 睡眠時間・気分等の記録値 | Daily Tracker | |media| 写真・動画 | 共通 |↓
Branch / Merge Request — Entryの「もう1つの見せ方を試す」機能
通常Entryは1本の一直線なCommit履歴(main)を持つ。ただし1つのEntryに対してBranch(分岐)を作り、そこに別のCommitを積んでいくこともできる(例: 「元の思い出」と「見直した文章」を両方残しておきたい場合)。Branchで作った内容を本編(main)に取り込みたくなったらMerge Requestを作り、マージを実行するとBranch側のスナップショットがmainの新しいCommitとしてコピーされる。GitHubのPull Requestと同じ発想だが、実装は「衝突検出なしの単純な上書きコピー」であり、コードのマージほど複雑ではない。
[User] ユーザーが
[Group] グループ(家族・チーム・自分だけ)を作り
[Diary] その中に日記帳を作り
[Entry] 1日ごとにエントリーを書き
[Commit] 編集するたびに履歴(コミット)が積まれ
[Item] その中に本文・食事・支出・記録値が入っている
| 階層 | 代表的なAPI |
|---|---|
| Group | GET/POST /groups、GET /groups/{groupId} |
| Diary | GET/POST /diaries(自動的に自分のGroup配下に絞られる) |
| Entry | GET /entries?diaryId=...、POST /entries |
| Commit(更新) | PATCH /entries/{entryId} ← 呼ぶたびに新しいCommitが1つ増える |
| Commit履歴 | GET /entries/{entryId}/versions |
| Item(Finance) | POST /groups/{groupId}/finance/transactions(entryId必須 — 単独のTransactionは存在しない) |
| Branch / Merge | POST /entries/{entryId}/branches、POST /entries/{entryId}/merge-requests |
Diaryを直接消したら中のEntryも全部消える?
はい。DiaryもEntryも論理削除(status='deleted')で、DBから即座には消えない。ただし復元できるのはDiary・Entryそれぞれの作成者本人のみ。
Transaction(支出)を単独で作れる?
いいえ。TransactionはItemの一種であり、必ずどれかのEntryのCommitの中に入っている。Finance画面の「+」ボタンは、裏で「今日のEntry」を探すか無ければ自動作成してから、そのEntryにtransaction Itemを追加している。
1つのGroupに何人まで入れる? 1人でも使える?
1人でも使える(全員が自動的に持つ「個人用Group」がこれに当たる)。人数上限は実装上設けられていない。
CommitとVersionは違うもの?
同じもの。API上のパスは/versionsだが、DB上のテーブル名・概念はCommit。「Version = Commitの見え方」と考えてよい。
Branchを作らないと編集できない?
いいえ。普段の編集(PATCH /entries/{entryId})はBranchを意識せず、常にmainブランチに直接新しいCommitを積む。Branchは「別バージョンを試したい時だけ」使うオプション機能。
Whatcha REST API Endpoint Specification の分割ドキュメント群の入口ページ。詳細な各エンドポイント仕様は各章のドキュメントを参照。
最終更新: 2026-07-26