2019/01/27

FusionTablesからFirebaseCloudFireStoreへ

FusionTables -> Firebase

GoogleのDriveのアプリのFusionTablesを使ったアプリを個人利用で作ってみた。
しかし、FusionTablesのサービスがクローズする事となったため、下記のTweetをしたら、Googleの「Firebase Realtime Database」というものを友人が教えてくれた。
その備忘録である。
https://twitter.com/o310yusuke/status/1078644337422913536

Firebaseとは

いろいろな方が説明されているので、割愛させていただき、私が個人的に抑えておきたい特徴は下記の通り。
  • Googleが運営しているmBaaSである
    • mBaaS(mobile backend as a service ):モバイルアプリ向けに汎用的な機能を提供するバックエンドのサービス、ってところ
  • 無料でも使える
  • データの同期を自動でやってくれる
  • Googleの認証を使える
  • Android/iOS/Webサービスのいずれでも利用できる

Firebaseのデータベースの種類

利用できるデータベースには、現時点では2種類ある。
比較の詳細については、公式サイトを参照のこと。
下記には、個人的は要約を記載する。
今回は「Cloud Firestore」を利用してみる。

Realtime Database

  • 従来からあるFirebaseのデータベース
  • リアルタイムのクライアント間の同期が必要なモバイルアプリ向け
  • 1つの大きな保存領域(CloudFirestoreのドキュメントに相当)があり、JSON型でデータを保存する(1つの大きなJSONツリーとして保存)

Cloud Firestore

  • 2019/01/26時点ではベータ版
  • Realtime Databaseより効果的らしい
  • 複数の保存領域(ドキュメント)をまとめて(コレクション)、そこにデータを保存する
    • コレクション:フォルダのようなもの
    • ドキュメント:一つのファイルのようなもの
    • データ:ドキュメントにかかれている情報

設定手順

基本的には、Cloud Firestoreのスタートガイドのサイドに従って設定を行った。
下記には、私が行った設定内容を備忘録代わりに記載する。

プロジェクトを追加

プロジェクトの追加

  • プロジェクト名
    • 自分が管理しやすい名称をつけるのが良さそう
    • firebase用のプロジェクトとわかる名前を設定
  • プロジェクトID
    • URLとして公開されるとのことなので、注意が必要そう
    • プロジェクト名を入力すると自動入力されるが、アプリの名称に変更
  • 地域/ロケーション
    • アナリティクス:日本
    • ロケーション:asia-northeast1
  • Firebase向けGoogleアナリティクスのデータ共有にデフォルトの設定を使用する:チェックOn
  • アプリでFirebaseサービスを使用することに・・・:チェックOn
上記の設定を行い「次へ」ボタンを押下すると、プロジェクトが作成される。
プロジェクトが作成されると、プロジェクトのページへ自動遷移する。
なお、作成されるプランは、「Spark」で無料$0/月である。

Databaseの設定

開発タブの中から「Database」を選択し、設定を行う。
Cloud Firestoreを作成するボタンを押下する。

Cloud Firestore セキュリティルール

  • テストモードで開始を選択
    • 本来であれば、認証必須にすべき
    • 今回はテスト開発のため、テストモード(参照権限を有するユーザは読み書き可)を選択
  • 作成が完了したら、ルールタブを選択し、ルールを変更
    • 下記のように認証必須の設定に変更し、公開ボタンを押下
    • if ~の部分を追加
      // Allow read/write access on all documents to any user signed in to the application
      service cloud.firestore {
        match /databases/{database}/documents {
          match /{document=**} {
            allow read, write: if request.auth.uid != null;
          }
        }
      }
      

開発環境の設定

Cloud Firestoreを利用するAndroidアプリを開発するための設定を記載する

