girb 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README_ja.md CHANGED
@@ -1,36 +1,75 @@
1
1
  # girb (Generative IRB)
2
2
 
3
- IRBセッションに組み込まれたAIアシスタント。実行中のコンテキストを理解し、デバッグや開発を支援します。
3
+ Ruby開発のためのAIアシスタント。IRB、Rails console、debug gemで動作します。
4
4
 
5
5
  ## 特徴
6
6
 
7
- - **コンテキスト認識**: ローカル変数、インスタンス変数、selfオブジェクトなどを自動的に把握
8
- - **例外キャプチャ**: 直前の例外を自動キャプチャ - エラー後に「なぜ失敗した?」と聞くだけでOK
9
- - **セッション履歴の理解**: IRBでの入力履歴を追跡し、会話の流れを理解
10
- - **ツール実行**: コードの実行、オブジェクトの検査、ソースコードの取得などをAIが自律的に実行
11
- - **多言語対応**: ユーザーの言語を検出し、同じ言語で応答
12
- - **カスタマイズ可能**: 独自のプロンプトを追加して、プロジェクト固有の指示を設定可能
13
- - **プロバイダー非依存**: 任意のLLMプロバイダーを使用、または独自実装が可能
7
+ - **コンテキスト認識**: ローカル変数、インスタンス変数、実行時の状態を理解
8
+ - **ツール実行**: コード実行、オブジェクト検査、ファイル読み取りをAIが自律的に実行
9
+ - **自律的な調査**: 調査→実行→分析のサイクルをAIがループ
10
+ - **マルチ環境対応**: IRB、Rails console、debug gem (rdbg) で動作
11
+ - **プロバイダー非依存**: 任意のLLM(OpenAI、Anthropic、Gemini、Ollama等)を使用可能
14
12
 
15
- ## インストール
13
+ ## クイックスタート
16
14
 
17
- ### Railsプロジェクトの場合
15
+ ```bash
16
+ # 1. インストール
17
+ gem install girb girb-ruby_llm
18
18
 
19
- Gemfileに追加:
19
+ # 2. APIキーを設定
20
+ export GEMINI_API_KEY="your-api-key" # または OPENAI_API_KEY, ANTHROPIC_API_KEY
20
21
 
22
+ # 3. ~/.girbrc を作成
21
23
  ```ruby
22
- group :development do
23
- gem 'girb-ruby_llm' # または girb-gemini
24
+ require 'girb-ruby_llm'
25
+ Girb.configure do |c|
26
+ c.provider = Girb::Providers::RubyLlm.new(model: 'gemini-2.5-flash')
24
27
  end
