新しく作りたいアプリについて
先日、タイピングアプリ をリリースしました。
こちらはこちらでまだ改善の余地ありですが、新しくアプリ作っていきたいと思います!
うちの子どもたちが、昨年から家庭内で会社を立ち上げまして、親を相手に商売を始めました( ´∀` )
お手伝いチケットを紙で手作りして、何枚かつづりで売ってくれます。
例えば、「マッサージ10分券を10枚つづりで〇円」、「夕食作り代行券を5枚つづりで〇円」、のような感じです。
親としてはとても助かってます✨
子どもとしても、前金でお金を受け取れるのでモチベーションが維持できるみたいです。
趣味でほしいものがあったら、あのお手伝いを〇回すれば買える・・のように逆算できるので良いですね。
ただ、チケットを作ったり授受したりするのが徐々に(お互いに)面倒くさくなってきたので、電子化したいという娘からの要望でした。
できれば通知機能とかを備えたスマホアプリ化したいのですが、一旦はMVPを備えたWebアプリとして実装してみたいと思います。
(スマホ用アプリは、テスト的に作ったことはありますが、実際にストアにリリースしたことはありません。おいおいやっていきたいです!)
データベースを選ぶ
前回のタイピングアプリではデータベースを使用しませんでした。
今回作るアプリではデータベースが必要になります。
一旦は家庭内で使うだけだけど、よさそうなら一般公開できると嬉しい。
個人開発で無料から始められるデータベースサービスをいくつかピックアップしてみました。
Firestore(FirebaseのDB)
- 以前使ったことがある。・・が、NoSQLのツボをいまいちつかめなかった記憶がある。
Supabase
- Firestoreの代替サービスという位置づけらしい。最近はこちらの方が人気がある模様
- RDBが使えるので違和感なく使えそう
Neon
- PlanetScale(以前無料で使えてた)の代替として使っている記事がいくつかあった
Cloudflare D1(CloudflareのDB)
- SQLiteベースのデータベース。
- SQLiteとは、単一のファイルにどんどんデータを書き込んでいく方式のDB。簡易利用向け
Cloudflare D1を使ってみる
アプリをCloudFlare Pagesにデプロイしようと思っているので、まずは相性のよさそうなCloudflare D1を使ってみようと思います。
SQLiteは以前軽く学習目的で触ったことがあって、その時はあまり意識してなったのですが、実際にアプリに組み込もうと思うと結構制約が出てきそうです。
大規模な集計ができなかったり、同時並行で読み書きができなかったり、あたりでしょうか。
実際に無料枠で使ってみて、支障があるなら別のサービスに切り替えるようにしてみます。
課金体系と無料枠について
D1の使用料金は、読み書きの行数(レコード数)と、保存されているデータの容量で決まるようです。
また、制限を超えるとクエリが実行できなくなって、課金すれば制限を解除できるとのこと。
途中で勝手に課金が始まる訳ではないのは良いですね。
無料枠は以下の通り。
- 読み取り行数:500万/日
- 書き込み行数:100,000/日
- ストレージ:5GB
読み取り行数は、スキャンが走ったレコードの件数がカウントされる。1000件のレコードが入ったテーブルをフルスキャンすると1000とカウントされ、結合などでスキャンが走るとその件数分カウントされる。
適切にインデックスをはると節約できるようですが、インデックス更新は書き込み件数にカウントされる、と。
最初は慣れるまで時間かかるかな。実際にテーブルいくつか作ってみただけで何回かクエリ発行されてました。
実際に作ってみる
実際にDBとテーブルを作ってみました。
Cloudflareダッシュボード、「ストレージとデータベース」→「D1 SQLデータベース」→「作成」でデータベースを作成。
名前を入れるだけで作れました。
次にDBの中にテーブルを作成します。
列の型(タイプ)では、以下の4つしか選べませんでした!
- text(文字列)
- integer(整数)
- real(小数)
- blob(ファイル類)
日付とか、真偽値とか、もろもろtextに突っ込む形のようです。SQLiteってこんな感じなのね~。
これをPagesとかWorkersとかで使うとかなりシームレスに使えるのかな?
大きな支障がない限りはこのまま進めてみます。
次回へ続く。