mcpField
F
fact-check

fact-check

github.com/leonardomsoテスト・品質66.5k333 回インストール21 週間前に更新
リポジトリ

fact-check について

fact-checkは、JavaScriptの概念ドキュメントの技術的な正確さを確認するスキルです。コード例、MDNや仕様への参照、外部リソース、本文中の技術的な主張を確認する手順を示します。

主な機能

  1. 01コードの出力と動作の検証
  2. 02MDNリンクとAPI記述の確認
  3. 03ECMAScript仕様との照合
  4. 04外部学習リソースのレビュー
  5. 05技術的主張と誤解の監査

活用シーン

  1. 01公開前の新しい概念ページのレビュー
  2. 02大幅な編集後の正確性確認
  3. 03コミュニティからの投稿の監査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/leonardomso/33-js-concepts --skill fact-check

インストール後、Claude Code で/fact-checkを入力して読み込まれたか確認します。

詳細

スキル:JavaScript ファクトチェッカー

このスキルを使用して、33 JavaScript Concepts プロジェクトの概念ドキュメントページの技術的な正確性を検証します。これにより、JavaScript に関する誤情報の拡散を防ぎます。

使用するタイミング

  • 新しい概念ページを公開する前
  • 既存のコンテンツに大幅な編集を加えた後
  • コミュニティからのコントリビューションをレビューするとき
  • 新しい JavaScript 機能に合わせてページを更新するとき
  • 既存コンテンツの定期的な正確性監査

防止する問題

  • JavaScript の動作に関する誤った主張
  • 古い情報(ES6 以前のパターンを現在も使われているものとして紹介するなど)
  • 記載された出力が得られないコード例
  • 壊れている、または誤解を招く外部リソースへのリンク
  • よくある誤解を事実として述べること
  • ブラウザー固有の動作を普遍的なものとして紹介すること
  • 不正確な API の説明

ファクトチェックの方法

完全なファクトチェックを行うには、次の5つのフェーズを順番に実施してください。

フェーズ 1:コード例の検証

概念ページに含まれるすべてのコード例の正確性を検証する必要があります。

