InstallPayload({ previousVersion?: string; newVersion: string } — 新規インストールでは previousVersion は undefined)を受け取りますが、独自の define 関数で宣言され、通常のトリガーモデル (HTTP、cron、データベースイベント) の外側で動作します。
各アプリは、プレインストール関数は最大 1 つ、ポストインストール関数も最大 1 つまで定義できます。 どちらかが複数検出された場合、マニフェストのビルドはエラーになります。
ひと目でわかる概要
経験則: 既定では post-install を使用する。 マイグレーション自体が破壊的で、消える前の状態を先に扱う必要がある場合にのみ、pre-install を使ってください。
両方のフックに共通する動作
- 設定は、トリガー設定を除いた
defineLogicFunctionの設定にshouldRunOnVersionUpgradeを加えたものです。 - 実行タイミング: 既定では新規インストール時のみ。 アップグレード時にも実行するには、
shouldRunOnVersionUpgrade: trueを設定します。previousVersion/newVersionを使って、アップグレードパスに応じて分岐させます。 - べき等性が重要です: 非同期 post-install は再試行される可能性があり、さらに
shouldRunOnVersionUpgradeが有効な場合はいずれのフックもアップグレード時に再実行されます。 - 通常のロジック関数の環境(
APPLICATION_ID、APP_ACCESS_TOKEN、API_URL)が注入されるため、アプリのトークンを使って Twenty API を呼び出せます。 - フックはビルド時に自動的にアプリケーションマニフェストにアタッチされます(
preInstallLogicFunction/postInstallLogicFunction)。defineApplication()内で参照する必要はありません。 - デフォルトの
timeoutSecondsは 300 に設定されており、データシーディングのような長めのセットアップ作業を許容します。 - 開発モードでは実行されません:
yarn twenty devはインストールフローをスキップしてファイルを直接同期するため、フックはそこで一切実行されません。 代わりに手動でトリガーしてください:
definePostInstallLogicFunction
ワークスペースのメタデータマイグレーションが適用された後に実行されます
definePostInstallLogicFunction
ワークスペースのメタデータマイグレーションが適用された後に実行されます
アプリのインストールが完了した後に実行されます: メタデータは同期され、SDK クライアントが生成され、新しいスキーマはクエリ可能な状態になります。 例 — 新規インストール時に既定のレコードをシードする:
src/logic-functions/post-install.ts
shouldRunSynchronously フラグは実行モデルを制御します:false(既定) — メッセージキューに投入され(retryLimit: 3)、ワーカーによって実行される。 ジョブがキューに投入されるとすぐにインストールのレスポンスが返ります。 長時間実行される処理に使用 — 大規模データセットのシーディング、低速なサードパーティ API など。true— インストールフロー中にインラインで実行される。 ハンドラーが終了するまでインストールリクエストはブロックされます。スローされたエラーはPOST_INSTALL_ERRORとして呼び出し元に伝播します(再試行なし)。 高速かつ、レスポンス前に完了している必要がある処理に使用します。 この時点ではマイグレーションはすでに適用済みであるため、失敗してもスキーマ変更はロールバックされず、エラーが表面化するだけです。
definePreInstallLogicFunction
ワークスペースのメタデータマイグレーションが適用される前に実行されます
definePreInstallLogicFunction
ワークスペースのメタデータマイグレーションが適用される前に実行されます
メタデータマイグレーションの前、以前のスキーマに対して実行されます — マイグレーションで失われるデータをバックアップしたり、リスクの高いアップグレードを拒否したりするのに適した場所です。 実行前に、サーバーは純粋に追加のみの「簡易同期」を実行し、新しいバージョンのプレインストール関数だけを登録します。あなたのハンドラーが実行される際には、それ以外 — 以前のバージョンのオブジェクト、フィールド、データ — には一切手を触れません。プレインストールは常に同期的であり、インストールをブロックします。 ハンドラーがスローした場合、スキーマ変更が行われる前にインストールは中止され、ワークスペースは一貫した状態のまま前のバージョンに留まります。 これは意図的な設計です。プレインストールは、リスクの高いアップグレードを拒否できる最後の機会です。例 — マイグレーションでレガシーフィールドが削除される前に、その値をコピーする:
src/logic-functions/pre-install.ts