AppSheetでユーザーごとに画面を切り替える方法|USEREMAIL関数とSliceの設定

AppSheet

AppSheetで「担当者には自分の案件だけを見せたい」「管理者と一般社員でメニューを分けたい」と考えても、USEREMAIL関数やSliceをどこに設定すればよいのか迷いやすいものです。画面を切り替える基本は、ログイン中のメールアドレスを取得し、その情報を使って表示するデータとビューを判定することです。ただし、画面を隠す設定と、データそのものを保護する設定は役割が異なります。初心者でも実装できる基本手順から、部署別・権限別の応用、実務で起こりやすい失敗、セキュリティ面の注意点まで順番に解説します。

蒼宮 ルシア
蒼宮 ルシア

👑担当者ごとに専用画面を作るなら、同じアプリを何個も複製する必要がありますの?

AI執事
AI執事

🤖USEREMAIL関数とSliceを使えば、1つのアプリ内で表示内容を切り替えられます。

蒼宮ルシア
蒼宮ルシア

👑管理者には全件、一般社員には自分の担当分だけ見せることもできますのね。

AI執事
AI執事

🤖可能です。ただし、画面を隠す設定だけで機密データを守ろうとしないことが大切です。

AppSheetでユーザーごとに画面を切り替える仕組み

AppSheetでユーザーごとに画面を切り替える場合は、USEREMAIL関数、Slice、ビューのShow ifを組み合わせます。機密性のあるデータを扱う場合は、さらにセキュリティフィルタを設定します。

USEREMAIL()は、現在AppSheetにサインインしているユーザーのメールアドレスを取得する関数です。ユーザーがサインインしていない場合は空白になるため、ユーザー別の表示を行うアプリではサインイン必須の設定が前提になります。

機能主な役割設定例
USEREMAIL()ログイン中のユーザーを特定するuser@example.comを取得する
Slice条件に合う行や列を絞り込む自分が担当する案件だけを表示する
ビューのShow ifナビゲーションに表示する画面を切り替える管理者メニューを管理者だけに表示する
セキュリティフィルタ端末へ取得するデータを制限する他の担当者のデータを取得させない

たとえば、営業案件テーブルに「担当者メール」列がある場合、ログイン中のメールアドレスと担当者メールが一致する行だけをSliceに含めます。そのSliceを一般社員用ビューのデータとして指定すれば、自分の案件だけが並ぶ画面を作れます。

蒼宮ルシア
蒼宮ルシア

👑USEREMAILは利用者を判定し、Sliceは表示データを整え、Show ifはメニューを分けます。役割を混同せず、順番に設定するのが成功の近道ですわ。

設定前に用意するデータ構成

ユーザー別の画面切り替えを安定して運用するには、先にデータ側の設計を整えます。おすすめは、利用者を管理する「ユーザー」テーブルと、案件や日報などを保存する業務テーブルを分ける構成です。

ユーザーテーブルに必要な列
列名用途
ユーザーIDText各利用者を識別するキー
メールアドレスEmailUSEREMAIL()と照合する
氏名NameまたはText画面上に利用者名を表示する
権限Enum管理者、承認者、一般などを登録する
部署EnumまたはRef部署別の表示に利用する
有効Yes/No退職者や利用停止者を判定する
業務テーブルに所有者を記録する列を追加する

案件、日報、問い合わせ、在庫移動履歴などの業務テーブルには、誰のデータなのかを判定できる列が必要です。

  • 担当者メール
  • 登録者メール
  • 承認者メール
  • 担当部署
  • 閲覧対象グループ

新規登録した利用者のメールアドレスを自動保存したい場合は、「登録者メール」列または「担当者メール」列のInitial valueに次の式を設定します。

USEREMAIL()

これにより、新しいレコードを登録した時点でログイン中のメールアドレスが記録されます。公式ヘルプでも、所有者を示す列の初期値にUSEREMAIL()を使用する方法が案内されています。

ただし、管理者が別の担当者に代わって登録する業務では、Initial valueだけに頼ると管理者のメールアドレスが入ります。その場合は「登録者メール」と「担当者メール」を分け、担当者メールを選択できる設計にすると管理しやすくなります。

USEREMAIL関数で自分のデータだけを表示する

最も基本的な設定は、業務テーブルの担当者メールとUSEREMAIL()を比較する方法です。営業案件テーブルに「担当者メール」列がある場合、SliceのRow filter conditionに次の式を設定します。

[担当者メール] = USEREMAIL()

この式は、「担当者メールが、現在ログインしているユーザーのメールアドレスと一致する行だけをSliceに含める」という意味です。Sliceの行フィルタ条件は、式の結果がTRUEになった行をSliceへ含めます。

