Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

I/Oプロジェクト: コマンドラインプログラムを構築する

この章では、これまでに学んだ多くのスキルを振り返るとともに、 標準ライブラリのいくつかの追加機能を探ります。ファイルおよび コマンドラインの入出力とやり取りするコマンドラインツールを構築して、 これまでに身につけたRustの概念をいくつか実践していきます。

Rustの速度、安全性、単一バイナリを出力できること、そして クロスプラットフォーム対応により、Rustはコマンドラインツールを作成する うえで理想的な言語です。そこでこのプロジェクトでは、古典的な コマンドライン検索ツール grepglobally search a regular expression and print)の独自版を作ります。もっとも単純な ユースケースでは、grep は指定されたファイルから指定された文字列を 検索します。そのために、grep は引数としてファイルパスと文字列を 受け取ります。次に、ファイルを読み込み、その文字列引数を含む行を 見つけ、それらの行を出力します。

その過程で、多くのコマンドラインツールが利用しているターミナル機能を、 私たちのコマンドラインツールでも使う方法を示します。環境変数の値を 読み取って、ユーザーがツールの動作を設定できるようにします。また、 エラーメッセージを標準出力 (stdout) ではなく標準エラーストリーム (stderr) に出力することで、たとえば正常な出力をファイルに リダイレクトしつつ、エラーメッセージは引き続き画面上で確認できるように します。

Rustコミュニティの一員であるAndrew Gallantは、ripgrep と呼ばれる、 高機能で非常に高速な grep の実装をすでに作成しています。これに 比べると、私たちの版はかなり単純なものになりますが、この章では ripgrep のような実世界のプロジェクトを理解するために必要な背景知識を いくつか身につけられます。

私たちの grep プロジェクトでは、これまでに学んださまざまな概念を 組み合わせます。

  • コードを整理する (第7章)
  • ベクタと文字列を使う (第8章)
  • エラーを処理する (第9章)
  • 適切な場面でトレイトとライフタイムを使う (第10章)
  • テストを書く (第11章)

また、クロージャ、イテレータ、トレイトオブジェクトについても簡単に 紹介します。これらについては、第13章第18章 で詳しく扱います。