Zenn
Open4

ailabベースで使っている際の便利ツールたち

すてぃおすてぃお

load_context.sh という名前で保存している。
sh load_context.sh を実行するとルールファイルとメモリバンクの内容をクリップボードにコピーできるのでコピーしたらあとは適当にo1 ProとかClaudeとか好きなツールに入れるだけで使えるようになる。普段はCursor、Cline使ってても時折使いたくなるのであると便利

#!/bin/bash

# ルールファイルとメモリバンクファイルを一括で読み込むスクリプト
echo "コンテキスト読み込みを開始します..."

# 一時ファイルの作成
rm -f /tmp/context_buffer.md
touch /tmp/context_buffer.md

# ルールファイルの読み込み
echo "ルールファイルを読み込んでいます..."
for rule_file in $(find docs/ai/rules -name "*.md" | sort); do
  echo "読み込み中: $rule_file"
  echo -e "# $(basename $rule_file)\n" >> /tmp/context_buffer.md
  cat "$rule_file" >> /tmp/context_buffer.md
  echo -e "\n---\n" >> /tmp/context_buffer.md
done

# メモリバンクファイルの読み込み
echo "メモリバンクファイルを読み込んでいます..."
for memory_file in $(find docs/ai/memory -name "*.md" | sort); do
  if [ -s "$memory_file" ]; then  # ファイルが空でない場合のみ処理
    echo "読み込み中: $memory_file"
    echo -e "# $(basename $memory_file)\n" >> /tmp/context_buffer.md
    cat "$memory_file" >> /tmp/context_buffer.md
    echo -e "\n---\n" >> /tmp/context_buffer.md
  fi
done

# 一時ファイルをクリップボードにコピー
if [ "$(uname)" == "Darwin" ]; then
  # macOS
  cat /tmp/context_buffer.md | pbcopy
  echo "コンテキストの読み込みが完了しました。クリップボードにコピーされています。"
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
  # Linux
  if command -v xclip > /dev/null; then
    cat /tmp/context_buffer.md | xclip -selection clipboard
    echo "コンテキストの読み込みが完了しました。クリップボードにコピーされています。"
  else
    echo "xclipがインストールされていないため、クリップボードにコピーできません。"
    echo "コンテキストは /tmp/context_buffer.md に保存されました。"
  fi
else
  echo "未対応のOSです。コンテキストは /tmp/context_buffer.md に保存されました。"
fi

echo "完了しました。" 
すてぃおすてぃお

あると便利なものとして、 docs/ai/context_index.md とというファイルを用意していて、
下記のようなものが書かれている。目次みたいなものですね。
セッションが長くなるとルールを忘れたり、漏れたりするのでもう一度読ませて理解を促す目的で使用する

# コンテキストインデックス

## ルールファイル
- [00_basic.md](docs/ai/rules/00_basic.md) - 基本的なルール
- [01_project.md](docs/ai/rules/01_project.md) - プロジェクトに関するルール
- [02_memory.md](docs/ai/rules/02_memory.md) - メモリに関するルール
- [git.md](docs/ai/rules/git.md) - Gitに関するルール
- [context-window.md](docs/ai/rules/context-window.md) - コンテキストウィンドウに関するルール
- [local-mcp.md](docs/ai/rules/local-mcp.md) - ローカルMCPに関するルール

## メモリバンクファイル
- [directory_management.md](docs/ai/memory/directory_management.md) - ディレクトリ管理に関する情報
- [xxx.md](docs/ai/memory/yyy.md) - コーディングルール
- [yyy.md](docs/ai/memory/yyy.md) - ファイル追加ユースケースの情報

## コンテキスト管理ファイル
- [context_summary.md](docs/ai/context_summary.md) - 重要なコンテキストの要約
- [load_context.sh](load_context.sh) - コンテキスト読み込みスクリプト
- [update_context.sh](update_context.sh) - コンテキスト更新スクリプト

## 使用方法
1. コンテキストの読み込み: `./load_context.sh`
2. コンテキストの更新: `./update_context.sh`
3. 特定のファイルの参照: 上記のリンクをクリックして直接ファイルを開く

## コンテキスト管理コマンド
Cursorでの会話中に以下のコマンドを使用できます:
- `/load-rules` - ルールファイルを読み込む
- `/load-memory` - メモリバンクファイルを読み込む
- `/load-all` - すべてのコンテキストを読み込む
- `/summary` - コンテキストサマリーを表示する 

