最終更新:

【2026年版】Flutterの始め方 — クロスプラットフォーム開発の第一歩を完全ガイド


Flutter 開発フロー Dart コード 1つのコードベース Widget ツリー UIを木構造で構築 iOS アプリ Android アプリ Web アプリ Widget の種類と状態管理 StatelessWidget 状態を持たない テキスト・アイコン等 StatefulWidget 状態を持てる フォーム・カウンター等 状態管理ライブラリ Provider / Riverpod 大規模アプリ向け
Flutter開発フローとWidgetの種類
🎚 難易度 ★★☆ 中級者向け
⏱ 学習時間の目安 読むだけ10分、最初のアプリ動作まで60分
📚 前提知識 プログラミングの基礎知識・Dartの基礎(Flutter SDKに含まれるので一緒に学べる)
✅ このガイドで学べること
  • Flutter SDKとエミュレータのセットアップ
  • Widgetの概念と基本的なUI構築
  • StatefulWidget と状態管理の基本
  • Android/iOSエミュレータまたはWebでの実行

セットアップ手順

# Flutter SDKのインストール(公式サイトからダウンロード後)
flutter doctor       # 環境チェック(全項目グリーンを目指す)
flutter --version

# 新規プロジェクト作成
flutter create myapp
cd myapp
flutter run          # デバイスまたはエミュレータで起動

よく使うflutterコマンド

flutter run              # 実行(デバイス選択あり)
flutter run -d chrome    # Webブラウザで実行
flutter build apk        # Android APKビルド
flutter build ios        # iOSビルド(macOS必要)
flutter pub add パッケージ名  # パッケージ追加
flutter pub get          # 依存パッケージ取得
flutter test             # テスト実行

はじめてのコード(カウンターアプリ)

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const CounterPage(),
    );
  }
}

class CounterPage extends StatefulWidget {
  const CounterPage({super.key});
  @override
  State<CounterPage> createState() => _CounterPageState();
}

class _CounterPageState extends State<CounterPage> {
  int _count = 0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(child: Text('$_count', style: const TextStyle(fontSize: 48))),
      floatingActionButton: FloatingActionButton(
        onPressed: () => setState(() => _count++),
        child: const Icon(Icons.add),
      ),
    );
  }
}

よくある詰まりポイント

Q: flutter doctor でエラーが出る → 各項目のエラーメッセージに従って解決してください。Android Studio / Xcodeのライセンス同意が必要なケースが多いです。flutter doctor --android-licenses でAndroidのライセンスを一括承認できます。

Q: エミュレータが遅い → BIOS/UEFIでVirtualizationを有効にすると速くなります。macOSはApple Siliconなら高速です。Webブラウザでの実行(flutter run -d chrome)は手軽に始められます。

Q: setState を呼び忘れて画面が更新されないStatefulWidget では状態変更を setState(() { ... }) で囲まないと画面が再描画されません。

ひよこ ひよこ

Flutterってよく聞くけど、どんなものなの?

ペンギン先生 ペンギン先生

FlutterGoogleが作ったUIフレームワークで、1つのコードからiOSAndroid・Web・デスクトップアプリをまとめて作れるツールだよ。「クロスプラットフォーム開発」の代表格だね。

ひよこ ひよこ

1つのコードで全部動くってすごいね!でも始めるには何を準備すればいいの?

ペンギン先生 ペンギン先生

まずFlutter SDKインストールして、Android Studioを入れるのが定番の流れだよ。Flutter公式サイトからSDKをダウンロードして、パスを通したら「flutter doctor」コマンドを実行してみて。足りないものを全部教えてくれるから、指示に従えばOKだよ。

ペンギン先生 ペンギン先生

ここで「flutter doctor」を実行してみてね。全項目がグリーンになることを目指そう。すぐには難しくても、「flutter create myapp」→「cd myapp」→「flutter run -d chrome」でWebブラウザにカウンターアプリが表示されるよ。まずはWebで動かしてみるのが一番手軽だよ!

ひよこ ひよこ

flutter doctorって便利なんだね!ところでFlutterDartっていう言語を使うみたいだけど、難しいのかな?

