- 週間ランキング
本記事は、TurnToTechのAditya Narayan氏によってに投稿されました。
AndroidとiOSの両方のモバイルアプリを構築したいとき、各OSのネイティブ言語(Androidの場合はJava、iOSの場合はSwift / Objective-C)を学ぶべきでしょうか?それとも、ハイブリッドフレームワークのReact Nativeを使用するためにJavaScriptを学ぶべきでしょうか?
あなたがすでに持っているコーディングスキル、アプリを開発する目的、そしてプロジェクトの長寿など、考慮に入れるべきことは多くあります。
この記事では、ニューヨークのTurnToTechのCEOでありモバイルブートキャンプを主催するAditya Narayan氏が、「React Nativeとネイティブアプリでの開発の違い」について掘り下げます。
Reactは最初、JavaScriptを使用してWebのインターフェースを構築するためのソフトウェアとして登場しました。
Facebookによって開発されたこと、特にWeb開発者に人気が高いこと以外は、ツールやベストプラクティスを備えた他のフレームワークと基本的に変わりません。
フレームワークにはそれぞれに利便性があるものですが、Reactの利便性は「インターフェースはデータの関数である」というシンプルな考えに基づいてUI開発にクリーンなスタイルをもたらすことです。
React Nativeが登場したのは約2年前ですが、モバイルのUI開発にも同じ考えをもたらしました。つまりWeb開発のコンセプトをモバイル開発の世界に持ち込んだのです。
React Nativeは、PhoneGapやCordovaなどのフレームワークと同じカテゴリに分類されますが、これらよりも技術的に優れていると私は思います。
主な理由は2つあります。
どのプラットフォームに依存するアプリを開発するとしても、次の3つについての知識が必要です。
React Nativeの場合、プログラミング言語は、JavaScriptまたはJSX(JavaScriptとHTMLタイプの構文が混在する、JavaScriptに似た言語)が必要です。
ツールとしては主に、「テキストエディタ」、「Chromeのデバッガ」、「構築・テストのためのその他のツール」が必要です。そしてAPIについては学ぶべきことが多くあります。APIは多くの場合、OSに依存します。
たとえば、今日のスマートフォン上の動作として実装できることはすべて、APIによってプログラム可能な範囲に限定されます。
しかし、このことには課題もあります。React Nativeで利用するAPIは、あなたにとって何でも実装できる万能なものではないかもしれません。
また、Web開発に関するいくつかの知識は、React Nativeの前提条件になるといえます。今までWebに触れたことがなくてもReact Nativeを始めることはできますが、根底にあるアーキテクチャについておそらくほとんどを理解できないと思います。
実際にアプリを構築する時までには、JavaScript、CSS、HTML、オブジェクト指向プログラミングについて学んでおく必要があります。
iOSのネイティブアプリの開発に使用する言語は、Objective-CまたはSwiftです。Androidの場合の言語はJavaです。
それぞれのプラットフォームのIDE(XcodeまたはAndroid studio)を使用する必要があり、このときIDE(総合開発環境)、デバッガ、ビルドシステムがどう機能するかについても学習することをおすすめします。
React NativeはWeb開発のためのソフトウェアに起源があり、Webの考えが多く取り入れられています。
一方、iOSとAndroidのネイティブアプリ開発においてはそのような傾向はなく、これらは純粋にネイティブアプリのためのプラットフォームであり、これらに特有のことを学習しなければなりません。
もっとも、どちらか1つを習得すると、もう1つの学習ははるかに容易になります。
最後にフレームワークですが、おそらく、iOS/Androidのネイティブアプリ開発またはReact Nativeの習得に要するのと同じくらいの努力量が必要になります。すべてをプログラミングで構築する方法を学ぶ必要があります。
しかし、React Nativeだけでは、iOSまたはAndroidで利用可能なすべてのAPIをサポートすることは難しいでしょう。
JavaScriptは、Java、Objective-C、Swiftとは対照的に、学習しやすくてデバッグも簡単です。しかし、この手軽さにはデメリットもあります。 JavaScriptは堅牢な言語ではなく、書いたコードに多くのエラーが隠れていても気づきにくいことがあります。
一方、Objective-C / Swift / Javaは、多くの潜在的なエラーを、コード実行前に取り除くことができる「コンパイル時の型チェック」という仕組みを持っているという意味で、堅牢な言語です。
Swiftは明らかに非常にモダンな言語ですが、Objective-CとJavaもモダン化し続けていて、モダンな言語に求められる機能性やパフォーマンスに関しても決して不十分ではありません。しかし、Google検索すればすぐ分かるように、JavaScriptにはさまざまな欠陥があります。
よって、学習そのものはReact Nativeの方が簡単です。
しかし、JavaScriptの欠陥が伴うおそれがあります。また、クロスプラットフォームなフレームワークを利用する場合は必ず、いわゆる「一度書いたら、どこでもデバッグする必要が出てくる」という問題に対処しなければなりません。
もしあなたがアプリ開発を予定していて、いつかアプリ開発者の仕事を探したい場合には、さまざまな理由からiOSまたはAndroidのネイティブ言語を強くおすすめします。
またReact Nativeを学ぶという選択肢もあります。これは興味深いテクノロジーですが、いくつか警告があります。
新しい言語であるにもかかわらず、Swiftはドキュメントが非常に優れています。今のところ、私は誰かがSwiftのドキュメントの欠点について不満を述べるのを聞いたことがありません。
React Nativeの公式ドキュメントも、とても優れています。Facebookは、通常のドキュメントに加えて、役立つヒントやコードサンプルを数多く提供しています。
コミュニティの大きさとStack Overflowに関しては、Swiftの方が恵まれていると思います。Swiftの方が1年ほど早く登場したこと、iOSアプリのコードを書くためのより簡単な代替言語としてAppleが公開したこと、あらゆる機会にAppleが宣伝していることがその理由であるといえます。
しかし、SwiftとReact Nativeそれぞれについての質問数を比較するとしたら、膨大な数を数えなければなりません。そのため、今のところはSwiftとReact Nativeは選択肢として優劣をつけがたいというのが私の考えです。
SwiftはメインストリームのiOS開発用言語であり、React Nativeは専門性がまだ低く、小規模なサブセットに利用するには開発者にとって魅力的です。
クロスプラットフォーム開発者とは、iOSとAndroidの両方のアプリを構築する人のことです。
次の点に留意する必要があります。
結論として、あなたの開発するアプリが十分にシンプルな場合や、iMessageなどの比較的新しい機能を組み込む必要がない場合や、既存のC・C++コードを組み込む必要がない場合や、精巧なアニメーションを必要としない場合などには最初にReact Nativeから始めても十分です。
また、もしあなたの開発するアプリがかなり複雑で、あなたがiOSやAndroidのプロで、Web開発の経験がいくらかある場合にも、React Nativeはあなたの取り組むべき問題をすべて解決できる可能性が高いため、良い選択となるかもしれません。
しかし、あなたが初めて開発を行う場合、まず最初に1つのプラットフォームでそのネイティブ言語を使用してアプリをローンチすることをおすすめします。
上手く行ったら、次に他のプラットフォームにも手を広げましょう。これは、Instagramが実践したローンチ手法でもあります。
TechAcademyでは初心者でも最短4週間でオリジナルアプリが作れるiPhoneアプリ開発オンラインブートキャンプ、Androidアプリ開発オンラインブートキャンプを開催しています。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルアプリを開発することが可能です。