プログラミングができなくても、好きなプログラムを作成できるバイブコーディング。今回は、学習が難しいと言われるRustのプログラムをGemini CLIを使って作ってみましょう。Rustなら配布が簡単な実行バイナリが手軽に作成できます。今回は、ある程度実用的なツールを目標にします。それでは、長いPDFを10ページごとに分割するコマンドラインツールを作ってみましょう。

  • Gemini CLIを使ってRust製PDF分割ツールを作らせてみたところ

    Gemini CLIを使ってRust製PDF分割ツールを作らせてみたところ

Rust言語を使うメリット

生成AIが得意なプログラミング言語は、PythonやJavaScriptと言われています。しかし、PythonやJavaScriptは、スクリプト言語であり、実行するためには、PythonやNode.jsのランタイムが必要です。そのため、配布が面倒な場面も多いものです。その点、Rustを使うと、小サイズで配布が非常に簡単な実行バイナリを作成できます。

そもそも、Rustは、C/C++に代わるシステムプログラミング言語として注目されています。メモリ安全性を保証しつつ、高いパフォーマンスを発揮できるのが特徴です。Rustで書かれたプログラムは、コンパイル後にネイティブな実行バイナリとなるため、追加のランタイムが不要で、配布が非常に簡単です。

手軽に配布できる実行バイナリを作成できるため、今回目的とする「巨大なPDFファイルを分割するプログラム」のようなユーティリティプログラムを作成するのに適しています。

とは言え、Rustは学習曲線が急で、初心者には難解な部分も多いです。そこで、バイブコーディングを活用して、簡単にRustのプログラムを作成してみましょう。バイブコーディングを活用すれば、難解なRustのプログラムも初心者でも手軽に、実用的なアプリを作成できます。

Rustをインストールしよう

Rustを利用するには、PCにRustの開発環境をインストールする必要があります。以下の手順でインストールを行いましょう。

Windowsなら、こちらのページからインストーラーをダウンロードして実行します。いろいろなインストーラーが一覧になっていますが、ご利用のCPUにあわせて選びましょう。多くの方は、「x86_64-pc-windows-msvc」を選ぶと良いでしょう。

macOSやLinuxの場合は、ターミナルを開いて以下のコマンドを実行します。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

詳しくは、こちらの公式のインストールページを参照してください。

Rustのプロジェクトをセットアップしよう

それでは、まずは、Rustのプロジェクトをセットアップしてみましょう。ターミナル(WindowsならPowerShell、macOSならターミナル.app)を開いて、以下のコマンドを実行します。

mkdir pdf_splitter
cd pdf_splitter
cargo init

Gemini CLIを用意しよう

そして、今回は、Gemini CLIを使ってプログラムを作成します。Gemini CLIについては、本連載の2回目(こちら)で詳しく説明しています。まだインストールしていない場合は、そちらを参考にしてインストールしてください。

なお、Gemini CLIで実用的なプログラムを作成する場合、作成したいプログラムの仕様書を「GEMINI.md」に記述することになっています。(なお、前回紹介したOpenAIのCodexを使う場合は、「AGENTS.md」に記述します。)

ここでは、作成したいPDF分割ツールのために、次のような仕様書を作ってみました。

# PDF分割コマンド

長いPDFを10ページごとに分割するコマンドラインツールを作成してください。

## 使用技術

- プログラミング言語: Rust
- PDFライブラリ: lopdf

## 仕様

- 入力: PDFファイルのパス (例: input.pdf)
- 出力: 分割されたPDFファイル(例: input_1.pdf, input_2.pdf, input_3.pdf, ...)

とても簡単な仕様書となっていますが、これで十分です。

なお、上記のGEMINI.mdをプロジェクトのルートフォルダに配置しましょう。具体的には、以下のようなファイル構成になります。

% tree .
.
├── Cargo.toml
├── GEMINI.md
└── src
    └── main.rs

Gemini CLIでプログラムを生成しよう

これで準備が完了です。いよいよ、Gemini CLIを使ってプログラムを生成してみましょう。以下のコマンドを実行します。

gemini

Gemini CLIが起動したら、次のコマンドを実行しましょう。

GEMINI.mdに基づいて、RustでPDF分割コマンドを作成してください。

