🦬
chatgpt-shell.el の使い方
簡単な使い方
(require 'chatgpt-shell)
(setq chatgpt-shell-openai-key "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
として M-x chatgpt-shell
から、
ChatGPT(4o/General)> 1 + 2 は?
1 + 2 は 3 です。
対話するだけ。
便利コマンド
たくさんあるけどこれらだけ知っていればいい。
コマンド | 内容 |
---|---|
chatgpt-shell-send-region-with-header | 「次の○○を○○して」の命令を添えて選択範囲を ChatGPT に送る |
chatgpt-shell | 対話型シェルに入る |
chatgpt-shell-prompt | 対話型シェルに入らずミニバッファで入力する |
chatgpt-shell-send-to-buffer | 引数の文字列を ChatGPT に送る |
お好みで調整
(setq chatgpt-shell-welcome-function nil) ; 最初のメッセージを表示しない
(setq chatgpt-shell-request-timeout 10) ; 10秒でタイムアウトとする
(setq chatgpt-shell-prompt-query-response-style 'shell) ; 結果表示先 (inline other-buffer shell)
(setq chatgpt-shell-streaming t) ; t:少しずつ表示する nil:一気に表示する
(setq shell-maker-prompt-before-killing-buffer nil) ; シェルを閉じるとき transcript.txt に保存しない
既存のプロンプト
一般的な用途に向けた次のコマンドたちが用意されている。
コマンド | 内容 |
---|---|
chatgpt-shell-describe-code | コード解説 |
chatgpt-shell-write-git-commit | コミットメッセージ作成 |
chatgpt-shell-refactor-code | リファクタリング |
chatgpt-shell-proofread-region | 文章校正 |
chatgpt-shell-generate-unit-test | ユニットテスト生成 |
chatgpt-shell-eshell-whats-wrong-with-last-command | eshell で失敗した外部コマンドの理由 |
chatgpt-shell-eshell-summarize-last-command-output | eshell の実行結果要約 |
chatgpt-shell-proofread-region であれば選択範囲の文章校正を手伝ってくれたりする。しかし全部英語で返ってきてしまうため、これらを活用するならまとめて日本語化しておく。
(setq chatgpt-shell-prompt-header-describe-code "次のコードは何をするのでしょう?") ; for chatgpt-shell-describe-code
(setq chatgpt-shell-prompt-header-write-git-commit "次のコミットに対する Git コミットメッセージの作成してください") ; for chatgpt-shell-write-git-commit
(setq chatgpt-shell-prompt-header-refactor-code "次のコードをリファクタリングしてください") ; for chatgpt-shell-refactor-code
(setq chatgpt-shell-prompt-header-proofread-region "次の文章を校正してください") ; for chatgpt-shell-proofread-region
(setq chatgpt-shell-prompt-header-generate-unit-test "次のコードのユニットテストを作成するのを手伝ってください") ; for chatgpt-shell-generate-unit-test
(setq chatgpt-shell-prompt-header-whats-wrong-with-last-command "このコマンド実行の何が問題なのでしょうか?") ; for chatgpt-shell-eshell-whats-wrong-with-last-command
(setq chatgpt-shell-prompt-header-eshell-summarize-last-command-output "次のコマンドの出力を要約してください") ; for chatgpt-shell-eshell-summarize-last-command-output
もっと使いやすくする
用途に応じてなんのコマンドを実行すればいいのか覚えられるわけもないので、Magit で使われている transient.el でメニュー化する。
(require 'transient)
(transient-define-prefix my-chatgpt-shell-menu ()
"ChatGPT"
[
["基本"
("RET" "シェル起動" chatgpt-shell)
("h" "シェル起動" chatgpt-shell)
("i" "ミニバッファで入力" chatgpt-shell-prompt)
("k" "文章校正" chatgpt-shell-proofread-region)
("b" "ビジネス文書化" (lambda () (interactive) (chatgpt-shell-send-region-with-header "次の文章をビジネス文章として校正してください")))
("x" "言い換え(類語)" (lambda () (interactive) (chatgpt-shell-send-region-with-header "次の文章をさまざまな表現に置き換えてください")))
("g" "GitHub Issue" (lambda () (interactive) (chatgpt-shell-send-region-with-header "次の内容を GitHub の Issue に上げたいので丁寧な英語にしてください。題名も考えてください。")))
("r" "Ruby" (lambda () (interactive) (chatgpt-shell-send-region-with-header "次のコードを Ruby に変換してください")))
("j" "JavaScript" (lambda () (interactive) (chatgpt-shell-send-region-with-header "次のコードを JavaScript に変換してください")))
("&" "選択範囲を送信" chatgpt-shell-send-region)
]
["その他"
("1" "リファクタリング" chatgpt-shell-refactor-code)
("2" "コード解説" chatgpt-shell-describe-code)
("3" "テスト雛形生成" chatgpt-shell-generate-unit-test)
("4" "コミットメッセージ" chatgpt-shell-write-git-commit)
("5" "実行失敗原因" chatgpt-shell-eshell-whats-wrong-with-last-command)
("6" "実行結果要約" chatgpt-shell-eshell-summarize-last-command-output)
("7" "こんにちは" (lambda () (interactive) (chatgpt-shell-send-to-buffer "こんにちは")))
]
]
)
人によって必要なプロンプトはさまざまだろうから chatgpt-shell-send-region-with-header を活用して上のように用途に応じた自分専用のプロンプトをどんどん追加するのがおすすめである。
関連
Discussion