multirust で今日から始める快適 rust 生活

Rust 1.0 リリースおめでとうございます!!!!

Rust 1.0 がリリースされました!!!!めでたい!!!!!!

このリリースは非常に大きな一歩です。これまではコンパイラのバージョンが上がる度にコードを頑張って修正する必要がありましたが、今後はstablerustc を使って作ったコードについては、将来にわたってもコンパイル可能で動作することが保証されます。 (機能の deprecation などはありますので、絶対的なものではありませんが、破壊的変更の頻度・度合いはこれまでよりもだいぶ控えめになるはずで、バージョンアップへの追従を諦めてしまうこと、いわゆる "Rust 疲れ" 現象は減ることが期待できます)

現時点での Rust を取り巻く環境の問題

言語の安定化により、サードパーティーのライブラリは今後どんどん充実していくと予想されます。Rust の将来はバラ色になるに違いないと筆者は信じていますが、1.0がリリースされたばかりの現時点ではまだまだ理想の状態には到達していないのが現実です。例えば、本日実施された Rust 1.0 Release記念祝賀LT会 では、多くの方が以下について困っていると訴えていました。

  • 使いたいライブラリが unstable な機能を使っているため、stable なコンパイラではコンパイルできない
  • 使いたいライブラリがしばらく更新されておらず、最新の rustc + cargo ではコンパイルできない

これらを回避するためには、nightly/beta バージョンのコンパイラと stable バージョンのコンパイラを、プロジェクトごとに切り替えて利用する必要があります。もしかしたら、特定の日付の nightly build を利用する必要が出てきてしまうかもしれません。非常にめんどくさい作業ですね。

今すぐに Rust を活用したい、そんなあなたのためのツールmultirust です。

multirust のススメ

multirust は、一言で言ってしまえば rubyrvmpythonpyenv のようなもので、複数バージョン (リリースチャンネル) の Rust ツールチェイン (rustc & cargo) を簡単に切り替えて使えるようにするものです。

Rust の開発環境を整える方法としては、公式サイトに記載されている rustup.sh を利用する方法 が有名ですが、multirust を使う方法をオススメします。 (Rust のコアチームの一員の Steve Klabnik さんも 非Windows環境のユーザーについては multirust の利用を推奨しています)

multirust のインストール

以下コマンドをコピペするだけで multirust のインストールは可能です (2015/5/16 現在。実際にインストールする際は README を読んで最新の手順を確認してください)。

curl -sf https://raw.githubusercontent.com/brson/multirust/master/blastoff.sh | sh

上記を実行すると、multirust コマンドと nightly版の rustccargo がインストールされます (既に rustc などがインストールされていると、衝突するかも?)。

multirust の使い方

multirust のインストール直後の状態では、 rustc/cargo コマンドを実行すると、nightly 版の各コマンドが実行されます。

あるプロジェクトについて、stable 版の rustc/cargo を利用したい場合、以下を実行します。

cd <path to project>
multirust override stable

こうすることで、当該ディレクトリのパスとコンパイラバージョンの対応関係が記録され、当該ディレクトリで実行する rustc/cargo については、 stable 版が利用されるようになります (beta 版が使いたい場合は、 multirust override beta とする)。

また、特定の日付の nightly 版を利用することもできます。

cd <path to project>
multirust oberride nightly-2015-05-16

nightly 版のツールチェインについては日々の更新に追従する必要があるかもしれません。デフォルトでは multirust をインストールした時点で最新の nightly が利用されますが、最新の nightly を利用するようにするためには、以下を実行して保存されているツールチェインを更新します。

multirust update nightly

毎日の nightly 更新作業が便利になりますね!

なお、チャンネル名を指定せず multirust update する場合、nightly, beta, release の3チャンネル全てのコンパイラが更新されるそうです。

まとめ

multirust 便利!!!

詳しい話は multirust の README によくまとまっているので読みましょう。