5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIコーディングCLIにプログラミング以外の作業もさせて楽をする

Posted at

AIコーディングCLIはプログラミングしかできないの?

Claude Code、Gemini CLIなどのコーディングAIはめちゃくちゃ賢いです。

これだけ賢いのに、 プログラミング「しか」できないの? もっと他の仕事もできない? と考えました。

結論から言うと、以下のように作業手順に従い一覧表を埋めていくような作業も余裕でできます。

テキスト等価仮説

人間からすると「JavaScriptを書く」はプログラミングで、「CSVファイルを埋める」は単純作業みたいなもので両者は異質な作業です。

しかしLLM系AIエージェントにとってみると、どっちも 「合理的なテキストを生成する」という点で大差がない ように思うのです。

テキスト等価仮説

そう考えるとAIコーディングCLIにはもっと可能性があるのではないかと感じています。

プログラミングではない作業を頼んでみる

というわけで、Gemini CLIに「プログラミングではない作業」をやってみてもらいました。

題材は

「新聞系ニュースサイトをひとつずつ、アクセスランキングが使われているかを調べて」

とします。これをあたかも人間に依頼するかのように、Gemini CLIに指示します。

作業表

相手が人間だとしたら、こんな風に表をスプレッドシートで用意して、「続きを埋めて」とお願いするのではないでしょうか。

tasks.tsv
新聞サイト名	ステータス	URL	アクセスランキングの有無	アクセスランキングの名称
読売新聞	完了	https://www.yomiuri.co.jp/	有り	アクセスランキング
朝日新聞
毎日新聞
日経新聞
産経新聞
サンスポ
ジャパンタイムズ
スポーツ報知
日刊工業新聞
日刊スポーツ
スポニチ
東スポ
水産経済新聞
東京新聞
日本農業新聞
共同通信

もちろんCSVでもいいんですが、私がコピペしやすくエスケープの心配が少ないタブ区切りの方が好きなのでTSVになっています。

MCPサーバーとしてお助けツールを用意する

この作業、人間であれば以下の作業の繰り返しになるでしょう。

  1. 表を見て次の作業(対象サイト)を選ぶ
  2. ブラウザを開く
  3. Web検索でサイトを探して開く
  4. アクセスランキングに相当する表示を探す
  5. 調査結果を表に書き込む
  6. これを残作業がなくなるまで繰り返す

エージェントのお助けツールとして、WebブラウザとWeb検索が必要です。これをMCPサーバーで調達します。

.gemini/settings.json
{
  "mcpServers": {
    "playwright": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@playwright/mcp@latest"],
      "env": {}
    },
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"]
      // Brave SearchにはAPIキーが必要。export BRAVE_API_KEY="" で別途指定する
    }
  }
}

Gemini CLIはさすがGoogle検索を内蔵しているのですが、応答がなかなか返ってこなかったり不安定なところがありました。そこで今回はBraveサーチを利用しました。

GEMINI.md に作業手順を書く

次に具体的な作業手順を GEMINI.md に記述します。

gemini.md
あなたは、@tasks.tsv の空欄を 1 行ずつ埋めて完成に導くエージェントです。

# 目的

新聞ニュースサイトのトップページに「アクセスランキング」があるかを調査します。

# ツール

- Web 検索には brave-search を使用してください。
- ページを開く時はブラウザとして playwright を使用してください。

# 手順

1. すでに「ステータス」の欄に記入があれば、その行はスキップしてください。
2. 「${サイト名} ニュースサイト」を Web 検索して、ブラウザで新聞ニュースサイトにアクセスします。それが本当にニュースサイトかを確認します。もしニュースサイトではないと判断したら、検索結果の別のページを試してください。
3. 「URL」 の列に、ニュースサイトと特定したページの URL を記入してください。
4. 「アクセスランキング」というセクションがあるかを確認します。「アクセスランキングの有無」の列には「有り」または「無し」と記入してください。
5. アクセスランキングがある場合は、そのセクションの見出しや名称を確認します。「アクセスランキングの名称」の列には、その名称を記入してください。
6. サイトについて一連の処理が完了したら、「ステータス」の列に「完了」と記入してください。
7. ステータスを記入したら、次の行に進んでください。すべての行について処理が完了したら、エージェントを終了してください。

