02 / 初心者向けチュートリアル / 読了目安:8分

REA の使い方:アプリのエクスポートボタンを追う

「Export notes」を押すと、CSV はどこに保存されるのでしょうか。小さな Electron アプリでボタンから処理を REA で追い、ファイルを整形するコードをテストします。

このページの内容
JavaScript / Electronネイティブ解析エンジン不要公式の学習用サンプル
学ぶこと
  • 小さなアプリを取得し、フォルダーのパスを REA に渡す。
  • エクスポートのハンドラーと意図された保存先を探す: Downloads/notes.csv.
  • カンマや引用符が正しく出力されるか、短い検証を実行する。

01. 問いを一つ選ぶ

「このアプリを説明して」では範囲が広すぎます。名前を付けられる動作と、確認できる答えから始めましょう。

今回の問い
Export notes をクリックすると CSV はどこに保存されますか?ノートのタイトルにカンマや引用符があると、どうなりますか?

ここでは REA 公式の Notes サンプルを使います。Electron アプリを表す小さな6ファイルからなる学習用サンプルで、製品アプリではありません。静的解析に Electron のインストールは不要です。

02. サンプルを入手する

rea.tools から notes-example.zip をダウンロード し、新しいフォルダーに展開します。フォルダーのパスを控えてください。中身は次の通りです。

サンプルのファイル
notes-example/
  package.json
  index.html
  renderer.js
  preload.js
  main.js
  csv.js

REA がまだ接続されていなければ、次をご覧ください: インストールガイド。このサンプルはデスクトップのウィンドウを起動せずに調査できます。

03. エージェントに調査を依頼する

プロンプト内のサンプルパスを、展開したフォルダーの絶対パスに置き換えてください。

解析用プロンプト
REA で /absolute/path/to/notes-example を静的に調べてください。Export notes ボタンからレンダラー、プリロードのブリッジ、メインプロセスまで追跡します。出力先パス、CSV の列、答えの根拠となるファイルと行を示してください。Electron は起動せず、コードで確認した事実と推測を分けてください。

ターミナルから REA の静的解析結果を直接取得することもできます。

ターミナル
npx -y [email protected] analyze-javascript-application "/absolute/path/to/notes-example" --json > notes-analysis.json

このコマンドは解説で使ったバージョンに固定しています。JSON は自然言語の説明ではなく解析の根拠です。エージェントはこれを使って追加調査を進めます。

04. エクスポートの経路を追う

答え: コード上では、次のファイルを保存する設計です: notes.csv。保存先は OS の Downloads フォルダーです。設定は次の場所にあります: main.js。ボタンからそこへ到達する経路を見てみましょう。

ボタン→プリロード→IPC→CSV ファイル

Electron ではページとメインアプリが別々に動きます。 プリロード が、ページから呼べるメソッドを公開します。 IPC は、ファイルを書き込めるメインアプリに依頼を届けるメッセージです。

場所コードの役割
renderer.jsクリックハンドラーが次を呼ぶ: window.notes.exportCsv().
preload.js公開メソッドが次を呼び出す: notes:export という IPC チャネル。
main.js対応するハンドラーが Downloads のパスを作り、次を書き込む: notes.csv.
csv.js整形処理が次を出力する: id,title。各タイトルを引用符で囲み、内部の引用符を二重にする。

コードは Electron の次の API を使います: app.getPath("downloads")。ここで分かるのは意図された保存先であり、実際に手元の端末へ保存できた証明ではありません。この解説では、以下で整形処理を直接検証します。

05. 予測を確かめる

次のタイトルを持つノートを整形処理に渡します: Hello, "REA"。予測される CSV の行は次の通りです。

期待される出力
id,title
1,"Hello, ""REA"""

カンマは引用符で囲まれた一つのフィールド内に残り、内部の引用符はそれぞれ二つになります。検証するには、以下を次の名前で保存します: check.cjs。保存先は、展開した notes-example フォルダーです:

check.cjs
const assert = require("node:assert/strict");
const { toCsv } = require("./csv.js");

const actual = toCsv([{ id: 1, title: 'Hello, "REA"' }]);
const expected = 'id,title\n1,"Hello, ""REA"""\n';
assert.equal(actual, expected);
console.log(actual);
console.log("PASS: comma and quotes stay in one field.");
サンプルフォルダーで実行
node check.cjs

ローカルで検証済み。 2026年10月12日に REA 6.4.0 の静的解析と、この整形処理の検証を実行しました。出力は一致しています。Electron の画面を起動したり、エクスポートボタン経由でファイル権限をテストしたりはしていません。

06. さらに絞り込んだ問いへ

一般的な説明を増やすより、説明が正しいか確かめる追加の問いを試します。

追加調査のプロンプト
notes.csv の書き込みに失敗した場合、エラーはどの経路でページへ戻りますか?提供されたファイルのエラー処理を追い、不足するハンドラーがあれば示してください。アプリは変更しないでください。

すべての報告に次の三つを残します: 分かったこと、ソースの位置、実際にテストしたこと。 これにより、もっともらしくても根拠を超えた説明を見つけやすくなります。

次へ / 実在パッケージの調査例生成した URL に「!」が残る理由を探す。

サンプルと手順: REA 公式の初回調査ガイド。このページは独自の解説で、追加のローカル解析と整形処理の検証を含みます。 解析サマリーをダウンロード。

REA は初めてですか? REA とは? · ガイドの検証方針