ShopifyのユーザーをCSVで一括作成する ― Admin/POSの違いと実践パターン集
2026年8月21日、Shopifyのchangelogで、ユーザーアカウントをCSVで一括作成・停止・再開できる機能が公開されました。季節雇用やイベント出店で人の入れ替わりが多いストアには特に効きます。ただ、実際に触ってみると「Adminユーザーとは何を指すのか」「POSユーザーはどう認証されるのか」といった、CSVの列だけでは分からない前提知識が必要でした。この記事では、その前提整理と、公式サンプルCSVを使った実践パターンをまとめてみました。
そもそも、ユーザーには2種類ある
CSVには user_type という列があり、値は Admin か Point of sale の2択です。ここが最初につまずきやすいポイントでした。
「Admin」という名前ですが、権限の広さとは関係ありません。「カスタマーサポート業務だけ」「商品登録だけ」のような、権限を絞ったロールのスタッフであっても、メールアドレスとパスワードでShopify管理画面にログインする以上は Admin に分類されます。分岐点は権限の広さではなく、「管理画面にログインするかどうか」です。
一方の Point of sale は、レジ端末(POSアプリ)だけを使うスタッフ専用のカテゴリです。管理画面にはログインできず、メールアドレスも不要。4〜6桁のPINだけで認証します。
| Admin | Point of sale | |
|---|---|---|
| ログイン先 | Shopify管理画面 | POSアプリのみ |
| 認証方法 | メールアドレス+パスワード | 4〜6桁のPIN |
| 権限が絞られたスタッフ | こちらに含まれる | - |
| メールアドレス | 必須 | 不要(任意) |
メールアドレスの無いPOSユーザーは、どうログインするのか
ここが2階建ての構造になっています。
- 端末レベルの認証:レジ端末(iPad等)そのものは、店舗オーナーなどAdmin権限を持つスタッフが、最初に1回だけメールアドレス+パスワードでログインしておく必要があります
- 個人レベルの認証:その端末が認証済みになった後は、PINを持つ複数のPOSユーザーが、ロック画面から自分のPINで入れ替わりでログイン・ログアウトできます
1台のレジを複数人がシフトで共有するとき、いちいちメール+パスワードで切り替えなくて済む仕組みです。よくある小売店レジの「担当者切り替え」と同じ発想だと考えると分かりやすいです。
実際に踏んだハマりどころ:CSVでPOSユーザーを新規作成した直後、正しいPINを入力しても「もう一度お試しください」で弾かれることがありました。少し時間を置いてから再度試すと通ったので、作成直後は反映にラグがあるようです。すぐに使えないからといって、PINの再発行や設定の見直しに走る前に、一度時間を置いて試すとよさそうです。
インポートCSVの列
管理画面の「設定 > ユーザー > インポート」から、公式のサンプルCSVをダウンロードできます。列は13個です。
| 列名 | 説明 |
|---|---|
id |
空欄=新規作成。既存の数値ID=そのユーザーの更新 |
user_type |
Admin または Point of sale
|
email |
Adminは必須。POSは任意 |
phone |
POS向け。メールの代わりに識別情報として使える |
given_name / family_name
|
名・姓。Adminは招待受け入れ後に本人が入力するため省略可 |
status |
新規作成時は空欄。既存ユーザーをActive/Suspendedに変更するときに使う |
role_name |
既存のロール名と完全一致が必須。新規ロールは作れない |
group_name |
Shopify Plusのみ。既存グループ名と完全一致 |
store_name |
対象ストア名。完全一致が必須 |
pos_location_name |
POSユーザーの勤務ロケーション名。完全一致が必須 |
all_current_and_future_locations |
TRUE/FALSE。今後追加されるロケーションも含めて許可するか |
pin |
POS系ロールのPIN。新規作成時のみ設定可能で、既存ユーザーのPIN変更はインポートでは不可。空欄のままにすると、インポート側が自動でPINを生成する |
「設定 > ユーザー > エクスポート」で出力されるCSVには、この13列に加えて created_at / tfa_enforced / role_category / added_at という参考情報の列も付きます。これらはインポートの仕様には無い列なので、書いても反映されません。
できないこと
CSVで完結すると思うと詰まる箇所です。次のことはインポートではできません。
- ユーザーの一括削除(
Suspendedにするところまで) - 二要素認証の設定・変更
- 既存ユーザーのPIN変更
- 既存ユーザーの
user_type(Admin⇄POS)の変更 - 新しい役割名・グループ名・ロケーション名の作成(すべて既存の名称と完全一致が必要)
実践パターン集
公式サンプルCSVの中身を、シナリオ別に分けて紹介します。同じ人物に複数の行を使うときは、識別情報(user_type / email / given_name / family_name / phone)を全行で完全に一致させるのが鉄則です。ここがずれると、同じ人のつもりが別人として重複登録されます。
各パターンをテーブルで示します。列の並びはCSVと同じ(id, user_type, email, phone, given_name, family_name, status, role_name, group_name, store_name, pos_location_name, all_current_and_future_locations, pin)です。空欄は「–」で表しています。
① 新規Adminユーザー(シンプル)
| id | user_type | phone | given_name | family_name | status | role_name | group_name | store_name | pos_location_name | all_current_and_future_locations | pin | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| – | Admin | tanaka@example.jp | – | – | – | – | カスタマーサポート | – | サンプルストア | – | – | – |
idは空欄=新規作成。氏名と電話番号も空欄で構いません。公式ドキュメントにも「招待を受け入れた本人が、その時に氏名・電話番号を入力できるよう空欄にしておく」と明記されています。新規作成の行にあらかじめ値を入れておく必要はありません。
② 新規POSユーザー(1ロケーション)
| id | user_type | phone | given_name | family_name | status | role_name | group_name | store_name | pos_location_name | all_current_and_future_locations | pin | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| – | Point of sale | sato@example.jp | – | 花子 | 佐藤 | – | 販売スタッフ | – | サンプルストア | 渋谷店 | FALSE | – |
POSは氏名が実質必須。メールアドレスは無くても構いません。pinもこの例のように空欄にできます。POS系のロールでは、PINを指定すればその値が使われ、空欄のままにするとインポート側が自動でPINを生成します。とりあえず作成だけしておいて、PINは後で個別に確認したい場合に使える書き方です。
③ 新規POSユーザー(PIN付き・全ロケーション許可)
| id | user_type | phone | given_name | family_name | status | role_name | group_name | store_name | pos_location_name | all_current_and_future_locations | pin | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| – | Point of sale | – | 090-1234-5678 | 大輔 | 鈴木 | – | 販売スタッフ | – | サンプルストア | – | TRUE | 1234 |
メールを省略し、電話番号で識別。all_current_and_future_locationsをTRUEにするとpos_location_nameは空欄でよくなります。PINは新規作成時のみ設定できます。
④ 同一人物に「複数の役割 × 複数のロケーション」
| id | user_type | phone | given_name | family_name | status | role_name | group_name | store_name | pos_location_name | all_current_and_future_locations | pin | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| – | Point of sale | – | 090-2222-3333 | 誠 | 高橋 | – | 店長 | – | サンプル雑貨店 | 渋谷店 | FALSE | 5678 |
| – | Point of sale | – | 090-2222-3333 | 誠 | 高橋 | – | 店長 | – | サンプル雑貨店 | 新宿店 | FALSE | 5678 |
| – | Point of sale | – | 090-2222-3333 | 誠 | 高橋 | – | レジ担当 | – | サンプル雑貨店 | 渋谷店 | FALSE | 5678 |
| – | Point of sale | – | 090-2222-3333 | 誠 | 高橋 | – | レジ担当 | – | サンプル雑貨店 | 新宿店 | FALSE | 5678 |
店長×渋谷店、店長×新宿店、レジ担当×渋谷店、レジ担当×新宿店の全組み合わせで4行になります。phoneとstore_nameは4行とも同じ値です。
⑤ 同一人物に「複数の役割」+「複数ストア」
| id | user_type | phone | given_name | family_name | status | role_name | group_name | store_name | pos_location_name | all_current_and_future_locations | pin | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| – | Admin | ito@example.jp | – | – | – | – | 商品担当 | – | サンプルストア | – | – | – |
| – | Admin | ito@example.jp | – | – | – | – | POSのすべての許可 | – | サンプルストア | – | TRUE | 9012 |
| – | Admin | ito@example.jp | – | – | – | – | カスタマーサポート | – | サンプル雑貨店 | – | – | – |
同じメールアドレスで3行。1〜2行目は同じストア内の複数ロール、3行目は別ストアへの割り当てです。2行目はAdminなのにall_current_and_future_locationsとpinが入っています。これは「管理画面ログインもPOSアプリも両方使えるロール」を割り当てるケースです。
⑥ グループへの割り当て(Shopify Plusのみ)
| id | user_type | phone | given_name | family_name | status | role_name | group_name | store_name | pos_location_name | all_current_and_future_locations | pin | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| – | Admin | watanabe@example.jp | – | – | – | – | – | サンプルグループ | – | – | – | – |
role_nameは空欄にして、group_nameだけ指定します。個別のロールではなく、グループ経由で権限を渡すパターンです。
⑦ 既存ユーザーの停止・再開
| id | user_type | phone | given_name | family_name | status | role_name | group_name | store_name | pos_location_name | all_current_and_future_locations | pin | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 12345 | Point of sale | – | 090-2222-3333 | 誠 | 高橋 | Suspended | – | – | – | – | – | – |
| 22222 | Point of sale | yamada@example.jp | 090-3333-4444 | 太郎 | 山田 | Active | – | – | – | – | – | – |
| 67890 | Admin | nakamura@example.jp | – | – | – | Suspended | – | – | – | – | – | – |
| 99999 | Admin | watanabe@example.jp | – | – | – | Active | – | – | – | – | – | – |
idが入っている=既存ユーザーの更新です。status列だけが効き、役割やストア関連の列は空欄にします。idは、事前にエクスポートしたCSVから確認できます。
まとめ
試す前に押さえておきたいのは3点です。
- Admin/POSの分岐点は権限の広さではなく、ログイン方法(メール+パスワード or PIN)
- role_name / store_name / pos_location_name / group_nameは、既存の名称と完全一致させる必要がある。まず自分のストアをエクスポートして正しい表記を確認するのが安全
- POSユーザーは作成直後、PINがすぐに使えないことがある。焦らず少し時間を置いて試す
季節雇用や複数店舗展開で人の入れ替わりが多いストアなら、管理画面から1人ずつ設定する手間をこのCSVで大きく減らせます。まずは検証用ストアで、既存ユーザーに影響しない新規行から試すのがおすすめです。