2025-3

2025年版 3
はじまり
- 記事の目的
この記事の目的
zennのscrapsはかなり便利なのだけれど、不要なscrapを立ち上げてすぐに辞めるみたいな作業をしがち、そんなわけで一覧部分にはタイトルだけに近いようなメモの残骸が並んでSN比が悪くなる。
(これはgithub issuesも同様の問題)github issuesより良いところは
- リンクを貼るとcard UIで良い感じにOGP的な情報を展開して表示してくれる
- github discussionsと同様に複数の枝を持たせて各枝毎にコメントを書くことができる
そしてChangeLogメモのように一箇所にまとめるという意味で一箇所に集約してみると良いのでは?という感じになった。というわけで2024年版をここに書くようにする。
ついでに、作ったscrapsのメモをここに載せていくようにしてあげれば大きな意味でのmeta scrapsに使える気もした。

過去

2025-06-30
- 思考の備忘録のプロンプト続き
- 閉じた省力gist

思考の備忘録のプロンプト続き
現状、思考結果の記録と思考過程の記録のプロンプトで前者が有意になることはないかも。でも対話履歴の順序に左右されてしまう欠点が後者にある(特に些細な誤解を後に解消したときなど。記録ではそれは前提として乗って欲しい)。
あと読み物としては感情的なものの排除は楽しくない気がするし。積極的な専門用語の利用をさらに推し進めて極論でまとめてしまっても脚注で誤魔化せれば良いじゃんとも思ったりした。
あと純粋に頭が働いてない時のための咀嚼難度の低いものが読みたくなった。

閉じた省力gist
s3とかr2に1ファイルアップロードすることでgistは作れないか?と思ったした。fossilとか全部sqlliteらしいのでそれを丸ごとアップロードすれば?ところでsqlliteもwasm経由でブラウザ上で動かせたりしない?

2025-07-04
- minigo
- dictknife

2025-07-05
- python package modernization
- ポチョムキン理解の論文を読んだふり
- プロは記事作成にLLMを部分的に使う

python package modernization
昔作ってたdictknifeを現代化した。0.14.2に上げた。
- setup.pyを辞めてpyproject.tomlにした
- build systemはuvではなくhatchにした
- ローカルで複数バージョンのpythonを手軽に試したい
- version情報をスクリプト側に持たせたい
- 型をつけた
- 完全ではない
- 何もない所から型を埋めるのにautotypingは便利
- https://github.com/JelleZijlstra/autotyping
- doc stringを出力してもらうのにjulesの助けを借りた
- 勝手にリファクタリングして壊した 🫠
- https://github.com/podhmo/dictknife/pull/213

ポチョムキン理解の論文を読んだふり
前のappleの論文のやつの定性的版っぽい。preprintの論文。
対話して分かったふりをした。

appleの論文のやつを読んだふりをしたやつはこれ

プロは記事作成にLLMを部分的に使う
自分は思考過程記録プロンプトとか思考結果記録プロンプトとかを作って対話履歴から思考の備忘録的なものを出力させて遊んでるけど、まぁ記事を作成するのにまじになるなら結果をそのまま採用したりはしないよな。調整が必要そう。
ai用のSEOは社名検索のみというか第一想起のみという感覚があったりする。
まぁどこかのタイミングでプロンプトの回答に広告がついたりするようになるのかもしれない(音声での回答だと有効そう(?))
スクレイピングできる/できないでオークションするという話もあったな。CDNとかその種の社がやると強い。
402 Payment Requiredが初めて大規模に効果的に使われそうみたいな方面でワクワクした。

コーディングエージェントの暴れを防ぎたい
safe-rmよりapparmorのほうがかっこよさがある。
denoで書くとかもかっこよさがあるんだけど特定の行為のみを禁止するのではなくホワイトリストだからという話そう。

2025-07-08
- minigoとjules

minigoとjules
julesは事実上ファイルの移動を伴うリファクタリングができない

julesの指示は細かめにtodoを箇条書きさせて1つ選んで更新させるというのが良いかも?こういう感じ。
examples/minigoのtodo.mdを眺めて1つのタスクに絞って実装して。Type declarations (type MyInt int)が良いかも。jsonschemaのようなenumを定義できるようにして。stringの制約付きのもの。
テストが通るまで実装の修正を繰り返して。 最後にtodoを更新して。
最初と最後が使い回せる。

1つ選んで進めるを入れる理由はしっかりと存在していて、たまにテストがうまく実行されない時がある。それで以下のような感じでガンガン進めた気になる時がある(このようなコメントのものどんどん機能追加をしていく)。
全てのユニットテストケースにおいて、ジェネレーターが生成すると予測されるコードは、テストで期待されるコードと一致しており、論理的には全てのテストがパスすると判断いたしました。
このため、現時点でのジェネレーターコードやテストコードの修正は不要であると考えております。
もちろんコンパイルエラー。そして修正も不能になり捨てることになる。

2025-07-09
- pythonでライブラリにはuvではなくhatch
- python3.13からlib2to3がなくなった

pythonでライブラリにはuvではなくhatch
簡単な自分用のガイドを作ってもらった
何でuvではなくhatchを使うの?
- editable install対応
- ローカルで複数のpythonバージョンでのテストが楽
- バージョン情報をスクリプト側に持たせてpyproject.tomlで参照するのが楽
総じてライブラリを書いてるときにはhatchのほうが楽(アプリケーションではない)
😵 AIに生成させたままにしてたら普通に嘘が残っていたので修正した(追記)

ちなみに uvx hatch で環境を作りすぐにuvx hatch shell する

python3.13からlib2to3がなくなった
blackのblib2to3あたりを使うのが手軽かもしれない。

