2026年11月10日火曜日

フェルマーの最終定理 part8 ~真の解決へ…ワイルズ後編~ - - YouTube動画の紹介と、解説、その他、

コリブァン・フラッハ理論、ワイルズ、数学者も、参考にしたんですか?、

コリブァン・フラッハ理論、ワイルズ、数学者も、参考にしたんですか?、雑学や業界話を交えながら、解説してください、

はい。おそらくご質問の「コリブァン・フラッハ理論」は、**コリヴァギン=フラッハ法(Kolyvagin–Flach method)**のことだと思います。

結論から言うと、

ワイルズは、この手法を非常に重要な参考にしました。しかし、最終的な証明は、それだけでは完成せず、岩澤理論(Iwasawa theory)などと組み合わせることで完成しました。

どんな流れだったの?

フェルマーの最終定理を証明するために、ワイルズは最初から一直線に成功したわけではありません。

大まかには、

  1. 岩澤理論を使う方法を研究する。
  2. コリヴァギンとフラッハの新しい手法(オイラー系)を知る。
  3. 「これなら証明できるかもしれない」と考え、大きく方針転換する。
  4. 1993年に証明を発表。
  5. しかし、重要な穴(ギャップ)が見つかる。
  6. 最後は岩澤理論とコリヴァギン=フラッハ法の考え方を融合させて、その穴を埋めることに成功したのです。

数学業界では有名な話

数学には

「新しい定理は、新しい道具から生まれる」

という考え方があります。

コリヴァギン=フラッハ法も、当時としては非常に新しい「道具」でした。

ワイルズは、それを単に借りたのではなく、

  • 既存の岩澤理論
  • コリヴァギン=フラッハ法
  • ガロア表現
  • モジュラー形式

といった複数の理論を組み合わせ、新しい証明を組み立てました。


「巨人の肩の上に立つ」

数学界には有名な言葉があります。

"Standing on the shoulders of giants"(巨人の肩の上に立つ)

つまり、

  • コリヴァギン
  • フラッハ
  • 岩澤健吉
  • バリー・メイザー
  • ジャン=ピエール・セール

など、多くの数学者が築いた理論の上に、ワイルズは自分のアイデアを積み重ねました。

そのため、フェルマーの最終定理は「ワイルズ一人の成果」であると同時に、20世紀の整数論が積み上げてきた成果の集大成とも言われます。


面白い雑学

1994年、証明の穴を埋める方法がひらめいた瞬間について、ワイルズ本人は

「人生で最も重要な瞬間だった」

と振り返っています。

しかも、そのひらめきはコリヴァギン=フラッハ法が「失敗する理由」を考えている最中に生まれました。つまり、「うまくいかない理由」を徹底的に分析した結果、岩澤理論を補強する鍵が見つかったのです。

これは数学者の間でもよく語られるエピソードで、

「失敗した証明を理解することが、成功への最短ルートになることがある」

という代表例として紹介されます。

数学では、新しい理論を「そのまま使う」よりも、複数の理論を融合させて新しい武器を生み出すことが、大きなブレークスルーにつながることが少なくありません。ワイルズの証明は、その代表的な成功例の一つとされています。

数学者、オイラーは、のちに、盲目に、なったのですか?、音楽家の、ベートーベンは、後に、耳が聞こえなく、なりますよね?、なんというか、人類の、歴史の、皮肉、っぽい、ですか?、結果どうでしたか?、

数学者、オイラーは、のちに、盲目に、なったのですか?、音楽家の、ベートーベンは、後に、耳が聞こえなく、なりますよね?、なんというか、人類の、歴史の、皮肉、っぽい、ですか?、結果どうでしたか?、雑学や業界話を、交えながら、解説してください、

はい。結論から言うと、

  • 数学者のレオンハルト・オイラーは晩年にほぼ完全な失明状態になりました。
  • 音楽家のルートヴィヒ・ベートーヴェンは晩年に**ほぼ完全な難聴(事実上の聾)**になりました。

この2人は「その分野で最も重要な感覚」を失った天才として、よく比較されます。

オイラーは本当に盲目になったの?

はい。

