SHOEISHA iD

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

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

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

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

ExpoのWeb向けビルド機能「React Native for Web」を活用して、UIをブラウザで確認しよう

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

Web対応モジュールの見分け方

 Expo Router以外にも、Web対応のモジュールはいくつもあります。Web対応があるモジュールには、公式ドキュメントに "Web" のバッジがついているので、それで見分けるとよいでしょう。例えば、expo-clipboardの場合は、図3の表示になっています。

図3:expo-clipboardのWebバッジ表示
図3:expo-clipboardのWebバッジ表示

 Web対応を表すバッジがついていますね。同様にWebバッジがついたモジュールをいくつかピックアップしてみましょう。

 ブラウザが持っているリッチな機能にアクセスできるライブラリが少しずつ増えていっています。他にも魅力的なライブラリが揃っているので、ぜひ探してみてください。

実践:コンポーネントカタログの構築

 ExpoのWeb対応機能の実践的な活用例として、軽量なコンポーネントカタログを構築してみましょう。開発環境でのコンポーネント確認やチーム間での情報共有に役立ちます。コンポーネントカタログをWeb環境で構築することで、デザイナーとの連携、QAエンジニアによる動作確認、リモートワークでの情報共有、レスポンシブ確認など、チーム開発の生産性が向上します。

_dev/catalog ルートでの実装

 /_dev/catalogというパスにコンポーネントカタログを作ることにしましょう。Expo Routerのファイルベースルーティングを活用し、本番環境では表示されない開発専用のカタログルートを作成します(リスト10、リスト11)。

[リスト10]app/_dev/_layout.tsx
import { Stack } from 'expo-router';
import { Platform } from 'react-native';

export default function DevLayout() {
  // 本番のモバイルアプリビルドでは開発ツールを無効化
  // 他にも必要に応じてアクセス制限の手立てを講じる
  if (process.env.NODE_ENV === 'production' && Platform.OS !== 'web') {
    return null;
  }
  return (
    <Stack>
      <Stack.Screen name="catalog" options={{ title: 'コンポーネントカタログ' }} />
    </Stack>
  );
}
[リスト11]app/_dev/catalog/index.tsx
import { Text, ScrollView } from 'react-native';
import { Link } from 'expo-router';

export default function CatalogIndex() {
  const components = [
    { name: 'Button', href: '/catalog/button' },
    { name: 'Card', href: '/catalog/card' },
  ];
  return (
    <ScrollView>
      <Text>コンポーネントカタログ</Text>
      {components.map((component) => (
        <Link key={component.name} href={component.href}>
          <Text>{component.name}</Text>
        </Link>
      ))}
    </ScrollView>
  );
}

 リスト11を実行すると、図4のような表示になります。

図4:コンポーネントカタログのインデックス画面
図4:コンポーネントカタログのインデックス画面

簡易カタログの実装例

 個別のコンポーネントを表示するページでは、複数のバリエーションを並べて表示します(リスト12)。

[リスト12]app/_dev/catalog/button.tsx
import { Text, ScrollView } from 'react-native';
import { MyButton } from '../../../components/MyButton';
export default function ButtonCatalog() {
  return (
    <ScrollView>
      <Text>Button バリエーション</Text>
      <MyButton title="プライマリ" variant="primary" />
      <MyButton title="セカンダリ" variant="secondary" />
      {/* (略) */}
    </ScrollView>
  );
}

 リスト12を実行すると次のような見た目になります。

図5:ボタンコンポーネントのバリエーション表示画面
図5:ボタンコンポーネントのバリエーション表示画面

 これを開発者以外にも見せられれば、UIの実装状況について簡単に共有できそうですね。

チーム開発での活用方法

 このコンポーネントカタログは、プルリクエストでのプレビュー、デザインレビュー、仕様書代わり、回帰テストなど、さまざまな場面でチーム開発に活用できます。

 Storybookなどの本格的なツールと比較すると機能は限定的ですが、導入コストが低く、既存のExpoプロジェクトにすぐに組み込めるのが利点です。特に小さなチームや個人開発では、こういった軽量なアプローチが有効でしょう。

まとめ

 本記事では、ExpoのWeb向けビルド機能について解説しました。ブラウザ上でUIを再現することで、コンポーネントカタログを作れば、チームの生産性を向上できるのではないでしょうか。もし機会があれば、Webアプリへの移植を試してみるのもいいでしょう。

 次回は、EAS Buildサービスを活用したアプリのビルドとデプロイメントについて解説予定です。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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/22352 2025/10/17 11:00

イベント

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

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

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

メールバックナンバー