Web Hosting

Web Hosting は、ビルドした静的ウェブサイトを Space にアップロードし、{subdomain}.weegloo.app というアドレスで配信するリソースです。アパレルショッピングモールを例にすると、ビルドしたショッピングモールサイトを dailywear-shop.weegloo.app として公開するのが Web Hosting 1 件にあたります。

アップロードの手順は次のとおりです。まずビルド結果を ZIP または tar.gz にまとめ、Upload API でアップロードして Upload を 1 つ取得します。その Upload を参照して POST /web-hostingsWeb Hosting を作成します。システムがアップロードされたファイルを処理し、sys.stateCOMPLETED になると url でサイトにアクセスできます。CMA において Web HostingSpace の下位リソースであり、パスは /spaces/{spaceId}/web-hostings を基準とします。

リソース構造

次は処理が完了した Web Hosting「DailyWear ショッピングモールサイト」の単一取得レスポンスです。sys(システムプロパティ)とともに本体プロパティ(namedescriptionisSpasubdomainurlpageMetas)を持ちます。

{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PWeb01Examp",
    "type": "WebHosting",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T11:40:00.000Z",
    "updatedAt": "2026-06-18T11:40:05.000Z",
    "state": "COMPLETED",
    "totalFileSize": 245786,
    "originMetas": [
      {
        "file": "index.html",
        "meta": {
          "title": "Daily Wear Store",
          "description": "Everyday clothing store"
        }
      }
    ],
    "version": 3
  },
  "name": "DailyWear ショッピングモールサイト",
  "description": "衣類・雑貨ショップの静的サイト",
  "isSpa": true,
  "subdomain": "dailywear-shop",
  "url": "https://dailywear-shop.weegloo.app",
  "pageMetas": [
    {
      "file": "index.html",
      "meta": {
        "title": "DailyWear - clothes for every day",
        "description": "Everyday pieces you can wear to work and on weekends.",
        "image": "https://dailywear-shop.weegloo.app/og-cover.png"
      }
    }
  ]
}

主なキー:

  • subdomain: サイトが配信されるサブドメインです。上の例は dailywear-shop であり、最終的なアドレスは dailywear-shop.weegloo.app になります。
  • url: 処理が完了したあとにアクセスできるサイトアドレスです。
  • isSpa: シングルページアプリ(SPA)かどうかです。true の場合、すべてのパスリクエストを index.html に送ります。
  • state: アップロードされたファイルのデプロイ処理状態です。下の システムプロパティ (sys) で説明します。
  • pageMetas: 文書ごとに上書きしたメタタグの値です。sys.originMetas には上書き前の値が入ります。どちらも下の 文書ごとのメタデータ で説明します。

システムプロパティ (sys)

すべての Web Hosting は共通のシステムプロパティを sys オブジェクトに格納します。spacecreatedByupdatedByRefer の形({ "sys": { "id", "type": "Refer", "targetType" } })で入ります。

プロパティタイプ説明
idstringリソースの一意な識別子。単一取得・更新・削除パスの {webHostingId} に入ります。
typestringリソースの種類。Web Hosting は常に "WebHosting"
spaceRefer<Space>この Web Hosting が属する Space
createdByRefer<User>作成したユーザー。
createdAtstring (date-time)作成日時。
updatedByRefer<User>最後に更新したユーザー。
updatedAtstring (date-time)最終更新日時。
statestring (enum)デプロイ処理状態。下の 4 つのいずれか。
errorstring処理失敗時のその理由。失敗でない場合は空です。
totalFileSizeintegerアップロードされたファイルの合計サイズ(バイト)。
originMetasPageMeta[]文書がもともと持っていたメタタグの値。MarketApp のインストールで作られた Web Hosting にのみ入ります。下の 文書ごとのメタデータ で説明します。
versioninteger (≥1)リソースのバージョン。作成・更新のたびに 1 ずつ上がります。更新・部分更新リクエストに x-weegloo-version として載せる値です。

state は、アップロードされたファイルをデプロイする処理段階を表します。Content の公開状態ではなく、Web Hosting には公開やアーカイブの概念はありません。ファイルを処理して COMPLETED になると url でサイトにアクセスできます。

state意味
PENDING処理待ち。
PROCESSING処理中。
COMPLETED処理完了。url でアクセス可能です。
FAILED処理失敗。理由は sys.error に格納されます。

本体プロパティ

Web Hosting の本体プロパティは次のとおりです。

プロパティタイプ説明
namestring (1~64)Web Hosting の名前。作成時に必須。
descriptionstring (≤128)説明。任意。
isSpabooleanシングルページアプリかどうか。true の場合、すべてのパスリクエストを index.html に送ります(SPA ルーティング用)。作成時に必須。
subdomainstring (3~32)配信サブドメイン。パターン ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$(小文字・数字・ハイフン、先頭と末尾はハイフン不可)。作成時に必須。
uploadRefer<Upload>アップロードするファイルを指す参照。ZIP または tar.gz であり、ルートに index.html があり、アセットは相対パスで参照する必要があります。
urlstring処理完了後のアクセス URL。システムが設定します。
pageMetasPageMeta[]文書ごとに上書きするメタタグの値。任意。下の 文書ごとのメタデータ で説明します。
customDomainstring接続したカスタムドメイン。任意。下の カスタムドメイン で説明します。

サブドメインの確認

Web Hosting を作成する前に、使おうとしているサブドメインが空いているかを確認できます。GET /web-hostings/availability?subdomain=... に確認したいサブドメインを subdomain クエリで渡します。

レスポンスは次の形であり、availabletrue であればそのサブドメインを使用できます。

{ "subdomain": "dailywear-shop", "available": true }

カスタムドメイン

