/ 第2章
Chapter 02

絶対に知っておきたい
データベースの基礎と「キー」

AppSheetは見た目はノーコードですが、内部では常にデータ構造の上で動いています。
この章では、初心者が最もつまずきやすい行・列・レコード・キーの関係を整理し、 「なぜキーが重要なのか」を本質から理解できるようにします。

この章のゴール

AppSheetの元データを「ただの表」ではなく、 アプリが読み取るための構造化データとして見られるようになることです。

最重要テーマ

キーは、1件1件のデータを取り違えないための土台です。 ここを曖昧にしたまま進むと、後の章で必ず苦しくなります。

よくある誤解

「名前で識別すればいい」「行番号で十分」「見えている表とAppSheetの認識は同じ」。 これらは初心者が持ちやすい危険な思い込みです。

なぜ最初にデータ構造を学ぶのか

AppSheetでは、画面づくりや自動化の前に、まず元データの形が正しく整っている必要があります。 どれだけ画面がきれいでも、裏側のデータ構造が曖昧だと、更新・削除・参照のすべてが不安定になります。

特に第2章で学ぶ「キー」は、後のRef、SELECT、Actions、Automationにまで影響する中心概念です。

この章で身につける理解
・データベース、テーブル、行、列の違い
・AppSheetが1件のデータをどう認識するか
・キーが必要な理由
・UNIQUEID() が推奨される理由
・Row Number をキーにしてはいけない理由

データベースの基本構造

AppSheetは、GoogleスプレッドシートやExcelの表を読み込み、それをアプリの元データとして扱います。
ただし、AppSheetはその表を人間のように「なんとなく」見ているわけではありません。 列の意味、行のまとまり、どの値が識別子かを明確に定義してデータを理解しています。

そのため、表を見る時も「上から順に書いてある一覧」としてではなく、 1列ごとに意味を持ち、1行ごとに1件の情報がまとまっている構造として見ることが、アプリ開発の第一歩です。

テーブル:従業員
列 (カラム)
列 (カラム)
列 (カラム)
先の章で応用
行(ロウ)
行(ロウ)
従業員ID
キー(Key)
氏名
部署
プロフィール
a1b2c3d4
山田 太郎
営業部
山田 太郎 (営業部)
e5f6g7h8
鈴木 花子
開発部
鈴木 花子 (開発部)
...
...
...
...
データベース

データ全体の器です。スプレッドシートやExcel、外部DBがこの役割を担います。

テーブル

1つのテーマ(社員、案件、申請)ごとにまとまった「表」のことです。

列 (カラム)

情報の種類です。氏名、部署など、縦の並びで「何の値か」を表します。

行 (ロウ)

レコードとも呼ばれます。社員1人や申請1件など、1セットのデータ単位です。

初心者向けのイメージ

たとえば「従業員テーブル」なら、1行が1人の従業員で、1列がその社員に関する特定の情報(氏名、部署など)です。
AppSheetは「従業員というまとまり」を行単位で認識して扱うため、どの行が誰なのかを一意に判別できる「目印」が必要になります。

【最重要】キーの概念

キー(Key)とは、テーブル内の各行を一意に特定するための値です。 「この1行は誰の情報か」「どのレコードを更新するのか」をAppSheetが判断するための唯一の基準になります。

名前や部署のような「人が読むための値」と違って、キーは「システムが迷わないための値」です。 したがって、重複しないこと途中で変わらないことが絶対条件になります。

キー(Key)が正常な状態

たとえば ID が a1b2c3d4 の従業員を編集すると、AppSheetは迷わずその1件だけを確実に更新できます。
  • 同姓同名がいても絶対に取り違えない
  • データの並び替えをしても関係が壊れない
  • 他テーブルからも正確に参照(Ref)できる

キー(Key)が不適切な状態

同じ ID が2行に存在したり、値が途中で変わったりすると、どの行を対象にすべきかAppSheetが判断不能になります。
  • 全く関係ない行を誤って上書き・削除してしまう
  • 参照(Ref)していたデータが迷子になる
  • アプリの同期エラーが頻発する原因になる

なぜ「氏名」をキーにしてはいけないのか

一見すると「氏名」をキーにできそうに思えますが、実務では同姓同名が起こり得ます。 また、表記揺れや改姓、入力ミス修正などによって値が変わる可能性もあります。