25
28
  ```
26
29
 
27
- そして実行:
30
+ # 4. 実行
31
+ girb
32
+ ```
33
+
34
+ 質問を入力して **Ctrl+Space** を押すか、`qq <質問>` を使用します。
35
+
36
+ ## 目次
37
+
38
+ 1. [設定](#1-設定) - 全環境共通のセットアップ
39
+ 2. [Rubyスクリプト (IRB)](#2-rubyスクリプト-irb) - 純粋なRubyでの使用
40
+ 3. [Rails](#3-rails) - Rails consoleでの使用
41
+ 4. [Debug Gem (rdbg)](#4-debug-gem-rdbg) - AIアシスタント付きステップ実行デバッグ
42
+
43
+ ---
44
+
45
+ ## 1. 設定
46
+
47
+ ### インストール
28
48
 
29
49
  ```bash
30
- bundle install
50
+ gem install girb girb-ruby_llm
51
+ ```
52
+
53
+ 利用可能なプロバイダーgem:
54
+ - [girb-ruby_llm](https://github.com/rira100000000/girb-ruby_llm) - OpenAI、Anthropic、Gemini、Ollama等(推奨)
55
+ - [girb-gemini](https://github.com/rira100000000/girb-gemini) - Google Geminiのみ
56
+
57
+ ### APIキー
58
+
59
+ 使用するLLMプロバイダーのAPIキーを環境変数に設定:
60
+
61
+ ```bash
62
+ export GEMINI_API_KEY="your-api-key"
63
+ # または OPENAI_API_KEY, ANTHROPIC_API_KEY など
31
64
  ```
32
65
 
33
- プロジェクトルートに `.girbrc` ファイルを作成:
66
+ 詳細な設定方法(Ollama、その他のプロバイダー、高度なオプション)は、プロバイダーgemのドキュメントを参照してください:
67
+ - [girb-ruby_llm](https://github.com/rira100000000/girb-ruby_llm)
68
+ - [girb-gemini](https://github.com/rira100000000/girb-gemini)
69
+
70
+ ### .girbrcの作成
71
+
72
+ プロジェクトルート(またはホームディレクトリ)に `.girbrc` ファイルを作成:
34
73
 
35
74
  ```ruby
36
75
  # .girbrc
@@ -41,70 +80,104 @@ Girb.configure do |c|
41
80
  end
42
81
  ```
43
82
 
44
- これで `rails console` が自動的にgirbを読み込みます!
83
+ girbは以下の順序で `.girbrc` を探します:
84
+ 1. カレントディレクトリ → 親ディレクトリ(ルートまで)
85
+ 2. `~/.girbrc` にフォールバック
45
86
 
46
- ### 非Railsプロジェクトの場合
87
+ ### モデルの例
47
88
 
48
- グローバルにインストール:
89
+ ```ruby
90
+ # Google Gemini
91
+ c.provider = Girb::Providers::RubyLlm.new(model: 'gemini-2.5-flash')
49
92
 
50
- ```bash
51
- gem install girb girb-ruby_llm
93
+ # OpenAI
94
+ c.provider = Girb::Providers::RubyLlm.new(model: 'gpt-5.2-2025-12-11')
95
+
96
+ # Anthropic
97
+ c.provider = Girb::Providers::RubyLlm.new(model: 'claude-opus-4-5')
52
98
  ```
53
99
 
54
- プロジェクトディレクトリに `.girbrc` ファイルを作成:
100
+ ### 設定オプション
55
101
 
56
102
  ```ruby
57
- # .girbrc
58
- require 'girb-ruby_llm'
59
-
60
103
  Girb.configure do |c|
104
+ # 必須: LLMプロバイダー
61
105
  c.provider = Girb::Providers::RubyLlm.new(model: 'gemini-2.5-flash')
106
+
107
+ # オプション: デバッグ出力
108
+ c.debug = true
109
+
110
+ # オプション: カスタムシステムプロンプト
111
+ c.custom_prompt = <<~PROMPT
112
+ 破壊的操作の前に必ず確認してください。
113
+ PROMPT
62
114
  end
63
115
  ```
64
116
 
65
- `irb` の代わりに `girb` コマンドを使用します。
117
+ ### 環境変数(フォールバック)
66
118
 
67
- ## .girbrc の仕組み
119
+ `.girbrc` に設定がない場合に使用:
68
120
 
69
- girbは以下の順序で `.girbrc` を探します:
121
+ | 変数 | 説明 |
122
+ |------|------|
123
+ | `GIRB_PROVIDER` | プロバイダーgem(例: `girb-ruby_llm`) |
124
+ | `GIRB_MODEL` | モデル名(例: `gemini-2.5-flash`) |
125
+ | `GIRB_DEBUG` | `1` でデバッグ出力有効化 |
70
126
 
71
- 1. カレントディレクトリから親ディレクトリを遡って探索(ルートまで)
72
- 2. `~/.girbrc` にフォールバック
127
+ ### セッション永続化(オプション)
73
128
 
74
- これにより:
129
+ AIとの会話履歴をセッション間で保持できます。明示的にセッションIDを指定した場合のみ有効になります。
75
130
 
76
- - **プロジェクト固有の設定**: プロジェクトルートに `.girbrc` を配置
77
- - **共有設定**: 親ディレクトリに `.girbrc` を配置(例: `~/work/.girbrc` で仕事用プロジェクト全体に適用)
78
- - **グローバルデフォルト**: ホームディレクトリに `.girbrc` を配置
131
+ #### 有効化
79
132
 
80
- ## プロバイダー
133
+ `.girbrc` でセッションIDを設定:
81
134
 
82
- 現在利用可能なプロバイダー:
135
+ ```ruby
136
+ Girb.configure do |c|
137
+ c.provider = Girb::Providers::RubyLlm.new(model: 'gemini-2.5-flash')
138
+ end
83
139
 
84
- - [girb-ruby_llm](https://github.com/rira100000000/girb-ruby_llm) - RubyLLM経由で複数プロバイダー対応(OpenAI、Anthropic、Gemini、Ollama等)
85
- - [girb-gemini](https://github.com/rira100000000/girb-gemini) - Google Gemini
140
+ # セッション永続化を有効化(オプション)
141
+ Girb.debug_session = "my-project"
142
+ ```
86
143
 
87
- [独自プロバイダーの作成](#カスタムプロバイダー)も可能です。
144
+ または、コード内で動的に設定:
88
145
 
89
- ## 使い方
146
+ ```ruby
147
+ Girb.debug_session = "debug-user-auth"
148
+ debugger # このセッションの会話が保存される
149
+ ```
90
150
 
91
- ### Railsプロジェクトの場合
151
+ #### セッション管理コマンド
152
+
153
+ IRBまたはデバッグモードで使用:
92
154
 
93
- ```bash
94
- rails console
95
155
  ```
156
+ qq session status # 現在のセッション状態を表示
157
+ qq session list # 保存されたセッション一覧
158
+ qq session clear # 現在のセッションをクリア
159
+ ```
160
+
161
+ #### 動作
162
+
163
+ - セッションは `.girb/sessions/<session_id>.json` に保存
164
+ - 7日以上アクセスのないセッションは自動削除
165
+ - 同じセッションIDで再開すると、過去の会話を引き継ぎ
166
+ - `get_session_history` ツールで過去の会話を参照可能
167
+
168
+ ---
169
+
170
+ ## 2. Rubyスクリプト (IRB)
96
171
 
97
- Railtieにより自動的にgirbが読み込まれます。
172
+ ### 使い方
98
173
 
99
- ### 非Railsプロジェクトの場合
174
+ `irb` の代わりに `girb` コマンドを使用:
100
175
 
101
176
  ```bash
102
177
  girb
103
178
  ```
104
179
 
105
- ### binding.girbでデバッグ
106
-
107
- コード内に `binding.girb` を挿入:
180
+ または、コード内に `binding.girb` を挿入:
108
181
 
109
182
  ```ruby
110
183
  def problematic_method
@@ -116,74 +189,190 @@ end
116
189
 
117
190
  ### AIへの質問方法
118
191
 
119
- #### 方法1: Ctrl+Space
192
+ **Ctrl+Space**: 質問を入力した後に押す
120
193
 
121
- 入力後に `Ctrl+Space` を押すと、その入力がAIへの質問として送信されます。
194
+ ```
195
+ irb(main):001> なぜ失敗したの?[Ctrl+Space]
196
+ ```
197
+
198
+ **qqコマンド**: qqメソッドを使用
122
199
 
123
200
  ```
124
- irb(main):001> このエラーの原因は?[Ctrl+Space]
201
+ irb(main):001> qq このメソッドの使い方を教えて
125
202
  ```
126
203
 
127
- #### 方法2: qqコマンド
204
+ ### 利用可能なツール (IRB)
205
+
206
+ | ツール | 説明 |
207
+ |--------|------|
208
+ | `evaluate_code` | Rubyコードを実行 |
209
+ | `inspect_object` | オブジェクトの詳細を検査 |
210
+ | `get_source` | メソッド/クラスのソースコードを取得 |
211
+ | `list_methods` | オブジェクトのメソッド一覧を取得 |
212
+ | `find_file` | ファイルを検索 |
213
+ | `read_file` | ファイル内容を読み取り |
214
+ | `get_session_history` | IRBセッション履歴を取得 |
215
+ | `continue_analysis` | 自律調査のためのコンテキスト更新をリクエスト |
216
+
217
+ ### 使用例
128
218
 
129
219
  ```
130
- irb(main):001> qq "このメソッドの使い方を教えて"
220
+ irb(main):001> x = [1, 2, 3]
221
+ irb(main):002> 合計を求めるメソッドは?[Ctrl+Space]
222
+ `x.sum` で合計6が得られます。他にも `x.reduce(:+)` や `x.inject(0, :+)` が使えます。
131
223
  ```
132
224
 
133
- ## 設定オプション
225
+ ---
226
+
227
+ ## 3. Rails
134
228
 
135
- `.girbrc` に追加:
229
+ ### インストール
230
+
231
+ Gemfileに追加:
136
232
 
137
233
  ```ruby
138
- require 'girb-ruby_llm'
234
+ group :development do
235
+ gem 'girb'
236
+ gem 'girb-ruby_llm'
237
+ end
238
+ ```
139
239
 
140
- Girb.configure do |c|
141
- # デバッグ出力(デフォルト: false)
142
- c.debug = true
240
+ ```bash
241
+ bundle install
242
+ ```
143
243
 
144
- # カスタムプロンプト(オプション)
145
- c.custom_prompt = <<~PROMPT
146
- 本番環境です。破壊的操作の前に必ず確認してください。
147
- PROMPT
244
+ ### 設定
245
+
246
+ Railsプロジェクトルートに `.girbrc` を作成。詳細は[設定](#1-設定)を参照。
247
+
248
+ ### 使い方
249
+
250
+ `rails console` を実行するだけ - Railtieで自動的にgirbが読み込まれます:
251
+
252
+ ```bash
253
+ rails console
254
+ ```
255
+
256
+ ### 追加ツール (Rails)
257
+
258
+ | ツール | 説明 |
259
+ |--------|------|
260
+ | `query_model` | ActiveRecordクエリを実行 |
261
+ | `model_info` | モデルのスキーマ情報を取得 |
262
+
263
+ ### 使用例
264
+
265
+ ```
266
+ irb(main):001> user = User.find(1)
267
+ irb(main):002> user.update(name: "test")
268
+ => false
269
+ irb(main):003> なぜ更新に失敗したの?[Ctrl+Space]
270
+ `user.errors.full_messages` を確認したところ:
271
+ - "Email can't be blank"
272
+ 更新時にemail属性が空になっています。
273
+ ```
274
+
275
+ ---
276
+
277
+ ## 4. Debug Gem (rdbg)
278
+
279
+ AIアシスタント付きのステップ実行デバッグ。
280
+
281
+ ### 設定
282
+
283
+ 上記と同じ `.girbrc` を使用。
284
+
285
+ ### Rubyスクリプトの場合
286
+
287
+ `require "debug"` と `require "girb"` を追加し、`debugger`ステートメントを使用:
288
+
289
+ **注意:** `require "debug"` は必ず `require "girb"` より先に記述してください。
290
+
291
+ ```ruby
292
+ require "debug"
293
+ require "girb"
294
+
295
+ def calculate(x)
296
+ result = x * 2
297
+ debugger # ここでAIアシスタント付きで停止
298
+ result + 1
148
299
  end
300
+
301
+ calculate(5)
149
302
  ```
150
303
 
151
- ### コマンドラインオプション
304
+ rubyで実行:
152
305
 
153
306
  ```bash
154
- girb --debug # デバッグ出力を有効化
155
- girb -d # 同上
156
- girb --help # ヘルプを表示
307
+ ruby your_script.rb
157
308
  ```
158
309
 
159
- ### 環境変数
310
+ ### Railsの場合
160
311
 
161
- `girb` コマンドでは、`.girbrc` が見つからない場合に環境変数で設定することもできます:
312
+ debug gemより後にgirbを読み込むためinitializerを作成:
162
313
 
163
- | 変数 | 説明 |
164
- |------|------|
165
- | `GIRB_PROVIDER` | 読み込むプロバイダーgem(例: `girb-ruby_llm`、`girb-gemini`) |
166
- | `GIRB_MODEL` | 使用するモデル(例: `gemini-2.5-flash`、`gpt-4o`) |
167
- | `GIRB_DEBUG` | `1`に設定するとデバッグ出力を有効化 |
314
+ ```ruby
315
+ # config/initializers/girb.rb
316
+ require "girb" if Rails.env.development? || Rails.env.test?
317
+ ```
318
+
319
+ コード内で`debugger`ステートメントを使用:
320
+
321
+ ```ruby
322
+ def show
323
+ @user = User.find(params[:id])
324
+ debugger # ここでAIアシスタント付きで停止
325
+ end
326
+ ```
168
327
 
169
- ## AIが使用できるツール
328
+ ### AIへの質問方法 (デバッグモード)
329
+
330
+ - **`qq <質問>`** - AIに質問
331
+ - **Ctrl+Space** - 現在の入力をAIに送信
332
+ - **日本語入力** - 非ASCII文字は自動的にAIにルーティング
333
+
334
+ ```
335
+ (rdbg) qq ここでのresultの値は?
336
+ (rdbg) 次の行に進んで[Ctrl+Space]
337
+ ```
338
+
339
+ ### AIがデバッガコマンドを実行
340
+
341
+ AIがデバッガコマンドを自動で実行できます:
342
+
343
+ ```
344
+ (rdbg) qq このループを実行して、xが1になるタイミングを教えて
345
+ ```
346
+
347
+ AIは `step`、`next`、`continue`、`break` などを自動的に使用します。
348
+
349
+ ### Ctrl+Cで中断
350
+
351
+ Ctrl+Cで長時間実行中のAI操作を中断できます。AIは進捗を要約します。
352
+
353
+ ### 利用可能なツール (デバッグモード)
170
354
 
171
355
  | ツール | 説明 |
172
356
  |--------|------|
173
- | `evaluate_code` | IRBのコンテキストでRubyコードを実行 |
357
+ | `evaluate_code` | 現在のコンテキストでRubyコードを実行 |
174
358
  | `inspect_object` | オブジェクトの詳細を検査 |
175
- | `get_source` | メソッドやクラスのソースコードを取得 |
176
- | `list_methods` | オブジェクトのメソッド一覧を取得 |
177
- | `find_file` | プロジェクト内のファイルを検索 |
178
- | `read_file` | ファイルの内容を読み取り |
179
- | `session_history` | IRBセッションの履歴を取得 |
359
+ | `get_source` | メソッド/クラスのソースコードを取得 |
360
+ | `read_file` | ソースファイルを読み取り |
361
+ | `run_debug_command` | デバッガコマンドを実行 |
362
+ | `get_session_history` | デバッグセッション履歴を取得 |
180
363
 
181
- ### Rails環境での追加ツール
364
+ ### 使用例: 変数の追跡
182
365
 
183
- | ツール | 説明 |
184
- |--------|------|
185
- | `query_model` | ActiveRecordモデルへのクエリ実行 |
186
- | `model_info` | モデルのスキーマ情報を取得 |
366
+ ```
367
+ (rdbg) qq このループでxの全ての値を追跡して、完了したら報告して
368
+
369
+ [AIがブレークポイントを設定、continueを実行、値を収集]
370
+
371
+ 追跡したxの値: [7, 66, 85, 11, 53, 42, 99, 23]
372
+ ループが完了しました。
373
+ ```
374
+
375
+ ---
187
376
 
188
377
  ## カスタムプロバイダー
189
378
 
@@ -195,61 +384,26 @@ class MyProvider < Girb::Providers::Base
195
384
  @api_key = api_key
196
385
  end
197
386
 
198
- def chat(messages:, system_prompt:, tools:)
199
- # messages: { role: :user/:assistant/:tool_call/:tool_result, content: "..." } の配列
200
- # tools: { name: "...", description: "...", parameters: {...} } の配列
201
-
387
+ def chat(messages:, system_prompt:, tools:, binding: nil)
202
388
  # LLM APIを呼び出す
203
389
  response = call_my_llm(messages, system_prompt, tools)
204
390
 
205
- # Responseオブジェクトを返す
206
391
  Girb::Providers::Base::Response.new(
207
392
  text: response.text,
208
393
  function_calls: response.tool_calls&.map { |tc| { name: tc.name, args: tc.args } }
209
394
  )
210
395
  end
211
396
  end
212
-
213
- Girb.configure do |c|
214
- c.provider = MyProvider.new(api_key: ENV['MY_API_KEY'])
215
- end
216
- ```
217
-
218
- ## 使用例
219
-
220
- ### デバッグ支援
221
-
222
- ```
223
- irb(main):001> user = User.find(1)
224
- irb(main):002> user.update(name: "test")
225
- => false
226
- irb(main):003> なぜ更新に失敗したの?[Ctrl+Space]
227
- `user.errors.full_messages` を確認したところ、バリデーションエラーが発生しています:
228
- - "Email can't be blank"
229
- nameの更新時にemailが空になっている可能性があります。
230
- ```
231
-
232
- ### コードの理解
233
-
234
- ```
235
- irb(main):001> このプロジェクトでUserモデルはどこで定義されてる?[Ctrl+Space]
236
- app/models/user.rb で定義されています。
237
397
  ```
238
398
 
239
- ### パターン認識
240
-
241
- ```
242
- irb(main):001> a = 1
243
- irb(main):002> b = 2
244
- irb(main):003> c = 3以降も続けるとzはいくつ?[Ctrl+Space]
245
- パターン a=1, b=2, c=3... を続けると、z=26 になります。
246
- ```
399
+ ---
247
400
 
248
401
  ## 動作要件
249
402
 
250
403
  - Ruby 3.2.0以上
251
- - IRB 1.6.0以上
252
- - LLMプロバイダーgem(girb-ruby_llm または girb-gemini)
404
+ - IRB 1.6.0以上(IRB/Rails使用時)
405
+ - debug gem(rdbg使用時)
406
+ - LLMプロバイダーgem
253
407
 
254
408
  ## ライセンス
255
409