読者です 読者をやめる 読者になる 読者になる

冥冥乃志

ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。

follow us in feedly

Rustの開発環境を作る(その2:Cargoを使う)

Programming

はいそこ、VimとかEmacsとか使ったほうがいいんじゃない?とか言わない。私、どっちのエディタも使いこなせない情弱なんですから。ただ、これを見てからVSCodeでよかったんじゃないの?と思ったのは内緒です。

もじゃった人がVSCodeでの環境構築をブログにしてくれています。現時点ではそっちの方がオススメです。

僕もRustの開発環境を作ってみました(VS Code編) - SHI-Zone

Rustのバージョンアップ

前回の記事を書いてから1.6にあがったらしいのでバージョンアップします。最新版のバイナリをダウンロードして上書きインストールするだけです。

Rustに同梱されているらしいので、Cargoを別途インストールする必要はありませんでした。ちゃんとパスも通ってます。

前回作ったプロジェクトをCargoプロジェクトにしてみる

前回、IDEAのプラグインを使ってプロジェクトを作りましたが、Cargoで作ったプロジェクトではないのでこのままではCargoを使ったビルドができません。これをCargoプロジェクトにしてみたいと思います。

プロジェクトの作成はcargo new コマンドでやるようです。オプションにつけている --bin がないと、ライブラリ用のプロジェクトテンプレートになって、エントリポイントとなるソースがmain.rsではなくlib.rsになるとのこと。試しにオプションのあるなしでからプロジェクトを作ってみましたが、違いはエントリポイントとなるソースがmain.rsからlib.rsに変わるのと、バイナリの場合はmain関数があることですね、それ以外の生成内容に違いはないです。 .git.gitignore も合わせて生成してくれます。

さてさて、前回のプロジェクトですが Cargo.toml がありません。また、バイナリのエントリとなるソースは hello.rs となってます。ソースが一つしかないのにすでにCargoプロジェクトのデフォルトから外れております。

試すだけ試してみましょうか。。。

mao RustWorkspace $ cargo new RustOnIdea --bin
destination `/Users/mao/Documents/RustWorkspace/RustOnIdea` already exists

ふむ。予想通りですね、なんか無理っぽいです。メッセージを見る限りは自分でcargo.tomlを作るしかないみたいですね。というわけで作りました。

[package]
name = "rust-on-idea"
version = "0.1.0"
author = ["Shinsuke Abe <mao.instantlife@gmail.com>"]

[dependencies]

[[bin]]
name = "hello"
path = "src/hello.rs"

できました。ちなみに、 autor プロパティは自動生成されたものからコピーしたのですが、Cargoコマンドはこれをどこから取得してるんでしょうか?git?

今の所プラグインがCargoに対応していないので、新しいプロジェクトを始める場合は先に cargo new しておいてからIDEAで読み込むというのが良さそうですね。だったらVSCodeでRacer使う方が良いんじゃないか?という話もありますが目を瞑ります。

ビルド

とりあえずシェル経由ですね。ビルドしましょう。

mao RustOnIdea $ cargo build
unused manifest key: package.author

こんな感じでビルドされます。

f:id:mao_instantlife:20160128094937p:plain

ところで、合わせてプロジェクト直下に Cargo.lock というファイルが生成されます。実際の依存関係をCargoが管理するためのファイルのようです。バイナリをビルドするときは Cargo.lock をgit管理下におけと書いてありました。ライブラリのときは、実際にライブラリを使うバイナリ側で Cargo.lock を生成して管理するのでしょう。

まとめ

IDEA用のプラグインが発展途上なところがあって、補完については若干のストレスがありますが、シェルからCargoも使えますしそんなに複雑なプログラムを書いているわけではないので今の所は問題ありません。というか、今の所IDEAはただコード書くだけ。VSCodeで環境作り直したくなってるのは内緒。