ノーコードデータベースOSS比較:NocoDB vs Baserow vs Teable でAirtable代替をセルフホスト
オープンソースラボ編集部 ・ 2026年6月13日
ノーコードデータベースOSS比較:NocoDB vs Baserow vs Teable でAirtable代替をセルフホスト
AirtableはFreeプランで1,000レコード上限・Plus月$10/ユーザーと、チームが増えるとコストが急増します。NocoDB(既存DBをスプレッドシートUIに変換)・Baserow(完全ホスト型)・Teable(高速Reactスプレッドシート)はオープンソースのAirtable代替で、PostgreSQL/MySQL上で動き、100万レコード以上も軽快に扱えます。
ノーコードデータベースツールの選定理由
- Airtableのコスト削減: 10人チームでPlusプランだと月$100/月。セルフホストで無料化
- 既存DBを活用: Supabase・AWS RDS・PlanetScaleのテーブルをスプレッドシートで操作したい
- 100万レコード対応: AirtableのFreeは1,000件・Plusでも5万件。大規模データを扱いたい
- APIアクセス: REST APIでフォームデータや外部サービスと連携したい
- 権限管理: チームメンバーごとにビュー・編集・閲覧のアクセス制御をしたい
主要ツールの概要
NocoDB
既存のPostgreSQL・MySQL・MariaDB・SQLiteをAirtableライクなスプレッドシートUIに変換するツールです。GitHubスター48k+。既存DBに接続できるのがNocoDBの最大の特徴です。Supabaseのテーブルをそのままビジュアル操作できるため、開発チームが既に使っているDBにノーコードUIを追加したいケースに最適です。
# NocoDBをdocker-composeで起動(既存Supabaseと接続)
version: "3"
services:
nocodb:
image: nocodb/nocodb:latest
restart: always
ports:
- "8080:8080"
environment:
NC_DB: "pg://postgres:5432?u=postgres&p=your-db-password&d=postgres"
NC_AUTH_JWT_SECRET: "your-jwt-secret-min-32-chars"
NC_PUBLIC_URL: https://db.yoursite.com
# 既存Supabaseに接続する場合
# NC_DB: "pg://db.ucceyqlkrzojulwyryia.supabase.co:5432?u=postgres&p=your-password&d=postgres"
volumes:
- nocodb_data:/usr/app/data
volumes:
nocodb_data:
// NocoDB APIを使ってNext.jsからデータを取得
// NocoDBはAirtableライクなREST APIを提供
const NOCODB_TOKEN = process.env.NOCODB_API_TOKEN;
const NOCODB_URL = process.env.NOCODB_URL;
// テーブルのレコードを取得
async function getRecords(tableId: string, params?: {
where?: string;
limit?: number;
offset?: number;
sort?: string;
}) {
const searchParams = new URLSearchParams({
limit: String(params?.limit ?? 25),
offset: String(params?.offset ?? 0),
...(params?.where && { where: params.where }),
...(params?.sort && { sort: params.sort }),
});
const res = await fetch(
`${NOCODB_URL}/api/v1/db/data/noco/{projectId}/${tableId}?${searchParams}`,
{
headers: {
"xc-token": NOCODB_TOKEN!,
},
next: { revalidate: 60 },
}
);
return res.json();
}
// 使用例: Supabaseのarticlesテーブルをノーコードで管理しつつ、APIでも取得
const articles = await getRecords("articles", {
where: "(status,eq,published)",
sort: "-created_at",
limit: 10,
});
// NocoDBのWebhookをNext.jsで受信
// app/api/nocodb-webhook/route.ts
export async function POST(req: Request) {
const payload = await req.json();
// 新規レコード追加時にSlack通知
if (payload.type === "records.after.insert") {
const record = payload.data.rows[0];
await fetch(process.env.SLACK_WEBHOOK_URL!, {
method: "POST",
body: JSON.stringify({
text: `新規エントリ: ${record.title || record.name || record.id}`,
}),
});
}
return Response.json({ ok: true });
}
Baserow
Django製の独立したノーコードデータベースプラットフォームです。GitHubスター11k+。NocoDB と違い独自のDBエンジンを持ちます(既存DBへの接続はエンタープライズ版のみ)。フォームビュー・ギャラリービュー・カレンダービューが充実し、チームコラボレーション機能(コメント・メンション)も豊富です。
# Baserowをdocker-composeで起動
version: "3"
services:
baserow:
image: baserow/baserow:1.28.0
restart: always
environment:
BASEROW_PUBLIC_URL: https://baserow.yoursite.com
SECRET_KEY: "your-50-char-secret-key"
DATABASE_PASSWORD: baserow_pass
DATABASE_NAME: baserow
DATABASE_USER: baserow
DATABASE_HOST: db
REDIS_URL: redis://redis:6379/0
EMAIL_SMTP: "true"
EMAIL_SMTP_HOST: smtp.sendgrid.net
EMAIL_SMTP_PORT: 587
EMAIL_SMTP_USER: apikey
EMAIL_SMTP_PASSWORD: your-sendgrid-key
FROM_EMAIL: noreply@yoursite.com
ports:
- "80:80"
- "443:443"
depends_on:
- db
- redis
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: baserow_pass
POSTGRES_DB: baserow
POSTGRES_USER: baserow
volumes:
- baserow_db:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
baserow_db:
// Baserow APIでデータを操作(AirtableのAPIに似た構造)
const BASEROW_TOKEN = process.env.BASEROW_API_TOKEN;
const BASEROW_URL = process.env.BASEROW_URL || "https://baserow.yoursite.com";
// テーブルから行を取得
async function listRows(tableId: number) {
const res = await fetch(
`${BASEROW_URL}/api/database/rows/table/${tableId}/?user_field_names=true`,
{
headers: { Authorization: `Token ${BASEROW_TOKEN}` },
}
);
return res.json();
}
// 新しい行を作成
async function createRow(tableId: number, data: Record<string, unknown>) {
const res = await fetch(
`${BASEROW_URL}/api/database/rows/table/${tableId}/?user_field_names=true`,
{
method: "POST",
headers: {
Authorization: `Token ${BASEROW_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify(data),
}
);
return res.json();
}
// 使用例: フォーム送信をBaserowに保存
await createRow(tableId, {
Name: formData.name,
Email: formData.email,
Message: formData.message,
Status: "New",
});
Teable
Next.js製の高速スプレッドシート型ノーコードデータベースです。GitHubスター12k+。1,000万レコードでも軽快に動くパフォーマンスが特徴で、AI自動補完・フォーミュラ・ピボットテーブル・Kanbanビューに対応。Airtableの外観と操作感を最もよく再現しています。
# Teableをdocker-composeで起動
version: "3"
services:
teable:
image: ghcr.io/teableio/teable:latest
restart: always
ports:
- "3000:3000"
environment:
PUBLIC_ORIGIN: https://data.yoursite.com
PRISMA_DATABASE_URL: postgresql://teable:teable_pass@postgres:5432/teable
SECRET_KEY: "your-secret-key"
MAIL_HOST: smtp.sendgrid.net
MAIL_PORT: "587"
MAIL_SECURE: "false"
MAIL_USER: apikey
MAIL_PASS: your-sendgrid-key
MAIL_SENDER: noreply@yoursite.com
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: teable
POSTGRES_USER: teable
POSTGRES_PASSWORD: teable_pass
volumes:
- teable_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U teable"]
interval: 5s
timeout: 5s
retries: 10
volumes:
teable_db:
機能比較表
| 比較項目 | NocoDB | Baserow | Teable |
|---|---|---|---|
| ライセンス | AGPL-3.0 | MIT | AGPL-3.0 |
| 既存DB接続 | ✅ PostgreSQL・MySQL | ❌(有料版のみ) | ❌ |
| カレンダービュー | ✅ | ✅ | ✅ |
| Kanbanビュー | ✅ | ✅ | ✅ |
| フォームビュー | ✅ | ✅ | ✅ |
| REST API | ✅ | ✅ | ✅ |
| Webhook | ✅ | ✅ | ✅ |
| AI補完 | ❌ | ❌ | ✅ |
| ピボットテーブル | ❌ | ❌ | ✅ |
| 最小RAM | 512MB | 2GB | 512MB |
| GitHub Stars | 48k+ | 11k+ | 12k+ |
ノーコードデータベースをフォームと連携させる方法はlow-codeカテゴリ(/categories/low-code)でまとめています。NocoDB・Baserowのデータを自動処理するワークフローはopen-source-scheduling(/categories/devops)も参照してください。
FAQ
Q. NocoDBをSupabaseの既存テーブルに接続する場合、Supabaseの設定は何か必要ですか?
A. Supabaseの設定変更は最小限です。接続手順: ①Supabaseダッシュボード→Settings→Database→Connection poolingをOFF(NocoDBはdirect connectionを使うため)②Database URLの?pgbouncer=trueを外した接続文字列をコピー③NocoDBの「External DB」接続でHost/Port/Database/User/Passwordを入力。注意点: ①Supabaseのpublicスキーマ以外のテーブル(auth・storage等)もNocoDBから見えるため、接続ユーザーの権限を制限することを推奨②RLSはNocoDBからはバイパスされる(PostgreSQLのUser権限レベルで制御)③Supabase FreeプランはIPアドレス制限がないため、NocoDBのサーバーIPをSupabaseのAllowed IPsに追加不要。
Q. BaserowのフォームビューをWebサイトに埋め込む方法は?
A. Baserowは共有フォームリンクと埋め込みコードを生成できます。設定手順: ①Baserowのテーブル→「+」でForm viewを作成②フォームのフィールドを選択・並べ替え③Share→「Embed in your website」でiframeコードを取得。iframeコード例: <iframe src="https://baserow.yoursite.com/form/your-slug" style="width:100%;height:600px" frameborder="0"></iframe>. 注意点: フォームの回答はBaserowのテーブルに直接保存されます。Webhookを設定することで、回答時にSlack・メールへの通知も可能です。Next.jsでの利用: Server Componentでiframeをレンダリングするか、フォームJSONをfetchして独自UIを作る選択肢もあります。
Q. Teableの「1,000万レコード対応」は本当ですか?AirtableのDBサイズ制限と比較して教えてください。
A. TeableはPostgreSQLを使っているため、理論上のレコード数制限はPostgreSQLの制限(数十億件)です。実用的には: ①1,000万レコードで通常のフィルタ・ソート操作が1秒以内②インデックスが適切に設定されていれば全文検索も高速③ストレージはレコードあたり約1KBとすると、1,000万件で約10GB。Airtableとの比較: AirtableのFreeプランは1,000件、Plusプランは5万件、Proプランで50万件まで。Airtable Enterpriseでも200万件が推奨上限。TeableやNocoDBは100万件以上でのユースケース(ECの商品マスター・ログデータ分析など)に適しています。ただし、非常に多くのビュー(100+)や複雑なフォーミュラが重なると処理が重くなるため、実際のワークロードでのベンチマークを推奨します。
Q. チームで使う場合のロールベースアクセス制御(RBAC)はどのツールが一番充実していますか?
A. 機能の充実度: Baserow>NocoDB≒Teable。詳細: Baserowは「Workspace Admin」「Builder」「Editor」「Commenter」「Viewer」の5段階ロールを持ち、テーブル・フィールド・行レベルでの権限制御ができます。NocoDB: 「Creator」「Editor」「Commenter」「Viewer」の4段階。フィールドレベルの隠し設定(特定ロールに特定カラムを非表示)も対応。Teable: 「Owner」「Creator」「Editor」「Commenter」「Viewer」の5段階。スペース・ベース・テーブルの階層で権限を設定。選定指針: ①Supabaseの既存テーブルを操作したい→NocoDB②チームコラボレーション・コメント機能重視→Baserow③大量データ・高速動作・AI補完→Teable。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 既存Supabase/PostgreSQLに接続 | NocoDB |
| チームコラボ・コメント・フォーム | Baserow |
| 大量レコード・AI補完 | Teable |
| Airtableの外観再現 | Teable |