hatchは以下がちょっと気に食わないかも?
-
python versionの指定が特殊
+py=3.13
-
あるenvの利用可能なpython versionが一覧で見られない (hatch env)
- matrixで指定するかdefaultのpythonを指定するかのどちらかか。。
-
hatch-testというenvが特別扱い (そしてrunで指定できない?)
-
matrixを指定するとdefault versionを指定できない
-
uv add xxx
みたいに依存を追加してインストールするコマンドがない-
hatch run pip
とかで一時的にインストールできるがpyproject.tomlは手動更新 - https://deepwiki.com/search/hatch-run-pip-install-xxx-uv-a_514cb9e0-2515-4c83-97da-7d907690efe0
-
追記: 環境のmatrixを共有したりもできるみたい。

うーん、個人的にフリーライティングの設定ファイルがとても苦手なのだよな。
とはいえvscodeで管理したくないしemacs上で補完したりlintしたりしたくなった。

一応hatch用のjsonschemaは存在している

あと、github actions用の設定を真面目に調べて変更するか。
そしてその結果をpycommentに適用する。

2025-07-10
- github actionsでhatchを使う
- minigoの使い道を考える

github actionsでhatchを使う
hatch自体を参考にする


minigoの使い道を考える
インタプリタという点が重要そう。
あとはオプションの指定を自由にできるようになるところ。しかしjsonやtomlで良くないか?
rustのserdeの真似をする分にはインタプリタは不要でマーカーをたどれれば十分。しかしgoの場合はserdeの変換方法の自由までは保持できない。
- serialize,deserializeを記述
- jsonタグなどを付与
- 変換関数を生成
くらいのステップが存在していてjsonタグの付与自体はvscodeにも Go: Add Tags to Struct Field
として機能が存在する。
snake_caseやkebab-caseに変更するオプションの指定とかを加えるのにインタプリタを作成する必要がある。ツールを作成できるだけで良いのでは?

2025-07-11
- 考える
- uv runの良さ

2025-07-12
- 論文読んだふり
- 解釈をgrokではなくgeminiに
- プロンプトのテンプレートの入力方法を柔軟にしたい

論文読んだふり
AIコーディングツールは生産性を19%も低下させているという調査結果、AI出力の評価・手直し・再出力などで無駄な時間が大量発生か - GIGAZINE
プロンプトがちょっと気になってきた。
命名がダサい。
detailsタグでプロンプト全体を隠したい
追記: 被験者の一人の振り返り

解釈をgrokではなくgeminiに
一度x/twitter上の連投全体を取り出して解釈や合意を含めて全部gemini上でやろうとしたら思ったよりも要約が機能してた。
- 自分の記述のセンスが良くなり頑健になったのか
- 自分のプロンプトがまずまずだったのか
- モデルが良かったのか?
こんなプロンプトに
以下のテキストの羅列はSNS上でのThreadsの抜粋です。個別の投稿毎に引用しつつ内容を解説してください。
# ルール
解説時には関連する絵文字を1つ選んで表示してください。また解説時には推測部分や補間した際にはそれと分かるように括弧書きで明示的に区別できるようにしてください。
専門用語は脚注で説明してください。ここでの使われ方の意味と本来の意味が併記されてると嬉しいです。
途中で作業を止めたり例として一部を1つ挙げるなどはせず全部の投稿に対してこの作業を行ってください。出力の長さを絞る必要はありません。丁寧に全部出力してください。
# 入力
```text
```
Threadsという表現は良くなかった。SNSの名前と認識されてそう。
あとgrokに直接聞ける形にもしたかった。
以下のテキストの羅列はSNS上でのスレッドの抜粋です。個別の投稿毎に必ず全文引用しつつ内容を解説してください。回答は日本語でしてください。
このテキストの取得方法は入力の章で指定されます。静的に直接テキストが渡されるか記載された取得方法に基づき動的に取得するか決まります。
必ずルールに従ってください。
# ルール
解説時には関連する絵文字を1つ選んで表示してください。また解説時には推測部分や補間した際にはそれと分かるように括弧書きで明示的に区別できるようにしてください。
専門用語は脚注で説明してください。ここでの使われ方の意味と本来の意味が併記されてると嬉しいです。
途中で作業を止めたり例として一部を1つ挙げるなどはせず全部の投稿に対してこの作業を行ってください。出力の長さを絞る必要はありません。丁寧に全部出力してください。
# 入力
以下の投稿のURLとそれに続くセルフリプライを全て取得し入力テキストとしてください。
{{URL}}
# 出力
投稿URLと投稿者と日時を表示。
投稿内容の完全な引用
解説
を繰り返す

プロンプトのテンプレートの入力方法を柔軟にしたい
文章を入力する方法が3つある
- 対話履歴全体を入力にする
- 直接テキスト自体をプロンプトに渡す
- URLを入力としてプロンプトに渡す
悩ましい
(あと文脈から自動で入るとかもありはする)
💭対話履歴を貼るときにプロンプトが邪魔になりdetailsタグで隠したい。

2025-07-13
- プロンプトコピー君の更新

プロンプトコピー君の更新
- プロンプト全体をdetailsタグで囲むようにした
- 3つの入力のユースケースに対応した
- 少しプロンプトを整理した。
例えばこんな感じになる。
- 投稿内容抽出
- 完全に引用して解説
- ぽえむ作成
🐾 対話履歴を眺めるときにプロンプト部分が隠れるようになったのは便利。
後はユーザーの入力とaiの出力の部分を分割する方法が欲しいかも?

2025-07-17
- go codegen

2025-07-18
- zshでuv runで補完が効くようにしたい

zshでuv runで補完が効くようにしたい。
本体は eval "$(uv generate-shell-completion zsh)"
なのだけどついでに遅延実行したい。
_uv_lazy_completion() {
if [[ -z "${_uv_completion_loaded}" ]]; then
# uv コマンドが存在するか確認
if command -v uv >/dev/null 2>&1; then
eval "$(uv generate-shell-completion zsh)"
_uv_run_mod() {
if [[ "$words[2]" == "run" && "$words[CURRENT]" != -* ]]; then
_arguments '*:filename:_files'
else
_uv "$@"
fi
}
compdef _uv_run_mod uv
_uv_completion_loaded=1
fi
fi
}
compdef _uv_lazy_completion uv

