PHP
Firebase
HALDay 9

PHPでFirebaseを使ってみよう!

More than 1 year has passed since last update.

自己紹介

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

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

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

Firebaseとは

firebase

Firebaseとは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

Realtime Databaseの説明を軽く。

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

最強ですね(?)

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

PHPでRealtime Database(Firebase)

準備

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

スクリーンショット 2016-12-18 3.14.29.png

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

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

スクリーンショット 2016-12-18 3.16.04.png

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

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

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

スクリーンショット 2016-12-18 3.17.42.png

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

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

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

スクリーンショット 2016-12-18 3.22.21.png

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

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

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

スクリーンショット 2016-12-18 3.24.45.png

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

実装

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

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

PHP version => 7.0.13
composer version => 1.2.0

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

今回はktamas77/firebase-phpというライブラリで実装してしまおうと思います。

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

mkdir <project name>
cd <project name>

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

composer require ktamas77/firebase-php dev-master

すると、

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

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

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

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

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

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

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

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

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

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

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

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

スクリーンショット 2016-12-18 3.45.22.png

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

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

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

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

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

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

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

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

Firebaseをみると

スクリーンショット 2016-12-18 3.49.38.png

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

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

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

あとがき

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

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

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

Twitter -> @konojunya