Firebaseにほぼ更新しない小さいデータベース的なファイルを設置する

ほぼ更新しない小さいデータベース的なファイルとは

例えばですが、各都道府県の名称、県庁所在地、面積のデータセット、そんな感じのイメージです。
ほぼ更新しないし、50行x4列程度です。
その程度のデータベースをFirebase に配置して、モバイルアプリから例えば24時間に一回参照したい。
基本CRUDのReadだけしたい。

結論から言うとFirebase Hosting を使うのが良さそう

Firebase には Firebase Realtime DatabaseCloud Firestore などデータベース系の機能があり、
ぱっと見それを使うのがよさそうかなと思いました。
が、説明を見るとそれらはNoSQL でした。

データ定義は一種類だけだし、むしろRDBがいい。
そしてドキュメントの記載やNoSQLのメリットとして語られるような、
処理速度に問題が生じるレベルのデータ量では勿論ないですし、
水平分散やスケーラビリティなどオーバースペックもいいところです。

ということで、データベースというよりペライチのリソースファイルとして扱った方がよさそう。
= Firebase Hosting を利用するのがよさそうです。

ちなみに、Firebase Realtime Database や Cloud Firestore の開発の勘所についてはQiitaの
Firebase Realtime DBを実践投入するにあたって考えたこと
Cloud Firestoreを実践投入するにあたって考えたこと
が非常に参考になりそうです。

Firebase Hosting を使う

公式ドキュメントFirebase Hosting を使ってみる の通りに進めれば大丈夫です。
前提として Firebaseプロジェクト を先に作っておくとよさそうです。

一応ざっとした手順を以下に書いておきます。

ステップ 1: Firebase CLI をインストールする

Nodeのバージョンによってはアップデートが必要になります。
その場合は本ブログのMac で Node.js をアップデート などを参考にアップデートをしてください。

ステップ 2: プロジェクトを初期化する

作業ディレクトリを決めたら、そこで以下のコマンドを打ちます。

$ firebase init

すると以下のような表示がバーっと出てきます。

     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########

You're about to initialize a Firebase project in this directory:

  /<your>/<path>/

? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. (Press <space> to select, <a> to toggle all, <i
> to invert selection)
❯◯ Database: Deploy Firebase Realtime Database Rules
 ◯ Firestore: Deploy rules and create indexes for Firestore
 ◯ Functions: Configure and deploy Cloud Functions
 ◯ Hosting: Configure and deploy Firebase Hosting sites
 ◯ Storage: Deploy Cloud Storage security rules
 ◯ Emulators: Set up local emulators for Firebase features

で、下の方に丸がいっぱい並んでいます。
必要な機能を選んでねということです。
これは全部未選択状態です。

上下ボタンで必要な機能にカーソルを合わせ、スペースキーで機能をONにし、
エンターボタンを押します。

❯◉ Hosting: Configure and deploy Firebase Hosting sites

すると、以下のような表示になります。

=== Project Setup

First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add, 
but for now we'll just set up a default project.

i  .firebaserc already has a default project, using <your project>.

=== Hosting Setup

Your public directory is the folder (relative to your project directory) that
will contain Hosting assets to be uploaded with firebase deploy. If you
have a build process for your assets, use your build's output directory.

? What do you want to use as your public directory? (public) 

プロジェクトの紐付けですが、今回は以前作ったので既に紐づられています。

で、公開ディレクトリとして扱うディレクトリ名を指定しろと言われています。
何も指定せずにエンターボタンを押すと、デフォルトのpublicという名前のディレクトリができます。

その後、以下のような表示が出てきます。

? Configure as a single-page app (rewrite all urls to /index.html)? (y/N) 

SPA として設定しますか(全てのURLをindex.html にリライトしますか)? とのことなので、
とりあえずNo にしておきます。

✔  Wrote public/404.html
✔  Wrote public/index.html

i  Writing configuration info to firebase.json...
i  Writing project information to .firebaserc...

