SpacemacsでRust開発環境をあげる


Spacemacsで、Rustのそれなりの開発環境を立ち上げてみます。

※ 記事中の SPC は Emacsキースタイルを使っている人は M-m に読み替えてください。

Rust まわりのツールチェインのインストール

rustup

rustのインストールを管理してくれる、rustup (rbenvみたいなの)を入れます。

$ curl https://sh.rustup.rs -sSf | sh

これで基本のツール(rustc, cargo など)は入ります。

MacだとHomebrewでもrustは入りますが、色々考えるとrustupのほうがお得そうです。(Homebrewでrustupが入るようになると一番いいですね。)

cargo install コマンドでインストールしたツールにパスが通るようにシェルに追加しましょう。

$ echo 'source $HOME/.cargo/env' >> ~/.profile

rustfmt

Rustのソースコードフォーマッタであるrustfmtを入れます。

$ cargo install rustfmt

racer

Rustのコード補完ツールであるracerを入れます。

$ # 本体インストール
$ cargo install racer
$ # racerのためにRustのソースコードを追加
$ rustup component add rust-src
$ # パスの確認
$ echo ~/.multirust/toolchains/*/lib/rustlib/src/rust/src
/Users/owner/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/src
$ # パスを追加
$ echo "export RUST_SRC_PATH='$(echo ~/.multirust/toolchains/*/lib/rustlib/src/rust/src)'" >> ~/.profile
$ # インストールチェック
$ bash -l
$ racer complete std::io::B
MATCH BufReader,46,11,/Users/owner/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/src/libstd/io/buffered.rs,Struct,pub struct BufReader<R>
MATCH BufWriter,298,11,/Users/owner/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/src/libstd/io/buffered.rs,Struct,pub struct BufWriter<W: Write>
MATCH BufRead,1198,10,/Users/owner/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/src/libstd/io/mod.rs,Trait,pub trait BufRead: Read
MATCH Bytes,1588,11,/Users/owner/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/src/libstd/io/mod.rs,Struct,pub struct Bytes<R>

Emacs側のインストール

  1. まずはSpacecmacsを入れましょう。
  2. ~/.spacemacs にRustレイヤー追加しましょう。
~/.spacemacs
   ;; List of configuration layers to load.
   dotspacemacs-configuration-layers
   '(
     ;; ----------------------------------------------------------------
     ;; Example of useful layers you may want to use right away.
     ;; Uncomment some layer names and press <SPC f e R> (Vim style) or
     ;; <M-m f e R> (Emacs style) to install them.
     ;; ----------------------------------------------------------------

     ;; (... いろいろ...)
     rust

     )

  1. Emacsを再起動するか、 SPC(or M-m) f e R を押してリロードさせましょう。

各種機能のチェック

Hello worldプロジェクトを使って 各種機能 の動作を確認します。

プロジェクトの新規作成

$ cargo new --bin hello

上記コマンドでもできるのですが、せっかくなのでEmacsからやってみましょう。

上記と同じようにプロジェクトを作るには、 M-x cargo-process-new でOKです。

  1. プロジェクト名: hello
  2. binプロジェクトか?: yes

ただ、普通にコマンドラインから作成で十分ですね。

文法チェック (flycheck)

*.rs ファイルで編集・保存していれば勝手に文法チェックが行われますが、 C-c ! + 次のキー にて明示的に文法チェッカ(flycheck) の機能を呼ぶことができます。

ここでは C-c ! l でエラーの一覧を出してみましょう。

補完機能 (racer + emacs racer)

変数に型の情報があれば、普通に補完がでてきます。

ほか下記の機能があります。

M-. 定義へジャンプ
M-, 定義からバック
M-x racer-describe 定義を別バッファに表示

ソースコードフォーマッティング (rustfmt)

M-RET = でフォーマットできます。

cargo

cargo コマンドでプログラムを実行してみましょう。

SPC m c xでmainを実行することができます。

-*- mode: cargo-process; default-directory: "~/.emacs.d/.cache/junk/2016/11/hello/src/" -*-
Cargo-Process started at Tue Nov 29 13:02:59

cargo run
    Blocking waiting for file lock on build directory
   Compiling hello v0.1.0 (file:///Users/owner/.emacs.d/.cache/junk/2016/11/hello)
    Finished debug [unoptimized + debuginfo] target(s) in 0.46 secs
     Running `/Users/owner/.emacs.d/.cache/junk/2016/11/hello/target/debug/hello`
Hello world

Cargo-Process finished at Tue Nov 29 13:02:59

ほかユニットテストの実行などもサポートしているようです。 ( SPC m c + 次のキー )