0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini CLIを使って並列タスク処理をしたい!(プロンプトで個別に指示できた編)

Last updated at Posted at 2025-07-04

はじめに

環境

  • PC: MacBook Air(16 GM)
  • 開発環境: vscode

元ネタと前回記事

この記事は?

前回に比べ、今回はさらに一歩進め、特定のペインを座標で指定してコマンドを実行できるzsh関数 tp を導入します。
これにより、create_tmux_layout.shの引数 N の値(グリッドサイズ)が変わっても、動的にレイアウトを認識し、柔軟に各ペインを操作できるようになります。

tp関数の導入方法と、それを使って個別のペインでgemini-cliを起動したり、ファイルからプロンプトを読み込ませたりする具体的な活用例を解説します。

この記事で実現すること

  1. 動的なペイン操作: create_tmux_layout.shで作成したN x Nのグリッドサイズを自動で認識し、行・列の座標で特定のペインを操作するtp関数を実装する。
  2. 個別ペインでのGemini実行: tp関数を使い、指定したペインで個別にgemini-cliのプロンプトを実行する。
  3. 個別ペイン & ファイルからのプロンプト読み込み: gemini-cliが持つファイル読み込み機能を活用し、.txtファイルに書かれた指示を特定のペインで実行させる。

実行結果

動的なペイン操作

スクリーンショット 2025-07-04 22.05.16.png

個別ペインでのGemini実行

スクリーンショット 2025-07-04 22.05.48.png

個別ペイン & ファイルからのプロンプト読み込み

スクリーンショット 2025-07-04 22.10.38.png

ファイル構成

.
├── .zshrc
└── Parallel-Processing-With-CLI/ # お好みの適当なフォルダ名
    ├── create_tmux_layout.sh
    └── README.md
    └── prompt.txt

Step 1: 動的グリッド対応の tp 関数を .zshrc に追加する

まずは、今回の主役であるtp関数を.zshrcに追記します。
この関数は、現在のtmuxセッションのペイン総数からグリッドサイズ(N x N)を自動で計算し、指定された座標(行、列)に対応するペイン番号を割り出してコマンドを送信する優れものです。

.zshrc に追加するコード

以下のzsh関数を、お使いの.zshrcファイルにコピー&ペーストしてください。

# tp <row> <col> "command" - (動的N対応版) 座標を指定してペインでコマンドを実行
function tp() {
    # --- 引数の数をチェック ---
    if [[ "$#" -lt 3 ]]; then
        echo "使用方法: tp <行番号> <列番号> "コマンド""
        echo "例: tp 1 2 "ls -l""
        return 1
    fi

    # --- tmux環境情報を動的に取得 ---
    # 現在のセッション名を取得 (ハードコードしない)
    local SESSION=$(tmux display-message -p '#S')
    # 現在のセッションのペイン総数を取得
    local total_panes=$(tmux list-panes -s -t "$SESSION" | wc -l | tr -d ' ')

    # --- グリッドサイズNを動的に計算 ---
    # ペイン総数の平方根を計算してNとする (例: 16ペインならN=4)
    local N=$(echo "$total_panes" | awk '{ n = int(sqrt($1)); print n }')

    # N*N がペイン総数と一致するか検証 (完全な正方グリッドかの確認)
    if (( N * N != total_panes )); then
        echo "エラー: 現在のペインレイアウトは完全な N x N グリッドではありません。"
        echo "ペイン総数: ${total_panes}, 推定N: ${N}"
        return 1
    fi

    # --- 引数を変数に格納し、検証 ---
    local row=$1
    local col=$2
    local cmd=$3

    # 行・列番号が数字かつ範囲内かチェック (0からN-1まで)
    if ! [[ "$row" =~ ^[0-9]+$ ]] || ! [[ "$col" =~ ^[0-9]+$ ]] || (( row >= N )) || (( col >= N )); then
        echo "エラー: この ${N}x${N} グリッドでは、行・列番号は 0 から ${N-1} の範囲で指定してください。"
        return 1
    fi

    # --- ペイン番号を計算し、コマンドを送信 ---
    local pane_index=$((row * N + col))
    tmux send-keys -t "$SESSION:0.${pane_index}" "$cmd" C-m
    echo "✅ [${N}x${N} Grid] pane-R${row}C${col} (ペイン番号: ${pane_index}) で実行: $cmd"
}

