React NativeのGifted Chatを使って簡単なチャットアプリを作ってみた


はじめに

こんにちは。
私は入社2年目のクラウドソリューション開発部に所属している寺谷と申します。
今回は、React Nativeのライブラリ「Gifted Chat」を活用して、簡単なチャットアプリを実装する方法を紹介します。
さらに、Google Sheetsをデータベース代わりに使用し、Google Apps Script(GAS)を通じてデータの送受信も行っています。
ぜひ最後までご覧ください!

インストール

今回はタイトルで紹介した通り「react-native-gifted-chat」というライブラリを利用します。

react-native-gifted-chatとは?

react-native-gifted-chat は、React Nativeで簡単にチャットUIを実装できるライブラリです。ユーザーのメッセージ送受信、アバター表示、タイムスタンプの管理など、基本的なチャット機能を手軽に構築できるのが特徴です。このライブラリを使用することで、複雑なUIの実装をせずに、シンプルかつカスタマイズ可能なチャット機能をアプリに組み込むことができます。

インストール方法は下記になります。

また、下記のライブラリもGifted Chatで利用するためインストールしてください。

チャット画面の実装

次に、react-native-gifted-chatを使用してチャット画面を実装します。以下のコードを参考にしてください。

コードの説明

  •  useStateとuseCallbackの使用:messagesという状態変数でメッセージのリストを管理し、onSend関数で新しいメッセージを追加しています。
  •  GiftedChatコンポーネント:このコンポーネントがチャットUIを提供します。messagesのpropsにメッセージの配列を渡し、onSendプロップにメッセージ送信時の処理を指定しています。

 

上記コードをビルドすると下図のように簡単にチャットのUIが完成しました。

Google スプレッドシートとの連携

ライブラリを活用するだけでも簡単なチャットアプリが完成しました。
次にスプレッドシートの連携をしていきます。
詳細については、こちらのサイトを参考にしました。
上記サイトでは、React NativeアプリからGoogleスプレッドシートのデータを取得する方法が詳しく解説されています。
そのため、データの取得に関しては省略いたします。本記事では、チャットアプリで送信するメッセージをスプレッドシートに保存するための手順を紹介します。
まず、Googleスプレッドシートにデータを保存するために、Google Apps Script(GAS)を作成します。外部からPOSTリクエストを受け取り、送信されたデータをスプレッドシートに追加するGASについて、下記に示します。

主にsheet.appendRowでスプレッドシートにデータを書き込んでいます。
このスクリプトをGASエディタに貼り付け、デプロイしてウェブアプリとして公開することで、外部からのPOSTリクエストを受け取ることが可能になります。
また、スプレッドシート上では以下のようになります。

チャットアプリから送信されたメッセージをGoogleスプレッドシートに保存できるようになりました。
次に、React Nativeのチャットアプリから、上記のGASにメッセージデータをPOSTする処理を追加します。以下は、メッセージ送信時にGASのエンドポイントにデータを送信するコードに関して下記に示します。

これにより、ユーザーがメッセージを送信するたびに、その内容がGASを介してGoogleスプレッドシートに保存されます。この方法を活用することで、リアルタイムでメッセージを保存・管理できるチャットアプリを構築することが可能です。

Google スプレッドシートを利用したアプリ

最終的に、Googleスプレッドシート上に「user」と「chat」という2つのシートを作成しました。「user」シートは認証情報の管理に使用し、「chat」シートはメッセージの管理に使用しています。

各シートの構成

  • user: (id, username, password)
  • chat: (id, username, message, createdAt, userID)

これらのシートと連携するために、以下の3つのファイルを作成しました。

  1. SpreadsheetLoginScreen.tsx: ユーザーがログインするための画面
  2. ChatScreen.tsx: チャット画面
  3. config.ts: 設定情報を管理するファイル

SpreadsheetLoginScreen.tsx
このファイルでは、ユーザー名とパスワードを入力してログインする画面を実装しています。入力された情報をもとに、Googleスプレッドシートの「user」シートからユーザー情報を取得し、認証を行います。

ChatScreen.tsx
このファイルでは、ユーザー間のメッセージの送受信を行うチャット画面を実装しています。送信されたメッセージはGoogleスプレッドシートの「chat」シートに保存され、過去のメッセージも同シートから取得して表示します。

config.ts
アプリケーション内で使用する設定情報や定数を一元管理するためのファイルです。

ビルドをすると、下記のように動作します。

kenでログインすると、ken側のメッセージを右に寄せて表示されます。

他のユーザーでログインしても自分側のメッセージは右に寄せて表示してくれるように実装しました。

スプレッドシート上では、下図のように保存されています。

まとめ

いかがだったでしょうか?React Nativeのライブラリ「react-native-gifted-chat」を活用し、Googleスプレッドシートと連携することで、簡単にチャットアプリを作成することができました。興味のある方は、是非試してみてください。
エコモットでは、一緒にモノづくりをしていく仲間を募集中です!弊社に少しでも興味がある方、ぜひ下記の採用ページをご覧ください!