SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ExpoとEASで始める快適モバイルアプリ開発

モバイルアプリ開発の総合インフラ「Expo」でアプリ開発を始めよう

ExpoとEASで始める快適モバイルアプリ開発 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

React Nativeとは

 まずは、Expoの基礎技術である、React Nativeについて解説します。React Nativeは、Facebookを運営するMeta社が開発した、JavaScriptやTypeScriptを使ってモバイルアプリを開発するためのフレームワークです。例えば、次のようなコードを書いたとします(リスト1)。

[リスト1]App.jsx
import React from 'react';
import { Text, View } from 'react-native';

const App = () => {
  return (
    <View
      style={{ // (1)
        // React Nativeのflex-directionはcolumnがデフォルト
        flex: 1, // Viewを画面全体に広げる
        alignItems: 'center', // コンテンツを左右中央に配置
        justifyContent: 'center', // コンテンツを上下中央に配置
      }}
    >
      <Text>Hello, world!</Text>
    </View>
  );
};

export default App;

 ViewやTextといったコンポーネントは見慣れないかもしれませんが、Reactコンポーネントとしては一般的な形です。(1)のstyle propsも、ブラウザ向けにインラインで記述する場合と同じ書き方に見えますね。

 リスト1をReact Nativeのコードとして実行すると、AndroidとiOSそれぞれで、図1のように描画されます。

図1:React Nativeで作成したHello, world!アプリ(左:Android、右:iOS)
図1:React Nativeで作成したHello, world!アプリ(左:Android、右:iOS)

 こうして見ると、全画面のブラウザ(WebView)が表示されているだけではないかと勘繰ってしまいますが、実際にはもう少し込み入った仕組みで動いています。「各プラットフォームのネイティブなUIをReactの方法論で制御する」コンセプトが、React Nativeの名前の由来です。つまり、画面に表示されているテキストは、Androidでは TextView 、iOSでは UIView といった、各プラットフォームのSDKで定義された画面部品を使って描画されているのです(図2)。

図2:React Nativeの仕組み
図2:React Nativeの仕組み

 React Nativeランタイムは、Hermes(ヘルメス)という独自のJavaScriptエンジンをベースに作られており、JavaScriptコードをモバイルアプリでの動作に最適化された形で実行します。

 ブラウザと違って、レンダリングはネイティブUIに任せるため、DOM APIが用意されていないJavaScriptランタイムです。画面更新は、基本的にReactの仕組みの範疇で行うことになります。Reactらしい操作を行っている間はブラウザとさほど変わらない開発体験になりますが、DOM APIに対して込み入った操作をするスタイルでの開発に慣れていると、できることが少なくて戸惑うかもしれません。ブラウザでのアプリケーション開発経験者がReact Nativeを始める場合にも、多少の慣れは必要になるでしょう。

React Nativeの苦しみ

 React Nativeは「ReactからネイティブUIを管理する」といった観点ではよくできたフレームワークです。しかし、カスタマイズ性を最優先に設計されているため、単独で運用すると、プロジェクト内にさまざまな技術スタックが剥き出しのまま混在することになります。

 試しに、React Nativeのプロジェクト作成コマンドを npx @react-native-community/cli init MyApp のように実行してみると、図3のプロジェクトが生成されます。

図3:React Native単独で利用する場合のプロジェクト構成
図3:React Native単独で利用する場合のプロジェクト構成

 AndroidアプリとiOSアプリとnpmの各プロジェクトが同居していますね。このプロジェクトを運用する場合、担当者はReact Nativeとは別に、次の技術について一定の知識を持つ必要に迫られます。

  • npm:Node.jsのパッケージ管理ツール
  • Gradle(グレードル):Androidアプリで採用されているビルドシステム
  • Xcode(エックスコード):iOSアプリで採用されているIDE兼ビルドシステム
  • CocoaPods(ココアポッズ):iOSアプリで採用されていた依存関係管理ツール
    • ※ 将来的にSwift Package Manager(Swift言語向けの依存関係管理ツール)に移行される見込みです
  • Bundler(バンドラー):RubyGems(Ruby言語のライブラリ)の依存関係管理ツール

 android フォルダや ios フォルダには基本的に手を入れなくて済む、などといった甘い話はなく、AndroidやiOSの固有の機能を利用するライブラリを追加する際には、それぞれのプロジェクトを編集する必要がありますし、リリースビルドの際にはGradleやXcodeを扱わなければなりません。

 React Nativeのアーキテクチャを簡単に図示すると、図4の通りです。

図4:React Nativeのアーキテクチャ
図4:React Nativeのアーキテクチャ

 Android SDKやiOS SDKの上に、JavaScriptエンジンを動かしたりネイティブUIを操作したりするためのランタイムの仕組みがあります。その上にJavaScriptのフレームワークとして動く部分があり、その上で私たちが作ったReactアプリケーションが動く、といった作りになっています。真っ当に運用するのであれば、Android SDKやiOS SDKでのアプリ開発の経験がある人を雇って、専任の運用チームを作ることまで視野に入れてもいい難易度だと言えるでしょう。

次のページ
React Nativeを快適に扱うためのExpo

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
この記事の著者

WINGSプロジェクト 中川幸哉(ナカガワユキヤ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20328 2024/10/31 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング