cargoでプロジェクト初期化
ここまでで作業を開始できる状態になっていると思います。早速Rustのプロジェクトを作ってみましょう。
cargo new
コマンドあるいはcargo init
コマンドでRustを始めます。バイナリーエディターを作るためにbinllion1というプロジェクトを作りましょう!
これらのコマンドは最小限の設定ファイルとフォルダ構成、サンプルコードを生成します。
$ cargo new binllion
Created binary (application) `binllion` package
コマンドを実行すると下記のような構成のフォルダが作成されます。
Cargo.tomlはcargoの設定ファイルです。srcフォルダにはRustのソースコードが置かれます。main.rsはmain関数が書かれています。
binllion
├── Cargo.toml
└── src
└── main.rs
この他に.gitフォルダや.gitignoreが作成されていると思います。これらはバージョン管理システムであるgitで使用するされるものです。もし別のバージョン管理システムを使用したいのであれば、–vcsオプションを使用します。
現状ではgit, hg, pijul, fossilをサポートしているようです。バージョン管理システムを使用しない、あるいは未定の場合はnoneを指定すると.gitフォルダなどが作成されません。
$ cargo new -h
Create a new cargo package at <path>
Usage: cargo new [OPTIONS] <path>
Arguments:
<path>
Options:
--vcs <vcs> Initialize a new repository for the given version control system, overriding a global
configuration. [possible values: git, hg, pijul, fossil, none]
--bin Use a binary (application) template [default]
--lib Use a library template
--edition <year> Edition to set for the crate generated [possible values: 2015, 2018, 2021, 2024]
--name <name> Set the resulting package name, defaults to the directory name
--registry <registry> Registry to use
-v, --verbose... Use verbose output (-vv very verbose/build.rs output)
-q, --quiet Do not print cargo log messages
--color <when> Coloring: auto, always, never
--config <key=value> Override a configuration value
-Z <flag> Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for details
-h, --help Print help
Manifest Options:
--frozen Require Cargo.lock and cache are up to date
--locked Require Cargo.lock is up to date
--offline Run without accessing the network
Run `cargo help new` for more detailed information.
# 例:バージョン管理システムを使用しない場合
$ cargo new --vcs none new_pj
# git以外を指定する場合は予めバージョン管理システムがインストールされている必要があるようです。
$ cargo new --vcs pijul new_pj2
error: Failed to create package `new_pj2` at `/home/my_rust/new_pj2`
Caused by:
could not execute process `pijul init -- /home/my_rust/new_pj2` (never executed)
Caused by:
No such file or directory (os error 2)
Cargo.toml
軽くCargo.tomlの中身を見てみましょう。
プロジェクトはpackageとして扱われ、nameにこのpackageの名前が入ります。
versionはこのpackageのバージョンになります。CargoではSemantic Versioningに基づいて管理しています。外部crateの特定のバージョンを使用したい場合、この仕組みが重要になってきます。不特定多数と共有する場合はこちらに注意を払う必要があります。
editionはRustのeditionになります。コンパイラに対しての指示になります。特に変更する必要はないでしょう。
[dependencies] セクションはこのpackageが依存するcrateの情報を入れます。
その他、詳細はThe Cargo Bookを参照してください。
[package]
name = "binllion"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
main.rsも見てみましょう。
デフォルトでHello, world!を出力するコードが作られています。内容としては、main関数からprintln!マクロを呼び出してHello, world!を出力しています。
このサンプルをコンパイルするには、cargo build
を実行します。
コンパイルが成功すると、target/debug/フォルダに実行ファイルが生成されます。コンパイルと実行を同時に行うには、cargo run
コマンドを実行します。
fn main() {
println!("Hello, world!");
}
$ cargo build
Compiling binllion v0.1.0 (/home/my_rust/binllion)
Finished dev [unoptimized + debuginfo] target(s) in 0.56s
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/binllion`
Hello, world!
- 元ネタのBuild Your Own Text Editorシリーズでは数字関連の単語をプロジェクトの名前に採用しています。この伝統に倣って億を意味するbillionとbinaryを合成してbinllionとしました。敬愛する漫画ジョジョの奇妙な冒険の登場人物、虹村億泰が由来。1億行以内のコード量でバイナリーエディターの完成を目指します。 ↩︎
TOC
GitHubにコードをアップロードしています。
コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。
# Example
$ cargo run --examples first_step