# 注意

- 新聞サイトのトップページは多数のニュース記事へのリンクがあることがポイントです。たまに新聞サイトではなく、コーポレートサイトや採用サイトに当たることもあります。新聞ニュースサイトではないと判断したら、検索結果に戻って別のページを試してください。
- アクセスランキングは人気記事、人気ランキングなどと表現されることもあり、アクセス数などの実績に基づき、ランキング形式の記事リストが表示されているセクションです。リストに 1, 2, 3,...と順位が付けられていることがポイントです。

動かしてみる!

ここで実際に動かしてみます。BRAVE_API_KEYBraveサーチ API で取得してください。面倒ならBraveサーチは使わず、Geminiに任せるという手もあります。

export BRAVE_API_KEY="(APIキーをここに指定)"
gemini -y -m gemini-2.5-flash

モデルに gemini-2.5-flash を明示しているのは、この作業が簡単な文脈理解で済みそうだからです。

-y は毎回の確認はせず、作業を続けさせるバーサーカーモードの指定です。

起動したら適当に以下のプロンプトでも投げます。

@GEMINI.md に従い tasks.tsv を完成に導いてください。

するとなんということでしょう。時間はかかるものの、Gemini CLIが人間の代わりにサイトの横断調査をやってくれました(動画は60倍速)。

結果はどうか

tasks.tsvは以下のようになりました。

tasks.tsv
新聞サイト名	ステータス	URL	アクセスランキングの有無	アクセスランキングの名称
読売新聞	完了	https://www.yomiuri.co.jp/	有り	アクセスランキング
朝日新聞	完了	https://www.asahi.com/	有り	アクセスランキング
毎日新聞	完了	https://mainichi.jp/	有り	アクセスランキング
日経新聞	完了	https://www.nikkei.com/	有り	アクセスランキング
産経新聞	完了	https://www.sankei.com/	有り	ランキング
サンスポ	完了	https://www.sanspo.com/	有り	ランキング
ジャパンタイムズ	完了	https://www.japantimes.co.jp/	無し
スポーツ報知	完了	https://hochi.news/	有り	ランキング
日刊工業新聞	完了	https://www.nikkan.co.jp/	有り	閲覧ランキング
日刊スポーツ	完了	https://www.nikkansports.com/	有り	ニュースランキング
スポニチ	完了	https://www.sponichi.co.jp	有り	人気ランキング(総合)
東スポ	完了	https://www.tokyo-sports.co.jp	有り	アクセスランキング
水産経済新聞	完了	https://www.suikei.co.jp	有り	週間ランキング
東京新聞	完了	https://www.tokyo-np.co.jp	有り	ニュースランキング
日本農業新聞	完了	https://www.agrinews.co.jp/	有り	週間アクセスランキング
共同通信	完了	https://www.kyodonews.jp/news/	有り	最新ニュース

のきなみアクセスランキングがあるのですが、英字新聞の ジャパンタイムズ にだけはアクセスランキングがありません。これがしっかり反映されています。本当に日本人はランキングが好きですね。

ジャパンタイムズ	完了	https://www.japantimes.co.jp/	無し

また、表記揺れも汲み取って「ランキング」「閲覧ランキング」「ニュースランキング」「人気ランキング(総合)」「習慣ランキング」のいずれもアクセスランキングだと解釈してくれています。

例えば日刊工業新聞は「閲覧ランキング」となっていますが、

日刊工業新聞	完了	https://www.nikkan.co.jp/	有り	閲覧ランキング

画面を見てもそうなっています。

日刊工業新聞

これはなかなか期待通りの精度と言えます。

