🟢 HubSpot 開発者向け実践教科書 — 2026年版 Developer Edition
Chapter 1  ·  CLI & Development Workflow

HubSpot CLI &
開発ワークフロー

CLI v8.0.0 の破壊的変更・全コマンドリファレンス・ローカル開発環境の構築から、 GitHub Actions を使った CI/CD パイプラインの実装まで。実務で使える開発ワークフローを体系的に学ぶ。

CLI v8.0.0(2025年11月 GA)
Node.js 20 以上が必須
所要時間:約90分
1-1 CLI v8.0.0 の概要と破壊的変更

v8.0.0 は Node.js 最小バージョンの引き上げとコマンド体系の大幅な変更を含む。既存プロジェクトは必ず確認する。

⚠ v8.0.0 の破壊的変更(Breaking Changes):
Node.js 18 未満では動作しない(推奨:Node.js 20 LTS)
コマンド名前空間が移行hs uploadhs cms upload など
プロジェクト設定ファイル形式が変更hubspot.config.yml の構造が一部変わった
旧コマンドは非推奨警告が表示され、将来的に削除予定
旧コマンド(v7以前)新コマンド(v8以降)変更点
hs uploadhs cms uploadcms サブコマンド配下に移動
hs watchhs cms watchcms サブコマンド配下に移動
hs fetchhs cms fetchcms サブコマンド配下に移動
hs createhs project createproject サブコマンド配下に移動
hs deployhs project deployproject サブコマンド配下に移動
hs secrets addhs project secret addproject secret 配下に移動
hs functions deployhs project deployproject deploy に統合
hs sandbox createhs sandbox create変更なし
hs authhs auth変更なし
hs confighs config変更なし
hs openhs open変更なし
hs logshs project logsproject 配下に移動
hs mcp setuphs mcp setupv8 で新規追加(MCP Server)
移行方法: 既存の package.json scripts や CI/CD の YAML に旧コマンドが含まれている場合は、上記の対応表に従って書き換えてください。 旧コマンドは現時点では動作しますが、非推奨警告が表示され、将来のバージョンで削除されます。
1-2 CLI のインストールと初期設定

クリーンな状態からインストールし、複数ポータルの設定管理まで行う。

Terminal
# Node.js バージョン確認(20以上が必要) node -v # v20.x.x 以上 # 既存 CLI があればアンインストール npm uninstall -g @hubspot/cli # 最新版をインストール npm install -g @hubspot/cli@latest # バージョン確認 hs --version # 8.x.x 以上であること # ヘルプ一覧 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}' # コマンド実行時にポータルを指定 # hs cms upload --portal production
1-3 CLI 全コマンドリファレンス

v8.0.0 時点の主要コマンドをカテゴリ別に整理する。

🔐 認証 / 設定

hs auth
ポータル認証を実行。ブラウザが開き OAuth フローが始まる
hs config list
登録済みポータルの一覧を表示
hs config set-default
デフォルトポータルを変更する
hs open
現在のポータルをブラウザで開く

🌐 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. 1
    プロジェクトディレクトリを作成 作業ディレクトリを用意し、Git リポジトリを初期化する。
  2. 2
    HubSpot からテーマをダウンロード 既存テーマを編集する場合は hs cms fetch でローカルに取得する。
  3. 3
    Watch モードで開発 ファイルを保存するたびに自動でアップロードされ、ブラウザでプレビューできる。
  4. 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 # ローカルでの編集中は Watch モードを使用 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 — フル設定例
# 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 # 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_IDHUBSPOT_PAK_PRODHUBSPOT_STAGING_IDHUBSPOT_PAK_STAGING
1-7 Serverless Functions のデプロイ

HubSpot Projects を使った Serverless Functions のデプロイフローを学ぶ。

プロジェクト構成
# HubSpot Project の基本ディレクトリ構造 my-project/ ├── hsproject.json # プロジェクト設定 ├── src/ │ ├── app/ │ │ ├── app.json # アプリ設定 │ │ └── extensions/ │ │ ├── crm-card/ # CRM カード │ │ └── 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 # CLI のキャッシュをクリア hs config clear-cache # 環境変数で DEBUG モードを有効化 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 の使い方を、 実際のコード例とともに体系的に解説します。レート制限の回避策と大量データ処理のパターンも取り上げます。