1. Dartは「自由に書ける言語」ではない
Dartは一見すると柔軟です。
・型推論がある
・null安全が後付けに見える
・書き方の自由度が高そうに見える
しかし実際には、自由に書いたコードほど壊れやすいという特徴があります。
これはDartが、
・状態の所在
・非同期境界
・型の責務
を、暗黙ではなく構造として固定したがる言語だからです。
2. Dartがコード構造を縛る3つの設計圧力
Dartには、意識しなくても働く3つの圧力があります。
・状態は「どこかに集約される」前提
Dartでは、状態を分散させたコードが極端に読みにくくなります。これは偶然ではなく、クラス・イミュータブル設計・State管理文化が前提にあるためです。
・非同期は必ず境界を作る
async / awaitを使わない選択肢がほぼありません。非同期処理は「例外的」ではなく「通常状態」です。
・型は補助情報ではなく制御装置
型を曖昧にすると、IDEとコンパイラが急激に役に立たなくなります。Dartでは型は「書くかどうか」ではなく、「設計に参加させるかどうか」です。
3. なぜDartでは状態がすぐ壊れるのか
初心者が最も早く壊すのは状態です。
・値が保持されない
・いつの間にか初期化される
・UIとロジックがズレる
これはDartが、状態は明示的に管理されるべきものという前提で設計されているからです。
JavaScriptのように「どこかに残っているだろう」という感覚で書くと、Flutterでは即座に破綻します。
4. 非同期処理が「理解できていない」まま動いてしまう理由
Dartの危険な点はここです。
・awaitを付ければ動く
・Futureは返ってくる
・エラーもとりあえず流れる
結果として、非同期を理解しないまま非同期コードが完成するという状態が起きます。
Dartでは非同期処理が構文として簡単な分、設計としての非同期境界を理解していないと後で一気に破綻します。
5. Flutterで顕在化するDart設計の副作用

FlutterはDartの設計を最大限に引き出します。
・Widgetは状態を持たない前提
・状態は外に出される
・再描画は常に起こる
この結果、
・処理を書く場所が限定される
・勝手なことを書くと壊れる
・「なぜここに書いてはいけないのか」を理解できない
という学習障壁が生まれます。
6. WebとServerで違和感が拡大する構造
WebやServerでDartを書くと、なぜここまで厳密にする必要があるのかという違和感が強まります。
理由は単純で、
・WebやServerでは暗黙的な状態管理が許容されてきた
・Dartはそれを許さない
このズレが、「DartはWeb向きではない」という評価につながります。
7. Dartはなぜ学習途中で止まりやすいのか
Dart学習が止まる人の多くは、次の段階で止まります。
・文法は理解した
・サンプルは動く
・しかし設計ができない
ここで多くの記事は「状態管理を学ぼう」「アーキテクチャを学ぼう」と言います。
しかし本質は、Dartは最初から設計を要求してくる言語だという点にあります。
Dartが難しく感じられるのは、言語仕様が複雑だからではありません。状態・非同期・型という三つの設計要素を、曖昧なままにすることを許さない言語だからです。Web Dart 入門として本当に重要なのは、文法を覚えることではなく、「なぜこの書き方しか許されないのか」を理解することです。Dartは自由な言語ではありませんが、その代わりに一貫した設計思考を強制します。この制約を受け入れられるかどうかが、Dartを使い続けられるかの分かれ目になります。



