新しく作りたいアプリについて

先日、タイピングアプリ をリリースしました。

こちらはこちらでまだ改善の余地ありですが、新しくアプリ作っていきたいと思います!

うちの子どもたちが、昨年から家庭内で会社を立ち上げまして、親を相手に商売を始めました( ´∀` )

お手伝いチケットを紙で手作りして、何枚かつづりで売ってくれます。

例えば、「マッサージ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とかで使うとかなりシームレスに使えるのかな?

大きな支障がない限りはこのまま進めてみます。

次回へ続く。