LoginSignup
16
9

More than 3 years have passed since last update.

React Nativeで作ったアプリをリリースしてから1年経ったので振り返ってみる

Posted at

Frame 1.png

React Native製、予定作成アプリ「ペペロミア」を公開しました

以前記事にしたペペロミアが公開してから1年経ったので振り返りも兼ねて記事にまとめてみました。
個人プロダクトのアーキテクトとかの参考になれば良いかなと思います。

主に使用している技術

GitHub

前はモノレポで1つのRepositoryで全Sサービス管理していたが、各サービスごとにわけるようにしたので以下の通りです。

リリースノート

今までの主な更新リリース内容は、こちらで確認できます。

ペペロミアとは

プロジェクトの概要は、こちらを参照

アプリ

スクリーンショット 2020-07-27 23.09.57.png

■ Apple Store
https://itunes.apple.com/us/app/%E3%83%9A%E3%83%9A%E3%83%AD%E3%83%9F%E3%82%A2/id1460583871?l=ja#?platform=iphone

■ Google Play
https://play.google.com/store/apps/details?id=com.wheatandcat.peperomia

概要

スケジュール管理アプリ。
アカウント登録すると、Push通知、Web版、シェア機能など利用できるようになります。

使用技術 / ツール

デザイン設計

Figamaを使用しています。
https://www.figma.com/

Figmaについては以下で公開しています。
ペペロミア Figma

Figmaに関しては前に記事にしているので以下を参照
エンジニアでも出来る!Figmaを使って自作アプリをリニューアル

アプリ作成

アプリはExpoを使用しています。
https://expo.io/

データベース

アカウント認証前は、SQLiteを使用、
アカウント認証後はWeb版でもデータ同期ができるようにFirestoreを使用する実装になっています。

認証

認証はFirebase Authenticationを使用しています。
GoogleログインSign in with Appleで登録できるようになっています。

主なリリース内容

Expo SDKのバージョンアップ

リリース当初がExpo SDK v32でしたが、現在はExpo SDK v38で実装しています。

各SDKのバージョンアップのPull Requestがこちら

