#1 Rustで学ぶ環境構築の基本

Rustは「安全性」と「実行速度」を両立できる言語として、近年注目を集めています。少し学習コストが高いと言われることもありますが、環境構築自体は非常にシンプルで、公式ツールに従えばつまずくポイントはそれほど多くありません。この記事では、Rustを始めるための準備を、実際によく起きるエラーとその対処法も含めてじっくり解説します。

rustupという公式インストーラー

Rustの環境構築では、公式が提供するrustupというツールを使うのが一般的です。rustup公式サイト(rust-lang.org)の指示に従ってインストーラーを実行すると、Rust本体に加えて、後述するcargoというツールもまとめてインストールされます。インストール後、次のコマンドでバージョンを確認しましょう。

rustc --version

バージョン番号(例: rustc 1.79.0)が表示されれば成功です。もしここでcommand not found'rustc' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。のようなメッセージが出た場合は、多くの場合インストール直後にターミナル(コマンドプロンプトやPowerShell)を再起動していないことが原因です。rustupはPATHという「コマンドの置き場所を教える設定」を書き換えますが、この変更はすでに開いているターミナルには反映されません。一度ターミナルを閉じて開き直すだけで解決することがほとんどです。

Windowsで特に出やすいエラー

Windows環境では、rustupのインストール途中で次のようなメッセージを見ることがあります。

error: linker `link.exe` not found

これは、Rustがプログラムを実行可能ファイルに変換する最終段階で使う「リンカ」というツールが見つからない、というエラーです。Windowsの標準構成では、このlink.exeはMicrosoftが提供する「C++ Build Tools」に含まれています。rustupのインストーラー自体が「Visual Studio C++ Build toolsが必要です」と案内してくれるので、その指示に従ってMicrosoftのサイトから該当ツールをインストールすれば解消します。「Rustなのになぜc++の道具が必要なの?」と疑問に思うかもしれませんが、これはRustが悪いわけではなく、Windows上でネイティブな実行ファイルを作るための一般的な仕組み(多くのコンパイラ言語がWindowsでは同じ土台を使います)だと考えると納得しやすいはずです。

cargoというプロジェクト管理ツール

Rustにはcargoという強力な管理ツールが付属しています。新しいプロジェクトを作るときは、次のコマンドを使います。

cargo new プロジェクト名

これだけで、必要なフォルダやファイルが自動的に用意されます。プログラムを実行するときも簡単です。

cargo run

もしcargo: command not foundと表示される場合、rustupのインストールに失敗しているか、先ほどと同様にターミナルの再起動が必要なケースがほとんどです。また、社内ネットワークなどプロキシ環境下では、初回のcargo build実行時に外部のパッケージ置き場(crates.io)へアクセスできず、次のようなタイムアウト系のエラーが出ることがあります。

error: failed to get `xxxx` as a dependency ... network failure

これはネットワーク設定側の問題であることが多く、プロキシ設定を.cargo/config.tomlに記載することで解決できる場合があります。自宅などの一般的なネット環境であれば、まず遭遇しないエラーなので、もし出た場合は焦らずネットワーク環境を疑ってみてください。

コンパイル言語であるということ

Rustは、書いたコードをそのまま実行するのではなく、一度コンピュータが理解できる形式に変換(コンパイル)してから実行する言語です。この変換の過程で、Rustは非常に厳格にコードをチェックします。最初のうちはこのチェックによってエラーが多く出て驚くかもしれませんが、これはメモリ関連の重大なバグを実行前に防ぐための仕組みです。

例えば、環境構築を終えて最初のコードを書いたときによく見る典型的なメッセージが次のものです。

error[E0384]: cannot assign twice to immutable variable `x`

これは「一度だけ値を入れられる変数(デフォルトの変数)に、2回目の代入をしようとした」というエラーです。多くの言語では変数は自由に書き換えられますが、Rustではうっかり書き換えてしまう事故を防ぐため、変数はデフォルトで「書き換え不可」になっています。書き換えたい場合はlet mut x = ...のようにmutを付けて宣言し直す必要があります。これはバグではなく仕様なので、「怒られた」と感じずに「そういうルールなんだ」と受け止めると気が楽になります。

