PHPでFirebaseを使ってみよう！

# 自己紹介

じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪の2回生です👍 (2016.12.18現在)

よくstart up系イベントに行くので、大阪らへんの方は会いましょう！

# Firebaseとは

![firebase](https://1.bp.blogspot.com/-YIfQT6q8ZM4/Vzyq5z1B8HI/AAAAAAAAAAc/UmWSSMLKtKgtH7CACElUp12zXkrPK5UoACLcB/s1600/image00.png)

[Firebase](https://firebase.google.com)とはGoogleの提供するいろんな機能を持ったサービスです。（BaaSと言われるものの一種だと思ってましたが、いつの間にかすごい多機能になっていました）

公式には

> Firebase は、すばやく高品質のアプリを開発し、ユーザー層を拡大し、収益を増やすために役立つモバイル プラットフォームです。Firebase はニーズに応じて組み合わせて使用できる、さまざまな補完的機能で構成されています。

らしいです。

# どんな機能があるの？

- **アナリティクス**
    - Analytics

- **開発**
    - Cloud Messaging
    - 認証
    - Realtime Database
    - Storage
    - Hosting
    - Remote Config
    - Test Lab
    - Crash Reporting

- **拡大**
    - Notifications
    - App Indexing
    - Dynamic Links
    - Invites
    - AdWords

- **収益**
    - AdMob

ざっとこのぐらいあります。

今回はRealtime Databaseをやっていきたいと思います。

# Realtime Database

[Realtime Database](https://firebase.google.com/docs/database)

Realtime Databaseの説明を軽く。

> データを保存して NoSQL クラウド データベースと同期できます。データはすべてのクライアントにわたってリアルタイムで同期され、アプリがオフラインになっても、利用可能な状態を保ちます。

最強ですね（？）

今回はこのRealtime DatabaseをPHPから触るにはどうするかを手順を追って説明していきます。

# PHPでRealtime Database（Firebase）

## 準備

まずはコンソール([https://console.firebase.google.com/](https://console.firebase.google.com/))へ行きます。

![スクリーンショット 2016-12-18 3.14.29.png](https://qiita-image-store.s3.amazonaws.com/0/90347/ad849de4-d8bd-7b57-3ef6-90bc0952f45e.png)

**新規プロジェクトを作成**を押します。

すると、プロジェクト名と国を入力するように促されるので入力しましょう！

![スクリーンショット 2016-12-18 3.16.04.png](https://qiita-image-store.s3.amazonaws.com/0/90347/88d58e68-62b3-74a9-310c-fba3a04058de.png)

入力したら、**プロジェクトを作成**を押して少し待ちましょう。

すると、新しくプロジェクトができていると思うのでプロジェクトをクリックします。

ここで、このプロジェクトで何を使うのかやKeyの取得などができます。

![スクリーンショット 2016-12-18 3.17.42.png](https://qiita-image-store.s3.amazonaws.com/0/90347/dbfd6057-bc67-f342-d8e3-c2b3680d10e8.png)

まずはKeyをメモっておきましょう。

**Overviewの横の歯車**を押して、**プロジェクトの設定**を開きます。

タブが並んでいますが、一番右にある**サービス アカウント**を選択します。

![スクリーンショット 2016-12-18 3.22.21.png](https://qiita-image-store.s3.amazonaws.com/0/90347/36b30dd1-a963-53d5-7a5a-523da07baca7.png)

この中の、`Node.js`の中に`databaseURL`というのがあると思います。今回の場合は`https://test-78613.firebaseio.com`になります。

このURLをメモしておきましょう。

続いて、**データベースのシークレット**というタブが出ていると思います。

![スクリーンショット 2016-12-18 3.24.45.png](https://qiita-image-store.s3.amazonaws.com/0/90347/510106ab-cc3e-3dcd-bc31-2cd193efe135.png)

このタブを開くとシークレットキーがあるので**表示する**を押して保存しておきましょう。

## 実装

では、上記2つのものを使ってPHPでコードを書いていきたいと思います。

PHPの環境をまとめておきます。

```
PHP version => 7.0.13
composer version => 1.2.0
```

composerのインストールは以下の記事を参考にしてください。

- [Composerをインストールしてみた](http://qiita.com/CatCable/items/02364adacf36410f449e)

今回は[ktamas77/firebase-php](https://github.com/ktamas77/firebase-php)というライブラリで実装してしまおうと思います。

まずプロジェクトフォルダを作ります。

```bash
mkdir <project name>
cd <project name>
```

続いてComposerを使ってライブラリを入れていきたいと思います。

```bash
composer require ktamas77/firebase-php dev-master
```

すると、

```
/
|- vendor/
|- composer.json
|- composer.lock
```

の3つができていると思います。

これで準備は整ったので、さっそくコードを書いていきます。

`db.php`をつくりましょう。

```php:db.php
<?php
require_once "vendor/autoload.php";

define("DEFAULT_URL","https://<- project ->.firebaseio.com/");
define("DEFAULT_TOKEN","<- secret ->");
```

上の2つは先ほど保存しておいたものをいれてください。

では、続きを書いていきます。

```php:db.php
<?php
require_once "vendor/autoload.php";

define("DEFAULT_URL","https://<- project ->.firebaseio.com/");
define("DEFAULT_TOKEN","<- secret ->");

$test = array(
  "name" => "konojunya",
  "age" => 19
);

$firebase = new \Firebase\FirebaseLib(DEFAULT_URL,DEFAULT_TOKEN);

// set
$firebase->set("/users",$test);

// get
$user = $firebase->get("/users");

echo $user;
```

これでログを確認してみましょう。

![スクリーンショット 2016-12-18 3.43.33.png](https://qiita-image-store.s3.amazonaws.com/0/90347/ceb8506c-7727-0079-43fd-e4f708c59d9a.png)

`{"age":19,"name":"konojunya"}`となったでしょうか。

データのセットとゲットを同時にやってみました。

いまの段階でfirebaseのコンソールページはどうなってるんでしょうか。

![スクリーンショット 2016-12-18 3.45.22.png](https://qiita-image-store.s3.amazonaws.com/0/90347/d1194a0d-e88c-631b-c0fb-865fd4ff945d.png)

`/users`へ送るとこんな風にデータがはいっています。

感のいい人はお気づきの用にFirebaseでは`json`のような形式でデータを貯めることができます。

先程のデータを消して、少し使い方を変えてみます。

PHPのファイルをこのように変更してみましょう。

```php:db.php
<?php
require_once "vendor/autoload.php";

define("DEFAULT_URL","https://<- project ->.firebaseio.com/");
define("DEFAULT_TOKEN","<- secret ->");

$test = array(
	"name" => "konojunya",
	"age" => 19
);
$test1 = array(
	"name" => "hoge子",
	"age" => 19
);

$firebase = new \Firebase\FirebaseLib(DEFAULT_URL, DEFAULT_TOKEN);
$firebase->set("/users/konojunya",$test);
$firebase->set("/users/hogeko",$test1);
$user = $firebase->get("/users");
echo $user;
```

すると、

![スクリーンショット 2016-12-18 3.50.59.png](https://qiita-image-store.s3.amazonaws.com/0/90347/0af342d9-1c51-8269-82be-5e5c43f3390f.png)


また違った形式でデータがかえってきました。

`/users`を取得しているので配下の`hogeko`と`konojunya`というユーザー名をKeyとしてもったObjectを返してきています。

```json
{
  "hogeko": {
    "age": 19,
    "name": "hoge子"
  },
  "konojunya": {
    "age": 19,
    "name": "konojunya"
  }
}
```

きれいにするとこんな感じですね。

Firebaseをみると

![スクリーンショット 2016-12-18 3.49.38.png](https://qiita-image-store.s3.amazonaws.com/0/90347/664fccca-3483-af26-48a7-6370b14b3ac1.png)

このようにきれいに並んでいると思います。

PHPからでも簡単にFirebaseのデータベースを使うことができました。

これからも僕も活用していきたいと思っています。

# あとがき

今回の記事は、Firebaseをプログラムから触る部分よりその準備の画面がたどり着くまでめんどくさかったのでかきました。（PHPからFirebaseを使ってる記事もすくない。）

誰かの困りを解決できたらいいなとおもいます。

Twitterやっています！ここ間違えてるよ！とかあればコメント欄や編集リクエスト、Twitterで報告をしていただけると自分もミスに気づけるのでよろしくお願いします！

Twitter -> [@konojunya](http://twitter.com/konojunya)