Chapter 1 · CLI & Development Workflow
HubSpot CLI &
開発ワークフロー
CLI v8.0.0 の破壊的変更・全コマンドリファレンス・ローカル開発環境の構築から、
GitHub Actions を使った CI/CD パイプラインの実装まで。実務で使える開発ワークフローを体系的に学ぶ。
1-1 CLI v8.0.0 の概要と破壊的変更
v8.0.0 は Node.js 最小バージョンの引き上げとコマンド体系の大幅な変更を含む。既存プロジェクトは必ず確認する。
⚠ v8.0.0 の破壊的変更(Breaking Changes):
• Node.js 18 未満では動作しない(推奨:Node.js 20 LTS)
• コマンド名前空間が移行:hs upload → hs cms upload など
• プロジェクト設定ファイル形式が変更:hubspot.config.yml の構造が一部変わった
• 旧コマンドは非推奨警告が表示され、将来的に削除予定
| 旧コマンド(v7以前) | 新コマンド(v8以降) | 変更点 |
hs upload | hs cms upload | cms サブコマンド配下に移動 |
hs watch | hs cms watch | cms サブコマンド配下に移動 |
hs fetch | hs cms fetch | cms サブコマンド配下に移動 |
hs create | hs project create | project サブコマンド配下に移動 |
hs deploy | hs project deploy | project サブコマンド配下に移動 |
hs secrets add | hs project secret add | project secret 配下に移動 |
hs functions deploy | hs project deploy | project deploy に統合 |
hs sandbox create | hs sandbox create | 変更なし |
hs auth | hs auth | 変更なし |
hs config | hs config | 変更なし |
hs open | hs open | 変更なし |
hs logs | hs project logs | project 配下に移動 |
hs mcp setup | hs mcp setup | v8 で新規追加(MCP Server) |
移行方法:
既存の package.json scripts や CI/CD の YAML に旧コマンドが含まれている場合は、上記の対応表に従って書き換えてください。
旧コマンドは現時点では動作しますが、非推奨警告が表示され、将来のバージョンで削除されます。
1-2 CLI のインストールと初期設定
クリーンな状態からインストールし、複数ポータルの設定管理まで行う。
Terminal
node -v
npm uninstall -g @hubspot/cli
npm install -g @hubspot/cli@latest
hs --version
hs help
Terminal — 初回認証
hs auth
hs auth --portal-id
12345678 --personal-access-key
"YOUR_KEY"
hs config list
hs config set-default --portal
12345678
📁 設定ファイルの場所
認証情報は ~/.hubspot/ ディレクトリに保存されます。
複数のポータル(本番・開発・Sandbox)をチームで管理する場合は、プロジェクトルートに
hubspot.config.yml を置くことで、ポータル切り替えをプロジェクト単位で管理できます。
hubspot.config.yml
defaultPortal: dev-sandbox
portals:
- name: dev-sandbox
portalId:
11111111
authType: personalaccesskey
personalAccessKey:
'${HUBSPOT_PAK_DEV}'
- name: production
portalId:
99999999
authType: personalaccesskey
personalAccessKey:
'${HUBSPOT_PAK_PROD}'
1-3 CLI 全コマンドリファレンス
v8.0.0 時点の主要コマンドをカテゴリ別に整理する。
🔐 認証 / 設定
hs auth
ポータル認証を実行。ブラウザが開き OAuth フローが始まる
hs config list
登録済みポータルの一覧を表示
hs config set-default
デフォルトポータルを変更する
🌐 CMS 開発
hs cms upload <src> <dest>
ローカルファイルを HubSpot デザインマネージャにアップロード
hs cms watch <src> <dest>
ファイルの変更を監視して自動アップロード(開発時)
hs cms fetch <src> <dest>
HubSpot からファイルをローカルにダウンロード
hs cms fetch-module <name>
特定のモジュールをローカルに取得
🚀 プロジェクト
hs project create
新しいプロジェクトを対話式で作成(テンプレートを選択可能)
hs project deploy
プロジェクトを HubSpot にデプロイ(Serverless Functions 含む)
hs project logs
Serverless Function の実行ログをストリーム表示
hs project secret add
Serverless Function で使うシークレット変数を登録
🤖 AI / MCP
hs mcp setup
HubSpot MCP Server をローカル AI エディタに設定(v8 新機能)
hs mcp start
MCP Server をローカルで起動
🏖 Sandbox
hs sandbox create
新しい Sandbox ポータルを作成(Enterprise のみ)
hs sandbox sync
本番ポータルのデータを Sandbox に同期
1-4 ローカル開発環境の構築
CMS テーマ・モジュールのローカル開発フローを実際に構築する。
-
1
プロジェクトディレクトリを作成
作業ディレクトリを用意し、Git リポジトリを初期化する。
-
2
HubSpot からテーマをダウンロード
既存テーマを編集する場合は hs cms fetch でローカルに取得する。
-
3
Watch モードで開発
ファイルを保存するたびに自動でアップロードされ、ブラウザでプレビューできる。
-
4
変更をコミット & プッシュ
Git でバージョン管理し、GitHub Actions で本番へのデプロイを自動化する。
Terminal — テーマ開発フロー
mkdir my-hubspot-theme && cd my-hubspot-theme
git init
hs cms fetch
"@hubspot/growth" ./themes/growth --portal dev-sandbox
hs project create --template cms-theme-boilerplate
hs cms watch ./themes/growth
"@hubspot/growth" --portal dev-sandbox
hs cms upload ./themes/growth
"@hubspot/growth" --portal production
🔄 Watch モードのしくみ
hs cms watch はローカルディレクトリを監視し、ファイルの保存を検知するたびに差分を HubSpot にアップロードします。
HubSpot のプレビュー URL を開いた状態で作業すると、保存するたびにほぼリアルタイムで結果が確認できます。
ただし画像や大きなバイナリは watch から除外し、別途アップロードすることを推奨します。
1-5 hubspot.config.yml の詳細設定
チーム開発やマルチポータル環境での設定ファイルのベストプラクティス。
hubspot.config.yml — フル設定例
defaultPortal: dev
portals:
- name: dev
portalId:
11111111
authType: personalaccesskey
personalAccessKey:
'${HUBSPOT_PAK_DEV}'
env: development
- name: staging
portalId:
22222222
authType: personalaccesskey
personalAccessKey:
'${HUBSPOT_PAK_STAGING}'
env: staging
- name: production
portalId:
99999999
authType: personalaccesskey
personalAccessKey:
'${HUBSPOT_PAK_PROD}'
env: production
allowedExtensions:
- html
- css
- js
- json
- svg
- png
- jpg
- webp
- woff2
Personal Access Key と Personal CMS Access Key の違い:
CLI の認証に使う「Personal Access Key」は、HubSpot ポータルのプロフィール → API キーから取得します。
Private App Token(Bearer 認証)とは別物です。CLI 専用のキーとして管理してください。
1-6 GitHub Actions で CI/CD を構築する
push をトリガーに自動で HubSpot へデプロイするパイプラインを実装する。
ローカル開発
→
PR 作成
→
CI チェック
lint / test
→
main にマージ
→
本番デプロイ
hs cms upload
.github/workflows/deploy.yml
name: Deploy to HubSpot
on:
push:
branches:
- main
paths:
-
'themes/**'
-
'modules/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version:
'20'
cache:
'npm'
- name: Install HubSpot CLI
run: npm install -g @hubspot/cli@latest
- name: Create HubSpot config
run: |
mkdir -p ~/.hubspot
cat > hubspot.config.yml <<EOF
defaultPortal: production
portals:
- name: production
portalId: ${{ secrets.HUBSPOT_PORTAL_ID }}
authType: personalaccesskey
personalAccessKey: ${{ secrets.HUBSPOT_PAK_PROD }}
EOF
- name: Deploy Theme
run: |
hs cms upload ./themes/my-theme
"my-theme" --portal production
- name: Deploy Modules
run: |
hs cms upload ./modules
"@hubspot/modules" --portal production
.github/workflows/preview.yml — PR プレビュー
name: Deploy Preview to Staging
on:
pull_request:
branches:
- main
jobs:
preview:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version:
'20'
- run: npm install -g @hubspot/cli@latest
- name: Create config
run: |
cat > hubspot.config.yml <<EOF
defaultPortal: staging
portals:
- name: staging
portalId: ${{ secrets.HUBSPOT_STAGING_ID }}
authType: personalaccesskey
personalAccessKey: ${{ secrets.HUBSPOT_PAK_STAGING }}
EOF
- name: Deploy to Staging
run: hs cms upload ./themes/my-theme
"my-theme" --portal staging
- name: Comment PR
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '✅ Staging にデプロイ完了。プレビューを確認してください。'
})
⚠ GitHub Secrets の設定を忘れずに:
リポジトリの「Settings → Secrets and variables → Actions」から以下を登録してください。
HUBSPOT_PORTAL_ID・HUBSPOT_PAK_PROD・HUBSPOT_STAGING_ID・HUBSPOT_PAK_STAGING
1-7 Serverless Functions のデプロイ
HubSpot Projects を使った Serverless Functions のデプロイフローを学ぶ。
プロジェクト構成
my-project/
├── hsproject.json
├── src/
│ ├── app/
│ │ ├── app.json
│ │ └── extensions/
│ │ ├── crm-card/
│ │ └── actions/
│ └── functions/
│ ├── my-function/
│ │ ├── my-function.functions/
│ │ │ └── index.js
│ │ └── serverless.json
│ └── package.json
└── .gitignore
hsproject.json
{
"name":
"my-project",
"srcDir":
"src",
"platformVersion":
"2023.2"
}
Terminal — プロジェクトデプロイ
hs project create
hs project secret add MY_API_KEY --portal dev-sandbox
hs project deploy --portal dev-sandbox
hs project list-deploys --portal dev-sandbox
hs project logs --follow --portal dev-sandbox
.github/workflows/project-deploy.yml — プロジェクト CI/CD
name: Deploy HubSpot Project
on:
push:
branches: [main]
paths: ['src/**']
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version:
'20'
- run: npm install -g @hubspot/cli@latest
- name: Setup config
run: |
cat > hubspot.config.yml <<EOF
defaultPortal: production
portals:
- name: production
portalId: ${{ secrets.HUBSPOT_PORTAL_ID }}
authType: personalaccesskey
personalAccessKey: ${{ secrets.HUBSPOT_PAK_PROD }}
EOF
- name: Install dependencies
run: npm ci --prefix src/functions
- name: Deploy Project
run: hs project deploy --portal production
1-8 デバッグとトラブルシューティング
CLI の一般的なエラーと対処法をまとめる。
| エラー / 症状 | 原因 | 対処法 |
Error: Node.js version 18.x is not supported |
Node.js のバージョンが古い |
Node.js 20 以上にアップグレード。nvm use 20 |
The portal could not be found |
Portal ID の誤り、または認証切れ |
hs config list で確認後、hs auth で再認証 |
403 Forbidden |
Personal Access Key のスコープ不足 |
HubSpot のプロフィールページでキーを再発行し適切なスコープを付与 |
| Watch が変更を検知しない |
除外パターンにマッチ、またはファイルパスが誤り |
ソースパスを絶対パスで指定。--debug フラグで詳細ログ表示 |
Unexpected token in JSON |
hubspot.config.yml の文法エラー |
YAML バリデーター(yamllint 等)で確認 |
| デプロイが途中で止まる |
ファイルサイズ超過 or レート制限 |
大きなバイナリを除外。--timeout オプションを延長 |
Terminal — デバッグオプション
hs cms upload ./themes/my-theme
"my-theme" --debug
hs config list
hs config clear-cache
HUBSPOT_LOG_LEVEL=debug hs cms upload ./themes/my-theme
"my-theme"
1-9 この章のまとめ
次章(CRM API 完全ガイド)に進む前に確認する。
✅ Chapter 1 チェックリスト
- CLI v8.0.0 の破壊的変更(Node.js 20 必須・コマンド名前空間移行)を理解した
- 旧コマンドと新コマンドの対応表を確認し、既存スクリプトを更新した
hs auth でポータルを登録し、hs config list で確認できた
- hubspot.config.yml でマルチポータル設定を管理できている
hs cms watch でローカル開発フローを体験した
- GitHub Actions の deploy.yml を作成し、Secrets を登録した
- main マージ時に自動デプロイされる CI/CD パイプラインが動作している
- PR 時に Staging へプレビューデプロイされるフローを構築した
次章(Chapter 2)について:
HubSpot CRM API の全体像を学びます。Objects API・Search API・Associations API・Batch API の使い方を、
実際のコード例とともに体系的に解説します。レート制限の回避策と大量データ処理のパターンも取り上げます。