docs/ai/context_summary.md にはチートシートみたいな内容を入れてる

update_context.sh は下記のように書いている

#!/bin/bash

# コンテキスト更新スクリプト
echo "コンテキスト更新を開始します..."

# docs/ai/memory ディレクトリが存在するか確認
if [ ! -d "docs/ai/memory" ]; then
  mkdir -p docs/ai/memory
  echo "docs/ai/memory ディレクトリを作成しました。"
fi

# 最近変更されたファイルを検出(過去24時間以内)
echo "最近変更されたファイルを検出しています..."
recent_files=$(find . -type f \( -name "*.go" -o -name "*.md" -o -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) -mtime -1 | grep -v "node_modules" | grep -v ".git" | grep -v "docs/ai/memory/recent_changes.md")

# 変更の概要を生成
echo "# 最近の変更 ($(date +%Y-%m-%d))" > docs/ai/memory/recent_changes.md
echo "" >> docs/ai/memory/recent_changes.md
echo "以下のファイルが最近変更されました:" >> docs/ai/memory/recent_changes.md
echo "" >> docs/ai/memory/recent_changes.md

# 変更されたファイルがあるか確認
if [ -z "$recent_files" ]; then
  echo "過去24時間以内に変更されたファイルはありません。" >> docs/ai/memory/recent_changes.md
else
  # 変更されたファイルを記録
  for file in $recent_files; do
    echo "- $file" >> docs/ai/memory/recent_changes.md
  done

  # 変更内容のサマリーを生成
  echo "" >> docs/ai/memory/recent_changes.md
  echo "## 主要な変更点" >> docs/ai/memory/recent_changes.md
  echo "" >> docs/ai/memory/recent_changes.md
  
  # 最大10個のファイルについて変更内容を表示
  count=0
  for file in $recent_files; do
    if [ $count -ge 10 ]; then
      break
    fi
    
    if [ -f "$file" ]; then
      echo "### $file" >> docs/ai/memory/recent_changes.md
      echo '```' >> docs/ai/memory/recent_changes.md
      
      # ファイルの種類に応じて異なる処理
      if [[ "$file" == *.md ]]; then
        # Markdownファイルの場合は先頭10行を表示
        head -n 10 "$file" >> docs/ai/memory/recent_changes.md
        echo "..." >> docs/ai/memory/recent_changes.md
      else
        # コードファイルの場合はgit diffを使用(可能な場合)
        if git rev-parse --is-inside-work-tree &>/dev/null && git ls-files --error-unmatch "$file" &>/dev/null; then
          git diff --unified=3 HEAD "$file" | head -n 20 >> docs/ai/memory/recent_changes.md
          echo "..." >> docs/ai/memory/recent_changes.md
        else
          # gitで管理されていない場合は先頭10行を表示
          head -n 10 "$file" >> docs/ai/memory/recent_changes.md
          echo "..." >> docs/ai/memory/recent_changes.md
        fi
      fi
      
      echo '```' >> docs/ai/memory/recent_changes.md
      echo "" >> docs/ai/memory/recent_changes.md
      
      count=$((count+1))
    fi
  done
fi

echo "" >> docs/ai/memory/recent_changes.md
echo "## 手動更新セクション" >> docs/ai/memory/recent_changes.md
echo "" >> docs/ai/memory/recent_changes.md
echo "(ここに主要な変更点を手動で追加してください)" >> docs/ai/memory/recent_changes.md

echo "コンテキスト更新が完了しました。docs/ai/memory/recent_changes.md を確認してください。"

# 実行権限を付与
chmod +x load_context.sh

echo "スクリプトに実行権限を付与しました。"
echo "コンテキストを読み込むには ./load_context.sh を実行してください。" 
すてぃおすてぃお

.cursor/rules* から .clinerules を生成するためのスクリプト

rm -f .clinerules && touch .clinerules && for file in $(ls -1 .cursor/rules/*.mdc | sort); do echo "# $(basename $file .mdc)" >> .clinerules && awk 'BEGIN{p=0} /^---$/{if(p==0){p=1}else{p=0;next}} p==0{print}' $file >> .clinerules && echo -e "\n\n" >> .clinerules; done
ログインするとコメントできます