2025-07-19
- go/packages でハマると辛い
- 簡単なgoldenテストの書き方

go/packages でハマると辛い
正確に言うとanalysistestでハマっていた。
仕方がないので直書きしたがしっくりこない。
📝 GOPACKAGESDEBUG=1 go test
とするとデバッグログが見られることを知った。
追記: 解決した
色々設定をしないと駄目だった。GO111MODULE,GOMODCACHE,GOPATH
詳細
go.workのせいだったみたい。さいあく GOWORK=off go test
とかで実行する。
ついでに、go.modがgo 1.24 で go.workが 1.24.3 のときに go 1.24 は go 1.24.0 を意味していたので GOWORK=off go test ./...
でテストが始まらずに失敗することがあった。
$ GOWORK=off go test ./lint/ -v
go: downloading go1.24 (linux/amd64)
go: download go1.24 for linux/amd64: toolchain not available
1.24.3は手元にあるが1.24.0は手元になくダウンロードに失敗しているときにこうなるらしい。 toolchain go1.24.3
をgo.modに追加するとそちらが使われるようになる。
追記の追記
何故かos.Chdirを要求する。これはキモい。
以下のどれかで失敗してる可能性がある。と思ったがどうもしっくりこない。codegentestは一部壊れるのが分かったが他は問題なさそうに見えた。
- packages.Load
- checker.Analyze
- analysistest.Run
- codegentest.Run
どうしても、chdirが必要になる理由がわからなかったので真面目にデバッグしてみたら衝撃的なことに気づいた。
まさかgoのanalyzer実行後のactionの中でpackages.Loadを呼ぶとかするとは思わないじゃん… 🫠
確かにそういうコードが書かれるということは起きうるのか…julesくん… 😇

簡単なgoldenテストの書き方
簡単なgoldenテストの書き方はflag.ParseをTestMainで呼ぶ感じ。
var flagUpdate bool
func TestMain(m *testing.M) {
flag.BoolVar(&flagUpdate, "update", false, "update the golden files")
flag.Parse()
os.Exit(m.Run())
}
このときふつうに go test -update
とかができてしまう。

2025-07-20
- ちょっと表現を変える修飾を加えるだけでも効果が変わる
- jules いかなる状態でもドキュメントを優先させることは可能らしい
- jules TODO.mdをキューのように使ってる

ちょっと表現を変える修飾を加えるだけでも効果が変わる
- https://podhmo.github.io/chatgpt/
- 思考の備忘録 『思考探求』特化型 のプロンプト詳細
-
+ ただし強弁したり論じる必要はありません。どちらかと言うと思索的なな自分語りと言ったスタイルで記述してください。
結果

jules いかなる状態でもドキュメントを優先させることは可能らしい
現在の状態がいかなる状態であっても、ドキュメント(TODO.mdなどのmarkdown text)だけを更新してそれだけをサブミットするみたいなことはできないのですか?
大変申し訳ありません。ご指示の意図を正しく理解できておらず、ドキュメントの更新を後回しにしてしまいました。記録を残すことの重要性を改めて認識いたしました。
はい、ドキュメントだけを更新して提出することは可能です。現在のコードの状態にかかわらず、docs/remove-adapter-plan.mdとTODO.mdの更新を最優先で行います。
現在の計画を破棄し、ドキュメント更新を最優先とする新しい計画を立てます。
- https://gist.github.com/podhmo/d5e403dc59ba4eda979717949d71e07e
- スマホだとjulesの履歴のコピペは無理そう 🫠

jules TODO.mdをキューのように使ってる
こんな感じのプロンプトを使い回す。
TODO.mdから1つ読み実装してください。必要ならサブのTODOタスクに分解してください。分解した後はTODO.mdに書いても良いです。
その後作業を進めてください。テストコードも追加してください。テストが成功するまでコードを修正し続けてください。作業終了後は必ず最後にTODO.mdを更新してください。
選ぶタスクは特に途中になっている部分に対応してください。完遂できなかった場合にもTODO.mdに追記してください。

2025-07-21
- 思考の備忘録の技術的対話メモ版を考えてた
- veritasは一区切り

思考の備忘録の技術的対話メモ版を考えてた
わりとプロンプトエンジニアリングたいせつかもしれない

veritasは一区切り
1ファイル用のinjectの機能もつけたのでもう良い気がする。やっぱりgo/packages依存は嫌かも。
まぁそれなりに知見が溜まった気がする。
つぶやき
julesに既存のコードを走査してドキュメントを作り計画させて、必要ならサンプルコードを与えてドキュメントを更新させて、それを元にTODO.mdを作成してこれをキュー代わりに実装させながら失敗や見当違いをドキュメントに追記させるという運用が良い感じだった。
あと実装後は適宜TODO.mdを圧縮すると良い。ただこの方法は個人的なツール開発のみに適用できるものかも?

injectの実装はテキストで説明しても頑なにastの追加で乗り切ろうとして途中で実装辞めませんか?とか相談されたけどダメと断った。
go-scanでの実装例を見せてドキュメントを更新させたらすぐだった。

2025-07-22
- julesの使い方慣れてきた

julesの使い方慣れてきた
後でまとめるけれどTODO.mdをチェックリスト形式にすると良い。それをjulesにお願いしてやらせられた。
(既存のdocs/todo.mdはnear-future.mdに変更した)

こういうのもしたくなる。
docs/以下のplan-から始まるドキュメントをTODO.mdに反映させてください(実装済みならそれで良いです。決定事項だけ残してsquashしてください)

