GCPとFirebaseを併用するときのための備忘録

**GCPやFirebaseの超初心者である自分向けの概念理解のための記事です！**
**少しでもわかっている人は読まない方が時間の節約になります！！**

****

## はじめに
自分で作っているアプリでFirebaseもGoogleCloudPlatform(GCP)も用いていると、勝手にGCP側のプロジェクトが作成されていたりその名前がFirebase側のプロジェクトの名前だったり、よくわかんないけどなんかリンクしているっぽい。

個人開発でとりあえず動くことを優先してそれ以外は何も考えず作成していたので、ここらで一旦プロジェクトとして全体を管理するために、一度きちんと調べることにする。

## そもそもGCPとFirebaseって何が違うんだっけ？
そもそもFirebaseとは、2011年に設立されたFirebase社が提供していた**モバイルアプリ開発のプラットフォーム**。
2014年10月にFirebaseはGoogleに買収され、現在はGoogleの子会社としてサービスを提供している。

> [wikipedia: Firebase](https://ja.wikipedia.org/wiki/Firebase)

一方でGCPは、Googleが提供する、**クラウドコンピューティングサービス**である。さまざまな管理ツールに加えて、一連のモジュール化されたクラウドサービスが提供されており、コンピューティング、データストレージ、データ分析、機械学習などのサービスがある。

> [wikipedia: GoogleCloudPlatform](https://ja.wikipedia.org/wiki/Google_Cloud_Platform)

GoogleによりFirebase社が買収された2017年3月に、「Firebase を より一層Google Cloud Platformと統合されたものにする」という発表があったが、同じものになる、ということではなく、**共通性や互換性を強化する**、という意味合いであった。

現在でも別々のサービスとして運用はされているが、リソースを共有していたり、同一プロジェクト内で管理できたりと、親和性が高い。

Googleはこれらのサービスの違いを、以下のように述べている。

> Firebase は Google のモバイル開発プラットフォームです。
> - アプリの構築とユーザー層の拡大に役立ちます。
> - クライアントサイド アプリのデベロッパー（ウェブとモバイルの両方）がこれを使用しています。
> - 新しいモバイルアプリの構築、既存アプリへの新機能の追加、 ユーザー拡大のために使用されます。
> 
> Google Cloudはクラウド コンピューティング サービスのスイートです。
> - Google のインフラストラクチャ（コンピューティング、ストレージ、ネットワーキング、 データ分析、機械学習）を、 構成可能なサービスとして利用できます。
> - バックエンドやサーバーサイドのデベロッパーがこれを使用しています。
> - Google のコア インフラストラクチャ、データ分析、 機械学習を活用したソフトウェアの構築に使用されます。
>

https://firebase.google.com/firebase-and-gcp/?hl=ja

要は、
- クライアントサイドエンジニアがバックエンドまで自分でアプリ作れるようにするのがFirebase
- サーバ・インフラサイドエンジニアがより高度なことをやりたい時に使うのがGCP

というイメージ。

## 自分がそれぞれで何を行なっているか
実際に両方を運用しているとプロジェクトたちはどのように見えるのか、というのを紹介していく。

### Firebase側
Firebase上では、**Flutterを用いたアプリのためのバックエンドのシステム**として、以下の3つのプロジェクトを作成している。

- photo-app
  - 一番最初に作ったFirebaseに慣れるためのアプリのためのプロジェクト
  - [「[実践]FlutterとFirebaseを使ったアプリ開発」を実践する](https://qiita.com/ninoko1995/items/722ae744c853e087f267)の記事で作成
- map-demo
  - 練習のためのマップアプリを作るためのプロジェクト
  - [Cloud Firestoreの設定をしてFlutter公式のサンプルアプリを動かす](https://qiita.com/ninoko1995/items/b75abe29b57d94a67b87)の記事で作成
- tokai-go
  - 自分の公開用アプリのためのプロジェクト
  - [東海オンエア好きすぎて聖地マップ共同作成アプリ作った話](https://qiita.com/ninoko1995/items/d984c96ff2260374a985)の記事で作成

<img width=400 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/6e940b7b-5e29-734f-b616-8cd8d92d2ebc.jpeg">

### GCP側
#### 作成したプロジェクト
GCPでは、公開用アプリの機能開発のためのサービスを使うために、「MyProject」という名前でプロジェクトを作成している。

- Places API
- YouTube Data API v3
- Maps SDK for iOS
- Maps SDK for Android


<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/bd5e8746-f817-9ac8-cf10-3a8e26f5fd5c.jpeg">

#### 作成されていたプロジェクト
一方で、自分が作成していないにもかかわらず存在しているプロジェクトもあった。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/8d38b0f5-274c-21f4-d915-67669f50ce67.jpeg">

ただ、今回調べてみて、FirebaseとGCPがそれぞれのプロジェクトを対等なものとして扱えることを知り、実際にFirebase側のプロジェクトと見比べてみると、確かに**プロジェクトの名前が一致している**ことがわかった。

さらに中を見てみると、以下のようにFirebase側でプロジェクトを作成したときに自動で作られたであろう認証情報などもあり、またFirebaseの機能を利用するためのAPIなどが有効化されており、確かにFirebaseとGCPとの連携が強化されていることを感じた。

![API_とサービス_–_API_とサービス_–_tokai-go_–_Google_Cloud_Platform.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/bbaef93e-0d4c-d467-c1a5-9955f71b519b.jpeg)

![認証情報_–_API_とサービス_–_tokai-go_–_Google_Cloud_Platform.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/2f13b3d5-0d07-9211-5886-762539c0a662.jpeg)

## 今後の管理方法
- これまではよくわかっていなかったのでGCPとFirebaseをそれぞれ別のサービスとして使っていた。
- そのため、一つのアプリのためのプロジェクトをFirebase側(tokai go)とGCP側(my project)でそれぞれ作ってしまっていた。
- 今後は単一のプロジェクトにまとめて管理していくことにする。
- また、利用可能なAPIはプロジェクト毎ではなく作成した認証キー毎に設定できるので、細かく利用制限をかけることもできそう。


## 最後に
ちなみにこれらを使って作成しているアプリは以下です。
ぜひ使ってみてください。

https://qiita.com/ninoko1995/items/d984c96ff2260374a985


[TokaiGo!(iOS版)](https://apps.apple.com/jp/app/TokaiGo!/id1601486685)
[TokaiGo!(Android版)](https://play.google.com/store/apps/details?id=tokai.go.app)