処理の失敗理由をユーザーに届ける導線を、最初に作っておく
2026.10.02 09:00
2026.08.30 14:34
自動取り込みが失敗しても、画面に「一部の取得に失敗しました」としか出ないと、ユーザーとの調査の往復が始まります。実際の理由が子プロセスのstderrにあるなら、必要な情報を画面まで届けます。
最終行を結果オブジェクトへ載せる
const { code, stderr } = await runChild(args);
if (code !== 0) {
const tail = String(stderr).trim().split('\n').at(-1) ?? '';
return { ok: false, message: `取得に失敗しました: ${redact(tail).slice(0, 200)}` };
}
missing_scopeのようなエラーコードが画面に出れば、スクリーンショット1枚で原因を絞れます。ただしトークンやpassword=...などの値は表示前にマスクします。過剰に隠してエラーコードまで消さず、秘密の値だけを除去します。
GUIでも読める失敗ログを用意する
Finderから起動したデスクトップアプリでは、console.errorをユーザーが確認できません。日時、操作種別、終了コード、マスク済みstderr末尾だけをファイルへ残します。本文や引数全体は保存しません。
失敗の経路は最初に1本へ決めます。
子プロセスのstderr
→ 結果オブジェクトのmessage
→ トースト表示
→ 機微情報を除いた失敗ログ
後付けでは子プロセスの受け口、表示コンポーネント、ログ出力先が散らばりがちです。エラーメッセージは開発時のconsoleではなく、障害時にサポートする人が原因へ到達するための機能として設計します。
今回は以上です。