7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ClaudeLogs〜プロンプトログを取る〜

Last updated at Posted at 2025-11-30

はじめに

この記事はand factory.inc Advent Calendar 2025 1日目の記事です。

and factoryでandroidエンジニアをやっています。
AIを使った開発のナレッジを共有します。

ticktakclock「Claudeで作りました」
???「これってどんな感じで指示して作ってるんですか?」
ticktakclock「えっと〜・・・なんかいい感じに・・・?」
(もうログが残ってなくて詳しく覚えてない)

☝️を解決するためのプロンプトログ

スプレッドシートとGASを作成する

スクリーンショット 2025-07-31 12.08.27.png

GASにコピペ

  • コマンドごとにシートを分けて記述(シートなければ追加)
  • hooksで受け取ったJSONをパースして列に記述(なければ増やす)
function doPost(e) {
  Logger.log("triggerd:" + e.params)
  try {
    // パラメータ取得
    const params = e.parameter;
    const prompt = params.prompt;

    Logger.log("params:" + params)
    Logger.log("prompt:" + prompt)

    if (!prompt) {
      Logger.log("Missing parameter: prompt")
      return ContentService.createTextOutput("Missing parameter: prompt")
                           .setMimeType(ContentService.MimeType.TEXT);
    }

    // JSONを解析
    let jsonData;
    try {
      jsonData = JSON.parse(prompt);
    } catch (parseError) {
      Logger.log("JSON parse error: " + parseError.message)
      return ContentService.createTextOutput("Error: Invalid JSON format")
                           .setMimeType(ContentService.MimeType.TEXT);
    }

    // hook_event_nameをシート名として使用
    const sheetName = jsonData.hook_event_name;
    if (!sheetName) {
      Logger.log("Missing hook_event_name in JSON")
      return ContentService.createTextOutput("Error: hook_event_name not found in JSON")
                           .setMimeType(ContentService.MimeType.TEXT);
    }

    Logger.log("sheetName:" + sheetName)

    // スプレッドシートの取得(このスクリプトが紐づいているスプレッドシート)
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getSheetByName(sheetName);

    // 現在時刻
    const timestamp = new Date();

    // シートがなければ作成
    if (!sheet) {
      Logger.log("create sheet")
      sheet = ss.insertSheet(sheetName);
      
      // ヘッダー行を作成(記録日時 + JSONのキー)
      const headers = ["記録日時"];
      const jsonKeys = Object.keys(jsonData);
      headers.push(...jsonKeys);
      sheet.appendRow(headers);
    } else {
      // 既存シートの場合、ヘッダーが不足していないかチェック
      const existingHeaders = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
      const jsonKeys = Object.keys(jsonData);
      const requiredHeaders = ["記録日時", ...jsonKeys];
      
      // 不足しているヘッダーがあれば追加
      if (existingHeaders.length < requiredHeaders.length) {
        const missingHeaders = requiredHeaders.slice(existingHeaders.length);
        const startCol = existingHeaders.length + 1;
        sheet.getRange(1, startCol, 1, missingHeaders.length).setValues([missingHeaders]);
      }
    }

    // データ行を作成
    const rowData = [timestamp];
    const currentHeaders = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    
    // ヘッダーの順序に従ってデータを配置(記録日時を除く)
    for (let i = 1; i < currentHeaders.length; i++) {
      const headerKey = currentHeaders[i];
      rowData.push(jsonData[headerKey] || ""); // キーが存在しない場合は空文字
    }

    // データの書き込み
    sheet.appendRow(rowData);

    return ContentService.createTextOutput("Success")
                         .setMimeType(ContentService.MimeType.TEXT);
  } catch (error) {
    Logger.log("catch error " + error.message)
    return ContentService.createTextOutput("Error: " + error.message)
                         .setMimeType(ContentService.MimeType.TEXT);
  }
}

新しいデプロイを作成

アクセスできるユーザーは全員にする

URLは漏洩しないようにね 💡

スクリーンショット 2025-07-31 12.11.03.png

出てきたウェブアプリURLをコピーする(後で使います)

/hooks でHooks設定起動,『UserPromptSubmit』を選択

スクリーンショット 2025-07-31 12.13.48.png

『+ Add new hook…』を選択

スクリーンショット 2025-07-31 12.14.40.png

コマンド入力欄に以下記述してEnter

GASのURLは先程コピーしたものを使う

curl -X POST --data-urlencode "prompt=$(jq '.')" "https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxk/exec"

スクリーンショット 2025-07-31 12.15.34.png

場所はユーザーでいいかなと

スクリーンショット 2025-07-31 12.29.40.png

こんな感じで追加されていればOK

スクリーンショット 2025-07-31 12.19.49.png

  • あとはいつもどおりClaudeで指示していればスプレッドシートに追記されていきます
  • cwdでフィルターしたりsession_idでフィルタすればどんなプロンプトを入力したのかわかるようになります

おわりに

いかがでしたでしょうか?
AIを使いこなしている人が「一体どんなプロンプトを作ってるんだ・・・?」と気になったり実際に聞かれたときにさっと出せるよう作ってみましたが割と便利です。

次回は
@yasukotelinさんのAndroidプロジェクトの CI で役立つメモリ設定テクニックもお楽しみに :santa:
Andfactory Advent Calendarもよろしくお願いします。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?