Rustをはじめよう! Rustの環境構築 Atom & SublimeText

  • 44
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この記事は Rustアドベントカレンダー5日目の記事です。

Rustはバージョンがまだ1ではなかった頃、破壊的仕様変更が何度も繰り返されてきましたが、バージョン1になり、だいぶ落ち着いてきました。
過去の破壊的変更からRustに恐怖心を抱いている?方もいるかもしれませんが、Rustこわくないよ!とまず最初に言っておこうと思います!

Rustこわくないよ!

Rustの開発のキホン

Rustでの開発は、rustc コマンドによってビルドすることも出来ますが、基本的には cargo コマンドでビルドやテストを行い、開発を勧めます。

cd /path/to/ # 好きなディレクトリを指定
cargo new hoge

Rustは cargo コマンドで cargo new <プロジェクト名> を実行するだけで、簡単にプロジェクトフォルダが、作成されます。

cd hoge

あとは、ディレクトリに潜り、cargo test とするだけで、簡単にビルド&テストが可能です。ただ、cargo new <プロジェクト名> ですと、cargoのライブラリを作成するためのテンプレートが用意されるので、cargo run することが出来ません。簡単なプログラムを作りたいときは、

cargo new --bin <プロジェクト名>
cd <プロジェクト名>
cargo run
# => Hello, world!

とすると良いでしょう。
では、これを踏まえて、Atom による開発環境の構築を行いましょう。

Atomによる開発環境構築

1. Atomのダウンロード

ここから、Atomをダウンロードし、インストールします。

2. apmで必要なパッケージのインストール

apm install language-rust
apm install racer
apm install linter
apm install linter-rust
apm install build
apm install build-cargo
apm install atom-ctags

Atomをインストールすると、apmコマンドがターミナルで使用できるようになるので、これらのパッケージをインストールします。インストール後、必ずAtomは再起動させてください。

3. Rustのソースのダウンロード

racer というパッケージは、Rustのコマンド候補を表示させるための機能を持っていて、コマンド候補の元データとして、Rustのソースディレクトを必要とします。

cd /path/to/ # 好きなディレクトリを指定
wget https://static.rust-lang.org/dist/rustc-1.4.0-src.tar.gz
tar xzvf rustc-1.4.0-src.tar.gz
rm -f rustc-1.4.0-src.tar.gz

解凍まで終わったら、~/.bashrc

export RUST_SRC_PATH=/path/to/rustc-1.4.0/src

を追加します。/path/to/の部分は、rustcのソースファイルの場所に置き換えてください。また、Rustのバージョンが新しくなっているかもしれないので、公式サイト にいって確認をおすすめします。

設定が終わったら、

source ~/.bashrc

~/.bashrc を読み込みます。

4. racerを入れる

racerは、実体としては実行ファイルになっていて、apmのパッケージのracerがこの実行ファイルを呼び出すような仕組みになっています。

cd /path/to/
git clone https://github.com/phildawes/racer.git
cd racer; cargo build --release

こちらも、お好きなディレクトリに cargo を使ってビルドし、設置します。racerはRust製なんですね。

ビルドが終わったら、正しく動いているのかを確認するために

./target/release/racer complete std::io::B

を実行します。うまく実行できない場合は RUST_SRC_PATH がうまく設定されていない可能性があります。

続いて、Atomからracerを使う設定になります。

Atomからは

Preferences > Packages > racer > Settings

の順に開いてください。Settings が表示されていないときは一旦Atomを再起動してみてください。

設定は、Path to the Racer executable に racerへのフルパスと、Path to the Rust source code directory Rustのソースディレクトリのフルパスを入れます。

エディタに戻って pri まで打って println 等がでてきたら成功です。

5. Linterを入れる

Linterは、syntaxに間違いがあると、すぐにエラー表示してくれて間違いに気付きやすくなるので便利です。

最初に apm install でlinterはインストール済みなので、特に特別な設定はする必要はありません。

6. Buildする

最初に apm installbuildbuild-cargo をインストールしたことによって、Atom上からbuild実行が出来るようになっています。

