Shopify テーマ開発環境 の作り方(Slate での準備)

Kazuki Yonemoto
9 min readMar 8, 2019

--

Shopify テーマ開発時、Slate と呼ばれるCLIツール(コマンドラインツール)を利用します。バージョンが v0, v1とあり昨年(2018年)のバージョンアップで仕様が大きく異なりました。

現状、新規でプロジェクトを作成する場合はv1が推奨されていますが、既存テンプレートのカスタマイズなどを行う場合はv0が使いやすいです。

Slateでの開発に当たり、OSはMacOSが推奨されています。また、Nodeの実行環境とパッケージマネージャーの利用準備までは済ませていることを前提とします。(yarn もしくはnpm をお好みでお使いください)

事前に必要な情報(取得方法は後述の解説を参照してください)
・ShopifyストアのURL
・プライベートアプリのAPIパスワード
・テーマID

Slate V1の利用方法

1. プロジェクト作成

開発を行うディレクトリーまで移動し、以下コマンドで新規プロジェクトの作成を行います。(テーマ名: my-new-theme )
yarn create slate-theme my-new-theme
or
npx create-slate-theme my-new-theme

2. Shopifyストアとの接続設定

作成された.envファイルを開き*入力例⑴に倣って記述します。最低限記述が必要な箇所はストアURL, APIパス, テーマIDです。これらの情報はShopify管理画面で確認可能です。

*入力例⑴ .env ファイル

# ShopifyストアのURL 
SLATE_STORE={ストア名}.myshopify.com
# プライベートアプリのAPIパスワード
SLATE_PASSWORD={APIパス}
# テーマID
SLATE_THEME_ID={テーマID}
# デプロイ時に無視するファイル(任意) SLATE_IGNORE_FILES=config/settings_data.json# タイムアウト設定(任意)
SLATE_TIMEOUT=2m

ShopifyストアのURL
(例)https://sample.myshopify.com
ここではsampleがShopifyストア登録時に設定したストア名なので*入力例⑴ の{ストア名}を設定した名前にして差し替えてください。

SLATE_STORE=sample.myshopify.com

プライベートアプリのAPIパスワード
Shopify管理画面のアプリ管理から「プライベートアプリを管理」を選択します。(*図1参照)

*図1 アプリ管理

新規でプライベートアプリを作成しアプリ名、緊急連絡用開発者メールを入力します。Admin APIの項目でパスワードを確認し、コピーして*入力例⑴の{APIパス}に貼り付けてください。(*図2 参照)

*図2 Admin API

次にAdmin API権限の “Theme templates and theme assets”Read and writeに設定してください。(*図3 参照)

*図3 Admin API権限

Shopify テーマID
テーマのIDはShopify管理画面のテーマ選択画面のカスタマイズを選択した際に確認することができます。

*図4 テーマ選択画面

カスタマイズ画面のサイトURLにIDが割り振られています。ここでは 012345678912 がテーマIDとなりますね。(*図4参照)
(例)https://sample.myshopify.com/admin/themes/012345678912/editor

連携したいテーマのIDをコピーして*入力例⑴の{テーマID}に貼り付けてください。

SLATE_THEME_ID=012345678912

3. 開発スタート‼︎

以下のコマンドで起動させれば開発環境は整います。

yarn start
*npmを利用していれば npm start で実行

利用可能なコマンド例
・build — ファイルをコンパイルしてdistファイルへ格納
slate-tools build

・deploy — distファイルをShopifyストアへアップロード
slate-tools deploy [--env=my-custom-env-name][--skipPrompts][--replace]

・format — .eslintrcファイル と.stylelintrcファイルで宣言された規約に従ってコードのフォーマットを整形
slate-tools format [--scripts][--style][--json]

・lint — ソースファイルの整合性チェック
slate-tools lint[--scripts][--styles][--locales]

・start — ローカルファイルをdistファイルへコンパイルし、Shopifyストアへ該当ファイルをアップロード
slate-tools start[--env=my-custom-env-name][--skipPrompts][--skipFirstDeploy]

・zip— distディレクトリーの内容をコンパイルし、ZIPファイルを作成
slate-tools zip

Slate V0の利用方法

1. プロジェクト作成

まず以下コマンドでグローバルにslateをインストールします。
npm install -g @shopify/slate

次に開発を行うディレクトリーまで移動し、以下コマンドで新規テーマの作成を行います。theme-name は新たに作成するテーマ名を入力します。
slate theme theme-name

既存テーマをカスタマイズする場合などテーマがローカルにある場合は以下のコマンドを実行します。
slate migrate

2. Shopifyストアとの接続設定

config.ymlファイルを開き、developmentにストアURL, APIパス, テーマIDを記述します。APIパスなど必要な情報取得はSlate v1の解説を参照してください。

*入力例⑵ config.yml ファイル

development:
password:{APIパス}
theme_id:{テーマID}
store:{ストア名}.myshopify.com
ignore_files:
#- settings_data.json # Uncomment this line to avoid resetting theme settings

production:
password:
theme_id: "live"
store: your-shop.myshopify.com
ignore_files:
#- settings_data.json # Uncomment this line to avoid resetting theme settings

3. 開発スタート‼︎

以下のコマンドで起動させれば開発環境は整います。

slate deploy

新規でテーマ開発する場合は以下コマンドでZIPファイルを作成し、新規テーマをアップロードしてください。(*図4参照)

その後テーマIDを*入力例⑵の{テーマID}に貼り付けて slate deployで実行が確認できれば完了です。

slate deploy -m

*図4 テーマアップロード

利用可能なコマンド例
・theme— 空テーマを新規作成
slate theme [name]

・migrate — 既存テーマをslate開発環境へ変換
slate migrate

・build —JS, SCSSファイルの統合、SVG アイコンの最適化などを行いファイルのコピーをdistへ格納
slate build

・deploy — buildを行い、distファイルをShopifyストアへアップロード
slate deploy

・watch— ローカルファイルの変更を監視し、変更差分をShopifyストアへアップロード
slate watch

・start — build, deploy を行い、watchの状態に入る
slate-tools lint[--scripts][--styles][--locales]

・zip — buildを実行し、圧縮後distファイルへZIPファイルを作成
slate zip

まとめ

Slate v1の利用メリットはやはりプレビューが高速化され、localhostサーバーでの表示がよりシームレスに行うことができるようになったことだと思います。また利用できるコマンドの幅も広がり、よりフレキシブルな開発環境を利用できるようになってきたように感じます。
ただ、課題としてSlate v1では migrate に相当するコマンドが用意されていない為、既存テーマのカスタマイズを行うのが困難というところがネックとなっています。(2019/03/7時点)今後の改善に期待しましょう。

【参照】
1.0.0-beta.14 ドキュメント
0.14.0 ドキュメント

Shopify Theme Kit でのテーマ開発に関しては以下記事を参照ください。

--

--

Kazuki Yonemoto

TAM inc. Web Technical Director / After studying abroad in Canada, I changed from school teacher to Web developer.