Edited at

SpacemacsでRust開発環境をあげる

More than 1 year has passed since last update.

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

image

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です。

image


  1. プロジェクト名: hello

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

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


文法チェック (flycheck)

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

image

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

image


補完機能 (racer + emacs racer)

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

image

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

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 + 次のキー )

image