Shift + Ctrl(Cmd) + P を押してコマンドパレットを開き、
build select と打つと、ひとつのコマンドがサジェストされるので、エンターを押します。

ここで、ビルドターゲットを選択できるので cargo run を選択します。(lib.rsの場合は cargo test を選択します)

後は、Alt + Ctrl(Cmd) + B を押すことで、ビルドを行う事が出来ます。

7. ctagsを使う

ctagsは、メソッドや構造体が宣言されている行に Ctrl(Cmd)+R でジャンプすることが出来る便利な機能です。これは、atom-ctags の機能ですが、Rustはデフォルトでは、この機能を使用することが出来ません。

.ctags ファイルを編集する必要があります。

Preferences > Open Config Folder

から、Config フォルダをAtomで開きます。
Ctrl(Cmd) + P を押して、.ctags と入力しエンターを押します。

--langdef=Rust
--langmap=Rust:.rs
--regex-Rust=/^[ \t]*(#\[[^\]]\][ \t]*)*(pub[ \t]+)?(extern[ \t]+)?("[^"]+"[ \t]+)?(unsafe[ \t]+)?fn[ \t]+([a-zA-Z0-9_]+)/\6/f,functions,function definitions/
--regex-Rust=/^[ \t]*(pub[ \t]+)?type[ \t]+([a-zA-Z0-9_]+)/\2/T,types,type definitions/
--regex-Rust=/^[ \t]*(pub[ \t]+)?enum[ \t]+([a-zA-Z0-9_]+)/\2/g,enum,enumeration names/
--regex-Rust=/^[ \t]*(pub[ \t]+)?struct[ \t]+([a-zA-Z0-9_]+)/\2/s,structure names/
--regex-Rust=/^[ \t]*(pub[ \t]+)?mod[ \t]+([a-zA-Z0-9_]+)/\2/m,modules,module names/
--regex-Rust=/^[ \t]*(pub[ \t]+)?(static|const)[ \t]+(mut[ \t]+)?([a-zA-Z0-9_]+)/\4/c,consts,static constants/
--regex-Rust=/^[ \t]*(pub[ \t]+)?(unsafe[ \t]+)?trait[ \t]+([a-zA-Z0-9_]+)/\3/t,traits,traits/
--regex-Rust=/^[ \t]*(pub[ \t]+)?(unsafe[ \t]+)?impl([ \t\n]*<[^>]*>)?[ \t]+(([a-zA-Z0-9_:]+)[ \t]*(<[^>]*>)?[ \t]+(for)[ \t]+)?([a-zA-Z0-9_]+)/\5 \7 \8/i,impls,trait implementations/
--regex-Rust=/^[ \t]*macro_rules![ \t]+([a-zA-Z0-9_]+)/\1/d,macros,macro definitions/

をコピーして貼り付けます。

rustプロジェクトが開かれているAtomウィンドウへ戻り、Ctrl(Cmd) + P を押して、ctags rebuild と入力してエンターを押します。

これで、メソッドジャンプが可能になりました。

これで、AtomによるRustの開発環境構築は終わりです。
これで、Rust言語による開発が楽にできるようになりました。
続いて、SublimeTextによる開発環境構築になります。

SublimeTextによる開発環境の構築

Atom同様、racerのインストールと、Linterのインストールなどになります。

1. SublimeTextのダウンロード

SublimeTextは有料ソフトウェアなので、ライセンスの購入を行いましょう。試用期間もあるので、無償で試すことも出来ます。

2. パッケージのインストール

SublimeTextを起動し、Shift + Ctrl(Command) + P を押したあと、install と入力し、エンターを押します。
これを繰り返して下記のパッケージをインストールします。

Rust
RustAutoComplete
SublimeLinter
SublimeLinter-contrib-rustc

3. Rustのソースのダウンロード

racer というパッケージは、Rustのコマンド候補を表示させるための機能を持っていて、コマンド候補の元データとして、Rustのソースディレクトを必要とします。

cd /path/to/ # 好きなディレクトリを指定
wget https://static.rust-lang.org/dist/rustc-1.4.0-src.tar.gz
tar xzvf rustc-1.4.0-src.tar.gz
rm -f rustc-1.4.0-src.tar.gz

解凍まで終わったら、~/.bashrc

export RUST_SRC_PATH=/path/to/rustc-1.4.0/src

を追加します。/path/to/の部分は、rustcのソースファイルの場所に置き換えてください。また、Rustのバージョンが新しくなっているかもしれないので、公式サイト にいって確認をおすすめします。

設定が終わったら、

source ~/.bashrc

~/.bashrc を読み込みます。

4. racerを入れる

racerは、実体としては実行ファイルになっていて、RustAutoComplete が racer を呼び出すような仕組みになっています。

cd /path/to/
git clone https://github.com/phildawes/racer.git
cd racer; cargo build --release

こちらも、お好きなディレクトリに cargo を使ってビルドし、設置します。

ビルドが終わったら、正しく動いているのかを確認するために

./target/release/racer complete std::io::B

を実行します。うまく実行できない場合は RUST_SRC_PATH がうまく設定されていない可能性があります。

続いて、SublimeTextからracerを使う設定になります。

SublimeTextからは、

Preferences > Package settings > RustAutoComplete > Settings - User

からユーザー設定ファイルを開いてください。

設定は、JSONに似たフォーマットになっているので

{
  // The full path to the racer binary. If racer is already
  // in your system path, then this default will be fine.
  "racer": "/path/to/racer",

  // A list of search paths. This should generally just
  // be the path to the rust compiler src/ directory.
  "search_paths": [
    "/path/to/rustc-1.4.0/src"
  ]
}

racerのフルパスと、rustのソースファイルの置かれているディレクトリのフルパスを指定します。/path/to/ は置き換えてください。

エディタに戻って pri まで打って println 等がでてきたら成功です。

5. Linterを入れる

Linterは、syntaxに間違いがあると、すぐにエラー表示してくれて間違いに気付きやすくなるので便利です。

SublimeTextではそのままではうまくLinterは動かないため、設定を行う必要があります。

Preferences > Package settings > SublimeLinter > Settings - User

開かれた設定ファイルにすでに user > linters の欄に rust の項目があるともいますが、そこを下記のように変更します。

"rust": {
    "@disable": false,
    "args": [],
    "crate-root": null,
    "excludes": [],
    "use-cargo": true,
    "use-crate-root": false
}

デフォルトだと、 cargo を使用しない設定になっているので、cargoで管理されている依存関係のあるライブラリがうまく認識できないため、このようにします。

SublimeTextは、これで開発環境の構築が完了です。
エディタ経由でのビルドも可能ですが、便利というわけではないので、
ターミナル経由で実行するのをおすすめします。

6. rustfmt を入れる(2015-12-18追記)

rustfmt は、rustのフォーマットを自動的に修正してくれる便利なツールです。Rust1.5からcargo に cargo install という機能が追加されたので、インストールもとても簡単に行える様になりました。

cargo install rustfmt

たったこれだけです。簡単ですね。

Macの場合
/Users/<USERNAME>.cargo/bin

インストールが終わると、上記の環境変数をexportするように言われるので、 ~/.bashrc にPATHを追加しておきます。

このrustfmtを、SublimeTextでは簡単に使用することができるプラグインが用意されています。

BeautifyRust

このプラグインを、SublimeText上でインストールし、

Preferences > Package settings > BeautifyRust > Settings - User

まで遷移し、設定ファイルを開き下記のように入力します。

  {
    "run_on_save": true,
    "rustfmt": "/Users/<USERNAME>.cargo/bin/rustfmt"
  }

パスが通っている場合は、必要ないかもしれません。
こうすることによって、rustのファイルを保存するタイミングで、コードが自動的に整形されます。

最後に

この記事ではAtomとSublimeTextによる開発環境の構築方法を紹介しました。Rustは、言語自体にパッケージ管理システムが組み込まれていてとても便利だと感じています。ちょっとしたツールを作ってみたりするのに、Rustはとてもお手軽で、ビルドするととても小さい実行形式が出来るのでそれをそのままcronに乗せて動かしたりしています。

それでは2015年最後のRustをお楽しみください!

Rustアドベントカレンダー 2015