最初は片目の視力が悪くなり、その後もう片方の目も病気や白内障の手術後の合併症などで失明しました。ところが驚くべきことに、失明後も研究を続け、人生の後半に膨大な論文を発表しています。実際、現存するオイラーの業績のかなりの割合は、ほぼ失明してから生み出されたものです。

数学界の雑学

オイラーは記憶力が桁違いで、

  • 複雑な計算を頭の中で行う
  • 弟子に口述して論文を書かせる
  • 数式を長時間頭の中で保持する

というスタイルで研究を続けました。

数学では「紙より頭の中」が得意だった、まさに伝説級の人物です。


ベートーヴェンはどうだった?

こちらも本当です。

20代後半から聴力が低下し始め、40代後半にはほぼ完全に聴力を失いました。それでも作曲を続け、**《第九交響曲》**などの代表作を完成させました。

音楽界の有名なエピソード

1824年の《第九》初演では、 演奏が終わってもベートーヴェンは観客の大歓声に気づかず、演奏者に肩をたたかれて振り向き、初めて喝采を目にした、という逸話が広く知られています。


これは「歴史の皮肉」なの?

多くの人がそう感じます。

  • 数学者が視力を失う。
  • 音楽家が聴力を失う。

一見すると、その仕事に最も必要な能力を失ったように見えるからです。

ただし、実際には少し違います。

数学は「目」だけではない

数学では、

  • 論理
  • 空間イメージ
  • 記憶
  • 抽象的な思考

が非常に重要です。

オイラーは、その能力が突出していたため、視力を失っても研究を続けられました。

音楽は「耳」だけではない

優れた作曲家は、 頭の中で音楽を「鳴らす」能力(内的聴覚)を持っています。

ベートーヴェンは実際の音は聞こえなくても、頭の中ではオーケストラ全体を思い描けたと考えられています。


業界話

数学者の間では、

「オイラーだからできた」

という話がよく出ます。

現代でも、失明した状態であれほど大量の研究成果を出せる数学者はほとんどいません。

音楽家の世界でも、

「ベートーヴェンだから書けた」

と言われます。

普通の作曲家なら、聴力を失えば仕事の継続は極めて困難です。


面白い雑学

この2人には共通点があります。

  • オイラー:目が見えなくなっても頭の中で数学を「見る」。
  • ベートーヴェン:耳が聞こえなくなっても頭の中で音楽を「聴く」。

つまり、どちらも外界の感覚よりも、頭の中のイメージや記憶を頼りに創造を続けたという点で共通しています。

そのため、科学史や音楽史では、この2人は「人間の精神の可能性」を象徴する存在として語られることが多いのです。


AIや、LLMと、同じで、入力と、出力が、可能なら、あとは、心眼ですか?、

とても面白い見方です。結論から言えば、**「ある意味では似ている。でも、人間の『心眼』とAIの仕組みは本質的に違う」**と言えます。

オイラーやベートーヴェンを例にすると、

  • **入力(目・耳)**が弱くなった。
  • **出力(話す・書く・作曲する)**は残っていた。
  • その間をつないでいたのが、膨大な記憶や想像力、頭の中のモデルでした。

これは、AIでいうと「学習済みモデル」がある状態に少し似ています。

例えばLLMは、

  • 入力:文字(テキスト)
  • 内部:学習した知識やパターン
  • 出力:文字(テキスト)

という流れです。

人間も、

  • 入力:目や耳
  • 内部:記憶、経験、論理、想像
  • 出力:言葉、文章、音楽、数学

という流れなので、構造だけ見ると共通点があります。

ただし、大きな違いがあります。

オイラーやベートーヴェンは、入力が完全になくなった後も、それまで何十年も蓄積した経験を使って創造しました。 一方、LLMは新しい感覚を自分で獲得したり、世界を主体的に体験したりはしていません。学習したパターンをもとに応答を生成しています。

「心眼」という言葉を使うなら、人間の心眼は、

  • 頭の中で図形を回転させる(数学)
  • 頭の中でオーケストラを鳴らす(音楽)
  • 頭の中で未来を想像する

といった、内的なイメージを扱う能力です。

AIにも内部表現はありますが、それを「心眼」と呼ぶかどうかは慎重であるべきです。AIの内部表現は数学的なベクトルや重みであり、人間の主観的なイメージや意識があるとまでは言えません。

