building-ui
Expo Routerを使った美しいアプリの構築に関する完全ガイドです。基礎知識、スタイリング、コンポーネント、ナビゲーション、アニメーション、パターン、ネイティブタブなど、アプリ開発に必要な要素をすべてカバーしています。
description の原文を見る
Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.
SKILL.md 本文
Expo UI ガイドライン
リファレンス
必要に応じて以下のリソースを参照してください:
- ./references/route-structure.md -- ルートファイルの規約、動的ルート、クエリパラメータ、グループ、フォルダ構成
- ./references/tabs.md -- NativeTabsを使用したネイティブタブバー、JSタブからの移行、iOS 26機能
- ./references/icons.md -- expo-symbolsを使用したSF Symbols、一般的なアイコン名、アニメーション、ウェイト
- ./references/controls.md -- ネイティブiOSコントロール: Switch、Slider、SegmentedControl、DateTimePicker、Picker
- ./references/visual-effects.md -- expo-blurを使用したブラー効果と expo-glass-effectを使用したリキッドガラス
- ./references/animations.md -- Reanimatedアニメーション: entering、exiting、layout、scroll-driven、ジェスチャー
- ./references/search.md -- ヘッダーとの統合、useSearch hook、フィルタリングパターンを含むサーチバー
- ./references/gradients.md -- experimental_backgroundImageを使用したCSSグラデーション(New Architectureのみ)
- ./references/media.md -- カメラ、オーディオ、ビデオ、ファイル保存を含むExpo Router用のメディア処理
- ./references/storage.md -- SQLite、AsyncStorage、SecureStoreを含むデータストレージパターン
- ./references/webgpu-three.md -- WebGPUとThree.jsを使用した3Dグラフィックス、ゲーム、GPU対応ビジュアライゼーション
アプリの実行
重要: カスタムビルドを作成する前に、必ずExpo Goを試してください。
ほとんどのExpoアプリはカスタムネイティブコードなしでExpo Goで動作します。npx expo run:iosまたはnpx expo run:androidを実行する前に:
- Expo Goで開始:
npx expo startを実行してExpo GoでQRコードをスキャンします - 機能が機能するかチェック: Expo Goアプリを十分にテストします
- 必要な場合のみカスタムビルドを作成 - 以下を参照
カスタムビルドが必要な場合
- ローカルExpoモジュール(
modules/ディレクトリ内のカスタムネイティブコード) - Appleのターゲット(ウィジェット、アプリクリップ、エクステンション)
- Expo Goに含まれていないサードパーティネイティブモジュール
- カスタム設定によるプッシュ通知
Expo Goが機能する場合
- 標準Expo SDKモジュール
- Expo Routerナビゲーション
- React Native Reanimatedアニメーション
- ほとんどのUIコンポーネントとスタイリング
コードスタイル
- 終了していない文字列に注意してください。ネストされたバッククォートはエスケープされていることを確認し、引用符を正しくエスケープするのを忘れないでください。
- ファイルの上部に必ずimportステートメントを使用してください。
- ファイル名には必ずケバブケースを使用してください。例:
comment-card.tsx - ナビゲーションを移動または再構成する場合は、古いルートファイルを必ず削除してください
- ファイル名に特殊文字を使用しないでください
- tsconfig.jsonをパスエイリアスで設定し、リファクタリング時に相対インポートよりエイリアスを優先してください。
ルート
詳細なルート規約については./references/route-structure.mdを参照してください。
- ルートは
appディレクトリに属します。 - コンポーネント、型、ユーティリティをappディレクトリと同じ場所に配置しないでください。これはアンチパターンです。
- アプリは常に「/」と一致するルートを持つことを確認してください。グループルート内に含まれている可能性があります。
ライブラリの選好
- React Nativeから削除されたPickerやWebView、SafeAreaView、AsyncStorageなどのモジュールを使用しないでください
- レガシーexpo-permissionsを使用しないでください
expo-avではなくexpo-audioexpo-avではなくexpo-video@expo/vector-iconsではなくexpo-symbols- React NativeのSafeAreaViewではなく
react-native-safe-area-context Platform.OSではなくprocess.env.EXPO_OSReact.useContextではなくReact.use- 組み込み要素
imgではなくexpo-imageImageコンポーネント - リキッドガラスバックドロップには
expo-glass-effect
レスポンシブ性
- ルートコンポーネントをスクロールビューでラップしてレスポンシブ性を確保してください
<SafeAreaView>の代わりに<ScrollView contentInsetAdjustmentBehavior="automatic" />を使用して、より賢いセーフエリアインセットを実現してくださいcontentInsetAdjustmentBehavior="automatic"はFlatListおよびSectionListにも適用されるべきです- Dimensions APIの代わりにFlexboxを使用してください
- 画面サイズを測定するには
Dimensions.get()ではなくuseWindowDimensionsを常に優先してください
動作
- iOSで条件付きでexpo-hapticsを使用して、より喜ばしい体験を実現してください
- React NativeとiOSの内蔵ハプティクスを備えた
@react-native-community/datetimepickerなどの<Switch />のようなビューを使用してください - ルートがStackに属する場合、その最初の子はほぼ常に
contentInsetAdjustmentBehavior="automatic"が設定されたScrollViewであるべきです - サーチバーを追加するにはStack.Screenオプションで
headerSearchBarOptionsを優先してください - コピーできるデータを含むテキストには
<Text selectable />プロパティを使用してください - 1.4Mや38kのような大きな数字のフォーマットを検討してください
- webviewまたはExpo DOMコンポーネント内でない限り、「img」や「div」などの組み込み要素を使用しないでください
スタイリング
一般的なスタイリングルール
- すべてのスタイルにStyleSheet.create()を使用してください
- テーマ/デザインシステムから名前付きの色を優先してください
- 関連するスタイルをグループ化してください
- スタイルオブジェクトにセマンティック命名を使用してください
テキストスタイリング
import { Text, StyleSheet } from 'react-native';
const styles = StyleSheet.create({
title: {
fontSize: 24,
fontWeight: '700',
color: '#1a1a1a',
},
body: {
fontSize: 16,
lineHeight: 24,
color: '#4a4a4a',
},
});
シャドウ
iOSとAndroidはシャドウを異なる方法で処理します:
const styles = StyleSheet.create({
card: {
// iOSシャドウ
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.1,
shadowRadius: 8,
// Androidシャドウ
elevation: 4,
// 共通
backgroundColor: '#fff',
borderRadius: 12,
},
});
ナビゲーション
Link
「expo-router」から<Link href="/path" />を使用してルート間のナビゲーションを行います。
import { Link } from 'expo-router';
// 基本的なリンク
<Link href="/path" />
// カスタムコンポーネントのラップ
<Link href="/path" asChild>
<Pressable>...</Pressable>
</Link>
可能な限り、iOSの規約に従うために<Link.Preview>を含めてください。ナビゲーションを強化するため、頻繁にコンテキストメニューとプレビューを追加してください。
Stack
- スタックを定義するには必ず
_layout.tsxファイルを使用してください - ネイティブナビゲーションスタックには「expo-router/stack」からStackを使用してください
ページタイトル
Stack.Screenオプションを使用してページタイトルを設定します:
import { Stack } from 'expo-router';
export default function Layout() {
return (
<Stack>
<Stack.Screen
name="index"
options={{ title: 'Home' }}
/>
<Stack.Screen
name="details"
options={{ title: 'Details' }}
/>
</Stack>
);
}
コンテキストメニュー
インタラクションを強化するためにコンテキストメニューを追加します:
import { ContextMenu } from 'zeego/context-menu';
<ContextMenu.Root>
<ContextMenu.Trigger>
<Pressable>{/* content */}</Pressable>
</ContextMenu.Trigger>
<ContextMenu.Content>
<ContextMenu.Item key="share" onSelect={handleShare}>
<ContextMenu.ItemTitle>Share</ContextMenu.ItemTitle>
</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Root>
モーダル
presentationオプションを使用してモーダルを表示します:
// _layout.tsx内
<Stack.Screen
name="modal"
options={{
presentation: 'modal',
headerShown: false,
}}
/>
シート
ボトムシートの場合は以下を使用します:
<Stack.Screen
name="sheet"
options={{
presentation: 'formSheet',
sheetGrabberVisible: true,
sheetInitialDetentIndex: 0,
sheetAllowedDetents: [0.5, 1],
}}
/>
一般的なルート構造
app/
├── _layout.tsx # ルートレイアウト (Stack または Tabs)
├── index.tsx # ホーム画面 "/"
├── (tabs)/
│ ├── _layout.tsx # タブナビゲータ
│ ├── index.tsx # 最初のタブ
│ └── settings.tsx # 設定タブ
├── [id].tsx # 動的ルート "/123"
└── modal.tsx # モーダル画面
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- majiayu000
- ライセンス
- MIT
- 最終更新
- 2026/5/4
Source: https://github.com/majiayu000/claude-skill-registry / ライセンス: MIT
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。