---
title: "Better-T-Stackとは？使い方・既定構成・T3 Stackとの違い【v3.49実測】"
url: "https://www.issoh.co.jp/tech/details/10225/"
published: 2025-12-11
updated: 2026-11-10
categories: ["TypeScript"]
publisher: "株式会社一創"
---

# Better-T-Stackとは？使い方・既定構成・T3 Stackとの違い【v3.49実測】

Better-T-Stackは、フロントエンドからAPI・DB・認証までをTypeScriptでつないだプロジェクト雛形を、1本のCLIコマンドで生成するオープンソースのツールです。npmのパッケージ名は`create-better-t-stack`で、最新版は2026年10月24日公開の**3.49.0**です。この記事では3.49.0を実行して確かめた既定構成、CLIが拒否する組み合わせ、テーブルとAPIを足す手順、本番化で必要になる作業を、T3 Stack（create-t3-app）との違いとあわせて説明します。

## まとめ：Better-T-Stackの要点

- **何をするツールか**：`npx create-better-t-stack@latest`（または`bun create better-t-stack@latest`）で、選んだ技術の組み合わせどおりのモノレポを生成します。ライセンスはMITです。
- **既定構成**：`--yes`で作ると、TanStack Router＋Hono＋Bun＋tRPC＋SQLite＋Drizzle＋Better Auth＋Turborepoになります。
- **動作要件**：Node.js 22以上、npmで使うならnpm 11.16.0以上です。既定のランタイムはBunなので、Bunが無いと`npm run dev`のサーバー側は起動しません。
- **型安全**：サーバーのtRPCルーターを変えると、フロントの参照箇所が型検査でエラーになることを実測で確認しました。
- **T3 Stackとの違い**：create-t3-appはNext.js単体のアプリを作ります。Better-T-Stackはフロントとバックエンドを分けたモノレポが基本で、Next.js以外のフロントエンドや独立したAPIサーバーも選べます。
- **注意点**：既定のDrizzleは1.0のRC版です。生成後の`add`コマンドでは主要技術を切り替えられません。匿名のテレメトリは既定で有効です。

## Better-T-Stackの正体：create-better-t-stackが生成するもの