手順
  1. ドキュメント内のすべてのコードブロックを特定します

  2. コードブロックごとに:

    • コードと出力コメント(例:// "string")を読みます
    • コードを頭の中で実行するか、JavaScript 環境でテストします
    • 出力がコメントの記載と一致することを確認します
    • 変数名とロジックが正しいことを確認します
  3. 「誤り」の例(❌ のマークがあるもの)について:

    • 実際に誤った動作や予期しない動作が起きることを確認します
    • 誤りである理由の説明が正確であることを確認します
  4. 「正しい」例(✓ のマークがあるもの)について:

    • 記載どおりに動作することを確認します
    • 現在のベストプラクティスに従っていることを確認します
  5. プロジェクトのテストを実行します:

    # Run all tests
    npm test
    
    # Run tests for a specific concept
    npm test -- tests/fundamentals/call-stack/
    npm test -- tests/fundamentals/primitive-types/
    
  6. テストカバレッジを確認します:

    • /tests/{category}/{concept-name}/ を確認します
    • 主要なコード例を対象にしたテストがあることを確認します
    • テストカバレッジのない例にフラグを立てます
コード検証チェックリスト
確認項目確認方法
console.log の出力がコメントと一致しているコードを実行するか、頭の中で追跡する
変数の名前と使い方が正しいロジックを読み通す
関数が期待される値を返す実行の流れを追う
非同期コードが記載された順序で解決されるイベントループを理解する
エラーの例で実際に例外がスローされるtry/catch でテストする
配列/オブジェクトのメソッドが正しい型を返すMDN で確認する
typeof の結果が正確であるよく使われるケースをテストする
関連する場合、厳格モードでの動作に触れている例が厳格モードに依存するか確認する
よくある出力の誤り
// Watch for these common mistakes:

// 1. typeof null
typeof null        // "object" (not "null"!)

// 2. Array methods that return new arrays vs mutate
const arr = [1, 2, 3]
arr.push(4)        // Returns 4 (length), not the array!
arr.map(x => x*2)  // Returns NEW array, doesn't mutate

// 3. Promise resolution order
Promise.resolve().then(() => console.log('micro'))
setTimeout(() => console.log('macro'), 0)
console.log('sync')
// Output: sync, micro, macro (NOT sync, macro, micro)

// 4. Comparison results
[] == false        // true
[] === false       // false
![]                // false (empty array is truthy!)

// 5. this binding
const obj = {
  name: 'Alice',
  greet: () => console.log(this.name)  // undefined! Arrow has no this
}

フェーズ 2:MDN ドキュメントの検証

JavaScript の API、メソッド、動作に関する主張は、すべて MDN のドキュメントに沿っている必要があります。

手順
  1. すべての MDN リンクを確認します:

    • ドキュメント内の MDN リンクをすべて開きます
    • リンクが 404 ではなく 200 を返すことを確認します
    • リンク先のページが、参照している内容に一致していることを確認します
  2. API の説明を検証します:

    • メソッドのシグネチャを MDN と比較します
    • パラメーター名と型を確認します
    • 戻り値の型を確認します
    • エッジケースでの動作を確認します
  3. 非推奨の API を確認します:

    • MDN の非推奨警告を確認します
    • 非推奨のメソッドを現行のものとして教えている場合は、フラグを立てます
  4. ブラウザー互換性に関する主張を検証します:

    • MDN の互換性テーブルと照合します
    • より広範なサポート状況について Can I Use を確認します
MDN リンクのパターン
コンテンツの種類MDN URL のパターン
Web APIhttps://developer.mozilla.org/en-US/docs/Web/API/{APIName}
グローバルオブジェクトhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/{Object}
文https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/{Statement}
演算子https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/{Operator}
HTTPhttps://developer.mozilla.org/en-US/docs/Web/HTTP
MDN で確認すべき項目
主張の種類確認する内容
メソッドのシグネチャパラメーター、省略可能なパラメーター、戻り値の型
戻り値正確な型と取りうる値
副作用変更を加えるか? 何に影響するか?
例外どのようなエラーが発生する可能性があるか?
ブラウザーのサポート状況互換性テーブル
非推奨の状況非推奨を示す警告があるか?

フェーズ 3:ECMAScript 仕様への準拠

JavaScript の細かな動作を確認するには、ECMAScript 仕様で検証します。

仕様を確認すべき場合
  • 境界ケースや通常とは異なる動作
  • 「JavaScript の内部での動作」に関する主張
  • 型変換のルール
  • 演算子の優先順位
  • 実行順序の保証
  • 「常に」「決して」「保証される」といった言葉を含む主張
仕様の参照方法

ECMAScript 仕様はこちらです:https://tc39.es/ecma262/

概念仕様のセクション
型変換Abstract Operations(7.1)
等価性Abstract Equality Comparison(7.2.14)、Strict Equality(7.2.15)
typeofThe typeof Operator(13.5.3)
オブジェクトOrdinary and Exotic Objects' Behaviours(10)
関数ECMAScript Function Objects(10.2)
this のバインディングResolveThisBinding(9.4.4)
PromisePromise Objects(27.2)
イテレーションIteration(27.1)
仕様による検証例
// Claim: "typeof null returns 'object' due to a bug"
// Spec says: typeof null → "object" (Table 41)
// Historical context: This is a known quirk from JS 1.0
// Verdict: ✓ Correct, though calling it a "bug" is slightly informal

// Claim: "Promises always resolve asynchronously"
// Spec says: Promise reaction jobs are enqueued (27.2.1.3.2)
// Verdict: ✓ Correct - even resolved promises schedule microtasks

// Claim: "=== is faster than =="
// Spec says: Nothing about performance
// Verdict: ⚠️ Needs nuance - this is implementation-dependent

フェーズ 4:外部リソースの検証

記事、動画、コースなど、すべての外部リンクを検証する必要があります。

手順
  1. リンクにアクセスできるか確認する:

    • 各外部リンクをクリックします
    • ページが読み込まれることを確認します(404 や有料限定ではないこと)
    • 別の URL へのリダイレクトがあれば記録します
  2. コンテンツの正確性を確認する:

    • リソースをざっと読み、明らかな誤りがないか確認します
    • JavaScript が中心の内容であることを確認します(C#、Python、Java ではないこと)
    • アンチパターンを教えていないことを確認します
  3. 公開日を確認する:

    • 非同期処理やモジュールなど、時間の影響を受けやすいトピックでは、最近のコンテンツを優先します
    • ES6 以降のトピックについては、2015 年以前のリソースにフラグを付けます
  4. 説明の正確性を確認する:

    • 説明はリソースで実際に扱われている内容と一致していますか?
    • 説明は具体的ですか(一般的な説明ではありませんか)?
外部リソースのチェックリスト
確認項目合格基準
リンクが機能する200 を返し、コンテンツが読み込まれる
有料限定ではない無料でアクセスできる(または、有料であることが明記されている)
JavaScript が中心主に他の言語を扱う内容ではない
古くない最新の JS トピックでは 2015 年以降
説明が正確説明が実際の内容と一致する
アンチパターンがない悪い慣行を教えていない
信頼できる提供元著名で信頼できる作成者による
外部リソースに見られる注意すべき兆候
  • ES6 以降のトピックで var をあらゆる場面で使用している
  • Promise や非同期処理に関するコンテンツでコールバックを使用している
  • 最新の DOM 操作方法として jQuery を教えている
  • JavaScript に関する事実誤認が含まれている
  • タイムスタンプへのリンクがない 2 時間を超える動画
  • 主に別の言語を扱うコンテンツ
  • 非推奨であることに触れずに非推奨 API を使用している

フェーズ 5:技術的な主張の監査

JavaScript の動作に関する説明文の主張をすべて確認します。

検証が必要な主張
主張の種類検証方法
パフォーマンスに関する主張ベンチマークまたは注意書きが必要
ブラウザーの動作対象ブラウザーを明記し、MDN で確認する
歴史に関する主張日付やバージョンを確認する
「常に」または「決して」という表現例外がないか確認する
比較(X と Y)双方が正確に説明されているか確認する
技術的な主張に見られる注意すべき兆候
  • 例外に触れずに「常に」または「決して」と述べている
  • ベンチマークのないパフォーマンスに関する主張
  • 対象ブラウザーを明記していないブラウザーの動作に関する主張
  • 違いを単純化しすぎた比較
  • 日付のない歴史に関する主張
  • 仕様への参照がない「JavaScript の動作」に関する主張
検証すべき主張の例
❌ "async/await is always better than Promises"
→ Verify: Not always - Promise.all() is better for parallel operations

❌ "JavaScript is an interpreted language"
→ Verify: Modern JS engines use JIT compilation

❌ "Objects are passed by reference"
→ Verify: Technically "passed by sharing" - the reference is passed by value

❌ "=== is faster than =="
→ Verify: Implementation-dependent, not guaranteed by spec

✓ "JavaScript is single-threaded"
→ Verify: Correct for the main thread (Web Workers are separate)

✓ "Promises always resolve asynchronously"
→ Verify: Correct per ECMAScript spec

JavaScript に関するよくある誤解

以下の誤解が事実として述べられていないか注意してください。

型システムに関する誤解
誤解実際のところ確認方法
typeof null === "object" は意図された仕様である互換性のために修正できない、JS 1.0 由来のバグです歴史的背景、TC39 の議論
JavaScript には型がないJS は動的型付けであり、型がないわけではありませんECMAScript 仕様で型が定義されています
== は常に間違いである== null は null と undefined の両方をチェックするため、正当な用途があります多くのスタイルガイドでこのパターンが認められています
NaN === NaN が false なのは「間違い」IEEE 754 浮動小数点仕様に基づく意図的な仕様ですIEEE 754 標準
関数に関する誤解
誤解実際のところ確認方法
アロー関数は単に短い構文であるthis、arguments、super、new.target を持ちませんMDN、ECMAScript 仕様
var は値とともに関数スコープに巻き上げられる巻き上げられるのは宣言だけで、初期化はされませんコードで確認、MDN
クロージャは特別なオプトイン機能であるJS のすべての関数はクロージャですECMAScript 仕様
IIFE は時代遅れである一度だけの初期化に今でも役立ちます現代のコードベースでも使用されています
非同期処理に関する誤解
誤解実際のところ確認方法
Promise は並列で実行されるJS はシングルスレッドです。Promise は非同期ですが、並列ではありませんイベントループの説明
async/await は Promise とは異なるPromise を基にしたシンタックスシュガーですMDN、あらゆる thenable を await できます
setTimeout(fn, 0) はすぐに実行される現在の実行とマイクロタスクの後に実行されますイベントループ、コードで確認
await はプログラム全体を一時停止する一時停止するのは非同期関数だけで、イベントループは停止しませんコードで確認
オブジェクトに関する誤解
誤解実際のところ確認方法
オブジェクトは「参照渡し」される参照は値渡しされます(「共有渡し」)再代入テスト
const はオブジェクトを不変にするconst が防ぐのは再代入であり、変更ではありませんコードで確認
JavaScript のすべてはオブジェクトであるプリミティブはオブジェクトではありません(ラッパーはあります)typeof テスト、MDN
Object.freeze() はディープな不変性を作るシャローなため、ネストされたオブジェクトは変更できますコードで確認
パフォーマンスに関する誤解
誤解実際のところ確認方法
=== は常に == より高速である実装に依存し、仕様で保証されていませんベンチマークの結果は異なります
for ループは forEach より高速である現代のエンジンは両方を最適化します。用途によって異なりますベンチマーク
アロー関数は高速であるパフォーマンスに差はなく、動作が異なるだけですベンチマーク
DOM 操作を避ければ常に高速である個別に行うより、一括変更のほうが遅い場合がありますブラウザーや用途によって異なります

テストの統合

プロジェクトのテストスイートを実行することは、事実確認の重要な一環です。

テストコマンド
# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Run tests with coverage
npm run test:coverage

# Run tests for specific concept
npm test -- tests/fundamentals/call-stack/
npm test -- tests/fundamentals/primitive-types/
npm test -- tests/fundamentals/value-reference-types/
npm test -- tests/fundamentals/type-coercion/
npm test -- tests/fundamentals/equality-operators/
npm test -- tests/fundamentals/scope-and-closures/
テストディレクトリ構造
tests/
├── fundamentals/              # Concepts 1-6
│   ├── call-stack/
│   ├── primitive-types/
│   ├── value-reference-types/
│   ├── type-coercion/
│   ├── equality-operators/
│   └── scope-and-closures/
├── functions-execution/       # Concepts 7-8
│   ├── event-loop/
│   └── iife-modules/
└── web-platform/              # Concepts 9-10
    ├── dom/
    └── http-fetch/
テストがない場合

ある概念にテストがない場合:

  1. レポートで「テストカバレッジが必要」として指摘します
  2. コード例が正しいことを手動で確認します
  3. 後続タスクとしてテストの追加を検討します

検証リソース

一次情報源
リソースURL用途
MDN Web Docshttps://developer.mozilla.orgAPI ドキュメント、ガイド、互換性
ECMAScript 仕様https://tc39.es/ecma262権威ある動作仕様
TC39 提案https://github.com/tc39/proposals新機能、ステージ
Can I Usehttps://caniuse.comブラウザー互換性
Node.js ドキュメントhttps://nodejs.org/docsNode 固有の API
V8 ブログhttps://v8.dev/blogエンジンの内部構造
プロジェクトのリソース
リソースパス用途
テストスイート/tests/コード例の検証
概念のページ/docs/concepts/現在のコンテンツ
テストの実行npm testすべてのテストを実行

ファクトチェックレポートのテンプレート

このテンプレートを使用して、調査結果を記録してください。

# Fact Check Report: [Concept Name]

**File:** `/docs/concepts/[slug].mdx`
**Date:** YYYY-MM-DD
**Reviewer:** [Name/Claude]
**Overall Status:** ✅ Verified | ⚠️ Minor Issues | ❌ Major Issues

---

## Executive Summary

[2-3 sentence summary of findings. State whether the page is accurate overall and highlight any critical issues.]

**Tests Run:** Yes/No
**Test Results:** X passing, Y failing
**External Links Checked:** X/Y valid

---

## Phase 1: Code Example Verification

| # | Description | Line | Status | Notes |
|---|-------------|------|--------|-------|
| 1 | [Brief description] | XX | ✅/⚠️/❌ | [Notes] |
| 2 | [Brief description] | XX | ✅/⚠️/❌ | [Notes] |
| 3 | [Brief description] | XX | ✅/⚠️/❌ | [Notes] |

### Code Issues Found

#### Issue 1: [Title]

**Location:** Line XX
**Severity:** Critical/Major/Minor
**Current Code:**
```javascript
// The problematic code

問題点: [問題の説明] 修正後のコード:

// The corrected code

フェーズ 2:MDN/仕様の検証

主張場所出典ステータス備考
[主張の内容]XX 行目MDN/仕様✅/⚠️/❌[備考]
MDN リンクのステータス
リンクテキストURLステータス
[テキスト][URL]✅ 200 / ❌ 404
仕様との相違点

[ECMAScript 仕様と一致しない主張がある場合は、ここに詳しく記載してください]


フェーズ 3:外部リソースの検証

リソース種類リンク内容備考
[タイトル]記事/動画✅/❌✅/⚠️/❌[備考]
リンク切れ
  1. XX 行目: [URL] - 404 Not Found
  2. YY 行目: [URL] - ドメインの有効期限切れ
内容に関する懸念
  1. [リソース名]: [懸念点 — 例:古い情報、誤った言語、アンチパターン]
説明の正確性
リソース説明は正確ですか?備考
[タイトル]✅/❌[備考]

フェーズ 4:技術的な主張の監査

主張場所判定備考
"[主張]"XX 行目✅/⚠️/❌[備考]
修正が必要な主張
  1. XX 行目: "[現在の主張]"
    • 問題点: [何が誤っているか]
    • 修正案: "[修正後の主張]"

フェーズ 5:テスト結果

テストファイル: /tests/[category]/[concept]/[concept].test.js 実行したテスト: XX 合格: XX 失敗: XX

失敗したテスト
テスト名期待値実際の値関連するドキュメントの行
[テスト][期待値][実際の値]XX 行目
カバレッジの不足

テストに対応するものがないドキュメント内の例:

  • XX 行目:[テストされていない例の説明]
  • YY 行目:[テストされていない例の説明]

問題の概要

重大(公開前に必ず修正)
  1. [問題のタイトル]
    • 場所:XX 行目
    • 問題点:[説明]
    • 修正方法:[修正方法]
主要(修正を推奨)
  1. [問題のタイトル]
    • 場所:XX 行目
    • 問題点:[説明]
    • 修正方法:[修正方法]
軽微(改善できるとよい)
  1. [問題のタイトル]
    • 場所:XX 行目
    • 提案:[改善案]

推奨事項

  1. [優先度 1]: [具体的で実行可能な推奨事項]
  2. [優先度 2]: [具体的で実行可能な推奨事項]
  3. [優先度 3]: [具体的で実行可能な推奨事項]

検証チェックリスト

  • すべてのコード例で、出力が正しいことを確認済み
  • すべての MDN リンクを確認し、有効であることを確認済み
  • API の説明が MDN のドキュメントと一致
  • ECMAScript への準拠を確認済み(該当する場合)
  • すべての外部リソースへのリンクにアクセス可能
  • リソースの説明が内容を正確に表している
  • JavaScript に関するよくある誤解がない
  • 技術的な主張が正確で、適切なニュアンスを備えている
  • プロジェクトのテストを実行し、結果を確認済み
  • レポートが完成し、引き継ぎの準備ができている

承認

検証者: [名前/Claude] 日付: YYYY-MM-DD 推奨事項: ✅ 公開準備完了 | ⚠️ 先に問題を修正 | ❌ 大幅な修正が必要


---

## Quick Reference: Verification Commands

```bash
# Run all tests
npm test

# Run specific concept tests
npm test -- tests/fundamentals/call-stack/

# Check for broken links (if you have a link checker)
# Install: npm install -g broken-link-checker
# Run: blc https://developer.mozilla.org/... -ro

# Quick JavaScript REPL for testing
node
> typeof null
'object'
> [1,2,3].map(x => x * 2)
[ 2, 4, 6 ]

まとめ

概念ページをファクトチェックする際は、次の手順に従ってください。

  1. まずテストを実行する — npm test でコードのエラーを自動的に検出できます
  2. すべてのコード例を検証する — 出力コメントが実際の動作と一致している必要があります
  3. すべての MDN リンクを確認する — リンク切れや不正確な説明は信頼性を損ないます
  4. 外部リソースを検証する — アクセス可能で、正確かつ JavaScript に焦点を当てた内容である必要があります
  5. 技術的な主張を監査する — 誤解や根拠のない記述に注意してください
  6. すべてを記録する — 一貫性のある徹底したレビューには、レポートのテンプレートを使用してください

重要: 読者は、正しい JavaScript を学ぶために私たちを信頼しています。誤った情報が一つあるだけで、解消に何年もかかる混乱を招くことがあります。ファクトチェックを真剣に行ってください。

コメント