この記事は 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がこの実行ファイルを呼び出すような仕組みになっています。
cargo install racer
インストールが終わったら、正しく動いているのかを確認するために
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 install
で build
と build-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ウィンドウへ戻り、Shift + 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 を呼び出すような仕組みになっています。
cargo install racer
インストールが終わったら、正しく動いているのかを確認するために
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/ は置き換えてください。
Macの場合 /Users/<User>/.cargo/bin/racer
にあります。
エディタに戻って 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
たったこれだけです。簡単ですね。
/Users/<USERNAME>.cargo/bin
インストールが終わると、上記の環境変数をexportするように言われるので、 ~/.bashrc
にPATHを追加しておきます。
このrustfmtを、SublimeTextでは簡単に使用することができるプラグインが用意されています。
このプラグインを、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をお楽しみください!