種別[gsm] 2025-06-14T13:49:45Z
セクショングローバル共有メモ
日時2025-06-14T13:49:45Z
元URL(URLなし)

CLAUDE.md についての記事を読んだ。あれだけお世話になってる…

jrf> CLAUDE.md についての記事を読んだ。あれだけお世話になってる Gemini さんにも支払いできてないのにましてや Claude Code を使うのになんて課金できないビンボーな私 orz。実際に触ったことないまま記事などを参考に、jrf_pdb_agent_lib を使って、CLAUDE.md に似たようなことをやるにはどうすればいいかを考える。

まず、simplest-pal で導入できたので、エージェント用の Python ファイルは .apy とする。pal.do で関数やクラスを書くにはどうすればいいんだとか…気になる点は出てきてるのだが、その点は置いておいて、今回のことに集中する。

.apy はどんどん書き換えていくべきだが、ホットリローディングとかは基本的にないので、おそらく AI は書き換えたものを .apy.new みたいなファイルに残しておき、実行が終了したときに .apy.new を .apy にムーヴするのだろう。もし、デバッグのためにデバッグの途中で何度も書き換えるべき .apy があるとすれば、それは _tmp.apy みたいいったん別のファイルにして何度も reload_module しながら、完成版を作り、それを .apy.new にしておいて、最後に .apy にムーヴするとなるのだろう。

たとえば run_server.apy は次のような感じで作られたとする。

import jrf_pdb_agent_lib as pal
from textwrap import dedent as d_py
from textwrap import dedent as d_md

pal.login()

pal.do(d_md("\
  主目的: サーバーを立てる。

  ( ) データを持ってくる。
  ( ) サーバーを立てる。
  ( ) テストを行う。

  留意事項: ライブラリやアプリが足りない場合はいったん終了する。
"))

これを実行して、処理が終了するごとに ( ) 内に X が付けられていく。だからデータを持ってくるというのが終った時点の run_server.apy.new は次のような感じになるかもしれない。

import jrf_pdb_agent_lib as pal
from textwrap import dedent as d_py
from textwrap import dedent as d_md

pal.login()

pal.do(d_md("""\
  主目的: サーバーを立てる。

  (X) データを持ってくる。
  ( ) サーバーを立てる。
  ( ) テストを行う。

  留意事項: ライブラリやアプリが足りない場合はいったん終了する。
"""), current_code = d_py("""\
  pal.do("サーバーを立てる。")
  raise LoopRequestException
"""))

ここでエラーが出てライブラリやアプリのインストールが必要な場合処理が人に戻されて、それが促される。run_server.apy.new は run_server.apy に上書きされている。インストールをやったあと。

ふたたび run_server.apy が呼ばれると、run_server.apy.new の pal.do の部分が…

pal.do(d_md("""\
  主目的: サーバーを立てる。

  (X) データを持ってくる。
  (X) サーバーを立てる。
  ( ) テストを行う。

  留意事項: ライブラリやアプリが足りない場合はいったん終了する。
"""), current_code = d_py("""\
  pal.do("テストを行う。")
  raise LoopRequestException
"""))

…と書き換わり、最終的にはテストもうまくいけば…

pal.do(d_md("""\
  主目的: サーバーを立てる。

  (X) データを持ってくる。
  (X) サーバーを立てる。
  (X) テストを行う。

  留意事項: ライブラリやアプリが足りない場合はいったん終了する。
"""), current_code = d_py("""\
  pass
"""))

…となって、最終的にそれが run_server.apy の内容になるのだろう。

こうすると、再度、run_server.apy が呼ばれたとき何も実行されなくなるが、それが正しく、再度立てたい場合は git で最初のバージョンに戻す必要がある…というのがこの場合の素直な使い方ではないか。