snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
---
title: ベストプラクティス',
---
この文書は、バックエンドで作業する際に従うべきベストプラクティスを概説しています。
## モジュール化アプローチを採用する
バックエンドは、NestJSを使用する際の基本原則であるモジュラーアプローチを採用しています。 コードを再利用可能なモジュールに分割し、クリーンで整理されたコードベースを維持してください。
各モジュールは特定の機能や機能性をカプセル化し、明確なスコープを持つべきです。 このモジュラーアプローチにより、関心事を明確に分離し、不要な複雑さを排除します。
## モジュールで使用するサービスを公開する
常に、明確で単一の責務を持つサービスを作成してください。これにより、コードの可読性と保守性が向上します。 サービスには意味のある一貫した名前を付けてください。
他のモジュールで使用したいサービスを公開する必要があります。 サービスを他のモジュールへ公開することは、NestJS の強力な依存性注入システムによって可能であり、コンポーネント間の疎結合を促進します。
## `any` 型の使用を避ける
変数を `any` として宣言すると、TypeScript の型チェッカーは型チェックを行わなくなり、その変数にはあらゆる型の値を割り当てられるようになります。 TypeScript は、値に基づいて変数の型を決定するために型推論を使用します。 `any` として宣言すると、TypeScript は型を推論できなくなります。 これにより、開発中に型に関連したエラーを捕捉しにくくなり、実行時エラーを引き起こし、コードのメンテナンス性、信頼性が低下し、他の人が理解しづらくなります。
これがすべてに型を持たせるべき理由です。 したがって、名と姓を持つ新しいオブジェクトを作成する場合は、操作しているオブジェクトの構造を定義する、名と姓を含むインターフェースまたは型を作成する必要があります。

View File

@@ -0,0 +1,39 @@
---
title: カスタムオブジェクト
---
オブジェクトは、組織独自のデータ(記録、属性、値)を保存するための構造です。 Twenty provides both standard and custom objects. Twenty は標準オブジェクトとカスタムオブジェクトの両方を提供します。
標準オブジェクトは、すべてのユーザーが利用可能な一連の属性を備えた組み込みのオブジェクトです。 標準オブジェクトは、すべてのユーザーが利用可能な一連の属性を備えた組み込みのオブジェクトです。 Examples of standard objects in Twenty include Company and Person. 標準オブジェクトは、すべてのユーザーが利用可能な一連の属性を備えた組み込みのオブジェクトです。 Examples of standard objects in Twenty include Company and Person. 標準オブジェクトには、Twenty のすべてのユーザーが利用できる標準フィールドがあり、例えば Company.displayName があります。
カスタムオブジェクトは、組織に固有の情報を保存するために作成できるオブジェクトです。 カスタムオブジェクトは、組織に固有の情報を保存するために作成できるオブジェクトです。 カスタムオブジェクトは、組織に固有の情報を保存するために作成できるオブジェクトです。 組み込みではないため、ワークスペースメンバーは、標準オブジェクトに適さない情報を保持するためにカスタムオブジェクトを作成およびカスタマイズできます。
## 上位スキーマ
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/custom-object-schema.png" alt="上位スキーマ" />
</div>
<br />
## 仕組み
カスタムオブジェクトは、オブジェクトの形状、名前、およびタイプを決定するメタデータテーブルから来ます。 このすべての情報は、テーブルで構成されるメタデータスキーマデータベースに存在します: このすべての情報は、テーブルで構成されるメタデータスキーマデータベースに存在します: このすべての情報は、テーブルで構成されるメタデータスキーマデータベースに存在します:
* **DataSource**: データの存在場所を示します。
* **オブジェクト**: オブジェクトを説明し、DataSourceにリンクします。
* **フィールド**: オブジェクトのフィールドを概説し、オブジェクトに接続します。
カスタムオブジェクトを追加するには、workspaceMemberが/metadata APIをクエリします。 これにより、メタデータが適切に更新され、メタデータに基づいてGraphQLスキーマが計算され、後で使用するためにGQLキャッシュに保存されます。 これにより、メタデータが適切に更新され、メタデータに基づいてGraphQLスキーマが計算され、後で使用するためにGQLキャッシュに保存されます。 これにより、メタデータが適切に更新され、メタデータに基づいてGraphQLスキーマが計算され、後で使用するためにGQLキャッシュに保存されます。
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/add-custom-objects.jpeg" alt="カスタムオブジェクトを追加するために/metadata APIをクエリ" />
</div>
<br />
データを取得するには、/graphqlエンドポイントを介してクエリを行い、Query Resolverを通過させるプロセスが必要です。
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/custom-object-schema.png" alt="データを取得するために/graphqlエンドポイントをクエリします" />
</div>

