メインコンテンツへスキップ

スクリプトの実行

blocklet exec コマンドは、インストールされた blocklet のライブコンテキスト内でスクリプトを実行するための強力なユーティリティです。これは、データベースの移行、データのシード、または blocklet のランタイム環境変数へのアクセスが必要な一回限りのスクリプトなどのタスクにとって非常に貴重です。

スクリプトが実行中のアプリケーションと同じ設定とシークレットで実行されることを保証し、管理およびデバッグタスクをはるかに簡単で信頼性の高いものにします。

仕組み

blocklet exec を実行すると、CLI は実行中の Blocklet Server に接続し、指定された blocklet インスタンスの環境変数を取得し、それらの変数を注入して新しいプロセスでスクリプトを実行します。これにより、スクリプトは blocklet と同じデータベース、サービス、API に接続できます。

Execute Script

使用方法

スクリプトを実行するには、スクリプトへのパスとターゲット blocklet インスタンスの DID を提供する必要があります。

コマンド構文

bash
blocklet exec <path-to-script> [options]

前提条件

  1. Blocklet Server が実行中であること

    コマンドはサーバーと通信して環境を取得する必要があります。実行中でない場合は、blocklet server start で起動してください。

  2. Blocklet がインストールされていること

    --app-id で識別される blocklet は、すでにサーバーにインストールされている必要があります。

パラメータとオプション

  • path-to-script string (required) — 実行したい Node.js スクリプトへの相対パス。
  • --app-id string (required) — スクリプトを実行する blocklet インスタンスの DID。指定しない場合、CLI は BLOCKLET_DEV_APP_DID 環境変数を探します。
  • --timeout number (default: 1800) — スクリプトの最大実行時間(秒単位)。デフォルトは 30 分(1800 秒)です。

実行中の blocklet の主要な環境変数を確認するスクリプトがあるとします。

まず、スクリプトファイルを作成します:

scripts/check-env.js

javascript
// このスクリプトは blocklet のコンテキスト内で実行され、
// そのすべての環境変数にアクセスできます。

console.log('--- Blocklet コンテキストでスクリプトを実行中 ---');

const appName = process.env.BLOCKLET_APP_NAME;
const appPort = process.env.BLOCKLET_PORT;

if (appName && appPort) {
  console.log(`環境変数に正常にアクセスしました:`);
  console.log(`- Blocklet 名: ${appName}`);
  console.log(`- Blocklet ポート: ${appPort}`);
} else {
  console.error('blocklet 環境変数にアクセスできませんでした。');
  process.exit(1);
}

console.log('--- スクリプト終了 ---');
process.exit(0);

次に、blocklet exec コマンドを使用してスクリプトを実行します。z2qa... を実際の blocklet インスタンスの DID に置き換えてください。

スクリプトを実行

bash
blocklet exec scripts/check-env.js --app-id z2qaR7iY52Nv9m36m883s9yqjM3aW5tV6c7g8

スクリプトが blocklet の環境にアクセスしたことを確認する、次のような出力が表示されるはずです:

期待される出力

text
info blocklet(z2qaR7iY52Nv9m36m883s9yqjM3aW5tV6c7g8) のスクリプトを実行しようとしています (タイムアウト: 1800000ms)
--- Blocklet コンテキストでスクリプトを実行中 ---
環境変数に正常にアクセスしました:
- Blocklet 名: My Awesome App
- Blocklet ポート: 3030
--- スクリプト終了 ---
success 完了!

コンポーネントのスクリプト実行

現在の作業ディレクトリに、より大きな blocklet の一部であるコンポーネントの blocklet.yml ファイルが含まれている場合、blocklet exec はこれをインテリジェントに検出します。親 blocklet とコンポーネント自体の両方からの変数を含む、コンポーネント固有の環境コンテキスト内でスクリプトが自動的に実行されます。

一般的な使用例

データベースの移行

本番環境に近い環境でデータベーススキーマを更新したり、移行を適用したりするスクリプトを実行します。

データシーディング

データベース接続の詳細にアクセスできるスクリプトを使用して、データベースに初期データやテストデータを投入します。

管理タスク

ユーザーのパスワードのリセットや古いレコードのクリーンアップなど、一回限りの管理タスクを実行します。

デバッグ

実行中の blocklet を停止せずにその状態や環境を検査するためのデバッグスクリプトを実行します。