自分の案件だけを表示する設定手順
  1. AppSheetエディタで対象アプリを開く
  2. 利用者のサインインを必須にする
  3. 案件テーブルに担当者メール列を用意する
  4. 担当者メール列の型をEmailに設定する
  5. 新しいSliceを作成する
  6. Source Tableに案件テーブルを指定する
  7. Row filter conditionに式を入力する
  8. Sliceのプレビューで対象行を確認する
  9. 新しいビューを作成する
  10. ビューのデータに作成したSliceを指定する
複数人で共有する案件を含める場合

案件の主担当者以外に、副担当者も閲覧できるようにしたいケースがあります。副担当者メールをEnumListで保存している場合は、次のような条件を検討できます。

OR([担当者メール] = USEREMAIL(), IN(USEREMAIL(), [副担当者メール]))

この式では、主担当者メールが一致する場合、または副担当者メールの一覧にログイン中のメールアドレスが含まれる場合に、その行を表示します。

閲覧対象が増えるほど式が複雑になるため、5人、10人と共有者が増える業務では、案件IDと閲覧者メールを保存する中間テーブルを作る方法もあります。1つのセルに多数のメールアドレスを詰め込むより、後から担当者を追加・削除しやすくなります。

蒼宮ルシア
蒼宮ルシア

👑「誰が登録したか」と「誰が担当するか」は同じとは限りません。実務では列を分けておくと、引き継ぎや代理入力にも対応しやすくなりますわ。

権限ごとに画面を切り替える方法

管理者、承認者、一般社員で表示する画面を分けたい場合は、ユーザーテーブルに登録した権限をLOOKUP関数で取得します。

LOOKUP関数は、指定したテーブルから条件に一致する行を探し、別の列の値を1件返す関数です。基本構文はLOOKUP(value, dataset, column, return-column)です。

管理者用ビューのShow if

LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “権限”) = “管理者”

一般社員用ビューのShow if

LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “権限”) = “一般”

それぞれの式をビュー設定のShow ifに入力します。条件がTRUEになったビューだけがナビゲーションバーやメニューに表示されます。

権限表示する画面使用するデータ
管理者全案件、ユーザー管理、集計画面全件用Slice
承認者承認待ち、差し戻し、承認履歴承認対象Slice
一般自分の案件、自分の日報、新規登録個人用Slice
複数の権限に同じビューを表示する

管理者と承認者の両方に集計画面を表示したい場合は、IN関数で複数の権限を指定します。

IN(LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “権限”), {“管理者”, “承認者”})

メールアドレスを式へ直接書き込む方法もありますが、異動や退職のたびにアプリ設定を編集する必要があります。ユーザーテーブルへ権限を集約すれば、表の値を変更するだけで運用できます。

蒼宮 ルシア
蒼宮 ルシア

👑利用者のメールアドレスを、すべてのShow ifへ直接入力してもよろしいの?

AI執事
AI執事

🤖少人数の試作なら可能ですが、本番運用ではユーザーテーブルで一元管理する方が安全です。

蒼宮ルシア
蒼宮ルシア

👑人事異動があっても、権限列を書き換えるだけで済みますのね。

AI執事
AI執事

🤖はい。式の修正箇所を減らすことが、保守作業の短縮につながります。

部署ごとに表示データと画面を分ける応用

営業部は営業案件、総務部は備品申請、経理部は経費確認というように、部署ごとに表示内容を変えることもできます。

案件テーブルの「部署」と、ユーザーテーブルから取得したログインユーザーの部署を比較するSliceを作成します。

[部署] = LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “部署”)

この条件を設定すると、自分が所属する部署のデータだけがSliceに含まれます。

管理者には全件を表示する

管理者は全部署、一般社員は自部署だけを閲覧する場合は、OR関数を使います。

OR(LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “権限”) = “管理者”, [部署] = LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “部署”))

承認者には自部署の承認待ちだけを表示する

AND([部署] = LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “部署”), [申請状態] = “承認待ち”)

部署、権限、申請状態などを組み合わせると、経費精算、休暇申請、日報承認、問い合わせ管理などにも応用できます。

ただし、ユーザーテーブルの部署が空白の場合は、一致するデータが表示されません。利用開始前に、メールアドレス、権限、部署、有効状態が登録されているか確認してください。

蒼宮ルシア
蒼宮ルシア

👑権限だけでなく部署や担当エリアもユーザーテーブルへまとめると、同じ判定式を複数の業務画面で再利用できますわ。

SliceとShow ifだけではセキュリティにならない

ユーザーごとの画面切り替えで、特に注意したいのがセキュリティです。ビューのShow ifはナビゲーション上の表示を制御する機能であり、データへのアクセス自体を防ぐ仕組みではありません。

AppSheet公式ヘルプでも、ビューのShow ifはセキュリティ対策ではなく、ナビゲーションからビューを隠すだけと説明されています。Show ifがFALSEでも、正当なアプリリンクなどを通じたアクセスまで防ぐものではありません。

また、Sliceはアプリへデータを取得した後、端末側で条件に合う行を絞り込む仕組みです。見た目では他人の行が表示されていなくても、機密データを守る目的では不十分です。

機密データにはセキュリティフィルタを設定する

他の担当者の顧客情報、金額、個人情報などを端末へ取得させたくない場合は、対象テーブルのセキュリティフィルタにも条件を設定します。

[担当者メール] = USEREMAIL()

管理者だけ全件を閲覧できる場合は、次のような条件を利用できます。

OR(LOOKUP(USEREMAIL(), “ユーザー”, “メールアドレス”, “権限”) = “管理者”, [担当者メール] = USEREMAIL())

セキュリティフィルタは各行で条件を判定し、TRUEの行だけをアプリへ含めます。Sliceとは異なり、条件外の行を端末へ取得させないための設定です。利用できる機能やプランは変更される可能性があるため、導入時にはAppSheet公式サイトの最新情報も確認してください。

比較項目SliceビューのShow ifセキュリティフィルタ
主な目的画面に表示する行や列を整理するメニューやナビゲーションを整理する取得するデータを制限する
画面切り替え対応できる対応できる直接の画面切り替えではない
データ保護単独では不十分単独では不十分データ制限に利用する
実務での使い方個人用・部署用一覧を作る権限別メニューを作る他ユーザーの行を取得させない

よくある失敗と改善方法

USEREMAIL()が空白になる

サインインを必須にしていないアプリでは、USEREMAIL()が空白になることがあります。ユーザー別表示を行う前に、Security設定でサインインが必要な状態になっているか確認します。

新しく登録したデータが一覧に表示されない

担当者メールや登録者メールが空白だと、USEREMAIL()との比較結果がFALSEになります。対象列のInitial valueにUSEREMAIL()を設定し、既存データにもメールアドレスが入っているか確認してください。

ユーザーテーブルに同じメールアドレスが複数ある

LOOKUP関数は一致する値を1件返すため、同じメールアドレスが複数行に存在すると、意図しない権限や部署が取得される原因になります。メールアドレス列を重複しない運用にし、可能であればキーとして管理します。

管理者用メニューが一般社員にも表示される

Show ifの式が空白、または常にTRUEになる条件になっていないか確認します。「権限」の表記が、管理者、管理、Adminなどに分かれている場合も一致しません。Enumで選択肢を固定すると入力の揺れを防げます。

Show ifだけで顧客情報を保護している

メニューから画面が消えていても、データ保護が完了したとは限りません。個人情報や取引金額を扱う場合は、セキュリティフィルタとデータソース側の共有権限も確認します。

メールアドレスを式へ直接書き込みすぎる

複数のSliceやビューにメールアドレスを直接入力すると、担当変更のたびに多くの式を修正することになります。ユーザーテーブルへ権限や部署を集約し、LOOKUPで参照する設計に改善します。

蒼宮ルシア
蒼宮ルシア

👑表示されない問題の多くは、式そのものより元データの空白や表記揺れが原因です。式を直す前に、照合する列の値を確認してくださいませ。

実務で使いやすい設計例

USEREMAIL関数とSliceによる画面切り替えは、利用者ごとに担当範囲が分かれている業務と相性がよい仕組みです。

業務一般社員の画面管理者の画面
営業案件管理自分の顧客と商談全担当者の案件と売上集計
日報管理自分の日報一覧と登録フォーム部署全体の日報と未提出者一覧
経費申請自分の申請履歴承認待ちと全申請履歴
在庫管理担当拠点の在庫全拠点の在庫と発注状況
問い合わせ管理自分に割り当てられた案件未割当を含む全問い合わせ
向いているケース
  • 担当者や部署ごとに閲覧範囲が明確に分かれている
  • 同じ入力フォームを複数の社員で共有したい
  • 管理者と一般社員でメニューを整理したい
  • 利用者の異動や権限変更が定期的に発生する
  • 複数のアプリを作らず、1つのアプリで運用したい
向いていないケース
  • 会社や取引先ごとにデータソースを完全分離する必要がある
  • ユーザーごとに業務フローやテーブル構成が大きく異なる
  • 外部ユーザーへ同じアプリを広く公開する
  • データソース側のアクセス権限を設計できていない
  • 非常に複雑な権限階層を1つの権限列だけで管理しようとしている
作業時間を減らす設計の考え方