必要な依存関係とクライアントのライブラリを追加する

  • AndroidStudioでFirebase用のプロジェクト(カラのActivity)を作成する
  • 作成したAndroidアプリのプロジェクトに、Android アプリに Firebase を追加するに従って、Firebase Assistantを使用して、設定を追加する
    • Firestoreを探して、「Read and write documents with Cloud Firestore」のリンクを押下
    • 表示された手順に従い、先程作成したプロジェクトを選択
    • 接続したら、Cloud Firestoreを利用するためのGradleの設定変更を取り込む
      • 下記のwarningがapp/build.gradlenに対して出たが一旦は無視(implementationになっているから)
      Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.
      It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
  • Firebase Assistantで設定したGradleのバージョンが古いので変更
    • 変更前: 11.8.0
    • 変更後: 15.0.0
  • Cloud Firestore を初期化する

まだまだ先は長い・・・

文量が多くなってきたので、今回はここまで。
次回は、Cloud FirestoreをAndroidアプリで利用するための具体的な実装を行っていく。

ハマったこと

プロジェクトの再利用はしないほうが良さそう

FusionTablesを利用する際に作成したプロジェクトを利用して、Firebaseを利用しようとした。
スタートガイドのページに、下記のように記載されている通り、FusionTablesのために作成したプロジェクトは、Firestoreのプロジェクトとして利用できないそうな。
Cloud Firestore と App Engine: 同じプロジェクトで Cloud Firestore と Cloud Datastore の両方を使用することはできません。両方を使用すると、App Engine を使用するアプリが影響を受ける可能性があります。別のプロジェクトで Cloud Firestore を使用してみてください。
※Firebaseでのプロジェクトの作成のタイミングでエラーを出してくれればいいのに。。。
データベースを作成しようとしたさいに、エラーを出すなんて。。。

関連サイト

2019/01/02

2018年を振り返って

2018年を振り返って

あけましておめでとうございます。
2019年(平成31年)になりました。
2018年で、自分がどのくらい成長できたのか、振り返ってみたいと思います。
一部2017年の出来事も振り返りたいと思います。

あったこと

  • 2017年9月:グループ会社への出向から自社への帰任
    • 出向開始は2013年4月(岡山→東京転勤)
    • 帰任理由
      • 2014年度から特定のサービスの開発・運用を継続しており、新しいことをやりたいと思ったから
      • 2017年8月の夏休み前に、自社の部長面談でその旨を伝え、夏休み明けたら「帰任決まったから」と部長からいきなり言われた
  • 2017年12月:部署異動(東京→岡山転勤)
    • 異動理由
      • 担当案件の主幹部門が岡山拠点の部門だったから
      • 帰任の面談のときにも言われていたからOK
      • 該当案件が終了したら東京に転勤させてほしいとは伝え、聞き入れてくれたのでOK
    • 対応案件
      • 出向中に対応していたサービスのサーバ移行開発支援(あれ?w)
      • 出向中に対応していたサービスが利用するためのAPI新規開発(あれれ??ww)
      • Androidアプリ・MDM開発支援(あれ?特定サービスで使っていたタブレットと同じ??ww)
  • 2018年4月:担当案件変更(岡山勤務)
    • 終了案件
      • サーバ移行開発支援:チームから離脱
      • API新規開発:2018年3月にリリース済み
    • 対応案件
      • Androidアプリ・MDM開発支援(メンバーからリーダへ。。。)
  • 2018年8月:部署異動(岡山→東京転勤)
    • 異動理由
      • 担当案件の客先が東京部門のため
    • 対応案件
      • Androidアプリ・MDM開発支援
  • 2018年9月:担当案件変更(東京勤務)
    • 対応案件
      • Androidアプリ・MDM開発支援(リーダからメンバーへ!)
      • サーバ移行 業務要件定義支援(リーダ)

