diff --git a/readme.md b/readme.md index 0408130..f974094 100644 --- a/readme.md +++ b/readme.md @@ -1,2 +1,43 @@ -このリポジトリはインターネットからアクセスするためのものです。 -公開用のため個人情報はアップロードしてはいけません。 \ No newline at end of file +# Strudel Code Assistant (Gemini CLI Skills) + +このプロジェクトは、Gemini CLIの「Skills」機能を活用して、Strudelスクリプトの解説、構文修正、およびリファクタリングを自動化するためのツール群です。 + +⚠️ **注意**: このリポジトリは公開用です。個人情報や機密情報は絶対にアップロードしないでください。 + +## ファイル説明 +- `/.gemini/gemini.md`: コードスタイルや公式URLのリファレンス +- `/.gemini/reference.md`: gemini.mdから参照する詳細なstrudelの情報 +- `/.gemini/skills/strudel_fix_and_explain.md`: strudelコードの誤りの修正とコードの説明のためのskill +- `/.gemini/skills/strudel_refactor.md`: strudelコードをより良いコードにするためのskill + +## ディレクトリ構成 + +- `/strudel/`: 既存のStrudelコード(Markdown形式) +- `/.gemini/`: Strudelの知識ベース(Markdown形式) +- `/.gemini/skills/`: Gemini CLI用のスキル定義ファイル(プロンプトエンジニアリング) +- `/script/`: スキルを実行するための各種シェルスクリプト +- `/refactoring/`: リファクタリング後のコード出力先(実行時に自動生成) +- `/explained/`: 解説・修正後のコード出力先(実行時に自動生成) + +## 主な機能 + +1. **コード解説と修正**: `fix_and_explain_strudel.sh` を使用して、コードのバグ修正と詳細な解説を生成します。 +2. **リファクタリング**: `refactor_strudel.sh` を使用して、より洗練されたStrudelコードへの書き換えを行います。 + +## ワークフロー + +プロジェクトのルートディレクトリ(`notebook/`)から、対象に合わせて以下のコマンドを実行します。 + +### 1. 全ファイルを一括で修正・解説する +`strudel/` フォルダ内のすべての `.md` ファイルを処理します。 +```bash +bash script/fix_and_explain_strudel.sh +``` + +### 2. 特定のファイルにリファクタリングを適用する +個別のファイルを指定して実行することも可能です。 +```bash +bash script/refactor_strudel.sh strudel/my-beat.md +``` + +実行後、結果は `refactoring/` や `explained/` フォルダに自動的に保存されます。 \ No newline at end of file diff --git a/script/fix_and_explain_strudel.sh b/script/fix_and_explain_strudel.sh old mode 100644 new mode 100755 index 80b31a4..1eb9300 --- a/script/fix_and_explain_strudel.sh +++ b/script/fix_and_explain_strudel.sh @@ -4,6 +4,8 @@ BASE_DIR=$(cd "$(dirname "$0")/.." && pwd) OUTPUT_DIR="$BASE_DIR/explained" SKILL_FILE="$BASE_DIR/.gemini/skills/strudel_fix_and_explain.md" +GEMINI_REF="$BASE_DIR/.gemini/gemini.md" +STRUDEL_REF="$BASE_DIR/.gemini/reference.md" # 出力先フォルダの作成 if [ ! -f "$SKILL_FILE" ]; then @@ -29,13 +31,17 @@ for file in "${files[@]}"; do filename=$(basename "$file") # 特定のファイルやディレクトリを除外 [[ "$filename" =~ ^(Strudel Making Sound|Strudel Study)\.md$ ]] && continue - [[ "$file" =~ /(refactoring|script|explained|organized_strudel)/ ]] && continue + [[ "$file" =~ /(refactoring|script|explained)/ ]] && continue echo "Analyzing and fixing $filename..." # 一時ファイルに出力 tmp_file="$OUTPUT_DIR/tmp_$filename" - (cat "$SKILL_FILE"; echo ""; cat "$file") | gemini > "$tmp_file" + + ( [ -f "$GEMINI_REF" ] && cat "$GEMINI_REF"; \ + [ -f "$STRUDEL_REF" ] && cat "$STRUDEL_REF"; \ + echo ""; cat "$SKILL_FILE"; \ + echo ""; cat "$file" ) | gemini > "$tmp_file" if [ $? -eq 0 ]; then # FILENAME: タグを検索 diff --git a/script/organize_strudel.sh b/script/organize_strudel.sh deleted file mode 100644 index d6f0251..0000000 --- a/script/organize_strudel.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -# スクリプトの場所 (scripts/) からプロジェクトルートを動的に取得 -ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd) -BASE_DIR="$ROOT_DIR/organized_strudel" -SOURCE_DIR="$ROOT_DIR/strudel" - -mkdir -p "$BASE_DIR" - -echo "Starting Strudel code categorization..." - -for file in "$SOURCE_DIR"/*.md; do - # ドキュメントファイル自体は除外 - [[ "$file" == *"Strudel Making Sound.md"* ]] && continue - [[ "$file" == *"Strudel Study.md"* ]] && continue - [[ "$file" == *"/script/"* ]] && continue - [ -e "$file" ] || continue - - filename=$(basename "$file") - echo "Analyzing $filename..." - - # gemini を使用してカテゴリを判定 - category=$( (echo "Analyze this Strudel code. - Based on functions like s(), note(), fm(), degrade(), or effects like lpf(), - classify this into exactly one of these categories: - 'Sampling', 'Synthesis', 'Generative', 'Ambient_FX'. - Return only the category name as a single word."; echo ""; cat "$file") | gemini) - - # カテゴリが取得できなかった場合のデフォルト - if [ -z "$category" ]; then - category="Unclassified" - fi - - target_path="$BASE_DIR/$category" - mkdir -p "$target_path" - - cp "$file" "$target_path/" - echo "-> Moved to $category/" -done \ No newline at end of file diff --git a/script/refactor_strudel.sh b/script/refactor_strudel.sh old mode 100644 new mode 100755 index c6a0577..e9003c9 --- a/script/refactor_strudel.sh +++ b/script/refactor_strudel.sh @@ -4,6 +4,8 @@ BASE_DIR=$(cd "$(dirname "$0")/.." && pwd) REFACTOR_DIR="$BASE_DIR/refactoring" SKILL_FILE="$BASE_DIR/.gemini/skills/strudel_refactor.md" +GEMINI_REF="$BASE_DIR/.gemini/gemini.md" +STRUDEL_REF="$BASE_DIR/.gemini/reference.md" # 出力先フォルダの作成 if [ ! -f "$SKILL_FILE" ]; then @@ -29,13 +31,17 @@ for file in "${files[@]}"; do filename=$(basename "$file") # 特定のファイルやディレクトリを除外 [[ "$filename" =~ ^(Strudel Making Sound|Strudel Study)\.md$ ]] && continue - [[ "$file" =~ /(refactoring|script|explained|organized_strudel)/ ]] && continue + [[ "$file" =~ /(refactoring|script|explained)/ ]] && continue echo "Processing $filename..." - # スキルファイルをシステムプロンプトとして使用 + # 知識ベースとスキルファイルを組み合わせて実行 tmp_file="$REFACTOR_DIR/tmp_$filename" - (cat "$SKILL_FILE"; echo ""; cat "$file") | gemini > "$tmp_file" + + ( [ -f "$GEMINI_REF" ] && cat "$GEMINI_REF"; \ + [ -f "$STRUDEL_REF" ] && cat "$STRUDEL_REF"; \ + echo ""; cat "$SKILL_FILE"; \ + echo ""; cat "$file" ) | gemini > "$tmp_file" if [ $? -eq 0 ]; then # 最初の数行から FILENAME: タグを検索(より柔軟な抽出)