デフォルトのアドレスである {subdomain}.weegloo.app の代わりに、自身が保有するドメインを Web Hosting に接続できます。接続したドメインの状態は customDomain オブジェクトで表現され、{ id, domain, dns, cert } の形です。dnscert はそれぞれドメイン所有権の検証(DNS)と証明書の発行(cert)の状態であり、どちらも { status, txtName, txtContent } の形です。txtNametxtContent は、ドメイン側に登録する必要のある DNS TXT レコードの名前と値です。

{
  "id": 1024,
  "domain": "shop.dailywear.example",
  "dns": {
    "status": "pending",
    "txtName": "_weegloo.shop.dailywear.example",
    "txtContent": "weegloo-verify=3trmXRM3RqbgSnifyg7PWebVerifyEx"
  },
  "cert": {
    "status": "pending",
    "txtName": "_acme-challenge.shop.dailywear.example",
    "txtContent": "acme-verify=3trmXRM3RqbgSnifyg7PWebCertEx"
  }
}

ドメイン側に TXT レコードを登録したあと PUT /web-hostings/{webHostingId}/custom-domain/status/verify で検証をトリガーし、現在の状態は GET /web-hostings/{webHostingId}/custom-domain/status で取得します。検証が完了すると dns.statusactivecert.statusok になります。カスタムドメインを接続していない Web Hosting に状態取得を呼び出すとエラーで応答します(エラー を参照)。

文書ごとのメタデータ

アップロードしたサイトの文書ごとに、<head> のメタタグを上書きできます。検索結果やメッセンジャーのリンクプレビューに現れるタイトル・説明・画像がこの値に変わります。ファイルをビルドし直してアップロードするのではなく、リクエスト一つで変えることが目的です。

編集できるのは MarketApp のインストールで作られた Web Hosting だけです。upload でファイルを置き換えると、その時点から編集できなくなり、sys.originMetas も一緒に空になります。条件に反するリクエストは拒否されます(エラー を参照)。

値は pageMetas 配列に入れ、一つの要素が一つの文書を指します。

属性説明
filestring (1-1024)対象文書の相対パス。例: index.htmlabout/index.html
metaWebHostingMetaその文書に適用するスロットの値。

sys.originMetas は同じ形で、上書き前に文書がもともと持っていた値が入ります。戻すときはこの値を送り直します。

スロット

meta のキーをスロットと呼びます。一つのスロットが複数のタグをまとめて変えます。

スロット最大長変わるタグ
title200<title>og:titletwitter:title
description500descriptionog:descriptiontwitter:description
canonical2048link[rel=canonical]og:url
image2048og:imagetwitter:image
siteName200og:site_name
favicon2048link[rel=icon]link[rel="shortcut icon"]link[rel=apple-touch-icon]
themeColor32theme-color

タグが文書になければ、新しく作って差し込みます。ただし五つは例外で、twitter:titletwitter:descriptiontwitter:imagelink[rel="shortcut icon"]link[rel=apple-touch-icon] は文書に既にある場合にのみ値が変わり、ない場合は新しく作られません。

値によって何が起きるか

送った値の形によって結果が分かれます。

リクエストに入れたもの結果
スロットのキーがない現在の設定がそのまま残ります。
スロットのキーが null現在の設定がそのまま残ります。
スロットのキーが空文字列そのタグを文書から削除します。
スロットのキーに値があるその値で上書きします。
pageMetas から文書の要素を外したその文書の設定がそのまま残ります。
pageMetas がないすべての文書の設定がそのまま残ります。

最後の二行に特に注意してください。サーバーは送られた値を文書ごと・スロットごとに 統合 します。そのため 配列から要素を外しても設定は消えず、消すにはそのスロットに空文字列を明示する必要があります。

空文字列は タグを削除するのであって、元に戻すのではありません。文書がもともと持っていたタグも一緒に消えます。元の値に戻すには、sys.originMetas に残っている値を送り直してください。

次のリクエストボディは index.html のタイトルだけを変え、説明タグを削除します。

{
  "pageMetas": [
    {
      "file": "index.html",
      "meta": {
        "title": "デイリーウェア - 毎日着る服",
        "description": ""
      }
    }
  ]
}

pageMetas を変えると、その値を実際の文書に適用する処理が改めて走ります。sys.statePENDING に戻ってから COMPLETED に来ます。その間は修正と削除が拒否されます。

エラー

Web Hosting を扱うときに出会うコードです。すべてのリソースに共通するコードは 共通エラー を参照してください。

コード条件
WGL422031デプロイするファイルを処理している最中の Web Hosting を、更新または削除しようとしました。処理が終わってから改めて試します。
WGL422113文書ごとのメタデータを編集できない Web HostingpageMetas を送りました。MarketApp のインストールで作られていないか、その後アップロードでファイルを置き換えた場合です。
WGL500039接続したカスタムドメインの情報を配信網から読み取れませんでした。
WGL429001カスタムドメインがなかった Web Hosting に新しく接続しようとしたとき、Organization のカスタムドメインの数がすでに料金プランの上限に達していました。すでにあるドメインを変更する操作は数が増えないため、この検査を受けません。

API

以下のすべてのエンドポイントの基準 URL は https://cma.weegloo.com/v1 であり、Authorization ヘッダーに CMA を認証する Bearer トークンが必要です。更新・部分更新は楽観的同時実行制御のために X-Weegloo-Version ヘッダー(現在のリソースの sys.version)を併せて送る必要があります。作成・削除リクエストにはこのヘッダーはありません。

  • Upload API: 静的ファイルの ZIP をアップロードし、Web Hosting 作成に使う Upload を取得するリクエスト。
  • Space: Web Hosting が属する Space