Markdown のメタデータを Firestore に置く利点

記事
IT・テクノロジー

Markdown のメタデータを Firestore に置く利点

投稿の原稿を Markdown で書いて、メタデータを Firestore に置くと幾つかの利点があります。この記事では、ブログの実装に Firestore が有利な理由を紹介します。

Firebase のストレージのみで実装する場合
最初に、Firebase のストレージを中心に実装する場合を考えてみます。 この方法は、シンプルでプログラムも簡単です。

ファイルの一覧の表示には、Firebase のストレージのホルダにあるファイルの情報を取得して表示します。単純にファイルの「名前」だけをリストする場合には、この方法はシンプルで優れた方法です。

一方で、Markdown に埋め込まれたメタデータを使ってファイルの詳細(タイトルや概要)などを一覧に表示する場合は少し話が違ってきます。

理由は、メタデータを取り出すためにには、ファイルの中身のデータにアクセスする必要があるからです。 そのためにには、Firebase のストレージから取得したファイルの情報から、ファイルにアクセスするための URL を取得した後で、さらに、ファイルの中身にアクセスしてメタデータを取り出すという処理を一覧を表示するために行う必要があります。

ファイルのサイズや処理するファイルの数にもよりますが、処理するファイルの数が増えると時間のかかる処理になってしまうことは明らかです。

Firestore を利用するメリット
そこで、前回紹介した方法は、ファイルをアップロードする際に Markdown に埋め込まれているメタデータを取り出して、予め Firestore に入れておくと言う方法です。

この方法だと、ファイルをの中身を表示する以外は、ファイルをアップロードする際に必要な情報を全て取り出してデータベースに保存しているので、一覧を表示する場合には、Firebase のストレージにあるファイルにアクセスする必要がありません。

データベースのアクセスに比べると、Firebase のストレージにあるファイルのアクセスは時間がかかります。したがって、この方法を利用すると、一覧を表示する際の処理時間は短くて済みます。

プログラム自体も、アップロードの際は、メタデータを取得してデータを Firestore に保存する処理が必要になるので処理が増える事になりますが、一覧の表示の際には、Firestore のデータベースからドキュメントを取得するのみでよくなるので、プログラム自体はシンプルになります。

実際には、アップロードは記事を投稿する際に発生するだけですが、記事の表示は利用者が記事の一覧を表示する際に毎回処理される事を考えるとバランスの良い実装だと言えます。

ファイルの中身の表示もシンプルに
表示したファイルの一覧から選択されたファイルの中身を表示する場合もシンプルになります。 メタデータに加えて、Firebase のストレージに保存した URL も Firestore にファイルのアップロード時に保存しておけば、表示に際には、この URL を使って、対象となるファイルの中身のみを取得すれば良いので、表示の処理もシンプルになります。

ここで考えるのが、ファイルの中身をどうするかという点があります。 Firestore にファイルの中身を保存することも可能です。この場合、Firebase のストレージのアクセスは必要なくなります。データのアクセスも高速になるので便利は便利です。

しかし、一般的な例では、余りお勧めしません。 理由は、Firebase のコストを考えるとコストに見合った利点は少ないと言えるからです。

Firebase のストレージの課金は 5GB までは無料で、超過分は USD $0.026/GB です。
Firestore の1 GiB までは無料、超過分は USD $0.108/GiB です。
単位が違っていますが、、1 GB = 0.93GiB でこの手の計算の場合、ほぼ同じと考えてもあまり大きな問題ではありません。ただし、Firebase のストレージと Firestore では同じ容量のデータを保存するのに必要なコストはデータベースの方が超過分のコストで約4倍、無料枠の容量は約 1/5 です。

当然ですが、記事の場合、メタデータのサイズは小さくて済みますが、本文がデータ容量の大部分を占める事になります。そう考えると、記事の量が増えていくことを考慮した場合、Firebase のストレージのファイルからデータを取得する方が有利な場合が多くなります。

(*)このコストには、実際の読み込みのためのコストは入っていません。

データのアクセスパターンを考えると、メタデータは、Firestore に、ファイルの中身は、Firebase のストレージから必要な場合にのみ取得すると言うのが一般的には有利な実装方法だと言えます。

アプリによって変わる実装
上で挙げた例はブログなどの記事を Markdown で書いて、それを表示するようなサービスを想定した場合です。ブログなどの場合は、長期間サイトを運営すると、記事の数が増えていくのが当然想定されます。

しかし、記事の数が限られているサイトを考えた場合は話が変わってきます。

例えば、記事の数が限られていて、想定される使用容量が無料枠に収まる場合ならば、全てを Firestore に保存して利用してしまった方が性能的には有利です。

また別の視点で考えると、ファイルの中身を Firestore の保存するかどうかには関係なく、 Markdown のファイルがあれば、データベースは再現が可能です。この場合、記事の原稿になる Markdown のファイルを保存しておけば、この部分に関するデータベースのバックアップをしなくても、復旧は可能です。 このように考えると、データのバックアップの考え方も変わってきます。

Firebase のストレージに保存したファイルを定期的にダウンロードして保存すれば、バックアップの処理はシンプルで済みます。

この様に、同じような機能を実装する場合でも、データの大きさや、求められる性能によって実装のやり方は変わってきます。開発するアプリに必要な要素をよく検討して、実装の方法を決めていくこともとても大切です。

まとめ
この記事では、Markdown で投稿した記事のメタデータを Firestore に保存する場合の利点について考えてみました。一般的な実装では、記事を Firebase のストレージにアップロードする際にメタデータを抜き出して、Firestore に保存して利用する形にした方が、Firebase のストレージのアクセスを減らすことが可能です。Firebase の課金は、使用容量、ダウンロードのデータ量、ダウンロードの回数で決まるので、これらを節約することは、Firebase の利用料金を低く抑える事になります。

この様に、Firebase などのサービスを利用する場合には、課金の仕組みと、実際のアプリケーションに必要な機能を考慮した上で、実装の詳細を決めるとサービスに最適な実装を見つけることができます。

今回は、概要を紹介しましたが、次回は、実際にメタデータを Firebase のデータベースの Firestore に保存した具体例について紹介します。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す