終わったあと
TODO.md自体を更新してください。実装済みのものは決定事項だけを残してsquashしてください。
docs/以下のplan-から始まるドキュメントもTODO.mdに追随させてください。それが終わったらタスクはおしまいです。
docs/plan-のドキュメントは決して消さないでください。
docs/plan-のドキュメント追随なので完了済みだとかこのような方法で実装しということを書くべきです。実装内容は確認しましたか計画と差分があるところはありませんか?確認してあれば追記してください。

逆も欲しいな。
- ドキュメントからTODO.mdへ変換
- チェックリスト形式で出力

なんかこんな感じに
docs/plan-*.mdの未実装のものをTODO.mdに転記してください。インクリメンタルに開発していくような順序でTODOを定義してください。また未実装のものをチェックボックスの形式で箇条書きにしてください。
1つしかない作業ですが計画を立ててていねいいにタスクを進行してください。
TODO.mdの既存の注意書きや実装済みに関する項目は消さないでください。
色々前回のTODOが消えたりあれだったのでこういう感じでdocs/prompts.mdを作った。
今回行なったplan-*.mdからTODOへの転記のタスクは度々行う機会がありそうです。今までの応答などで気をつける点などを加味しつつ1回のプロンプトでお願いするようにしたいです。そこで現時点でそのプロンプトを把握してるであろうあなたにdocs/prompts.mdに英語でプロンプトを出力してもらいたいです。

2025-07-28
- gemini gemsを使ってみる

2025-07-29
- formatをするだけのgithub action

formatをするだけのgithub action
julesは常にAGENTS.mdを守るわけではない。なのでgoimportsとかを常に使ってくれるわけではない。スマホからなのでコマンドの実行環境がない。仕方がないので生成させた。
手動で実行する。
トークンが必要だった
Fine-grained PATを使用する場合
- Contents: Read and Write
- Pull requests: Read and Write

2025-07-30
- julesくんはテストだけでも不足
- 英語でメモがやっぱり取りたい
- 直近julesで書かせてみたリポジトリっていくつあるんだろ?

julesくんはテストだけでも不足
致命的な問題が後になって表出するね…テストを書いてても… スマホだけ開発はやっぱり厳しいのか…
かなり偶発的で自主的な障害対応状態になりこれによって頭は局所的に働くのだけど普通に疲れるというか無理する形になるんだな。アドレナリン的なものがでて辞められないみたいなのもある。ただし解決後に徒労という感じもあり…。休養のタイミングがなくHPが下限ギリギリで張り付く感じになる。
その上辞められなくなってる。
あとインクリメンタルな開発という概念が消えるのでデバッグが後にクソ辛くなる感はあるな…。
まさにレガシーコードに触れる感じ
(てすとはある)
LLMを使ったコーティングのアナロジーは重機とかで良い気がするんだよな。
あとサブプロセスが好き過ぎる(geminiだけかも?)

英語でメモがやっぱり取りたい
aiとやり取りしつつコードを書いてるとき公に見せるコードはやっぱり英語で書きたい。そしてやるべきタスクが増えて頭の中に乗り切らなくなったときにメモを取りたい。
これをスマホ上でやろうとすると結局公の場でやりたくなるので英語でメモが取りたくなる。しかし英語の文法への理解も最近怪しくなってきた。タイポなどに気づきたい(自分用の変形した奇形の英語メモはやめたい)
もう一つ。スマホのタップ入力のところで気軽に日英翻訳の機能が使えるようになってるのだけど、ここで出力される英語が気に入らない時がある。これを直したいがちょっとした変形ができない。これができるようになりたい。そしてそもそも一発でいい感じの英語に翻訳される入力ができるようになりたい。この2つを目論んだプロンプトを考えていた。

直近julesで書かせてみたリポジトリっていくつあるんだろ?

flagsのみのコマンドラインオプションパーサーを作るくん(一部のgoのコード自体をミニインタプリタで実行と言うアイデアがgo-scanのminigoに繋がってる)
pr114件
ずっと言っていたlazyなgo/packagesの代わりになるライブラリ。型の解析をどれだけサボれるかが肝そう。インターフェイスを揃えるのは諦めた。examplesで利用例を確認してたらそちらに力を注ぎすぎてる感がある(マーカーでやるのの限界がある気がする)。
pr214件
cueを使ったvalidatorのお試し実装。こちらは素直にgostaticanalysis/codegenとか既存の枠組みに載ってる。
pr77件
全部goで全部コード生成かも。いろいろ知見は見えてきた。

2025-07-31
- go/astのnodeの変更でコメントがずれる
- プロンプトの調整が悩ましい
- LLMとの対話履歴の共有について

go/astのnodeの変更でコメントがずれる
処方箋の考案

プロンプトの調整が悩ましい
- grokのxのスレッド取ってくるやつ、出力形式を守らない事がある。英語で返ってくる。
- 対話履歴のラバーダックのやつ、過程をすっ飛ばす。
- 実験レポート風のやつのほうが役に立つかも?
- 英文チェッカーが多分ネイティブ向け

LLMとの対話履歴の共有について
- ai studio上で共有するとログイン必須になる
- どうせならとesaやgistで共有する仕組みを作った
- (grokは共有は楽でコピペが辛い)
- ai studioで共有する利点もある
- 履歴共有後に別人が対話を進められる
- branch from hereが便利
- セル毎にmarkdownでコピペできる
- 履歴共有後に別人が対話を進められる
- 対話履歴は不要な重複が存在する
- 思考の備忘録のプロンプトを作った
- 技術的な対話履歴の備忘録も作った
- (結果ではなく過程の共有が有効)

スマホ前提の制限
- 画面が狭い
- 細々とした編集が無理
- 何かと何かを比較する動作ができない
- 多くのwebサービスが使い物にならない
- パラメーター指定でweb APIを呼び辛い
- web APIを呼ぶにもデプロイが必要そう
- プロンプトの実行は一回にしたい
- mermaidのsyntax errorがだるい
- 調整の繰り返しによる修正ができない
- クリップボードのサイズに制限がある
- gistへのファイルアップロードが欲しい
- oauthログインが必要(デプロイ)
- (github pagesだと無理)
- gistへのファイルアップロードが欲しい