View File

@@ -0,0 +1,46 @@
---
title: 機能フラグ
---
機能フラグは試験的な機能を隠すために使用されます。 機能フラグは試験的な機能を隠すために使用されます。 Twentyでは、それらはワークスペースレベルで設定されており、ユーザーレベルではありません。 機能フラグは試験的な機能を隠すために使用されます。 Twentyでは、それらはワークスペースレベルで設定されており、ユーザーレベルではありません。
## 新しい機能フラグの追加
`FeatureFlagKey.ts`に機能フラグを追加します:
```ts
type FeatureFlagKey =
| 'IS_FEATURENAME_ENABLED'
| ...;
```
また、`feature-flag.entity.ts`の列挙型にも追加します:
```ts
enum FeatureFlagKeys {
IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
...
}
```
**バックエンド**機能に機能フラグを適用するには、次を使用します:
```ts
@Gate({
featureFlag: 'IS_FEATURENAME_ENABLED',
})
```
**フロントエンド**機能に機能フラグを適用するには、次を使用します:
```ts
const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
```
## デプロイメント用の機能フラグを設定する
Table `core.featureFlag` 内の対応するレコードを変更します:
| id | キー | workspaceId | 値 |
| ---- | ------------------------ | ----------- | --- |
| ランダム | `IS_FEATURENAME_ENABLED` | WorkspaceID | `真` |

View File

@@ -0,0 +1,125 @@
---
title: フォルダ構成
info: 当社のサーバーフォルダ構造の詳細な観察
---
バックエンドのディレクトリ構造は以下の通りです:
```
server
└───ability
└───constants
└───core
└───database
└───decorators
└───filters
└───guards
└───health
└───integrations
└───metadata
└───workspace
└───utils
```
## 能力
各エンティティの権限を定義し、ハンドラーを含みます。
## デコレータ
NestJS で機能を拡張するためのカスタムデコレーターを定義します。
詳細については、[カスタムデコレータ](https://docs.nestjs.com/custom-decorators) を参照してください。
## フィルター
GraphQLエンドポイントで発生する可能性のある例外を処理するための例外フィルターを含みます。
## ガード
詳細については、[ガード](https://docs.nestjs.com/guards) を参照してください。
## ヘルス
データベースが期待通りに動作しているかを確認するためのJSONを返す公開されたREST API (healthz) を含みます。
## メタデータ
カスタムオブジェクトを定義し、GraphQL API (graphql/metadata) を利用可能にします。
## ワークスペース
メタデータに基づいてカスタムGraphQLスキーマを生成し、提供します。
### ワークスペースディレクトリ構造
```
workspace
└───workspace-schema-builder
└───factories
└───graphql-types
└───database
└───interfaces
└───object-definitions
└───services
└───storage
└───utils
└───workspace-resolver-builder
└───factories
└───interfaces
└───workspace-query-builder
└───factories
└───interfaces
└───workspace-query-runner
└───interfaces
└───utils
└───workspace-datasource
└───workspace-manager
└───workspace-migration-runner
└───utils
└───workspace.module.ts
└───workspace.factory.spec.ts
└───workspace.factory.ts
```
ワークスペースディレクトリのルートには、`workspace.factory.ts` が含まれ、`createGraphQLSchema` 関数が含まれています。 この関数は、メタデータを使用して、個々のワークスペース用のスキーマを調整し、ワークスペース固有のスキーマを生成します。 スキーマとリゾルバーの構築を分離することで、`makeExecutableSchema` 関数を使用し、これらの個別要素を組み合わせます。 この関数は、メタデータを使用して、個々のワークスペース用のスキーマを調整し、ワークスペース固有のスキーマを生成します。 スキーマとリゾルバーの構築を分離することで、`makeExecutableSchema` 関数を使用し、これらの個別要素を組み合わせます。 この関数は、メタデータを使用して、個々のワークスペース用のスキーマを調整し、ワークスペース固有のスキーマを生成します。 スキーマとリゾルバーの構築を分離することで、`makeExecutableSchema` 関数を使用し、これらの個別要素を組み合わせます。
この戦略は、組織化だけでなく、パフォーマンスやスケーラビリティを向上させるための型定義のキャッシングのような最適化にも役立ちます。
### ワークスペーススキーマビルダー
GraphQLスキーマを生成し、含まれるもの:
#### ファクトリー:
GraphQL関連の構造を生成するための専門的なコンストラクター。
* type.factoryは、フィールドメタデータを`TypeMapperService`を使用してGraphQLタイプに変換します。
* type-definition.factoryは、`objectMetadata`から導出されるGraphQLの入力または出力オブジェクトを作成します。
#### GraphQLタイプ
列挙型、入力、オブジェクト、スカラーを含み、スキーマ構築の基礎となります。
#### インターフェースとオブジェクト定義
GraphQLエンティティの設計図を含み、`MONEY`や`URL`のような定義済みおよびカスタムタイプが含まれます。
#### サービス
FieldMetadataTypeに対応するGraphQLスカラーまたはクエリ修飾子を関連付けるためのサービスを含みます。
#### ストレージ
GraphQLタイプの重複を防ぐための再利用可能な型定義を含む`TypeDefinitionsStorage`クラスを含みます。
### ワークスペースリゾルバービルダー
GraphQLスキーマのクエリおよび変更を行うリゾルバー関数を作成します。
このディレクトリ内の各ファクトリーは、様々なテーブルに適用可能な`FindManyResolverFactory`のように、異なるリゾルバータイプを生成する役割を果たします。
### ワークスペースクエリランナー
データベースで生成されたクエリを実行し、その結果を解析します。

View File

@@ -0,0 +1,41 @@
---
title: メッセージキュー
---
キューは非同期処理を実行するための手段を提供します。 それらは、登録時にウェルカムメールを送信するなどのバックグラウンドタスクを実行するために使用できます。
各ユースケースには `MessageQueueServiceBase` から拡張された独自のキュークラスが必要です。
現在のところ、キュードライバとして `bull-mq`[bull-mq](https://bullmq.io/) のみをサポートしています。
## 新しいキューを作成して使用する手順
1. enum `MESSAGE_QUEUES` に、新しいキュー用のキュー名を追加します。
2. 依存トークンとしてキュー名を持つキューのファクトリ実装を提供します。
3. 依存性トークンとしてキュー名を使用して、作成したキューを必要なモジュール/サービスにインジェクトします。
4. トークンベースのインジェクションを用いたワーカークラスをプロデューサーと同様に追加します。
### 使用例
```ts
class Resolver {
constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {}
async onSomeAction() {
//business logic
await this.queue.add(someData);
}
}
//async worker
class CustomWorker {
constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {
this.initWorker();
}
async initWorker() {
await this.queue.work(async ({ id, data }) => {
//worker logic
});
}
}
```

View File

@@ -0,0 +1,92 @@
---
title: バックエンドコマンド
icon: terminal
---
## 便利なコマンド
これらのコマンドは packages/twenty-server フォルダから実行してください。
これらのコマンドは packages/twenty-server フォルダから実行してください。
これらのコマンドは packages/twenty-server フォルダから実行してください。
これらのコマンドは packages/twenty-server フォルダから実行してください。
これらのコマンドは packages/twenty-server フォルダから実行してください。
これらのコマンドは packages/twenty-server フォルダから実行してください。
From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
### 初期設定
```
npx nx database:reset twenty-server # setup the database with dev seeds
```
### サーバーの起動
```
npx nx run twenty-server:start
```
### Lint
```
npx nx run twenty-server:lint # pass --fix to fix lint errors
```
### テスト
```
npx nx run twenty-server:test:unit # run unit tests
npx nx run twenty-server:test:integration # run integration tests
```
注: 統合テストを実行する前にデータベースをリセットする必要がある場合、 `npx nx run twenty-server:test:integration:with-db-reset` を実行できます。
### データベースのリセット
データベースをリセットおよびシードしたい場合は、次のコマンドを実行してください:
```bash
npx nx run twenty-server:database:reset
```
### マイグレーション
#### Core/Metadata スキーマ (TypeORM) のオブジェクトに対して
```bash
npx nx run twenty-server:database:migrate:generate
```
## 技術スタック
Twenty は主にバックエンドに NestJS を使用しています。
最初に使用した ORM は Prisma でした。 最初に使用した ORM は Prisma でした。 But in order to allow users to create custom fields and custom objects, a lower-level made more sense as we need to have fine-grained control. 最初に使用した ORM は Prisma でした。 But in order to allow users to create custom fields and custom objects, a lower-level made more sense as we need to have fine-grained control. 現在のプロジェクトでは TypeORM を使用しています。
現在の技術スタックは次のようになっています。
**コア**
* [NestJS](https://nestjs.com/)
* [TypeORM](https://typeorm.io/)
* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
**データベース**
* [Postgres](https://www.postgresql.org/)
**サードパーティ統合**
* [Sentry](https://sentry.io/welcome/) バグトラッキング用
**テスト**
* [Jest](https://jestjs.io/)
**ツール**
* [Yarn](https://yarnpkg.com/)
* [Oxlint](https://oxc.rs/docs/guide/usage/linter.html)
**開発**
* [AWS EKS](https://aws.amazon.com/eks/)

View File

@@ -0,0 +1,85 @@
---
title: Zapierアプリ
---
[Zapier](https://zapier.com/) を使って、3000以上のアプリと Twenty を簡単に同期できます。 タスクを自動化し、生産性を高め、顧客関係を強化しよう!
## Zapierについて
Zapierは、チームが毎日使用するアプリを連携させてワークフローを自動化するツールです。 Zapierの基本的な概念は、Zapsと呼ばれる自動化ワークフローであり、トリガーとアクションを含みます。 Zapierは、チームが毎日使用するアプリを連携させてワークフローを自動化するツールです。 Zapierの基本的な概念は、Zapsと呼ばれる自動化ワークフローであり、トリガーとアクションを含みます。 Zapierの基本的な概念は、Zapsと呼ばれる自動化ワークフローであり、トリガーとアクションを含みます。
Zapierの仕組みについてもっと知りたい方は[こちら](https://zapier.com/how-it-works)をご覧ください。
## セットアップ
### ステップ 1: Zapier パッケージをインストール
```bash
cd packages/twenty-zapier
yarn
```
### ステップ 2: CLI でログイン
Zapierの資格情報を使用してCLIでログインしてください。
```bash
zapier login
```
### ステップ3:環境変数をセットアップします
`packages/twenty-zapier`フォルダーから実行します。
```bash
cp .env.example .env
```
アプリケーションをローカルで実行し、[http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks)にアクセスしてAPIキーを生成してください。
.envファイルの**YOUR_API_KEY**値を生成したAPIキーで置き換えてください。
## 開発
<Warning>
`zapier`コマンドを実行する前に`yarn build`を実行してください。
</Warning>
### テスト
```bash
yarn test
```
### Lint
```bash
yarn format
```
### コードを編集しながら監視&コンパイル
```bash
yarn watch
```
### Zapierアプリを検証
```bash
yarn validate
```
### Zapierアプリをデプロイ
```bash
yarn deploy
```
### すべてのZapier CLIコマンドを列挙
```bash
zapier
```