権限判定を複数の画面へ展開する場合は、列名と権限名を統一します。「メール」「メールアドレス」「担当メール」が混在すると、式の使い回しが難しくなります。

  • ユーザー情報は1つのマスターテーブルへ集約する
  • 権限と部署はEnumで選択肢を固定する
  • 登録者メールと担当者メールを分ける
  • Slice名に対象者と用途を含める
  • 管理者、一般社員、未登録ユーザーのテスト表を作る
  • 同じ条件をSliceとセキュリティフィルタで照合する

式の下書き、テスト条件の整理、ユーザー向け操作マニュアルの作成はAIへ任せやすい作業です。一方、誰にどの情報を見せるか、個人情報を含むか、管理者権限が適切かという判断は人間が確認する必要があります。

導入手順チェックリスト

  1. 画面を分ける利用者区分を決める
  2. ユーザーテーブルを作成する
  3. メールアドレス、権限、部署、有効列を登録する
  4. 業務テーブルに担当者メールや部署列を追加する
  5. ユーザーのサインインを必須にする
  6. USEREMAIL()で個人用Sliceを作成する
  7. LOOKUP関数で権限別のShow ifを設定する
  8. 機密データにはセキュリティフィルタを設定する
  9. 管理者、一般社員、未登録者で表示をテストする
  10. 異動、退職、代理入力が発生した場合の運用を決める

最初から複雑な権限管理を作る必要はありません。まずは「一般社員は自分のデータだけ」「管理者は全件」という2段階から始め、運用が安定してから承認者や部署別の条件を追加すると修正しやすくなります。

蒼宮ルシア
蒼宮ルシア

👑最初は管理者と一般社員の2種類で試し、実際の運用を見ながら権限を増やす方が、複雑な式や設定ミスを抑えられますわ。

よくある質問

USEREMAIL関数が空白になるのはなぜですか?

利用者がサインインしていない可能性があります。ユーザー別の画面切り替えを行う場合は、アプリのサインインを必須にし、ログインした状態で確認してください。

1つのAppSheetアプリで管理者用と社員用の画面を作れますか?

作成できます。管理者用と社員用のSliceとビューを用意し、ビューのShow ifに権限を判定する式を設定します。

Sliceとセキュリティフィルタは何が違いますか?

Sliceはアプリ内の表示データを整理する機能です。セキュリティフィルタは、条件外の行をアプリへ取得させないために使います。機密データでは両方の役割を分けて設定します。

管理者だけ全データを表示するにはどうすればよいですか?

権限が管理者の場合はTRUE、それ以外は担当者メールとUSEREMAIL()を比較するOR条件を設定します。Sliceだけでなく、必要に応じてセキュリティフィルタにも同様の考え方を適用します。

1人に複数の権限を持たせることはできますか?

可能です。権限列をEnumListにする方法や、ユーザーと権限を別テーブルで管理する方法があります。権限が増える場合は、別テーブル方式の方が追加や削除を管理しやすくなります。

ユーザーテーブルの権限を変更したのに画面が変わりません

アプリ側へ最新データが反映されていない可能性があります。同期を実行し、メールアドレスや権限名が式と一致しているか確認してください。

ビューを非表示にすれば他のユーザーはデータを見られませんか?

ビューのShow ifは、ナビゲーション上の表示を制御する機能です。データ保護を目的とする場合は、セキュリティフィルタやデータソース側の共有権限も設定してください。

おすすめAIツール

ChatGPTなどの生成AIは、AppSheetの条件式を考える際の補助として利用できます。テーブル名、列名、権限区分、表示したい条件を伝えると、USEREMAIL、LOOKUP、IN、AND、ORを組み合わせた式の下書きを作成できます。

また、管理者、一般社員、未登録ユーザーなどのテストパターンや、社内向け操作マニュアルのたたき台を作る用途にも向いています。ただし、生成された式が自社アプリの列型やデータ構成に合うとは限りません。顧客名やメールアドレスなどの機密情報は入力せず、テスト用データで動作を確認してから本番へ反映してください。

関連記事

まとめ

  • USEREMAIL()を使うと、ログイン中のユーザーのメールアドレスを取得できる
  • SliceのRow filter conditionで、担当者別・部署別の表示データを作成できる
  • ビューのShow ifとユーザーテーブルを組み合わせると、権限別にメニューを切り替えられる
  • 個人情報や機密データを扱う場合は、Sliceだけでなくセキュリティフィルタも検討する

AppSheetでユーザーごとに画面を切り替えるときは、最初にユーザーテーブルと担当者メール列を整え、自分のデータだけを表示する単純なSliceから始めると理解しやすくなります。動作を確認した後に、管理者、承認者、部署別の条件を追加してください。見た目の使いやすさだけでなく、誰の端末へどのデータを取得させるのかまで確認することで、実務で安心して使えるアプリに近づきます。

タイトルとURLをコピーしました