読者です 読者をやめる 読者になる 読者になる

Rust入門 - 開発環境構築

我らが敬愛するMozillaによって開発中のRust、そのバージョン1.10.0がリリースされました。RustのRustによるRustな言語になったわけです(ぇ Rustの言語仕様だとかミッションポリシー的なことはググればいろいろ出てくるのでここでは割愛します。が、簡単に言うと安全なC++(異論は認める)という感じです。システムレベルの低層プログラ厶をゴリゴリ書けます。

開発環境構築からHello Worldまでの手順をまとめてみました。

インストールは超簡単。公式通りにやります。

% curl https://sh.rustup.rs -sSf | sh
% rustc --version
% export PATH="$HOME/.cargo/bin:$PATH"

さて、これでコーディングしてコンパイルして実行、までできるようになりました。が、当然のようにVimで開発するわけでして、シンタックスハイライトと補完くらいはできたらいいよね、ということでプラギンを入れていきましょう。今回はrust-lang/rust.vimracer-rust/vim-racerの2つを入れます。

ただ、単純にプラギンを入れればおkではなく、今回使わせてもらうプラギンにはRustのライブラリが別途必要になります。となるとパッケージマネージャーなどが欲しくなりますよね。ご安心ください。Rustインストール時にCargoというパッケージマネージャーがついてくるので、これを使えば問題ないです。cargoコマンドで普通にインストールしていきます。インストール後にパスを通しておくのを忘れずに。

% cargo install racer
% rustup component add rust-src
% export RUST_SRC_PATH="$HOME/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src"
% cargo install rustfmt

RUST_SRC_PATHはvim-racerで使います。環境によってパスは異なるので注意。

ライブラリのインストールが終われば、あとはいつものように.vimrcでバンドルして、コンフィグをちょろっと書くだけ。以下は参考に。

let g:rustfmt_autosave = 1
let g:rustfmt_command = $HOME . '/.cargo/bin/rustfmt'

set hidden
let g:racer_cmd = $HOME . '/.cargo/bin/racer'

これで準備はおしまい。一先ずHello Worldしましょう。Rustの拡張子はrsなので、ブロジェクトディレクトリ下にsrcディレクトリを作り、main.rsなどとして作ってみることにします。ファイル名はhello_world.rsとかでも大丈夫ですが、アンダーバー記法推奨です。

% mkdir -p project/rust/hello_world/src
% cd project/rust/hello_world
% vim src/main.rs
fn main() {
    println!("Hello, world!");
}

見ての通りですが、どことなくCっぽい。うんうん、システムプログラミングはこうだよね(ぇ

main.rsをrustcコマンドでコンパイルすれば実行ファイルが出力されます、が、これは一旦忘れて別の方法でコンパイルします。そこで使うのが、パッケージマネージャーでもありビルドツールでもある先程のCargoになります。上記ライブラリのインストールに結構時間がかかったと思いますが、それはライブラリをコンパイルしていたからだったんですね。

Cargoでコンパイルするときは、コンフィグファイルを用意します。ファイル名はCargo.tomlです、Cは大文字。どことなくiniファイルに似ている。このコンフィグファイルには依存ライブラリ等も記述できます。なので、GitHubからクローンしたプロジェクトなどにローカルインストールしていないライブラリがあったとしても、build時にそれらも一緒にコンパイルしてくれるようになります。npm install的な、あんな感じです。そこらの話はまた別の機会に。

% vim Cargo.toml
[package]

name = "hello_world"
version = "0.0.1"
authors = [ "hoge piyo <hoge@piyo.com>" ]

コンフィグファイルができたら、buildを叩く。

% cargo build

buildが終わったら./target/debug下に出力されています。ちなみにreleaseオプションをつけることで最適化してくれます。あとは通常通り、実行ファイルを叩けば標準出力にHello Worldされます。が、ここではcargoを使って実行してみようと思います。

% cargo run

runはbuildと実行を一発でやってくれる便利コマンドで、rebuildが必要なときはbuildして実行、必要ないときは純粋に実行だけしてくれるのです。runでrebuildもしてくれるからといって、何でもかんでもrunで走らせるのはアレなので、build→runの手順を順守する癖を付けといたほうがいいかもです(別にRustだけに限った話ではないのだけども)

ちなみにcargoでtomlファイル含めてディレクトリもいろいろサンプルを自動生成してくれます。

cargo new hello_world --bin

とりあえずここまで。ハマるポイントは特にないですね。

2017/03/20 追記

バージョン1.16用に修正