ExpoのWeb向けビルド機能「React Native for Web」を活用して、UIをブラウザで確認しよう
ExpoとEASで始める快適モバイルアプリ開発 第8回
ダウンロード サンプルファイル (678.2 KB)
プラットフォーム固有の実装パターン
React Native for Webが独立したライブラリであるからこそ、すべてのコンポーネントが完全に互換性を持つわけではありません。プラットフォーム固有の機能を使い分けるための実装パターンを見ていきましょう。
Platform.OSによる条件分岐
最も基本的な方法は、Platform.OSによる条件分岐です(リスト1)。
import { Platform, View, Text } from 'react-native';
export default function PlatformInfo() {
return (
<View>
<Text>現在のプラットフォーム: {Platform.OS}</Text>
{Platform.OS === 'web' ? (
<Text>Webブラウザで実行中です</Text>
) : (
<Text>モバイルアプリで実行中です</Text>
)}
</View>
);
}
Platform.OSは、iOS、Android、Webそれぞれで異なる値('ios'、'android'、'web')を返します。
Platform.selectによる値の切り替え
複数のプラットフォーム向けに値を切り替える場合は、Platform.selectを使うとより簡潔に書けます(リスト2)。
import { Platform, StyleSheet } from 'react-native';
const styles = StyleSheet.create({
container: {
padding: Platform.select({
web: 20,
ios: 15,
android: 10,
}),
fontFamily: Platform.select({
web: 'system-ui, -apple-system, sans-serif',
default: 'System', // iOS/Android共通
}),
},
});
Web専用ファイルによる実装分割
より大きな実装の違いがある場合は、.web.tsx拡張子を使用してWeb専用の実装を提供できます。この拡張子のファイル内では、<div>などのDOM要素を直接利用できます。
これは、.android.tsxや.ios.tsxの拡張子をつけることでプラットフォームごとにピックアップされるファイルを切り替えられる、React Native本来の仕組みに則ったものです(リスト3)。
components/ ├── FileUploader.tsx # モバイル向け基本実装(expo-image-picker使用) ├── FileUploader.web.tsx # Web専用(HTML input[type="file"]使用) ├── NotificationBanner.tsx # Web向け基本実装(DOM操作使用) └── NotificationBanner.native.tsx # モバイル専用(expo-notifications使用)
この例では、FileUploaderは「モバイル+Web専用」、NotificationBannerは「Web+モバイル専用」の組み合わせになっています。
Webビルド時には.web.tsxが、iOS/Androidビルド時には.native.tsxが優先的に読み込まれ、該当するファイルがなければ無印(.tsx)が使用されます。この仕組みにより、プラットフォームごとに最適化された実装を透過的に切り替えることができます。
この記事は参考になりましたか?
- この記事の著者
-
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編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