やったこと・できるようになったこと

  • サーバ移行開発支援を通して
    • 対象サービスや仕様のナレッジの共有
    • Azure SQL Databaseでのパーティション設計・実装
  • API開発を通して
    • Markdownを用いた設計書作成(atomを真面目に使った)
    • RESTfulなAPIの設計・開発
    • データストレージとしてAzure Table Storageを使用(ローカル開発環境構築が大変だった。。。)
    • SpringBootでのサーバアプリ開発(仕事で)
    • Gitを使ったソース管理(仕事で)
  • Androidアプリ・MDM開発支援を通して
    • Androidアプリのデコンパイルからの変更箇所の特定
    • PHPのソースを読み込み、設計書を作成(PHPを初めてちゃんと触った)
    • PlantUMLを使ったシーケンス図の作成(atomを入れててよかった)
    • MS Projectを使ったWBS作成・管理
    • Androidアプリの要件の実現性検証のためのサンプルアプリ実装
      • QRコードのリーダ
      • 音声レコーダ

思ったこと

  • サーバ移行開発支援を通して
    • サービスに対する関与の仕方は変わったから良かった(実開発をするチームだし)
    • 経験したことのない技術を利用した開発だったから良かった(アーキを考えたり)
  • Androidアプリ・MDM開発支援を通して
    • 良かれと思ってネゴをしたつもりが、”開発ベンダに利用される”ということがあり、がっかり。。。
  • サーバ移行 業務要件定義支援(リーダ)
    • Twitterとかでも誰かがつぶやいていたけど、「進捗どうですか?」という聞き方ではなく、「困りごとありますか?」という聞き方をすると、聞き出したい進捗が確認できる気がする
  • 全体を通して
    • これまでの経験が強みとなり、自分への仕事となることを実感
    • 一方で、これまでに技術にトンガッた仕事をしていないし、年齢も上がっているため、技術をトンガラせれるような仕事ではなく、管理や育成の仕事を求められる
    • 技術をトンガラせておくためには自分で勉強・実装する時間を設ける必要がある
    • やっぱり設計・実装は楽しい。
    • けど、スケジュールも大事。。。
    • そして、タスクの優先順位を理解することも大事。。。
    • タスクの優先順位を伝えて、スケジュールを作らせることが大事

もうひと踏ん張りなこと

  • チームのタスク管理と進捗管理(WBS作成と更新)
    • 「議論できたから良かった」となりがちだけど、「次に何をするのかをその場で明確にする」ということが大事と思ったから
  • チーム内外のコミュニケーション
    • 自分ひとりでは限界があるから、誰かにやってもらう必要があるので、やってもらうためのコミュニケーションが大事と思ったから
    • チームメンバが迷走しないために、WBSを作って理解してもらってから動いてもらうことが大事と思ったから(相手の年齢に関係なく)
  • 上長への報連相の仕方(上司の使い方)
    • コミュニケーションにも関連するけど、他の誰かに動いてもらうためには、相手に応じたコミュニケーションの仕方があると思ったから
  • Android技術者認定試験の勉強
    • やろうと思って全然できていないから。。。

2019年に向けて

2018年を振り返ってみると、普段は「何もできていない」とかって考えやすいけど、仕事として新しくできるようになったことが、思っていたよりあったな、と思えた。「反省」ではなく「振り返り」をすることで、ダメだった点もポジティブに考えられるような気がしています。
そして、2019年は下記のことをやってみたいな・頑張らないとかな、と思っています。特に自分の強みを明確にするためにもOutputとか資格取得が大事と思ったので、そのことを意識して動きたいと思います。

  • Androidアプリをちゃんと作ってみる
  • ソースコード・設計書をGithubで公開する
  • 実装時に調査したことを、Blogとかで発信する
  • k8sも勉強してみたいな
  • Android技術者認定試験の勉強をちゃんとする
  • PMBOK的な勉強もしなきゃ。。。得意じゃないけど。
  • 悩み事・困りごとをもっと周りに伝える(特に上司に)
  • 仕事でもプライベートでも相方を作る
  • チームメンバとのコミュニケーションのときは、「困りごと」「悩みごと」をまずは聞くようにしてみる
    • 進捗確認ができる
    • リスクも確認できそう
    • スケジュールを本人に決めてもらえそう
  • 自分の売り込みポイントを探す(ヒアリングする)
  • 履歴書を作る
    • 自分の強みを明確にするために(自分を好きになるために)