すると、プログラムを作成して、「src/main.rs」や「Cargo.toml」にプログラムや設定を書き込んでくれます。書き込んで良いか尋ねられるので許可しましょう。そのために、「Yes, allow once(はい、一度だけ許可)」を選んで[Enter]キーを押します。 その後、「コンパイルして実行します」のようなメッセージが出て、「Shell cargo build」のようなコマンドが表示されるので、実行を許可します。すると、Geminiも難解なRustの洗礼を受け、何度かプログラムの生成に失敗しますが、最終的にプログラムが完成します。

  • Rust製のPDF分割コマンドが完成

    Rust製のPDF分割コマンドが完成

さすがに簡単に完成してくれない?

残念ながら、筆者が試したところ、初回、Gemini CLIが作成したコードは、うまくPDFを分割できませんでした。PDFファイルこそ作成されるのですが、生成されたPDFが壊れているようです。

そこで、作成されたPDFが壊れている点などを指摘して、再度、Gemini CLIに修正を依頼しました。

完成したプログラムを実行しましたが、PDFが壊れていて開けません。修正してください。
なお、`soseki.pdf`というPDFを用意しました。これを使ってデバッグしてください。

その際、デバッグに便利な「soseki.pdf」というPDFを用意しました。これは、青空文庫の夏目漱石の「坊ちゃん」をブラウザの印刷機能を使ってPDFで出力したものです。

すると、Geminiが、パッケージlopdfのバージョンが古いことに気づき、Webを検索して最新バージョンを調べて、最新のバージョンで動くプログラムに修正してくれました。

しかし、それでも、作成されるPDFは真っ白のままです。そこで、さらに修正を依頼しました。

生成されたPDFは真っ白です。元のPDFの内容がコピーされていません。修正してください。

そして、数回のやり取りの後に、とうとうプログラムを完成させることができました。そこで、下記のコマンドを実行して、リリースビルドを作成します。

cargo build --release

すると、「target/release/pdf_splitter」という実行バイナリが作成されます。Windowsの場合は、「target\release\pdf_splitter.exe」という実行バイナリが作成されます。

なお、Windowsの場合、PDFファイルをこの実行ファイル「pdf_splitter.exe」にドラッグ&ドロップすると、コマンドライン引数としてPDFファイルのパスが渡されて、PDFが10ページごとに分割されます。

macOSの場合は、そのままでは、ドラッグ&ドロップで実行できないので、Gemini CLIにさらに次のような指示をしました。

macOSのために、リリースビルドして作成したバイナリを、ドラッグ&ドロップで実行できるようにアプリケーションバンドル「pdf_splitter.app」を作成してください。
なお、Apple Eventを受け取ることができるネイティブのmacOSランチャーを作成する必要があります。
このランチャーがファイルパスを受け取り、それを私たちのRust製コマンドラインツールに引数として渡します。

すると、「pdf_splitter.app」というmacOSのアプリケーションを作成してくれました。これを使うと、macOSでもドラッグ&ドロップでPDFを分割できるようになりました。

  • ドラッグ&ドロップで巨大PDFファイルを分割できるツールが完成

    ドラッグ&ドロップで巨大PDFファイルを分割できるツールが完成

なお、今回Gemini CLIが作成したプログラムは、こちらのGistにアップロードしてあります。PDFを分割するコマンドが欲しい方は、使ってみてください。

まとめ

今回は、バイブコーディングを使って、難解なRustのプログラムを作成してみました。Gemini CLIは、最初から完璧なコードを生成できるわけではありませんが、何度か修正を依頼することで、目的のプログラムを完成させることができました。

そして、何より難解なRustのプログラムも、バイブコーディングを活用すれば、初心者でも手軽に作成できることがわかりました。ここまで見てきた通り、一度も人間がRustのプログラムを変更する必要はありませんでした。Gemini CLIに指示を与えるだけで、目的のプログラムを完成させることができました。

Rustを使うと、配布が簡単な実行バイナリを手軽に作成できるので便利なので、ぜひ、皆さんも試してみてください。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。これまで50冊以上の技術書を執筆した。直近では、「大規模言語モデルを使いこなすためのプロンプトエンジニアリングの教科書(マイナビ出版)」「Pythonでつくるデスクトップアプリ(ソシム)」「実践力を身につける Pythonの教科書 第2版」「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」など。