ペンギン先生 ペンギン先生

DartJavaScriptJavaに似た文法だから、どちらかの経験があればすぐ馴染めるよ。型推論があるから「var name = "Flutter"」みたいに書けるし、null安全も言語レベルでサポートされてるから、実行時のnullエラーが起きにくいんだ。非同期処理async/awaitで直感的に書けるよ。

ひよこ ひよこ

なるほど!Flutterでは「ウィジェット」が大事って聞いたけど、それって何なの?

ペンギン先生 ペンギン先生

Flutterでは画面に表示されるものはすべて「Widget」なんだ。ボタンもテキストも画像も、レイアウトすらWidgetだよ。Widgetをツリー状に組み合わせてUIを構築するのがFlutterの基本的な考え方。HTMLでタグを入れ子にするのと似た感覚だね。

ひよこ ひよこ

Widgetにも種類があるの?StatelessWidgetとStatefulWidgetの違いがよく分からないんだけど…

ペンギン先生 ペンギン先生

StatelessWidgetは「状態を持たない」Widget。一度作ったら表示が変わらない、ラベルやアイコンみたいなものに使うよ。StatefulWidgetは「状態を持てる」Widgetで、ボタンを押したらカウンターが増えるとか、ユーザー操作で表示が変わるものに使うんだ。まずはこの2つを使い分けられればアプリが作れるよ。

ひよこ ひよこ

レイアウトを組むときはどうするの?CSSみたいなものがあるのかな?

ペンギン先生 ペンギン先生

FlutterではCSSの代わりにレイアウト用のWidgetを使うよ。横並びならRow、縦並びならColumn、重ねるならStackを使う。余白はPadding Widget、中央寄せはCenter Widgetという感じで、すべてWidgetの組み合わせで表現するんだ。最初は少し戸惑うかもしれないけど、慣れるとCSSより予測しやすいと感じる人も多いよ。

ひよこ ひよこ

アプリが複雑になってくると状態管理が大変って聞いたことがあるけど、どうすればいいの?

ペンギン先生 ペンギン先生

小さいアプリならsetStateで十分だけど、画面が増えてくるとProviderやRiverpodといった状態管理ライブラリを導入するのがおすすめだよ。2026年現在だとRiverpodが特に人気で、型安全に状態を管理できるし、テストも書きやすい。最初はsetStateで慣れてから、必要になったタイミングでRiverpodに移行するのがスムーズだよ。

ひよこ ひよこ

実際にスマホで動かしてみたいんだけど、実機テストってどうやるの?

ペンギン先生 ペンギン先生

Androidなら端末の開発者オプションをONにしてUSBデバッグを有効にすれば、USB接続で「flutter run」するだけで実機にインストールされるよ。iOSXcodeが必要で、Apple Developer登録も要るけど、無料の個人アカウントでもテスト用ビルドは作れるよ。エミュレータでの確認も手軽だけど、実機で触ると操作感が全然違うから早めに試すのがおすすめだね。

ひよこ ひよこ

アプリが完成したらストアに出すのも簡単なの?

ペンギン先生 ペンギン先生

「flutter build appbundle」でAndroid向けのビルドファイルを作ってGoogle Play Consoleにアップロードする流れだよ。iOSなら「flutter build ipa」してApp Store Connectに提出する。審査があるからすぐには公開されないけど、ビルド自体はコマンド一発だね。CI/CDを組めば、GitHubにpushしたら自動でビルド・デプロイまでやってくれる環境も作れるよ。

ひよこ ひよこ

FlutterってWebアプリも作れるんだよね?ネイティブアプリとの違いはあるのかな?

ペンギン先生 ペンギン先生

Flutter WebはCanvasKitレンダラーを使ってブラウザ上に描画するから、見た目はネイティブアプリとほぼ同じになるよ。ただしSEOには弱いし、初回ロードサイズが大きめという弱点もある。管理画面や社内ツールみたいなSPA用途には向いてるけど、コンテンツサイトなら普通のWebフレームワークの方がいいね。適材適所で使い分けるのがプロの判断だよ。

次に学ぶなら