カテゴリ: Flutterのアーキテクチャと設計パターン 更新日: 2026/01/30

オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説

308
オニオンアーキテクチャの基本とFlutterでの適用例

先生と生徒の会話形式で理解しよう

生徒

「Flutterでアプリ開発をしてるんですけど、コードが複雑になってきました。何か良い設計方法ってありますか?」

先生

「それなら、オニオンアーキテクチャを学んでみるのがおすすめです。Flutterでも活用できるアーキテクチャですよ。」

生徒

「オニオンアーキテクチャって、名前は聞いたことあるけど、どういう仕組みなんですか?」

先生

「それでは、Flutterアプリでのオニオンアーキテクチャの基本から実際の適用例まで、順番に解説していきましょう!」

1. オニオンアーキテクチャとは?設計の基本概念を学ぼう

1. オニオンアーキテクチャとは?設計の基本概念を学ぼう
1. オニオンアーキテクチャとは?設計の基本概念を学ぼう

オニオンアーキテクチャ(Onion Architecture)とは、ソフトウェア設計において依存関係の方向を明確にし、ビジネスロジックを中心に据えるアーキテクチャスタイルです。

名前の通り、玉ねぎのように中心から層が広がる構造をしており、内側の層が外側の層に依存されるという特徴があります。

特にFlutterアプリ開発では、状態管理やロジックの分離が課題になることが多く、オニオンアーキテクチャを導入することで、コードの保守性やテスト性が飛躍的に向上します。

2. オニオンアーキテクチャの基本構造(4層モデル)

2. オニオンアーキテクチャの基本構造(4層モデル)
2. オニオンアーキテクチャの基本構造(4層モデル)

Flutterにおけるオニオンアーキテクチャは、以下の4層で構成されるのが一般的です。

  • Domain層:エンティティやビジネスルール(最も内側)
  • Application層:ユースケースなどのアプリケーションロジック
  • Infrastructure層:APIやDBとの接続処理
  • Presentation層:FlutterのUIや状態管理(最も外側)

この構造にすることで、UIの変更がアプリケーションの本質的なロジックに影響を与えない設計が可能になります。

3. Flutterプロジェクトでのディレクトリ構成の例

3. Flutterプロジェクトでのディレクトリ構成の例
3. Flutterプロジェクトでのディレクトリ構成の例

Flutterでオニオンアーキテクチャを実践する際には、まずはディレクトリを明確に分けることが大切です。以下のような構成が参考になります。

  • lib/domain/:エンティティやリポジトリのインターフェース
  • lib/application/:ユースケースの処理
  • lib/infrastructure/:APIの実装や外部サービスとの連携
  • lib/presentation/:画面ウィジェットやProviderなど

このように構成することで、ファイルが論理的に整理され、可読性が高くなります。

Flutterを「実務レベル」で使えるようになりたい人や、 iPhone / Android両対応アプリ開発の流れをまとめて学びたい人には、 定番の実践書がこちらです。

Flutter実践開発をAmazonで見る

※ Amazon広告リンク

4. Flutterでのユースケース実装例(Application層)

4. Flutterでのユースケース実装例(Application層)
4. Flutterでのユースケース実装例(Application層)

以下は、ユーザー情報を取得するユースケースの例です。


import '../domain/user.dart';
import '../domain/user_repository.dart';

class GetUserUseCase {
  final UserRepository repository;

  GetUserUseCase(this.repository);

  Future<User> execute() async {
    return await repository.fetchUser();
  }
}

GetUserUseCaseは、ビジネスロジックとしてユーザー情報を取得する役割を担い、リポジトリに依存します。

5. FlutterのUI(Presentation層)での呼び出し方

5. FlutterのUI(Presentation層)での呼び出し方
5. FlutterのUI(Presentation層)での呼び出し方

Presentation層では、上記のユースケースを呼び出して状態管理と連携します。


import 'package:flutter/material.dart';

class UserPage extends StatelessWidget {
  final GetUserUseCase getUserUseCase;

  const UserPage({required this.getUserUseCase});

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: getUserUseCase.execute(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        } else if (snapshot.hasData) {
          final user = snapshot.data!;
          return Text('ようこそ、${user.name}さん');
        } else {
          return Text('エラーが発生しました');
        }
      },
    );
  }
}

このように、UIはユースケースに依存し、ユースケースはドメインに依存するという構造になります。

6. オニオンアーキテクチャ導入によるFlutterの開発メリット

6. オニオンアーキテクチャ導入によるFlutterの開発メリット
6. オニオンアーキテクチャ導入によるFlutterの開発メリット
  • テストしやすい:各層が独立しているため、ユニットテストが容易
  • 保守性が高い:責任が明確になり、コードの見通しが良くなる
  • 拡張しやすい:UIを変えてもビジネスロジックはそのまま使える
  • 再利用可能:ロジックやユースケースを他のプロジェクトにも転用可能

7. オニオンアーキテクチャをFlutterに適用する際の注意点

7. オニオンアーキテクチャをFlutterに適用する際の注意点
7. オニオンアーキテクチャをFlutterに適用する際の注意点

ただし、オニオンアーキテクチャを導入するとファイル数が増えるため、次のような工夫が必要です。

  • 小規模なプロジェクトでは層を簡略化する
  • 命名規則やディレクトリ構成を統一する
  • 層ごとに責任を明確にする

まずは小さなプロジェクトから試して、徐々にスケールさせていくのがおすすめです。

Flutterのアーキテクチャと設計パターンの一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク