mcpField
E
expo-router

expo-router

github.com/jchaselubitz開発0134 回インストール38 週間前に更新
リポジトリ

expo-router について

expo-routerは、Expo Routerを使ったナビゲーションの実装パターンを紹介するスキルです。ファイルベースのルート検出、レイアウト設定、画面オプション、ネイティブタブを扱います。

主な機能

  1. 01ファイル構成からルートを自動検出
  2. 02レイアウトファイルでナビゲーションを定義
  3. 03Stackの既定オプションを設定
  4. 04画面ごとのオプションを設定
  5. 05SF Symbols対応のネイティブタブを利用

活用シーン

  1. 01アプリのStackナビゲーション設定
  2. 02ディレクトリ単位でタブとルートグループを整理
  3. 03特定画面のオプション設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jchaselubitz/drill-app --skill expo-router

インストール後、Claude Code で/expo-routerを入力して読み込まれたか確認します。

同梱ファイルmeta.yaml

詳細

Expo Router のパターン

Stack ナビゲーターの設定

ルートレイアウトの設定

Stack コンポーネントで screenOptions を使うと、すべての画面にデフォルト設定を適用できます。各画面を明示的にすべて列挙しないでください。ルートはファイル構造から自動検出されます。

// app/_layout.tsx
import { Stack } from 'expo-router';

export default function RootLayout() {
  return (
    <Stack screenOptions={{ headerShown: false }} />
  );
}
画面ごとの設定

各画面では、コンポーネントファイル内で <Stack.Screen> を使って個別のオプションを設定します。

// app/lesson/[id].tsx
import { Stack } from 'expo-router';

export default function LessonScreen() {
  return (
    <View>
      <Stack.Screen
        options={{
          title: 'Lesson',
          headerShown: true,
          headerBackTitle: 'Back',
        }}
      />
      {/* Screen content */}
    </View>
  );
}
ヘッダーの動的な設定

ボタンなど、ヘッダーのコンテンツを動的に変更するには、useNavigation と setOptions を使います。

import { useNavigation } from 'expo-router';
import { useLayoutEffect } from 'react';

export default function Screen() {
  const navigation = useNavigation();

  useLayoutEffect(() => {
    navigation.setOptions({
      headerRight: () => (
        <Pressable onPress={handlePress}>
          <Ionicons name="add" size={28} />
        </Pressable>
      ),
    });
  }, [navigation]);

  return <View>{/* content */}</View>;
}

ネイティブタブ(expo-router/unstable-native-tabs)

ネイティブタブでは、iOS 上で SF Symbols を使ったプラットフォーム標準のタブバーを利用できます。

// app/(tabs)/_layout.tsx
import { Icon, Label, NativeTabs } from 'expo-router/unstable-native-tabs';

export default function TabLayout() {
  return (
    <NativeTabs>
      <NativeTabs.Trigger name="index" options={{ title: 'Home' }}>
        <Icon sf="house.fill" drawable="custom_android_drawable" />
        <Label>Home</Label>
      </NativeTabs.Trigger>
    </NativeTabs>
  );
}

主な原則

  1. ファイルベースルーティング:ルートは app/ ディレクトリの構造から自動検出されます
  2. 最小限の設定:上書きが必要な項目のみを設定します
  3. 画面レベルのオプション:画面では、コンポーネント内の <Stack.Screen> を使ってヘッダーやオプションを設定します
  4. レイアウトファイル:_layout.tsx ファイルで、そのディレクトリのナビゲーション構造を定義します
  5. ルートグループ:(tabs) のように括弧で囲むと、URL パスに影響しないルートグループを作成できます

よくある避けるべきミス

  • Stack にすべての画面を明示的に列挙しないでください。画面は自動検出されます
  • ルート固有の設定に screenOptions を使わないでください。ルートファイル内で <Stack.Screen> を使います
  • ナビゲーターを深くネストしないでください。よりすっきりとした構造にするには、ファイルベースルーティングを使います

コメント