This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
ナビゲーションを追加する
ページを編集
この章では、Expo アプリにナビゲーションを追加する方法を学びます。
この章では、Expo Router の基本を学び、スタックナビゲーションと 2 つのタブを持つボトムタブバーを作成します。

Expo Router でファイルベースルーティングをセットアップし、画面間のスタックナビゲーションを作成して、ボトムタブバーを構築します。
Expo Router の基本
Expo Router は React Native と web アプリ向けのファイルベースのルーティングフレームワークです。画面間のナビゲーションを管理し、複数のプラットフォームで同じコンポーネントを使用できます。始めるにあたって、次の規約を理解しておく必要があります。
- app ディレクトリ: ルートとそのレイアウトのみを含む特別なディレクトリです。このディレクトリに追加したファイルは、ネイティブアプリでは画面として、web ではページとして扱われます。デフォルトテンプレートでは src/app に配置されています。
- ルートレイアウト: src/app/_layout.tsx ファイルです。ヘッダーやタブバーなど、複数のルート間で一貫させたい共有 UI 要素を定義します。
- ファイル名の規約: index.tsx などの Index ファイル名は、親ディレクトリと一致し、パスセグメントを追加しません。たとえば、src/app ディレクトリ内の index.tsx は
/ルートと一致します。 - ルート ファイルは React コンポーネントをデフォルト値としてエクスポートします。拡張子は
.js、.jsx、.ts、.tsxのいずれかを使用できます。 - Android、iOS、web は統一されたナビゲーション構造を共有します。
上記のリストで始めるには十分です。すべての機能の一覧については、Expo Router 紹介 を参照してください。
1
2
画面間を移動する
Expo Router の Link コンポーネントを使用して、/index ルートから /about ルートに移動します。これは、指定された href プロパティを持つ <Text> をレンダリングする React コンポーネントです。
- src/app/index.tsx 内で、
expo-routerからLinkコンポーネントをインポートします。 <Text>コンポーネントの後にLinkコンポーネントを追加し、hrefプロパティに/aboutルートを渡します。LinkコンポーネントにfontSize、textDecorationLine、colorのスタイルを追加します。<Text>コンポーネントと同じプロパティを受け取ります。
アプリの変更を確認しましょう。Link をクリックして /about ルートに移動します。
3
not-found ルートを追加する
ルートが存在しない場合、Expo Router はそのルートに対してデフォルトの画面を表示します。+not-found ルートを使用すると、モバイルと web でその画面をカスタムのフォールバック画面に置き換えられます。Expo Router は、このケースを処理するために特別な +not-found.tsx ファイルを使用します。
- src/app ディレクトリ内に +not-found.tsx という名前の新しいファイルを作成し、
NotFoundScreenコンポーネントを追加します。 Stack.Screenのoptionsプロパティを追加して、このルートのカスタム画面タイトルを表示します。Linkコンポーネントを追加して、フォールバックルートである/ルートに移動します。
これをテストするには、URL パスを変更しやすい web ブラウザで http://localhost:8081/123 URL に移動します。アプリには NotFoundScreen コンポーネントが表示されるはずです。
4
ボトムタブナビゲーターを追加する
この時点で、src/app ディレクトリのファイル構造は次のようになっています。
srcapp_layout.tsxルートレイアウトindex.tsxルート '/' に一致about.tsxルート '/about' に一致+not-found.tsxすべての 404 ルートに一致アプリにボトムタブナビゲーターを追加し、既存の Home と About 画面を再利用してタブレイアウトを作成します。これは、X や Bluesky など、多くのソーシャルメディアアプリで一般的なナビゲーションパターンです。また、ルートレイアウトでスタックナビゲーターを使用することで、+not-found ルートが他のネストされたナビゲーターの上に表示されるようにします。
- src/app ディレクトリ内に (tabs) サブディレクトリを追加します。この特別なディレクトリは、ルートをグループ化してボトムタブバーに表示するために使われます。
- ディレクトリ内に (tabs)/_layout.tsx ファイルを作成します。これは、ルートレイアウトとは別のタブレイアウトを定義するために使用されます。
- 既存の index.tsx と about.tsx ファイルを (tabs) ディレクトリ内に移動します。src/app ディレクトリの構造は次のようになります。
srcapp_layout.tsxルートレイアウト+not-found.tsxすべての 404 ルートに一致(tabs)_layout.tsxタブレイアウトindex.tsxルート '/' に一致about.tsxルート '/about' に一致ルートレイアウトファイルを更新して、(tabs) ルートを追加します。
(tabs)/_layout.tsx 内に NativeTabs コンポーネントを追加して、ボトムタブレイアウトを定義します。ネイティブタブは、Android と iOS でプラットフォームのネイティブなタブバーを使用します。
ネイティブタブは画面にヘッダーを追加しないため、Home と About 画面にはヘッダーが表示されなくなります。web では、タブはページ上部にラベルの一覧として表示されます。
新しいボトムタブが表示されたアプリを確認してみましょう。
5
ボトムタブナビゲーターの外観を更新する
現時点では、ボトムタブナビゲーターはアプリのスタイルと合っていません。たとえば、タブにアイコンが表示されず、タブバーの色がアプリの背景色と一致していません。
src/app/(tabs)/_layout.tsx ファイルを修正して、タブバーアイコンを追加します。
- 各
NativeTabs.Triggerの内部にNativeTabs.Trigger.Iconコンポーネントを追加します。mdプロパティは Android 用の Material Symbols の名前を受け取ります。sfプロパティは iOS 用の SF Symbols の名前を受け取ります。 defaultとselectedのキーを持つオブジェクトをsfプロパティに渡します。iOS では、タブがアクティブのときにselectedのアイコンが表示されます。NativeTabsコンポーネントにtintColorプロパティを追加し、値を#ffd33dに設定します。これにより、アクティブなタブのアイコンとラベルの色が変わります。
アイコンにはインストール手順は必要ありません。Android では、デフォルトテンプレートに含まれる expo-symbols ライブラリが Material Symbols を提供します。iOS では、SF Symbols はシステムの一部です。web では、タブにはラベルのみが表示されます。
backgroundColor プロパティを使って、タブバーの背景色も変更しましょう。
backgroundColor プロパティは、Android と web でタブバーに #25292e を適用します。iOS 26 以降では、backgroundColor は効果がありません。タブバーは Liquid Glass を使用し、デバイスのライトまたはダークの外観に従います。
これでアプリにカスタムボトムタブナビゲーターが追加されました。
6
Android のリップルとインジケーターの色を更新する
Android では、タブバーはまだデフォルトの Material 3 テーマの 2 つの色を使用しています。タブを押すと、リップルエフェクトが表示されます。アクティブなタブには、アイコンの背後にインジケーターが表示されます。どちらの色もアプリのカラーパレットと一致していません。
src/app/(tabs)/_layout.tsx の NativeTabs コンポーネントに、indicatorColor と rippleColor プロパティを追加します。
上記のコードでは:
indicatorColorは、Android ではアクティブなタブの背後にあるインジケーターの色を設定し、web ではアクティブなタブの背景色を設定します。rippleColorは、Android でユーザーがタブを押したときに表示されるリップルエフェクトの色を設定します。
これで、リップルとインジケーターがアクティブなタブの黄色を使用するようになりました。
まとめ
第 2 章:ナビゲーションを追加する
アプリにスタックとタブナビゲーターを追加しました。
次の章では、アプリの最初の画面を構築する方法を学びます。