こんにちは、なかぜんです。
今回は「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にチャレンジしてみてくださいね。
それでは、なかぜんでした!
