カテゴリ: Flutterの機能拡張 更新日: 2025/12/30

Flutterのファイル操作とローカルDB活用術!初心者でもできるデータ保存の基本

285
Flutterのファイル操作・ローカルDB(sqflite / drift)の使い方

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

生徒

「Flutterでデータを保存する方法ってありますか?アプリを再起動しても残っててほしくて…」

先生

「ありますよ!Flutterではファイルに保存する方法や、ローカルデータベース(sqfliteやdrift)を使って管理する方法があります。」

生徒

「どれを使えばいいのか悩んでしまって…どんな時にどれを使うんですか?」

先生

「それではFlutterのファイル操作とローカルDBの基本を、初心者向けに順を追って解説していきましょう!」

1. Flutterでファイルを扱う基本(ファイル操作)

1. Flutterでファイルを扱う基本(ファイル操作)
1. Flutterでファイルを扱う基本(ファイル操作)

Flutterアプリでユーザーの設定情報や一時データを保存したいとき、まず試してみたいのが「ファイル保存」です。path_providerパッケージを使えば、簡単にアプリのドキュメントディレクトリへアクセスできます。

まずはpubspec.yamlに次の依存関係を追加しましょう。


dependencies:
  flutter:
    sdk: flutter
  path_provider: ^2.0.15
  dart: ^3.0.0

次に、ファイルの読み書きサンプルを見てみましょう。


import 'dart:io';
import 'package:path_provider/path_provider.dart';

Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path;
}

Future<File> get _localFile async {
  final path = await _localPath;
  return File('$path/data.txt');
}

Future<String> readData() async {
  try {
    final file = await _localFile;
    return await file.readAsString();
  } catch (e) {
    return '';
  }
}

Future<File> writeData(String data) async {
  final file = await _localFile;
  return file.writeAsString(data);
}

このコードでFlutterアプリ内にテキストファイルを保存し、後から読み出すことができます。設定の保存やログイン状態の保持など、ちょっとしたデータ保存に便利です。

2. Flutterでローカルデータベースを使う方法(sqflite)

2. Flutterでローカルデータベースを使う方法(sqflite)
2. Flutterでローカルデータベースを使う方法(sqflite)

sqflite(スクフライト)は、Flutterで最もよく使われるSQLiteのラッパーパッケージです。リレーショナルデータベースを扱えるので、複雑なデータ管理に向いています。

まずは依存関係を追加しましょう。


dependencies:
  sqflite: ^2.2.8+4
  path: ^1.8.0

次に、基本的な使い方のサンプルです。


import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

Future<Database> initDatabase() async {
  return openDatabase(
    join(await getDatabasesPath(), 'user_database.db'),
    onCreate: (db, version) {
      return db.execute(
        'CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT)',
      );
    },
    version: 1,
  );
}

Future<void> insertUser(Database db, int id, String name) async {
  await db.insert(
    'users',
    {'id': id, 'name': name},
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

Future<List<Map<String, dynamic>>> getUsers(Database db) async {
  return db.query('users');
}

データの追加・取得・更新・削除など、基本的なCRUD操作がこのようにできます。フォーム入力やユーザー一覧の保存にぴったりです。

3. FlutterでDrift(旧moor)を使って宣言的にDB管理

3. FlutterでDrift(旧moor)を使って宣言的にDB管理
3. FlutterでDrift(旧moor)を使って宣言的にDB管理

Drift(ドリフト)は、SQL文を書かずにDartコードでデータベース操作ができる便利なパッケージです。型安全で保守性が高く、ビルド時にコード生成されるため、エラーの少ない開発が可能になります。

依存関係は以下のように設定します。


dependencies:
  drift: ^2.14.0
  sqlite3_flutter_libs: any
  path_provider: ^2.0.15

dev_dependencies:
  drift_dev: ^2.14.0
  build_runner: ^2.4.6

簡単なテーブル定義とアクセス例です。


import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;

part 'app_database.g.dart';

class Tasks extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get title => text()();
}

@DriftDatabase(tables: [Tasks])
class AppDatabase extends _$AppDatabase {
  AppDatabase() : super(_openConnection());
  @override
  int get schemaVersion => 1;
}

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    final dir = await getApplicationDocumentsDirectory();
    final file = File(p.join(dir.path, 'db.sqlite'));
    return NativeDatabase(file);
  });
}

build_runnerで自動生成を行うことで、テーブルやクエリを型安全に扱えるのがDriftの魅力です。

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

Flutter実践開発をAmazonで見る

※ Amazon広告リンク

4. ファイル保存とローカルDBの選び方

4. ファイル保存とローカルDBの選び方
4. ファイル保存とローカルDBの選び方

Flutterでデータを保存する際、用途によって使い分けが重要です。

  • ファイル保存:設定情報や単純な文字列、一時的なキャッシュなど。
  • sqflite:中〜大規模なデータ。ログイン情報・ユーザーリスト・履歴など。
  • drift:複雑なデータ構造・型安全を求める場合に便利。拡張性の高い開発向き。

初心者はまずファイル保存から始め、慣れてきたらsqfliteを導入、さらに効率を求めるならdriftという順番で学ぶのがおすすめです。

5. Flutterのファイル保存やDBを学ぶときの注意点

5. Flutterのファイル保存やDBを学ぶときの注意点
5. Flutterのファイル保存やDBを学ぶときの注意点

以下の点にも注意しながら実装してみましょう。

  • 非同期処理:ファイル操作やDBアクセスはasync/awaitを活用して実装しましょう。
  • エラーハンドリング:ファイルが存在しない・DB接続失敗などを想定した処理も重要です。
  • セキュリティ:ユーザーデータを保存する際は、暗号化も検討しましょう。
  • iOSとAndroidの違い:path_providerなどは、端末ごとの挙動の違いにも注意が必要です。

Flutterでのデータ保存は、アプリ開発において欠かせない技術です。この記事で紹介したFlutterのファイル操作やローカルDB(sqflite・drift)を活用することで、より便利なアプリを開発できるようになります。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flutterでデータを保存したいのですが、どんな方法がありますか?初心者でも簡単に使える方法を知りたいです。

Flutterではファイル保存、sqfliteによるローカルDB保存、driftを使った高度なDB管理などがあります。まずはpath_providerを使ったファイル保存が簡単でおすすめです。
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広告リンク