Closed5
ShopifyCLI + GitHubによる開発環境構築

はじめに
これは、Shopifyのテーマをカスタマイズする機会があったので、開発環境の構築手順等記録するためのスクラップです
参考

開発環境
まずは以下のように構築してみました
volumes:
node_modules:
services:
shopify:
build:
context: .
dockerfile: Dockerfile
working_dir: /workspace
ports:
- 3456:3456
- 80:80
volumes:
- .:/workspace:cached
- node_modules:/workspace/node_modules
tty: true
FROM node:18.20-alpine
# システムのアップデート
RUN apk update && \
apk upgrade
# 必須パッケージのインストール
RUN apk add --no-cache \
openssh-client \
sudo \
build-base \
curl \
git \
# bashのインストールとデフォルトシェルの変更
RUN apk add --no-cache bash && \
ln -sf /bin/bash /bin/sh
# vscodeユーザーを作成し、明示的にbashをデフォルトシェルに設定
RUN adduser -D -s /bin/bash vscode && \
echo "vscode ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/vscode && \
chmod 0440 /etc/sudoers.d/vscode
# 作業ディレクトリを設定
WORKDIR /workspace
# Node.jsのグローバルパッケージをインストール
RUN npm install -g npm@latest pnpm npm-check-updates @shopify/cli @shopify/theme
# vscodeユーザーに切り替え
USER vscode

Shopifyにログイン
- 次のコマンドを実行
# xxxxxxの部分は自分のshopifyのドメイン
$ shopify theme list --store xxxxxx.myshopify.com
- 表示されたURLを開き、同じくコンソールに表示されている`verification code‘を入力
ログインができない
ログイン時にブラウザを開くためxdg-utils
が必要そう
Dockerfileの修正
FROM node:18.20-alpine
# システムのアップデート
RUN apk update && \
apk upgrade
# 必須パッケージのインストール
RUN apk add --no-cache \
openssh-client \
sudo \
build-base \
curl \
git \
xdg-utils \
# bashのインストールとデフォルトシェルの変更
RUN apk add --no-cache bash && \
ln -sf /bin/bash /bin/sh
# vscodeユーザーを作成し、明示的にbashをデフォルトシェルに設定
RUN adduser -D -s /bin/bash vscode && \
echo "vscode ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/vscode && \
chmod 0440 /etc/sudoers.d/vscode
# 作業ディレクトリを設定
WORKDIR /workspace
# Node.jsのグローバルパッケージをインストール
RUN npm install -g npm@latest pnpm npm-check-updates @shopify/cli @shopify/theme
# vscodeユーザーに切り替え
USER vscode
✔ Logged in. となれば成功

テーマをクローンする
$ shopify theme pull {theme id}
エラー
╭─ error ──────────────────────────────────────────────────────────────────────╮
│ │
│ Ruby environment not found │
│ │
│ Make sure you have Ruby installed on your system. Documentation. │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
Ruby環境を見つけられないとのこと・・・
どうやらCLI セットアップの一部は Ruby に依存しているようです・・・
Dockerfileの更新
rubyを追加
FROM node:18.20-alpine
# システムのアップデート
RUN apk update && \
apk upgrade
# 必須パッケージのインストール
RUN apk add --no-cache \
openssh-client \
sudo \
build-base \
curl \
git \
xdg-utils \
ruby \
ruby-dev \
ruby-bundler
# bashのインストールとデフォルトシェルの変更
RUN apk add --no-cache bash && \
ln -sf /bin/bash /bin/sh
# vscodeユーザーを作成し、明示的にbashをデフォルトシェルに設定
RUN adduser -D -s /bin/bash vscode && \
echo "vscode ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/vscode && \
chmod 0440 /etc/sudoers.d/vscode
# 作業ディレクトリを設定
WORKDIR /workspace
# Node.jsのグローバルパッケージをインストール
RUN npm install -g npm@latest pnpm npm-check-updates @shopify/cli @shopify/theme
# vscodeユーザーに切り替え
USER vscode
再びエラー
Error coming from bundle install
Command failed with exit code 23: bundle install
There was an error while trying to write to
/usr/local/lib/node_modules/@shopify/cli/dist/assets/cli-ruby/Gemfile.lock.
今度は権限が足りないというエラーが出ました
再度Dockerfileを修正します
FROM node:18.20-alpine
# システムのアップデート
RUN apk update && \
apk upgrade
# 必須パッケージのインストール
RUN apk add --no-cache \
openssh-client \
sudo \
build-base \
curl \
git \
xdg-utils \
ruby \
ruby-dev \
ruby-bundler
# bashのインストールとデフォルトシェルの変更
RUN apk add --no-cache bash && \
ln -sf /bin/bash /bin/sh
# vscodeユーザーを作成し、明示的にbashをデフォルトシェルに設定
RUN adduser -D -s /bin/bash vscode && \
echo "vscode ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/vscode && \
chmod 0440 /etc/sudoers.d/vscode
# 作業ディレクトリを設定
WORKDIR /workspace
# Node.jsのグローバルパッケージをインストール
RUN npm install -g npm@latest pnpm npm-check-updates @shopify/cli @shopify/theme && \
chown -R vscode:vscode /usr/local/lib/node_modules
# vscodeユーザーに切り替え
USER vscode
まだ解決せず・・・
pnpm
にすると解決するという記事があったので試す
rubyのバージョンを色々試し、エラー解消を目指す
rubyのバージョンが新しすぎるせいでエラーが発生していそう
3.0.6
3.1.2
今回は3.0.6
で解決に向かいました
build-essentialが必要そう
build-essential
が必要とのことなので追加してみる
結果は変わらず
Ruby関連のエラーで進まない
ERROR: While executing gem ... (Gem::Exception) 0.470 OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
OpenSSLがどうとかで停滞
解決策
やっと解決しました
OpenSSLに関するエラーは、Ubuntu22.04
のせいで発生していました
Ubuntu22.04ではRuby3.1未満はビルドできないそうです
そのためDockerfile
を以下のように変更
FROM ubuntu:20.04
# apt-getのフロントエンドを非対話的に設定
ENV DEBIAN_FRONTEND=noninteractive
ENV SHELL=/bin/bash
# 必須パッケージのインストール
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y \
curl \
git \
sudo \
build-essential \
xdg-utils \
libssl-dev \
zlib1g-dev \
libreadline-dev \
libyaml-dev \
libffi-dev \
libgdbm-dev \
libncurses5-dev \
pkg-config \
libgmp-dev \
wget \
libsqlite3-dev
# 既存のNode.js関連パッケージを完全に削除
RUN apt-get remove -y nodejs nodejs-doc libnode-dev && \
apt-get autoremove -y && \
apt-get clean
# Node.js 18.xのインストール
RUN mkdir -p /etc/apt/keyrings && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
apt-get update && \
apt-get install -y nodejs
# OpenSSLのパスを設定
ENV OPENSSL_DIR=/usr/lib/ssl
ENV OPENSSL_INCLUDE=/usr/include/openssl
ENV OPENSSL_LIB=/usr/lib/x86_64-linux-gnu
# Ruby 3.0.6 のインストール(OpenSSLサポート付き)
RUN curl -O https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.6.tar.gz && \
tar -xzf ruby-3.0.6.tar.gz && \
cd ruby-3.0.6 && \
./configure --prefix=/usr/local \
--with-openssl-dir=$OPENSSL_DIR \
--with-openssl-include=$OPENSSL_INCLUDE \
--with-openssl-lib=$OPENSSL_LIB && \
make -j "$(nproc)" && \
make install && \
cd .. && \
rm -rf ruby-3.0.6 ruby-3.0.6.tar.gz
# OpenSSLの設定を確認
RUN ruby -ropenssl -e "puts OpenSSL::OPENSSL_VERSION"
# vscodeユーザーを作成し、明示的にbashをデフォルトシェルに設定
RUN useradd -m -s /bin/bash vscode && \
echo "vscode ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/vscode && \
chmod 0440 /etc/sudoers.d/vscode
# 作業ディレクトリを設定
WORKDIR /workspace
# pnpmのインストールと設定
ENV PNPM_HOME="/home/vscode/.local/share/pnpm"
ENV PATH="${PNPM_HOME}:${PATH}"
RUN npm install -g pnpm && \
pnpm setup && \
pnpm config set store-dir ~/.pnpm-store
# Node.jsのグローバルパッケージをインストール
RUN pnpm add -g npm@latest npm-check-updates
# Shopify CLIのインストール
RUN mkdir -p /home/vscode/shopify-cli && \
cd /home/vscode/shopify-cli && \
pnpm init && \
pnpm add @shopify/cli @shopify/theme
# PATHを更新
ENV PATH="/home/vscode/shopify-cli/node_modules/.bin:${PATH}"
# Rubyの設定
ENV GEM_HOME=/home/vscode/.gem
ENV PATH="${GEM_HOME}/bin:${PATH}"
RUN echo 'export GEM_HOME=$HOME/.gem' >> /home/vscode/.bashrc && \
echo 'export PATH=$GEM_HOME/bin:$PATH' >> /home/vscode/.bashrc
# Bundlerの特定バージョンをインストール
RUN gem install bundler
# OpenSSLの設定を確認
RUN ruby -ropenssl -e "puts OpenSSL::OPENSSL_VERSION"
# vscodeユーザーに切り替え
USER vscode
まだエラーがちょっと残るものの、この環境でshopify theme pull
が動作するようになりました

自動デプロイを設定
このスクラップは2024/09/14にクローズされました