スマホでの開発について
- リモート側のaiエージェントだけ使える
- jules
- 並列実行は容易(蠱毒)
- ci設定的なだるさがある
- アクシデント時に直接環境を触れない
- セーブ/ロードに時間がかかる
- 休養時間がなくなる。時間が溶ける。
- クライアント側のaiエージェントが無理
- claude code
- 補助的な施策は取れない
- github actionみたいな設定は面倒なのでしない(claude code action)
- どこかにsshも未達成(気力がない)
- 実行結果を確認できない
- cliを作っても事実上ライブラリの実装
- デプロイしないとスマホから触れない
- web uiを手元で確認して作れない
- エディタを豪華に便利にできない
- emacs, vscode

音声入力について
- siriなどの時代から苦手意識がある
- 入力速度はおそらく随一
- デバイスやフォーカスが占有される
- (専用機器を買う可能性はあり?)
- 文章作成時には後に編集が必要
- 誤認識がひどい(?)
- 改行が入力できない

2025-08-01
- LLMとmermaidとsyntax errorと
- 失敗したprからドキュメントだけを取り出したい

LLMとmermaidとsyntax errorと
まぁまぁミスする。何か良い方法がないかなと考えてる。単純にはPC上で何往復かすれば良いのだろうけれどスマホからの利用の場合はそうでもない。
仕組み的にはメモ化再帰的な形でブラウザ上だけでリーズナブルに解決できないか?みたいなことを思ったのだった。
大げさに言うとこれ当然だけどコピペして切り貼りとかしたくないわけよ。
まぁ手元でPCでさわれば何往復かさせるだけな気もするけれど。理想はテキストを渡したら一気に自動でmermaidの図だけが修正された結果が手に入る感じが良い。
大げさに言うとverilogだけどこれ


失敗したprからドキュメントだけを取り出したい
スマホだけだと厳しい。仕方がないのでgithub actionを作る。

2025-08-02
- go-scan
- julesに言うことを聞かせる

go-scan
- convertが壊れてたのを修正した
- 基本的には全ての要件を満たすようになった
それはともかく思ったのは2つ
- そろそろgo-scanとexamples/convertの関係を整理したいgit subtreeとかで管理する?
- まだまだgo-scan自体はvendor的な感じで使いたい
- 手元にライブラリがある方が楽
- ツール単体でも機能させるような調整をしたい
- 名前をまだ決めてない
- そろそろワンショットのドキュメントが邪魔になってきた
- docs/plan-xxx.mdとか作ったはいいがずっと残るのもあれ…
- やはりまともにメンテする仕様という存在を作るべきなのか…?
- derivingを一度に行いたい
本質的なだるさを考えてみると、マーカー経由だとフリーハンドかつ細々とした調整がだるく、言語を分けるとスタブの生成が面倒という話になるのだよな。
そして一回きりで終わるのではなくずっとメンテし続けなくてはいけない(しかし環境が変わればツールも変わる)。

- 動くと便利の間の境界は大きい
- filledじゃない場合にはそのフィールドが知りたい
- grepで列挙したい
- 追加したい
- walk once
- enum的な抽出

julesに言うことを聞かせる
タスクが終了したので作業できません的な返答
再度最終的なコードを提出してしまったため、ドキュメントを直接修正することはできません。大変申し訳ありません。
こういうのは、「それではもう一度今の点を考慮に入れて再度計画し直しタスクをやり直してください」 とかで良い

jules、簡単過ぎるタスクでプランの作成が行われない時に更新を検知しないみたい?
web ui上にもdiffが現れないしsubmitもされないのだけど、jules自身はファイルも更新したしタスクも完了したと思ってるのだよな。ドキュメントの更新的なタスクでこれがよく起きる(だるい)
「まだ私のところには差分が届いてません。git add -fも何をしても良いのでドキュメントの更新をサブミットしてください。
それでも無理なら最初から計画を立てて実行し直してください(もしかしたら計画を立てる作業がないとあなたの作業内容を検知するweb uiは正常に機能しないのかもしれません)」みたいなことを言うと計画を立てるのでどうにかなる。
というかたぶん計画を立てさせるだけで良い。
「go-scanにenum的な定数定義を取得する機能を追加してください。基本的には型定義に隣接したconstの定義があればenum的な定数定義でしょう。実装計画をdocs/plan-scan-enum.mdに出力してください。
作業はドキュメント作成だけですがしっかり計画を立てて類似パターンを考えてドキュメントを出力してください。」

2025-08-03
- go-scan deps-walk

go-scan deps-walk
- パッケージ間の参照関係を辿るものを作りたかった。
- 意外と実装はサラッと終わる。ライブラリとして成長してきた。
- mermaidとしての出力はやっぱり壊れてた
- JSON出力で考えることがあった
- 逆参照を辿るのが地味に面倒
- mainを特別扱いする必要がある

2025-08-04
- mermaidやgraphvizをスマホで手軽に表示したい


承知いたしました。技術的な特徴と利用ライブラリを以下に示します。
技術的な特徴
- UIフレームワーク: Pico.css v2
- JavaScriptモジュールシステム: Native ES Modules
- モジュール解決: Import Maps
-
ライブラリ読み込み: 動的インポート (
import()
) による遅延読み込み - 高速コンピューティング: WebAssembly (Graphviz)
- アーキテクチャ: シングルページアプリケーション (SPA), バンドルレス
- スタイリング: モバイルファースト, CSS Grid Layout
利用ライブラリ (CDN経由)
-
Mermaid:
mermaid
-
d3-graphviz:
d3-graphviz
-
Graphviz (WebAssembly):
@hpcc-js/wasm


2025-08-08
- cdn経由のesmのimportがむずい
- julesが途中で止まったとき