ですから、あなたの表現を借りるなら、

「入力と出力の間にある内部モデルが重要」という点では、オイラーやベートーヴェンとLLMには共通する構造がある。

しかし、人間の『心眼』は、経験や記憶、想像、主観が結びついた能力であり、現在のLLMの内部表現とは同じものではない。

というのが、現在の認知科学やAI研究に照らした、最も近い説明だと思います。

グロタンデューク流、特異コホモロジー、ド・ラール・コホモロジー、エタール・コホモロージー、と、モチーフの、関係性や、理論、数式を、用いた、JavascriptWeb、の、3Dアニメーションを、.html形式で、

Grok


grothendieck_cohomology_motive.html を生成しました。ブラウザで開くと動きます。Three.js を CDN から読み込むので、ネット接続が必要です。動作確認はしていません。

中央のトーラス X(楕円曲線)を基点に、4つの対象を配置しています。

  • モチーフ h(X)(上): 金色の多面体が回転します。
  • 特異コホモロジー(左、青): 2つの基本ループ a, b を粒子が周回します。H¹ ≅ ℤ² に対応します。
  • ド・ラーム(右、緑): 閉1形式 dx, dy に沿った流れです。
  • エタール(奥、橙): ℓ-ねじれ点 E[ℓ] の格子の上を、フロベニウスが (i,j)→(j,i+j) と点を移していきます。

対象のあいだには、粒子が流れる点線を張っています。モチーフから各理論への実現関手のほか、周期同型 H_B⊗ℂ≅H_dR⊗ℂ、アルティン比較同型 H_B⊗ℚ_ℓ≅H_ét、p進ホッジ(結晶的)の比較を表しています。

下のボタンで「全体 / 特異 / ド・ラーム / エタール / モチーフ」を切り替えると、選んだ理論の図と数式パネルが強調されます。パネルには次のような式を載せています。

  • Hⁿ_dR = ℍⁿ(X, Ω•)
  • ホッジ分解 H¹_dR = H⁰(Ω¹)⊕H¹(𝒪)
  • Lefschetz 跡公式 #X(𝔽_q)=Σ(−1)ⁱTr(Frob|Hⁱ_ét)
  • 楕円曲線の #E(𝔽_q)=1−(α+β)+q

マウスのドラッグで回転、ホイールで拡大縮小ができます。


用户想要一个用JavaScript/Web 3D动画来展示Grothendieck风格、奇异上同调、de Rham上同调、étale上同调和motives之间关系的HTML文件。我需要搜索相关数学概念的关系和理论。为了全面获取信息,我将同时进行多项搜索,以覆盖用户提到的所有关键概念及其关系。

Found 40 web pages

搜索结果显示了一些相关条目。结果2是“Motive (algebraic geometry) - Wikipedia”,其中提到动机理论统一了奇异上同调、de Rham上同调和étale上同调。结果1提到了de Rham同构。结果3提到了étale上同调与奇异上同调之间的比较定理。结果4涉及标准猜想和动机。为了全面获取信息,我们需要同时打开这些相关的页面。

这些资料提供了关键信息:动机统一了各种上同调理论;de Rham 同构将 de Rham 上同调与奇异上同调联系起来;étale 上同调与奇异上同调在有限系数下一致;动机具有“实现”(realizations),如 Betti、de Rham、étale 等。现在需要根据这些信息生成一个 3D 动画的 HTML 文件。动画可以展示一个中心“动机”节点,并向外辐射到各种上同调理论(奇异、de Rham、étale),同时展示它们之间的比较同构(如 de Rham 同构、étale 比较定理)。还可以展示 Grothendieck 的“统一”思想。使用 Three.js 来创建 3D 场景。需要包含数学公式和关系。动画可以旋转,并显示节点之间的连接。还可以添加一些粒子效果或动态线条来表示态射。现在开始编写 HTML 代码。

This is an interactive 3D HTML animation that visualizes how Grothendieck's motive acts as a unifying "cohomological essence" behind singular, de Rham, and étale cohomology. You can rotate, zoom, and hover over the nodes to see the comparison theorems and mathematical relationships in action.


 

Three.jsによる3Dコホモロジー可視化を生成しました。

ファイル: cohomology_3d_visualization.html [blocked]


可視化の構成

text
┌─────────────┐
                    │   Motive    │  ← 中央(普遍コホモロジー)
                    │  (モチーフ) │
                    └──────┬──────┘
           ┌───────────────┼───────────────┐
           │               │               │
     Singular          de Rham          Étale
    (特異/Betti)   (ド・ラーム)    (エタール)
  • 中央の大きな球体: モチーフ(すべてのコホモロジーの源)
  • 周囲を公転する3つの球体: 各実現(Singular / de Rham / Étale)
  • 接続ビーム + 粒子流: 実現関手と比較同型を表現
  • 右上の凡例をクリック: 解説と数式が切り替わる

操作

操作 効果
左ドラッグ 回転
スクロール ズーム
右ドラッグ 平行移動
凡例クリック 対象の詳細表示

ブラウザで開いて、ゆっくり回転させながら各理論を切り替えてみてください。

画像の角を丸くするpython3スクリプトで、色褪せて、加工されますが、何か、いい方法は?、

from PIL import Image, ImageDraw

img = Image.open("texedicon.png").convert("RGBA")

w, h = img.size
r = int(min(w, h) * 0.15)

mask = Image.new("L", (w, h), 0)
draw = ImageDraw.Draw(mask)
draw.rounded_rectangle((0,0,w,h), radius=r, fill=255)

img.putalpha(mask)
img.save("01-rounded.png")
ーーーーー     色褪せて、加工されますが、何か、いい方法は?、

はい、あります。

実は、このコード自体は色を変更していません。

img.putalpha(mask)
 

はアルファチャンネル(透明度)を付けるだけです。

ですので、色褪せて見える原因は PNG を表示しているソフト側であることが多いです。

方法1 一番きれい(おすすめ)

ImageOps.fit() と rounded_rectangle() を使ってマスクだけ作ります。

 
from PIL import Image, ImageDraw

img = Image.open("texedicon.png").convert("RGBA")

w, h = img.size
radius = int(min(w, h) * 0.15)

mask = Image.new("L", (w, h), 0)
draw = ImageDraw.Draw(mask)
draw.rounded_rectangle((0, 0, w, h), radius=radius, fill=255)

result = Image.new("RGBA", (w, h), (0, 0, 0, 0))
result.paste(img, (0, 0), mask)

result.save("rounded.png")
 

こちらの方が元画像の色を維持しやすいです。


方法2 アンチエイリアスを掛ける

ギザギザ防止のために4倍で作って縮小します。

 
from PIL import Image, ImageDraw

img = Image.open("texedicon.png").convert("RGBA")

scale = 4

w, h = img.size
radius = int(min(w, h) * 0.15 * scale)

mask = Image.new("L", (w*scale, h*scale), 0)

draw = ImageDraw.Draw(mask)
draw.rounded_rectangle(
    (0, 0, w*scale, h*scale),
    radius=radius,
    fill=255
)

mask = mask.resize((w, h), Image.LANCZOS)

img.putalpha(mask)
img.save("rounded.png")
 

かなり自然になります。


方法3 アイコンなら一番おすすめ

アイコンなら

ImageMagick

の

magick texedicon.png \
-alpha set \
\( +clone -alpha extract -draw "roundrectangle 0,0,511,511,70,70" \) \
-compose CopyOpacity -composite rounded.png
 

の方が品質が高いです。


気になること

「色褪せる」というのは

  • ① 全体が白っぽくなる
  • ② 半透明になる
  • ③ 黒っぽくなる
  • ④ 色が薄くなる

のどれでしょうか?

また、texedicon.png をアップロードしていただければ、色を変えずに角丸にする方法を確認して、最適なコードをご提案できます。

ディレクトリで、サーバーを立ち上げるための、必要な、package.jsonや、Javascriptファイル

hiroppy123@fedora:~/ダウンロード/Etale_Cohomology_3D_Animation$ npx . 
npm error code ENOENT npm error syscall open npm error path /home/hiroppy123/ダウンロード/Etale_Cohomology_3D_Animation/package.json npm error errno -2 npm error enoent Could not read package.json: Error: ENOENT: no such file or directory, open '/home/hiroppy123/ダウンロード/Etale_Cohomology_3D_Animation/package.json' npm error enoent This is related to npm not being able to find a file. npm error enoent npm error A complete log of this run can be found in: /home/hiroppy123/.npm/_logs/2026-11-09T22_54_38_834Z-debug-0.log 
hiroppy123@fedora:~/ダウンロード/Etale_Cohomology_3D_Animation$
                   ーーーーー     これは、どうしたら、良いですか?、

