Apple プラットフォームで Cloud Storage を使ってみる

Cloud Storage for Firebase を使用すると、画像や動画などのユーザー作成コンテンツをアップロードして共有し、リッチメディア コンテンツをアプリに組み込むことができます。データは Google Cloud Storage バケットに格納されます。これはエクサバイト スケールのオブジェクト ストレージ ソリューションで、高可用性とグローバルな冗長性を備えています。Cloud Storage for Firebase を使用すると、モバイル デバイスやウェブブラウザから直接ファイルを安全にアップロードでき、不安定なネットワークでも安心して行えます。

始める前に

  1. Apple プラットフォーム アプリのスタートガイドをまだ完了していない場合は、必ず完了してください。これには以下が含まれます。

    • Firebase プロジェクトの作成。

    • Apple プラットフォームのアプリをプロジェクトに登録し、Firebase ライブラリと Firebase 構成ファイル(GoogleService-Info.plist)をアプリに追加して、アプリを Firebase に接続すること。

  2. Firebase プロジェクトが 従量課金制の Blaze 料金プランに登録されていることを確認します。Firebase と Google Cloud を初めて使用する場合は、$300 のクレジットを利用できるかどうかご確認ください。

デフォルトの Cloud Storage バケットを作成する

  1. Firebase コンソールのナビゲーション パネルで [ストレージ] を選択します。

    プロジェクトが従量課金制の Blaze の料金プランにまだ登録されていない場合は、プロジェクトをアップグレードするよう求められます。

  2. [開始] をクリックします。

  3. デフォルトのバケットのロケーションを選択します。

  4. デフォルト バケットの Firebase Security Rules を構成します。開発時に公開アクセスルールの設定を考慮してください。

  5. [完了] をクリックします。

バケットは、Firebase コンソールの [Cloud Storage ファイル] タブで確認できます。デフォルトのバケット名の形式は PROJECT_ID.firebasestorage.app です。

公開アクセスを設定する

Cloud Storage for Firebase には宣言型のルール言語が用意されているため、データの構造化方法、インデックスの作成方法、データの書き込みと読み取りの許可を定義できます。認証ユーザーのみがデータの読み取りと書き込みができるように、Cloud Storage への読み取りと書き込みのアクセスはデフォルトでは制限されています。Authentication を設定せずに開始するには、公開アクセスルールを構成します。

この場合、アプリを使用しない人を含むあらゆる人々に Cloud Storage が公開されるため、認証を設定するときに必ず Cloud Storage へのアクセス制限を再設定してください。

Cloud Storage をアプリに追加する

Swift Package Manager を使用して Firebase の依存関係のインストールと管理を行います。

  1. Xcode でアプリのプロジェクトを開いたまま、[File] > [Add Packages] の順に移動します。
  2. プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Cloud Storage ライブラリを選択します。
  5. ターゲットのビルド設定の [Other Linker Flags] セクションに -ObjC フラグを追加します。
  6. 上記の作業が完了すると、Xcode は依存関係の解決とバックグラウンドでのダウンロードを自動的に開始します。

アプリで Cloud Storage を設定する

  1. Firebase の参照を作成または使用する前に、Firebase を初期化します。

    別の Firebase プロダクトを設定済みの場合は、すでにこの作業を行っている可能性がありますが、FirebaseStorage ライブラリをインポートのリストに必ず追加する必要があります。

    1. FirebaseCore モジュールと FirebaseStorage モジュールを UIApplicationDelegate にインポートします。FirebaseAuth も追加することをおすすめします。

      SwiftUI

      import SwiftUI
      import FirebaseCore
      import FirebaseStorage
      import FirebaseAuth
      // ...
      

      Swift

      import FirebaseCore
      import FirebaseStorage
      import FirebaseAuth
      // ...
      

      Objective-C

      @import FirebaseCore;
      @import FirebaseStorage;
      @import FirebaseAuth;
      // ...
      
    2. アプリ デリゲートの application(_:didFinishLaunchingWithOptions:) メソッドで、FirebaseApp 共有インスタンスを構成します。

      SwiftUI

      // Use Firebase library to configure APIs
      FirebaseApp.configure()
      

      Swift

      // Use Firebase library to configure APIs
      FirebaseApp.configure()
      

      Objective-C

      // Use Firebase library to configure APIs
      [FIRApp configure];
      
    3. (SwiftUI のみ)アプリケーション デリゲートを作成し、UIApplicationDelegateAdaptor または NSApplicationDelegateAdaptor を使用して App 構造体に接続します。また、アプリ デリゲートのメソッドの実装入れ替えを無効にする必要があります。詳細については、SwiftUI の手順をご覧ください。

      SwiftUI

      @main
      struct YourApp: App {
        // Register app delegate for Firebase setup
        @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
      
        var body: some Scene {
          WindowGroup {
            NavigationView {
              ContentView()
            }
          }
        }
      }
      
  2. デフォルトの Firebase アプリを使用して、Cloud Storage サービスへの参照を取得します。

    1. アプリのコードベースにある Firebase 構成ファイル(GoogleService-Info.plist)が、デフォルトの Cloud Storage バケットの名前で更新されていることを確認します。

      1. 更新済みの構成ファイルを取得します

      2. このダウンロードした構成ファイルを使用して、Xcode プロジェクトのルートに存在する GoogleService-Info.plist ファイルを置き換えます。メッセージが表示されたら、構成ファイルをすべてのターゲットに追加するオプションを選択します。

        アプリにダウンロードした最新の構成ファイルのみが含まれていること、ファイル名に (2) などの余分な文字が追加されていないことを確認します。

    2. デフォルトの Firebase アプリを使用して、Cloud Storage サービスへの参照を取得します。

      Swift

      let storage = Storage.storage()
      // Alternatively, explicitly specify the bucket name URL.
      storage = Storage.storage(url:"gs://BUCKET_NAME")

      Objective-C

      FIRStorage *storage = [FIRStorage storage];
      // Alternatively, explicitly specify the bucket name URL.
      // FIRStorage storage = [FIRStorage storageWithURL:@"gs://BUCKET_NAME"];

