Open17

Claude Code お試し

tatotato

claude

  • -pでインタラクティブなしの結果を得られる
  • -cで前回からの続きとしてメッセージを送れる

なので、CLIから擬似的に会話を続けることができる。

  • --resumeで過去の履歴をみれて、続きから始められる
  • 履歴をどうやって消すのかわからない。コマンドでは無理なのかな?物理削除?
tatotato

claude codeの性質

  • claude -c -p は会話の履歴を全て読んで継続で応答している。別のターミナルでしている会話も反映される。
  • 一方で、claude -c後に連続して会話している方は、その会話で閉じていて、他のところでclaude -c -pしたものが見れない。

良し悪しあって、-cで起動の方は自然と応答が遅くなる。

tatotato

独自コマンドはフォルダ分けしても中をみてくれる。みてほしくないときは.archivesのように隠しフォルダにする。

tatotato

/statusでsessionIDをみれるので、claude -r SessionID -p "hello"で継続できるのか、と思ったらできなかった。

tatotato
tmp/test
1+1を計算して

claude -p "@tmp/test" で2を出力してもらえる。
claude -p "@tmp/test 結果に1を足して" で3を出力してもらえる。

Neovimからの単体指示利用のときに使えそう。

tatotato

ざっくり作ってもらった。
選択範囲か今の行にある指示を実行して、別タブに結果を表示する。

" Claude Code shortcut 
function! SendToClaude()
    " ファイルパスを取得
    let filepath = expand('%')
    
    " visual modeかどうかを判定してテキストを取得
    let text_content = ''
    
    " visual modeから抜ける
    if mode() ==# 'v' || mode() ==# 'V' || mode() ==# "\<C-v>"
        normal! gv
        " 選択範囲を取得
        let [line_start, column_start] = getpos("'<")[1:2]
        let [line_end, column_end] = getpos("'>")[1:2]
        
        if visualmode() ==# 'V'
            let text_content = join(getline(line_start, line_end), "\n")
        else
            let lines = getline(line_start, line_end)
            if len(lines) == 1
                let text_content = lines[0][column_start-1:column_end-1]
            else
                let lines[0] = lines[0][column_start-1:]
                let lines[-1] = lines[-1][:column_end-1]
                let text_content = join(lines, "\n")
            endif
        endif
        " visual modeから抜ける
        execute "normal! \<Esc>"
    else
        let text_content = getline('.')
    endif
    
    let claude_input = '@' . filepath . ' ' . text_content

    " テンポラリファイルに内容を書き込み
    " -- エスケープの問題が厄介なため
    let temp_file = tempname()
    let claude_input = '@' . filepath . ' ' . text_content
    call writefile(split(claude_input, "\n"), temp_file)

    execute 'silent tabnew | terminal claude -p < ' . temp_file . ' && rm ' . temp_file
endfunction
tatotato

TODO どんな指示でもコードベースを見にいくからかレスポンスが遅い

tatotato

これおそらくclaude -cが会話の連続ではなくて最初から会話を作っているため

tatotato

直接ファイル編集されるともやっとするときがある。そういったときは、

CLAUDE.local.md
ファイル編集を禁じる。
指示内容をレスポンスとして返すこと。

みたいにするといい(?)

tatotato

開発しながらちょこちょこ実行するための独自コマンドを作ってみた。
あとは開発しながら調整が必要。助言が毎回出ると鬱陶しさがあるかもしれない。
// もうちょい速度が出れば、mix-test-observerのかわりになりそう。

refs: https://zenn.dev/fumitoito/articles/db76a2c2d8cdc7

tatotato

開発の一区切りとして一連処理を実行します。全体の工程を示します。

  1. コード整形
  2. 自動テスト実行
  3. 助言

対象は作業を行ったファイルのみとする。Git管理下であればgit statusも参照のこと。

1. コード整形

mix formatを対象ファイルに実施する。

2. 自動テスト実行

MIX_ENV=test mix testを実施する。
ただしmixコマンドを都度起動すると時間がかかるため、下記のファイル一覧を出した後に、まとめて実施する。

(a)対象テストファイル
(b)対象コードに関連するであろうテストファイル(存在する場合)

3. 助言

最高位のレビュアーとして、作業者の成長を促すことを目的とする。
自動テスト結果に対するフィードバック、あるいは、対象ファイルのロジックや記述に対して助言を行うこと。
優先度をつけて簡潔に列挙すること。

出力フォーマット

## コード整形結果

- {自動整形したファイル名}

## 自動テスト実行結果

- {採番} {失敗したテストのファイル名:行番号の一覧}
  - {簡潔なエラー内容}

## 助言

**自動テスト**

{対応する自動テスト実行結果採番}:
{簡潔な修正方針}

**課題 必須(MUST)**

{採番} {見出し}:
{内容}

**課題 すべき(SHOULD)**

{採番} {見出し}:
{内容}

**課題 一流の考え(THINK)**

{採番} {見出し}:
{内容}

**リファクタリング**

{採番} {見出し}:
{内容}
tatotato

コマンドファイルを作るためのコマンドがいる感

tatotato

claude + mcp お試し

tatotato

ちょっとしたサービスならもう少し速度が出れば、ローカルLLM+チャットインターフェースなサービスに置き換えれるのかな。ただ、記憶力がどこまでいけるか、情報を与えすぎると混乱している気がする。記憶力はあるんだから、コンテキストの把握を工夫できれば、か。

tatotato

アプリをAndroidとかじゃなくて、AIチャットサービスにインストール(MCPサーバ登録)してもらう時代か。ただローカルオンリーなアプリはまだ時間がかかりそうか。頑張って、チャットUI + チャット系AI API + function calling(自前)か。

tatotato

従来的な開発効率を上げていく方針と、スクラップ&ビルドで割り切って進めていく方針とがありそうではある。今のレベル(4 Opus)では、ケアしていかないと見てくれる範囲が狭くてひどめなコードを量産して、そのうち詰んで、その解決に投入されたエンジニアが