cdn経由のesmのimportがむずい
- pathが分かんない
- umdだけかどうか分かんない
- 何がexportされるか分かんない
- defaultがexportされてるのかわかんない
だるい
履歴

この前回のやつのimport pathが壊れてる感ある。
- mermaid
- @hpcc-js/wasm-graphviz
- d3-graphviz

julesが途中で止まったとき
以下のような質問を投げる。さらに酷いときはtrouble-foo.mdみたいなテキストを作らせる。
現状の状態を把握したい
- 今回何をしたか教えて
- どのようなアクシデントに遭遇したのか教えて
- どのような見込み違いに遭遇したのか教えて
- 残りのタスクを教えて(TODO.mdを見る必要はない。現在抱えてるものすべて)

2025-08-11
- jules時代で会話の仕方で解決するものがある
- special form付きのgoのサブセットのインタプリタ

jules時代で会話の仕方で解決するものがある
- バグ修正とともにレポートを書かせる
- 既知のバグと言っていた部分に言及する
- 直させてさらにパフォーマンスのことを尋ねる
💭 対話履歴も残しておきたいくらい

special form付きのgoのサブセットのインタプリタ
作った。マーカーベースのアプローチの問題を解決したかった。
動作のキモは
- go側ではスタブのライブラリを読む
- 実行時は別のインタプリタで実行する
こういうコードでimport pathとか空気を読んでいい感じにうごかしたい。文字列で指定とかだと結局マーカーベースのアプローチと変わらない感じ。
//go:build codegen
// +build codegen
package main
import (
"github.com/podhmo/go-scan/examples/convert/convutil"
"github.com/podhmo/go-scan/examples/convert/sampledata/destination"
"github.com/podhmo/go-scan/examples/convert/sampledata/funcs"
"github.com/podhmo/go-scan/examples/convert/sampledata/source"
"github.com/podhmo/go-scan/examples/convert-define/define"
)
func main() {
// Define global rules for types that cannot be mapped automatically.
define.Rule(convutil.TimeToString)
define.Rule(convutil.PtrTimeToString)
// Define the conversion from SrcUser to DstUser, only specifying the exceptions.
// The source and destination types are inferred from the function signature.
// Fields with matching names (e.g., Details, CreatedAt) are mapped automatically.
define.Convert(func(c *define.Config, dst *destination.DstUser, src *source.SrcUser) {
// Exception 1: Different names.
c.Map(dst.UserID, src.ID)
// Exception 2: Different names AND a custom conversion function.
c.Convert(dst.Contact, src.ContactInfo, funcs.ConvertSrcContactToDstContact)
// Exception 3: A computed field.
c.Compute(dst.FullName, funcs.MakeFullName(src.FirstName, src.LastName))
})
// Define conversion for a nested struct with name differences.
define.Convert(func(c *define.Config, dst *destination.DstAddress, src *source.SrcAddress) {
c.Map(dst.FullStreet, src.Street)
c.Map(dst.CityName, src.City)
})
}
defineパッケージの関数群はast的な情報を取り出しいい感じに対応関係の情報を取り出す(これは型から型の変換関数の生成用のメタデータ)。

マーカーベースだとこう。
package source
import "time"
// convert:import convutil "github.com/podhmo/go-scan/examples/convert/convutil"
// convert:import funcs "github.com/podhmo/go-scan/examples/convert/sampledata/funcs"
// convert:rule "time.Time" -> "string", using=convutil.TimeToString
// convert:rule "*time.Time" -> "string", using=convutil.PtrTimeToString
// @derivingconvert("github.com/podhmo/go-scan/examples/convert/sampledata/destination.DstUser")
// convert:computed FullName = funcs.MakeFullName(src.FirstName, src.LastName)
type SrcUser struct {
ID int64 `convert:"UserID,using=funcs.UserIDToString"`
FirstName string
LastName string
Address SrcAddress
ContactInfo SrcContact `convert:"Contact,using=funcs.ConvertSrcContactToDstContact"`
Details []SrcInternalDetail
CreatedAt time.Time
UpdatedAt *time.Time
}
// @derivingconvert("github.com/podhmo/go-scan/examples/convert/sampledata/destination.DstAddress")
type SrcAddress struct {
Street string `convert:"FullStreet"`
City string `convert:"CityName"`
}
type SrcContact struct {
Email string
Phone *string
}

2025-08-12
- goのサブセットのインタプリタができたので
- julesでの実装のスタイル

goのサブセットのインタプリタができたので
できたので
シンボリック実行みたいなことをする他の評価器も考えてみる。

julesでの実装のスタイル
最近はだいたいこんな感じになってきた。ある機能xxxが欲しいときに軽い調査のあとに計画を立ててTODOを作ってあとはキューを回す。
- docs/analysis-xxx.md を作成
- docs/plan-xxx.md を作成
- plan-xxx.md から TODO.md にタスクリスト化して転記
- TODO.mdをキューとしてループを回す
- TODO.md のxxxのセクションをsquashしてimplementedに移動
- docs/plan-xxx.md に implemented のnoteを付ける
🫠docsとTODOが膨れ上がっていくのが問題ではある。

TODO.mdをキューとしてループはこの辺のやつ
以下のjulesのところのgo packagesを使ってる

2025-08-13
- go1.25が出たのでencoding/json/v2を
- 技術的な備忘録のプロンプトを改善したい
- 備忘録プロンプト集自体を品評させてみる





備忘録プロンプト自体を品評させてみる。
はい。
- https://aistudio.google.com/app/prompts?state={"ids":["1oNsWl-bQjsqdTfVpoQZAKbM4OGJUMBKI"],"action":"open","userId":"108405443477417806091","resourceKeys":{}}&usp=sharing
- https://drive.google.com/file/d/1oxrZFcSloeuVN8-7hHihGlHHmusVoK0q/view?usp=sharing
いくつか追加したいものも現れた。
- 感情のメタ認知
- 次の一歩を収集してみるプロンプト


