スポンサーリンク

Flutter + SQLiteでAccess代替アプリを作る方法

スポンサーリンク
Access
スポンサーリンク

こんにちは、なかぜんです。
今回は「Accessでは限界を感じてきた…」「スマホやタブレットでも使える業務アプリを作りたい」という方に向けて、FlutterとSQLiteを使ってAccessの代わりになるアプリを作る方法をご紹介します。

業務で使っているAccessアプリをモダンなUIで再構築したい、マルチデバイスで使いたい、そんな願いをFlutterなら叶えてくれますよ。

スポンサーリンク

FlutterとSQLiteを選ぶ理由

Accessではできなかったクロスプラットフォーム開発

Flutterを使えば、Windows・Mac・Android・iOSで同じコードベースからアプリを作れます。AccessではPCオンリーでしたが、Flutterならスマホでも動くのが魅力です。

SQLiteでローカルデータ管理もバッチリ

Accessで言う「.accdb」のように、SQLiteはローカルにデータベースを保持できます。業務データの閲覧や編集もオフラインでOKです。

開発準備:必要なパッケージと初期設定

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.3.0
  path_provider: ^2.1.2
  path: ^1.8.3

pubspec.yamlにこれらの依存関係を追加しましょう。
sqfliteはSQLite操作、path_providerはデータファイル保存場所の取得、pathはファイルパスの結合に使います。

実装例:商品マスターの一覧アプリ

テーブル作成と初期データ登録

Future<Database> openDb() async {
  final dbPath = await getDatabasesPath();
  final path = join(dbPath, 'mydb.db');

  return openDatabase(
    path,
    version: 1,
    onCreate: (db, version) async {
      await db.execute('''
        CREATE TABLE items(
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          name TEXT NOT NULL,
          price INTEGER NOT NULL
        );
      ''');

      await db.insert('items', {'name': 'りんご', 'price': 120});
      await db.insert('items', {'name': 'バナナ', 'price': 100});
    },
  );
}

Accessで言えば「商品マスター」テーブルをVBAで作るイメージですね。openDb()関数がアプリ起動時にデータベースを作成・初期化します。

データの取得と表示(ListView)

Future<List<Map<String, dynamic>>> fetchItems() async {
  final db = await openDb();
  return await db.query('items');
}

Widget buildItemList() {
  return FutureBuilder(
    future: fetchItems(),
    builder: (context, snapshot) {
      if (!snapshot.hasData) return CircularProgressIndicator();

      final items = snapshot.data!;
      return ListView.builder(
        itemCount: items.length,
        itemBuilder: (context, index) {
          final item = items[index];
          return ListTile(
            title: Text(item['name']),
            subtitle: Text('価格: ${item['price']}円'),
          );
        },
      );
    },
  );
}

Accessでの「連続フォーム」に相当するリスト表示です。FutureBuilderで非同期にデータを取得し、リスト表示する仕組みになっています。

注意点・よくあるミス

  • パスの取得忘れ:getDatabasesPath()は非同期なので、awaitを忘れるとエラーになります
  • onCreateが呼ばれない:既にDBファイルが存在するとonCreateはスキップされます。開発中は一度DBを削除して動作確認を
  • Widgetでの非同期処理:データ取得はFutureBuilderを使ってUIと非同期処理を分離しましょう

応用ポイント:更新・削除・検索の追加

  • 更新:db.update('items', {...}, where: 'id=?', whereArgs: [id])
  • 削除:db.delete('items', where: 'id=?', whereArgs: [id])
  • 検索:db.query('items', where: 'name LIKE ?', whereArgs: ['%検索語%'])

Accessフォームでよく使っていた「検索ボックス」や「編集ボタン」もFlutterで再現可能です。
フォーム設計は自由度が高いので、業務に合わせてどんどん発展できます。

まとめ:Access脱却の一歩としてのFlutter

今回はFlutterとSQLiteを使って、Accessの代替となる簡易的な商品マスターアプリを作る方法をご紹介しました。

  • Flutterならクロスプラットフォーム対応の業務アプリが作れる
  • SQLiteでローカルデータもばっちり管理できる
  • Accessで培ったDB設計・UIノウハウはFlutterでも十分活きる

「業務アプリをスマホでも使いたい」「Accessを卒業してみたい」そんな方は、Flutterにチャレンジしてみてくださいね。

それでは、なかぜんでした!