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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +80 -0
- data/README.md +283 -129
- data/README_ja.md +280 -126
- data/lib/girb/ai_client.rb +209 -29
- data/lib/girb/auto_continue.rb +33 -0
- data/lib/girb/conversation_history.rb +8 -7
- data/lib/girb/debug_context_builder.rb +113 -0
- data/lib/girb/debug_integration.rb +426 -0
- data/lib/girb/debug_prompt_builder.rb +241 -0
- data/lib/girb/debug_session_history.rb +121 -0
- data/lib/girb/exception_capture.rb +4 -0
- data/lib/girb/girbrc_loader.rb +15 -9
- data/lib/girb/irb_integration.rb +233 -1
- data/lib/girb/prompt_builder.rb +156 -46
- data/lib/girb/session_persistence.rb +170 -0
- data/lib/girb/tools/continue_analysis.rb +45 -0
- data/lib/girb/tools/debug_session_history_tool.rb +132 -0
- data/lib/girb/tools/evaluate_code.rb +24 -3
- data/lib/girb/tools/run_debug_command.rb +49 -0
- data/lib/girb/tools/run_irb_debug_command.rb +58 -0
- data/lib/girb/tools/session_history_tool.rb +46 -8
- data/lib/girb/tools.rb +23 -2
- data/lib/girb/version.rb +1 -1
- data/lib/girb.rb +24 -7
- data/lib/irb/command/qq.rb +48 -6
- metadata +11 -1
data/README_ja.md
CHANGED
|
@@ -1,36 +1,75 @@
|
|
|
1
1
|
# girb (Generative IRB)
|
|
2
2
|
|
|
3
|
-
IRB
|
|
3
|
+
Ruby開発のためのAIアシスタント。IRB、Rails console、debug gemで動作します。
|
|
4
4
|
|
|
5
5
|
## 特徴
|
|
6
6
|
|
|
7
|
-
- **コンテキスト認識**:
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
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
|
-
|
|
15
|
+
```bash
|
|
16
|
+
# 1. インストール
|
|
17
|
+
gem install girb girb-ruby_llm
|
|
18
18
|
|
|
19
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
83
|
+
girbは以下の順序で `.girbrc` を探します:
|
|
84
|
+
1. カレントディレクトリ → 親ディレクトリ(ルートまで)
|
|
85
|
+
2. `~/.girbrc` にフォールバック
|
|
45
86
|
|
|
46
|
-
###
|
|
87
|
+
### モデルの例
|
|
47
88
|
|
|
48
|
-
|
|
89
|
+
```ruby
|
|
90
|
+
# Google Gemini
|
|
91
|
+
c.provider = Girb::Providers::RubyLlm.new(model: 'gemini-2.5-flash')
|
|
49
92
|
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
117
|
+
### 環境変数(フォールバック)
|
|
66
118
|
|
|
67
|
-
|
|
119
|
+
`.girbrc` に設定がない場合に使用:
|
|
68
120
|
|
|
69
|
-
|
|
121
|
+
| 変数 | 説明 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| `GIRB_PROVIDER` | プロバイダーgem(例: `girb-ruby_llm`) |
|
|
124
|
+
| `GIRB_MODEL` | モデル名(例: `gemini-2.5-flash`) |
|
|
125
|
+
| `GIRB_DEBUG` | `1` でデバッグ出力有効化 |
|
|
70
126
|
|
|
71
|
-
|
|
72
|
-
2. `~/.girbrc` にフォールバック
|
|
127
|
+
### セッション永続化(オプション)
|
|
73
128
|
|
|
74
|
-
|
|
129
|
+
AIとの会話履歴をセッション間で保持できます。明示的にセッションIDを指定した場合のみ有効になります。
|
|
75
130
|
|
|
76
|
-
|
|
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
|
-
|
|
85
|
-
|
|
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
|
-
|
|
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
|
-
|
|
172
|
+
### 使い方
|
|
98
173
|
|
|
99
|
-
|
|
174
|
+
`irb` の代わりに `girb` コマンドを使用:
|
|
100
175
|
|
|
101
176
|
```bash
|
|
102
177
|
girb
|
|
103
178
|
```
|
|
104
179
|
|
|
105
|
-
|
|
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
|
-
|
|
192
|
+
**Ctrl+Space**: 質問を入力した後に押す
|
|
120
193
|
|
|
121
|
-
|
|
194
|
+
```
|
|
195
|
+
irb(main):001> なぜ失敗したの?[Ctrl+Space]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**qqコマンド**: qqメソッドを使用
|
|
122
199
|
|
|
123
200
|
```
|
|
124
|
-
irb(main):001>
|
|
201
|
+
irb(main):001> qq このメソッドの使い方を教えて
|
|
125
202
|
```
|
|
126
203
|
|
|
127
|
-
|
|
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>
|
|
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
|
-
|
|
229
|
+
### インストール
|
|
230
|
+
|
|
231
|
+
Gemfileに追加:
|
|
136
232
|
|
|
137
233
|
```ruby
|
|
138
|
-
|
|
234
|
+
group :development do
|
|
235
|
+
gem 'girb'
|
|
236
|
+
gem 'girb-ruby_llm'
|
|
237
|
+
end
|
|
238
|
+
```
|
|
139
239
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
240
|
+
```bash
|
|
241
|
+
bundle install
|
|
242
|
+
```
|
|
143
243
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
|
|
155
|
-
girb -d # 同上
|
|
156
|
-
girb --help # ヘルプを表示
|
|
307
|
+
ruby your_script.rb
|
|
157
308
|
```
|
|
158
309
|
|
|
159
|
-
###
|
|
310
|
+
### Railsの場合
|
|
160
311
|
|
|
161
|
-
|
|
312
|
+
debug gemより後にgirbを読み込むためinitializerを作成:
|
|
162
313
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
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` |
|
|
357
|
+
| `evaluate_code` | 現在のコンテキストでRubyコードを実行 |
|
|
174
358
|
| `inspect_object` | オブジェクトの詳細を検査 |
|
|
175
|
-
| `get_source` |
|
|
176
|
-
| `
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `session_history` | IRBセッションの履歴を取得 |
|
|
359
|
+
| `get_source` | メソッド/クラスのソースコードを取得 |
|
|
360
|
+
| `read_file` | ソースファイルを読み取り |
|
|
361
|
+
| `run_debug_command` | デバッガコマンドを実行 |
|
|
362
|
+
| `get_session_history` | デバッグセッション履歴を取得 |
|
|
180
363
|
|
|
181
|
-
###
|
|
364
|
+
### 使用例: 変数の追跡
|
|
182
365
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
-
|
|
404
|
+
- IRB 1.6.0以上(IRB/Rails使用時)
|
|
405
|
+
- debug gem(rdbg使用時)
|
|
406
|
+
- LLMプロバイダーgem
|
|
253
407
|
|
|
254
408
|
## ライセンス
|
|
255
409
|
|