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で開発されているCLIです。生成されるのはアプリの雛形で、実行時に使うフレームワークではありません。生成後のプロジェクトはHono・tRPC・Drizzleなどを普通に依存関係として持つだけで、Better-T-Stack自体には依存しません。
名前の「T」はTypeScriptを指し、T3 Stackの考え方を下敷きにしています。「better t3 stack」で検索されることもありますが、正式な表記はBetter-T-Stackです。ログ監視サービスのBetter Stackとは関係ありません(監視SaaSのほうはBetter Stackの解説記事で扱っています)。
| 項目 | 内容(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 [email protected]のように版を固定してください。直近の主な変更は次のとおりです(日付は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のリリース一覧で確認できます。
create-better-t-stackでプロジェクトを作る手順
動作要件:Node.js 22以上とnpm 11.16.0以上
CLIのREADMEの要件は、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を選びます。全ルールは公式の互換性ドキュメントにあります。--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の解説記事で扱っています。
本番化に必要なマイグレーションとデプロイ構成
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によると、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の解説記事で詳しく扱っています。
導入前に確認すべき注意点と向かないケース
既定のランタイムは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の解説記事にまとめています。
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は11月10日時点で1.7.18でした。認証ライブラリは、生成後すぐに更新の要否を確認してください。
RC版を避けるなら、生成時にPrismaを選ぶのが簡単です。生成コードは1.0のdefineRelationsを使っているので、Drizzleを0.x系へ下げる場合は依存の版だけでなくリレーション定義とDB初期化コードも直す必要があります。詳しくはDrizzle ORMの解説記事で整理しています。
匿名テレメトリの送信項目と無効化設定
公式のAnalytics & Telemetryによると、プロジェクトの生成に成功すると、選んだ構成・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を確認してください。@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の解説記事で説明しています。
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・認証を切り替える機能はありません。変更したい場合は生成済みコードを手動で修正するか、新しい構成で生成し直して自分で書いたコードを移します。生成物は普通のモノレポなので、手動での入れ替え自体に制限はありません。