人間にとって「わかりやすい値」と、システムにとって「安全な値(キー)」は別物であることを理解しましょう。

キー(Key)に向く値の条件
絶対に重複しない(一意性)
後から絶対に変わらない(不変性)
1行に必ず1つ存在し、空っぽでない(実在性)

推奨キー UNIQUEID() vs NGキー Row Number

AppSheetでは、キーを自分で明示しないと、行番号である Row Number が暫定的なキーとして使われることがあります。 しかし、実運用でこれをキーにするのは非常に危険です。 基本方針として、新規レコードには UNIQUEID() で生成された専用IDを持たせるのが鉄則です。

なぜ Row Number を使ってはいけないのか

スプレッドシートで行を削除したり、並び替えたりすると、行番号は簡単にズレてしまいます。

すると、AppSheetが裏側で覚えていた「この行がこのレコード」という紐付けが狂い、「Aさんのデータを更新したつもりが、Bさんのデータが書き換わった」という致命的なトラブルの原因になります。

キーは「見た目の位置」ではなく、レコードそのものに「一生固定された目印」でなければなりません。

正しい設定の基本:UNIQUEID() を使う

専用のID列を作り、その列の Initial valueUNIQUEID() という式を設定します。 これにより、データが新しく追加されるたびに、AppSheetが重複のないランダムな文字列(例: 8a4b2cde)を自動で生成してくれます。

Data > Columns > Initial value
UNIQUEID()
比較項目
推奨: UNIQUEID()
非推奨: Row Number
生成タイミング レコード作成時に一度だけ生成 スプシ上の位置で動的に決まる
値の安定性 一度決まれば一生変わらない 行の追加・削除で簡単に変わる
安全性 非常に高い 極めて危険 (データ破損リスク)
推奨度 事実上の標準。迷わずこれ デバッグ以外での使用は厳禁

UNIQUEID() の良さ

人間には読みにくい値でも、システムにとっては安定した識別子になります。 見た目の分かりやすさより、安全性を優先するのがキー設計です。

補足:自然キーという考え方

社員番号や商品コードのように、もともと重複せず変わらない値が存在するなら、それをキーに使える場合もあります。 ただし「本当に変わらないか」を厳しく確認する必要があります。

実際の設定の考え方

第2章ではまだ複雑な式や参照関係までは扱いませんが、キー列をどう作るかの考え方はここで押さえておく必要があります。 まずは「専用のID列を用意する」という型を覚えてください。

キー(Key)列を用意する基本手順
Best Practice
1

元データ(スプレッドシート等)にID列を作る

スプレッドシートの1列目に、ID従業員ID のような列を追加します。 この列は「名前」とは別に、システムが確実にレコードを識別するために使用します。

2

AppSheet側でその列を Key に指定する

作成したID列の Key 設定をオンにします。
これにより、AppSheetはこの列の値を「レコードの唯一の索引」として扱うようになります。

3

Initial value に UNIQUEID() を入れる

新しいデータが追加される際、自動でユニークな値が入るように設定します。
手動入力を避けることで、ヒューマンエラーによるID重複を根本から防ぎます。

4

「表示する名前」は Label で設定する

ID自体は「Key」として扱い、画面に表示する名前などは「Label」に任せます。 「識別(Key)」と「表示(Label)」の役割を分けるのがAppSheet設計のコツです。

実務で役立つ視点

後で Ref を使って別テーブルとつなぐ時も、Automation で対象レコードを特定する時も、土台にあるのはキーです。 第2章は地味に見えますが、後半の学習の理解度を大きく左右する章です。

この段階で避けたい設計

氏名やメールアドレスのような「意味のある値」を安易にキーにすること、 また Row Number に頼ることです。見た目では問題なく見えても、後で壊れやすい設計になります。

第2章のまとめ

AppSheetで安全にデータを扱うために、キー(Key)の理解は避けて通れません。 キーは人に見せるための値ではなく、システムが迷わずレコードを識別するための「一生変わらない背番号」です。

重複やズレが起こりやすい値(Row Numberなど)ではなく、UNIQUEID() などの安定した識別子を設計の土台に据えましょう。

この正しい土台があるからこそ、次章で学ぶ「データ構造の変更」や「高度なリレーション」を安全に行うことができるようになります。