Better-T-Stackは、GitHubの[AmanVarshney01/create-better-t-stack](https://github.com/AmanVarshney01/create-better-t-stack)で開発されているCLIです。生成されるのは**アプリの雛形**で、実行時に使うフレームワークではありません。生成後のプロジェクトはHono・tRPC・Drizzleなどを普通に依存関係として持つだけで、Better-T-Stack自体には依存しません。

名前の「T」はTypeScriptを指し、T3 Stackの考え方を下敷きにしています。「better t3 stack」で検索されることもありますが、正式な表記は**Better-T-Stack**です。ログ監視サービスのBetter Stackとは関係ありません（監視SaaSのほうは[Better Stackの解説記事](/tech/details/18359/)で扱っています）。

| 項目        | 内容（2026年11月10日確認）                   |
| --------- | ----------------------------------- |
| npmパッケージ  | create-better-t-stack               |
| 最新版       | 3.49.0（2026-10-24）                  |
| 初版        | 1.0.0（2025-02-12）                   |
| メジャー版     | 2.0.0（2025-04-17）、3.0.0（2025-10-06） |
| npmの掲載版数  | 548（プレリリース含む）                       |
| GitHubスター | 5,857                               |
| ライセンス     | MIT                                 |
| 公式サイト     | better-t-stack.dev                  |

更新は速く、2026年10月だけで安定版が7版出ています。同じ`@latest`でも実行した日によって生成物が変わるので、チームで構成を揃えるときは`npx create-better-t-stack@3.49.0`のように版を固定してください。直近の主な変更は次のとおりです（日付はnpm公開日のUTC）。

| 版      | 公開日   | 主な変更                            |
| ------ | ----- | ------------------------------- |
| 3.45.0 | 10-12 | Ultracite v8・Vite+ 1.1.0へ移行     |
| 3.46.0 | 10-13 | TanStack Startの安定版を採用           |
| 3.47.0 | 10-16 | モバイル雛形をExpo SDK 58へ更新           |
| 3.48.0 | 10-22 | Hosted MCP追加・SvelteKit 3へ移行     |
| 3.49.0 | 10-24 | Convex向けBetter Auth修正・Alchemy更新 |

変更の全文は[GitHubのリリース一覧](https://github.com/AmanVarshney01/create-better-t-stack/releases)で確認できます。

## create-better-t-stackでプロジェクトを作る手順

### 動作要件：Node.js 22以上とnpm 11.16.0以上

[CLIのREADME](https://github.com/AmanVarshney01/create-better-t-stack/blob/main/apps/cli/README.md)の要件は、Node.js 22以上、npmを使う場合は11.16.0以上、pnpmを使う場合は10.26.0以上です。Bunは1.4以上が推奨で、最低は1.2.14とされています。公式のQuick StartはNode.js LTSを前提に挙げています。Node.jsに同梱のnpmが古いときは、先にnpmを更新してください。

### 対話モードでの技術スタック選択

READMEのQuick Startが示すコマンドは次の3つで、Bunが推奨です。引数なしで実行すると、フロントエンド・バックエンド・ランタイム・API・DB・ORM・認証などを順に質問されます。

```
bun create better-t-stack@latest
pnpm create better-t-stack@latest
npx create-better-t-stack@latest
```

### CLIフラグによる非対話生成と–yesの併用エラー

全項目をフラグで指定すれば、CIやスクリプトから同じ構成を再現できます。生成されたプロジェクト直下の`bts.jsonc`には、その構成を再現するコマンドが`reproducibleCommand`として記録されます。`--yes`で作った場合の記録は次のとおりです。

```
npx create-better-t-stack@latest my-app --frontend tanstack-router --backend hono --runtime bun --database sqlite --orm drizzle --api trpc --auth better-auth --payments none --addons turborepo --examples none --db-setup none --web-deploy none --server-deploy none --no-git --package-manager npm --no-install
```

`--yes`は既定構成を丸ごと使うフラグなので、スタックを指定するフラグとは併用できません。たとえば`--yes --runtime node`は次のエラーで止まりました。既定から一部だけ変えたいときは、上のコマンドの該当箇所を書き換えて使います。

```
[error] Cannot combine --yes with core stack configuration flags: --runtime. The --yes flag uses default configuration. Remove these flags or use --yes without them.
```

`--dry-run`を付けると、ファイルを書き込まずに構成の検証だけを行います。対話の途中で止まるときは、生成後に開くエディタを聞かれていることがあるので`--open none`を足してください。

### Stack Builderでの構成選択とコマンド生成

公式サイトの`better-t-stack.dev/new`では、画面上で項目を選ぶと対応するCLIコマンドが組み上がります。CLIから`npx create-better-t-stack@latest builder`を実行しても同じ画面が開きます。選択肢を一覧したいときはBuilderが速く、構成が決まったらコマンドをコピーしてCLIで実行する流れになります。

### 生成後のDB初期化と開発サーバー起動

既定構成のDBはローカルのSQLiteファイル（`DATABASE_URL=file:../../local.db`）なので、DBサーバーの準備は要りません。次の順に実行します。

```
cd my-app
npm install
npm run db:push
npm run dev
```

フロントエンドは`http://localhost:3001`、APIサーバーは`http://localhost:3000`で起動します。`db:push`を飛ばすとBetter Authのテーブルが無いままなので、先に済ませてください。Drizzle Studioは`npm run db:studio`で開きます。古い解説に出てくる`db:local`（Turso CLIでの起動）は、3.49.0の既定構成には生成されません。

Node.js v26.5.0・npm 11.17.0で`npm install`を実行すると、419パッケージが追加されて`node_modules`は523MBになり、`npm audit`の報告は6件（low 2件・moderate 4件）でした。本番に出す前に内容を確認してください。

## 既定構成（–yes）の中身と生成されるファイル

`--yes`で生成した構成と、`package.json`に書かれた版は次のとおりです（3.49.0・2026年11月10日に生成）。

| 層       | 既定の選択                 | 生成時の版                            |
| ------- | --------------------- | -------------------------------- |
| フロントエンド | React＋TanStack Router | react ^19.3.0 / router ^1.170.44 |
| ビルド     | Vite＋Tailwind CSS     | vite ^8.3.4 / tailwindcss ^4.3.3 |
| バックエンド  | Hono                  | hono ^4.13.7                     |
| ランタイム   | Bun                   | –                                |
| API     | tRPC                  | @trpc/server ^11.19.0            |
| DB      | SQLite（libSQL）        | @libsql/client 0.18.0            |
| ORM     | Drizzle               | drizzle-orm 1.0.0-rc.5           |
| 認証      | Better Auth           | better-auth 1.7.12               |
| モノレポ    | Turborepo             | turbo ^2.11.7                    |
| 言語      | TypeScript            | typescript ^6.0.3                |

生成されるのは、npm workspacesで`apps/*`と`packages/*`を束ねたモノレポです。

```
my-app/
├── apps/
│   ├── web/        # Vite + React + TanStack Router（ポート3001）
│   └── server/     # Hono（ポート3000）。/trpc/* と /api/auth/* を受ける
├── packages/
│   ├── api/        # tRPCルーター（appRouter と型 AppRouter）
│   ├── auth/       # Better Authの設定
│   ├── db/         # Drizzleのスキーマ・drizzle.config.ts
│   ├── ui/         # shadcn/ui形式の共有コンポーネント
│   └── config/     # 共通のtsconfig
├── bts.jsonc       # 生成時の構成（add コマンドが参照）
└── package.json    # turbo run dev / build / check-types
```

tRPCルーターを`apps/server`ではなく`packages/api`に置いているのが、この構成の要です。webは`packages/api`の型だけをimportするので、サーバーの実装をフロントのバンドルに含めずに型を共有できます。`.env`は`apps/server`と`apps/web`に生成され、Better Authの署名鍵（`BETTER_AUTH_SECRET`）もランダム値で書き込まれます。本番では値を作り直してください。環境変数の型と必須チェックは、`.env.schema`を読むvarlockが担います。`bts.jsonc`は`add`コマンドが読むので、後でアドオンを足すなら消さないでください。

## 選べる技術と組み合わせの制約

3.49.0の`create --help`に並ぶ選択肢（none以外）は次のとおりです。解説記事によくある「45種類以上」のような総数は版ごとに変わるので、使う版のヘルプで確かめるのが確実です。

| フラグ                          | 選択肢（3.49.0）                                             |
| ---------------------------- | ------------------------------------------------------- |
| –frontend（React系）            | tanstack-router / react-router / tanstack-start / next  |
| –frontend（その他Web）            | nuxt / svelte / solid / astro                           |
| –frontend（モバイル）              | native-bare / native-uniwind / native-unistyles         |
| –backend                     | hono / express / fastify / elysia / convex / self       |
| –runtime                     | bun / node / workers                                    |
| –api                         | trpc / orpc                                             |
| –database                    | sqlite / postgres / mysql / mongodb                     |
| –orm                         | drizzle / prisma / mongoose                             |
| –auth                        | better-auth / clerk                                     |
| –payments                    | polar                                                   |
| –db-setup（SQL系）              | turso / neon / prisma-postgres / planetscale / supabase |
| –db-setup（その他）               | mongodb-atlas / d1 / docker                             |
| –web-deploy / –server-deploy | cloudflare / prisma / docker / vercel                   |

`--backend self`は、Next.jsやTanStack StartなどのフルスタックフレームワークにAPIを同居させる構成です。`--addons`では、pwa・tauri・electrobun・starlight・biome・lefthook・husky・mcp・turborepo・nx・vite-plus・fumadocs・ultracite・oxlint・opentui・wxt・skills・evlog・axiomの19種を複数選べます。ただしturborepo・nx・vite-plusは同時に1つだけです。

### CLIが拒否する組み合わせ

Builderでは選べない組み合わせが自動で無効になりますが、フラグで渡すとCLIがエラーで止めます。`--dry-run`で試したときのメッセージは次のとおりです。

```
[error] Convex backend requires '--database none'. Please remove the --database flag or set it to 'none'.
[error] Cloudflare Workers runtime (--runtime workers) is only supported with Hono backend (--backend hono). Current backend: express. Please use '--backend hono' or choose a different runtime.
[error] Drizzle ORM does not support MongoDB. Please use '--orm mongoose' or '--orm prisma' or choose a different database.
[error] tRPC API is not supported with 'svelte' frontend. Please use --api orpc or --api none or remove 'svelte' from --frontend.
```

tRPCが拒否されるのはsvelte・nuxt・solid・astroの4つで、いずれも同じ形式のエラーを確認しました。これらのフロントエンドでAPIの型を共有するなら`--api orpc`を選びます。全ルールは[公式の互換性ドキュメント](https://www.better-t-stack.dev/docs/cli/compatibility)にあります。`--yolo`でこの検証を飛ばせますが、ヘルプにも「NOT RECOMMENDED」とあるので通常の導入では使わないでください。

### –templateで選択できる4つの定番構成

`--template`には、定番の組み合わせを一度に指定するプリセットが4つあります。

| テンプレート  | フロント            | バックエンド           | API  | DB / ORM             |
| ------- | --------------- | ---------------- | ---- | -------------------- |
| t3      | Next.js         | フルスタック（self）     | tRPC | PostgreSQL / Prisma  |
| pern    | TanStack Router | Express（Node.js） | tRPC | PostgreSQL / Drizzle |
| mern    | React Router    | Express（Node.js） | oRPC | MongoDB / Mongoose   |
| uniwind | Expo＋Uniwind    | なし               | なし   | なし                   |

t3・pern・mernの認証はBetter Authです。t3にはBiomeとTurborepoが付き、pernとmernにはTodoアプリの例が入ります。mernのDB設定は`mongodb-atlas`になるので、Atlasを使わない場合は全項目をフラグで指定してください。

## テーブルとtRPC APIの追加：型安全が効く範囲の検証

### DrizzleのテーブルとtRPC procedureを足す手順

雛形を生成しただけでは、DBにあるのは認証用のテーブルだけです。既定構成に、メモを保存する`note`テーブルと一覧・追加のAPIを足します。この例の一覧APIは未ログインでも全件を取得できる公開用です。個人用メモにする場合は、所有者IDの保存と、ログインユーザーの所有データだけを取得する認可処理が必要です。まず`packages/db/src/schema/note.ts`を作り、同じフォルダの`index.ts`に`export * from "./note";`を追加します。

```
import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";

export const note = sqliteTable("note", {
  id: integer("id").primaryKey({ autoIncrement: true }),
  body: text("body").notNull(),
});
```

次に`packages/api/src/routers/index.ts`へprocedureを足します。`@my-app`の部分はプロジェクト名で変わります。DBのクライアントは、生成済みのコードが`ctx.db`に入れてくれます。

```
import { note } from "@my-app/db/schema/note";
import { z } from "zod";

// appRouter の中に追加する
noteList: publicProcedure.query(({ ctx }) => ctx.db.select().from(note)),
noteAdd: protectedProcedure
  .input(z.object({ body: z.string().min(1) }))
  .mutation(({ ctx, input }) => ctx.db.insert(note).values(input).returning()),
```

`npm run db:push`でテーブルを作って起動すると、未ログインの`noteAdd`は`UNAUTHORIZED`（HTTP 401）で拒否されました。Better Authでサインインした後のCookieを付けて呼ぶと、次の結果が返ります。空文字を送るとzodの検証で`too_small`のエラーになります。

```
$ curl -b cookie.txt -X POST http://localhost:3000/trpc/noteAdd -H 'Content-Type: application/json' -d '{"body":"hello"}'
{"result":{"data":[{"id":1,"body":"hello"}]}}
```

### サーバーの変更がフロントの型エラーになる範囲

webから`trpc.noteAdd.mutationOptions()`を使うコンポーネントで、わざと誤った入力と存在しない列を書いて型検査すると、次のエラーになりました。入力の型はzodのスキーマから、出力の型はDrizzleのテーブル定義から届いています。

```
src/note-check.tsx(8,16): error TS2353: Object literal may only specify known properties, and 'title' does not exist in type '{ body: string; }'.
src/note-check.tsx(9,31): error TS2339: Property 'text' does not exist on type '{ id: number; body: string; }'.
```

生成済みの`privateData`でも同じです。サーバー側の`message`を`msg`に改名すると、`apps/web/src/routes/_auth/dashboard.tsx`の`privateData.data?.message`が`TS2339`になります。APIの仕様書もコード生成も使わず、サーバーの変更がコンパイルエラーとして表に出ます。

型検査は`npm run check-types`で実行してください。生成直後に`apps/web`で`tsc --noEmit`を直接実行すると、`Cannot find module './routeTree.gen'`でルート定義まで総崩れになります。ルートの型ファイルはViteのビルドで作られるため、webの`check-types`は`vite build && tsc --noEmit`の順に組まれています。

### createdAtがstringになるシリアライズの型変化

`msg`に改名したときのエラー文には、ユーザーの型が`createdAt: string`と表示されていました。Better Authの`createdAt`はサーバーでは`Date`ですが、クライアントの型では`string`です。既定構成の`initTRPC`にはsuperjsonなどのtransformerが設定されていないため、JSONに変換された後の型がクライアントに渡ります。日時を`Date`のまま扱うなら、クライアントで`new Date()`に戻すか、tRPCにtransformerを追加してください。型安全はシリアライズでの型の変化まで隠してくれるわけではありません。tRPCの仕組みは[tRPCの解説記事](/tech/details/7937/)で扱っています。

## 本番化に必要なマイグレーションとデプロイ構成

### db:pushからdb:generate・db:migrateへの切り替え

`db:push`はスキーマの差分をDBへ直接当てるので、履歴が残りません。本番DBはマイグレーションファイルで管理します。`db:generate`を実行すると`packages/db/src/migrations/`に`migration.sql`と`snapshot.json`を含むフォルダができ、空のDBに`db:migrate`を当てると認証用テーブルと`note`が作られ、`__drizzle_migrations`に履歴が残りました。

CIやスクリプトなど端末の無い環境では、ルートの`npm run db:push`が次のエラーで止まります。`turbo.json`で`db:push`・`db:generate`・`db:migrate`が`interactive`のタスクになっているためで、案内にある`TURBO_UI=true`を付けても同じでした。

```
x Cannot run interactive task "@my-app/db#db:push" without Terminal UI.
```

ワークスペースのスクリプトを直接呼べばTurborepoを通らず、端末の無い環境でも完走しました。`db:generate`は開発時に実行して生成されたSQLをレビューし、コミットしておきます。本番デプロイのジョブでは適用だけを行います。

```
# 事前に生成・レビュー・コミットしたマイグレーションを適用
npm run db:migrate -w @my-app/db
```

### –server-deployと–web-deployが生成するファイル

デプロイ先のフラグは、対応する設定ファイルを雛形に追加します。次の表は3.49.0でwebとserverの両方に同じデプロイ先を指定した結果で、runtime欄はserver側の要件です。

| 指定         | 必要なruntime    | 追加されるファイル                      |
| ---------- | ------------- | ------------------------------ |
| docker     | bun / node    | 各Dockerfile・docker-compose.yml |
| vercel     | bun / node    | vercel.json                    |
| cloudflare | workers（Hono） | packages/infra/alchemy.run.ts  |

Workersに`--server-deploy docker`を指定すると、CLIが`not compatible`で止めます。Docker構成の実行にはDocker Compose 2.24以上が要ります。Cloudflare向けはAlchemyを使い、3.49.0で採用された版は2.0.0-beta.84というベータです。IaCのベータに本番を載せたくないなら、Cloudflareは避けるかデプロイを自分で組んでください。

コンテナを使わない場合は、`--runtime node`の構成で`npm run build`のあと`apps/server`で`npm run start`（`node dist/index.mjs`）を実行すると、`/trpc/healthCheck`が`{"result":{"data":"OK"}}`を返しました。

## AIエージェントからの生成：Hosted MCPとローカルMCPの違い

3.48.0で追加されたHosted MCPは、`https://www.better-t-stack.dev/mcp`をリモートコネクタとして登録して使います。[公式のAgent Workflows](https://www.better-t-stack.dev/docs/cli/agent-workflows)によると、Streamable HTTPでAPIキーは不要です。両サーバーのツール一覧を取得して比べると、役割がはっきり分かれていました。

| サーバー   | 起動方法                                 | 書き込み系のツール                               |
| ------ | ------------------------------------ | --------------------------------------- |
| Hosted | URLを登録                               | なし（bts\_get\_create\_commandで手順を返す）     |
| ローカル   | npx create-better-t-stack@latest mcp | bts\_create\_project / bts\_add\_addons |

Hostedは構成の検証とファイルのプレビューまでを担い、実際の生成はコマンドを手元で実行します。エージェントにディレクトリまで作らせたいならローカルのMCPを使ってください。Claude Code向けには、`/plugin marketplace add AmanVarshney01/create-better-t-stack`でマーケットプレイスを登録してから`/plugin install better-t-stack@better-t-stack`で入るプラグインがあり、CLI単体でも`create-json`・`add-json`・`schema`でJSONの入出力を扱えます。エージェントに雛形を手書きさせるより、CLIに検証込みで生成させるほうが、非対応の組み合わせを作らずに済みます。

## T3 Stack（create-t3-app）との違い

T3 Stackを生成する`create-t3-app`と並べると、Better-T-Stackは「Next.jsに限らない」「APIサーバーを分ける」方向へ広げたツールだとわかります。

| 観点        | create-t3-app           | Better-T-Stack                              |
| --------- | ----------------------- | ------------------------------------------- |
| 最新版（npm）  | 7.40.0（2025-11-05）      | 3.49.0（2026-10-24）                          |
| フロントエンド   | Next.jsのみ               | React系・Next.js・Nuxt・Svelte・Solid・Astro・Expo |
| バックエンド    | Next.jsに同居              | Hono・Express・Fastify・Elysia・Convex・同居       |
| API       | tRPC（任意）                | tRPC・oRPC                                   |
| ORM       | Prisma・Drizzle          | Drizzle・Prisma・Mongoose                     |
| 認証        | NextAuth.js・Better Auth | Better Auth・Clerk                           |
| リポジトリ構成   | 単一のNext.jsアプリ           | Turborepo等のモノレポ                             |
| GitHubスター | 29,223                  | 5,857                                       |

Next.jsだけで完結するWebアプリなら、create-t3-appのほうが構成が単純で、情報も多く見つかります。モバイルアプリやCloudflare Workers向けのAPIを同じリポジトリで型を共有しながら作るなら、Better-T-Stackを選ぶ理由がはっきりあります。更新頻度の差も大きく、create-t3-appのnpmの最新版は2025年11月が最後です。T3 Stackの構成要素と考え方は[T3 Stackの解説記事](/tech/details/5998/)で詳しく扱っています。

## 導入前に確認すべき注意点と向かないケース

### 既定のランタイムはBun：Node.jsで動かすなら–runtime node

`npx`で既定構成を作るとパッケージマネージャーはnpmになりますが、ランタイムはBunのままです。サーバーの`dev`スクリプトは`bun run --hot src/index.ts`なので、Bunを入れていない環境では終了コード127で失敗しました。Node.jsで動かすなら、前述のコマンドの`--runtime bun`を`--runtime node`に換えて生成します。`dev`は`tsx watch src/index.ts`、`start`は`node dist/index.mjs`になり、この構成でサインアップまで動くことを確認しました。Bunの互換性の範囲は[Bun 1.4の解説記事](/tech/details/16888/)にまとめています。

### addコマンドの対応範囲：アドオンとワークスペースパッケージの追加

既存プロジェクトに使える`add`コマンドが受け付けるのは、`--addons`と`--package`（ワークスペースパッケージの追加）だけです。`--frontend`を渡すと`unknown option`のエラーになりました。主要技術の変更は手動で行うか、新しい構成で生成し直して自分のコードを移すことになります。最初の構成は`--dry-run`とBuilderで詰めてから生成してください。

### 依存の版はCLIのテンプレートで決まる：Drizzle 1.0 RCとBetter Auth

READMEは「current, stable versions」を既定で使うと掲げていますが、生成される版はCLIに書かれたものです。3.49.0の`drizzle-orm`と`drizzle-kit`は`1.0.0-rc.5`固定で、npmの`latest`は0.45.4、1.0はまだプレリリースです。`better-auth`も1.7.12固定で、[GitHubのLatest](https://github.com/better-auth/better-auth/releases)は11月10日時点で1.7.18でした。認証ライブラリは、生成後すぐに更新の要否を確認してください。

RC版を避けるなら、生成時にPrismaを選ぶのが簡単です。生成コードは1.0の`defineRelations`を使っているので、Drizzleを0.x系へ下げる場合は依存の版だけでなくリレーション定義とDB初期化コードも直す必要があります。詳しくは[Drizzle ORMの解説記事](/tech/details/7939/)で整理しています。

### 匿名テレメトリの送信項目と無効化設定

[公式のAnalytics & Telemetry](https://www.better-t-stack.dev/docs/analytics)によると、プロジェクトの生成に成功すると、選んだ構成・CLIとNode.jsの版・実行環境が匿名で送信されます。`create`や`add`の失敗時にも、失敗した段階やエラーの種類が送られます。プロジェクト名、パス、ファイルの中身、環境変数は収集対象外です。止めるには`BTS_TELEMETRY_DISABLED=1`か`DO_NOT_TRACK=1`を設定するか、実行ごとに`--disable-analytics`を付けます。社内のCIで生成する場合は、環境変数で無効にしておくのが確実です。

### 2026年5月のTanStack侵害：生成済みプロジェクトの確認

既定のフロントはTanStack Routerなので、2026年5月11日の侵害当時に依存を入れたプロジェクトは[GHSA-g7cv-rxg3-hmpx](https://github.com/advisories/GHSA-g7cv-rxg3-hmpx)を確認してください。`@tanstack/react-router`では1.169.5と1.169.8が該当し、修正版は1.169.9です。3.49.0で生成した`package-lock.json`は`@tanstack/react-router` 1.170.46で、該当しません。該当版を入れたことがある環境では、認証情報の無効化と再発行が必要です。TanStack Query系の扱いは[TanStack Queryの解説記事](/tech/details/10307/)で説明しています。

### Better-T-Stackが向かないケース

- **Next.js単体で完結するアプリ**：モノレポとAPIサーバーの分離が不要なら、create-t3-appかNext.js単体の雛形のほうが管理するものが少なく済みます。
- **既存プロジェクトへの後付け**：Better-T-Stackは新規生成のツールです。既存のアプリに型共有だけを入れたいなら、tRPCやoRPCを直接導入します。
- **プレリリース版の依存を認めない組織**：既定構成はDrizzleのRC版を含みます。生成後にロックファイルと依存の版を自分で管理する前提で使ってください。

## よくある質問

### Better-T-StackとT3 Stackは同じものですか？

別のツールです。T3 Stackはcreate-t3-appが生成するNext.js中心の構成で、Better-T-Stackはその考え方を下敷きに、フロントエンド・バックエンド・ランタイムを組み合わせられるようにしたCLIです。「better t3 stack」と呼ばれることもあります。Better-T-Stackにも`--template t3`があり、Next.js＋tRPC＋Prisma＋PostgreSQL＋Better Authの構成を生成できます。

### create-better-t-stackはbunとnpxのどちらで実行すればよいですか？

READMEはBun（`bun create better-t-stack@latest`）を推奨しています。npxでも生成できますが、npm 11.16.0以上が必要で、既定のランタイムはBunのままです。Bunを入れないなら`--yes`を使わず、全項目をフラグで指定して`--runtime node`を選んでください。CIで動かすときは、ルートの`db:push`が端末なしでは止まる点にも注意が要ります。

### Better-T-Stackは本番運用に使えますか？

生成されるのはHono・tRPC・Better Authなど個別に本番実績のあるライブラリの組み合わせで、ツール自体が実行時に残るわけではありません。ただし既定のDrizzleは1.0のRC版で、Better Authの版も生成時点で固定されています。本番前に依存の版を見直し、`db:push`ではなくマイグレーションへ切り替え、`BETTER_AUTH_SECRET`を作り直してください。依存の更新とセキュリティ対応は、生成後は自分のプロジェクトとして行います。

### Better-T-Stackの公式サイトとGitHubはどこですか？

公式サイトとドキュメントはbetter-t-stack.dev、Stack Builderはbetter-t-stack.dev/newです。ソースコードはGitHubのAmanVarshney01/create-better-t-stackで、CLIは`apps/cli`、ドキュメントサイトは`apps/web`に置かれたモノレポになっています。Claude Code向けのプラグインも同じリポジトリの`plugin`フォルダにあります。

### 生成後にフロントエンドやORMを変更できますか？

`add`コマンドで追加できるのはアドオンとワークスペースパッケージだけで、フロントエンド・バックエンド・ORM・認証を切り替える機能はありません。変更したい場合は生成済みコードを手動で修正するか、新しい構成で生成し直して自分で書いたコードを移します。生成物は普通のモノレポなので、手動での入れ替え自体に制限はありません。

## 関連記事

- [T3 Stackとは？create-t3-appの構成・始め方と型安全の仕組み【7.40.0実測】](/tech/details/5998/)
- [tRPCとは？REST・GraphQL・gRPCとの違いとv11の使い方【11.22実測】](/tech/details/7937/)
- [TanStack Routerとは？React Router v8との違いと導入手順【1.170系】](/tech/details/9913/)
- [better-authとは？Auth.jsとの違い・使い方とRedis・JWT対応を解説【v1.7】](/tech/details/5505/)
- [Turborepoとは：2.11系のturbo.json設定・キャッシュ共有・CI高速化を実装で解説](/tech/details/17773/)

---

出典: [Better-T-Stackとは？使い方・既定構成・T3 Stackとの違い【v3.49実測】](<https://www.issoh.co.jp/tech/details/10225/>)（株式会社一創）