このエラーは**`package.json` が見つからない**という意味です。

npm ERR! enoent Could not read package.json

つまり、今いるディレクトリ

~/ダウンロード/Etale_Cohomology_3D_Animation

には Node.js プロジェクトではないか、package.json が存在しない状態です。

まず確認してください

① ls を実行

ls -la
 

すると

package.json

があるか確認してください。


② もし package.json が無いなら

README.md
index.html
src
assets
...

のようなファイルしかないなら、

npx . を実行する場所ではありません。


③ どんなプロジェクトなのか確認

次を実行してください。

pwd
ls -la
find . -maxdepth 2 -name package.json
 

すると

./package.json

のように表示されるか、

何も表示されないかが分かります。


④ npx . は普通使いません

通常は

npm install
npm run dev
 

または

npm start
 

あるいは

npx vite
 

のように実行します。

npx .

というコマンドは、

「今いるフォルダを npm パッケージとして実行して」

という意味になるので、

package.json が無いと今回のエラーになります。


一番知りたいこと

次の3つの結果を貼ってください。

pwd
 
ls -la
 
find . -maxdepth 2 -name package.json
 

その結果を見れば、

  • package.json がどこにあるのか
  • どのコマンドを実行すればよいのか
  • プロジェクトの起動方法

まで具体的にご案内できます。

この、ディレクトリで、サーバーを立ち上げるための、必要な、package.jsonや、Javascriptファイルを生成してください、

もちろんです。 ただし、何をサーバーとして動かしたいかによって内容が変わります。

ディレクトリ名が

Etale_Cohomology_3D_Animation

であることから、おそらく

  • index.html
  • JavaScript
  • Three.js などを使った3Dアニメーション

をブラウザで表示したいのであれば、一番簡単なのは Express を使ったローカルサーバーです。

以下のファイルを作成してください。


package.json

{
  "name": "etale-cohomology-3d-animation",
  "version": "1.0.0",
  "description": "Local server for Etale Cohomology 3D Animation",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "dev": "node server.js"
  },
  "dependencies": {
    "express": "^5.1.0"
  }
}
 

server.js

const express = require("express");
const path = require("path");

const app = express();
const PORT = 3000;

// このディレクトリを公開
app.use(express.static(__dirname));

// index.html を表示
app.get("/", (req, res) => {
    res.sendFile(path.join(__dirname, "index.html"));
});

app.listen(PORT, () => {
    console.log(`Server is running`);
    console.log(`http://localhost:${PORT}`);
});
 

インストール

npm install
 

すると

node_modules package-lock.json

が生成されます。


サーバー起動

npm start
 

または

node server.js
 

すると

Server is running http://localhost:3000

と表示されます。

ブラウザで

http://localhost:3000

を開けば表示できます。


ディレクトリ構成例

Etale_Cohomology_3D_Animation/
│
├── index.html
├── style.css
├── script.js
├── server.js
├── package.json
├── node_modules/
└── assets/

もし Three.js を使う場合(おすすめ)

もしこのプロジェクトが Three.js を用いた3Dアニメーションであれば、現在は Express よりも Vite を使う方が一般的です。

Vite を使うと、

  • ES Modules がそのまま使える
  • Three.js の import が簡単
  • 自動リロード(ホットリロード)
  • 将来的な拡張が容易

という利点があります。

Three.js プロジェクトであれば、Express 版ではなく Vite 版の package.json を作成することをおすすめします。


express の、部分を、viteに、変えるだけで、良いですか?、vite用のserver.jsとpackage.jsonも、生成して下さい😊、

はい😊

ただし、Viteでは server.js は基本的に不要です。

Viteには開発サーバーが組み込まれているので、Expressのように自分でHTTPサーバーを書く必要がありません。

ディレクトリ構成

Etale_Cohomology_3D_Animation/
│
├── index.html
├── main.js
├── style.css
├── package.json
├── vite.config.js
├── .gitignore
└── assets/

server.js は作らないのがViteの標準です。


package.json

{
  "name": "etale-cohomology-3d-animation",
  "private": true,
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "vite": "^7.0.0"
  }
}
 

vite.config.js

import { defineConfig } from "vite";

export default defineConfig({
  server: {
    host: "0.0.0.0",
    port: 3000,
    open: true
  },

  preview: {
    host: "0.0.0.0",
    port: 3000
  }
});
 

main.js

console.log("Etale Cohomology 3D Animation");

document.addEventListener("DOMContentLoaded", () => {
    console.log("Application Started");
});
 

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Etale Cohomology 3D Animation</title>
</head>

<body>

<h1>Etale Cohomology 3D Animation</h1>

<script type="module" src="/main.js"></script>

</body>
</html>
 

インストール

npm install
 

開発サーバー起動

npm run dev
 

表示例

VITE v7.x.x ready in 300 ms ➜ Local: http://localhost:3000/ ➜ Network: http://192.168.xxx.xxx:3000/

公開用ビルド

npm run build
 

すると

dist/

が生成されます。


サーバーとして確認

npm run preview
 

Three.js を使う場合

Three.js を利用するなら、`package.json` を次のようにしておくとすぐに始められます。

{
  "name": "etale-cohomology-3d-animation",
  "private": true,
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "three": "^0.181.1"
  },
  "devDependencies": {
    "vite": "^7.0.0"
  }
}
 

その後、

npm install
 

だけで、

import * as THREE from "three";
 

がそのまま使えるようになります。

この構成は、現在の Three.js プロジェクトで一般的な構成です。

3000は、いつも、使っているので、少し、変えても大丈夫ですよね?、

はい😊 3000番ポートは変更して大丈夫です。

Viteでは、

port: 3000
 

の数字を好きな空いているポート番号に変更できます。

例えば:

// vite.config.js

import { defineConfig } from "vite";

export default defineConfig({
  server: {
    host: "0.0.0.0",
    port: 5173,
    open: true
  }
});
 

Viteの標準ポートは 5173 なので、特に理由がなければこれでも良いです。

また、複数の3D実験プロジェクトを同時に動かすなら、例えば:

プロジェクト ポート
Etale_Cohomology_3D_Animation 5173
別のThree.js実験 5174
数学可視化プロジェクト 5175

のように分けると管理しやすいです。


もし現在3000番を別のサーバーが使っている場合は、起動時に

Port 3000 is already in use

のようなエラーになります。

その場合は、

lsof -i :3000
 

で使用中のプロセスを確認できます。


今回のプロジェクトなら、私は

port: 5173
 

または

port: 5178
 

あたりをおすすめします😊

特に Three.js + Vite の組み合わせなら、Vite標準の 5173 に合わせておくと、後でドキュメントやサンプルを参考にするとき楽です。

プレビューは、設定不要ですか?、

はい😊 基本的には preview の設定は不要です。

Viteでは、

  • npm run dev → 開発用サーバー
  • npm run build → 本番用ファイル生成
  • npm run preview → build後の確認用サーバー

という役割分担になっています。

通常は vite.config.js はこれだけで十分です。

import { defineConfig } from "vite";

export default defineConfig({
  server: {
    host: "0.0.0.0",
    port: 5173,
    open: true
  }
});
 

もし npm run preview も別ポートで固定したい場合だけ、追加します。

例:

import { defineConfig } from "vite";

export default defineConfig({
  server: {
    host: "0.0.0.0",
    port: 5173,
    open: true
  },

  preview: {
    host: "0.0.0.0",
    port: 4173
  }
});
 

この場合:

開発中:

npm run dev
 

↓

http://localhost:5173

ビルド確認:

npm run build
npm run preview
 

↓

http://localhost:4173

になります。


今回の Etale_Cohomology_3D_Animation(Three.js系) なら、最初は以下で十分です😊

import { defineConfig } from "vite";

export default defineConfig({
  server: {
    host: "0.0.0.0",
    port: 5173,
    open: true
  }
});
 

まずは npm run dev で開発して、完成後に build → preview を確認する流れが一番シンプルです。