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

前提条件

  • Node.js 24+こちらからダウンロード
  • Yarn 4 — Corepack 経由で Node.js に同梱されています。 有効化: corepack enable
  • Dockerこちらからダウンロード。 ローカルの Twenty サーバーを実行するために必要です。 すでに別の場所で Twenty が稼働している場合はスキップしてください。
Twenty アプリの構築は 3 つのフェーズで構成されます。 スキャフォルダーはそれらをハッピーパスの 1 つのコマンドにまとめますが、各フェーズは別個の概念です — 何かが失敗したとき、いまどのフェーズにいるかが分かると、直すべき箇所が特定できます。
フェーズやることツール結果
1. スキャフォールドアプリのソースコードを生成するnpx create-twenty-appディスク上の TypeScript プロジェクト
2. サーバーを起動同期先となる Twenty サーバーを起動するDocker + yarn twenty server稼働中の Twenty インスタンス
3. 同期コードをサーバーにライブ同期するyarn twenty dev変更が UI に反映されます

フェーズ 1 — プロジェクトをスキャフォールドする

テンプレートから新しいアプリを作成します:
npx create-twenty-app@latest my-twenty-app
名前と説明の入力を求められます — 既定値でよければ Enter を押します。 これにより、my-twenty-app/ にスターターの application-config.ts、デフォルトロール、CI ワークフロー、統合テストを含む TypeScript プロジェクトが生成されます。 このフェーズ後: マシン上にアプリのソースコードがあります。 まだ実行はされていません — それはフェーズ 2 です。

フェーズ 2 — ローカルの Twenty サーバーを起動する

アプリは同期先としての Twenty サーバーを必要とします。 サーバーは、UI、GraphQL API、PostgreSQL を備えた完全な Twenty インスタンスで、Docker 上でローカルに実行されます。 ローカルのコードは定義をそのサーバーにアップロードし、UI に反映されます。 スキャフォルダーが起動を提案します:
ローカルの Twenty インスタンスをセットアップしますか?
  • Yes(推奨)twentycrm/twenty-app-dev Docker イメージを取得し、ポート 2020 で起動します。 まず Docker が起動していることを確認してください。
  • No — すでに接続したい Twenty サーバーがある場合に選択します。 後で yarn twenty remote:add で接続を設定できます。
ローカルインスタンスを開始しますか?
サーバーが起動すると、サインイン用にブラウザーが開きます。 あらかじめ用意されたデモアカウントを使用します:
  • メールアドレス: tim@apple.dev
  • パスワード: tim@apple.dev
Twenty のログイン画面
次の画面で Authorize をクリックします — これにより、CLI にワークスペースへのアクセスが許可されます。
Twenty CLI の承認画面
ターミナルにセットアップ完了のメッセージが表示されます。
アプリのスキャフォルドに成功しました。
このフェーズ後: あなたの CLI が同期を許可された Twenty サーバーが http://localhost:2020 で稼働しています。
Docker がインストールされていない、または起動していない場合、スキャフォルダーが OS に合った開始コマンドを案内します。 Docker が起動したら、yarn twenty docker:start で再開できます — 再スキャフォールドは不要です。

フェーズ 3 — 変更を同期する

ここが、最も多くの時間を費やす内側のループです。
cd my-twenty-app
yarn twenty dev
これは src/ を監視し、変更のたびに再ビルドして、その結果をサーバーに同期します。 ファイルを編集して保存すると、数秒以内にサーバーに変更が反映されます。 ターミナルにライブステータスパネルが表示されます。 より詳細な出力(ビルドログ、同期リクエスト、エラートレース)が必要な場合は、--verbose フラグを使用します。
開発モードのターミナル出力
ブラウザーで http://localhost:2020/settings/applications#developer を開きます。 Your Apps にアプリが表示されるはずです。
Your Apps リストに My twenty app が表示されている様子
My twenty app をクリックすると、その application registration(アプリを記述するサーバーレベルのレコード。名前、識別子、OAuth 認証情報、ソース)が表示されます。 同一サーバー上では、1 つの登録を複数のワークスペースにインストールできます。
アプリケーション登録の詳細
ワークスペースへのインストールを確認するには View installed app をクリックします。 About タブには現在のバージョンと管理オプションが表示されます。
インストール済みのアプリ
このフェーズ後: ライブな開発ループが確立しています。 src/ 内の任意のファイルを編集すると、UI に反映されます。

CI やスクリプト向けの一回限りの同期

単一のビルド+同期を実行して終了するには --once を指定します — パイプラインは同じでウォッチャーはありません:
yarn twenty dev --once
コマンド動作使用する場面
yarn twenty devソースファイルを監視し、変更のたびに再同期します。 停止するまで実行し続けます。対話的なローカル開発。
yarn twenty dev --onceビルドと同期を一度だけ実行し、成功時はコード 0、失敗時は 1 で終了します。CI、pre-commit フック、AI エージェント、スクリプト化されたワークフロー。
yarn twenty dev --once --dry-runメタデータの変更をビルドして出力しますが、実際には適用しません同期によってどのような変更が行われるかを、実行を確定する前に確認します。
どちらのモードも、認証済みのリモートが必要です。 --dry-run について詳しくは、Syncing & recovery を参照してください。

Dev モードのオプション

フラグ説明
--once一度ビルドと同期を実行したら終了します。
--dry-run--once を使用すると、メタデータの変更を適用せずにプレビューできます。 何も書き込みません。
--debounceMs \<ms>ファイル変更のデバウンス遅延をミリ秒単位で設定します (既定値: 2000)。
--verbose / --debug詳細なビルドログ、同期リクエスト、およびエラートレースを表示します。

構築できるもの

アプリはエンティティで構成されており、それぞれが単一の export default を持つ TypeScript ファイルとして定義されます:
エンティティ機能
オブジェクトとフィールドカスタムデータモデル(ポストカード、請求書など) 型付きフィールド
ロジック関数HTTP ルート、cron スケジュール、またはデータベースイベントによってトリガーされるサーバーサイドの TypeScript
フロントコンポーネントTwenty の UI(サイドパネル、ウィジェット、コマンドメニュー)内でレンダリングされる React コンポーネント
スキルとエージェントAI 機能 — 再利用可能な指示と自律型アシスタント
ビューとナビゲーション事前設定済みのリストビューとサイドバーのメニュー項目
ページレイアウトタブとウィジェットを備えたカスタムのレコード詳細ページ
完全なリファレンス: Concepts

次のステップ

設定

アプリケーション ID、デフォルトロール、インストールフック、公開アセット。

データ

オブジェクト、フィールド、および双方向リレーション。

ロジック

ロジック関数、スキル、エージェント、および OAuth 接続。

レイアウト

ビュー、ナビゲーション、ページレイアウト、フロントコンポーネント。

オペレーション

CLI、テスト、リモート、CI、およびアプリの公開。