最近、ちょいとRustという言語が気になっているのでMac上に遊べる環境を作成してみたのでメモを残す。使用エディタはEmacs(今回は24.5)。
Rust本体のインストール
軟弱なので
Rustの公式ページ
ここからInstallをクリックして、Mac用のインストールパッケージをダウンロードしてインストールするだけ。これでRust単体で使えるようになるはず。
2016/5/31 追記
Ver1.9.0においてもMac用のインストールパッケージは署名されていないので、お使いのMacの設定システム環境設定のセキュリティからインストーラーの実行操作をする必要がある。
Ver1.9.0においても、以下の手順を元にで環境構築出来る事を確認済み。
Emacsへのrust-modeの導入
これまた軟弱なので、
M-x package-install
でrust-mode
を選択してインストール。
flycheck-rust(文法チェッカ)の導入
毎度おなじみ軟弱なので、package-install
からflycheck-rust
を選んで導入。もしflycheck自体を使ってなかった場合はflycheckの導入から。flymakeを使ってたりするのであればそちらでどうぞ。
ここまでの確認
これでシンタックスハイライトとか文法されるようになる。試しに
fn main(){
println!("test");
}
とか打ち込んで、シンタックスハイライトを確認。flycheckのアラートはたまに馬鹿な時があるけど、まぁ気にしない(笑)
quickrunの導入(未導入かつ必要なら)
結構いろんな言語に対応してくれているquickrun。ソース適当に書きながら切りの良い所で実行確認するのに便利。
軟弱なのでこいつもpackage-install
からquickrun
を選択して導入。
導入完了したら適当なソース(例えば上記のtest.rs)を書いて
M-x quickrun
で実行結果が表示される(コンパイルエラーがあれば、エラーが表示される)。
これから学習してく所なので、スニペットレベルで実行出来ると色々捗りそう。
racer(コード補完)の導入
racerは本体のコマンドと、Emacsから利用するElispの二系統に分かれる。
事前準備
利用にはRustのソースコードが必要なので
Rustのダウンロードページ
からソースのTarballをダウンロードして、適当な場所(今回は/usr/local/src/)に展開しておく。
Rustのダウンロードとビルド
次に、racerのサイトからGitでracer本体のクローンを行う。今回は/usr/local/rust/にクローンした。
git clone https://github.com/phildawes/racer.git
Git使ってない人(はRust試そうと思わないか?)はZipダウンロードして展開してもよい。
ダウンロードが終わったら、当該ディレクトリに移動した後
cargo build --release
でビルドを行う。ビルドが完了したら、/usr/localあたりに丸ごとmvしておく(この辺は個々の環境の好みで調整してください)。
環境変数の設定
racerにrustのソースの場所を教えてあげるため、.bash_profileあたりに
export RUST_SRC_PATH=/usr/local/src/rustc-1.1.0/src
を追加してsource .bash_profile
で反映する。展開先が違う場合は適宜書き換えて下さい。
elispの配置
僕はelispはまとめて配置したい人なので、.emacs.d/配下のディレクトリにracer/editors/emacs配下をracerという名前でフォルダ丸ごとコピーしました。load-pathが及ぶ場所なら、お好みで配置すれば良いと思います。
init.elに環境系の設定追加
elispの配置が終わったら、以下のように設定を加えました(racer.elの配置場所には既にload-pathが通っている前提)。
(setq racer-rust-src-path "/usr/local/src/rustc-1.1.0/src/")
(setq racer-cmd "/usr/local/racer/target/release/racer")
(eval-after-load "rust-mode" '(require 'racer))
こいつも配置場所によっては、適当にパスを変更して下さい。
fook設定の追加
rustのソース開いた時に補完と定義ジャンプが有効になるように、以下の設定を追加。
(add-hook 'rust-mode-hook
'(lambda ()
(racer-activate)
(local-set-key (kbd "M-.") #'racer-find-definition)
(local-set-key (kbd "TAB") #'racer-complete-or-indent)))
これで補完と定義ジャンプが使えるようになったはず。
ちょいと確認
拡張子.rsのファイルを開いて
use std::
と入力後にTABを押して、補完ウィンドウが出てくればOK。これでここまでの設定は概ね終了。
ちょいと不便なとこ
racerで出てくる補完ウィンドウ、Ctrl系のカーソル移動が使えず、カーソルキーかマウスでの選択となっているようなので、ちょいと不便。。。
コメントいただいたので加筆(ありがとうございます!)
手元の環境では、M-n, M-p などで候補の選択ができます。多分、デフォルトのキーバインドだと思います。
おしまい
ここまでで適当にRust学習しながら遊べる最低限の環境は出来たと思います。ひょっとしたらここで導入したelispの前提となっているものがあるかもしれませんが、その時はごめんなさい。