はじめに
※以下の記事は執筆時点の記事です。
Googleが提供するGemini CLIは、コマンドラインからAIを活用できる無料ツールとして便利です。ただし、大きなタスクを処理することは不得意です。たまに途中で止まります。
本記事では、このことを解決するためにgemini-cli-wrapperを使った方法を説明します。ここでは具体的な一例として、「長文のPDF処理を分割翻訳するタスク」を題材にしています。
タスク分割できるものであれば、いろいろなタスクの実行に使えると思われます。プログラムを組むことが面倒な方は、git cloneした後に、以下のようにAIに依頼すると、良い感じのプログラムを作ってくれます。どなたかのお役に立てれば嬉しいです。
gemini-cli-wrapper使って、「XXXのタスク」を達成するPythonプログラムを組んで。example_pdf_translator.pyは参考にして。
環境
gemini-cli-wrapperの説明のための環境を以下の通り用意しました。順にご説明します。
- OS: Windows 11
- Gemini CLI: @google/gemini-cli (最新版)
- Python: Python 3.12
事前準備: Gemini CLIのインストール
まず、Gemini CLIのインストールが必要です。
インストール手順
コマンドプロンプトで以下を実行:
# Node.jsがインストールされていることを確認
node --version
# Gemini CLIをグローバルインストール
npm install -g @google/gemini-cli
# 認証
gemini auth login
認証時にはブラウザが開き、Googleアカウントでログインする必要があります。
インストール確認
# バージョン確認
gemini --version
# 動作確認
gemini "Hello, Gemini!"
実験対象
本実験では、以下の2つの著名な論文PDFを対象としました。
-
Bitcoin: A Peer-to-Peer Electronic Cash System (約9ページ)
- サトシ・ナカモトによる暗号通貨の原論文
- https://bitcoin.org/bitcoin.pdf
-
Attention Is All You Need (約15ページ)
- Transformerアーキテクチャを提案した論文
- https://arxiv.org/abs/1706.03762
実験1: 短文PDF処理 (Bitcoin論文)
実行方法
Windowsコマンドプロンプトで実行:
gemini "このPDFファイル C:\Users\...\Desktop\bitcoin.pdf を日本語に和訳してMarkdown形式で、C:\Users\...\Desktop\bitcoin.md というファイル名で保存してください。各ページを1ページずつ、丁寧に翻訳してください。"
結果
処理結果: 成功
処理時間: 約1-2分
翻訳品質: 全12セクション + 参考文献が完全に翻訳され、Markdown形式で適切にフォーマットされました
出力サンプル
# ビットコイン:P2P電子通貨システム
**Satoshi Nakamoto**
satoshin@gmx.com
www.bitcoin.org
**要旨**
真のP2P版電子通貨は、金融機関を介さずに、ある当事者から別の当事者へ
オンライン決済を直接送信することを可能にするだろう...
## 1. はじめに
インターネット上の商取引は、電子決済を処理するための信頼できる第三者
として機能する金融機関にほぼ完全に依存するようになった...(以下略)
実験2: 長文PDF処理 (Attention Is All You Need論文)
第1回試行: gemini-cli直接実行
同様の方法で15ページの論文を翻訳しようと試みました。
gemini "このPDFファイル C:\Users\...\Desktop\Attention Is All You Need.pdf を日本語に和訳してMarkdown形式で、C:\Users\...\Desktop\Attention Is All You Need.md というファイル名で保存してください。各ページを1ページずつ、丁寧に翻訳してください。"
結果
処理結果: 失敗
現象: コマンド実行後、10分経過しても応答が返らず、結果が得られませんでした。
長文PDFに対してgemini-cliが応答しなかった原因として、以下が考えられます。大きなタスクの処理は難ありですね。
- 一括処理による負荷: 全体を一度に処理しようとしたため、処理時間が長大化
- レスポンスサイズの制限: 翻訳結果が大きすぎて、CLIが標準出力に返せない
- タイムアウト: Gemini API側またはCLI側でのタイムアウトが発生
gemini-cli-wrapperでのタスク分割による処理
解決策
問題は、全ページを一度に処理しようとすることにあります。これを解決するには、タスクを個別に分割して順次実行するアプローチが有効です。
コマンドプロンプトで実行:
# gemini-cli-wrapperのクローン
git clone https://github.com/daishir0/gemini-cli-wrapper
cd gemini-cli-wrapper
# PDF翻訳実行
C:\python312\python.exe example_pdf_translator.py "C:\Users\...\Desktop\Attention Is All You Need.pdf" "C:\Users\...\Desktop\Attention Is All You Need.md"
結果
処理結果: 成功
処理時間: 約23分
翻訳品質: 全ページが翻訳された
処理の進捗表示:
0%| | 0/15 [00:00<?, ?it/s]
7%|▋ | 1/15 [01:23<19:34, 83.89s/it]
13%|█▎ | 2/15 [02:20<14:42, 67.87s/it]
20%|██ | 3/15 [03:09<11:48, 59.05s/it]
27%|██▋ | 4/15 [04:18<11:32, 62.98s/it]
33%|███▎ | 5/15 [05:21<10:32, 63.21s/it]
40%|████ | 6/15 [08:07<14:42, 98.10s/it]
47%|████▋ | 7/15 [10:06<13:58, 104.85s/it]
53%|█████▎ | 8/15 [13:19<15:31, 133.00s/it]
60%|██████ | 9/15 [15:36<13:24, 134.08s/it]
67%|██████▋ | 10/15 [17:59<11:25, 137.12s/it]
73%|███████▎ | 11/15 [20:49<09:48, 147.16s/it]
80%|████████ | 12/15 [21:36<05:49, 116.61s/it]
87%|████████▋ | 13/15 [22:07<03:01, 90.57s/it]
93%|█████████▎| 14/15 [22:30<01:10, 70.19s/it]
100%|██████████| 15/15 [23:08<00:00, 60.64s/it]
100%|██████████| 15/15 [23:08<00:00, 92.59s/it]
出力サンプル
# ページ 1
Attention Is All You Need
Ashish Vaswani∗
Google Brain
avaswani@google.com
...
要旨
主要な系列変換モデルは、エンコーダとデコーダを含む複雑な再帰型または
畳み込みニューラルネットワークに基づいています。我々は、再帰と畳み込みを
完全に排除し、アテンションメカニズムのみに基づいた、新しいシンプルな
ネットワークアーキテクチャであるTransformerを提案します...
---
# ページ 2
1 はじめに
特にリカレントニューラルネットワーク、長・短期記憶([13])および
ゲート付きリカレント([7])ニューラルネットワークは、言語モデリングや
機械翻訳([35,2,5])などのシーケンスモデリングおよび変換問題における
最先端のアプローチとして確立されてきました...(以下略)
比較分析
| 項目 | gemini-cli (一括処理) |
gemini-cli-wrapper (分割処理) |
|---|---|---|
| 短文PDF (9ページ) | ✓ 成功 (1-2分) | ✓ 成功 |
| 長文PDF (15ページ) | ✗ 応答なし | ✓ 成功 |
| 進捗可視化 | なし | あり |
| 処理方式 | 一括処理 | ページ単位の逐次処理 |
| メモリ効率 | 低い | 高い |
| エラー耐性 | 低い (一度の失敗で全体が失敗) | 高い (ページ単位でリトライ可能) |
| 実装の複雑さ | 単純 | Pythonスクリプトが必要 |
注意事項
Gemini CLIの制限
Gemini CLI無料プランの制限はこちらです。また、ログインが切れた場合は入りなおしてあげる必要があります。
- 1分間に60リクエスト
- 1日に1,000リクエスト
まとめ
- Gemini CLIは大きなタスクの実行が難しいという制約があります(途中で止まります)
- このことは、タスク分割アプローチによりある程度クリアできます
- そのために、汎用的なwrapperを作りました
私は、このアイディアをClaude CodeのSkillとして作成し活用しています。Gemini CLIの方が無料なので、多くの方に役立つかな、と思い記事作成しました。お役に立てれば幸いです。