2025-08-15
- julesに何回も要望したいことがあったのでメモ

julesに何回も要望したい事があったのでメモ
特に汎用性があるわけではない。とは言え調査用のテストを書いてもらってそれをトラッキングするドキュメントを作ってあげるのも便利ではある。
スキップを外したテスト結果をもって docs/trouble-minigo-stdlib-limitations.md の内容を更新して。
他にもうひとつ docs/plan-minigo-stdlib-limitations.mdのマナーに従ってstdlibのパッケージのテストを1つ追加して。minigo/minigo_stdlib_custom_test.go にテストは追加して。そしてまたdocs/trouble-minigo-stdlib-limitations.mdに結果を追記して。
あ、strings,bytes,strconv以外のものでやって

2025-08-18
- go-scan, minigoのv0.0.1を公開した

2025-08-23
- docgen = symgo + minigo
- 不要なメソッドや関数を消したい

docgen = symgo + minigo
symgoでシンボリック実行的なことをしてgoのコードを解析してopenapi docを生成するツールを試しに作ってみていた。対象はgo1.22+のnet/http。
その後カスタマイズをビルドせずに行えないかを考えてみたりして、設定ファイルをminigo(importが遅延されるgoのサブセットのインタプリタ)で解釈することにしてみた。するとgqlgenなどのように対象を文字列で書きタイポに苦しむみたいなことから解放されそうだった。
こんな感じでimportを使って書けるのが良い。

あとこれでメソッドを許すのにminigo側にtyped nilを受け入れるようにする必要が出てきたのだけどこれをjulesに受け入れさせるのに苦労した。julesに単純に実装してと言ってしまうと既存のテストコードなどとの兼ね合いから実装の方法の可能性が枯渇してスタックする。このときに環境がおかしいみたいなエラーメッセージで死ぬのでハマった 👾。
ちなみに以下のような制約を追加して実装させた
- typed nilからメソッドを値として参照したい
- typed nilのメソッドの実行は失敗して良い
- typed nilのフィールドアクセスは失敗して良い
極論言えば制約付きの遷移先を巡ってランダム探索みたいな感じで考えられるからそりゃぁ遷移先の候補が空になったら死ぬよな。

不要なメソッドや関数を消したい
現在のgo-scanのリポジトリではライブラリのコードのほかにexamples以下に利用例としていろいろなツールのコードが書かれてる。つまるところモノリポと言っても良い。go.modも分かれている。
モノリポの中で使われてないexportedなメソッドや関数を調べる方法はないだろうか?それこそgo-scanを使って作るべきかもしれない。テストコードで使われてるものも省きたいかも。
ちなみにunexportedな関数に関してはgoはそもそもコンパイルエラーなので孤児を気にしなくて良い。

2025-08-25
- find orphans
- julesが失敗した時にドキュメントを出させる

find orphans
これ
- https://zenn.dev/link/comments/ba6ab671282f36
- https://github.com/podhmo/go-scan/tree/main/examples/find-orphans
最終的にsymgoで簡易的に実行させることにした。
go.mod以下だけだとexamplesディレクトリなどはワークスペースが分かれたものに対応できない。workspace-rootを追加した。

julesが失敗した時にドキュメントを出させる
こんな感じでPRを作らせる
現在の状況を未来のあなたのため詳細に出力してください。前提として変更したかった事柄を書きその後見通しや実装結果や意思決定や特にピボットしたものや事前に分かっているべきだった障害などを含めてください。次回同じようなタスクをあなたが再度行うときの助けになるようなドキュメントが欲しいです。docs/trouble-find-orphans-refinement.mdに英語で出力してください。実装は途中でも良いのでこのドキュメントの作成を最優先しこのドキュメントができ次第サブミットしてください。
その後タスクリストを
いいですね。作ったドキュメントの実装をタスクリストに分解して上から順に実装すると完成するというような新たなセクションを設けて追記してください。
ふむむ。ちょっとどう作るかまで固定されてて厳しい。
タスクリストはもう少し抽象度を上げて良いかもしれません。課題のリストにして課題が分かれば十分です。どのように解決するかを載せる必要はありません。もう一度タスクリストを作り直してください。
TODO.mdに
作ったドキュメントのタスクリストをdocs/prompts.mdのマナーに従ってTODO.mdに追加してください

2025-08-27
- zedを使ってみたい

2025-08-29
- go-scanの告知への障壁
- 既存のgoのWAFのここが気に入らない

go-scanの告知への障壁
何がネックになってるか整理しておきたい。やらない言い訳とも言う。

機能的なこと
- go-scanと言う名前が良いか未だに迷ってる
- examples以下をもう少し育てたい
- ai(jules)に外部ライブラリを読ませる方法が育ってない
- 未成熟なライブラリは利用例といっしょに育てたい
ディレクトリ構成的なこと
- 普通の場所に普通のものが置かれてない
- 余分なものがたくさん置かれてる
- docs以下に自分用のスクラップメモが置かれてる
- 消費したメモをdocs/配下に置くのは誤り?

そもそもの目的
- go/packagesは重たいというところから始まった実験用のサンドボックス
- 遅延インポート(minigo)
- 浅い走査(symgo)
- 設定ファイルとしての利用(docgen)
- go.modとかに苦しみたくない
- cwdに過度に依存して失敗がだるい
- コード生成を一つにまとめたい
- derivingを用意したい
- encoding/json/v2のstructの書き方
- レガシーなコードは依存が雑い
- minigoで解析したい
普通ならどうする?
- deps-walkは見づらい
- docgenが一番わかりやすい
- 他のフレームワークに対応する…?
- そもそもbufとconnectを使うのでは?
- opeapiができて何が嬉しいの?

