Gemini CLIでかんたんにシンプルに説明してもらうだけのコマンド
3 min read
こんにちは、無能です。
お久しぶりです。エネルギーためてました。というのは冗談でただサボっていただけです。すみません。
という訳で小ネタ過ぎますが、Gemini CLIが出たのでCLI勢からしたら歓喜です。
自分はこれだけ.bashrc
にいれてみました。
ghelp() {
(echo "これを説明して" ; cat $1 ) | gemini
}
別になんてことはないのですがそもそもブラウザからワンクッションいれてコードの説明をLLMにさせる動作がなくなり楽になりました。
これとかだと
[curljs]
thepassenger:[haturatu]:~/git/curljs$ ghelp curl.js
このコードは、[Puppeteer](https://pptr.dev/) というライブラリを使って、指定されたウェブページのコンテンツを取得するためのNode.jsスクリプトです。
以下に、コードの各部分が何をしているかを説明します。
1. **`const puppeteer = require('puppeteer');`**
* Puppeteerライブラリを読み込みます。このライブラリは、プログラムでChromeやChromiumブラウザを操作するために使われます。
2. **`(async () => { ... })();`**
* これは「即時実行非同期関数」です。コード全体を非同期関数で囲むことで、内部で `await` キーワードを使えるようにしています。`await` は、時間のかかる処理(ブラウザの起動やページの読み込みなど)が終わるまで待つために必要です。
3. **`const url = process.argv[2];`**
* コマンドラインから渡された3番目の引数を `url` 変数に格納します。
* 例: `node script.js https://example.com` と実行した場合、`process.argv[2]` には `https://example.com` が入ります。
4. **`if (!url) { ... }`**
* URLが指定されなかった場合にエラーメッセージを表示し、`process.exit(1)` でスクリプトを異常終了させます。
5. **`const browser = await puppeteer.launch({ headless: true });`**
* 新しいブラウザのインスタンスを起動します。
* `headless: true` は、ブラウザのUI(画面)を表示せずにバックグラウンドで実行する設定です。デバッグ時など、ブラウザの動作を目で確認したい場合は `false` にします。
6. **`const page = await browser.newPage();`**
* 起動したブラウザで新しいタブ(ページ)を開きます。
7. **`await page.goto(url, { waitUntil: 'networkidle2' });`**
* 指定されたURLに移動します。
* `waitUntil: 'networkidle2'` は、ページの読み込みを待つための重要なオプションです。これは、ネットワーク接続が2つ以下になってから500ミリ秒間、新しい接続がない状態になるまで待機します。JavaScriptによって動的にコンテンツを読み込むような現代的なウェブサイト(SPAなど)を正しく表示させるために役立ちます。
8. **`await new Promise(resolve => setTimeout(resolve, 5000));`**
* ページの読み込みが完了した後、さらに5秒間待機します。
* `networkidle2` だけでは読み込みが完了しないアニメーションや、特定の操作後に表示されるコンテンツなどを待つために、追加の待機時間として挿入されています。
9. **`const html = await page.content();`**
* ページの完全なHTMLコンテンツを取得します。これには、JavaScriptによって動的に生成されたHTML要素もすべて含まれます。
10. **`console.log(html);`**
* 取得したHTMLをコンソールに出力します。
11. **`await browser.close();`**
* ブラウザのインスタンスを閉じて、リソースを解放します。これを忘れると、プロセスが終了せずに残り続ける可能性があります。
### まとめ
このスクリプトは、**「コマンドラインで指定されたURLのウェブページを、JavaScriptの実行が完了した最終的な状態で取得し、そのHTMLを標準出力に表示する」**という処理を行います。
これは、単純なHTTPリクエストでは取得できない、JavaScriptで動的にレンダリングされるウェブサイト(SPAなど)の情報を取得したい場合(ウェブスクレイピングなど)に非常に便利な方法です。
こんな感じで出力してくれます。
まあ、それだけなんですけど。。。。