{"id":130,"date":"2026-10-23T19:53:47","date_gmt":"2026-10-23T10:53:47","guid":{"rendered":"https:\/\/blog.himajin.ddo.jp\/?p=130"},"modified":"2026-10-24T09:48:23","modified_gmt":"2026-10-24T00:48:23","slug":"rea%e5%85%a5%e9%96%80%ef%bc%9a%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ae%e5%86%85%e9%83%a8%e5%8b%95%e4%bd%9c%e3%82%92%e3%80%81%e6%a0%b9%e6%8b%a0%e3%82%92%e3%81%9f%e3%81%a9%e3%82%8a%e3%81%aa%e3%81%8c","status":"publish","type":"post","link":"https:\/\/blog.himajin.ddo.jp\/?p=130","title":{"rendered":"REA\u5165\u9580\uff1a\u30a2\u30d7\u30ea\u306e\u5185\u90e8\u52d5\u4f5c\u3092\u3001\u6839\u62e0\u3092\u305f\u3069\u308a\u306a\u304c\u3089\u8abf\u3079\u308b"},"content":{"rendered":"\n<p>\u300c\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3069\u3053\u3092\u8aad\u307f\u8fbc\u3093\u3067\u308b\u3093\u3084\u308d\u3046\uff1f\u300d\u3092\u3001\u5143\u30b3\u30fc\u30c9\u306e\u4f4d\u7f6e\u3068\u5bfe\u5fdc\u3055\u305b\u3066\u8abf\u3079\u305f\u3044\u3002REA\u3092\u4f7f\u3063\u3066\u3001\u81ea\u5206\u3067\u4f5c\u3063\u305f\u5c0f\u3055\u306aJavaScript\u30a2\u30d7\u30ea\u306e\u53c2\u7167\u95a2\u4fc2\u3092\u78ba\u8a8d\u3059\u308b\u3067\u3002<\/p><p><a href=\"https:\/\/github.com\/morluto\/rea\">morluto\/rea<\/a>\u306f\u3001CLI\u3084AI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306eMCP\u304b\u3089\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u8abf\u3079\u308b\u305f\u3081\u306e\u9053\u5177\u3084\u3002JavaScript\u306e\u9759\u7684\u89e3\u6790\u3068\u3001Ghidra\u306a\u3069\u306e\u89e3\u6790\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3046\u30cd\u30a4\u30c6\u30a3\u30d6\u30d0\u30a4\u30ca\u30ea\u306e\u8abf\u67fb\u306f\u3001\u5225\u306e\u5165\u53e3\u306b\u306a\u3063\u3066\u308b\u3067\u3002<\/p><h2 id=\"goal-130\">\u4eca\u56de\u306e\u30b4\u30fc\u30eb\u3068\u74b0\u5883<\/h2><p>\u30b4\u30fc\u30eb\u306f\u3001<code>index.js<\/code>\u306e1\u884c\u76ee\u304c<code>search.js<\/code>\u3092\u53c2\u7167\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u3001REA\u306eJSON\u3068\u5143\u30d5\u30a1\u30a4\u30eb\u306e\u4e21\u65b9\u3067\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3084\u3002\u984c\u6750\u306f\u81ea\u5206\u3067\u4f5c\u308b3\u30d5\u30a1\u30a4\u30eb\u3060\u3051\u3002\u30a2\u30d7\u30ea\u3092\u5b9f\u884c\u3057\u305f\u7d50\u679c\u3068\u3001\u30bd\u30fc\u30b9\u3092\u8aad\u3093\u3067\u5f97\u305f\u89e3\u6790\u7d50\u679c\u306f\u5206\u3051\u3066\u898b\u308b\u3067\u3002<\/p><p><strong>\u5b9f\u884c\u3057\u3066\u78ba\u8a8d\u3057\u305f\u7bc4\u56f2\uff1a<\/strong>2026\u5e7410\u670824\u65e5\u3001Windows 11 x64\u3001PowerShell 7.6.5\u3001Node.js 22.20.0\u3001npm 11.12.1\u3001\u516c\u958bnpm\u30d1\u30c3\u30b1\u30fc\u30b8REA 6.7.0\u3067\u3001\u3053\u306e\u984c\u6750\u306e\u5b9f\u884c\u30fb\u9759\u7684\u89e3\u6790\u30fb\u4e0b\u8a18\u306eJSON\u62bd\u51fa\u3092\u78ba\u8a8d\u3057\u305f\u3067\u3002npm\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u4fdd\u5b58\u5148\u3060\u3051\u3092\u691c\u8a3c\u7528\u30d5\u30a9\u30eb\u30c0\u30fc\u3078\u5909\u3048\u3066\u5b9f\u884c\u3057\u305f\u3002OS\u304b\u3089\u306e\u65b0\u898f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3001\u5225\u306e\u30a2\u30d7\u30ea\u3084ASAR\u3001Ghidra\u306b\u3088\u308b\u30cd\u30a4\u30c6\u30a3\u30d6\u89e3\u6790\u306f\u4eca\u56de\u5b9f\u884c\u3057\u3066\u3078\u3093\u3067\u3002<\/p><h2>1\uff0e\u30c4\u30fc\u30eb\u306e\u6e96\u5099<\/h2><p>Windows 11 x64\u3092\u4f7f\u3046\u3067\u3002\u307e\u305a\u30b9\u30bf\u30fc\u30c8\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u7aef\u672b\u3092\u958b\u304d\u3001PowerShell 7\u304c\u306a\u3051\u308c\u3070\u6b21\u3067\u5165\u308c\u3066\u306a\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u30b9\u30bf\u30fc\u30c8\u30e1\u30cb\u30e5\u30fc\u3067<strong>\u300cPowerShell 7\u300d<\/strong>\u3092\u63a2\u3057\u3066\u958b\u304d\u76f4\u3059\u3093\u3084\u3002\u4ee5\u4e0b\u306e\u4f5c\u696d\u306f\u305d\u306e\u753b\u9762\u3067\u884c\u3046\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>winget install --id Microsoft.PowerShell --source winget<\/code><\/pre><p><a href=\"https:\/\/learn.microsoft.com\/powershell\/scripting\/install\/installing-powershell-on-windows\">PowerShell\u516c\u5f0f\u306eWindows\u5411\u3051\u5c0e\u5165\u6848\u5185<\/a>\u3082\u78ba\u8a8d\u3057\u3066\u306a\u3002\u6b21\u306b<a href=\"https:\/\/nodejs.org\/en\/download\">Node.js\u516c\u5f0f\u30b5\u30a4\u30c8<\/a>\u3067\u3001Windows x64\u7528\u306e24\u7cfbLTS\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u30fc\u3092\u9078\u3093\u3067\u5165\u308c\u308b\u3067\u3002PowerShell 7\u3092\u958b\u304d\u76f4\u3057\u3066\u3001\u6b21\u3092\u5b9f\u884c\u3057\u3066\u306a\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>$PSVersionTable.PSVersion\nnode --version\nnpm.cmd --version<\/code><\/pre><p>PowerShell\u306f7\u7cfb\u3001Node.js\u306f\u3053\u306e\u8a18\u4e8b\u3067\u56fa\u5b9a\u3059\u308bREA 6.7.0\u306e\u5bfe\u5fdc\u7bc4\u56f2\u3092\u4f7f\u3046\u3067\u3002\u516c\u958b\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u6761\u4ef6\u306fNode.js <code>^22.19.0 || ^24.11.0 || &gt;=26.0.0<\/code>\u3084\u300222\u7cfb\u306a\u308922.19.0\u4ee5\u4e0a\u300124\u7cfb\u306a\u308924.11.0\u4ee5\u4e0a\u304c\u76ee\u5b89\u306b\u306a\u308b\u3067\u3002\u4eca\u56de\u306f<code>npx.cmd<\/code>\u304b\u3089\u547c\u3073\u51fa\u3059\u304b\u3089\u3001REA\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u305b\u3048\u3078\u3093\u3002<\/p><p><strong>\u4eca\u56de\u306eJavaScript\u9759\u7684\u89e3\u6790\u3067\u306f\u3001AI\u30b5\u30fc\u30d3\u30b9\u306e\u5951\u7d04\u30fbAPI\u30ad\u30fc\u30fbMCP\u3078\u306e\u767b\u9332\u30fbGhidra\u306f\u4f7f\u308f\u3078\u3093\u3002<\/strong>\u3053\u308c\u306f\u4eca\u56de\u306e\u30b3\u30de\u30f3\u30c9\u306b\u9650\u3063\u305f\u8a71\u3084\u3002Ghidra\u304cREA\u5168\u822c\u3067\u4e0d\u8981\u3068\u3044\u3046\u610f\u5473\u3084\u306a\u304f\u3001\u30cd\u30a4\u30c6\u30a3\u30d6\u89e3\u6790\u3067Ghidra Provider\u3092\u9078\u3076\u5834\u5408\u306f\u5225\u9014\u5fc5\u8981\u306b\u306a\u308b\u3067\u3002<\/p><h2>2\uff0e\u984c\u6750\u306e\u4f5c\u6210<\/h2><p><strong>\u3053\u3053\u306f\u6e96\u5099\u3060\u3051\u3084\u3002\u307e\u3060REA\u3067\u89e3\u6790\u305b\u3048\u3078\u3093\u3067\u3002<\/strong>\u81ea\u5206\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u4e0b\u306b\u7df4\u7fd2\u5834\u6240\u3092\u4f5c\u308a\u3001\u305d\u3053\u3078\u79fb\u52d5\u3059\u308b\u3093\u3084\u3002\u540c\u540d\u306e\u7df4\u7fd2\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308b\u3068\u6b21\u306e\u64cd\u4f5c\u3067\u4e0a\u66f8\u304d\u3059\u308b\u304b\u3089\u3001\u6b8b\u3057\u305f\u3044\u3082\u306e\u304c\u3042\u308b\u5834\u5408\u306f\u5225\u306e\u7df4\u7fd2\u30d5\u30a9\u30eb\u30c0\u30fc\u540d\u306b\u3057\u3066\u306a\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>New-Item -ItemType Directory -Force \"$env:USERPROFILE\\github-practice\\rea\" | Out-Null\nSet-Location \"$env:USERPROFILE\\github-practice\\rea\"<\/code><\/pre><p><code>sample-app<\/code>\u30d5\u30a9\u30eb\u30c0\u30fc\u30683\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u308b\u3067\u3002<code>@'<\/code>\u3068<code>'@<\/code>\u3092\u542b\u3081\u3001\u30d6\u30ed\u30c3\u30af\u5168\u4f53\u3092PowerShell 7\u3078\u8cbc\u308a\u4ed8\u3051\u3066\u306a\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>New-Item -ItemType Directory -Force sample-app | Out-Null\n@'\n{\n  \"name\": \"rea-practice\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.js\"\n}\n'@ | Set-Content sample-app\/package.json -Encoding UTF8\n@'\nexport function findItem(items, word) {\n  return items.filter(item =&gt; item.includes(word));\n}\n'@ | Set-Content sample-app\/search.js -Encoding UTF8\n@'\nimport { findItem } from \".\/search.js\";\nconst result = findItem([\"apple\", \"pear\"], \"app\");\nconsole.log(result);\n'@ | Set-Content sample-app\/index.js -Encoding UTF8\nGet-ChildItem sample-app -Name<\/code><\/pre><p>\u6e96\u5099\u304c\u7d42\u308f\u308b\u3068\u3001\u6b21\u306e3\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u308b\u3067\u3002\u8868\u793a\u9806\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u5909\u308f\u3063\u3066\u3082\u69cb\u308f\u3078\u3093\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>index.js\npackage.json\nsearch.js<\/code><\/pre><div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse\"><thead><tr><th style=\"padding:12px;border:1px solid #bfd0db\">\u30d5\u30a1\u30a4\u30eb<\/th><th style=\"padding:12px;border:1px solid #bfd0db\">\u5f79\u5272<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>package.json<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u540d\u524d\u30fb\u7248\u30fb\u5165\u53e3\u3092\u8a18\u9332\u3059\u308b\u3002<code>type: module<\/code>\u3067ES Modules\u3068\u3057\u3066\u6271\u3046\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>index.js<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\"><code>search.js<\/code>\u304b\u3089<code>findItem<\/code>\u3092\u8aad\u307f\u8fbc\u307f\u3001\u7d50\u679c\u3092\u8868\u793a\u3059\u308b\u5165\u53e3\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>search.js<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u914d\u5217\u304b\u3089\u6307\u5b9a\u3057\u305f\u6587\u5b57\u3092\u542b\u3080\u8981\u7d20\u3092\u9078\u3076\u3001\u81ea\u4f5c\u306e\u95a2\u6570\u3084\u3002<\/td><\/tr><\/tbody><\/table><\/div><h2>3\uff0e\u984c\u6750\u306e\u52d5\u4f5c\u78ba\u8a8d<\/h2><p>\u3053\u308c\u306f<strong>\u81ea\u4f5c\u30a2\u30d7\u30ea\u3092Node.js\u3067\u52d5\u304b\u3059\u78ba\u8a8d<\/strong>\u3084\u3002REA\u306e\u89e3\u6790\u3068\u306f\u5225\u3084\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>node .\\sample-app\\index.js<\/code><\/pre><p>\u4eca\u56de\u306e\u5b9f\u884c\u7d50\u679c\u306f\u3053\u3046\u3084\u3063\u305f\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>[ 'apple' ]<\/code><\/pre><p><code>apple<\/code>\u306f<code>app<\/code>\u3092\u542b\u307f\u3001<code>pear<\/code>\u306f\u542b\u307e\u3078\u3093\u304b\u3089\u3001\u3053\u306e\u7d50\u679c\u306b\u306a\u308b\u3093\u3084\u3002\u3053\u306e\u8868\u793a\u306f\u81ea\u4f5c\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u51fa\u529b\u3067\u3001REA\u304c\u63a8\u6e2c\u3057\u305f\u5b9f\u884c\u7d50\u679c\u3084\u306a\u3044\u3067\u3002\u3053\u3053\u307e\u3067\u3067\u984c\u6750\u306e\u6e96\u5099\u306f\u5b8c\u4e86\u3084\u3002<\/p><h2>4\uff0e\u89e3\u6790\u306e\u5b9f\u884c<\/h2><p><strong>\u3053\u3053\u304b\u3089REA\u3092\u5b9f\u884c\u3059\u308b\u3067\u3002<\/strong>\u4f5c\u696d\u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u5f15\u304d\u7d9a\u304d<code>github-practice\\rea<\/code>\u3084\u3002<code>sample-app<\/code>\u306e\u4e2d\u306b\u306f\u79fb\u52d5\u305b\u3048\u3078\u3093\u3002\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306f\u30bd\u30fc\u30b9\u3092\u9759\u7684\u306b\u8aad\u3080\u3082\u306e\u3067\u3001\u984c\u6750\u306e<code>index.js<\/code>\u3092\u30a2\u30d7\u30ea\u3068\u3057\u3066\u8d77\u52d5\u3059\u308b\u64cd\u4f5c\u3084\u306a\u3044\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>$target = (Resolve-Path .\\sample-app).Path\nnpx.cmd -y rea-agents@6.7.0 analyze-javascript-application \"$target\" --format json 1&gt; rea-result.json 2&gt; rea-progress.log\n$reaExit = $LASTEXITCODE\nif ($reaExit -ne 0) {\n  Get-Content rea-result.json\n  Get-Content rea-progress.log -Tail 20\n  throw \"REA\u306e\u89e3\u6790\u304c\u5931\u6557\u3057\u305f\u3067\u3002\u4e0a\u306b\u51fa\u305f\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u3066\u306a\u3002\"\n}<\/code><\/pre><p>\u521d\u56de\u306fnpm\u304b\u3089REA\u3068\u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u53d6\u5f97\u3059\u308b\u306e\u3067\u901a\u4fe1\u304c\u767a\u751f\u3059\u308b\u3067\u3002<code>-y<\/code>\u306f\u3001\u305d\u306e\u53d6\u5f97\u78ba\u8a8d\u306b\u81ea\u52d5\u3067\u540c\u610f\u3059\u308bnpx\u306e\u6307\u5b9a\u3084\u3002\u89e3\u6790\u306eJSON\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3059\u308b\u304b\u3089\u3001\u6b63\u5e38\u7d42\u4e86\u3057\u3066\u3082\u753b\u9762\u306b\u5927\u304d\u306a\u7d50\u679c\u306f\u51fa\u3048\u3078\u3093\u3067\u3002<\/p><div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse\"><thead><tr><th style=\"padding:12px;border:1px solid #bfd0db\">\u6307\u5b9a<\/th><th style=\"padding:12px;border:1px solid #bfd0db\">\u4eca\u56de\u306e\u610f\u5473<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>rea-agents@6.7.0<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u8a18\u4e8b\u306e\u51fa\u529b\u3068\u5408\u308f\u305b\u308b\u305f\u3081\u3001\u4f7f\u3046\u516c\u958b\u7248\u3092\u56fa\u5b9a\u3057\u3066\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>analyze-javascript-application<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">JavaScript\uff0fElectron\u306e\u30a2\u30d7\u30ea\u7528\u306e\u9759\u7684\u89e3\u6790\u30b3\u30de\u30f3\u30c9\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>\"$target\"<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u89e3\u6790\u3059\u308b\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u7d76\u5bfe\u30d1\u30b9\u3084\u3002\u7a7a\u767d\u3092\u542b\u3080\u30d1\u30b9\u30821\u3064\u306e\u5f15\u6570\u3068\u3057\u3066\u6e21\u3059\u305f\u3081\u5f15\u7528\u7b26\u3092\u4ed8\u3051\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>--format json<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u7d50\u679c\u3092JSON\u3067\u51fa\u3059\u6307\u5b9a\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>1&gt; rea-result.json<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">PowerShell\u304c\u6a19\u6e96\u51fa\u529b\u3092\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3078\u4fdd\u5b58\u3059\u308b\u6307\u5b9a\u3084\u3002REA\u56fa\u6709\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3084\u306a\u3044\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>2&gt; rea-progress.log<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u9032\u6357\u3084\u8a3a\u65ad\u3092\u5225\u30d5\u30a1\u30a4\u30eb\u3078\u4fdd\u5b58\u3057\u3001JSON\u306b\u6df7\u3056\u3089\u3078\u3093\u3088\u3046\u306b\u3059\u308b\u3067\u3002<\/td><\/tr><\/tbody><\/table><\/div><h2>5\uff0e\u51fa\u529b\u306e\u8aad\u307f\u65b9<\/h2><p>\u51fa\u529b\u5168\u4f53\u306f\u9577\u3044\u304b\u3089\u3001\u307e\u305aPowerShell\u3067JSON\u3092\u8aad\u307f\u3001\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb\u6570\u3068\u69cb\u6587\u89e3\u6790\u306e\u5931\u6557\u3092\u53d6\u308a\u51fa\u3059\u3067\u3002\u4ee5\u4e0b\u306f\u540c\u3058\u4f5c\u696d\u30d5\u30a9\u30eb\u30c0\u30fc\u3067\u5b9f\u884c\u3057\u3066\u306a\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>$report = Get-Content .\\rea-result.json -Raw | ConvertFrom-Json\nif ($report.error) { throw $report.error }\n$report.normalized_result.statistics |\n  Select-Object relevant_files, parsed_javascript_files, parse_failures |\n  ConvertTo-Json<\/code><\/pre><p><strong>\u5b9f\u6e2c\u51fa\u529b\uff1a<\/strong>\u4eca\u56de\u4f5c\u3063\u305f3\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3066\u5f97\u305fJSON\u304b\u3089\u3001\u4e0a\u306e3\u9805\u76ee\u3060\u3051\u3092\u53d6\u308a\u51fa\u3057\u305f\u7d50\u679c\u3084\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>{\n  \"relevant_files\": 3,\n  \"parsed_javascript_files\": 2,\n  \"parse_failures\": 0\n}<\/code><\/pre><div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse\"><thead><tr><th style=\"padding:12px;border:1px solid #bfd0db\">\u9805\u76ee<\/th><th style=\"padding:12px;border:1px solid #bfd0db\">\u3069\u3046\u8aad\u3080\u304b<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>relevant_files: 3<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u4eca\u56de\u306e\u89e3\u6790\u3067\u95a2\u9023\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u6271\u3063\u305f\u6570\u3084\u3002\u984c\u6750\u306e3\u30d5\u30a1\u30a4\u30eb\u3068\u7167\u3089\u3057\u5408\u308f\u305b\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>parsed_javascript_files: 2<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u69cb\u6587\u3092\u89e3\u6790\u3057\u305fJavaScript\u30d5\u30a1\u30a4\u30eb\u6570\u3084\u3002<code>index.js<\/code>\u3068<code>search.js<\/code>\u306b\u5bfe\u5fdc\u3059\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>parse_failures: 0<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u4eca\u56de\u306e\u69cb\u6587\u89e3\u6790\u306e\u5931\u6557\u306f0\u4ef6\u3084\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u5168\u4f53\u304c\u6b63\u3057\u3044\u3001\u5b89\u5168\u3001\u3068\u3044\u3046\u5224\u5b9a\u3084\u306a\u3044\u3067\u3002<\/td><\/tr><\/tbody><\/table><\/div><p>\u6b21\u306b\u3001<code>imports<\/code>\u306e\u3046\u3061\u9759\u7684import\u6587\u304b\u3089\u5f97\u305f\u95a2\u4fc2\u3092\u53d6\u308a\u51fa\u3059\u3067\u3002\u95a2\u6570\u306e\u675f\u7e1b\u306a\u3069\u3092\u8868\u3059\u5225\u306e\u8fba\u307e\u3067\u5168\u90e8\u4e26\u3079\u308b\u3068\u3001\u540c\u3058import\u304b\u3089\u5f97\u305f\u8907\u6570\u306e\u95a2\u4fc2\u304c\u6df7\u3056\u308b\u305f\u3081\u3001\u3053\u306e\u4f8b\u3067\u306f<code>kind: static-import<\/code>\u306b\u7d5e\u3063\u3066\u308b\u3093\u3084\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>$report.normalized_result.graph.edges |\n  Where-Object { $_.relation -eq 'imports' -and $_.properties.kind -eq 'static-import' } |\n  ForEach-Object {\n    [pscustomobject]@{\n      source = $_.evidence.location.value.source\n      line = $_.evidence.location.value.start.line\n      relation = $_.relation\n      specifier = $_.properties.specifier\n      resolved_path = $_.properties.resolved_path\n      resolution_status = $_.properties.resolution_status\n    }\n  } | ConvertTo-Json<\/code><\/pre><p><strong>\u5b9f\u6e2c\u51fa\u529b\uff1a<\/strong>\u3053\u308c\u306fREA\u306e\u751fJSON\u5168\u4f53\u3084\u306a\u304f\u3066\u3001\u76f4\u524d\u306ePowerShell\u3067\u5fc5\u8981\u306a\u5024\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u53d6\u308a\u51fa\u3057\u305f\u8868\u793a\u3084\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>{\n  \"source\": \"index.js\",\n  \"line\": 1,\n  \"relation\": \"imports\",\n  \"specifier\": \".\/search.js\",\n  \"resolved_path\": \"search.js\",\n  \"resolution_status\": \"resolved\"\n}<\/code><\/pre><div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse\"><thead><tr><th style=\"padding:12px;border:1px solid #bfd0db\">\u9805\u76ee<\/th><th style=\"padding:12px;border:1px solid #bfd0db\">\u5143\u30b3\u30fc\u30c9\u3068\u306e\u5bfe\u5fdc<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>source: index.js<\/code>\uff0f<code>line: 1<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u6839\u62e0\u306b\u306a\u308b\u5834\u6240\u306f<code>index.js<\/code>\u306e1\u884c\u76ee\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>relation: imports<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u4ed6\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u95a2\u4fc2\u3092\u8868\u3057\u3066\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>specifier: .\/search.js<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">import\u6587\u306b\u66f8\u3044\u305f\u8aad\u307f\u8fbc\u307f\u5148\u306e\u6587\u5b57\u5217\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>resolved_path: search.js<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">REA\u304c\u984c\u6750\u306e\u4e2d\u3067\u5bfe\u5fdc\u4ed8\u3051\u305f\u30d5\u30a1\u30a4\u30eb\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>resolution_status: resolved<\/code><\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u3053\u306e\u53c2\u7167\u5148\u3092\u89e3\u6c7a\u3067\u304d\u305f\u3068\u3044\u3046\u610f\u5473\u3084\u3002\u95a2\u6570\u306e\u52d5\u4f5c\u3084\u5168\u7d4c\u8def\u307e\u3067\u4fdd\u8a3c\u3059\u308b\u3082\u306e\u3084\u306a\u3044\u3067\u3002<\/td><\/tr><\/tbody><\/table><\/div><p>\u6700\u5f8c\u306b\u5143\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a\u3057\u3066\u3001\u89e3\u6790\u7d50\u679c\u306e\u6839\u62e0\u3092\u81ea\u5206\u3067\u78ba\u304b\u3081\u308b\u3093\u3084\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>Get-Content .\\sample-app\\index.js\nGet-Content .\\sample-app\\search.js<\/code><\/pre><p><code>index.js<\/code>\u306e1\u884c\u76ee\u306f<code>import { findItem } from \".\/search.js\";<\/code>\u3001<code>search.js<\/code>\u306e1\u884c\u76ee\u306f<code>export function findItem(items, word) {<\/code>\u306b\u306a\u3063\u3066\u308b\u3067\u3002\u3053\u306e2\u3064\u3092\u7167\u3089\u3057\u5408\u308f\u305b\u308c\u3070\u3001\u300c\u3069\u3053\u304b\u3089\u4f55\u3092\u8aad\u307f\u8fbc\u3093\u3060\u304b\u300d\u3092\u8ffd\u3048\u308b\u3093\u3084\u3002<\/p><p><strong>\u6210\u529f\u306e\u76ee\u5b89\uff1a<\/strong>\u89e3\u6790\u304c\u7d42\u4e86\u30b3\u30fc\u30c90\u3067\u7d42\u308f\u308a\u3001\u3053\u306e\u984c\u6750\u30673\u30d5\u30a1\u30a4\u30eb\u30fbJavaScript 2\u30d5\u30a1\u30a4\u30eb\u30fb\u69cb\u6587\u89e3\u6790\u306e\u5931\u65570\u4ef6\u3092\u78ba\u8a8d\u3057\u3001<code>index.js<\/code>\u306e1\u884c\u76ee\u304b\u3089<code>search.js<\/code>\u3078\u306e\u53c2\u7167\u3092\u5143\u30b3\u30fc\u30c9\u3068\u5bfe\u5fdc\u4ed8\u3051\u3089\u308c\u305f\u3089\u4eca\u56de\u306e\u30b4\u30fc\u30eb\u3084\u3002JSON\u304c\u8fd4\u3063\u305f\u3053\u3068\u3060\u3051\u3067\u3001\u8abf\u67fb\u304c\u5b8c\u4e86\u3057\u305f\u3068\u306f\u305b\u3048\u3078\u3093\u3067\u3002<\/p><p>REA\u306e\u3053\u306e\u51fa\u529b\u306f\u3001\u30bd\u30fc\u30b9\u306b\u66f8\u304b\u308c\u305f\u95a2\u4fc2\u3092\u9759\u7684\u306b\u8abf\u3079\u305f\u3082\u306e\u3084\u3002\u5148\u307b\u3069\u306e<code>[ 'apple' ]<\/code>\u3068\u3044\u3046\u5b9f\u884c\u5024\u3092\u4fdd\u8a3c\u3059\u308b\u7d50\u679c\u3084\u306a\u3044\u3057\u3001\u52d5\u7684\u306b\u4f5c\u308b\u30d1\u30b9\u3084\u96e3\u8aad\u5316\u3055\u308c\u305f\u95a2\u4fc2\u304c\u5168\u90e8\u89e3\u6c7a\u3059\u308b\u3068\u3082\u9650\u3089\u3078\u3093\u3002\u51fa\u529b\u306e<code>limitations<\/code>\u3082\u78ba\u8a8d\u3057\u3066\u306a\u3002<\/p><h2 id=\"structure-130\">\u5c0e\u5165\u3068\u89e3\u6790\u306e\u6d41\u308c<\/h2><figure style=\"margin:24px 0\"><div style=\"overflow-x:auto;border:1px solid #b7cbd7;border-radius:12px\"><svg viewBox=\"0 0 1000 560\" role=\"img\" aria-label=\"\u5c0e\u5165\u3068\u89e3\u6790\u306e\u6d41\u308c\" style=\"display:block;width:100%;min-width:760px;height:auto;font-family:system-ui,sans-serif;fill:#173b52\"><defs><marker id=\"flow-arrow\" markerWidth=\"9\" markerHeight=\"9\" refX=\"8\" refY=\"4\" orient=\"auto\"><path d=\"M0 0L8 4L0 8Z\" fill=\"#267b83\"\/><\/marker><\/defs><rect x=\"20\" y=\"200\" width=\"960\" height=\"325\" rx=\"16\" fill=\"#edf5fb\" stroke=\"#7197a9\" stroke-width=\"2\"\/><text x=\"36\" y=\"230\" font-size=\"22\">\u81ea\u5206\u306ePC\uff1a\u4eca\u56de\u306e\u9759\u7684\u89e3\u6790<\/text><rect x=\"620\" y=\"25\" width=\"350\" height=\"95\" rx=\"12\" fill=\"#fff5e8\" stroke=\"#7197a9\" stroke-width=\"2\"\/><text x=\"636\" y=\"57\" font-size=\"21\">npm\u306e\u914d\u5e03\u5143\uff08PC\u306e\u5916\uff09<\/text><text x=\"636\" y=\"86\" font-size=\"18\">REA CLI\u3092\u53d6\u5f97\u3059\u308b\u5834\u6240<\/text><path d=\"M795 120V165H500V270\" fill=\"none\" stroke=\"#267b83\" stroke-width=\"3\" stroke-dasharray=\"8 6\" marker-end=\"url(#flow-arrow)\"\/><text x=\"515\" y=\"180\" font-size=\"17\">\u5c0e\u5165\u6642\uff1aCLI\u3092\u53d6\u5f97<\/text><rect x=\"50\" y=\"285\" width=\"250\" height=\"100\" rx=\"12\" fill=\"#fff\" stroke=\"#7197a9\" stroke-width=\"2\"\/><text x=\"66\" y=\"317\" font-size=\"21\">\u81ea\u4f5c\u306eJS\u30d5\u30a1\u30a4\u30eb<\/text><text x=\"66\" y=\"346\" font-size=\"18\">\u89e3\u6790\u3059\u308b\u5bfe\u8c61<\/text><rect x=\"380\" y=\"285\" width=\"250\" height=\"100\" rx=\"12\" fill=\"#fff\" stroke=\"#7197a9\" stroke-width=\"2\"\/><text x=\"396\" y=\"317\" font-size=\"21\">REA CLI<\/text><text x=\"396\" y=\"346\" font-size=\"18\">PowerShell\u3067\u5b9f\u884c<\/text><rect x=\"710\" y=\"285\" width=\"240\" height=\"100\" rx=\"12\" fill=\"#fff\" stroke=\"#7197a9\" stroke-width=\"2\"\/><text x=\"726\" y=\"317\" font-size=\"21\">rea-result.json<\/text><text x=\"726\" y=\"346\" font-size=\"18\">\u7d50\u679c\u3092\u4fdd\u5b58\u3057\u3066\u8aad\u3080<\/text><path d=\"M300 330H370\" fill=\"none\" stroke=\"#267b83\" stroke-width=\"3\"  marker-end=\"url(#flow-arrow)\"\/><text x=\"317\" y=\"315\" font-size=\"17\">\u8aad\u3080<\/text><path d=\"M630 330H700\" fill=\"none\" stroke=\"#267b83\" stroke-width=\"3\"  marker-end=\"url(#flow-arrow)\"\/><text x=\"647\" y=\"315\" font-size=\"17\">\u8868\u793a<\/text><text x=\"50\" y=\"445\" font-size=\"21\">\u5b9f\u7dda\uff1a\u4eca\u56de\u306e\u89e3\u6790\u3000\uff0f\u3000\u70b9\u7dda\uff1aCLI\u3092\u5165\u308c\u308b\u3068\u304d\u306e\u53d6\u5f97<\/text><text x=\"50\" y=\"484\" font-size=\"19\">npm\u306f\u914d\u5e03\u5143\u3002\u89e3\u6790\u3059\u308b\u305f\u3073\u306b\u7d50\u679c\u3092\u8fd4\u3059\u76f8\u624b\u3068\u3057\u3066\u306f\u63cf\u304b\u306a\u3044\u3002<\/text><\/svg><\/div><figcaption>CLI\u306e\u53d6\u5f97\u3068\u3001\u81ea\u5206\u306e\u30b3\u30fc\u30c9\u3092\u8aad\u3080\u51e6\u7406\u3092\u5206\u3051\u305f\u3067\u3002\u3053\u306e\u8a18\u4e8b\u306e\u9759\u7684\u89e3\u6790\u30b3\u30de\u30f3\u30c9\u3092\u793a\u3057\u305f\u56f3\u3067\u3001REA\u306e\u5168\u6a5f\u80fd\u304c\u5916\u90e8\u901a\u4fe1\u306a\u3057\u3067\u52d5\u304f\u3068\u4fdd\u8a3c\u3059\u308b\u3082\u306e\u3084\u306a\u3044\u3067\u3002 \u72ec\u81ea\u5236\u4f5c\u306e\u8aac\u660e\u56f3\u3067\u3001\u88fd\u54c1\u753b\u9762\u3084\u5b9f\u884c\u7d50\u679c\u3084\u306a\u3044\u3067\u3002\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u3067\u306f\u6a2a\u3078\u30b9\u30af\u30ed\u30fc\u30eb\u3057\u3066\u306a\u3002<\/figcaption><\/figure><h2>6\uff0e\u5225\u306e\u5bfe\u8c61\u3092\u89e3\u6790\u3059\u308b\u5834\u5408<\/h2><p>\u540c\u3058JavaScript\u30a2\u30d7\u30ea\u306e\u5225\u30d5\u30a9\u30eb\u30c0\u30fc\u306a\u3089\u3001\u307e\u305a<code>$target<\/code>\u306e\u30d1\u30b9\u3092\u5b9f\u5728\u3059\u308b\u5834\u6240\u3078\u5909\u3048\u308b\u3067\u3002<strong>\u5bfe\u8c61\u306e\u7a2e\u985e\u304c\u5909\u308f\u308b\u5834\u5408\u306f\u3001\u30d1\u30b9\u3092\u5909\u3048\u308b\u3060\u3051\u3067\u306f\u8db3\u308a\u3078\u3093\u3053\u3068\u304c\u3042\u308b\u3002<\/strong>\u3053\u3053\u3067\u6e21\u3057\u3066\u308b\u306e\u306fREA\u81ea\u8eab\u306e\u5f15\u6570\u3067\u3001\u89e3\u6790\u5bfe\u8c61\u30a2\u30d7\u30ea\u306e\u8d77\u52d5\u5f15\u6570\u3084\u306a\u3044\u3067\u3002<\/p><div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse\"><thead><tr><th style=\"padding:12px;border:1px solid #bfd0db\">\u5bfe\u8c61\u30fb\u76ee\u7684<\/th><th style=\"padding:12px;border:1px solid #bfd0db\">\u9078\u3076\u5165\u53e3\u3068\u5909\u3048\u308b\u3082\u306e<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border:1px solid #bfd0db\">\u5c55\u958b\u6e08\u307fJavaScript\u30a2\u30d7\u30ea\u306e\u30d5\u30a9\u30eb\u30c0\u30fc<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u4eca\u56de\u3068\u540c\u3058<code>analyze-javascript-application<\/code>\u3067\u3001\u5bfe\u8c61\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u30d1\u30b9\u3092\u5909\u3048\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">Electron\u306eASAR<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u540c\u3058\u30b3\u30de\u30f3\u30c9\u3078ASAR\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6e21\u305b\u308b\u3067\u3002<code>--artifact-format<\/code>\u306e\u65e2\u5b9a\u5024\u306f<code>auto<\/code>\u3067\u3001\u5fc5\u8981\u306a\u3089<code>asar<\/code>\uff0f<code>directory<\/code>\u3092\u660e\u793a\u3059\u308b\u3002ASAR\u3067\u306e\u5b9f\u884c\u306f\u4eca\u56de\u672a\u78ba\u8a8d\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">JavaScript\u306e\u4e00\u90e8\u30d5\u30a1\u30a4\u30eb\u306b\u7d5e\u308b<\/td><td style=\"padding:12px;border:1px solid #bfd0db\"><code>--source-path index.js<\/code>\u306e\u3088\u3046\u306b\u3001\u30a2\u30d7\u30ea\u306e\u30eb\u30fc\u30c8\u304b\u3089\u306e\u6b63\u78ba\u306a\u76f8\u5bfe\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b\u3067\u3002\u4f9d\u5b58\u5148\u306f\u81ea\u52d5\u3067\u8ffd\u52a0\u3055\u308c\u3078\u3093\u304b\u3089\u3001<code>search.js<\/code>\u3082\u898b\u305f\u3044\u306a\u3089\u7e70\u308a\u8fd4\u3057\u6307\u5b9a\u3059\u308b\u3002\u4eca\u56de\u306e\u6700\u5c0f\u4f8b\u3067\u306f\u7d5e\u3089\u3078\u3093\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">\u30cd\u30a4\u30c6\u30a3\u30d6\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u306e\u6982\u8981<\/td><td style=\"padding:12px;border:1px solid #bfd0db\"><code>analyze<\/code>\u3078\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6e21\u3057\u3001Ghidra\u306a\u3089<code>--provider ghidra<\/code>\u3092\u6307\u5b9a\u3059\u308b\u3067\u3002\u5148\u306b\u89e3\u6790\u30a8\u30f3\u30b8\u30f3\u306e\u6e96\u5099\u304c\u5fc5\u8981\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">\u30cd\u30a4\u30c6\u30a3\u30d6\u306e\u95a2\u6570\u3092\u9006\u30b3\u30f3\u30d1\u30a4\u30eb<\/td><td style=\"padding:12px;border:1px solid #bfd0db\"><code>decompile<\/code>\u3067\u306f\u3001\u5bfe\u8c61\u30d1\u30b9\u306b\u52a0\u3048\u3066\u3001\u5b9f\u969b\u306e\u89e3\u6790\u7d50\u679c\u3067\u78ba\u304b\u3081\u305f\u95a2\u6570\u540d\u307e\u305f\u306f\u30a2\u30c9\u30ec\u30b9\u304c\u5fc5\u8981\u3084\u3002\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u3082\u540c\u3058<code>main<\/code>\u3084\u30a2\u30c9\u30ec\u30b9\u304c\u3042\u308b\u3068\u306f\u9650\u3089\u3078\u3093\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">\u30d8\u30c3\u30c0\u30fc\u306e\u306a\u3044raw\u30d0\u30a4\u30ca\u30ea<\/td><td style=\"padding:12px;border:1px solid #bfd0db\"><code>--target-format raw-binary<\/code>\u306b\u52a0\u3048\u3001CPU\u306e<code>--architecture<\/code>\u3068\u8aad\u307f\u8fbc\u307f\u30fb\u5165\u53e3\u306e<code>--entry-point<\/code>\u304c\u5fc5\u8981\u306b\u306a\u308b\u3002\u5024\u3092\u63a8\u6e2c\u3067\u5165\u308c\u305a\u3001<a href=\"https:\/\/github.com\/morluto\/rea\/blob\/main\/docs\/raw-binary.md\">\u516c\u5f0f\u306eraw\u89e3\u6790\u30ac\u30a4\u30c9<\/a>\u3092\u78ba\u8a8d\u3057\u3066\u306a\u3002<\/td><\/tr><\/tbody><\/table><\/div><p>\u7248\u306b\u3088\u3063\u3066\u5f15\u6570\u304c\u5909\u308f\u308b\u5834\u5408\u304c\u3042\u308b\u304b\u3089\u3001\u5bfe\u8c61\u3092\u5909\u3048\u308b\u524d\u306b\u3001\u5b9f\u969b\u306b\u4f7f\u3046\u7248\u306e\u30d8\u30eb\u30d7\u3092\u958b\u304f\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>npx.cmd -y rea-agents@6.7.0 analyze-javascript-application --help\nnpx.cmd -y rea-agents@6.7.0 analyze --help\nnpx.cmd -y rea-agents@6.7.0 decompile --help<\/code><\/pre><h2>7\uff0eGhidra\u3092\u4f7f\u3046\u5834\u5408<\/h2><p><strong>Ghidra\u306fREA\u306e\u30cd\u30a4\u30c6\u30a3\u30d6\u89e3\u6790\u3092\u53d7\u3051\u6301\u3064Provider\u306e1\u3064\u3084\u3002<\/strong>\u300c\u4eca\u56de\u306eJavaScript\u9759\u7684\u89e3\u6790\u3067\u306f\u4f7f\u308f\u306a\u3044\u300d\u3068\u300cREA\u3067\u306fGhidra\u304c\u4e0d\u8981\u300d\u306f\u5225\u3084\u3067\u3002Hopper\u30fbIDA\u306a\u3069\u5225\u306eProvider\u3092\u4f7f\u3046\u5834\u5408\u3082\u3001\u305d\u308c\u305e\u308c\u306e\u5c0e\u5165\u3068\u5bfe\u5fdc\u5bfe\u8c61\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3093\u3084\u3002<\/p><p>\u4ee5\u4e0b\u306fGhidra\u3092\u9078\u3076\u5834\u5408\u306e\u8a2d\u5b9a\u3068\u30b3\u30de\u30f3\u30c9\u306e\u4f8b\u3067\u3001\u3053\u306e\u8a18\u4e8b\u3067\u306f\u5b9f\u884c\u3057\u3066\u3078\u3093\u3067\u3002<a href=\"https:\/\/github.com\/morluto\/rea\/blob\/main\/docs\/installation.md#ghidra\">\u516c\u5f0f\u306eGhidra\u8a2d\u5b9a<\/a>\u306f\u5bfe\u5fdc\u7248\u30fb\u30d5\u30ebJDK\u30fb\u30cd\u30a4\u30c6\u30a3\u30d6decompiler\u306e\u6761\u4ef6\u3092\u6307\u5b9a\u3057\u3066\u308b\u3002\u78ba\u8a8d\u6642\u70b9\u3067\u306fGhidra 12.1.x\u304c\u5bfe\u8c61\u3067\u3001Windows x64\u306e\u7d4c\u8def\u306f\u5b9f\u9a13\u7684\u306aP0\u6271\u3044\u3084\u3002Ghidra\u3084Java\u306fREA\u306esetup\u304b\u3089\u81ea\u52d5\u3067\u5165\u308b\u308f\u3051\u3084\u306a\u3044\u3067\u3002<\/p><p>Ghidra\u3068\u5bfe\u5fdc\u3059\u308bJDK\u3092\u516c\u5f0f\u624b\u9806\u3067\u7528\u610f\u3057\u305f\u3046\u3048\u3067\u3001<strong>\u6b21\u306e3\u3064\u306e\u30d1\u30b9\u3092\u81ea\u5206\u306e\u5b9f\u5728\u3059\u308b\u5834\u6240\u306b\u7f6e\u304d\u63db\u3048\u3066<\/strong>\u306a\u3002Ghidra\u306b\u306f\u89e3\u51cd\u5148\u3001Java\u306b\u306f\u30d5\u30ebJDK\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u3001<code>$nativeTarget<\/code>\u306b\u306f\u89e3\u6790\u6a29\u9650\u306e\u3042\u308b\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b\u3067\u3002<\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>$env:GHIDRA_INSTALL_DIR = \"C:\\tools\\ghidra_12.1.4_PUBLIC\"\n$env:JAVA_HOME = \"C:\\Program Files\\Java\\jdk-21\"\n$nativeTarget = \"C:\\my-own-app\\program.exe\"\nnpx.cmd -y rea-agents@6.7.0 doctor --provider ghidra --target \"$nativeTarget\" --format json<\/code><\/pre><p>doctor\u304c\u8fd4\u3057\u305f\u8a3a\u65ad\u3092\u8aad\u307f\u3001Ghidra\u30fbJDK\u30fb\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb\u306e\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3059\u308b\u3093\u3084\u3002\u554f\u984c\u304c\u3042\u308c\u3070\u3001\u5148\u306b\u8868\u793a\u3055\u308c\u305f\u9805\u76ee\u3092\u76f4\u3059\u3067\u3002Provider\u306e\u6e96\u5099\u304c\u901a\u3063\u305f\u5834\u5408\u306b\u3001\u6b21\u3067\u30cd\u30a4\u30c6\u30a3\u30d6\u89e3\u6790\u3078\u9032\u3081\u308b\u3002<strong>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306e\u6210\u529f\u4f8b\u3092\u4eca\u56de\u5b9f\u6e2c\u3057\u305f\u3068\u3044\u3046\u610f\u5473\u3067\u306f\u306a\u3044\u3067\u3002<\/strong><\/p><pre style=\"padding:18px;overflow-x:auto;background:#eef3f7;color:#173b52;white-space:pre\"><code>npx.cmd -y rea-agents@6.7.0 analyze \"$nativeTarget\" --provider ghidra --format json<\/code><\/pre><p>\u51fa\u529b\u306fJavaScript\u7528\u306e<code>graph.edges<\/code>\u3068\u540c\u3058\u3068\u306f\u9650\u3089\u3078\u3093\u304b\u3089\u3001\u4eca\u56de\u306eJSON\u62bd\u51fa\u30b3\u30de\u30f3\u30c9\u3092\u305d\u306e\u307e\u307e\u5f53\u3066\u306f\u3081\u3093\u3088\u3046\u306b\u3057\u3066\u306a\u3002Windows\u56fa\u6709\u306e\u5236\u9650\u306f<a href=\"https:\/\/github.com\/morluto\/rea\/blob\/main\/docs\/windows-ghidra-p0.md\">\u516c\u5f0fWindows Ghidra\u30ac\u30a4\u30c9<\/a>\u3067\u78ba\u8a8d\u3059\u308b\u3067\u3002<\/p><h2>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2><div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse\"><thead><tr><th style=\"padding:12px;border:1px solid #bfd0db\">\u56f0\u3063\u305f\u3053\u3068<\/th><th style=\"padding:12px;border:1px solid #bfd0db\">\u78ba\u8a8d\u3059\u308b\u3053\u3068<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>node<\/code>\u3084<code>npx.cmd<\/code>\u304c\u898b\u3064\u304b\u3089\u306a\u3044<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">Node.js\u3092\u5165\u308c\u305f\u5f8c\u3067PowerShell 7\u3092\u958b\u304d\u76f4\u3057\u3001<code>node --version<\/code>\u3068<code>npm.cmd --version<\/code>\u3092\u78ba\u8a8d\u3057\u3066\u306a\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>EBADENGINE<\/code>\u306a\u3069Node.js\u306e\u7248\u306b\u95a2\u3059\u308b\u8b66\u544a<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">REA 6.7.0\u306e\u5bfe\u5fdc\u7bc4\u56f2\u3068Node.js\u306e\u7248\u3092\u7167\u3089\u3057\u5408\u308f\u305b\u308b\u3067\u3002main\u30d6\u30e9\u30f3\u30c1\u3084\u5225\u306e\u516c\u958b\u7248\u306e\u6761\u4ef6\u3068\u6df7\u305c\u3078\u3093\u3088\u3046\u306b\u3059\u308b\u3093\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\"><code>Resolve-Path<\/code>\u3067\u6b62\u307e\u308b<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u4eca\u3044\u308b\u5834\u6240\u3092<code>Get-Location<\/code>\u3067\u78ba\u8a8d\u3057\u3001<code>Get-ChildItem .\\sample-app<\/code>\u30673\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3048\u308b\u304b\u8abf\u3079\u3066\u306a\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">\u89e3\u6790\u5f8c\u306b\u753b\u9762\u304c\u9759\u304b\u306a\u307e\u307e<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u7d50\u679c\u306f<code>rea-result.json<\/code>\u3078\u4fdd\u5b58\u3057\u3066\u308b\u3067\u3002<code>Get-Item .\\rea-result.json<\/code>\u3068<code>Get-Content .\\rea-progress.log -Tail 20<\/code>\u3067\u30d5\u30a1\u30a4\u30eb\u3068\u9032\u6357\u3092\u78ba\u304b\u3081\u308b\u3093\u3084\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">JSON\u304c\u8aad\u3081\u306a\u3044\u30fb\u7d50\u679c\u306b<code>error<\/code>\u304c\u3042\u308b<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u7d42\u4e86\u30b3\u30fc\u30c9\u3068<code>rea-progress.log<\/code>\u3092\u78ba\u8a8d\u3057\u3066\u306a\u3002\u53d6\u5f97\u306e\u5931\u6557\u3084\u89e3\u6790\u306e\u5931\u6557\u3092\u6210\u529f\u3068\u3057\u3066\u6271\u308f\u3093\u3088\u3046\u306b\u3059\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">\u53c2\u7167\u304c\u51fa\u306a\u3044\u30fb<code>unresolved<\/code>\u306b\u306a\u308b<\/td><td style=\"padding:12px;border:1px solid #bfd0db\"><code>index.js<\/code>\u306eimport\u5148\u3068\u5b9f\u969b\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u7167\u5408\u3059\u308b\u3067\u3002\u5bfe\u8c61\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9593\u9055\u3048\u3066\u3078\u3093\u304b\u3001<code>--source-path<\/code>\u3067\u4f9d\u5b58\u5148\u3092\u9664\u5916\u3057\u3066\u3078\u3093\u304b\u3082\u78ba\u8a8d\u3057\u3066\u306a\u3002\u52d5\u7684\u306a\u53c2\u7167\u306f\u9759\u7684\u306b\u89e3\u6c7a\u3067\u304d\u3078\u3093\u5834\u5408\u304c\u3042\u308b\u3067\u3002<\/td><\/tr><tr><td style=\"padding:12px;border:1px solid #bfd0db\">Ghidra\u3084Java\u306e\u8a3a\u65ad\u3067\u6b62\u307e\u308b<\/td><td style=\"padding:12px;border:1px solid #bfd0db\">\u4eca\u56de\u306eJavaScript\u7528\u30b3\u30de\u30f3\u30c9\u306a\u306e\u304b\u3001<code>--provider ghidra<\/code>\u3092\u4f7f\u3046\u30cd\u30a4\u30c6\u30a3\u30d6\u7528\u306a\u306e\u304b\u3092\u307e\u305a\u5206\u3051\u308b\u3067\u3002\u5f8c\u8005\u306a\u3089Ghidra\u30fbJDK\u30fb\u5bfe\u8c61\u306e\u5bfe\u5fdc\u6761\u4ef6\u3092\u78ba\u8a8d\u3059\u308b\u3093\u3084\u3002<\/td><\/tr><\/tbody><\/table><\/div><h2>\u7d42\u4e86\u3068\u518d\u958b<\/h2><p>\u4eca\u56de\u306eCLI\u89e3\u6790\u306f1\u56de\u3054\u3068\u306e\u51e6\u7406\u3084\u3002\u7d42\u4e86\u3057\u305f\u5f8c\u306b\u5e38\u99d0\u30b5\u30fc\u30d0\u30fc\u3092\u6b62\u3081\u308b\u4f5c\u696d\u306f\u8981\u3089\u3078\u3093\u3067\u3002\u518d\u958b\u3059\u308b\u3068\u304d\u306fPowerShell 7\u3067\u7df4\u7fd2\u30d5\u30a9\u30eb\u30c0\u30fc\u3078\u623b\u308a\u3001\u300c4\uff0e\u89e3\u6790\u306e\u5b9f\u884c\u300d\u304b\u3089\u3084\u308a\u76f4\u3057\u3066\u306a\u3002\u7d50\u679c\u3068\u30ed\u30b0\u306f\u540c\u540d\u30d5\u30a1\u30a4\u30eb\u3092\u4e0a\u66f8\u304d\u3059\u308b\u304b\u3089\u3001\u6bd4\u8f03\u306b\u6b8b\u3059\u306a\u3089\u5148\u306b\u5225\u540d\u3067\u4fdd\u5b58\u3059\u308b\u3093\u3084\u3002<\/p><p>\u7df4\u7fd2\u30c7\u30fc\u30bf\u3092\u7247\u4ed8\u3051\u308b\u3068\u304d\u306f\u3001\u30a8\u30af\u30b9\u30d7\u30ed\u30fc\u30e9\u30fc\u3067<code>github-practice\\rea<\/code>\u3092\u958b\u304d\u3001\u5fc5\u8981\u306a\u7d50\u679c\u3092\u6b8b\u3057\u3066\u304b\u3089\u7df4\u7fd2\u7528\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u30b4\u30df\u7bb1\u3078\u79fb\u3057\u3066\u306a\u3002<\/p><h2>\u516c\u5f0f\u8cc7\u6599\u3068\u5229\u7528\u6761\u4ef6<\/h2><p>REA\u672c\u4f53\u306fMIT\u30e9\u30a4\u30bb\u30f3\u30b9\u3084\u3002Ghidra\u306a\u3069\u306e\u89e3\u6790\u30c4\u30fc\u30eb\u3001\u4f9d\u5b58\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3001\u8abf\u3079\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u6a29\u5229\u3084\u5229\u7528\u6761\u4ef6\u306f\u305d\u308c\u305e\u308c\u5225\u3084\u3067\u3002\u81ea\u4f5c\u307e\u305f\u306f\u89e3\u6790\u306e\u8a31\u53ef\u304c\u3042\u308b\u5bfe\u8c61\u3067\u8a66\u3057\u3066\u306a\u3002<\/p><ul><li><a href=\"https:\/\/github.com\/morluto\/rea\">\u516c\u5f0fGitHub\u30fbREADME<\/a><\/li><li><a href=\"https:\/\/www.npmjs.com\/package\/rea-agents\/v\/6.7.0\">\u4eca\u56de\u4f7f\u7528\u3057\u305f\u516c\u958bnpm\u30d1\u30c3\u30b1\u30fc\u30b86.7.0<\/a><\/li><li><a href=\"https:\/\/github.com\/morluto\/rea\/blob\/main\/docs\/cli.md\">\u516c\u5f0fCLI\u30ac\u30a4\u30c9<\/a><\/li><li><a href=\"https:\/\/github.com\/morluto\/rea\/blob\/main\/docs\/installation.md\">\u516c\u5f0f\u5c0e\u5165\u30ac\u30a4\u30c9<\/a><\/li><li><a href=\"https:\/\/github.com\/morluto\/rea\/blob\/main\/docs\/javascript-application-workflows.md\">JavaScript\u89e3\u6790\u306e\u516c\u5f0f\u8aac\u660e<\/a><\/li><li><a href=\"https:\/\/github.com\/morluto\/rea\/blob\/main\/LICENSE\">LICENSE<\/a><\/li><\/ul><p><small>\u6539\u8a02\u30fb\u5b9f\u884c\u78ba\u8a8d\u65e5\uff1a2026\u5e7410\u670824\u65e5\u3002\u5b9f\u6e2c\u5024\u306f\u3053\u306e\u8a18\u4e8b\u306e\u5c0f\u3055\u306a\u984c\u6750\u3068\u4e0a\u8a18\u306e\u74b0\u5883\u3067\u5f97\u305f\u3082\u306e\u3084\u3002\u5225\u306e\u30a2\u30d7\u30ea\u3067\u540c\u3058\u4ef6\u6570\u3084\u89e3\u6790\u7d50\u679c\u306b\u306a\u308b\u3068\u306f\u9650\u3089\u3078\u3093\u3067\u3002\u672c\u6587\u30fb\u56f3\u89e3\u30fb\u984c\u6750\u30b3\u30fc\u30c9\u306f\u72ec\u81ea\u5236\u4f5c\u3002\u51fa\u529b\u4f8b\u306f\u5b9f\u884c\u7d50\u679c\u304b\u3089\u5fc5\u8981\u306a\u9805\u76ee\u3092\u62bd\u51fa\u3057\u305f\u3082\u306e\u3067\u3001\u30d1\u30b9\u3084\u8b58\u5225\u7528\u30cf\u30c3\u30b7\u30e5\u3092\u542b\u3080\u751fJSON\u5168\u4f53\u306f\u63b2\u8f09\u3057\u3066\u3078\u3093\u3067\u3002<\/small><\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>\u300c\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3069\u3053\u3092\u8aad\u307f\u8fbc\u3093\u3067\u308b\u3093\u3084\u308d\u3046\uff1f\u300d\u3092\u3001\u5143\u30b3\u30fc\u30c9\u306e\u4f4d\u7f6e\u3068\u5bfe\u5fdc\u3055\u305b\u3066\u8abf\u3079\u305f\u3044\u3002REA\u3092\u4f7f\u3063\u3066\u3001\u81ea\u5206\u3067\u4f5c\u3063\u305f\u5c0f\u3055\u306aJavaScript\u30a2\u30d7\u30ea\u306e\u53c2\u7167\u95a2\u4fc2\u3092\u78ba\u8a8d\u3059\u308b\u3067\u3002 morl&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/blog.himajin.ddo.jp\/?p=130\"><span class=\"more-text\">\u7d9a\u304d\u3092\u8aad\u3080<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,13,10],"tags":[],"class_list":["post-130","post","type-post","status-publish","format-standard","hentry","category-github-trending","category-github-security","category-github-dev-tools"],"_links":{"self":[{"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=\/wp\/v2\/posts\/130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=130"}],"version-history":[{"count":6,"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=\/wp\/v2\/posts\/130\/revisions"}],"predecessor-version":[{"id":292,"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=\/wp\/v2\/posts\/130\/revisions\/292"}],"wp:attachment":[{"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.himajin.ddo.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}