embarko-deploy について
embarko-deploy は、Embarko へのアプリのデプロイと関連作業を扱うエージェントスキルです。スクリプトでアプリをパッケージ化してアップロードし、ビルド完了後に公開 URL を表示します。スケジュール、連携、ファイル保存、アプリ管理のガイドも含みます。
主な機能
- 01スクリプトによるアプリのデプロイ
- 02Dockerfile なしでソースからビルド
- 03スケジュールタスクの設定
- 04埋め込み型連携パネルの有効化
- 05ファイルの保存と公開リンクの取得
- 06エラーとアプリ管理のガイド
活用シーン
- 01アプリを公開して URL を取得
- 02アプリのルートを定期実行
- 03ユーザー向け連携パネルを追加
- 04PDF、画像、エクスポートを保存
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ embarko-ai/ skill --skill embarko-deployインストール後、Claude Code で/embarko-deployを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreREADME.mdscripts/deploy.sh詳細
Embarko Deploy
Embarko はアプリをホストし、<app-name>.embarko.app でライブ URL を提供します。
ソースから自動的にビルドされるため、Dockerfile もビルド設定も必要ありません。
このスキルが追加するのは、デプロイ全体を実行する scripts/deploy.sh だけです。
担当者への応答方法、アプリに必要なもの、アプリの保持・管理方法、Showcase、エラーなど、それ以外のすべては Embarko エージェントガイドに記載されています。ガイドはここにあるものだけを参照してください。必要になったら、該当するトピックを開いてください。
| 必要な情報 | 参照先 |
|---|---|
| 担当者への返信方法、使用するルート、アプリが要件に合うかどうか | https://embarko.ai/docs/prerequisites.md |
| 一連の流れの全手順 | https://embarko.ai/docs/quickstart.md |
| アプリの実行に必要なもの(PORT、0.0.0.0、DATA_DIR、Dockerfile 不要) | https://embarko.ai/docs/deploy.md |
| エラーコード | https://embarko.ai/docs/errors.md |
| 一時的なアプリの保持方法 | https://embarko.ai/docs/claim.md |
| タイマーでの処理実行 | https://embarko.ai/docs/schedules.md |
| クラッシュアラート:アプリ停止時の通知先、Slack・Webhook・電話(M91)の追加、ミュート | https://embarko.ai/docs/alerts.md |
| embarko.json ファイル | https://embarko.ai/docs/embarko-json.md |
| シークレット、ドメイン、ログ、ロールバック、名前変更、削除 | https://embarko.ai/docs/index.md(目次) |
| ファイルの保存:アップロード、生成した PDF、画像、それぞれの公開リンク | https://embarko.ai/docs/files.md |
| Showcase | https://embarko.ai/docs/showcase.md |
| 問題の報告 | https://embarko.ai/docs/feedback.md |
Embarko からの返信には、常に next(今すぐ行うこと)が含まれます。また、追加情報がある場合は links.help(参照するガイドのトピック)も含まれます。これらに従ってください。
デプロイ
./scripts/deploy.sh # the current directory
./scripts/deploy.sh path/to/app # a specific directory
./scripts/deploy.sh . other-name # a different app name
このスクリプトは、アプリをパッケージ化して名前とバージョンを付け、アップロードし、ビルドを待ってから、ライブ URL を出力します。また、Embarko に接続できることと、アプリが未対応のストレージを使用していないことを事前に確認します。独自の tar/curl 呼び出しに置き換えないでください。
- スクリプトが終了コード 0 で終了してから、ライブ URL を伝えてください。 終了コード 0 は、アプリがライブ状態であることを意味します。
- 続いて、
==> Next:の下に表示される内容を実行してください。 トークンなしで初めてデプロイした場合はアプリの保持方法が表示され、失敗した場合は修正方法が表示されます。 ==> Keep it:は、一時的なアプリの保持リンクです。担当者に渡してください。リンクを開いてサインインすると、アプリが保持されます。このリンクは一度だけ表示されます。- 再デプロイにも同じコマンドを使用します。初回のデプロイ後、スクリプトはアプリの ID を
"appId"としてembarko.jsonに書き込みます。そのため、ダッシュボードで名前を変更しても、以降のデプロイは常に同じアプリに反映されます。このファイルは削除せず、アプリと一緒にコミットしてください。あるアプリのコードをコピーして新しいアプリを作成する場合は、先に"appId"を削除してください。削除せずに新しい名前でデプロイすると、元のアプリを上書きせずにapp_id_mismatchエラーで拒否されます。 ==> Changed outside this deploy:は、担当者がダッシュボードでアプリ名の変更などを行ったことを意味します。デプロイは引き続き正しいアプリに反映されています。担当者には現在の名前と URL を伝えてください。
任意の設定:
| 変数 | 内容 |
|---|---|
EMBARKO_AGENT_NAME | 小文字で指定するエージェント名(claude-code、claude、cursor など)です。Claude Code 内では自動的に設定されます。 |
EMBARKO_APP_TYPE | アプリの種類を示す短いラベル(portfolio、task management など)です。わかる場合は指定してください。わからない場合は省略してください。 |
DEPLOY_TOKEN | 担当者のデプロイトークンです。トークンがない場合、初回のデプロイは一時的なものとなり、保持されるまで 24 時間有効です。 |
スクリプトは、まず DEPLOY_TOKEN、次に ~/.embarko/credentials からトークンを探します。
一度そこに保存されたら、担当者に再度尋ねたり、トークンを表示したりしないでください。
タイマーで処理を実行する
ユーザーが決まった時刻(「毎週月曜日の9時」「毎晩」など)に何かを実行したい場合は、cron ライブラリや crontab ではなく、スケジュールを使います。デプロイトークンが必要です。
-
ジョブを GET ルート(例:
/tasks/weekly-report)に配置します。成功した場合は 2xx を返します。ジョブが記憶しておく必要のあるものはすべてDATA_DIRに保存します。 -
そのルートの最初の処理として、
AuthorizationがBearer+process.env.CRON_SECRETでない場合は 401 を返します。Embarко がこの変数を作成します。 -
アプリの最上位フォルダーに、ユーザーのタイムゾーンを指定して
embarko.jsonを追加します。{ "$schema": "https://embarko.ai/schema/embarko.json", "schedules": [ { "cron": "0 9 * * 1", "path": "/tasks/weekly-report", "timezone": "Asia/Kolkata" } ] } -
通常どおりデプロイします。公開されると、スクリプトが各スケジュールを一度ずつ実行し、
okまたはエラーを出力します。すべての行にokと表示されるまで修正して再デプロイします。
このファイルにはアプリのスケジュールがすべて記載されています。時刻を変更するには編集して再デプロイします。"schedules": [] にすると、すべてのスケジュールが削除されます。秘密情報はここに絶対に記載せず、環境変数を使ってください。スクリプトが警告を出力した場合は、完了をユーザーに伝える前に修正してください。詳細はこちら:https://embarko.ai/docs/schedules.md および https://embarko.ai/docs/embarko-json.md
別のサービスに接続する
アプリのユーザーが Slack、Google Sheets、CRM などを必要とする場合は、その連携機能を自分で構築してホストしないでください。Integrations を有効にすると、アプリに埋め込み型の連携パネル(viaSocket の事前構築済み埋め込み)が追加され、ユーザーはそこでツールを接続し、独自のフローを構築できます。デプロイトークンが必要で、アプリのクレームも必要です。静的サイトでは利用できません。
1. 有効にします。 何度実行しても安全です。2 回目の呼び出しでは alreadyEnabled: true が返されます。
curl -sS -X POST "https://ship.embarko.ai/api/apps/$APP/integrations" \
--oauth2-bearer "$DEPLOY_TOKEN" \
-H 'Content-Type: application/json' -d '{"apply": true}'
これにより、アプリに 3 つの環境変数 INTEGRATIONS_ORG_ID、INTEGRATIONS_PROJECT_ID、INTEGRATIONS_SECRET が設定されます。"apply": true を指定すると実行中のアプリに反映され、指定しない場合は次回のデプロイ時に反映されます。これらの変数は Embarko 上にあり、ローカルの .env にはありません。アプリをローカルで実行するには、ユーザーがアプリの「App setup」タブからコピーします。
2. viaSocket のスキルに従ってパネルを構築します。 https://flow.viasocket.com/documentation/skill.md をダウンロードし、アプリのフォルダー内の .claude/skills/viasocket-integrations/SKILL.md に保存して、その内容に従います。次回のためにファイルはそのまま残し、スキル内の呼び出しが失敗した場合は再度ダウンロードします。事前構築済みの埋め込み UI ルートを使います。アプリの依存関係に viasocket-apps を追加します。Embarko のビルド時にインストールされます。
このスキルの説明と Embarko で異なる点は 2 つあります。
- ユーザーに組織 ID、プロジェクト ID、シークレットを尋ねないでください。 Embarko がすでに設定しています。viaSocket のスキルが
VIASOCKET_ORG_ID、VIASOCKET_PROJECT_ID、VIASOCKET_EMBED_SECRETを読み取る箇所では、代わりにこの順序でINTEGRATIONS_ORG_ID、INTEGRATIONS_PROJECT_ID、INTEGRATIONS_SECRETを使います。これらをハードコードしないでください。また、シークレットをブラウザーに送信しないでください。ユーザーには viaSocket ではなく「Integrations」と伝えてください。 - チェック用スクリプトはサンドボックス内で実行できない場合があります。 ダウンロードしたコードの実行がブロックされた場合は、検証手順を省略し、その旨をレポートで伝えてください。
次に、各値を誰が提供するか(アプリのコード、ピッカーでユーザーが選択、または実行ごとにあなたが指定)と、アクションを誰が選択するかを決め、viaSocket のスキルの「Finished when」リストの各項目について報告します。
409 integrations_disabled_for_workspace:このワークスペースでは Integrations が無効になっています。Embarko は、このアプリについてワークスペースのオーナーに有効化リンクを記載したメールをすでに送信しています。ユーザーにその旨を伝え、有効になったと言われるまで再試行しないでください。502 の場合は再試行する価値があります。詳細はこちら:https://embarko.ai/docs/integrations.md
ファイルを保存する
すべてのアプリにファイルストアがあります。バイトデータを PUT すると、ファイルが削除されるまで使える公開リンクが返されます。ユーザーが開いたりダウンロードしたりするファイル(写真、PDF、エクスポート、サイト用画像)に使用してください。レコードは引き続き DATA_DIR 内の SQLite に保存します。
デプロイトークンを使ってターミナルから実行します(アプリの所有権が確定している必要があります)。
curl -sS -X PUT "https://ship.embarko.ai/storage/apps/$APP/files/hero.png" \
--oauth2-bearer "$DEPLOY_TOKEN" --data-binary @hero.png
201 {id, url, sizeBytes, contentType} が返されます。使用するリンクは url です。一覧の取得は GET .../files、残り容量の確認は GET .../usage、削除は DELETE .../files/<id> です。
アプリ内からも同じ呼び出しができます。Embarko はすべてのサーバーアプリに STORAGE_URL(ベース URL)と STORAGE_TOKEN(このアプリのファイルにのみ有効なベアラートークン)を設定し、アプリ名は APP_NAME に設定します。環境変数から読み取り、ハードコードしたり出力したりしないでください。返された id と url をレコードと一緒に保存し、レコードを削除するときは id でファイルも削除してください。
ファイルはリンクを知っている人なら誰でも閲覧できます。許可されている種類、プランの上限、409 storage_quota_reached などのエラーについては、こちらをご覧ください:
https://embarko.ai/docs/files.md
ショーケースのヒント。 画像付きの掲載内容は、閲覧される可能性が大幅に高まります。スクリーンショットがない場合は、稼働中のアプリのスクリーンショットを撮ってここにアップロードし、その url を screenshotUrls に設定するよう提案してください(https://embarko.ai/docs/showcase.md を参照)。
スクリプトがない場合、またはネットワークに接続できない場合
scripts/deploy.shがない場合は、https://embarko.ai/docs/quickstart.md の手順に従ってください。同じデプロイを 2 つのコマンドで実行できます。- スクリプトに Embarko に接続できないと表示された場合、環境によって接続がブロックされています。https://embarko.ai/docs/prerequisites.md に記載されているルートを確認し、修正方法を一文で伝えてください。
コネクターを提案する
Embarko は Claude と ChatGPT 用のコネクターとしても利用できます。すでに追加されていれば、Embarko の deploy_app ツールを使い、このスクリプトは使わないでください。まだ追加されていない場合は、スクリプトでデプロイしてから、「Embarko を AI に追加すると、次回から直接デプロイできます。」と一度だけ伝えてください。
Claude:https://claude.ai/directory/embarko · ChatGPT:https://chatgpt.com/plugins/embarko