Configuration Details - horihorikeitaa/PomofocusGuardApp GitHub Wiki

設定ファイルの詳細解説

React Nativeプロジェクトには様々な設定ファイルが存在します。ここでは各設定ファイルの目的、内容、そして初学者が理解すべき重要なポイントについて解説します。

1. package.json

基本概念

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

コマンドラインで実行できるスクリプトを定義します。

"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シミュレータでアプリを起動します。

dependencies

アプリの実行時に必要なライブラリを定義します。

  • @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未満」の最新版を意味します。

devDependencies

開発時のみ使用するライブラリを定義します。

  • @babel/core, babel-jest: JavaScriptのトランスパイラ
  • typescript, @types/***: TypeScriptとその型定義
  • eslint, prettier: コード品質とフォーマットのツール
  • jest, @testing-library/***: テストフレームワーク

初学者向けポイント: npm installを実行すると、これらの依存関係が自動的にインストールされます。

2. babel.config.js

基本概念

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',
    ],
};

重要なセクション

presets

一連の変換ルールをまとめたものです。

  • module:metro-react-native-babel-preset: React Native用に最適化された変換ルールセット

初学者向けポイント: プリセットのおかげで、最新のJavaScript機能やJSX、TypeScriptなどが自動的に変換されます。

plugins

追加の機能を提供するプラグインです。

  • module-resolver: インポートパスのエイリアスを設定します。

    // 変更前(相対パス):
    import Button from '../../../components/Button';
    
    // 変更後(エイリアス使用):
    import Button from '@/components/Button';
  • react-native-reanimated/plugin: React Native Reanimatedライブラリのアニメーション最適化プラグイン

初学者向けポイント: パスエイリアスを使うと、複雑な相対パスを単純化でき、ファイル移動時の修正も少なくなります。

3. tsconfig.json

基本概念

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"]
}

重要なセクション

compilerOptions

TypeScriptコンパイラの動作を制御します。

  • target: コンパイル先のJavaScriptバージョン(esnextは最新版)
  • jsx: JSXのコンパイル方法(react-nativeはReact Native用)
  • strict: 厳格な型チェックを有効化(バグの早期発見に役立つ)
  • paths: インポートパスのエイリアス設定(babel.config.jsのaliasと連携)

初学者向けポイント: strict: trueは最初は大変ですが、型安全性によるバグ防止という恩恵があります。

include/exclude

コンパイル対象のファイルを指定します。

初学者向けポイント: node_modulesは除外するのが一般的です。includeには自分のコードのみ指定します。

4. .eslintrc.js

基本概念

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',
        },
    },
};

重要なセクション

extends

既存のルールセットを継承します。

  • @react-native: React Native推奨ルール
  • plugin:react/recommended: React推奨ルール
  • plugin:@typescript-eslint/recommended: TypeScript推奨ルール

初学者向けポイント: これらの推奨ルールにより、フレームワーク固有のベストプラクティスに従えます。

rules

具体的なルールとその設定です。

  • react/react-in-jsx-scope: React 17以降はimport Reactが不要になったため無効化
  • no-console: 本番コードにconsole.logが残らないよう警告(ただしwarnerrorは許可)

初学者向けポイント: ルールを調整して、プロジェクトに最適な設定にできます。厳しすぎると開発の流れが止まるため、バランスが重要です。

5. .prettierrc.js

基本概念

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で「保存時に自動フォーマット」を設定すると便利です。

6. metro.config.js(※存在する場合)

基本概念

Metro BundlerはReact Native用のJavaScriptバンドラーです。アプリのコードをまとめて、デバイスで実行できるようにします。

主な設定項目

  • transformer: コード変換の設定
  • resolver: モジュール解決の設定
  • serializer: 出力バンドルの設定

初学者向けポイント: 通常はデフォルト設定で十分ですが、アセット(画像など)の処理やカスタム解決ロジックが必要な場合に調整します。

設定ファイル間の関係

これらの設定ファイルは互いに連携しています:

  1. package.jsonで依存関係を定義
  2. babel.config.jsで最新のJavaScript/TypeScriptを変換
  3. tsconfig.jsonでTypeScriptの型チェック設定
  4. .eslintrc.jsと**.prettierrc.js**でコード品質とスタイルを統一

初学者向けポイント: これらの設定ファイルは「ボイラープレート」と呼ばれ、プロジェクト作成時に基本設定が含まれています。プロジェクトの要件に合わせて調整することが重要です。

実践的なアドバイス

1. 段階的な理解

まずは基本的な部分だけ理解し、必要に応じて詳細を学んでいくことをお勧めします。

2. エディタ拡張機能の活用

VS CodeなどのエディタでESLintとPrettierの拡張機能を使うと、リアルタイムでフィードバックを得られます。

3. デフォルト設定を尊重

特に理由がない限り、デフォルト設定を尊重しましょう。これらは多くのプロジェクトで検証されています。

4. 学習リソース

⚠️ **GitHub.com Fallback** ⚠️