設定画面:ショップ構築 / 設定 / Extensions
「Extensions」は、注文確定前・注文完了後など、makeshopが用意したタイミング(Hook)で、ショップ様が開発したプログラムを実行する機能です。
「基幹システムの在庫確認」「注文情報の外部連携」「注文完了画面への案内表示」など、標準機能では実現できないショップ様独自の処理を組み込めます。
|
プログラムの開発は、ショップ様(または委託先の開発会社様)にておこなっていただきます。makeshopにてサポートはいたしかねます。 本機能は、エンタープライズプランの場合に無料で追加できるオプションです。ご利用には、担当営業へのお申し込みが必要です。 ご利用開始時期は、次のとおりです。 ・2026/10/20(火)15時以降に新規で取得したエンタープライズプランのショップID:2026/10/20(火)15時以降 ・既存のエンタープライズプランのショップ様:2027年1月以降(予定) |
利用できるHook
| Hook | 実行タイミング | 結果の扱い | 実行時間の上限 |
|---|---|---|---|
| 注文確定前チェック | 標準の入力チェック通過後、注文確定の直前 | 「通過」「不可(エラーメッセージを表示)」を返し、注文確定の可否を決めます。 | 20秒 |
| 注文完了画面コンテンツ | 注文完了後、注文完了画面の表示時(1回のみ) | 返したメッセージ・リンクなどを注文完了画面に表示します。 | 10秒(推奨2~3秒) |
| 注文完了通知 | 注文完了後(注文ごと) | 注文処理には影響しません。失敗時は自動で再送します。 | 30秒 |
| ・1つのHookに本番反映できるプログラムは1つです。 ・予約商品などで注文が分割された場合、注文完了画面コンテンツは完了画面1枚につき1回、注文完了通知は注文ごとに1回実行されます。 ・注文完了画面を再表示した場合、プログラムは再実行されず、初回の表示内容が使われます。 |
プログラムを開発する
プログラムはWebAssembly(Component Model対応)で作成します。Rust・Goなどで開発できます。
作成方法は「SDKを使ってプログラムを作成する」をご覧ください。
|
・プログラムの開発は、ショップ様(または委託先の開発会社様)にておこなっていただきます。makeshopにてサポートはいたしかねます。 ・プログラムから直接インターネットへは接続できません。外部システムは、設定ファイルのConnector経由で呼び出します。 ・ファイル・環境変数・makeshopのデータベースには直接アクセスできません。 |
SDKを使ってプログラムを作成する
makeshopが提供するSDKには、各Hookの入出力の型や、外部API呼び出し(Connector)の仕組みがあらかじめ用意されています。処理を書く関数を1つ実装するだけで、プログラム(WebAssembly)を作成できます。
| 言語 | 配布先 | 必要な開発環境 |
|---|---|---|
| Rust | crates.io(makeshop-extensions-sdk) / GitHub | Rust 1.98以降、wasm32-wasip2 target |
| Go | GitHub(makeshop-extensions-sdk-go) | Go 1.27.0以降、componentize-go v0.3.4 |
どちらのSDKも、次の3つの実行タイミングに対応しています。
| 実行タイミング | SDK上の名前 | RustのCargo feature | GoのWIT world |
|---|---|---|---|
| 注文確定前チェック | finalize_checkout_validation(Hook) | finalize-checkout-validation-v1 | finalize-checkout-validation-guest |
| 注文完了画面コンテンツ | order_completed_content(Hook) | order-completed-content-v1 | order-completed-content-guest |
| 注文完了通知 | order_completed(Event) | order-completed-v1 | order-completed-guest |
| ・1つのプログラムに実装できる実行タイミングは1つです。Rustでは、Cargo featureを1つだけ有効にしてください。 ・feature名末尾の「-v1」はSDKのバージョンではなく、makeshopとの入出力仕様のバージョンです。 |
Rustで作成する
-
新しいライブラリcrateを作成します。
cargo new --lib my-extension cd my-extension
-
Cargo.tomlに次を追記します。featuresには、実装する実行タイミングのfeatureを1つ指定します。
[lib] crate-type = ["cdylib"] [dependencies] makeshop-extensions-sdk = { version = "0.2", features = ["finalize-checkout-validation-v1"] } -
src/lib.rsに処理を書きます。次の例は、合計金額が100,000円を超える注文を受け付けません。
use makeshop_extensions::finalize_checkout_validation::{ Decision, GuestError, Input, fail, pass, }; #[makeshop_extensions::hook(finalize_checkout_validation)] fn run(input: Input) -> Result<Decision, GuestError> { if input.checkout.total_price > 100_000 { return fail(vec!["注文金額が上限を超えています。".to_string()]); } pass() } -
ビルドします。target/wasm32-wasip2/release/my_extension.wasm が作成されます。
rustup target add wasm32-wasip2 cargo build --release --target wasm32-wasip2
| ・パッケージ名は「makeshop-extensions-sdk」ですが、コード内では「makeshop_extensions」として参照します。 ・cargo test で、アップロードせずに動作を確認できます(Connectorの応答はTestHostで模擬できます)。 ・APIの詳細は、docs.rsをご覧ください。 |
Goで作成する
- 実装する実行タイミングに対応したプロジェクト一式(WIT契約・main packageを含む)を用意します。【要確認:入手方法】
-
ビルドツールとSDKを追加します。
go install github.com/bytecodealliance/componentize-go@v0.3.4 go get github.com/gmomakeshop/makeshop-extensions-sdk-go
-
処理を書きます。次の例は、合計金額が100,000円を超える注文を受け付けません。
package export_makeshop_finalize_checkout_validation_handler import ( hook "github.com/gmomakeshop/makeshop-extensions-sdk-go/contract/finalize-checkout-validation/v1/bindings/makeshop_finalize_checkout_validation_handler" witTypes "go.bytecodealliance.org/pkg/wit/types" ) func Run(input hook.Input) witTypes.Result[hook.Decision, hook.GuestError] { if input.Checkout.TotalPrice > 100_000 { return witTypes.Ok[hook.Decision, hook.GuestError]( hook.MakeDecisionFail([]string{"注文金額が上限を超えています。"}), ) } return witTypes.Ok[hook.Decision, hook.GuestError](hook.MakeDecisionPass()) } -
実行タイミングに対応するWIT worldを指定してビルドします。target/extension.wasm が作成されます。
mkdir -p target componentize-go -d ./wit -w finalize-checkout-validation-guest build -o target/extension.wasm
作成したプログラムを登録する
作成した.wasmファイルと設定ファイル(「設定ファイルを用意する」を参照)をあわせてアップロードします。手順は「Hookのプログラムを公開する」「注文完了通知(Event)を設定する」をご覧ください。
| ・注文確定前チェックで返すエラーメッセージは、購入者に表示される場合があります。運用上の情報はメッセージに含めず、ログに出力してください。 ・注文完了通知は再送されることがあるため、同じ注文を複数回受け取っても問題ない処理にしてください。一時的な失敗は「retry」、再試行しても解消しない失敗は「dead_letter」として返します。 ・SDKのGitHubリポジトリは配布用です。Issueは受け付けていますが、Pull Requestは受け付けていません。 |
設定ファイルを用意する
プログラムとあわせて、実行条件を書いた設定ファイル(YAML)を用意します。
| 項目 | 内容 |
|---|---|
| Hook | 設定ファイルでの指定は不要です。プログラム作成時に選んだ実行タイミング(RustのCargo feature/GoのWIT world)から自動で判定されます。 |
| タイムアウト | 1回の実行時間の上限(ミリ秒)。Hookごとの上限を超える値は登録できません。 |
| 失敗時の動作 | 注文確定前チェックのみ。失敗時に注文を止める(fail-close)か、続行する(fail-open)かを選択します。 |
| Shadow | 注文確定前チェック・注文完了画面コンテンツのみ。ONにすると実行・記録だけをおこない、結果を注文・画面に反映しません。 |
| ショップ設定値(shop_metafields) | プログラムに渡すショップ独自の設定値です。 |
| Connector | 外部APIの接続名・接続先URL・HTTPメソッド・認証方式・タイムアウト・リトライ方針を指定します。 |
| ・Hookに対応しない項目を指定した場合、アップロード時にエラーになります。 ・認証情報は設定ファイルに直接書かず、シークレットに登録し、その名前で参照してください。 ・外部APIの呼び出しは、1回の実行につき10回までです。【要確認:上限値の公開可否】 ・注文完了画面コンテンツでリンク・画像を表示する場合は、そのURLのオリジン(https://ドメイン)を content.allowed_link_origins / content.allowed_image_origins に宣言してください。宣言していないURLを含むと、コンテンツ全体が表示されません。 ・注文完了通知の配信条件は、subscription.filter で指定します。 ・Connectorの接続先URLは、httpsである必要があります。 |
シークレットを登録する
設定画面:ショップ構築 / 設定 / Extensions / シークレット
外部APIのAPIキーやパスワードなどの認証情報を登録します。登録した値はプログラムには渡らず、Connectorの認証時にのみ使われます。
Extensions画面の「シークレット」を開き、「新規登録」をクリックします。
- 名前:
英大文字・数字・アンダースコア(_)のみ使用できます。先頭は英大文字またはアンダースコアにしてください。設定ファイル(YAML)からこの名前で参照します。 - 値:
認証情報を入力します。登録後は再表示できません。
| ・登録済みの値は表示できません。変更する場合は、「編集」から新しい値で上書きします。 ・設定ファイル(YAML)で参照しているシークレットが未登録の場合、そのバージョンはデプロイできません。先にシークレットを登録してください。 ・参照中のシークレットを削除すると、実行時にエラーになる場合があります。 ・登録件数には上限があります。上限に達した場合は、不要なシークレットを削除してください。 |
Hookのプログラムを公開する
設定画面:ショップ構築 / 設定 / Extensions / Hook詳細
対象:注文確定前チェック(finalize_checkout_validation)、注文完了画面コンテンツ(order_completed_content)
- Extensions画面の「Hook」から対象のHookをクリックし、「バージョン」タブを開きます。
- 「新規アップロード」をクリックし、WASMファイルと設定ファイル(YAML)を指定して「アップロード」をクリックします。バージョン番号は自動で採番されます。
- アップロードしたバージョンの「テスト」をクリックし、サンプルペイロードで動作を確認します。
- 問題がなければ「デプロイ」をクリックし、確認画面で「反映」をクリックします。
| タブ | 内容 |
|---|---|
| 概要 | 最近のエラーと最近のデプロイを表示します。 |
| バージョン | アップロード済みのバージョン一覧です。テスト実行・デプロイ・解除・比較をおこないます。 |
| デプロイ履歴 | デプロイ・ロールバックの履歴を表示します。 |
| メトリクス | リクエスト数・成功率・レイテンシなどの推移(直近1時間~30日)を表示します。 |
| 実行ログ | 実行ごとの結果を表示します(「実行ログを確認する」を参照)。 |
「テスト実行」では、会員・ゲスト・クーポン・ポイント利用・分割注文などのテンプレートから選んだサンプルペイロード(JSON)で、指定したバージョンを実行します。ペイロードは編集できます。デプロイ済みバージョンや本番の注文には影響しません。
| ・デプロイすると、本番の実行に即座に反映されます。 ・1つのHookにデプロイできるバージョンは1つです。切り戻すときは、以前のバージョンを「デプロイ」します。 ・「解除」するとデプロイ済みバージョンの割り当てが外れ、そのHookは実行されなくなります。 ・「比較」で、2つのバージョンの設定の差分を確認できます。 ・「失敗時の動作」をfail-closeにした場合、外部システムの障害で注文が確定できなくなります。デプロイ前に必ずご確認ください。 |
注文完了通知(Event)を設定する
設定画面:ショップ構築 / 設定 / Extensions / Event詳細
注文完了通知は、Event「order_completed」に通知先(Subscription)を追加して設定します。
1つのEventに複数のSubscriptionを作成できます。
- Extensions画面の「Event」から「order_completed」をクリックし、「Subscriptionを追加」をクリックします。
- 名前と優先度を入力し、WASMファイルと設定ファイル(YAML)を指定して「作成」をクリックします。
- 作成したSubscriptionで、バージョンを「デプロイ」します。
- バージョン詳細画面の「テスト配信」で、サンプルの注文完了イベントを1件配信して動作を確認します。
- 問題がなければ「有効化」をクリックします。有効化した後に発生した注文から配信されます。
- 名前:
同じEvent内で重複しない名前を入力します。小文字英数字と「-」「_」のみ、63文字まで使用できます。作成後は変更できません。 - 優先度:
「通常」「高」から選択します。 - 配信条件:
設定ファイル(YAML)の subscription.filter で指定し、デプロイ時に反映されます。指定しない場合は、すべての注文完了イベントを配信します。
| Subscriptionのステータス | 意味 |
|---|---|
| 未有効化 | 作成直後の状態です。配信されません。 |
| 稼働中 | 配信しています。 |
| 無効 | 無効化済みです。配信されません。 |
| 停止中 | 配信を停止しています。 |
Subscription詳細の「配信状況」タブでは、配信ごとのステータス(配信待ち・処理中・再試行待ち・配信済み・dead letterなど)、試行回数、次回試行予定を確認できます。
| ・作成しただけでは配信されません。バージョンのデプロイと「有効化」が必要です。 ・配信を止めるときは「無効化」します。 ・有効化中のSubscriptionと、本番の実行実績があるSubscriptionは削除できません。削除すると、アップロードしたバージョンとデプロイ履歴も削除され、元に戻せません。 ・テスト配信は、実データや配信履歴に影響しません。プログラムが購入者宛メールを予約した場合も、テスト配信では送信されず、内容のみ確認できます。 |
実行ログを確認する
設定画面:ショップ構築 / 設定 / Extensions / Hook詳細(「実行ログ」タブ)
Hook・Subscriptionの実行履歴を時系列で表示します。
Hook・ステータス・種別・日時・実行IDで絞り込めます。
Subscriptionの実行ログは、配信状況の配信詳細から「実行ログを見る」でも開けます。
【要確認:実際の画面がない】
| 項目 | 内容 |
|---|---|
| 実行日時 | 実行した日時 |
| Hook | 実行されたHook |
| 種別 | テスト/本番 |
| ステータス | OK/FAILED/SKIPPED/ERROR/CACHED/THROTTLED |
| バージョン | 実行したバージョン |
| latency | 実行にかかった時間 |
| 実行ID | 実行ごとに採番されるID |
行をクリックすると、エラー、コネクタートレース(外部API呼び出しの結果と時間)、ランタイムログ(プログラムが出力したログ)を表示します。
| ・実行ログは60日間保持し、期間を過ぎたログは削除されます。【要確認:上限値の公開可否】 ・プログラムが出力できるログは、1回の実行につき100件・合計64KBまで、1件あたり2KBまでです。【要確認:上限値の公開可否】 |
注意点
- プログラムの開発は、ショップ様(または委託先の開発会社様)にておこなっていただきます。makeshopにてサポートはいたしかねます。
- プログラムは、makeshopの標準処理の後に追加で実行されます。標準処理を置き換えることはできません。
- 定期実行(バッチ処理)、外部から呼び出せるAPIの作成、ショップ画面のデザイン変更には対応していません。
- プログラムはショップごとに隔離されて実行され、他のショップのデータにはアクセスできません。
- 注文完了通知は、再送により同じ注文が2回以上送られることがあります。受け取る側では、入力のイベントIDを使って重複を除いてください。
- 副管理者が操作するには、「ショップ作成」の権限が必要です。権限がない場合は「この操作を行う権限がありません。」と表示されます。
よくある質問
Q. アップロードしたのにプログラムが実行されません
A. アップロードだけでは実行されません。バージョンを「デプロイ」してください。注文完了通知の場合は、Subscriptionの「有効化」も必要です。
Q. 注文完了画面にコンテンツが表示されません
A. ShadowがONになっていないかご確認ください。実行に失敗した場合も表示されません。実行ログでステータスをご確認ください。
Q. プログラムから外部APIを呼べません
A. 外部APIは、設定ファイルで宣言したConnector経由でのみ呼び出せます。
Q. 登録したシークレットの値を確認したい
A. 登録済みの値は表示できません。必要な場合は、新しい値で更新してください。
Q. 不具合があったので元に戻したい
A. 「バージョン」タブで以前のバージョンを「デプロイ」すると切り戻せます。Hookを止める場合は「解除」、注文完了通知を止める場合はSubscriptionを「無効化」してください。