初めてReact NativeでiOSアプリを開発した時に参考にした記事・サイトたち

JavaScript（フレームワーク未使用）業務経験1年・React/React Nativeもスマホアプリ開発のいろはも分からなかった私が、平日夜・休日の時間を使って、**約２ヶ月(80時間)かけてReact NativeでiOSアプリを開発**したときの流れや参考になった記事・動画を紹介します！

自分自身、何度も壁に打ち当たり、心が折れそうだったので、少しでも役に立てればと思います！
あと日本語のドキュメントが少ないため、英語のサイトを見ることも多くなりますが、英語の良い勉強の機会だと思って、めげずに頑張りましょう！！

作った外国語用単語帳アプリ"*lankiage*"は[こちら](https://apps.apple.com/jp/app/lankiage/id1556840677)(App Store)
ソースコードは[こちら](https://github.com/Hiroyuki1995/lankiage)(Git Hub)

#そもそもReact/React Nativeとは？
**React**は、Facebook社が開発した、WebアプリケーションのUIを構築するためのライブラリです。
JavaScript三大フレームワーク・ライブラリとして、他にVue.jsやAngular.jsがありますが、世界的にReactが最も利用されているため、フロントエンドとしては最も身につけておくべきスキルだと思います。

- [React公式サイト](https://ja.reactjs.org/)
- JavaScript経験ありReact初心者向け動画  
[【とらゼミ】トラハックのエンジニア学習講座　日本一わかりやすいReact入門](https://www.youtube.com/playlist?list=PLX8Rsrpnn3IWKz6H5ZEPWBY8AKWwb9qq7)

一方、**React Native**は、JavaSciptでiOSアプリ・Androidアプリを、**同時に**、かつ**Reactライクに**開発できるフレームワークで、いわゆる*クロスプラットフォームフレームワーク*の１つです。
従来は、OSに合わせて言語を使い分ける必要がありましたが、これによってコード１つで両方のアプリが開発できるわけです。
現在は、Flutterというフレームワークの方が注目されているという記事もありますが、DartというGoogleの独自言語ということもあり、React NativeはJavaScirpt経験者がさらっとスマホアプリに手を出すにはもってこいのライブラリだと思います。
※React Native勉強中にFlutterの勢いを知ったのはちょっとショックでした（汗）

- [React Native公式サイト(英語)](https://reactnative.dev/docs/getting-started)
- [クロスプラットフォームフレームワーク比較 2021](https://qiita.com/nskydiving/items/c13c949cc17c6f980a67)

#1. 開発環境構築編
###1-1. 開発プロジェクトのインストール
プロジェクトのインストールは[こちら](https://qiita.com/nskydiving/items/41e446ef5c821359ab79)を参考にしました。
React Nativeの開発環境は主に２つあり、React Native CLIとExpo CLIがありますが、Expoは独自のライブラリしか使えないため、React Native CLIで開発することをオススメします。私もReact Native CLIを使いました。

デバイスごとにシミュレーションをしたい場合は、[こちら](https://stackoverflow.com/questions/37328942/react-native-change-default-ios-simulator-device)のコマンドを打つことでできます。

###1-2. Xcode
XcodeはAppleのアプリを作るには必須のツールですが、React Nativeで開発するにあたってはそれほどは使いませんが、開発中に時々使いますので、事前にインストールしておきましょう。
インスタントはApp Store経由でも可能ですが、SSDに十分な容量がないと、インストールができません。私は20GBほど空きがあっても、インストールできませんでした。。。
そこで代わりに、[Apple Developer]
(https://developer.apple.com/download/more/)からインストールをしました。
ただここでも15GB程度は空きがないとインストールできません。

1-3. 実機テスト
シミュレータを用いたアプリのテストでは、CLI(react-native run-ios)で可能ですが、実機テストをしたい場合は、Xcodeを使う必要があります。やり方は[こちら]
(https://i-app-tec.com/ios/device-test.html)を参考にしてください。

#2. 実装編
今回、実際に使用したライブラリについてご紹介します。
###2-1. Realm（モバイルデータベース）
世はクラウドブームですが、今回は全てデータをモバイル（ローカル）で保存することにしました。（バックエンドも開発するとなると、かなりの負荷があるので、やめました。）
その際に使用したライブラリがこのRealmです。
他にCoreDataやSQLiteというのがあるようですが、realmが話題のようなので、これを使いました。
※React Native Expoを使っている方は、Realmが利用できないので、ご注意ください。

- [Realmの基本的な使い方：「React NativeでRealmを使用する」](https://www.aruse.net/entry/2020/03/22/013310)
- [公式サイト](https://docs.mongodb.com/realm-legacy/docs/javascript/latest/)

###2-2. react-native-vector-icons（アイコン）
豊富なアイコンが使える便利なライブラリですが、かなりビルドに苦労しました。。。

- [GitHub](https://github.com/oblador/react-native-vector-icons)
- [利用可能なアイコン一覧](https://oblador.github.io/react-native-vector-icons/)

特にXcodeの設定を変更する[このステップ](https://github.com/oblador/react-native-vector-icons#option-manually)を見落としがちなので、丁寧にやっていきましょう！
###2-3. React Navigation（画面遷移）
画面間の遷移を扱うライブラリです。
似たライブラリとして[React Native Navigation](https://wix.github.io/react-native-navigation/docs/installing)もありますが、設定ファイルである```AppDelegate.m```をいじる必要があった上に、使い勝手が良くないと感じたので、今回はReact Navigationを使うことにしました。

- [react-navigation公式サイト](https://reactnavigation.org/docs/getting-started)

###2-4. [react-native-picker-select](https://www.npmjs.com/package/react-native-picker-select)（セレクトボックス）
React Nativeのセレクトボックスライブラリは中々少ないようで、今回はこれを使いました。ちょっと微妙ですが。。

###2-5. その他
その他、使用頻度は高くないかもしれませんが、今回使用したライブラリはこちらです。

- Google翻訳（[translate-google-api](https://www.npmjs.com/package/translate-google-api)）
- 多言語音声読み上げ（[react-native-tts](https://github.com/ak1394/react-native-tts)）
- スライド式のページネーション（[react-native-slider](https://github.com/callstack/react-native-slider)）
- 裏表のあるカードのアニメーション（[react-native-card-flip](https://github.com/lhandel/react-native-card-flip)）


#3. アプリ申請編
基本的には、[[2020年版]AppleにiOSアプリを申請する方法](https://qiita.com/kaneko77/items/ce918317e94c9f36441f)を参考に進めましたが、
まず第一にやるべきは、[Apple Developer Program](https://developer.apple.com/jp/programs/)への登録です。
（年間税込¥12,980と高額ですが、目を瞑りましょう。。）
進めていく中で一番厄介だったのが、スクリーンショット作成だったので、それについては[こちら](https://qiita.com/Hiroyuki1995/items/1b40a23b44936beff8a0)の記事で無料で作成する方法を説明しています。以下のようなスクリーンショットが無料で作成できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204474/62fd1ae5-77e2-361f-3a8a-68650d5bffd7.png" width="500">


#4. 一通り開発をやってみて...
一番の感想は、**ビルドのエラーが多すぎ**て辛いということ（泣）
こればかりは初心者のうちは仕方ないですかね、、
ただ徐々に耐性がついてきたので、ある意味エンジニアとしてスキルアップしたと思います。笑

あとは、進めていく中でReactのコーディングのトレンドを知っていき、自分がいかにレガシーな書き方をしていたかということに気づかされました、、
途中で引き返しにくかったので、諦めましたが、最低限以下くらいは知っておいた方が良いと思います。
・TypeScript > JavaScript
・関数コンポーネント > クラスコンポーネント
・Stateの管理はReduxでやるべし
記事を調べる場合は、できるだけ新しいものに触れることをオススメします。

【参考記事】

- [保守性や堅牢性を高める！モダンフロントエンド開発に必要な周辺技術をまとめてみました](https://qiita.com/wildmouse/items/8c27f1de75dfb7996c42)
- [レガシー React Project で実践してきたこと](https://qiita.com/toshipon/items/2fa9770d166da1746e39)

#5. 実際に開発したアプリ
coming soon...