カスタムアプリでの ShopifyAPI gem 利用

AI-generated summary

テーマ: プライベートアプリ廃止後、カスタムアプリで shopify_api をどう使うか。質問者は従来の「APIキー:パスワードを含むURL」方式が使えず、ShopifyAPI::Context.setup で uninitialized constant エラー(shopify_api 9.5.1 / shopify_app 18.1.1)に直面。

最新情報・提案: 回答者は shopify_api 10.1.0 / shopify_app 19.0.2 で商品取得に成功。ShopifyAPI::Context.setup を用い、カスタムアプリで発行される Admin API のアクセストークンを使ってセッションを作成する方法を提示。コードスニペットが要点で、アクセストークン取得手順への参考リンクあり。

実装方針:

  • カスタムアプリでは「APIキー:パスワードURL」ではなく Admin API アクセストークンを使用。
  • 2パターン: (1) 直接セッションを作成しアクセストークンを設定(プライベート運用に近いケース向け)、(2) OAuth フローでセッション毎にトークン取得(公開アプリ向け)。
  • uninitialized constant は gem バージョン差異が原因の可能性が高く、アップグレードが有効。

現状: 解決報告は未確認。アップグレードとトークン利用への移行が推奨され、公開アプリでは OAuth を採用すべきという整理。

お世話になります。

これまでプライベートアプリを利用して以下のように shopify_api gem を利用していました。

ShopifyAPI::Base.site = 'https:<APIキー>:<パスワード>@shop.myshopify.com'

新たなアプリ開発のために新しいプライベートアプリを作成しようとしたのですが、

既にプライベートアプリの新規作成は廃止となっていたようなのでカスタムアプリを作成しました。

カスタムアプリで生成される認証情報はプライベートアプリと違うようで、上記のようにAPIキー、パスワードを含むURLが発行されませんでした。

shopify_api の README にあるように ShopifyAPI::Context.setup を使う方法も試したのですが、uninitialized constant ShopifyAPI::Context のエラーが発生してしまいうまくいきませんでした。

gem のバージョンは以下の通りです。

shopify_api (9.5.1)
shopify_app (18.1.1)

カスタムアプリではどのように shopify_api の gem を利用するのでしょうか?

ご存知でしたらアドバイスいただけると幸いです。

よろしくお願いいたします。

アプリの開発/運用にあまり実績がないので、あくまで、参考までに、なのですが、

下記のコードで商品情報を取得できました。

実行環境

shopify_api (10.1.0)

shopify_app (19.0.2)

require 'shopify_api'

ShopifyAPI::Context.setup(
  api_key: "

<api-access-token>は、カスタムアプリを作成した際に生成される「Admin APIのアクセストークン」です。下記の記事に取得方法が記載されています。(質問者様も取得済みだと思いますが念の為。)

[https://www.cdatablog.jp/entry/shopify-jdbc-dbvisualizer-authentication](https://www.cdatablog.jp/entry/shopify-jdbc-dbvisualizer-authentication)

Shopifyのチュートリアルですと、このように直接セッションを作るのではなく、

```ruby
session = ShopifyAPI::Auth::Session.new(shop: "

下記のようにし、セッション毎にアクセストークンを作るようにしています。

[https://github.com/Shopify/shopify_api/blob/main/docs/usage/oauth.md](https://github.com/Shopify/shopify_api/blob/main/docs/usage/oauth.md)

公開するアプリであればそうするべきかと思いますが、

元々、プライベートアプリだったとのことなので、

直接セッションを作成する方法でも問題ないかもしれません。

しかし、前述の通り、私も詳しいわけではありませんので、

どういった不具合があるか分かりません。

導入には十分お気をつけください。

ご参考まで。

(キュー田辺)