はじめに
Shopifyの Developer Changelog に、こんな更新が出ていました。
Expiring offline access tokens required for new public apps as of April 1, 2026
「オフラインアクセストークンに有効期限?何それ?」と思った方も多いのではないでしょうか。
この記事では、この変更が何を意味するのか、自分のアプリに影響があるのかをサクッと解説します。
まず、オフラインアクセストークンって何?
Shopifyアプリのアクセストークンには2種類あります。
- オンライン: マーチャントがアプリを開いている間だけ有効。ログアウトしたら切れる
- オフライン: マーチャントがログインしていなくてもAPIを叩ける。バックグラウンド処理に必須
ほとんどのアプリはオフラインアクセストークンを使っています。
shopify app init でアプリを作った場合もデフォルトでこちらです。
何が変わるのか
2026年4月1日以降に新規作成されるパブリックアプリでは、このオフラインアクセストークンに有効期限が付きます。
従来 | 4/1以降の新規アプリ | |
|---|---|---|
access_token | 無期限 | 60分 |
refresh_token | なし | あり(90日) |
60分で切れるので、アプリのバックエンドが refresh_token を使って自動的に新しいトークンを取得する必要があります。
対象: 4/1以降に作成されたパブリックアプリのみ
対象外: 既存のパブリックアプリ、カスタムアプリ
「自動更新できるなら意味なくない?」
自分も最初そう思いました。でもポイントは、2つのトークンの漏れやすさの違いです。
access_token はAPIリクエストのたびにHTTPヘッダーに載せて飛ばすので、ログやプロキシに残りやすい。つまり漏洩リスクが高いトークンです。
refresh_token はバックエンドからShopifyへの直接通信でしか使わない。外に出る機会がほとんどない。
だから「よく外に出る access_token は60分で失効させて、漏れても被害を限定する」「安全な場所にある refresh_token で更新する」という設計です。
クレジットカードの有効期限と同じ発想ですね。
開発者としてやることは?
shopify app init を使っている場合 → 何もしなくてOK。
@shopify/shopify-app-remix がリフレッシュ処理を自動でやってくれます。
自前でOAuth実装している場合 → リフレッシュロジックの追加が必要です。注意点は以下の通り。
- refresh_token はワンタイム。更新するたびに新しいものが返ってくるので、必ず最新値を保存する
- 90日間リフレッシュしないと refresh_token も失効する。その場合はマーチャントに再度アプリを開いてもらう必要がある
- 複数ワーカーでの並行リフレッシュに注意(排他制御を入れる)
さいごに
まとめると、shopify app init のテンプレートを使っていれば特に対応不要です。ただ、仕組みを知っておくとトークン周りのトラブル時に切り分けが早くなります。
参考リンク:
ご希望に合わせた実装については、お問い合わせからお気軽にご相談ください。
