2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
React Nativeで家計簿アプリを作って得たもの(全1記事)
リンクをコピー
記事をブックマーク
西仲幸太氏:僕からは『React Nativeで家計簿アプリを作って得たもの』について共有します。
まず自己紹介を。西仲幸太と言います。担当プロダクトはメール配信管理プラットフォームというバリバリのバックエンドです。好きな言語はJavaScriptで、今回の話にも出てくるReact.jsやNode.jsをTypeScriptで書くのにハマっています。
今日の流れですが、はじめにデモを含めたアプリの紹介から。そのあと技術を紹介しようと思っています。実はちょっと前にインターナルで紹介したこともあって。そのときはReact Navigationを説明しました。なので、今回はReduxとFirebaseを中心に説明しようと思っています。
僕の話を聞いて、こういう技術を使ったらこんな感じのものが作れるんだなぁっていう感覚をもってもらえればうれしいです。
作成中の家計簿アプリを紹介します。なんで、今さら家計簿アプリなんだと思う方もいるかもしれません。理由としては、家族で家計費をつける際に、僕が複雑な計算をいつもしていました。方法も既存の計算では難しくて、Excelとかでやっていたんです。月末に入力しているんですが、それが面倒くさくて。家族みんながアプリで入力できるようにしてほしいということだったので、作り始めました。
簡単にデモを実践します。今実際に動かしているアプリよりも古い画面ですが、今回説明する内容が入っているので、これで説明します。まず、メールアドレスとパスワードを入れて認証。これはFirebaseの基本的な標準機能である認証部分になります。
実際にアクセスして、個人がどのくらいお金を使ったのかを計算できるようになっています。個人ごとの一覧が出るので、その月の何に使ったのかが見れます。
先ほどちょっと複雑な計算と説明したのが、日付や使った店舗を入れるところです。負担額というところを入力して、例えば1200円の負担額は個人用200円で、家計簿から徴収済みとチェックを付けています。
これはお店で1200円分の買い物をしました。自分だけに利用するものとして200円、家族の家計費から自分用のもので200円を使うことになります。なので家計費としては1000円使いました。ただ家族で共通の口座をもっていて、そこからお金は回収している証として、家計費から徴収済みというチェックを付けています。
これを付けることで、月末の計算時に徴収する必要がないお金であることをチェックできるようにしています。こんな家計簿を作りたいと思いました。
次は技術の紹介です。アプリはかなりシンプルな構成です。ユーザーからReact Nativeを使ったアプリを通して、データはFirebaseにストアしています。
使っている技術は、ReactやReact Nativeのデバッガー。TypeScriptとExpo、今回ちょっとだけ触れるReact Navigation、ReduxとFirebaseもあります。
今回はFirebaseとReduxを中心に説明します。
はじめにReduxから。Reactに触れた方はだいたいReduxそのものにも触れているかなと思います。ReduxもHooksを2019年6月ぐらいにリリースしているので、そこの書き方をちょっとだけ今日は紹介しようかなと思っています。
これが先ほどの一覧画面で、毎月1ヶ月に対してどのくらいの金額を払っているかのリストを出しているロジックです。赤線引いているところだけを見てください。赤線の箇所はReduxのHooksのロジックになっています。
useDispatchでもってきてstateし、今のユーザーが誰なのかをuseSelectorで引っ張ってくる。最後にsetCurrentPaymentsで支払いの情報をReduxのstateに保存するというのをやっています。
今これは3行で書けているんですが、Hooksを使う前はどうだったのかっていうと、こちらになります。ちょっとHooksのところはコメントアウトしていますが。
この2行の表現をするために、右側ではmapStateToPropsとmapDisoatchToPropsの2つをReduxのデータストアにコネクトするのを全部書いています。そこから引っ張ってきた情報をコンポーネントの引数に渡して、初めて使える感じでした。
なのでHooksを使えば、この右側のリストが丸々不要になる状態と、この2つの引数がなくていけます。なので、記述量がかなり減ることがメリットだと思います。
次はReact Navigationについてです。これはかなり割愛しますが、React Navigationのバージョン5が、実は2ヶ月前にリリースされました。これでけっこう書き方が変わっていて。内容自体は、興味があれば調べてもらえればと思います。
自分がちょっと使ってみたところ、書き方がタグで囲むような形式になっているので、可読性がかなり上がっていると感じました。便利だと思うので、興味のある方は調べてみてください。
次にメインのFirebaseについてです。今回のアプリはFirestoreを使っています。まだFirestoreを触ったことがない方もいると思うので、まずは簡単な説明を。
FirestoreとRDBMS、リレーショナルデータベース、普通のOracleとの違いを見ていきます。Firestoreはドキュメント指向のNoSQLと言われているものです。エンドユーザー(クライアント)から直接Firebaseにアクセスできます。
基本的なOracleとかのデータベースを使った場合。実装する際は、Reactとかで作ったクライアントサイドから、NodeやJavaで作ってサーバーサイドにアクセスする。そこからサーバーサイド側でデータベースとやりとりします。いい感じに加工したのをクライアントに返して画面に描画する、というのが基本的な流れかと思うんですが。
そこのサーバーサイドのところを飛ばして、Firestoreに直接アクセスして記述できます。バックエンドで考えると、バックエンド側だとユーザーの認証をどうするか、データのバリデーションはどんな感じにするかを考える必要があると思います。メリットとしては、はじめの段階で節約できることではないでしょうか。
Firestoreの特徴は、先ほど説明したとおりクライアントから直接Firestoreにアクセスできることです。これまでサーバーサイドで受け取った場合は、サーバーサイド側で加工していい感じにクライアントに返して表示する、これが基本的な書き方だったと思うんですが。
DBから直接データをクライアント側に取るので、取った時点でできるだけいい感じの形式になっているのが望ましいです。なのでFirestoreを実装するときのポイントは、RDBとデータのモデリングの形式がぜんぜん違うところを、取ってきた時点でいい感じに表示できるようにするかが、今後の課題ではないでしょうか。
Firestoreの3つの機能を紹介します。Firestoreのいいところとしてまず1個目に定義できるのが、セキュリティルールです。普段はサーバーサイドでバリデーションとかをゴチャゴチャやると思いますが、Firestore側でセキュリティのルールを設定できて、そこでバリデーションがこういうふうに働くという設定を組めるのが特徴の1つです。
2つ目がリアルタイムリスナーで、Reactとかなり親和性が高いシステムだなぁと思っています。機能としては、最新の状態をアプリケーションと同期可能です。
通常なら、僕らがクライアント側で最新情報があるかをサーバーサイドにアクセスして確認すると思いますが、リアルタイムリスナーなら、Firebaseのデータベースが更新されていたら、そこからクライアントに通知して、リアルタイムにデータを同期してくれます。これがいい機能の1つだと思っています。
3つ目がオフライン対応で、名前のとおりなんですが、オフライン状態でも読み取りができ、DBがつながらない場合でもキャッシュからデータをもってこれます。書き込んだときはつながらなかったとしても、キューに蓄積することも可能です。
FirestoreはRDBと考え方が違うので、学習コストは低くないですが、めずらしい機能もあるので、ぜひ使ってみてください。
まとめとしては、React NativeもReactです。React NativeはReactのよさや仮想DOM、単一のデータフロー。他にもコンポーネント指向になっている部分やReact Nativeと、書いてあるとおりなんですが、そのままよさは全部もっています。そこが、React Nativeそのもののよさではないでしょうか。
今回使ったReact NativeとExpo、Firestoreを使うと、それなりに早くアプリの開発が進められます。みなさんもぜひ試してみてください。発表は以上です。
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05