Claude CodeやCodexを使っていて、毎日または何度も行うようなタスクが出てくることがあります。そうした時には自動化すると思うのですが、幾つかのやり方があると思います。
- プログラムと組み合わせた自動化
- スキルに任せるやり方
- スキル + CLIに任せるやり方
今回は、個人的に スキル + CLIに任せるやり方 が良いなと思ったので紹介します。
やりたかったこと
CodeRabbitのX投稿の自動化。CodeRabbitに関する言及は日々エゴサしていて(元々自動化済)、Googleスプレッドシートに蓄積されています。その内容から、以下のようなことを行っています。
- 本当に、かつポジティブに言及されているか(ただ名前が出てくるだけだったり、ネガティブな場合もある)
- 言及している人の情報を調べる(Xアカウントがあるかどうか)
- 内容に応じてX投稿内容の若干のカスタマイズ(公式ブログなら概要を追加、動画・ブログ記事・スライドなどで文面を若干変えるなど)
- Bufferに投稿内容を予約
これらを自動化できないものかと考えました。
最初はプログラミング
最初はTypeScriptで作れないかと考えました。
- スプレッドシートからの取得は問題ない
- 各URLの内容を取得して、ポジティブな言及か確認
この2について、LLMで行う必要があると判断しました。となると、都度 claude -p とかで実行する形になるし、APIキー課金になってしまうのが辛いなと思い、だったら全体をLLMでやらせる(スキル化する)方が早いだろうと考えました。
スキルだけでやらせる
スキルでやらせると、curlでやろうとしたり、ブラウザを自動操作するという一見すると非効率的な作業を行うようになります。後々のメンテナンスも大変だし、何より処理に時間がかかります。
後、スプレッドシートのデータ取得だけでGoogle Cloudでプロジェクト作って、認証画面を作成して…と面倒な作業が追加されます。
SKILL.mdの内容を見る限り、簡潔(全部自然言語)ではあるのですが、たぶんうまくいかないように見えたし、仕様を都度解釈が変わってしまうリスクがあります。今日は動いても、明日暴走する未来が見えます。
CLIとMCPを使う
そこで使ってみたのがGoogle Workspace CLIです。Googleスプレッドシートのデータ取得・更新ができます。これのお陰で、LLMの無駄な処理がかなり削減された気がします。
SKILL.mdには、こんな感じに書かれます。
## 1. シート読み込み
```bash
gws sheets spreadsheets values get --params "{\"spreadsheetId\": \"$SPREADSHEET_ID\", \"range\": \"$SHEET_NAME\"}"
```
- 1行目はヘッダー。`done, url, title, X, X_URL, X_Account, X_Tweet` の列位置を特定する(列順に依存しない。必須カラムが無ければ中断)。
- `done` が TRUE/true/1 以外の行だけが処理対象。各行のシート上の行番号(1始まり、データは2以降)を控える。
Bufferも- Buffer CLIがあるのですが、今回はMCPを使いました。
これも公式なので、ちゃんと間違いなくデータが登録できます。余計な調査も発生せず、便利です。
SKILL.mdにはこんな感じで書かれています。
2. Buffer投稿 — Buffer MCP の `create_post` ツールを使用(日時指定なし=キュー追加):
- `channelId`: `$BUFFER_CHANNEL_ID`
- `text`: X_Tweet 全文
- `schedulingType`: `automatic`
- `mode`: 指定しない(デフォルトの addToQueue)。`dueAt` も指定しない。
- レスポンスに投稿の `id` が返り、エラーがないことを確認する。
実運用
1日1回、 sheet-to-x スキルを実行するのみです。確認は都度出ますが、運用負荷は大幅に下がっています。手作業でやるのは面倒ですが、自動化する上でもプログラミングのみ、プログラミング + LLM、スキルと複数のやり方を想定しておくと、ベストなやり方が見つかるんじゃないかと思います。
プログラミングせずに済む世界
今回はSKILL.mdの中からCLIやMCPを呼ぶように指定して、自然言語でワークフロー自動化を実現しています。プログラミングは決まった作業を行う際には便利なのですが、パターンが増える毎に処理分岐が増えてしまいます。そういった時にはLLMに任せちゃうほうが楽だったりします。
とはいえLLMには苦手なこともあって、特に外部サービス連携でcurlで無理やり解決しようとしたり、仕様を正しく理解していないことも多いです。そうした時に、CLIやMCPが役立ちます。
すべてSKILL.md + CLI + MCPで済むとは思いませんが、選択肢として知っておくと便利ですね。
まとめ
CLIはAIに余計な調査をさせたり、間違った操作を行わせない上でも便利かと思います。 gh コマンドはよく使いますが、他にも色々なCLIがあるので、AIに何かを依頼する際には事前にどういったCLIやMCPがあるかを調べておくと捗るんじゃないでしょうか。