[{"data":1,"prerenderedAt":621},["ShallowReactive",2],{"content-/nuxt-content-d1-not-used":3,"all-pages-for-dir":598,"related-/nuxt-content-d1-not-used":599,"og-image-/nuxt-content-d1-not-used":620},{"id":4,"title":5,"body":6,"category":581,"concepts":581,"description":582,"extension":583,"meta":584,"navigation":585,"ogImage":581,"path":586,"project_name":581,"published":587,"publishedAt":588,"seo":589,"source":581,"stem":590,"tags":591,"todo":581,"unpublished":587,"updatedAt":588,"__hash__":597},"pages/2025-12/2025-12-05/nuxt-content-d1-not-used.md","Nuxt Content v3：D1データベースは本当に必要なのか？",{"type":7,"value":8,"toc":566},"minimark",[9,13,17,33,36,40,46,53,123,134,136,139,144,204,213,215,219,227,230,232,236,242,247,249,253,259,262,264,268,274,281,283,287,290,364,396,399,404,406,410,415,418,444,456,459,461,464,545,547,550,562],[10,11,5],"h1",{"id":12},"nuxt-content-v3d1データベースは本当に必要なのか",[14,15,16],"h2",{"id":16},"問い",[18,19,20],"blockquote",{},[21,22,23,24,28,29,32],"p",{},"Nuxt Contentは",[25,26,27],"code",{},"content/","ディレクトリにMarkdownを置くと、自動で",[25,30,31],{},".data/content/contents.sqlite","にデータが格納される。このSQLiteをD1に同じような形でデプロイしているという理解だった。したがってNuxt Contentでアプリケーションを作る上ではD1は必須という認識だったが、そうではないのか？",[34,35],"hr",{},[14,37,39],{"id":38},"答え結論","答え（結論）",[21,41,42],{},[43,44,45],"strong",{},"D1は使われていない。wrangler.tomlの設定は死んでいる。",[21,47,48,49,52],{},"現在の",[25,50,51],{},"nuxt.config.ts","の設定：",[54,55,60],"pre",{"className":56,"code":57,"language":58,"meta":59,"style":59},"language-typescript shiki shiki-themes vitesse-light vitesse-light","content: {\n  database: {\n    type: \"sqlite\"   // ← \"d1\"ではない\n  }\n}\n","typescript","",[25,61,62,78,88,111,117],{"__ignoreMap":59},[63,64,67,71,75],"span",{"class":65,"line":66},"line",1,[63,68,70],{"class":69},"senZ8","content",[63,72,74],{"class":73},"shFtX",":",[63,76,77],{"class":73}," {\n",[63,79,81,84,86],{"class":65,"line":80},2,[63,82,83],{"class":69},"  database",[63,85,74],{"class":73},[63,87,77],{"class":73},[63,89,91,94,96,100,104,107],{"class":65,"line":90},3,[63,92,93],{"class":69},"    type",[63,95,74],{"class":73},[63,97,99],{"class":98},"sMJiu"," \"",[63,101,103],{"class":102},"sdGka","sqlite",[63,105,106],{"class":98},"\"",[63,108,110],{"class":109},"sxvE3","   // ← \"d1\"ではない\n",[63,112,114],{"class":65,"line":113},4,[63,115,116],{"class":73},"  }\n",[63,118,120],{"class":65,"line":119},5,[63,121,122],{"class":73},"}\n",[21,124,125,126,129,130,133],{},"D1を使うには",[25,127,128],{},"type: \"d1\"","と明示的に指定する必要がある。",[25,131,132],{},"type: \"sqlite\"","の場合、SQLiteダンプはJavaScriptファイルとしてバンドルされ、D1は一切使われない。",[34,135],{},[14,137,138],{"id":138},"詳細解説",[140,141,143],"h3",{"id":142},"nuxt-content-v3-の2つのモード","Nuxt Content v3 の2つのモード",[145,146,147,166],"table",{},[148,149,150],"thead",{},[151,152,153,157,160,163],"tr",{},[154,155,156],"th",{},"モード",[154,158,159],{},"設定",[154,161,162],{},"データの場所",[154,164,165],{},"用途",[167,168,169,187],"tbody",{},[151,170,171,177,181,184],{},[172,173,174],"td",{},[43,175,176],{},"静的モード",[172,178,179],{},[25,180,132],{},[172,182,183],{},"JSバンドル内",[172,185,186],{},"ブログ、ドキュメント",[151,188,189,194,198,201],{},[172,190,191],{},[43,192,193],{},"動的モード",[172,195,196],{},[25,197,128],{},[172,199,200],{},"Cloudflare D1",[172,202,203],{},"CMS、動的コンテンツ",[21,205,206,207,209,210,212],{},"このプロジェクトは",[25,208,132],{},"なので",[43,211,176],{},"。",[34,214],{},[140,216,218],{"id":217},"データフロー開発時","データフロー：開発時",[54,220,225],{"className":221,"code":223,"language":224},[222],"language-text","content/2025-12-05/article.md\n         ↓\n    Nuxt Content がパース\n         ↓\n.data/content/contents.sqlite  ← ローカルSQLite（開発専用）\n         ↓\n    開発サーバーがクエリ実行\n","text",[25,226,223],{"__ignoreMap":59},[21,228,229],{},"ここまでは正しい理解。",[34,231],{},[140,233,235],{"id":234},"データフロービルド時","データフロー：ビルド時",[54,237,240],{"className":238,"code":239,"language":224},[222],".data/content/contents.sqlite\n         ↓\n    ビルドプロセス\n         ↓\n.nuxt/content/database.compressed.mjs  ← SQLiteをJSに変換\n         ↓\ndist/_nuxt/xxxxx.js として含まれる\n",[25,241,239],{"__ignoreMap":59},[21,243,244],{},[43,245,246],{},"重要：D1にはデプロイされない。JSファイルとしてバンドルされる。",[34,248],{},[140,250,252],{"id":251},"データフロー本番環境現状-ssr","データフロー：本番環境（現状 = SSR）",[54,254,257],{"className":255,"code":256,"language":224},[222],"ユーザーがページにアクセス\n         ↓\nCloudflare Worker起動\n         ↓\ndatabase.compressed.mjs を読み込み\n         ↓\nWorker内メモリでSQLiteクエリ実行  ← D1ではない！\n         ↓\nSSRでHTML生成\n         ↓\nクライアントに返却\n",[25,258,256],{"__ignoreMap":59},[21,260,261],{},"D1データベースには一切アクセスしていない。",[34,263],{},[140,265,267],{"id":266},"データフロー本番環境静的生成-あるべき姿","データフロー：本番環境（静的生成 = あるべき姿）",[54,269,272],{"className":270,"code":271,"language":224},[222],"【ビルド時】\ndatabase.compressed.mjs\n         ↓\n全ページのHTMLを事前生成\n         ↓\ndist/blog/index.html\ndist/2025-12-05/article/index.html\n...\n\n【ランタイム】\n初回アクセス → CDNから静的HTML配信（10-50ms）\n\nクライアントサイドナビゲーション\n         ↓\nブラウザ内のWASM SQLiteがクエリ実行  ← ブラウザで動く！\n         ↓\nVue Routerでページ遷移\n",[25,273,271],{"__ignoreMap":59},[21,275,276,277,280],{},"静的生成でも",[25,278,279],{},"queryCollection()","は動作する。ブラウザ内のWASM SQLiteで実行されるからだ。",[34,282],{},[140,284,286],{"id":285},"d1を使う場合の設定参考","D1を使う場合の設定（参考）",[21,288,289],{},"もしD1を使いたい場合は、以下のように設定する：",[54,291,293],{"className":56,"code":292,"language":58,"meta":59,"style":59},"// nuxt.config.ts\ncontent: {\n  database: {\n    type: 'd1',      // ← d1を明示的に指定\n    binding: 'DB'    // ← wrangler.tomlのbinding名と一致させる\n  }\n}\n",[25,294,295,300,308,316,337,354,359],{"__ignoreMap":59},[63,296,297],{"class":65,"line":66},[63,298,299],{"class":109},"// nuxt.config.ts\n",[63,301,302,304,306],{"class":65,"line":80},[63,303,70],{"class":69},[63,305,74],{"class":73},[63,307,77],{"class":73},[63,309,310,312,314],{"class":65,"line":90},[63,311,83],{"class":69},[63,313,74],{"class":73},[63,315,77],{"class":73},[63,317,318,320,322,325,328,331,334],{"class":65,"line":113},[63,319,93],{"class":69},[63,321,74],{"class":73},[63,323,324],{"class":98}," '",[63,326,327],{"class":102},"d1",[63,329,330],{"class":98},"'",[63,332,333],{"class":73},",",[63,335,336],{"class":109},"      // ← d1を明示的に指定\n",[63,338,339,342,344,346,349,351],{"class":65,"line":119},[63,340,341],{"class":69},"    binding",[63,343,74],{"class":73},[63,345,324],{"class":98},[63,347,348],{"class":102},"DB",[63,350,330],{"class":98},[63,352,353],{"class":109},"    // ← wrangler.tomlのbinding名と一致させる\n",[63,355,357],{"class":65,"line":356},6,[63,358,116],{"class":73},[63,360,362],{"class":65,"line":361},7,[63,363,122],{"class":73},[54,365,369],{"className":366,"code":367,"language":368,"meta":59,"style":59},"language-toml shiki shiki-themes vitesse-light vitesse-light","# wrangler.toml\n[[d1_databases]]\nbinding = \"DB\"\ndatabase_name = \"nuxt-content-db\"\ndatabase_id = \"your-database-id\"\n","toml",[25,370,371,376,381,386,391],{"__ignoreMap":59},[63,372,373],{"class":65,"line":66},[63,374,375],{},"# wrangler.toml\n",[63,377,378],{"class":65,"line":80},[63,379,380],{},"[[d1_databases]]\n",[63,382,383],{"class":65,"line":90},[63,384,385],{},"binding = \"DB\"\n",[63,387,388],{"class":65,"line":113},[63,389,390],{},"database_name = \"nuxt-content-db\"\n",[63,392,393],{"class":65,"line":119},[63,394,395],{},"database_id = \"your-database-id\"\n",[21,397,398],{},"この設定の場合、ビルド時にD1へデータがマイグレーションされ、ランタイムでD1にクエリを発行する。",[21,400,401],{},[43,402,403],{},"しかし、純粋なブログサイトにはオーバースペック。",[34,405],{},[14,407,409],{"id":408},"wranglertoml-の-d1-設定は削除してよいか","wrangler.toml の D1 設定は削除してよいか？",[21,411,412],{},[43,413,414],{},"削除してよい。",[21,416,417],{},"現在の設定：",[54,419,421],{"className":366,"code":420,"language":368,"meta":59,"style":59},"# wrangler.toml\n[[d1_databases]]\nbinding = \"DB\"\ndatabase_name = \"nuxt-content-db\"\ndatabase_id = \"a7eeae1d-68ea-4358-a6ba-49414e011b18\"\n",[25,422,423,427,431,435,439],{"__ignoreMap":59},[63,424,425],{"class":65,"line":66},[63,426,375],{},[63,428,429],{"class":65,"line":80},[63,430,380],{},[63,432,433],{"class":65,"line":90},[63,434,385],{},[63,436,437],{"class":65,"line":113},[63,438,390],{},[63,440,441],{"class":65,"line":119},[63,442,443],{},"database_id = \"a7eeae1d-68ea-4358-a6ba-49414e011b18\"\n",[21,445,446,447,449,450,452,453,212],{},"これは",[25,448,51],{},"で",[25,451,132],{},"が指定されているため、",[43,454,455],{},"一度も使われていない",[21,457,458],{},"削除しても何も壊れない。Cloudflareのダッシュボードから該当のD1データベースも削除可能。",[34,460],{},[14,462,463],{"id":463},"まとめ",[145,465,466,479],{},[148,467,468],{},[151,469,470,473,476],{},[154,471,472],{},"項目",[154,474,475],{},"誤解",[154,477,478],{},"事実",[167,480,481,494,507,521,532],{},[151,482,483,486,489],{},[172,484,485],{},"D1データベース",[172,487,488],{},"使っている",[172,490,491],{},[43,492,493],{},"使っていない",[151,495,496,499,502],{},[172,497,498],{},"wrangler.tomlのD1設定",[172,500,501],{},"必要",[172,503,504],{},[43,505,506],{},"不要（削除可）",[151,508,509,512,515],{},[172,510,511],{},"SQLiteダンプ",[172,513,514],{},"D1にデプロイされる",[172,516,517,520],{},[43,518,519],{},"JSとしてバンドル","される",[151,522,523,526,529],{},[172,524,525],{},"本番でのクエリ実行",[172,527,528],{},"D1で実行",[172,530,531],{},"Worker内JS（SSR）or ブラウザWASM（静的）",[151,533,534,537,540],{},[172,535,536],{},"Nuxt Contentに必須",[172,538,539],{},"D1が必要",[172,541,542],{},[43,543,544],{},"静的生成なら不要",[34,546],{},[14,548,549],{"id":549},"関連ドキュメント",[551,552,553],"ul",{},[554,555,556,561],"li",{},[557,558,560],"a",{"href":559},"/ssr-vs-ssg-page-transition-slow","ページ遷移が遅い問題：SSR vs SSG の選択ミス"," - この発見のきっかけとなった問題",[563,564,565],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":59,"searchDepth":80,"depth":80,"links":567},[568,569,570,578,579,580],{"id":16,"depth":80,"text":16},{"id":38,"depth":80,"text":39},{"id":138,"depth":80,"text":138,"children":571},[572,573,574,575,576,577],{"id":142,"depth":90,"text":143},{"id":217,"depth":90,"text":218},{"id":234,"depth":90,"text":235},{"id":251,"depth":90,"text":252},{"id":266,"depth":90,"text":267},{"id":285,"depth":90,"text":286},{"id":408,"depth":80,"text":409},{"id":463,"depth":80,"text":463},{"id":549,"depth":80,"text":549},null,"wrangler.tomlにD1を設定しているのに、実際には使われていなかった事実。Nuxt Content v3のSQLiteデータフローを正確に理解する","md",{},true,"/nuxt-content-d1-not-used",false,"2025-12-05T00:00:00.000Z",{"title":5,"description":582},"2025-12/2025-12-05/nuxt-content-d1-not-used",[592,593,594,103,595,596],"nuxt","nuxt-content","D1","cloudflare","architecture","TfCDiKGHHkjvPjFHjwb9E0PnGcakFnX0k2ivUB4sXYc",[],[600,604,608,612,616],{"title":601,"path":602,"publishedAt":603},"Nuxt Pages と Nuxt Content の統合仕組み","/nuxt-pages-and-content-integration","2025-10-05T00:00:00.000Z",{"title":605,"path":606,"publishedAt":607},"@nuxt/content「UNIQUE constraint failed: _content_pages.__hash__」エラーの原因と解決策","/nuxt-content-sqlite-unique-constraint","2026-01-06T00:00:00.000Z",{"title":609,"path":610,"publishedAt":611},"Nuxt 3のapp/dataとpublicディレクトリの使い分け","/nuxt-data-directory-guide","2025-12-24T00:00:00.000Z",{"title":613,"path":614,"publishedAt":615},"SQLiteから財務データを読み込む実装方針","/sqlite-financial-data-implementation","2025-12-12T00:00:00.000Z",{"title":617,"path":618,"publishedAt":619},"Nuxt Content + Pages ハイブリッドアーキテクチャ：プロジェクト要件定義書","/nuxt-hybrid-content-architecture","2025-11-29T00:00:00.000Z","https://log.eurekapu.com/og/blog/nuxt-content-d1-not-used.png?v=2025-12-05T00%3A00%3A00.000Z&title=Nuxt%20Content%20v3%EF%BC%9AD1%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AF%E6%9C%AC%E5%BD%93%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F&author=Kei%20Komatsu&sig=5927886fb06ec984",1785654953031]