Skip to content

[auto:perf] ProtoToJsonld の schema.org 線形探索を索引化して約10倍高速化 (2026-07-27) #22

Description

@nagata-yoshiteru

@claude定期メンテナンス bot の自動タスク(効率化・高速化・省リソース化の安全な改善 PR)。エンドユーザーの問い合わせ起点ではありません。

🤖 bot 向けの詳細手順 — 人間は読まなくて OK(クリックで展開)

進め方(共通ルール)

  • この Issue には Slack スレッド(slackmeta)はありません。CLAUDE.md のスレッド返信ヘルパー post_slack は使わないでください(返信先スレッドが無いため)。
  • リポジトリの CLAUDE.md のルールに従い、新しいブランチ最小限の変更を行い、PR を作成してください(merge しない/デフォルトブランチへ直接 push しない/force-push しない)。
  • リスクのある変更や挙動が変わる最適化は避けるか、PR 説明にトレードオフを明記。目ぼしい改善が無ければ所見をコメントしてクローズ。
  • 作成する PR の説明本文に Closes #<この Issue の番号> を含めてください(merge 時に自動クローズされます)。
  • コミット(PR 作成)を行った場合は、最後に下記「Slack 通知」の手順でチャンネルへ新規投稿してください。
  • Issue を open のまま残す場合(PR を作って merge 待ち/所見コメントだけ残して人手判断に委ねる、のいずれか)は、仕事を終える前に gh issue edit <この Issue の番号> --title "<新しいタイトル>"タイトルを「具体的に何を扱ったか」が分かる形に書き換えること。クローズする場合は不要(初期タイトルのままで OK)。
    • 先頭の [auto:perf] プレフィックスは必ず残す(ワークフローの重複チェックがこの前方一致で動くため)。末尾の (YYYY-MM-DD) も残しておくと履歴を追いやすい。
    • 例: [auto:perf] 効率化・省リソース化 (2026-06-24)[auto:perf] /api/users の N+1 クエリ解消 (2026-06-24)

タスク: 効率化・高速化・省リソース化

コードベース全体を調べ、処理を 効率化・高速化・省メモリ/省リソース化 できる箇所がないか探してください。

  • 例: 不要な計算・重複処理の削減、N+1 やループ内 I/O の解消、アルゴリズム/データ構造の改善、無駄なメモリ確保・コピーの削減、キャッシュ化・バッチ化、適切な非同期化など。
  • 明確に有益で安全な改善があれば実装して PR を作成。可能なら簡単な計測やベンチで効果を示す。
  • 挙動(出力結果)は変えないこと。変える必要がある場合は PR 説明に明記。
  • 目ぼしい改善が無ければ、その旨をコメントしてクローズ。

重複の確認(PR を作る前に必ず・重要)

同じ提案を何度も作らないため、着手前に過去の bot 提案を確認する。

# 過去の同種メンテナンス Issue(オープン/クローズ両方)
gh issue list --state all --label "auto-perf" --limit 30 --json number,title,state,closedAt,url
# 直近の PR(オープン=レビュー待ち / クローズ=却下 or マージ済み)
gh pr list --state all --limit 50 --json number,title,state,url,headRefName
  • 今回入れようとしている改善が、オープンな PR(レビュー待ち)や過去にクローズされた PR / Issue(=一度見送られた、あるいは既にマージ済みで対応済み)と実質同じなら、同じ PR を作り直さない
  • 過去にクローズされた提案は「見送られた」ものとして尊重し、新たな根拠が無い限り蒸し返さない
  • 確認の結果、新しく提案できる内容が無い(見つかった候補がすべて既出=オープン放置 or クローズ済みの焼き直し)場合は、PR を作らず、該当する既存 Issue / PR の番号を挙げて「既出のためスキップ」とこの Issue にコメントしてから、この Issue をクローズする。

Slack 通知(PR を作成した場合のみ・フォーマット厳守)

実際に PR を開いた場合のみ投稿します(変更が無く所見コメントのみのときは投稿不要)。
PR は必ず gh pr create本物の PR を作成すること。compare / ?quick_pull=1 の「作成用リンク」は PR ではないので 使わない

  • 通知先チャンネルID: C0B7T6B8X9R
  • 下記の TEXTそのまま厳守。可変は末尾 〇〇(内容の一言)だけで、絵文字・タグ・2つのリンク(リポジトリ/PR)は必ず含め、書式は変えないこと。
  • リンクは Slack 記法 <URL|表示テキスト> を使う(リポジトリ名と PR 番号がクリック可能になる)。
# 1) 作成した PR の URL を取得(未作成なら作成。作成済みならそれを取得)
PR_URL="$(gh pr view --json url -q .url 2>/dev/null || gh pr create --fill)"
PR_NUM="${PR_URL##*/}"

# 2) フォーマット厳守で Slack へ新規投稿(thread_ts は付けない=チャンネル直下)
TEXT="🤖 [定期メンテナンス/perf] <https://github.com/${GITHUB_REPOSITORY}|${GITHUB_REPOSITORY}> を効率化する <${PR_URL}|PR #${PR_NUM}> を作成しました(内容: 〇〇)"
curl -s -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json; charset=utf-8" \
  --data "$(jq -n --arg c "C0B7T6B8X9R" --arg x "$TEXT" '{channel:$c, text:$x}')"

Metadata

Metadata

Assignees

No one assigned

    Labels

    auto-perf定期メンテナンス bot

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions