Skip to content

[CODE REVIEW] 複数のコード品質問題: TypeScript strict無効/Node.js 18 EOL/test_genai.js残存/空catchブロック #3

Description

@stewroux

深刻度: MEDIUM / LOW

日次コードレビューで発見した複数のコード品質問題をまとめて報告します。


1. TypeScript strict モードが無効 [MEDIUM]

ファイル: tsconfig.json (line 26)

"strict": false

strict: false の場合、以下のチェックが無効になります:

  • strictNullChecks → null/undefined の型安全なアクセスが保証されない
  • noImplicitAny → 暗黙的な any 型が許容される

影響例: services/geminiService.tsJSON.parse(jsonText) の結果を as TranslationBlock[] で直接キャストしており、実行時エラーが潜在する可能性があります。

修正: tsconfig.json"strict": true に変更し、型エラーを修正する。


2. Node.js 18 が CI で使用されている(EOL済み) [MEDIUM]

ファイル: .github/workflows/ci.yml (line 15)

node-version: '18'

Node.js 18 は 2025年4月にEOL(サポート終了) を迎えています。セキュリティパッチが提供されなくなります。

修正: Node.js 20 LTS または 22 LTS への更新(本PRで対応済み)。


3. test_genai.js がリポジトリルートに残存 [LOW]

ファイル: test_genai.js

  • dotenv パッケージをインポートしているが、package.json の依存関係に含まれていない
  • 実行しても dotenv が見つからずエラーになる
  • テスト/開発スクリプトを本番コードと同じ場所に置くべきではない

修正:

git rm test_genai.js
# または scripts/ ディレクトリに移動 + package.json に dotenv を devDependencies として追加

4. 空の catch ブロック [LOW]

ファイル: components/ResultDisplay.tsx (line ~91)

} catch (e) { /* Ignore */ }

Canvas の getImageData 呼び出し時のエラーをサイレントに無視しています。CORS制限や無効なピクセル座標など、デバッグが困難なエラーが隠蔽される可能性があります。

修正:

} catch (e) {
  if (process.env.NODE_ENV === 'development') console.warn('getImageData failed:', e);
}

5. AIレスポンスの型バリデーション欠如 [MEDIUM]

ファイル: services/geminiService.ts (line 75)

const parsedJson = JSON.parse(jsonText);
return parsedJson as TranslationBlock[];

Gemini APIからの応答を検証なしに直接キャストしています。APIが予期しないスキーマを返した場合、実行時エラーが発生します。

修正案:

function isTranslationBlockArray(data: unknown): data is TranslationBlock[] {
  return Array.isArray(data) && data.every(item =>
    typeof item === 'object' && item !== null &&
    'japaneseText' in item && 'englishText' in item && 'boundingBox' in item
  );
}

const parsedJson = JSON.parse(jsonText);
if (!isTranslationBlockArray(parsedJson)) {
  throw new Error('Invalid API response format');
}
return parsedJson;

このIssueは自動コードレビューエージェントにより 2026-05-09 に作成されました。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions