Help us understand the problem. What is going on with this article?

SpacemacsでRust開発環境をあげる

More than 3 years have 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

knjname
Zenn: https://zenn.dev/knjname
http://knjname.hateblo.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away