nativewind について
nativewindは、classNameを通じてTailwind CSS 3.xのユーティリティをReact Nativeコンポーネントに適用するためのガイドです。セットアップ、設定、モバイル特有の制約を扱います。
主な機能
- 01classNameによるTailwindユーティリティ
- 02BabelとMetroの設定ガイド
- 03ScrollViewのコンテンツスタイル
- 04条件付きクラスの記述方法
- 05React Nativeのスタイル上の注意点
活用シーン
- 01React NativeアプリでのNativeWind設定
- 02ユーティリティクラスによるコンポーネントのスタイリング
- 03ScrollViewの間隔設定
- 04モバイル制約に沿ったスタイルの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dralgorhythm/ claude-agentic-framework --skill nativewindインストール後、Claude Code で/nativewindを入力して読み込まれたか確認します。
詳細
NativeWind
概要
NativeWind 4.x は Tailwind CSS 3.x を React Native に橋渡しし、View、Text、Pressable、ScrollView などの RN コンポーネントで className プロパティを使用できるようにします。使い慣れた Tailwind ユーティリティクラスをネイティブにレンダリングします。
インストール:pnpm add nativewind tailwindcss@3 と Babel/Metro の設定
ワークフロー
初期設定:
- インストール:
pnpm add nativewind tailwindcss@3 -
app/、components/などを指すコンテンツパスを指定してtailwind.config.jsを作成します。 -
@tailwind base; @tailwind components; @tailwind utilities;を記述したglobal.cssを作成します。 -
babel.config.jsを更新し、nativewind/babelプリセットを追加します。 -
metro.config.jsを更新し、withNativeWindでラップします。 -
/// <reference types="nativewind/types" />を記述したnativewind-env.d.tsを作成します。 - ルートの
_layout.tsxでglobal.cssをインポートします。
コンポーネントのスタイル設定:
- RN コンポーネント(View、Text、Pressable など)をインポートします。
- Tailwind ユーティリティを指定した
classNameプロパティを適用します。 - ScrollView/FlashList の内部スタイル設定には
contentContainerClassNameを使用します。 - デバイス/シミュレーターでテストし、レンダリングを確認します。
ガイダンス
設定ファイル
3 つの設定ファイルが必要です。
babel.config.js:NativeWind プリセットを追加します
presets: ['babel-preset-expo', 'nativewind/babel']
metro.config.js:Metro の設定を NativeWind でラップします
withNativeWind(config, { input: './global.css' })
tailwind.config.js:RN のコンテンツパスを指定した標準的な Tailwind 3.x の設定です
content: ['./app/**/*.{ts,tsx}', './components/**/*.{ts,tsx}']
className プロパティ
NativeWind はすべての RN コアコンポーネントで className を使えるようにします。
<View className="flex-1 bg-white p-4"><Text className="text-lg font-bold text-gray-900"><Pressable className="bg-blue-500 rounded-lg p-3"><ScrollView className="flex-1" contentContainerClassName="p-4 gap-3">
Web 版 Tailwind との主な違い
| Web 版 Tailwind | NativeWind(RN) | 備考 |
|---|---|---|
hover:bg-gray-100 | 使用不可 | タッチデバイスにはホバーがありません |
cursor-pointer | 該当なし | 代わりに Pressable を使用します |
flex(デフォルトは行) | flex(デフォルトは列) | RN のフレックスボックスは列がデフォルトです |
| そのままの文字列 | <Text> で囲む必要があります | RN では Text コンポーネントが必要です |
div | View | HTML 要素はありません |
gap-4 | gap-4 | NativeWind 4.x でサポートされています |
grid | 使用不可 | 代わりにフレックスレイアウトを使用します |
条件付きクラス
クラス文字列を条件に応じて連結します。
className={`px-4 py-2 rounded-lg ${isActive ? 'bg-blue-500' : 'bg-gray-200'}`}
または、条件分岐を簡潔にするために clsx/cn などのユーティリティを使用します。
ScrollView のスタイル設定
ScrollView には className の適用先が 2 つあります。
className— 外側のコンテナーのスタイル設定contentContainerClassName— 内部コンテンツのスタイル設定(パディング、間隔、配置)
スクロールコンテンツのパディングや間隔には、必ず contentContainerClassName を使用します。
テーマのカスタマイズ
tailwind.config.js のテーマを通じて拡張します。
theme: {
extend: {
colors: { brand: { 50: '...', 500: '...', 900: '...' } },
fontFamily: { sans: ['Inter'] }
}
}
ベストプラクティス
- TypeScript で
classNameの型をサポートするため、必ずnativewind-env.d.tsを作成します。 - ScrollView の内部の間隔には
classNameではなくcontentContainerClassNameを使用します。 - RN では flex のデフォルトが列であることを忘れず、必要に応じて明示的に
flex-rowを追加します。 - ルートの
_layout.tsxの先頭でglobal.cssをインポートします。 - Tailwind の間隔スケールを一貫して使用します(StyleSheet との混在は避けます)。
- スタイルの適用漏れを防ぐため、
tailwind.config.jsのコンテンツパスを正確に保ちます。 - 一貫した間隔を実現するため、兄弟要素間のマージンではなく
gap-*を使用します。
アンチパターン
- 同じコンポーネントで
StyleSheet.create()とclassNameを併用する(どちらか一方を選びます)。 hover:やcursor-ユーティリティを使用する(モバイルでは利用できません)。- ScrollView で
contentContainerClassNameを指定しない(classNameではパディングが機能しません)。 gridユーティリティを使用する(RN ではサポートされていません。フレックスレイアウトを使用します)。<Text>で囲まず、そのままの文字列を配置する(RN ではクラッシュします)。tailwind.config.jsの content 配列にすべてのソースディレクトリを含めない。- Tailwind CSS 4.x の構文を使用する(NativeWind には Tailwind 3.x が必要です)。