目次

初学者がReact-Nativeでアプリ作った話

以前3ヵ月ぐらいかけて個人でiOS英会話アプリを開発したのでその話を書き留めておこうと思います。初学者が技術選定する際の参考にでもなれば幸いです。

June 07, 20238 min read
React-Native
AWS
TypeScript
React

当時のプログラミング経験

  • 大学の講義(情報工) アルゴリズムなどのスクラッチ開発とか SQL の基礎構文とか 幅広く知ってはいましたがモノを作る開発で実際に使えるレベルの知識はほぼ無し
  • 個人の学習 React を1カ月ぐらい Udemy で動画を1本見て、簡単な Websocket を使ったチャットアプリを開発しました

何で作ったのか

当時は SIer で働いていてあまり開発に携われず、プライベートで鬱憤を晴らしていました。笑 なんなら不満がたまっていたので、転職のポートフォリオにでもなればいいな~とか考えてました。

技術選定

フロントエンド(React-Native)

結論、この技術選定は誤りでした。 とはいえ何も知識が無い状態で正しい技術選定なんてできるわけないので仕方ないのですが (今でもできるわけではない) React-Native を選んだ理由としては

  1. React が使える
  2. iOS アプリ開発ができる

上記になります。 当初 React を勉強していたのですが、何を作ろうか考えて英会話アプリを作ることにしました。 学習系のものは以下に入口までを近くするかが重要だと思い、「やっぱアプリじゃなきゃダメでしょ。」と安易に未経験からアプリ開発に挑戦しました。 とはいえ、今から Swift にチェンジするのも腰が重いな…と考えていたところ どうやら React でモバイルの開発もできるフレームワークがあるらしいじゃないですか。 調べたところ React-Native では

  • React の知識もついて Web、モバイル両方開発できるようになる
  • クロスプラットフォーム(Android,iOS 両方)で開発ができる

と良いところ取りで「React-Native 最強じゃん!!」と意気揚々と開発に踏み切りました。

バックエンド(AWS)

こちらは業務で少し触ったことがあり、一通り機能もあって名前も良く聞くので脳死で選定しました。実際悪くなかったです。

Cognito:ログイン機能

DynamoDB:ユーザ情報の管理(会話データなど)

APIGateWay, Lambda:各エンドポイントへのリクエストの処理

AWS Amplify:バックエンドの統合・コードでの管理

ただ Amplify では制限される機能があったり、GUI で作ったものとの統合とかいじると不整合を起こしたりと痒い所に手が届かない感じはありました。使ったことないですが友人談だと Firebase が一番連携もしやすいし使いやすいしで良いらしいので今度使ってみようかなーと考え中です。

開発

まず、Web 開発とモバイル開発は多分全然違うってことです。 モバイル機器本体に備わっている機能へのアクセスとか(ネイティブ機能)Xcode での諸々の設定とかデバッグとか、一つ一つは大したことなくても全体では結構違うように感じました。 何事においても言えますが、幅広いは万能ではありません。Web 開発やりたいなら Web 開発、モバイルならモバイルと割り切って開発しましょう。

また React-Native は初学者には結構厳しかったです。 コミュニティの元気がないのが1番の理由です。ライブラリが古く更新されていないものが多かったり、すでに新しいバージョンの機能とかにはキャッチアップできていないような印象を受けました。なのでバグにぶつかるたびにライブラリのソースコードまで読む羽目に…(大切なことですが)

TypeScript を使って React ベースで開発できるのはメリットだと思いますが、そういった学習コスト面で考えるのであれば選定すべきではないでしょう。上記のコミュニティの件が理由です。 パフォーマンスとか既存技術とかと比較して相性が良ければ採用、とかがあるべき姿なんですかね。詳しい方教えてください。

理想の選定

A. 分かりません。

ていうのが答えになってしまいますが、考えることが大切だったかなと思います。 ちゃんと自分の選択全部に理由付け出来ていればもう少し明確なビジョンを持って取り組めたかなと思います。

とにかくやってみよう!!の精神でやるのも大切ですが、エンジニアは考えるのが仕事です。 選定に大事な要素は何なのか → なんで React-Native なのかが言えれば問題なかったはずです。 今回で言えば、初学者であることから学習コストに最も比重を置いて考えるべきだったと思います。

まとめ

いろいろ書いてて何が言いたかったのか分からなくなってきましたが、コードを書く、なんてことは実現するための手段でしかないので、やりたいこととか目的をしっかりと定めて取り組むべきという当たり前のことを伝えたかったです。

See you later👋


0

Conversation