つまずきやすいポイント(よくある質問)

Q. Rustはなぜ「難しい言語」と言われるのですか?

Rustには「所有権」という、他の多くの言語にはあまりない独自の考え方があります。これは「あるデータを誰が管理する責任を持つか」をコンパイラが厳密にチェックする仕組みで、慣れないうちはエラーが頻発しがちです。ただしこれは環境構築の段階ではなく、実際にコードを書き始めてから直面する話です。環境構築そのものは他の言語と比べても特別難しいわけではないので、「難しい言語」という評判に身構えすぎず、まずは気軽にインストールしてみることをおすすめします。

Q. 最初は何から学べばいいですか?

公式が無料公開している「The Rust Programming Language」(通称:The Book)という文書が、体系立てて所有権の考え方まで丁寧に説明してくれるので定番の入り口です。いきなり全部を理解しようとせず、cargo newで小さなプログラムを作りながら、エラーが出るたびにメッセージを読む、という繰り返しが結局いちばん身につきます。

Q. インストールに失敗したら最初からやり直せますか?

はい。rustupはrustup self uninstallというコマンドで一度きれいに削除できるので、途中で設定がおかしくなったと感じたら、思い切って入れ直すのも手です。壊れた状態のまま試行錯誤するより早く解決することがあります。

エディタの準備

Rustを書く際は、Visual Studio Codeに「rust-analyzer」という拡張機能を入れておくと、型のヒントやエラーの指摘をリアルタイムで確認できて学習効率が上がります。無料で使えて情報も多いため、最初の1本としては選びやすい組み合わせだと思います。もちろんこれは絶対の正解というわけではなく、慣れているエディタがあればそちらに拡張機能を追加する形でも問題ありません。大事なのは「エラー箇所を見やすく表示してくれるか」という点です。

他の言語と比べた環境構築の考え方

言語によって環境構築の考え方はさまざまです。例えばPythonでは、バージョンやパッケージの管理ツールが複数存在し、どれを選ぶか自体に迷うことがあります。一方Rustは、rustupという公式ツールにほぼ一本化されており、「まずrustupを入れる」という選択にほとんど迷いがありません。また、cargoがプロジェクト作成・依存パッケージの管理・ビルド・実行までを一つのコマンド体系でまとめて面倒を見てくれる点も特徴です。これはどちらが優れているという話ではなく、Rustは比較的新しい言語だからこそ、後発の強みとして「最初から公式ツールに機能を集約する」という設計を選べた、という背景があります。他の言語の便利な部分を知っていると、逆にRustのこのシンプルさのありがたみに気づきやすいかもしれません。

Rustならではの注意点

Rustのエラーメッセージは、単に「間違っています」と言うだけでなく、「こう直すとよいかもしれません」という具体的な修正案まで表示してくれることが多いのが特徴です。エラーが出ても焦らず、まずはメッセージを最後まで読む習慣をつけると学習がスムーズに進みます。環境構築の段階で出会うエラーも同様で、多くの場合エラー文の中に解決のヒントが含まれています。

まとめ

Rustの環境構築は、rustupを使えば迷うことなく完了します。Windowsであればビルドツールの案内に従い、コマンドが見つからないときはまずターミナルを再起動する。この2点さえ押さえておけば、つまずいてもすぐに立て直せます。cargo newでプロジェクトを作り、cargo runで実行する、という一連の流れさえ覚えてしまえば、あとは厳格ながらも親切なエラーメッセージに助けられながら学習を進められます。所有権のような独自の概念に難しさを感じる場面はこの先出てきますが、それは環境構築が終わった後の話です。まずは肩の力を抜いて、最初の一歩を踏み出してみてください。


本ページはプロモーションを含みます。

参考書籍(PR)

Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。

コメント

このブログの人気の投稿

#11 Rustで学ぶエラーハンドリングの基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本

#19 Goで学ぶテスト(単体テスト)の基本