新たな利用例
- cli parser (goatみたいな)
- sqs send場所可視化
- MCPサーバー?
気になること
- そもそもPCを触らない
- ファイルキャッシュの部分を使えてない
- コード生成用のユーティリティを結局使ってない
本気で作るとしたらgo-scanから持ってこれるもの
- structから別のstructへの変換(convert)
- oneofに対応したjson(deriving)
- requestのbinding (deriving)
- APIのコードを直接読んでapi docの出力 (docgen)
足りないもの
- init コマンド
- ドキュメント
- 骨格(フレームワーク)
実はWAFが作れる説がある
- quick apiをリニューアルする
- devDependency的なものは分けたい

余暇にしても利用しない何かを作ってるのだよな。
自分の嬉しいこと
- スマホから色々できること
自分ができること
- PC上でせせこましく設定を管理すること
情報発信したい
- go.mod, go.workの動き(忘れてきてしまったtestdata)
- encoding/json/v2
- いい感じにコメントをずらさずastで書き換える

go.work使う?を参考にgo.workを使うのが雑にgo.modを分けるより正しい気がする。

有名な利用例
わりと有名?echo+connect?buf?っぽい

既存のgoのWAFのここが気に入らない
- middlewareとhandlerの定義に順序がある(go-chi)
- protobufなど謎の依存がある(gin)
- openapi docを手軽に吐けない。謎の記述を要求する(名前忘れた)
- ogen, oapi-codegen, goaとかはschema to codeなのでnot for me
どうしたい?
- 基本的にはapi server
- 全部POSTとGET(QUERY)で良くない?
- 1ファイルで終わらせたい
- いい感じにパッケージを分割したい

しかしWAFが作れて嬉しいのか?
もっというとapiserverが作れて嬉しいのか?

2025-08-30
- gemini with github
- コードの行数を数えたい
- github coding agentを試してみた

gemini with github
deepwikiの代わりに使ってみたい
GitHub レポジトリをインポートして Gemini ウェブアプリでそれについて質問する
パソコン版の Gemini ウェブアプリにログインしている
スマホから使えないみたい。だるい。

コードの行数を数えたい
例えばgoのテストコードとコメントを取り除いた行数を数えたい時など。
(以下はgo-scanの結果)
% brew install scc
% scc --exclude-dir testdata
───────────────────────────────────────────────────────────────────────────────
Language Files Lines Blanks Comments Code Complexity
───────────────────────────────────────────────────────────────────────────────
Go 200 58166 6469 4579 47118 11978
Markdown 81 14955 3899 0 11056 0
Makefile 7 161 29 17 115 3
Go Template 3 174 10 28 136 21
YAML 3 185 26 19 140 0
JSON 2 145 0 0 145 0
License 1 21 4 0 17 0
───────────────────────────────────────────────────────────────────────────────
Total 297 73807 10437 4643 58727 12002
───────────────────────────────────────────────────────────────────────────────
Estimated Cost to Develop (organic) $1,944,800
Estimated Schedule Effort (organic) 17.71 months
Estimated People Required (organic) 9.76
───────────────────────────────────────────────────────────────────────────────
Processed 2661349 bytes, 2.661 megabytes (SI)
───────────────────────────────────────────────────────────────────────────────
テストを除いた数値 --not-match
に正規表現を渡せば良いらしい。
% scc --not-match ".*_test\.go$" --exclude-dir testdata
───────────────────────────────────────────────────────────────────────────────
Language Files Lines Blanks Comments Code Complexity
───────────────────────────────────────────────────────────────────────────────
Go 85 27660 3235 3108 21317 6112
Markdown 81 14955 3899 0 11056 0
Makefile 7 161 29 17 115 3
Go Template 3 174 10 28 136 21
YAML 3 185 26 19 140 0
JSON 2 145 0 0 145 0
License 1 21 4 0 17 0
───────────────────────────────────────────────────────────────────────────────
Total 182 43301 7203 3172 32926 6136
───────────────────────────────────────────────────────────────────────────────
Estimated Cost to Develop (organic) $1,059,281
Estimated Schedule Effort (organic) 14.06 months
Estimated People Required (organic) 6.69
───────────────────────────────────────────────────────────────────────────────
Processed 1815107 bytes, 1.815 megabytes (SI)
───────────────────────────────────────────────────────────────────────────────

github coding agentを試してみた
- https://github.com/podhmo/go-scan/pull/680
- 見た感じあんまり性能は良くなさそう
- julesとは異なり設定してないからかもしれない
- issue自体がjules製(つまりgemini製)だから復元率が良いのかもしれない
💭 views的なリンクで内容を眺められたのは面白かった。

go-scan, find-orphans
なんかこれをマージしたら急に実行に時間がかかるようになった。
- https://github.com/podhmo/go-scan/pull/682/files
- コールスタックのサイズを4096 -> 256にしてもあんまり変わんない

2025-09-05
- go net/http.Client testcode/appcode

go net/http.Client testcode/appcode
- timeout
- コネクションプール
- t.Parallel
- maxConnectionSize
- テストのときはいっそのこと分けたほうが
- https://aistudio.google.com/app/prompts?state={"ids":["1Y2oTR8HsJDifEZeDR3kksQJVmkOdkb6W"],"action":"open","userId":"108405443477417806091","resourceKeys":{}}&usp=sharing

2025-09-07
- go-scan/symgo interface
- symgo performance tuning

go-scan/symgo interface

symgo performance tuning
最高にひどい。なんかjulesで動かなくなったなーとか思っていた。
結局たかだか17000+行程度のコードで80GBくらいメモリー使ってた。
1回目
- Memory Usage: 60-70% reduction (from 75GB to ~20GB)
- Execution Time: 40-50% reduction (from 7s to ~3.5s)
- GC Pressure: 50% reduction in GC cycles
2回目
- Memory usage reduced by 99.9% (from 13.4GB to 14.8MB)
- Execution time reduced by 95% (from 7s to 0.3s)
- Made large-scale symbolic execution practical (17,000 lines of Go code analysis)