✔  Firebase initialization complete!

できました!
ディレクトリ構造を見ると以下のようになってます。

$ tree
.
|____.firebaserc
|____public
| |____index.html
| |____404.html
|____.gitignore
|____firebase.json

ステップ 3: サイトにデプロイする

とりあえずデプロイしてみる。

$ firebase deploy

=== Deploying to '<yourprojectid>'...
...
✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/<yourprojectid>/overview
Hosting URL: https://<yourprojectid>.web.app

デプロイできました。
https://プロジェクトID.web.app にアクセスすると以下のような画面が表示されます!

適当なJSONファイルを置いてみる

作成したpublic ディレクトリ配下に適当なJSONファイル(例えばhoge.json とします)を作成し、
再度 firebase deploy します。

https://プロジェクトID.web.app/hoge.json でアクセスすると、
JSONファイルとして扱えるようなっています。

レスポンスヘッダを見るとjson形式になっています。

content-type: application/json

これで、Firebaseにほぼ更新しない小さいデータベース的なファイルを設置できました!

最後に

以上です。お疲れ様でした!

Mac で Node.js をアップデート

Macの環境

macOS Catalina バージョン10.15.5 での情報です。

バージョン管理のライブラリ

nvm, nodebrew, n などがありますが、一番メジャーなのはnvmのようです。
ので、本稿ではnvmを採用します。
基本的にはQiitaの nvm(Node Version Manager)を使ってNode.jsをインストールする手順 という記事の通りにすればよさそうです。

ちなみにnvmと似たような用語にnpmというものがあります。
違いは上記のQiitaに書いている通りです。

nvmとは、Node Version Managerの略で、Node.jsのバージョン管理するパッケージになります。
npmとは、Node Package Managerの略で、Node.jsで作られたパッケージやライブラリを管理するツールになります。

https://qiita.com/ryouzi/items/5b0158ba1a77bf4b6004

今回はNode 自体のバージョンを更新したいので、nvm コマンドを打っていきます!

いい感じのバージョンをインストールする

というわけで、いい感じの新しいバージョンを調べる。

$ nvm ls-remote
...
       v12.18.2   (LTS: Erbium)
       v12.18.3   (Latest LTS: Erbium)
        v13.0.0
...

v12.18.3 が最新のLTSらしいのでインストール。

$ nvm install v12.18.3
v12.18.3 is already installed.
nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local/Cellar/nvm/0.35.3/versions/node/v12.18.3"
Run `npm config delete prefix` or `nvm use --delete-prefix v12.18.3` to unset it.

(v12.18.3 is already installed. とのことなので、既に入っている??)

$ nvm install --lts --latest-npm

もしくは↑のコマンドでも入ると思います。

とりあえず怒られている。
一応入っているか確認。

$ node -v
v8.11.0

やはりバージョンが切り替わっていないようです。
うーん🤔

バージョンを切り替える

指示にある通り、また、Stackoverflowこちら を参考にしつつ以下のコマンドを打つ。

$ npm config delete prefix
$ npm config set prefix $NVM_DIR/versions/node/v12.18.3

ターミナルを再起動させて(← これ重要)、以下コマンドで確認。

$ node -v
v12.18.3

うまくいった🙆‍♂️

$ npm config list と打つと以下のような表示がされます。 こちらの prefix の設定をうまく書き換えられたということかなと思います。

$ npm config list
...
prefix = "/usr/local/opt/nvm/versions/node/v12.18.3"
...

もしくは一時的にバージョンを切り替える場合

ターミナルに書いている通り、以下のコマンドを打つと一時的にバージョンが切り替わります。

$ nvm use --delete-prefix v12.18.3

ただし、あくまでも一時的にお試しで使う形となり、そのプロセスのみ有効です。
ターミナルを再起動したり、⌘ Cmd + T で別タブでターミナルを新規作成したりすると、$ node -v を打つと前のバージョンが表示されると思います。

最後に

以上です。お疲れ様でした!