設定の反映

.zshrc を編集した後、以下のコマンドで設定を再読み込みします。

source ~/.zshrc

Step 2: tp 関数を使ってみる

tp関数の準備ができたので、実際に使ってみましょう。

1. tmuxグリッド環境の起動

まず、create_tmux_layout.shで2x2のグリッドを作成します。

./create_tmux_layout.sh 2

2. tp関数で特定のペインを操作する

tp関数の基本的な使い方は以下の通りです。行・列の番号は0から始まることに注意してください。

tp <行番号> <列番号> "実行したいコマンド"

使用例:
2x2のグリッドで、右下のペイン(行:1, 列:1)から左下のペイン(行:1, 列:0)と左上のペイン(行:0, 列:0)に、現在のパス(world)を表示させてみます。

# (pane-R1C1で実行)
tp 1 0 "echo 'world'"
tp 0 0 "echo 'world'"

スクリーンショット 2025-07-04 22.05.16.png


Step 3: 本番!! tp関数とgemini-cliを組み合わせ

ここからが本題です。tp関数を使って、各ペインで個別にgemini-cliを操作します。

1. 個々のペインで異なる指示を出す

例えば、左上のペインと左下のペインに、それぞれ同じ質問を投げてみます。

tp 0 0 "gemini --prompt '1から10までの素数をリストアップして'"
tp 1 0 "gemini --prompt '1から10までの素数をリストアップして'"

スクリーンショット 2025-07-04 22.05.48.png

これにより、各ペインが独立したAIアシスタントとして機能し始めます。

2. ファイルからプロンプトを読み込んで実行する

gemini-cliは、ファイルパスを渡すことでその内容をプロンプトとして読み込むことができます。これとtp関数を組み合わせることで、より複雑な指示を簡単に実行できます。

まず、指示を書き込むためのprompt.txtを作成します。

prompt.txt
こんにちは 今日はどんな気分か一言で!

次に、左下のペイン(行:1, 列:0)で、このファイルを読み込ませてgemini-cliを実行します。

tp 1 0 "gemini --prompt './prompt.txt'"
tp 0 0 "gemini --prompt './prompt.txt'"

スクリーンショット 2025-07-04 22.10.38.png


これで、個々のターミナルにgeminiを起動し、prompt.txtを読み込ませ、解答を得ることができました!!☺️


これができると何が嬉しいの?

tp関数による柔軟なペイン操作とgemini-cliを組み合わせることで、CLI上での並列作業が飛躍的に効率化します。

例えば、以下のようなワークフローが考えられます。

  • Pane (0,0): データ分析のコードを実行させる。
  • Pane (0,1): 上記の分析結果を元に、報告書のドラフトを作成させる。
  • Pane (1,0): Pane(0,0)と(0,1)のアウトプットを読み込ませ、最終的なレポートをHTML形式で生成するよう指示する。
  • Pane (1,1): 同じく、アウトプットを読み込ませ、今度はMarkdown形式でサマリーを生成させる。

このように、複数のAIエージェントが連携して一つのタスクを分担・処理するような、高度な使い方が可能になります。

次回

「これができると何が嬉しいの?」をprompt.txtの指示に書いてできるようにします!

まとめ

今回は、tmuxのペインを座標で指定して操作できるzsh関数tpを導入し、gemini-cliと組み合わせることで、より柔軟かつ強力な並列AI開発環境を構築する方法を紹介しました。

create_tmux_layout.shのNの値を変更しても動的に追従できるため、これまでのta(全件操作)とtp(個別操作)を使い分けることで、CLIでの作業効率は格段に向上するはずです。

ぜひ、ご自身の環境でも試してみてください。

最後に

この記事も、構成のアイデア出しから文章の生成まで、そのほとんどをGeminiのサポートを受けながら作成しました。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?