[{"data":1,"prerenderedAt":2316},["ShallowReactive",2],{"content-/sqlite-financial-data-implementation":3,"all-pages-for-dir":2293,"related-/sqlite-financial-data-implementation":2294,"og-image-/sqlite-financial-data-implementation":2315},{"id":4,"title":5,"body":6,"category":2277,"concepts":2277,"description":2278,"extension":2279,"meta":2280,"navigation":329,"ogImage":2277,"path":2281,"project_name":2277,"published":2282,"publishedAt":2283,"seo":2284,"source":2277,"stem":2285,"tags":2286,"todo":2277,"unpublished":2282,"updatedAt":2283,"__hash__":2292},"pages/2025-12/2025-12-12/sqlite-financial-data-implementation.md","SQLiteから財務データを読み込む実装方針",{"type":7,"value":8,"toc":2241},"minimark",[9,13,18,31,38,41,47,58,68,73,89,94,102,105,111,115,120,126,131,145,150,158,162,168,172,183,187,195,199,205,209,214,218,229,233,239,482,485,496,502,509,716,719,836,840,843,918,921,927,931,934,990,993,1006,1030,1033,1037,1438,1442,1549,1552,1606,1610,1641,1644,1647,1905,1908,1934,1938,1941,1946,1952,1959,1962,1987,1990,2009,2013,2016,2034,2037,2055,2059,2125,2128,2131,2203,2206,2209,2212,2237],[10,11,5],"h1",{"id":12},"sqliteから財務データを読み込む実装方針",[14,15,17],"h2",{"id":16},"背景目的","背景・目的",[19,20,21,22,26,27,30],"p",{},"現在",[23,24,25],"code",{},"/financial-quiz/proportional-animation"," ページでは、各企業の財務データをTypeScriptのcomposableファイル（",[23,28,29],{},"useMicrosoftData.ts","など）から読み込んでいる。",[19,32,33,34,37],{},"今回",[23,35,36],{},"apps/web/data/koyfin.db"," に格納されたSQLiteデータを活用して、100社〜300社規模のデータを効率的に管理したい。",[14,39,40],{"id":40},"結論",[19,42,43],{},[44,45,46],"strong",{},"ビルド時変換を採用する。",[19,48,49,50,53,54,57],{},"SQLite (",[23,51,52],{},"koyfin.db",") からcomposableファイル（",[23,55,56],{},"use{Ticker}Data.ts","）を自動生成するスクリプトを作成する。",[59,60,65],"pre",{"className":61,"code":63,"language":64},[62],"language-text","koyfin.db\n    ↓ Node.jsスクリプト（変換ロジック）\napps/web/app/composables/\n├── useAAPLData.ts  ← 自動生成\n├── useAMZNData.ts  ← 自動生成\n├── useGOOGLData.ts ← 自動生成\n└── ... (100社分)\n","text",[23,66,63],{"__ignoreMap":67},"",[19,69,70],{},[44,71,72],{},"理由:",[74,75,76,80,83,86],"ul",{},[77,78,79],"li",{},"既存の仕組み（composable + Vueページ）をそのまま活用できる",[77,81,82],{},"Cloudflare D1への依存なし、デプロイがシンプル",[77,84,85],{},"100社〜300社程度ならバンドルサイズは許容範囲",[77,87,88],{},"実装が早い",[19,90,91],{},[44,92,93],{},"将来の展望:",[74,95,96,99],{},[77,97,98],{},"300社を超えてバンドルサイズが問題になった場合は、別プロジェクトとしてサーバーAPI経由の実装を一から作る",[77,100,101],{},"中途半端に混ぜると複雑になるため、明確に分離する",[14,103,104],{"id":104},"現在のデータフロー",[59,106,109],{"className":107,"code":108,"language":64},[62],"Koyfin (Web)\n    ↓ ダウンロード\nTSV/CSV ファイル\n    ↓ Gemini API で変換\nTypeScript composables (useMicrosoftData.ts)\n    ↓ import\nVue ページ (proportional-animation.vue)\n",[23,110,108],{"__ignoreMap":67},[14,112,114],{"id":113},"新しいデータフロー候補","新しいデータフロー（候補）",[116,117,119],"h3",{"id":118},"方法a-サーバーapi経由推奨","方法A: サーバーAPI経由（推奨）",[59,121,124],{"className":122,"code":123,"language":64},[62],"SQLite (koyfin.db)\n    ↓ better-sqlite3 / sql.js\nNuxt Server API (/api/financial/[ticker].ts)\n    ↓ JSON レスポンス\nVue ページ (useFetch / useAsyncData)\n",[23,125,123],{"__ignoreMap":67},[19,127,128],{},[44,129,130],{},"メリット:",[74,132,133,136,139,142],{},[77,134,135],{},"データ変換ロジックがサーバー側に集約",[77,137,138],{},"クライアントのバンドルサイズに影響なし",[77,140,141],{},"キャッシュ制御が容易",[77,143,144],{},"プロダクション環境で Cloudflare D1 への移行が容易",[19,146,147],{},[44,148,149],{},"デメリット:",[74,151,152,155],{},[77,153,154],{},"API エンドポイントの実装が必要",[77,156,157],{},"開発環境とプロダクション環境で SQLite 接続方法が異なる",[116,159,161],{"id":160},"方法b-ビルド時変換","方法B: ビルド時変換",[59,163,166],{"className":164,"code":165,"language":64},[62],"SQLite (koyfin.db)\n    ↓ ビルドスクリプト (Node.js)\nTypeScript composables (自動生成)\n    ↓ import\nVue ページ\n",[23,167,165],{"__ignoreMap":67},[19,169,170],{},[44,171,130],{},[74,173,174,177,180],{},[77,175,176],{},"既存の仕組みをそのまま活用",[77,178,179],{},"ランタイムのDB接続不要",[77,181,182],{},"パフォーマンス最高（静的データ）",[19,184,185],{},[44,186,149],{},[74,188,189,192],{},[77,190,191],{},"データ更新のたびにビルドが必要",[77,193,194],{},"composable ファイルが大量に生成される",[116,196,198],{"id":197},"方法c-クライアント直接非推奨","方法C: クライアント直接（非推奨）",[59,200,203],{"className":201,"code":202,"language":64},[62],"SQLite (koyfin.db)\n    ↓ sql.js (WASM)\nVue ページ (クライアント側で変換)\n",[23,204,202],{"__ignoreMap":67},[19,206,207],{},[44,208,130],{},[74,210,211],{},[77,212,213],{},"サーバー実装不要",[19,215,216],{},[44,217,149],{},[74,219,220,223,226],{},[77,221,222],{},"sql.js (WASM) のバンドルサイズが大きい（〜1MB）",[77,224,225],{},"初期ロード時間が長い",[77,227,228],{},"SQLite ファイル全体をダウンロードする必要あり",[14,230,232],{"id":231},"sqlite-スキーマ構造","SQLite スキーマ構造",[19,234,235,238],{},[23,236,237],{},"apps/web/data/schema.sql"," より抜粋：",[59,240,244],{"className":241,"code":242,"language":243,"meta":67,"style":67},"language-sql shiki shiki-themes vitesse-light vitesse-light","-- 企業マスタ\nCREATE TABLE companies (\n    id INTEGER PRIMARY KEY,\n    ticker TEXT NOT NULL UNIQUE,\n    name TEXT NOT NULL\n);\n\n-- 期間マスタ\nCREATE TABLE financial_periods (\n    id INTEGER PRIMARY KEY,\n    period_type TEXT NOT NULL,  -- 'annual', 'quarterly', 'ltm'\n    period_label TEXT NOT NULL  -- 'FY 2024', 'Q1 FY2025'\n);\n\n-- 財務データ本体（Annual）\nCREATE TABLE financial_data_annual (\n    company_id INTEGER,\n    period_id INTEGER,\n    section TEXT NOT NULL,      -- 'highlights', 'income_statement'\n    metric_name TEXT NOT NULL,  -- 'Total Revenues', 'Gross Profit'\n    metric_value TEXT\n);\n","sql",[23,245,246,255,273,289,306,318,324,331,337,349,360,376,389,394,399,405,417,427,437,453,468,477],{"__ignoreMap":67},[247,248,251],"span",{"class":249,"line":250},"line",1,[247,252,254],{"class":253},"sxvE3","-- 企業マスタ\n",[247,256,258,262,265,269],{"class":249,"line":257},2,[247,259,261],{"class":260},"sHkkW","CREATE",[247,263,264],{"class":260}," TABLE",[247,266,268],{"class":267},"senZ8"," companies",[247,270,272],{"class":271},"sG7-3"," (\n",[247,274,276,279,283,286],{"class":249,"line":275},3,[247,277,278],{"class":271},"    id ",[247,280,282],{"class":281},"stQ0i","INTEGER",[247,284,285],{"class":281}," PRIMARY KEY",[247,287,288],{"class":271},",\n",[247,290,292,295,298,301,304],{"class":249,"line":291},4,[247,293,294],{"class":271},"    ticker ",[247,296,297],{"class":281},"TEXT",[247,299,300],{"class":260}," NOT NULL",[247,302,303],{"class":260}," UNIQUE",[247,305,288],{"class":271},[247,307,309,312,315],{"class":249,"line":308},5,[247,310,311],{"class":260},"    name",[247,313,314],{"class":281}," TEXT",[247,316,317],{"class":260}," NOT NULL\n",[247,319,321],{"class":249,"line":320},6,[247,322,323],{"class":271},");\n",[247,325,327],{"class":249,"line":326},7,[247,328,330],{"emptyLinePlaceholder":329},true,"\n",[247,332,334],{"class":249,"line":333},8,[247,335,336],{"class":253},"-- 期間マスタ\n",[247,338,340,342,344,347],{"class":249,"line":339},9,[247,341,261],{"class":260},[247,343,264],{"class":260},[247,345,346],{"class":267}," financial_periods",[247,348,272],{"class":271},[247,350,352,354,356,358],{"class":249,"line":351},10,[247,353,278],{"class":271},[247,355,282],{"class":281},[247,357,285],{"class":281},[247,359,288],{"class":271},[247,361,363,366,368,370,373],{"class":249,"line":362},11,[247,364,365],{"class":271},"    period_type ",[247,367,297],{"class":281},[247,369,300],{"class":260},[247,371,372],{"class":271},",  ",[247,374,375],{"class":253},"-- 'annual', 'quarterly', 'ltm'\n",[247,377,379,382,384,386],{"class":249,"line":378},12,[247,380,381],{"class":271},"    period_label ",[247,383,297],{"class":281},[247,385,300],{"class":260},[247,387,388],{"class":253},"  -- 'FY 2024', 'Q1 FY2025'\n",[247,390,392],{"class":249,"line":391},13,[247,393,323],{"class":271},[247,395,397],{"class":249,"line":396},14,[247,398,330],{"emptyLinePlaceholder":329},[247,400,402],{"class":249,"line":401},15,[247,403,404],{"class":253},"-- 財務データ本体（Annual）\n",[247,406,408,410,412,415],{"class":249,"line":407},16,[247,409,261],{"class":260},[247,411,264],{"class":260},[247,413,414],{"class":267}," financial_data_annual",[247,416,272],{"class":271},[247,418,420,423,425],{"class":249,"line":419},17,[247,421,422],{"class":271},"    company_id ",[247,424,282],{"class":281},[247,426,288],{"class":271},[247,428,430,433,435],{"class":249,"line":429},18,[247,431,432],{"class":271},"    period_id ",[247,434,282],{"class":281},[247,436,288],{"class":271},[247,438,440,443,445,447,450],{"class":249,"line":439},19,[247,441,442],{"class":271},"    section ",[247,444,297],{"class":281},[247,446,300],{"class":260},[247,448,449],{"class":271},",      ",[247,451,452],{"class":253},"-- 'highlights', 'income_statement'\n",[247,454,456,459,461,463,465],{"class":249,"line":455},20,[247,457,458],{"class":271},"    metric_name ",[247,460,297],{"class":281},[247,462,300],{"class":260},[247,464,372],{"class":271},[247,466,467],{"class":253},"-- 'Total Revenues', 'Gross Profit'\n",[247,469,471,474],{"class":249,"line":470},21,[247,472,473],{"class":271},"    metric_value ",[247,475,476],{"class":281},"TEXT\n",[247,478,480],{"class":249,"line":479},22,[247,481,323],{"class":271},[14,483,484],{"id":484},"データ変換の課題",[19,486,487,488,491,492,495],{},"SQLite のデータは ",[23,489,490],{},"metric_name"," / ",[23,493,494],{},"metric_value"," の key-value 形式で格納されている。",[59,497,500],{"className":498,"code":499,"language":64},[62],"metric_name: \"Total Revenues\"\nmetric_value: \"93580\"\n",[23,501,499],{"__ignoreMap":67},[19,503,504,505,508],{},"これを Vue コンポーネントが期待する ",[23,506,507],{},"CompanyData[]"," 形式に変換する必要がある：",[59,510,514],{"className":511,"code":512,"language":513,"meta":67,"style":67},"language-typescript shiki shiki-themes vitesse-light vitesse-light","{\n  name: 'Microsoft',\n  periods: [\n    {\n      label: '2015',\n      data: {\n        bs: {\n          currentAssets: [\n            { label: '現預金・短期投資', value: 96391 },\n            ...\n          ],\n          ...\n        },\n        pl: {\n          revenue: 93580,\n          grossProfit: 60542,\n          ...\n        },\n        ...\n      }\n    }\n  ]\n}\n","typescript",[23,515,516,522,543,553,558,576,584,591,599,631,636,641,646,651,658,670,682,686,690,695,700,705,710],{"__ignoreMap":67},[247,517,518],{"class":249,"line":250},[247,519,521],{"class":520},"shFtX","{\n",[247,523,524,527,530,534,538,541],{"class":249,"line":257},[247,525,526],{"class":267},"  name",[247,528,529],{"class":520},":",[247,531,533],{"class":532},"sMJiu"," '",[247,535,537],{"class":536},"sdGka","Microsoft",[247,539,540],{"class":532},"'",[247,542,288],{"class":520},[247,544,545,548,550],{"class":249,"line":275},[247,546,547],{"class":267},"  periods",[247,549,529],{"class":520},[247,551,552],{"class":520}," [\n",[247,554,555],{"class":249,"line":291},[247,556,557],{"class":520},"    {\n",[247,559,560,564,567,569,572,574],{"class":249,"line":308},[247,561,563],{"class":562},"sz8Xr","      label",[247,565,566],{"class":520},": ",[247,568,540],{"class":532},[247,570,571],{"class":536},"2015",[247,573,540],{"class":532},[247,575,288],{"class":520},[247,577,578,581],{"class":249,"line":320},[247,579,580],{"class":562},"      data",[247,582,583],{"class":520},": {\n",[247,585,586,589],{"class":249,"line":326},[247,587,588],{"class":562},"        bs",[247,590,583],{"class":520},[247,592,593,596],{"class":249,"line":333},[247,594,595],{"class":562},"          currentAssets",[247,597,598],{"class":520},": [\n",[247,600,601,604,607,609,611,614,616,619,622,624,628],{"class":249,"line":339},[247,602,603],{"class":520},"            { ",[247,605,606],{"class":562},"label",[247,608,566],{"class":520},[247,610,540],{"class":532},[247,612,613],{"class":536},"現預金・短期投資",[247,615,540],{"class":532},[247,617,618],{"class":520},", ",[247,620,621],{"class":562},"value",[247,623,566],{"class":520},[247,625,627],{"class":626},"sM54T","96391",[247,629,630],{"class":520}," },\n",[247,632,633],{"class":249,"line":351},[247,634,635],{"class":520},"            ...\n",[247,637,638],{"class":249,"line":362},[247,639,640],{"class":520},"          ],\n",[247,642,643],{"class":249,"line":378},[247,644,645],{"class":520},"          ...\n",[247,647,648],{"class":249,"line":391},[247,649,650],{"class":520},"        },\n",[247,652,653,656],{"class":249,"line":396},[247,654,655],{"class":562},"        pl",[247,657,583],{"class":520},[247,659,660,663,665,668],{"class":249,"line":401},[247,661,662],{"class":562},"          revenue",[247,664,566],{"class":520},[247,666,667],{"class":626},"93580",[247,669,288],{"class":520},[247,671,672,675,677,680],{"class":249,"line":407},[247,673,674],{"class":562},"          grossProfit",[247,676,566],{"class":520},[247,678,679],{"class":626},"60542",[247,681,288],{"class":520},[247,683,684],{"class":249,"line":419},[247,685,645],{"class":520},[247,687,688],{"class":249,"line":429},[247,689,650],{"class":520},[247,691,692],{"class":249,"line":439},[247,693,694],{"class":520},"        ...\n",[247,696,697],{"class":249,"line":455},[247,698,699],{"class":520},"      }\n",[247,701,702],{"class":249,"line":470},[247,703,704],{"class":520},"    }\n",[247,706,707],{"class":249,"line":479},[247,708,709],{"class":520},"  ]\n",[247,711,713],{"class":249,"line":712},23,[247,714,715],{"class":520},"}\n",[116,717,718],{"id":718},"変換に必要なマッピング",[720,721,722,735],"table",{},[723,724,725],"thead",{},[726,727,728,732],"tr",{},[729,730,731],"th",{},"SQLite metric_name",[729,733,734],{},"CompanyData パス",[736,737,738,749,759,769,779,789,799,809,819,829],"tbody",{},[726,739,740,744],{},[741,742,743],"td",{},"Total Revenues",[741,745,746],{},[23,747,748],{},"pl.revenue",[726,750,751,754],{},[741,752,753],{},"Gross Profit",[741,755,756],{},[23,757,758],{},"pl.grossProfit",[726,760,761,764],{},[741,762,763],{},"Operating Income",[741,765,766],{},[23,767,768],{},"pl.operatingIncome",[726,770,771,774],{},[741,772,773],{},"Net Income",[741,775,776],{},[23,777,778],{},"pl.profit",[726,780,781,784],{},[741,782,783],{},"Total Cash And Short Term Investments",[741,785,786],{},[23,787,788],{},"bs.currentAssets[0].value",[726,790,791,794],{},[741,792,793],{},"Total Receivables",[741,795,796],{},[23,797,798],{},"bs.currentAssets[1].value",[726,800,801,804],{},[741,802,803],{},"Operating Cash Flow",[741,805,806],{},[23,807,808],{},"cashFlow.operatingCF",[726,810,811,814],{},[741,812,813],{},"Capital Expenditure",[741,815,816],{},[23,817,818],{},"cashFlow.capex",[726,820,821,824],{},[741,822,823],{},"EPS Diluted",[741,825,826],{},[23,827,828],{},"perShare.eps",[726,830,831,834],{},[741,832,833],{},"...",[741,835,833],{},[14,837,839],{"id":838},"推奨アプローチ-方法aサーバーapi経由","推奨アプローチ: 方法A（サーバーAPI経由）",[116,841,842],{"id":842},"実装計画",[844,845,846,865,883,900],"ol",{},[77,847,848,851],{},[44,849,850],{},"Nuxt Server API の作成",[74,852,853,859],{},[77,854,855,858],{},[23,856,857],{},"server/api/financial/companies.get.ts"," - 企業一覧取得",[77,860,861,864],{},[23,862,863],{},"server/api/financial/[ticker].get.ts"," - 企業別財務データ取得",[77,866,867,870],{},[44,868,869],{},"データ変換ユーティリティの作成",[74,871,872,877],{},[77,873,874],{},[23,875,876],{},"server/utils/financial-data-transformer.ts",[77,878,879,880,882],{},"SQLite の行データを ",[23,881,507],{}," 形式に変換",[77,884,885,888],{},[44,886,887],{},"SQLite 接続設定",[74,889,890,897],{},[77,891,892,893,896],{},"開発環境: ",[23,894,895],{},"better-sqlite3"," で直接接続",[77,898,899],{},"プロダクション: Cloudflare D1 バインディング",[77,901,902,905],{},[44,903,904],{},"Vue ページの作成",[74,906,907,912],{},[77,908,909],{},[23,910,911],{},"pages/financial-quiz/proportional-animation-db.vue",[77,913,914,917],{},[23,915,916],{},"useFetch('/api/financial/MSFT')"," でデータ取得",[116,919,920],{"id":920},"ディレクトリ構造",[59,922,925],{"className":923,"code":924,"language":64},[62],"apps/web/\n├── data/\n│   └── koyfin.db              # SQLite データベース\n├── server/\n│   ├── api/\n│   │   └── financial/\n│   │       ├── companies.get.ts\n│   │       └── [ticker].get.ts\n│   └── utils/\n│       └── financial-data-transformer.ts\n└── app/\n    └── pages/\n        └── financial-quiz/\n            └── proportional-animation-db.vue\n",[23,926,924],{"__ignoreMap":67},[14,928,930],{"id":929},"sqlite-データの実際の構造","SQLite データの実際の構造",[19,932,933],{},"SQLiteには以下のsectionごとにデータが格納されている：",[74,935,936,942,948,954,960,966,972,978,984],{},[77,937,938,941],{},[23,939,940],{},"balance_sheet"," - 貸借対照表",[77,943,944,947],{},[23,945,946],{},"income_statement"," - 損益計算書",[77,949,950,953],{},[23,951,952],{},"cash_flow"," - キャッシュフロー計算書",[77,955,956,959],{},[23,957,958],{},"highlights"," - ハイライト（主要指標）",[77,961,962,965],{},[23,963,964],{},"profitability"," - 収益性指標",[77,967,968,971],{},[23,969,970],{},"enterprise_value"," - 企業価値",[77,973,974,977],{},[23,975,976],{},"multiples"," - バリュエーション指標",[77,979,980,983],{},[23,981,982],{},"roic"," - 投下資本利益率",[77,985,986,989],{},[23,987,988],{},"solvency"," - 財務健全性",[116,991,992],{"id":992},"データ値の形式",[19,994,995,996,618,999,618,1002,1005],{},"値は文字列で格納されている（例: ",[23,997,998],{},"\"391,035.0M\"",[23,1000,1001],{},"\"(9,447.0)M\"",[23,1003,1004],{},"\"46.21%\"","）。",[74,1007,1008,1014,1017,1024],{},[77,1009,1010,1011],{},"負の値はカッコで囲まれている: ",[23,1012,1013],{},"(9,447.0)M",[77,1015,1016],{},"単位はM（百万ドル）",[77,1018,1019,1020,1023],{},"パーセントは",[23,1021,1022],{},"%","付き",[77,1025,1026,1027,1023],{},"倍率は",[23,1028,1029],{},"x",[14,1031,1032],{"id":1032},"詳細マッピングテーブル",[116,1034,1036],{"id":1035},"bs貸借対照表へのマッピング","BS（貸借対照表）へのマッピング",[720,1038,1039,1051],{},[723,1040,1041],{},[726,1042,1043,1046,1048],{},[729,1044,1045],{},"SQLite (section=balance_sheet)",[729,1047,734],{},[729,1049,1050],{},"備考",[736,1052,1053,1065,1076,1089,1102,1116,1129,1143,1157,1171,1185,1199,1214,1225,1239,1253,1267,1281,1292,1303,1317,1331,1345,1356,1367,1381,1395,1409,1424],{},[726,1054,1055,1060,1063],{},[741,1056,1057],{},[23,1058,1059],{},"Total Assets",[741,1061,1062],{},"検証用",[741,1064],{},[726,1066,1067,1072,1074],{},[741,1068,1069],{},[23,1070,1071],{},"Total Current Assets",[741,1073,1062],{},[741,1075],{},[726,1077,1078,1082,1087],{},[741,1079,1080],{},[23,1081,783],{},[741,1083,1084],{},[23,1085,1086],{},"bs.currentAssets[].現預金・短期投資",[741,1088],{},[726,1090,1091,1095,1100],{},[741,1092,1093],{},[23,1094,793],{},[741,1096,1097],{},[23,1098,1099],{},"bs.currentAssets[].売掛金",[741,1101],{},[726,1103,1104,1109,1114],{},[741,1105,1106],{},[23,1107,1108],{},"Inventory",[741,1110,1111],{},[23,1112,1113],{},"bs.currentAssets[].棚卸資産",[741,1115],{},[726,1117,1118,1121,1126],{},[741,1119,1120],{},"(差額計算)",[741,1122,1123],{},[23,1124,1125],{},"bs.currentAssets[].その他流動資産",[741,1127,1128],{},"Total Current Assets - 上記3項目",[726,1130,1131,1136,1141],{},[741,1132,1133],{},[23,1134,1135],{},"Net Property Plant And Equipment",[741,1137,1138],{},[23,1139,1140],{},"bs.fixedAssets[].有形固定資産",[741,1142],{},[726,1144,1145,1150,1155],{},[741,1146,1147],{},[23,1148,1149],{},"Long-term Investments",[741,1151,1152],{},[23,1153,1154],{},"bs.fixedAssets[].長期投資",[741,1156],{},[726,1158,1159,1164,1169],{},[741,1160,1161],{},[23,1162,1163],{},"Goodwill",[741,1165,1166],{},[23,1167,1168],{},"bs.fixedAssets[].のれん",[741,1170],{},[726,1172,1173,1178,1183],{},[741,1174,1175],{},[23,1176,1177],{},"Other Intangibles",[741,1179,1180],{},[23,1181,1182],{},"bs.fixedAssets[].無形資産",[741,1184],{},[726,1186,1187,1192,1197],{},[741,1188,1189],{},[23,1190,1191],{},"Deferred Tax Assets Long-Term",[741,1193,1194],{},[23,1195,1196],{},"bs.fixedAssets[].繰延税金資産",[741,1198],{},[726,1200,1201,1206,1211],{},[741,1202,1203],{},[23,1204,1205],{},"Other Long-Term Assets",[741,1207,1208],{},[23,1209,1210],{},"bs.fixedAssets[].その他長期資産",[741,1212,1213],{},"調整項目",[726,1215,1216,1221,1223],{},[741,1217,1218],{},[23,1219,1220],{},"Total Current Liabilities",[741,1222,1062],{},[741,1224],{},[726,1226,1227,1232,1237],{},[741,1228,1229],{},[23,1230,1231],{},"Accounts Payable",[741,1233,1234],{},[23,1235,1236],{},"bs.currentLiabilities[].買掛金",[741,1238],{},[726,1240,1241,1246,1251],{},[741,1242,1243],{},[23,1244,1245],{},"Current Portion of Long-Term Debt",[741,1247,1248],{},[23,1249,1250],{},"bs.currentLiabilities[].短期借入金",[741,1252],{},[726,1254,1255,1260,1265],{},[741,1256,1257],{},[23,1258,1259],{},"Current Portion of Leases",[741,1261,1262],{},[23,1263,1264],{},"bs.currentLiabilities[].短期リース",[741,1266],{},[726,1268,1269,1274,1279],{},[741,1270,1271],{},[23,1272,1273],{},"Unearned Revenue Current, Total",[741,1275,1276],{},[23,1277,1278],{},"bs.currentLiabilities[].前受収益(流動)",[741,1280],{},[726,1282,1283,1285,1290],{},[741,1284,1120],{},[741,1286,1287],{},[23,1288,1289],{},"bs.currentLiabilities[].その他流動負債",[741,1291],{},[726,1293,1294,1299,1301],{},[741,1295,1296],{},[23,1297,1298],{},"Total Liabilities",[741,1300,1062],{},[741,1302],{},[726,1304,1305,1310,1315],{},[741,1306,1307],{},[23,1308,1309],{},"Long-Term Debt",[741,1311,1312],{},[23,1313,1314],{},"bs.fixedLiabilities[].長期借入金",[741,1316],{},[726,1318,1319,1324,1329],{},[741,1320,1321],{},[23,1322,1323],{},"Long-Term Leases",[741,1325,1326],{},[23,1327,1328],{},"bs.fixedLiabilities[].長期リース",[741,1330],{},[726,1332,1333,1338,1343],{},[741,1334,1335],{},[23,1336,1337],{},"Unearned Revenue Non Current",[741,1339,1340],{},[23,1341,1342],{},"bs.fixedLiabilities[].長期前受収益",[741,1344],{},[726,1346,1347,1349,1354],{},[741,1348,1120],{},[741,1350,1351],{},[23,1352,1353],{},"bs.fixedLiabilities[].その他固定負債",[741,1355],{},[726,1357,1358,1363,1365],{},[741,1359,1360],{},[23,1361,1362],{},"Total Equity",[741,1364,1062],{},[741,1366],{},[726,1368,1369,1374,1379],{},[741,1370,1371],{},[23,1372,1373],{},"Common Stock",[741,1375,1376],{},[23,1377,1378],{},"bs.equity[].資本金",[741,1380],{},[726,1382,1383,1388,1393],{},[741,1384,1385],{},[23,1386,1387],{},"Additional Paid In Capital",[741,1389,1390],{},[23,1391,1392],{},"bs.equity[].資本剰余金",[741,1394],{},[726,1396,1397,1402,1407],{},[741,1398,1399],{},[23,1400,1401],{},"Retained Earnings",[741,1403,1404],{},[23,1405,1406],{},"bs.equity[].利益剰余金",[741,1408],{},[726,1410,1411,1416,1421],{},[741,1412,1413],{},[23,1414,1415],{},"Treasury Stock",[741,1417,1418],{},[23,1419,1420],{},"bs.equity[].自己株式",[741,1422,1423],{},"負の値",[726,1425,1426,1431,1436],{},[741,1427,1428],{},[23,1429,1430],{},"Comprehensive Income and Other",[741,1432,1433],{},[23,1434,1435],{},"bs.equity[].その他包括利益",[741,1437],{},[116,1439,1441],{"id":1440},"pl損益計算書へのマッピング","PL（損益計算書）へのマッピング",[720,1443,1444,1455],{},[723,1445,1446],{},[726,1447,1448,1451,1453],{},[729,1449,1450],{},"SQLite (section=income_statement)",[729,1452,734],{},[729,1454,1050],{},[736,1456,1457,1469,1482,1494,1506,1521,1535],{},[726,1458,1459,1463,1467],{},[741,1460,1461],{},[23,1462,743],{},[741,1464,1465],{},[23,1466,748],{},[741,1468],{},[726,1470,1471,1476,1480],{},[741,1472,1473],{},[23,1474,1475],{},"Gross Profit (Loss)",[741,1477,1478],{},[23,1479,758],{},[741,1481],{},[726,1483,1484,1488,1492],{},[741,1485,1486],{},[23,1487,763],{},[741,1489,1490],{},[23,1491,768],{},[741,1493],{},[726,1495,1496,1500,1504],{},[741,1497,1498],{},[23,1499,773],{},[741,1501,1502],{},[23,1503,778],{},[741,1505],{},[726,1507,1508,1513,1519],{},[741,1509,1510],{},[23,1511,1512],{},"Cost Of Revenues",[741,1514,1515,1518],{},[23,1516,1517],{},"pl.expenses"," の一部",[741,1520],{},[726,1522,1523,1528,1533],{},[741,1524,1525],{},[23,1526,1527],{},"Selling General & Admin Expenses",[741,1529,1530],{},[23,1531,1532],{},"expenses.sga",[741,1534],{},[726,1536,1537,1542,1547],{},[741,1538,1539],{},[23,1540,1541],{},"R&D Expenses",[741,1543,1544],{},[23,1545,1546],{},"expenses.rd",[741,1548],{},[116,1550,1551],{"id":1551},"キャッシュフローへのマッピング",[720,1553,1554,1565],{},[723,1555,1556],{},[726,1557,1558,1561,1563],{},[729,1559,1560],{},"SQLite (section=cash_flow)",[729,1562,734],{},[729,1564,1050],{},[736,1566,1567,1580,1592],{},[726,1568,1569,1574,1578],{},[741,1570,1571],{},[23,1572,1573],{},"Cash from Operations",[741,1575,1576],{},[23,1577,808],{},[741,1579],{},[726,1581,1582,1586,1590],{},[741,1583,1584],{},[23,1585,813],{},[741,1587,1588],{},[23,1589,818],{},[741,1591,1423],{},[726,1593,1594,1599,1604],{},[741,1595,1596],{},[23,1597,1598],{},"Free Cash Flow",[741,1600,1601],{},[23,1602,1603],{},"cashFlow.fcf",[741,1605],{},[116,1607,1609],{"id":1608},"_1株当たり指標へのマッピング","1株当たり指標へのマッピング",[720,1611,1612,1622],{},[723,1613,1614],{},[726,1615,1616,1618,1620],{},[729,1617,1450],{},[729,1619,734],{},[729,1621,1050],{},[736,1623,1624],{},[726,1625,1626,1635,1639],{},[741,1627,1628,1631,1632],{},[23,1629,1630],{},"Diluted EPS - Continuing Operations"," または ",[23,1633,1634],{},"Net EPS - Diluted",[741,1636,1637],{},[23,1638,828],{},[741,1640],{},[14,1642,1643],{"id":1643},"値のパース処理",[19,1645,1646],{},"SQLiteの文字列値をnumber型に変換する処理が必要：",[59,1648,1650],{"className":511,"code":1649,"language":513,"meta":67,"style":67},"function parseValue(value: string | null): number {\n  if (!value || value === 'None') return 0;\n\n  // カッコ付きの負の値を処理: \"(9,447.0)M\" -> -9447\n  const isNegative = value.startsWith('(') && value.includes(')');\n\n  // 単位とカッコを除去\n  let cleaned = value\n    .replace(/[()MBK%x,]/g, '')\n    .trim();\n\n  const num = parseFloat(cleaned);\n  return isNegative ? -num : num;\n}\n",[23,1651,1652,1687,1728,1732,1737,1786,1790,1795,1808,1845,1855,1859,1877,1901],{"__ignoreMap":67},[247,1653,1654,1657,1660,1663,1666,1668,1672,1675,1678,1681,1684],{"class":249,"line":250},[247,1655,1656],{"class":281},"function",[247,1658,1659],{"class":267}," parseValue",[247,1661,1662],{"class":520},"(",[247,1664,621],{"class":1665},"s4oTP",[247,1667,566],{"class":520},[247,1669,1671],{"class":1670},"sSkh3","string",[247,1673,1674],{"class":520}," | ",[247,1676,1677],{"class":281},"null",[247,1679,1680],{"class":520},"):",[247,1682,1683],{"class":1670}," number",[247,1685,1686],{"class":520}," {\n",[247,1688,1689,1692,1695,1698,1700,1703,1706,1709,1711,1714,1716,1719,1722,1725],{"class":249,"line":257},[247,1690,1691],{"class":260},"  if",[247,1693,1694],{"class":520}," (",[247,1696,1697],{"class":281},"!",[247,1699,621],{"class":1665},[247,1701,1702],{"class":281}," ||",[247,1704,1705],{"class":1665}," value",[247,1707,1708],{"class":281}," ===",[247,1710,533],{"class":532},[247,1712,1713],{"class":536},"None",[247,1715,540],{"class":532},[247,1717,1718],{"class":520},")",[247,1720,1721],{"class":260}," return",[247,1723,1724],{"class":626}," 0",[247,1726,1727],{"class":520},";\n",[247,1729,1730],{"class":249,"line":275},[247,1731,330],{"emptyLinePlaceholder":329},[247,1733,1734],{"class":249,"line":291},[247,1735,1736],{"class":253},"  // カッコ付きの負の値を処理: \"(9,447.0)M\" -> -9447\n",[247,1738,1739,1742,1745,1748,1750,1753,1756,1758,1760,1762,1764,1766,1769,1771,1773,1776,1778,1780,1782,1784],{"class":249,"line":308},[247,1740,1741],{"class":281},"  const ",[247,1743,1744],{"class":1665},"isNegative",[247,1746,1747],{"class":520}," =",[247,1749,1705],{"class":1665},[247,1751,1752],{"class":520},".",[247,1754,1755],{"class":267},"startsWith",[247,1757,1662],{"class":520},[247,1759,540],{"class":532},[247,1761,1662],{"class":536},[247,1763,540],{"class":532},[247,1765,1718],{"class":520},[247,1767,1768],{"class":281}," && ",[247,1770,621],{"class":1665},[247,1772,1752],{"class":520},[247,1774,1775],{"class":267},"includes",[247,1777,1662],{"class":520},[247,1779,540],{"class":532},[247,1781,1718],{"class":536},[247,1783,540],{"class":532},[247,1785,323],{"class":520},[247,1787,1788],{"class":249,"line":320},[247,1789,330],{"emptyLinePlaceholder":329},[247,1791,1792],{"class":249,"line":326},[247,1793,1794],{"class":253},"  // 単位とカッコを除去\n",[247,1796,1797,1800,1803,1805],{"class":249,"line":333},[247,1798,1799],{"class":281},"  let ",[247,1801,1802],{"class":1665},"cleaned",[247,1804,1747],{"class":520},[247,1806,1807],{"class":1665}," value\n",[247,1809,1810,1813,1816,1818,1821,1824,1828,1831,1833,1836,1839,1842],{"class":249,"line":339},[247,1811,1812],{"class":520},"    .",[247,1814,1815],{"class":267},"replace",[247,1817,1662],{"class":520},[247,1819,1820],{"class":532},"/",[247,1822,1823],{"class":520},"[",[247,1825,1827],{"class":1826},"snbK4","()MBK%x,",[247,1829,1830],{"class":520},"]",[247,1832,1820],{"class":532},[247,1834,1835],{"class":260},"g",[247,1837,1838],{"class":520},",",[247,1840,1841],{"class":532}," ''",[247,1843,1844],{"class":520},")\n",[247,1846,1847,1849,1852],{"class":249,"line":351},[247,1848,1812],{"class":520},[247,1850,1851],{"class":267},"trim",[247,1853,1854],{"class":520},"();\n",[247,1856,1857],{"class":249,"line":362},[247,1858,330],{"emptyLinePlaceholder":329},[247,1860,1861,1863,1866,1868,1871,1873,1875],{"class":249,"line":378},[247,1862,1741],{"class":281},[247,1864,1865],{"class":1665},"num",[247,1867,1747],{"class":520},[247,1869,1870],{"class":267}," parseFloat",[247,1872,1662],{"class":520},[247,1874,1802],{"class":1665},[247,1876,323],{"class":520},[247,1878,1879,1882,1885,1888,1891,1893,1896,1899],{"class":249,"line":391},[247,1880,1881],{"class":260},"  return",[247,1883,1884],{"class":1665}," isNegative",[247,1886,1887],{"class":281}," ?",[247,1889,1890],{"class":281}," -",[247,1892,1865],{"class":1665},[247,1894,1895],{"class":281}," :",[247,1897,1898],{"class":1665}," num",[247,1900,1727],{"class":520},[247,1902,1903],{"class":249,"line":396},[247,1904,715],{"class":520},[14,1906,1907],{"id":1907},"次のステップ",[844,1909,1910,1920,1925,1928,1931],{},[77,1911,1912,1919],{},[1913,1914,1915,1916,1918],"del",{},"SQLite に格納されている ",[23,1917,490],{}," の一覧を確認"," ✅",[77,1921,1922,1919],{},[1913,1923,1924],{},"マッピングテーブルを作成",[77,1926,1927],{},"サーバーAPIの実装",[77,1929,1930],{},"Vue ページの実装",[77,1932,1933],{},"動作確認",[14,1935,1937],{"id":1936},"スケーラビリティの検討100社300社対応","スケーラビリティの検討（100社〜300社対応）",[116,1939,1940],{"id":1940},"ビルド時変換の現実性",[1942,1943,1945],"h4",{"id":1944},"現状の-composable-ファイルサイズ","現状の composable ファイルサイズ",[59,1947,1950],{"className":1948,"code":1949,"language":64},[62],"useMicrosoftData.ts: 約740行（12期間分のデータ）\n",[23,1951,1949],{"__ignoreMap":67},[19,1953,1954,1955,1958],{},"100社 × 740行 = ",[44,1956,1957],{},"約74,000行","のTypeScriptファイルが生成される",[1942,1960,1961],{"id":1961},"ビルド時変換のメリット",[844,1963,1964,1970,1976,1981],{},[77,1965,1966,1969],{},[44,1967,1968],{},"パフォーマンス最高"," - 静的データなのでランタイムのDB接続なし",[77,1971,1972,1975],{},[44,1973,1974],{},"Cloudflare D1への依存なし"," - デプロイが単純",[77,1977,1978,1980],{},[44,1979,176],{}," - コンポーネント側の変更不要",[77,1982,1983,1986],{},[44,1984,1985],{},"オフラインでも動作"," - 全データがバンドルに含まれる",[1942,1988,1989],{"id":1989},"ビルド時変換のデメリット",[844,1991,1992,1998,2003],{},[77,1993,1994,1997],{},[44,1995,1996],{},"バンドルサイズ増加"," - 100社で推定 2〜3MB（gzip後 300〜500KB）",[77,1999,2000],{},[44,2001,2002],{},"データ更新のたびにビルド＆デプロイが必要",[77,2004,2005,2008],{},[44,2006,2007],{},"初期ロード時間がやや増加","（ただしコード分割で緩和可能）",[116,2010,2012],{"id":2011},"サーバーapi経由のメリットデメリット","サーバーAPI経由のメリット/デメリット",[1942,2014,2015],{"id":2015},"メリット",[844,2017,2018,2023,2029],{},[77,2019,2020],{},[44,2021,2022],{},"バンドルサイズに影響なし",[77,2024,2025,2028],{},[44,2026,2027],{},"データ更新がリアルタイム","（DBを更新するだけ）",[77,2030,2031],{},[44,2032,2033],{},"ページネーション・フィルタリングが容易",[1942,2035,2036],{"id":2036},"デメリット",[844,2038,2039,2044,2049],{},[77,2040,2041],{},[44,2042,2043],{},"Cloudflare D1へのデータ移行が必要",[77,2045,2046],{},[44,2047,2048],{},"APIレイテンシが発生",[77,2050,2051,2054],{},[44,2052,2053],{},"実装が複雑","（変換ロジック、エラーハンドリング等）",[116,2056,2058],{"id":2057},"推奨-段階的アプローチ","推奨: 段階的アプローチ",[720,2060,2061,2077],{},[723,2062,2063],{},[726,2064,2065,2068,2071,2074],{},[729,2066,2067],{},"フェーズ",[729,2069,2070],{},"企業数",[729,2072,2073],{},"推奨方法",[729,2075,2076],{},"理由",[736,2078,2079,2093,2109],{},[726,2080,2081,2084,2087,2090],{},[741,2082,2083],{},"現状",[741,2085,2086],{},"15社",[741,2088,2089],{},"手動composable",[741,2091,2092],{},"既に動作中",[726,2094,2095,2098,2101,2106],{},[741,2096,2097],{},"短期",[741,2099,2100],{},"100社",[741,2102,2103],{},[44,2104,2105],{},"ビルド時変換",[741,2107,2108],{},"スクリプトで自動生成、実装が早い",[726,2110,2111,2114,2117,2122],{},[741,2112,2113],{},"中長期",[741,2115,2116],{},"300社〜",[741,2118,2119],{},[44,2120,2121],{},"サーバーAPI経由",[741,2123,2124],{},"バンドルサイズ問題を回避",[19,2126,2127],{},"100社程度ならビルド時変換でスクリプトを作る方が圧倒的に早く完成する。\n300社を超えてバンドルサイズが問題になったらその時点でサーバーAPI経由に移行すればよい。",[116,2129,2130],{"id":2130},"バンドルサイズの試算",[720,2132,2133,2148],{},[723,2134,2135],{},[726,2136,2137,2139,2142,2145],{},[729,2138,2070],{},[729,2140,2141],{},"推定サイズ（未圧縮）",[729,2143,2144],{},"推定サイズ（gzip）",[729,2146,2147],{},"評価",[736,2149,2150,2163,2176,2190],{},[726,2151,2152,2154,2157,2160],{},[741,2153,2086],{},[741,2155,2156],{},"300KB",[741,2158,2159],{},"50KB",[741,2161,2162],{},"✅ 問題なし",[726,2164,2165,2167,2170,2173],{},[741,2166,2100],{},[741,2168,2169],{},"2〜3MB",[741,2171,2172],{},"300〜500KB",[741,2174,2175],{},"✅ 許容範囲",[726,2177,2178,2181,2184,2187],{},[741,2179,2180],{},"300社",[741,2182,2183],{},"6〜9MB",[741,2185,2186],{},"1〜1.5MB",[741,2188,2189],{},"⚠️ 要検討",[726,2191,2192,2195,2198,2200],{},[741,2193,2194],{},"500社",[741,2196,2197],{},"10〜15MB",[741,2199,2169],{},[741,2201,2202],{},"❌ API経由推奨",[19,2204,2205],{},"※ コード分割（dynamic import）を使えば、初期ロードには影響しない設計も可能",[14,2207,2208],{"id":2208},"質問事項",[19,2210,2211],{},"実装を進める前に確認したいこと：",[74,2213,2216,2225,2231],{"className":2214},[2215],"contains-task-list",[77,2217,2220,2224],{"className":2218},[2219],"task-list-item",[2221,2222],"input",{"disabled":329,"type":2223},"checkbox"," 開発環境のみで動けば OK か、プロダクション（Cloudflare Pages + D1）でも動かしたいか",[77,2226,2228,2230],{"className":2227},[2219],[2221,2229],{"disabled":329,"type":2223}," 全企業のデータを一度に取得するか、企業ごとに API を叩くか",[77,2232,2234,2236],{"className":2233},[2219],[2221,2235],{"disabled":329,"type":2223}," 既存ページ（TypeScript版）との共存か、置き換えか",[2238,2239,2240],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}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);}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 .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sSkh3, html code.shiki .sSkh3{--shiki-default:#2E8F82;--shiki-dark:#2E8F82}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}",{"title":67,"searchDepth":257,"depth":257,"links":2242},[2243,2244,2245,2246,2251,2252,2255,2259,2262,2268,2269,2270,2276],{"id":16,"depth":257,"text":17},{"id":40,"depth":257,"text":40},{"id":104,"depth":257,"text":104},{"id":113,"depth":257,"text":114,"children":2247},[2248,2249,2250],{"id":118,"depth":275,"text":119},{"id":160,"depth":275,"text":161},{"id":197,"depth":275,"text":198},{"id":231,"depth":257,"text":232},{"id":484,"depth":257,"text":484,"children":2253},[2254],{"id":718,"depth":275,"text":718},{"id":838,"depth":257,"text":839,"children":2256},[2257,2258],{"id":842,"depth":275,"text":842},{"id":920,"depth":275,"text":920},{"id":929,"depth":257,"text":930,"children":2260},[2261],{"id":992,"depth":275,"text":992},{"id":1032,"depth":257,"text":1032,"children":2263},[2264,2265,2266,2267],{"id":1035,"depth":275,"text":1036},{"id":1440,"depth":275,"text":1441},{"id":1551,"depth":275,"text":1551},{"id":1608,"depth":275,"text":1609},{"id":1643,"depth":257,"text":1643},{"id":1907,"depth":257,"text":1907},{"id":1936,"depth":257,"text":1937,"children":2271},[2272,2273,2274,2275],{"id":1940,"depth":275,"text":1940},{"id":2011,"depth":275,"text":2012},{"id":2057,"depth":275,"text":2058},{"id":2130,"depth":275,"text":2130},{"id":2208,"depth":257,"text":2208},null,"koyfin.dbに格納された財務データをVueページで表示するための実装アプローチ比較","md",{},"/sqlite-financial-data-implementation",false,"2025-12-12T00:00:00.000Z",{"title":5,"description":2278},"2025-12/2025-12-12/sqlite-financial-data-implementation",[2287,2288,2289,2290,2291],"sqlite","nuxt","financial-data","api","architecture","et2tG7X0L6sk0c2QLGYDbe24wydPh1iF0aebgVQxp8I",[],[2295,2299,2303,2307,2311],{"title":2296,"path":2297,"publishedAt":2298},"財務データパイプライン - 全体像","/financial-data-pipeline-overview","2025-12-14T00:00:00.000Z",{"title":2300,"path":2301,"publishedAt":2302},"Nuxt Content v3：D1データベースは本当に必要なのか？","/nuxt-content-d1-not-used","2025-12-05T00:00:00.000Z",{"title":2304,"path":2305,"publishedAt":2306},"Nuxt Content + Pages ハイブリッドアーキテクチャ：プロジェクト要件定義書","/nuxt-hybrid-content-architecture","2025-11-29T00:00:00.000Z",{"title":2308,"path":2309,"publishedAt":2310},"Nuxt Pages と Nuxt Content の統合仕組み","/nuxt-pages-and-content-integration","2025-10-05T00:00:00.000Z",{"title":2312,"path":2313,"publishedAt":2314},"Nuxt Content の SQLite アーキテクチャ解説","/nuxt-content-sqlite-architecture","2025-10-02T00:00:00.000Z","https://log.eurekapu.com/og/blog/sqlite-financial-data-implementation.png?v=2025-12-12T00%3A00%3A00.000Z&title=SQLite%E3%81%8B%E3%82%89%E8%B2%A1%E5%8B%99%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E5%AE%9F%E8%A3%85%E6%96%B9%E9%87%9D&author=Kei%20Komatsu&sig=a859aaa3fd23bf39",1785654953021]