🎁

約束・依頼管理アプリ「nedalii」を公開しました。技術構成などを紹介します。

2024/03/13に公開

アプリについて

アプリはこちらからダウンロードできます。(現在iOSのみです!)
https://apps.apple.com/us/app/nedalii/id6478814191

どういったアプリなのか

一言で言うと、家族・友達向けの簡単なワークフローアプリです。
家族にやってもらいたいこと、欲しいものなどを気軽に申請して承認をもらうアプリになります。
nedalii では依頼やお願いのことを総称して おねだり と呼んでいます。

人間は忘れる生き物なので、口頭ベースでの おねだり はどうしても忘れてしまう場合があります。
ついつい忘れてしまいがちな口頭での約束やお願いごとを、このアプリを通して行うことで漏れなく管理することを目的としています。

そもそも何でこのアプリを開発したのか

自分自身、口頭での約束をついつい忘れてしまったり、言った言わない問題が発生したりすることがありました。
世の中そういった同じ問題を抱えている人は少なからず居ると思い、このアプリを通してそういった課題を少しでも解決できるのではと考えました。
またワークフローの仕組みは企業が使用するイメージが強いですが、私生活でもカジュアルに使用できるワークフローアプリがあれば便利だという発想からこのアプリの開発を始めました。

機能一覧

機能 内容
ユーザー追加 QRコードを読み取ってユーザーを追加できます。
つながりリクエスト ユーザー追加申請の一覧が見れます。追加するか拒否するか選べます。
つながり一覧 追加したユーザーの一覧が見れます。つながり解除を行えます。
つながり一覧 追加したユーザーの一覧が見れます
おねだり作成 ユーザーに対してして欲しいことを依頼できます。申請先ユーザーを選択します。
おねだり一覧 自身が作成したおねだり、相手から受けたおねだりの一覧が見れます。
おねだり承認 相手から受けたおねだりに対して承認却下 ができます。
おねだり実行・達成 自身が申請したおねだりが達成未達成 かを決定できます。

アプリのユースケース

以下のようなケースで使用していただくことができます。

  • 子どもがお小遣いを上げてほしい場合、
  • 子どもに対してお手伝いを頼むとき、
  • TODO管理として使用(買い物で買って欲しいものを申請しておく等)、
  • 友達と何か貸し借りをしたとき、など

補足: 他のユーザーとの連携は現在QRコードスキャンのみ対応しております


ここからは技術に関する話です。

技術構成

インフラ: GoogleCloud(GCP), Firebase
フロントエンド-Mobile: Flutter
バックエンド-API: DjangoRestFramework

全体のアーキテクチャは以下のようになっています。

インフラ

CloudRun

https://cloud.google.com/run/?hl=ja
バックエンドAPIをデプロイしています。
Cloud Load Balancing でリクエストをCloudRunへルーティングしています。

CloudSQL

https://cloud.google.com/sql?hl=ja

DBは料金の面から他のDBにすることも考えましたが、CloudRunとの親和性が高くCloudSQLを採用しております。
DBMSはPostgreSQLを使用しています。

その他

CloudBuildでGithubへのpushをトリガーとして自動デプロイを行なっています。
ビルド時にPub/Subで受け取れるイベントをトリガーとしてCloudFunctionを動かし、Slackにデプロイの状況を通知する仕組みにしています。

この辺りも気になる人が多そうであれば別の記事にしたいと思います。

モバイル

Flutter

https://flutter.dev/
AndroidとiOSの両プラットフォームでのリリースを考えていたため、マルチプラットフォームに対応しているFlutterを採用しました。

Firebase

https://firebase.google.com/?hl=ja

  • Remote Config(メンテナンスモード, 強制アップデート)
  • Analytics
  • Performance
  • Crashlytics

主に上記の機能を使用しています。

LINEログイン

https://developers.line.biz/ja/services/line-login/

Appleログインに加えて、ユーザー数の多いLINEのログイン機能も実装しました。

今回FirebaseAuthなどは採用せず、独自バックエンドでログイン機能を実装しているため、この辺りも記事にしたいと考えています。(これも需要ありそうなら、、、)

余談ですが、当初ログイン経路はLINEログイン機能のみでした。
ただリリース直前になったところで以下のガイドラインを発見し、急遽Appleログイン機能も実装しました。。。
https://developer.apple.com/jp/sign-in-with-apple/get-started/

ユーザーのプライマリアカウントをアプリで設定したり認証したりする際にサードパーティのログインサービスやソーシャルログインサービスを使用するアプリでは、同等のオプションの1つとしてAppleでサインインを組み込む必要があります。

QRスキャナー

Flutterのパッケージを使用して、ユーザーのQRコード読み取り機能を実装しています。

バックエンド

DRF(DjangoRestFramework)

https://www.django-rest-framework.org/

APIは全てDRFで実装しています。選定理由は単純に業務経験があったからです。
SerializerがAPIと相性よくAPIフレームワークとして非常におすすめです。

バックエンドはUnitテストを中心にしっかりめにテストコードを書いています。(カバレッジは今のところ95%以上をキープできています。)

Androidはリリースしないのか?

Androidは現在一部機能を残してほぼ開発済みです。
ただクローズドテストの問題によりリリースまではまだ先が長そうです。。。
https://support.google.com/googleplay/android-developer/answer/14151465?hl=ja

20 人以上のテスターがオプトインしてクローズド テストを実施する必要があります。また、それらのテスターは 14 日以上連続でオプトインする必要があります。アプリの設定が完了したら、クローズド テストを開始できます。

今はこれをどう打開しようかと模索中です。
Android実装が完了次第、テストに参加いただける方を募集中です。(相当厳しそう)

お問い合わせ

このアプリについてお問合せがあれば、下記フォームからお願いします🙇‍♂️
https://forms.gle/T9daQJxemQsDR5Zq7

今後の改善点

ミニマムスタートでリリースしためUI改善や実装したい機能がまだまだたくさんあります。
本業もあるので体を壊さない程度にこれからも地道にアップデートしていきたいと思います。(とりあえずAndroidのリリースかな)

Discussion