残念だったのは共同通信についてのタスクです。ニュースサイトとしては https://www.kyodo.co.jp/ を選んで欲しかったのですが、コーポレートサイトを選択してしまいました。

ここはプロンプトの改善余地がありますが、人間であっても同じような間違いはするでしょう。

コーディングCLIはプログラミングの為のみにあらず

というわけで、コーディングCLIが「プログラミング専用」というのは人間の思い込みで、「テキスト生成」という本質に着目すると汎用的な繰り返し作業にも応用できるという実験でした。

MCPサーバーを指定するJSONは少し専門的ですが、tasks.tsvGEMINI.mdの作成は人間に依頼するのと大差なく、ノンプログラマーの人でもできそうですね。

これでAIによって人間が楽できる仕事の幅が広がるのではないでしょうか。

寝ている間にも安心して作業を完遂させる

AIコーディングCLIを活用している人にはお馴染みですが、途中で作業を終了されたり、APIの不調、割り当ての枯渇などによって中断することが結構あります。

そこで次のようなシェルスクリプトを用意し、Gemini CLIが予期せず終了した場合はリトライするように仕込んでおきます。

これで「朝まであとやっといて!」とあなたは安らかな眠りにつくことができます。

#!/bin/bash

cd "$(dirname "$0")" || exit 1

# .envファイルが必要
if [ -f ".env" ]; then
    set -a
    source ".env"
    set +a
else
    echo "エラー: .envファイルが見つかりません" >&2
    exit 1
fi

# 残作業があるか判定する関数
has_backlog() {
    if [ ! -f "tasks.tsv" ]; then
        echo "エラー: tasks.tsvが見つかりません" >&2
        return 1
    fi

    # タブ区切りで2列目(ステータス)が空の行があるかチェック
    while IFS=$'\t' read -r col1 col2 rest; do
        # 空行をスキップ
        [ -z "$col1" ] && continue
        # 2列目が空の場合、真(0)を返す
        if [ -z "$col2" ]; then
            return 0
        fi
    done < tasks.tsv

    # 2列目が空の行が見つからない場合、偽(1)を返す
    return 1
}

# メインループ
while true; do
    # 処理するタスクがあるかチェック
    if ! has_backlog; then
        echo "処理するタスクがありません。終了します。"
        exit 0
    fi

    echo "タスクを処理しています..."
    gemini -y -m gemini-2.5-flash -p "@GEMINI.md に従い @tasks.tsv を完成に導いてください。"
    gemini_exit_code=$?

    # 処理後もタスクが残っているかチェック
    if has_backlog; then
        if [ $gemini_exit_code -eq 0 ]; then
            echo "残りタスクがあります。10秒後に再実行します..."
            sleep 10
        else
            echo "エラーが発生しました。10分後に再実行します..."
            sleep 600
        fi
    else
        echo "すべてのタスクが完了しました。終了します。"
        exit 0
    fi
done

残タスクの有無をawkで機械的に判定し、終わるまでGemini CLIを繰り返し実行します。異常終了であれば10分、正常終了であれば10秒のインターバルをおきます。

Q&A

DeepResearchではだめですか

試してもらいたいですが、上手くいかないと思います。サービスによっては10件程度なら上手く行くかもしれません。数十数百のオーダーになると厳しいでしょう。

DeepResearchは階層的に要約が得意なツールで、今回のように画一的な繰り返し作業と方針が異なるように思います。

Mastraなどでできませんか

この記事は以前反響をいただいた次の記事の続編です。

こちらでMastraを使った実装を紹介しています。

こちらの方がトークン消費は激しいものの、コーディングがほぼ不要で人間的な作業指示により目的を達成できます。

最適化や再現性の強化という観点ではMastraなどのエージェントフレームワークを使用する方がよいでしょう。

規約違反ではありませんか

プログラミング以外に使うな、という制限はないように見えます。

Gemini自体はさらに制限がゆるいでしょう。

5
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?