Skip to content

ESLint no-explicit-any 暫定許容の TODO リスト

最終更新: 2026-05-04

背景

PR #27 の lint 修正(159エラー → 0エラー)において、テストファイル・Storybookストーリー・スクリプトの @typescript-eslint/no-explicit-any エラーを一時的に ESLint override で許容しました。これらは本来 any を排除すべき箇所であり、順次適切な型に置き換える必要があります。

現在の ESLint 設定(.eslintrc.cjs

js
overrides: [
  {
    // テストファイル: any を許容
    files: ['**/__tests__/**', '**/*.test.ts', '**/*.test.tsx', '**/*.spec.ts', '**/*.spec.tsx'],
    rules: { '@typescript-eslint/no-explicit-any': 'off' },
  },
  {
    // Storybook ストーリー: any と exhaustive-deps を許容
    files: ['**/*.stories.tsx', '**/stories/**/*.ts', '**/stories/**/*.tsx'],
    rules: {
      '@typescript-eslint/no-explicit-any': 'off',
      'react-hooks/exhaustive-deps': 'off',
    },
  },
  {
    // スクリプト: any, unused-vars, var-requires を許容
    files: ['scripts/**', 'vitest.setup.ts'],
    rules: {
      '@typescript-eslint/no-explicit-any': 'off',
      '@typescript-eslint/no-unused-vars': 'off',
      '@typescript-eslint/no-var-requires': 'off',
      'no-control-regex': 'off',
    },
  },
]

対象ファイル一覧

テストファイル(no-explicit-any 許容中)

ファイルany 使用箇所の概要
electron/services/__tests__/LogWatcherService.test.tsモックの戻り値型(12箇所)
electron/database/__tests__/MatchRepository.test.tsクエリ結果のキャスト
electron/database/__tests__/ProfileRepository.test.tsクエリ結果のキャスト
electron/database/__tests__/StatsService.test.tsクエリ結果のキャスト
electron/ipc/__tests__/MatchHandlers.test.tsIPCイベントモック
electron/ipc/__tests__/ProfileHandlers.test.tsIPCイベントモック(2箇所)
electron/ipc/__tests__/SeasonHandlers.test.tsモックの戻り値型(3箇所)
src/store/sync/compositeAdapter.test.tsアダプターモック
src/store/useOverlayStore.test.tsストアの partial モック(3箇所)
src/components/common/__tests__/TabErrorBoundary.test.tsxコンポーネントprops モック
src/components/tabs/browser-automation/hooks/__tests__/useBrowserAutomationState.test.tselectronAPI モック
src/components/tabs/db-viewer/components/__tests__/MatchDetailView.test.tsxルーター/コンテキスト モック
src/components/tabs/db-viewer/hooks/__tests__/useMatchListState.test.tselectronAPI モック
src/components/tabs/log-analysis/hooks/__tests__/useLogAnalysisState.test.tselectronAPI モック
src/components/tabs/log-analysis/hooks/__tests__/useProfileSelection.test.tselectronAPI モック
src/components/tabs/log-analysis/hooks/__tests__/useRealtimeDeckTracker.test.tselectronAPI モック
src/components/tabs/log-analysis/hooks/__tests__/useRealtimeWatcherControls.test.tselectronAPI モック
src/components/tabs/log-analysis/hooks/__tests__/useStaticAnalysis.test.tselectronAPI モック
src/components/tabs/log-analysis/hooks/__tests__/useStatisticsComputation.test.tsデータモック
src/components/tabs/player-dashboard/hooks/__tests__/useCharacterMatchups.test.tsデータモック
src/components/tabs/player-dashboard/hooks/__tests__/useSeasonAnalytics.test.tselectronAPI モック
src/components/tabs/realtime-analysis/hooks/__tests__/useBrowserAutomation.test.tselectronAPI モック
src/hooks/__tests__/useMatchConverter.test.tselectronAPI モック
src/screens/bp-opponent/__tests__/BPOpponentContainer.test.tsxルーターモック

Storybook ストーリー(no-explicit-any 許容中)

ファイルany 使用箇所の概要
src/stories/common/CharacterAvatarChip.stories.tsxStory args 型
src/stories/common/CharacterTile.stories.tsxStory args 型
src/stories/common/ControlPanelHeader.stories.tsxStory args 型
src/stories/common/ProfileManager.stories.tsxモックデータ型
src/stories/db-viewer/WinRatePanel.stories.tsxStory args 型
src/stories/db-viewer/mocks.tsモックデータ
src/stories/info/AnnouncementManager.stories.tsxStory args 型
src/stories/log-analysis/LogAnalysisStatisticsView.stories.tsxStory args 型
src/stories/log-analysis/LogAnalysisTab.stories.tsxStory args 型
src/stories/log-analysis/mocks.tsモックデータ
src/stories/player-dashboard/OpponentsFrequentListView.stories.tsxStory args 型(2箇所)
src/stories/player-dashboard/DashboardHeaderSection.stories.tsxStory args 型
src/stories/player-dashboard/PlayerDashboardTab.stories.tsxStory args 型
src/stories/settings/ClockSettings.stories.tsxStory args 型
src/stories/settings/CustomAreaSettings.stories.tsxStory args 型
src/stories/settings/FontSettings.stories.tsxStory args 型
src/stories/settings/OverlayWindowSizeSection.stories.tsxStory args 型
src/stories/settings/ThemeSelector.stories.tsxStory args 型

スクリプト(no-explicit-any + no-unused-vars 許容中)

ファイルany 使用箇所の概要
scripts/debug/compare-log-parsers.tsパーサー出力の型(10箇所)
scripts/debug/check-picks.tsDBクエリ結果
scripts/debug/verify_available_chars.tsDBクエリ結果
scripts/debug/verify_db_available_chars.tsDBクエリ結果
scripts/debug/verify_db_schema_logic.tsDBクエリ結果
scripts/log/analyze-log/index.tsパーサー出力
scripts/simulate-stream.tsストリームデータ

その他

ファイル内容
vitest.setup.tswindow.electronAPI の型キャスト(2箇所)

修正アプローチ案

優先度 高: テストファイル

テストのモックにおける any は、モック対象の実際の型インターフェースを定義することで解消できます。

typescript
// Before
const mockDb = {
  getMatches: vi.fn().mockResolvedValue([]),
} as any;

// After
const mockDb = {
  getMatches: vi.fn().mockResolvedValue([]),
} as unknown as ElectronDatabaseAPI;

または、vi.fn<ActualType>() で型付きモック関数を使用。

優先度 中: Storybook ストーリー

Storybook の StoryObj ジェネリクスにコンポーネントの props 型を渡すことで解消。

typescript
// Before
export const Default: Story = { args: { data: mockData as any } };

// After
export const Default: StoryObj<typeof MyComponent> = { args: { data: mockData } };

優先度 低: スクリプト・デバッグツール

スクリプトやデバッグツールは運用コードではないため、最優先度ではありません。必要に応じて対応。

進捗トラッキング

このファイルの各エントリを修正したら、該当行を取り消し線でマークし、overrides から該当ルールを削除できるか確認してください。全ファイルの修正が完了したら、ESLint override を削除し、このドキュメントも削除します。