firebase-storage について
Flutter 向けの Firebase Cloud Storage ガイドです。ファイル転送、メタデータ、エラー処理、進捗監視、アクセス制御を扱います。
主な機能
- 01ファイルのアップロード、ダウンロード、削除
- 02ファイルメタデータの取得と更新
- 03Storage エラーと再試行の処理
- 04アップロードの監視、一時停止、再開、キャンセル
- 05Firebase Security Rules によるアクセス制御
活用シーン
- 01Flutter アプリでファイルを保存・取得
- 02アップロードファイルにカスタムメタデータを付与
- 03進捗表示と転送の管理
- 04ユーザー権限に応じたファイルアクセス制限
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ evanca/ flutter-ai-rules --skill firebase-storageインストール後、Claude Code で/firebase-storageを入力して読み込まれたか確認します。
詳細
Firebase Cloud Storage スキル
このスキルでは、Flutter アプリケーションで Firebase Cloud Storage を正しく使用する方法を説明します。
使用するタイミング
次の場合にこのスキルを使用します。
- Flutter プロジェクトで Cloud Storage を設定するとき。
- ファイルをアップロードまたはダウンロードするとき。
- ファイルのメタデータを管理するとき。
- Storage のエラーに対処し、アップロードの進行状況を監視するとき。
1. セットアップと設定
flutter pub add firebase_storage
import 'package:firebase_storage/firebase_storage.dart';
final storage = FirebaseStorage.instance;
// Or specify a bucket explicitly:
// final storage = FirebaseStorage.instanceFor(bucket: "gs://BUCKET_NAME");
- Firebase Storage を使用するには、Blaze(従量課金制)プランが必要です。
flutterfire configureを実行して、Firebase の設定にデフォルトの Storage バケット名を追加します。
セキュリティに関する注意: デフォルトでは、Cloud Storage バケットで何らかの操作を行うには Firebase Authentication が必要です。パブリックアクセスを設定すると、App Engine のファイルも一般公開される可能性があります。Authentication を設定したら、アクセスを再び制限してください。
2. ファイル操作
参照を作成する:
final storageRef = FirebaseStorage.instance.ref();
final fileRef = storageRef.child("uploads/file.jpg");
アップロード:
final uploadTask = fileRef.putFile(file);
final snapshot = await uploadTask;
final downloadUrl = await snapshot.ref.getDownloadURL();
ダウンロード(メモリ内):
final data = await fileRef.getData();
ダウンロード URL:
final downloadUrl = await fileRef.getDownloadURL();
削除:
await fileRef.delete();
3. メタデータの管理
メタデータを取得する:
final metadata = await fileRef.getMetadata();
print('Content type: ${metadata.contentType}');
print('Size: ${metadata.size}');
メタデータを更新する:
final newMetadata = SettableMetadata(
contentType: "image/jpeg",
customMetadata: {'uploaded_by': 'user123'},
);
await fileRef.updateMetadata(newMetadata);
ファイルに追加のキーと値のペアを保存するには、カスタムメタデータを使用します。
4. エラー処理
FirebaseException を使用して try-catch でエラーを処理します。主なエラーコードは次のとおりです。
| コード | 意味 |
|---|---|
storage/object-not-found | 参照先にファイルが存在しません |
storage/bucket-not-found | Cloud Storage 用のバケットが設定されていません |
storage/project-not-found | Cloud Storage 用のプロジェクトが設定されていません |
storage/quota-exceeded | ストレージの割り当て容量を超えました |
storage/unauthenticated | ユーザーの認証が必要です |
storage/unauthorized | ユーザーに権限がありません |
storage/retry-limit-exceeded | 操作がタイムアウトしました |
- Spark プランで
quota-exceededが発生した場合は、Blaze にアップグレードしてください。 - ネットワーク関連のエラーやタイムアウトに備えて、リトライ処理を実装してください。
5. パフォーマンスとベストプラクティス
アップロードの進行状況を監視する:
final uploadTask = fileRef.putFile(file);
uploadTask.snapshotEvents.listen((TaskSnapshot snapshot) {
print('Progress: ${(snapshot.bytesTransferred / snapshot.totalBytes) * 100}%');
});
uploadTask.cancel()でアップロードをキャンセルします。uploadTask.pause()とuploadTask.resume()でアップロードを一時停止/再開します。- アップロード前にファイルサイズを最適化すると、コストを抑え、パフォーマンスを向上できます。
- 包括的なデータ管理には、Cloud Storage を Firestore と併用します。
- ローカルでの開発とテストには、Firebase Local Emulator Suiteを使用します。
6. セキュリティ
- Firebase Security Rulesを使用して、ファイルへのアクセスを制御します。
- Storage のルールをFirebase Authenticationと組み合わせて、ユーザー単位のアクセス制御を行います。
- 本番環境にデプロイする前に、セキュリティルールを十分にテストしてください。
参考資料
コメント
Markdown 対応