n8n-conventions について
n8n のコントリビューター向けクイックリファレンススキルです。TypeScript、フロントエンド、バックエンド、テスト、データベース、コマンドの主要な規約をまとめています。
主な機能
- 01TypeScript とエラー処理のルール
- 02フロントエンドとバックエンドのパターン
- 03テストとデータベースの指針
- 04主要パッケージとコマンドの参照
活用シーン
- 01n8n の編集時に規約を確認
- 02変更に使うプロジェクトパターンの選定
- 03関連コマンドやパッケージの検索
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ n8n-io/ n8n --skill n8n-conventionsインストール後、Claude Code で/n8n-conventionsを入力して読み込まれたか確認します。
詳細
n8n クイックリファレンス
📚 詳細なドキュメント:
- 全般:
/AGENTS.md- アーキテクチャ、コマンド、ワークフロー - フロントエンド:
/packages/frontend/AGENTS.md- CSS 変数、タイミング
重要なパターンをすばやく確認したい場合は、このスキルを使用してください。
重要なルール(必ず従ってください)
TypeScript:
anyは使わず、unknownを使用してください- (テストを除き)
asよりsatisfiesを優先してください - 共通の型は
@n8n/api-typesに定義してください
エラー処理:
import { UnexpectedError } from 'n8n-workflow';
throw new UnexpectedError('message', { extra: { context } });
// DON'T use deprecated ApplicationError
フロントエンド:
- Vue 3 Composition API(
<script setup lang="ts">) - CSS 変数を使用してください(px を直接指定しないでください)。
/packages/frontend/AGENTS.mdを参照してください - すべてのテキストに i18n(
$t('key'))を使用してください - E2E には
data-testidを使用してください(値は 1 つのみ。スペースは使用しないでください)
バックエンド:
- Controller → Service → Repository
@n8n/diによる依存性注入@n8n/configによる設定- バリデーションには Zod スキーマを使用してください
テスト:
- Vitest(ユニットテスト)、Playwright(E2E)
- 外部依存関係をモックしてください
- パッケージのディレクトリから実行してください:
pushd packages/cli && pnpm test
データベース:
- SQLite/PostgreSQL のみ(アプリ DB)
- 例外:DB ノード(MySQL Node など)では、データベース固有の機能を使用できます
コマンド:
pnpm build > build.log 2>&1 # Always redirect
pnpm typecheck # Before commit
pnpm lint # Before commit
主要なパッケージ
| パッケージ | 用途 |
|---|---|
packages/cli | バックエンド API |
packages/frontend/editor-ui | Vue 3 フロントエンド |
packages/@n8n/api-types | 共通の型 |
packages/@n8n/db | TypeORM エンティティ |
packages/workflow | コアインターフェース |
よくあるパターン
Pinia ストア:
import { STORES } from '@n8n/stores';
export const useMyStore = defineStore(STORES.MY_STORE, () => {
const state = shallowRef([]);
return { state };
});
Vue コンポーネント:
<script setup lang="ts">
type Props = { title: string };
const props = defineProps<Props>();
</script>
サービス:
import { Service } from '@n8n/di';
import { Config } from '@n8n/config';
@Service()
export class MyService {
constructor(private readonly config: Config) {}
}
📖 さらに詳しく知りたい場合は、 /AGENTS.md と /packages/frontend/AGENTS.md をお読みください
コメント
Markdown 対応