SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

React NativeとExpo SDKのモジュール群で、プラットフォームの機能を便利に使う

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

React Nativeのモジュール

 まずは、React Nativeのコア部分に含まれるモジュールを解説することにしましょう。前回の記事は基本となるモジュールが中心でしたが、今回はもう少し応用的なものを紹介します。

Platform API

 Platformは、実行中のプラットフォームを判定したり、プラットフォームごとに異なる値を返したりするためのモジュールです。リスト1のように使用します。

[リスト1]src/screens/PlatformExample.js
import { View, Text, Platform } from 'react-native';

export const PlatformExample = () => {
  return (
    <View style={styles.container}>
      <Text style={styles.title}>Platformサンプル</Text>
      <Text style={styles.platformInfo}>
        現在のプラットフォーム: {Platform.OS /* (1) */}
      </Text>
      <Text style={styles.platformInfo}>
        バージョン: {Platform.Version /* (2) */}
      </Text>
      <Text style={styles.platformInfo}>
        {Platform.select({
          ios: 'これはiOSデバイスです',
          android: 'これはAndroidデバイスです',
          default: 'その他のプラットフォームです',
        }) /* (3) */}
      </Text>
      {/* (略) */}
    </View>
  );
};

 代表的なプロパティであるPlatform.OSPlatform.Version、そして便利関数であるPlatform.select()を使用してみました。リスト1を実際に動かしてみると、図1のような結果が得られます。

図1:Platformから得られる情報
図1:Platformから得られる情報

 (1)は、実行中のプラットフォームを判定するためのプロパティです。Platform.OSは、 "ios""android"といったプラットフォーム名を返します。条件分岐に使って、プラットフォームごとに異なる処理を実行するために使うことが多いです。

 (2)は、実行中のプラットフォームのバージョンを返すプロパティです。iOSでは"17.4"のようなシステムバージョンを文字列で返し、Androidでは35のようなAPIレベルを数値で返します。AndroidのAPIレベルはプラットフォームバージョンの通し番号で、APIレベル35はAndroid 15を指します。機能の条件分岐や、エラーログの参考情報として利用するとよいでしょう。

 (3)は、プラットフォーム名をキーとしたオブジェクトを渡すと、実行中のプラットフォームに対応する値を返します。ちょっとした表示を変えたいときに使うとよいでしょう。

FlatList コンポーネント

 FlatListは、一覧表示をするためのコンポーネントです。前回解説したScrollViewをベースに作られており、内部的にはAndroidのScrollViewやiOSの UIScrollViewをカスタマイズする形で表現されるため、ネイティブなUIと遜色のないスクロール感を得られます。リスト2のように使用します。

[リスト2]src/screens/FlatListExample.js
import { View, Text, FlatList } from 'react-native';

// (1) データ配列
const data = [
  { id: '1', title: 'リスト項目 1' },
  { id: '2', title: 'リスト項目 2' },
  { id: '3', title: 'リスト項目 3' },
  { id: '4', title: 'リスト項目 4' },
  { id: '5', title: 'リスト項目 5' },
];

export const FlatListExample = ({ onBack }) => {
  // (2) UIへの変換ルールを定義
  const renderItem = ({ item }) => (
    <View style={styles.item}>
      <Text style={styles.itemText}>{item.title}</Text>
    </View>
  );

  return (
    <View style={styles.container}>
      {/* (略) */}
      <FlatList
        data={data}                    // (1)
        renderItem={renderItem}        // (2)
        keyExtractor={item => item.id} // (3)
        style={styles.list}
      />
      {/* (略) */}
    </View>
  );
};
// (略)

 リスト2を実際に動かしてみると、図2のように表示されます。

図2:FlatListのサンプル
図2:FlatListのサンプル

 FlatListコンポーネントは、データ配列をリストUIに変換するルールを指定するために、3つのpropsを渡すことで動作します。(1)は表示するデータの配列、(2)は各項目のレンダリング方法を定義する関数、(3)は各項目に付与するkey propsを決める関数です。(2)でデータ配列の各項目を判定しながらUIを決定できるため、かなり柔軟にリストUIをカスタマイズできます。ぜひ覚えておくとよいでしょう。

TouchableOpacity コンポーネント

 タッチデバイスを扱うプラットフォームの機能として欠かせないのが、タッチイベントを扱うためのモジュールです。React Nativeにも多くのタッチイベントを扱うためのコンポーネントが用意されていますが、その中でも扱いやすいのがTouchableOpacity コンポーネントです。リスト3のように使用します。

[リスト3]src/screens/TouchableExample.js
import { View, Text, TouchableOpacity } from 'react-native';
import { useState } from 'react';

export const TouchableExample = ({ onBack }) => {
  const [count, setCount] = useState(0);

  return (
    <View style={styles.container}>
      <Text style={styles.title}>TouchableOpacityサンプル</Text>

      <View style={styles.demoContainer}>
        <TouchableOpacity 
          style={styles.button}
          onPress={() => setCount(prev => prev + 1)} // (1)
          activeOpacity={0.7}  // (2)
        >
          <Text style={styles.buttonText}>
            タップしてください({count}回)
          </Text>
        </TouchableOpacity>
      </View>

      <TouchableOpacity style={styles.backButton} onPress={onBack}>
        <Text style={styles.backButtonText}>戻る</Text>
      </TouchableOpacity>
    </View>
  );
};
// (略)

 Reactのサンプルらしく、カウンターを実装してみました。リスト3を実際に動かしてみると、図3のように表示されます。

図3:TouchableOpacityのサンプル
図3:TouchableOpacityのサンプル

 TouchableOpacity は、任意のUIをタップできるようにしつつ、タップ時にUIの透明度が変わるコンポーネントです。(1)のonPressで、タップイベントのハンドラを扱うことができます。(2)の activeOpacityは、タップ時の透明度を指定するためのpropsです。この値が小さいほど、タップ時に透明度が高くなります。

 アプリのデザイン次第では、透明度が変わる挙動ではない方がうれしい場合もあるでしょう。その場合は、Pressableという、カスタマイズ性が非常に高いコンポーネントもありますので、ぜひ調べてみてください。

次のページ
Expo SDKのモジュール

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

ExpoとEASで始める快適モバイルアプリ開発連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/20967 2025/02/19 11:00

イベント

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

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

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

メールバックナンバー