開発

[binllion] 新規プロジェクトの作成

cargoでプロジェクト初期化

ここまでで作業を開始できる状態になっていると思います。早速Rustのプロジェクトを作ってみましょう。

cargo new コマンドあるいはcargo initコマンドでRustを始めます。バイナリーエディターを作るためにbinllion1というプロジェクトを作りましょう!

これらのコマンドは最小限の設定ファイルとフォルダ構成、サンプルコードを生成します。

$ cargo new binllion
     Created binary (application) `binllion` package

Code language: JavaScript (javascript)

コマンドを実行すると下記のような構成のフォルダが作成されます。

Cargo.tomlはcargoの設定ファイルです。srcフォルダにはRustのソースコードが置かれます。main.rsはmain関数が書かれています。

binllion
├── Cargo.toml
└── src
   └── main.rsCode language: CSS (css)

この他に.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.Code language: HTML, XML (xml)
# 例:バージョン管理システムを使用しない場合
$ 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)Code language: PHP (php)

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]Code language: PHP (php)

main.rsも見てみましょう。

デフォルトでHello, world!を出力するコードが作られています。内容としては、main関数からprintln!マクロを呼び出してHello, world!を出力しています。

このサンプルをコンパイルするには、cargo buildを実行します。

コンパイルが成功すると、target/debug/フォルダに実行ファイルが生成されます。コンパイルと実行を同時に行うには、cargo runコマンドを実行します。

fn main() {
    println!("Hello, world!");
}Code language: JavaScript (javascript)
$ 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!Code language: JavaScript (javascript)

  1. 元ネタのBuild Your Own Text Editorシリーズでは数字関連の単語をプロジェクトの名前に採用しています。この伝統に倣って億を意味するbillionとbinaryを合成してbinllionとしました。敬愛する漫画ジョジョの奇妙な冒険の登場人物、虹村億泰が由来。1億行以内のコード量でバイナリーエディターの完成を目指します。 ↩︎

GitHubにコードをアップロードしています。0.1.0バージョン

コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。

# Example
$ cargo run --example first_stepCode language: Bash (bash)
管理人

Recent Posts

情報セキュリティマネジメント試験取得への道

スキルアップを図るべく情報セキ…

2か月 ago

ファイナンシャルプランナー3級試験取得への道

スキルアップを図るべくファイナ…

2か月 ago

[rust] New Type Patternを使ってみる

DDDの考えを取り入れることで…

5か月 ago

RustでDDDの要素を取り入れてみる

前回SOLID原則というものを…

5か月 ago

期間限定!書籍無料キャンペーン2025

「mdBookではじめるKin…

5か月 ago