SwiftでFirebase Databaseを使う

yukimonkey
11 min readApr 30, 2020

--

こんにちは、Yukiです。

アプリ開発未経験者がiOSアプリを作成するシリーズのDatabase 編です。

なぜiOSアプリを開発することになったかは最初の記事で↓

今回はSwiftでFirebaseを使ってみたのでその時のことを書きます。

目次です。

  • Firebaseのアカウントを作成
  • Xcodeで新しいプロジェクトの作成
  • FirebaseをiOSアプリに登録
  • Firebase Databaseの設定
  • Firebaseにデータを書き込みしてみる

Firebaseのアカウントを作成

……………………………………

firebaseの公式サイトにいき、右上のログインボタンをクリック。

ログインしたらプロジェクトを作成を選択。

プロジェクト名を決めて続行

今回はForebasetestという名前にします。

次にGAアナリティクスを使用するか聞かれます。

今回は使用しないので、下部にある「このプロジェクトでGoogle アナリティクスを有効にする」を無効にしてプロジェクトを作成

数秒でプロジェクトが完成し、続行ボタンが出てくるのでクリックすると下記のようなページに遷移します。

FirebaseをiOSアプリに登録

……………………………………

次にiOSのマークをクリックして、iOSアプリにFirebaseを追加します。

ちょっとまって、iOSバンドルIDって何?と疑問に思うかもしれません。

このバンドルIDはXcodeでプロジェクトを作成する際に取得できるので、先にプロジェクトを作成します。

Xcodeで新しいプロジェクトの作成

Xcodeを開いて、プロジェクトの作成をクリック。

新しいプロジェクトのProduct Nameを入力します。

他の項目ももし必要なら変えてください。

iOSバンドルIDはOrganization Identifierの下に表示されているBundle Identifierの値です。

(Product NameとOrganizzation Indentifierをつなげたもの)

このBundle Identifierをメモしておいてください。

アプリの登録

ブラウザ上のfirebaseのiOSアプリの登録ページに戻ります。

iOS バンドルIDに先ほどメモした値を入力。

あとはオプションなので、今回はアプリのニックネーム(Firebase Test)だけ入力しておきます。

入力したらアプリを登録する。

Firebaseの設定ファイルをXcodeに設置

GoogleService-info.plistをダウンロードをクリックして取得したファイルをXcodeプロジェクトのViewController.swiftと同じ階層に設置します。

Firebase Databaseをインストール

今回はCocoaPodsを使ってFirebase Databaseをダウンロードします。

※CocoaPods使ったことないよ!という方は以下の手順でインストールとセットアップをしてください。

# CocoaPodsのインストール
$ sudo gem install cocoapods
# CocoaPodsのセットアップ
$ pod setup

CocoaPodsでインストールするためにPodfileを作ります。

ターミナルを開いて、先ほど作成したXcodeのプロジェクトまでいきます。

$ cd ~/Desktop/firebasetest

以下のコマンドを入力すると自動でPodfileが作成されます。

$ pod init

※Podfileが作成されたか確認したい時はls コマンド(ファイル一覧表示)で参照できます。

$ ls
Podfile firebasetest firebasetest.xcodeproj

Podfileの初期の状態はこんな感じ。

初期状態のファイルの6行目、# Pods for realmtestの下に以下のコードを追加。

pod 'Firebase/Database'

ターミナルに戻ってFirebase Databaseをインストールします。

$ pod install

これでインストールは完了です。

Firebaseの初期コードを追加

ブラウザに戻ります。

Firebase DatabaseをインストールしたときにPodfileと同じ階層に作成されたワークプレースを開く

$ open firebasetest.xcworkspace

XcodeのプロジェクトのAppDelegate.swiftを開き、import Firebaseを記述。

import Firebase

次に既に書かれているdidFinishLaunchingWithOptionsのクラスの中に初期コードを追加。

FirebaseApp.configure()

変更後

無事iOSアプリにFirebaseを追加することができました🥳

Firebase Databaseの設定

……………………………………

ブラウザ上のコンソールを開き、Cloud Firestoreを選択。

データベースを作成します。

本番用?テスト用?と聞かれますが、今回はテスト用にします。

(※本番用だとパーミッションの設定をしないといけません。)

次にデータベースのリージョンを聞かれます。

今回はテストなので好きな場所で問題ないです。

※ちなみにasia-northeast1(東京)、asia-northeast2(大阪)です。

設定されたDatabaseにXcodeのプロジェクトから読み書きができるようにルールを変更しておきます。

Realtime Database > ルールを開きます。

“.read”と”.write”の値がデフォルトでfalseとなっているので、trueにして公開します。

ここで実際にXcodeから読み書きする前に、Databaseの構造について少し触れておきます。

FirebaseのDatabaseは データはkeyとvalueがペアになったJSON形式で保存されます。

例えばこんな感じ(google ドキュメントより)↓

{
"use": {
"alovelace": {
"name": "Ada Lovelace",
"contacts": { "ghopper": true },
},
"ghopper": { ... },
"eclarke": { ... }
}
}

firebaseのコンソールからデータベースを操作できるので、実際に触って確認してみてください。

もっと深く知りたい場合はこちらを参照してください。

MySQLとかPostgreSQLなどのリレーショナルデータベースしか触ったことがない(私)と少し不思議な感じがします。

Firebase DatabaseはJson形式でデータを保存すると覚えておいてください。

Firebaseにデータを書き込みしてみる

……………………………………

ではXcodeのプロジェクトからSwiftを使ってFirebase Databaseのデータ操作をしてみます。

先ほどのワークスペースからViewController.swiftを開く

まずimport Firebaseを記述

import Firebase

ViewControllerクラスの中でDatabaseを参照するインスタンス を作成します。

var ref: DatabaseReference!
ref = Database.database().reference()

作成したインスタンス にデータを追加していきます。

インスタンスのchild()にデータを保存するパス、setValue()に保存するデータをそれぞれの引数に代入します。

ref.child("保存するパス").setValue(保存するデータ)

setValueの引数を配列にして書くことで、複数のvalueとkeyのペアを保存することができます。

ref.child("保存するパス").setValue([key: value, key2: value2, ...])

今回は以下のようなツリー構造になるようにデータを保存してみます。

.
└── residence
└── 01
├── name: ジュン
├── gender: 男
└── type: リス

コードは以下のようになります。

ref.child("residence/01").setValue(["name": "ジュン", "gender": "男", "type": "リス"])

コード追加後

コードを追加後にビルド▶︎するとFirebase Databaseにデータが追加されます。

データが追加されたかどうかはFirebase Databaseのコンソールで確認できます。

インスタンスのchildとsetValueを以下のように書き換えてビルドしてみてください。

ref.child("residence/02").setValue(["name": "シベリア", "gender": "男", "type": "オオカミ"])

residenceの下に新しくデータが追加されます。

childByAutoId()を使うとchild()で指定したパスの下に自動でkeyを作成してくれます。

先ほど書き換えた部分を以下のように書き換えて再度ビルドしてください。

ref.child("residence").childByAutoId().setValue(["name": "チョキ", "gender": "女", "type": "カエル"])

以上がデータの基本的な書き込み方法になります。

データの更新や削除などさらに詳しくみたい方はこちら(公式)を参照してみてください。

以上がSwiftでFirebase Realtime Databaseを使う基本的な方法になります。

もしつまづいたらTwitterのDMからメッセージください。

わかる範囲でお答えいたします!

https://twitter.com/yukimonkey3

--

--

yukimonkey
yukimonkey

Written by yukimonkey

アプリ作ったことないのに社長の思いつきで開発することになったエンジニア

No responses yet