Configuration Details - horihorikeitaa/PomofocusGuardApp GitHub Wiki
React Nativeプロジェクトには様々な設定ファイルが存在します。ここでは各設定ファイルの目的、内容、そして初学者が理解すべき重要なポイントについて解説します。
package.json
はプロジェクトの「マニフェスト」です。プロジェクトの名前、バージョン、依存関係、スクリプトなどを定義します。
{
"name": "PomofocusGuardApp",
"version": "0.1.0",
"private": true,
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"start": "react-native start",
"test": "jest",
"lint": "eslint ."
},
"dependencies": {
"@react-native-async-storage/async-storage": "^1.19.5",
"@react-navigation/native": "^6.1.9",
"@react-navigation/stack": "^6.3.20",
"react": "18.2.0",
"react-native": "0.73.0",
// ...その他の依存関係
},
"devDependencies": {
"@babel/core": "^7.23.5",
"@typescript-eslint/eslint-plugin": "^6.13.2",
// ...その他の開発用依存関係
}
}
コマンドラインで実行できるスクリプトを定義します。
"scripts": {
"android": "react-native run-android", // Androidアプリを実行
"ios": "react-native run-ios", // iOSアプリを実行
"start": "react-native start", // Metro Bundlerを起動
"test": "jest", // テストを実行
"lint": "eslint ." // リンターを実行
}
初学者向けポイント: npm run [スクリプト名]
で実行できます。例えば、npm run ios
でiOSシミュレータでアプリを起動します。
アプリの実行時に必要なライブラリを定義します。
- @react-navigation/native, @react-navigation/stack: 画面遷移のためのナビゲーションライブラリ
- react-native-background-timer: バックグラウンドでもタイマーを動作させるため
- react-native-sensors: デバイスのセンサー(加速度計、ジャイロスコープなど)にアクセスするため
- recoil: 状態管理ライブラリ
- @react-native-async-storage/async-storage: データを永続化するためのストレージライブラリ
初学者向けポイント: ^
や~
はバージョン範囲を示します。^1.19.5
は「1.19.5以上、2.0.0未満」の最新版を意味します。
開発時のみ使用するライブラリを定義します。
- @babel/core, babel-jest: JavaScriptのトランスパイラ
- typescript, @types/***: TypeScriptとその型定義
- eslint, prettier: コード品質とフォーマットのツール
- jest, @testing-library/***: テストフレームワーク
初学者向けポイント: npm install
を実行すると、これらの依存関係が自動的にインストールされます。
Babelは最新のJavaScript構文やTypeScriptを、どの環境でも動作する標準的なJavaScriptに変換する「トランスパイラ」です。babel.config.js
はその設定ファイルです。
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
[
'module-resolver',
{
root: ['./src'],
extensions: ['.ios.js', '.android.js', '.js', '.ts', '.tsx', '.json'],
alias: {
'@': './src',
},
},
],
'react-native-reanimated/plugin',
],
};
一連の変換ルールをまとめたものです。
- module:metro-react-native-babel-preset: React Native用に最適化された変換ルールセット
初学者向けポイント: プリセットのおかげで、最新のJavaScript機能やJSX、TypeScriptなどが自動的に変換されます。
追加の機能を提供するプラグインです。
-
module-resolver: インポートパスのエイリアスを設定します。
// 変更前(相対パス): import Button from '../../../components/Button'; // 変更後(エイリアス使用): import Button from '@/components/Button';
-
react-native-reanimated/plugin: React Native Reanimatedライブラリのアニメーション最適化プラグイン
初学者向けポイント: パスエイリアスを使うと、複雑な相対パスを単純化でき、ファイル移動時の修正も少なくなります。
TypeScriptの設定ファイルで、コンパイラオプションやプロジェクトの構造を定義します。
{
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"lib": ["es2019"],
"jsx": "react-native",
"strict": true,
"moduleResolution": "node",
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
},
"allowSyntheticDefaultImports": true,
"esModuleInterop": true
},
"include": ["src", "__tests__"],
"exclude": ["node_modules", "babel.config.js", "metro.config.js"]
}
TypeScriptコンパイラの動作を制御します。
- target: コンパイル先のJavaScriptバージョン(esnextは最新版)
- jsx: JSXのコンパイル方法(react-nativeはReact Native用)
- strict: 厳格な型チェックを有効化(バグの早期発見に役立つ)
- paths: インポートパスのエイリアス設定(babel.config.jsのaliasと連携)
初学者向けポイント: strict: true
は最初は大変ですが、型安全性によるバグ防止という恩恵があります。
コンパイル対象のファイルを指定します。
初学者向けポイント: node_modules
は除外するのが一般的です。include
には自分のコードのみ指定します。
ESLintはコードの品質チェックツールです。コーディング規約違反やバグの可能性がある記述を検出します。
module.exports = {
root: true,
extends: [
'@react-native',
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react/recommended',
'plugin:react-hooks/recommended',
],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'react', 'react-hooks'],
rules: {
'react/react-in-jsx-scope': 'off',
'react/prop-types': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'no-console': ['warn', { allow: ['warn', 'error'] }],
},
settings: {
react: {
version: 'detect',
},
},
};
既存のルールセットを継承します。
- @react-native: React Native推奨ルール
- plugin:react/recommended: React推奨ルール
- plugin:@typescript-eslint/recommended: TypeScript推奨ルール
初学者向けポイント: これらの推奨ルールにより、フレームワーク固有のベストプラクティスに従えます。
具体的なルールとその設定です。
-
react/react-in-jsx-scope: React 17以降は
import React
が不要になったため無効化 -
no-console: 本番コードに
console.log
が残らないよう警告(ただしwarn
とerror
は許可)
初学者向けポイント: ルールを調整して、プロジェクトに最適な設定にできます。厳しすぎると開発の流れが止まるため、バランスが重要です。
Prettierはコードフォーマッタです。コードスタイルを自動的に統一します。
module.exports = {
bracketSpacing: true,
jsxBracketSameLine: false,
singleQuote: true,
trailingComma: 'all',
arrowParens: 'avoid',
semi: true,
tabWidth: 2,
printWidth: 100,
};
- singleQuote: 文字列はシングルクォートを使用
- trailingComma: 複数行の配列や引数リストで最後の項目にもカンマをつける
- tabWidth: インデントは2スペース
- printWidth: 1行の最大文字数
初学者向けポイント: Prettierは「意見の余地がない」設計で、コードスタイルについての議論をなくし、一貫性を保ちます。VS Codeで「保存時に自動フォーマット」を設定すると便利です。
Metro BundlerはReact Native用のJavaScriptバンドラーです。アプリのコードをまとめて、デバイスで実行できるようにします。
- transformer: コード変換の設定
- resolver: モジュール解決の設定
- serializer: 出力バンドルの設定
初学者向けポイント: 通常はデフォルト設定で十分ですが、アセット(画像など)の処理やカスタム解決ロジックが必要な場合に調整します。
これらの設定ファイルは互いに連携しています:
- package.jsonで依存関係を定義
- babel.config.jsで最新のJavaScript/TypeScriptを変換
- tsconfig.jsonでTypeScriptの型チェック設定
- .eslintrc.jsと**.prettierrc.js**でコード品質とスタイルを統一
初学者向けポイント: これらの設定ファイルは「ボイラープレート」と呼ばれ、プロジェクト作成時に基本設定が含まれています。プロジェクトの要件に合わせて調整することが重要です。
まずは基本的な部分だけ理解し、必要に応じて詳細を学んでいくことをお勧めします。
VS CodeなどのエディタでESLintとPrettierの拡張機能を使うと、リアルタイムでフィードバックを得られます。
特に理由がない限り、デフォルト設定を尊重しましょう。これらは多くのプロジェクトで検証されています。