Cloud Storage を使い始める準備ができました。

次のステップでは、Cloud Storage参照を作成する方法を学習する。

高度な設定

次のようないくつかの使用例では、追加の設定が必要です。

最初の使用例は、ユーザーが世界中に存在し、それぞれのユーザーの近くにデータを保存したい場合に最適です。たとえば、レイテンシを短縮するため、米国、ヨーロッパ、アジアの各リージョンでバケットを作成して、各リージョンのユーザーのデータをそこに保存するといったことができます。

2 番目の使用例は、アクセス パターンの異なるデータがある場合に役立ちます。たとえば、写真などの頻繁にアクセスされるコンテンツを格納するためにはマルチリージョンまたはリージョン バケットを、またユーザー バックアップなどのアクセス頻度の低いコンテンツを格納するためには Nearline または Coldline バケットをそれぞれ設定できます。

上記のどちらの場合も、複数の Cloud Storage バケットを使用します。

3 番目の使用例は、Google ドライブのような、ユーザーが複数のログイン アカウント(個人用アカウントや仕事用アカウントなど)を持つことができるアプリを作成する場合に役立ちます。カスタムの Firebase アプリ インスタンスを使用して、追加の各アカウントを認証できます。

複数の Cloud Storage バケットを使用する

上記のデフォルト以外の Cloud Storage バケットを使用する場合、または単一のアプリで複数の Cloud Storage バケットを使用する場合は、カスタム バケットを参照する FIRStorage のインスタンスを作成できます。

Swift

// Get a non-default Cloud Storage bucket
storage = Storage.storage(url:"gs://my-custom-bucket")
    

Objective-C

// Get a non-default Cloud Storage bucket
FIRStorage storage = [FIRStorage storageWithURL:@"gs://my-custom-bucket"];
    

インポートされたバケットの操作

既存の Cloud Storage バケットを Firebase にインポートする場合は、Google Cloud SDK に含まれている gsutil ツールを使用して、Firebase からこれらのファイルにアクセスできるようにする必要があります。

gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME

プロジェクト番号を確認する方法については、Firebase プロジェクトの概要をご覧ください。

これは、新しく作成されるバケットには影響しません。新しく作成されるバケットには、Firebase を許可するデフォルトのアクセス制御が設定されます。これは暫定的な措置であり、将来は自動的に行われるようになります。

カスタムの Firebase アプリを使用する

カスタム FirebaseApp を使用してより複雑なアプリを作成するには、このアプリで初期化される Storage のインスタンスを作成します。

Swift

// Get the default bucket from a custom FirebaseApp
storage = Storage.storage(app:customApp)

// Get a non-default bucket from a custom FirebaseApp
storage = Storage.storage(app:customApp, url:"gs://my-custom-bucket")
    

Objective-C

// Get the default bucket from a custom FIRApp
FIRStorage storage = [FIRStorage storageForApp:customApp];

// Get a non-default bucket from a custom FIRApp
FIRStorage storage = [FIRStorage storageForApp:customApp withURL:@"gs://my-custom-bucket"];
    

次のステップ