とーますメモ

Ruby on Rails / Goなどの学習メモ

【ShopifyApp × Rails】Embedded(埋め込み)方式じゃないアプリの作成方法

公式にも詳細が載っていないので調べてみた。

TL;DR

以下の3つの設定が必要。

① [必須] アプリ管理側画面で、「Embedded」設定をオフにする
② [必須] config/initializers/shopify_app.rbの「config.embedded_app」をfalseにする
③ [任意] layoutファイルを設定する

アプリ管理側画面で、「Embedded」設定をオフにする

以下の記事でも触れたが、
thoames.hatenadiary.jp
公式のgemを使用して、Railsアプリを作成する場合のデフォルトでは「埋め込みアプリ」として設定される。

そのため埋め込みを解除するには、アプリ管理側の画面から「Embedded app」設定をオフにする必要がある。
※詳細は上記の記事内。

config/initializers/shopify_app.rbの「config.embedded_app」をfalseにする

config.embedded_app = false

以下の設定をしない場合、埋め込みアプリのデフォルトテンプレートである「embedded_app.html.erb」が読み込まれ、
その中身のJavascriptでShopify内の画面にリダイレクトし、「画面が見つからない」というエラーが発生する。

layoutファイルを設定する

Railsはデフォルトでapplication.html.erbをレイアウトファイルとして読み込むが
shopify_appのgemを使用し、embedded(埋め込み)アプリを作成しない場合、レイアウトファイルが読み込まれない。
(※この辺の仕組みはよくわからない・・・もしご存知の方がいらっしゃればコメント下さい)

自分の場合は、明示的にデフォルトレイアウトを指定する親コントローラを作成し、アプリの全コントローラはこの親コントローラを継承することでレイアウトファイルが読み込まれる設定にした。

app/controllers/shopify_application_controller.rb

class ShopifyApplicationController < ShopifyApp::AuthenticatedController
  layout 'application'
end

※shopify_appを使用してアプリを作成する場合、コントローラは「ShopifyApp::AuthenticatedController」を継承する。


以上