このブログは自作の CMS で管理しており、notes.rb という Ruby スクリプトが記事の作成やビルドなどをまとめて担っています。そこにサブコマンドを追加して、notes.rb proofread を実行すると Claude が誤字・脱字・表記ゆれ・文法の不自然さをチェックしてくれる仕組みを作りました。
Claude の Pro プランには加入していますが、API は別料金です。そのため Anthropic API を直接叩くのではなく、Claude Code の CLI(claude コマンド)を呼び出す方式にしています。Pro プランがあれば追加費用なしで使えます。
# ステージ済みの .md ファイルをまとめてチェック
notes.rb proofread
# ファイルを直接指定してチェック
notes.rb proofread public/posts/2026/2026-04-26-proofread-by-ai.md
実行すると、問題があれば箇所と修正案を表示します。問題がなければ LGTM と返ってきます。
claude -p で CLI から Claude を呼び出す。
Anthropic の API キーを別途用意しなくても、Claude Code の CLI(claude)が使えます。-p オプションで標準入力からプロンプトを渡せます。
Ruby では IO.popen でプロセスを起動し、プロンプトを書き込んで結果を受け取っています。
result = IO.popen(["claude", "-p", "--output-format", "text"], "r+") do |io|
io.write(prompt)
io.close_write
io.read
end
ステージ済みファイルだけを対象にする
git diff --cached でコミット予定のファイルだけを取得しています。.md に絞っているのはブログ記事だけをチェックしたいためです。
staged = `git -C #{REPO_ROOT} diff --cached --name-only --diff-filter=ACM`
.split("\n")
.select { |f| f.end_with?(".md") }
LGTM を判定基準にする
Claude へのプロンプトで「問題がなければ1行目に LGTM とだけ出力してください」と指示しておき、最初の行だけを見て合否を判定しています。
first_line = result.lines.first&.strip
if first_line == "LGTM"
puts " ✅ 問題なし".green
else
puts " ⚠️ 以下の問題が見つかりました:".red
# ...
end
最初は git commit の pre-commit フックとして実装しましたが、VS Code の UI との相性が悪く、サブコマンドとして切り出しました。コミット直前に手動で走らせるスタイルのほうが、思ったより使い勝手がよいです。
(この記事は Claude に代筆してもらいました)