主なバージョンアップ変更は以下の通り

  • React Native v0.61以降になりFast refreshが導入されたので開発時に高速でリフレッシュできる
  • 元々expo内部に入っていたモジュールが別モジュールに分割
  • webサポートされた(けど、他ライブラリの影響でペペロミアでは、ビルドでコケるので使えていない :sweat:

ダークモードの実装

以下で解説しているのが細かい実装は省略しますが、
React Native製の公開しているアプリにダークモードを実装してみた

現状は、端末の設定を見て通常モード、ダークモードの切り替えを行う実装になっています。
ホーム画面の比較をすると、こんな感じです。
darkmode.png

カレンダー機能の実装

calendar001.png

  • スケジュールに日付入力をできるようにしてカレンダーUIで表示するように変更
  • 実装はreact-native-calendarsを使用

Sign in with Appleの実装

  • Sign in with Appleを実装
  • Apple storeの規約でサードパーティのログインを形式の場合はSign in with Appleの実装は必須になったのでFirebase Authenticationに追加
  • ExpoでのSign in with Appleは以下の通りに実

Expo Push通知の実装

Backend

概要

言語はGo言語で実装
主にアカウント認証後のデータのやり取りのAPIを実装しています。

使用技術 / ツール

フレームワーク

Ginを利用して実装
https://github.com/gin-gonic/gin

GraphQLはgqlgenで実装
https://github.com/99designs/gqlgen

デプロイ先

GCPのGAEにデプロイしています。

API設計書

RESTful APIのドキュメントはSwaggerHubで実装しています。

以下で、ドキュメントを公開しています。
https://app.swaggerhub.com/apis-docs/wheatandcat/peperomia/1.0.0

主なリリース内容

gomockでのHTTP Requestのテストの実装

Goでテストを書く際にFirestoreにアクセスさせたくなかったのでgomockでメソッドをモック化してテストコードを作成しました。
https://github.com/golang/mock

実装の詳しい内容は以下の記事参照
GoMockを使ってHTTP Requestのテストを書いてみる

ExpoでPush通知を実装

ExpoのPush通知のSDKがあるので、こちらを使用して実装
https://github.com/oliveroneill/exponent-server-sdk-golang

カレンダーに合わせてPush通知を送るようにしており、GAEのcron.yamlのジョブのスケジューリングで定期実行しています。

実装の詳しい内容は以下の記事参照
ExpoでPush通知を実装してみた

gqlgenの実装

gqlgenを実装

gqlgenのベースになっているGraphQL Schemaファイルをgraphql-codegenに渡すことでTypeScriptのtypeファイルを自動生成するようにしています。

実装の詳しい内容は以下の記事参照
gqlgenとgraphql-codegenでGraphQLのtypeを自動生成してフロントエンドのコード作成する

Web版

https://github.com/wheatandcat/PeperomiaWeb
web001.png

■ URL
https://app.peperomia.info/login
※アプリでアカウント作成していないと利用できません

概要

Nuxt.js で実装しています。

使用技術 / ツール

UIライブラリ

Vuetifyで実装
https://vuetifyjs.com/ja

デプロイ先

こちらもGCPのGAEにデプロイしています。

主なリリース内容

Firebase Authenticationでサードパーティクッキーの対応

Safariでサードパーティクッキーをデフォルトでブロックされるようになったので、Firebase Authenticationを素で組み込むとエラーになるようになっていたので、そちらの対応

実装の詳しい内容は以下の記事参照
Firebase Authenticationの「This browser is not supported or 3rd party cookies and data may be disabled. 」の解決方法

Composition API + TypeScriptの導入

Vue 3.0で導入されるComposition APIを導入
合わせてComposition APIと相性の良いTypeScriptも導入しました。

導入前に以下の3パターンの実装方式を検証

  • パターン①. Composition API + TSXファイル + CSS Modules
  • パターン②. Composition API + Vueファイル + <script lang="tsx">
  • パターン③. Composition API + Vueファイル + <script lang="ts">

検証の結果、1番シンプルなパターン③で実装しました。

実装 + 検証の詳しい内容は以下の記事参照
NuxtでComposition API とTSとTSX + CSS Modulesの組み合わせについて考えてみる

@nuxt/http導入 + スケジュール修正機能の実装

ペペロミアのWeb版でのAPIアクセスは@nuxt/httpで実装
https://github.com/nuxt/http

Web側でスケジュール内容の編集の際は@nuxt/httpでAPIにアクセスしてデータ変更を行っている

ヘルプサイト

https://github.com/wheatandcat/PeperomiaHelp
スクリーンショット 2020-07-28 22.58.52.png

■ URL
https://amazing-hawking-a280c3.netlify.app/

概要

GatsbyJSで実装
GatsbyJSはMDXをサポートしているのヘルプ記事の中身はMDXで記載しています。

使用技術 / ツール

デプロイ先

Netlifyにデプロイしています。

GatsbyJSでのNetlifyデプロイ方法は以下を参照
https://www.gatsbyjs.org/docs/deploying-to-netlify/

主なリリース内容

GatsbyJS + MDXでヘルプサイトを作成

なるべく手をかからず、zendeskやIntercomみたいにお金のかからない方式でヘルプサイトを作りたかったので作成。

実装の詳しい内容は以下の記事参照
Gatsby.js + mdxでヘルプサイトを作ってみる

ちなみに今だとGatsby CloudでMDXも使えるみたいなので、こちらの選択式もありかなと思います
https://www.gatsbyjs.com/

LPページ

https://github.com/wheatandcat/PeperomiaLandingPage
スクリーンショット 2020-07-28 23.25.26.png

■ URL
https://peperomia.app/

概要

Reactで実装しています

使用技術 / ツール

デプロイ先

Netlifyにデプロイしています。

主なリリース内容

LPサイトにアニメーションを追加

Jul-22-2020 01-20-20

react-inview-monitorを使ってスクロールに入ったタイミングアニメーションするように修正

実装の詳しい内容は以下の記事参照
Reactで作成したLPサイトにアニメーションを追加してみた

RSS経由からリリースノートを表示

スクリーンショット 2020-07-22 19 12 00

リリースノートを自動生成するスクリプトを作成してブログに投稿
タグを付けてRSS経由で取得して、LPページに表示させています。

リリースノートの自動生成については以下の記事参照
リリースノートを自動生成するスクリプトを書いてみた

今年〜来年への開発予定

Firestoreの設計見直し

実装時はFirestoreへの理解が浅かったのもあり、RDBっぽい設計になっているので、見直し & 新設計にマイグレーション予定
CollectionGroupを使えば、ある程度柔軟に設計できるかな模索中。

whereのinに取得制限があったりもするのでFirestoreは設計は、すごく重要だなと実感
https://firebase.google.com/docs/firestore/query-data/queries#limitations

APIのrequestの型を自動生成してフロントエンドで使用

現状GraphQLに関してはgqlgenとgraphql-codegenの組み合わせで型を自動生成している。
だが、RESTful APIの方は特にやっていないので、こちらを型安全の状態にしたい。

以下のどちらかのパターンで実装しようかなと検討中

案1. swagger-to-tsを使って型を自動生成

swagger-to-tsでswaggerからtypeファイルを生成できるので、こちらを使用する
https://github.com/manifoldco/swagger-to-ts

ただ、これだとswaggerの方がミスっていた時に検知できないので、さらにswaggerのテストツールのdreddを実装する
https://github.com/apiaryio/dredd

案2. 現状のRESTful APIをGraphQLのmutationに移行する

mutationに移行するれば、gqlgenとgraphql-codegenの組み合わせで型を自動生成できるので、こちらを使用する
こちらの方がシンプルになりそうだけど、移行するのに時間がかかりそうな予感。

最後に

リリースノートを自動生成するようにしたのを、きっかけに振り返りの記事を書いて見ました。
振り返ると1年間で結構開発していたんだなーと思いました。また、なにかの区切りに振り返りの記事を書こうと思います :bow:

16
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9