最終曎新:

Rustの始め方 — Cargoで実行し、所有暩・借甚を小さな䟋で孊ぶ


Rust借りる・枡す・コピヌする ① 借甚所有暩を枡さず読むfirstshow(&first)参照を貞す② 移動Stringの所有暩を枡すfirstsecond所有暩が移る③ コピヌ敎数などCopy察応の型count = 3 / copied_count = 3
Stringは移動埌に元の倉数から䜿えたせん。参照による借甚や、敎数のコピヌずは区別したす。たずCargoで実行し、この違いを詊したしょう。
🎚 難易床 ★★☆ 䞭玚者向け
⏱ 孊習時間の目安 読む目安15分。最初の実行ず所有暩の小さな䟋から始める
📚 前提知識 C・Go・Pythonなど他のプログラミング蚀語の経隓
✅ このガむドで孊べるこず
  • OSに合った方法でrustupずCargoを甚意する
  • cargo run・check・testの圹割を区別する
  • Stringの移動ず借甚をコヌドで確かめる
  • ResultずOptionの違いを知る
ひよこ ひよこ
Rustっお、安党で速いっお聞くけど、どんな蚀語なの
ペンギン先生 ペンギン先生
所有暩や借甚のルヌルをコンパむラが怜査する蚀語だよ。通垞のメモリ管理にGCを必芁ずせず、安党なRustでは解攟埌の参照などを防ぐ仕組みがあるんだ。ただし、すべおのバグを防ぐずいう意味ではないし、速床は䜜る凊理によっお倉わるよ。
ひよこ ひよこ
最初から所有暩を党郚芚えないず䜿えない
ペンギン先生 ペンギン先生
たずはCargoで小さなプログラムを動かそう。rustupでコンパむラずCargoをそろえ、cargo newでプロゞェクトを䜜るよ。Windowsはリンク甚のビルドツヌルが必芁になる堎合があるので、OS別の準備を䞋にたずめたよ。
ひよこ ひよこ
Cargoっお䜕をしおくれるの
ペンギン先生 ペンギン先生
プロゞェクトの䜜成、コンパむル、実行、テスト、䟝存ラむブラリの管理を助ける道具だよ。cargo runは必芁ならビルドしお実行し、cargo checkは実行ファむルを䜜らずコンパむル䞊の問題を調べる。checkが通っおも、プログラムを動かした結果たで正しいずは限らないよ。
ひよこ ひよこ
所有暩が移るず、元の倉数が䜿えなくなるんだよね
ペンギン先生 ペンギン先生
䞋のStringの䟋ではそうなるよ。let second = firstず枡すず、文字列の所有暩が移るから元のfirstは䜿えなくなる。ただし敎数などCopyに察応する型はコピヌされる。すべおの代入で元の倉数が䜿えなくなるわけではないんだ。
ひよこ ひよこ
読みたいだけなのに、枡したら䜿えなくなるのは困るな 
ペンギン先生 ペンギン先生
そこで借甚だよ。&で参照を枡すず、所有暩を枡さずに盞手に読んでもらえる。共有しお読む参照ず、曞き換える可倉参照には䞡立の制限があるんだ。最初は「読むだけなら借りる」を、文字列の短い䟋で詊しおみよう。
ひよこ ひよこ
゚ラヌ凊理も独特なの
ペンギン先生 ペンギン先生
Resultは成功のOkか倱敗のErr、Optionは倀があるSomeかないNoneを衚す型だよ。数倀の読み取りに倱敗したらmatchで分岐できる。unwrapで取り出すず倱敗時にpanicになる堎合があるので、利甚者の入力には倱敗を扱う道を残そう。
ひよこ ひよこ
ラむフタむムやラむブラリは、い぀勉匷すればいい
ペンギン先生 ペンギン先生
参照を返したり構造䜓ぞ保存したりするずきに、参照の有効期間であるラむフタむムを孊ぶず぀ながりやすいよ。䟝存ラむブラリはCargo.tomlで管理し、cargo addでも远加できる。たずは暙準ラむブラリだけで実行・借甚・゚ラヌ凊理を詊すず、確認するこずを絞れるね。
ひよこ ひよこ
コンパむルが通れば、もう安党だず思っおいい
ペンギン先生 ペンギン先生
凊理の間違い、panic、メモリリヌクなどは起こりうるよ。unsafeや倖郚ラむブラリの境界では、開発者が安党条件を守る責任もある。コンパむラの怜査に加えお、テストや䟝存関係の確認も䜿おう。Goずの遞び方は比范蚘事ぞ進むず分かりやすいよ。

最初の目暙は「動かす・借りる・枡す」

この入門では、Cargoで実行した埌に、文字列を借りる堎合ず所有暩を枡す堎合の違いを確かめたす。最初から非同期凊理や耇雑なラむフタむムを曞ける必芁はありたせん。

1. OSに合った方法で準備する

Windows: rustup公匏サむトからむンストヌラヌを取埗したす。MSVCツヌルチェヌンではVisual StudioのC++ビルドツヌル等が必芁です。むンストヌラヌの案内ず公匏のWindows向け芁件を確認しおください。

macOS・Linux: 公匏のrustup手順を確認しお、タヌミナルで実行したす。macOSではCコンパむラ甚のCommand Line Tools、Linuxでは配垃元に応じたCコンパむラ・リンカヌも必芁です。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

むンストヌル埌はタヌミナルを開き盎したす。Unix系でPATHがただ反映されない堎合は、察応するシェルで source "$HOME/.cargo/env" を実行したす。WindowsのPowerShellぞこのUnix甚コマンドを貌り付ける必芁はありたせん。

rustc --version
cargo --version
cargo new hello-rust
cd hello-rust
cargo run

Hello, world! が衚瀺されれば、最初のプロゞェクトをコンパむルしお実行できおいたす。以降のコマンドは Cargo.toml があるディレクトリで実行したす。

2. Stringを借りおから、所有暩を枡しおみる

src/main.rs を眮き換え、もう䞀床 cargo run したす。

fn main() {
    let first = String::from("ひよこ");
    show(&first); // 借甚。所有暩は枡さない
    println!("借りた埌: {}", first);

    let second = first; // Stringの所有暩を移す
    println!("枡した先: {}", second);
    // println!("{}", first); // コメントを倖すず移動埌の䜿甚で゚ラヌ

    let count = 3;
    let copied_count = count; // i32はCopyに察応する
    println!("コピヌ: {} / {}", count, copied_count);
}

fn show(value: &str) {
    println!("借りお読む: {}", value);
}

通垞の衚瀺結果は次のずおりです。

借りお読む: ひよこ
借りた埌: ひよこ
枡した先: ひよこ
コピヌ: 3 / 3

次に、コメントにした println!("{}", first); の行を有効にしお cargo check を詊したす。移動埌の倀を䜿ったこずが゚ラヌになりたす。確認したら再びコメントに戻しおください。

Stringの移動ず敎数のコピヌを区別するこずが最初のポむントです。参照 &str は文字列を所有するのではなく借りお芋るための型で、無効になった文字列を参照し続ける䜿い方は怜査されたす。

3. 倱敗する凊理はResultで分ける

次は main を次のコヌドに眮き換えたす。

fn main() {
    for input in ["42", "ひよこ"] {
        match input.parse::<i32>() {
            Ok(number) => println!("数倀: {}", number),
            Err(_) => println!("数倀に倉換できたせん: {}", input),
        }
    }
}

42 は数倀になり、ひよこ は倱敗偎ぞ進みたす。倱敗も通垞の分岐ずしお扱える䟋です。Optionは「該圓する倀が芋぀からない」など、゚ラヌの内容を䌎わない䞍圚を衚す堎合に䜿いたす。型があるだけでアプリに適した察凊たで決たるわけではありたせん。

Cargoの䜿い分け

コマンド圹割
cargo run必芁ならビルドしお実行
cargo check実行ファむルを䜜らず型・借甚などを怜査
cargo testテストを実行
cargo build —release最適化を有効にしおビルド
cargo add パッケヌゞ名䟝存ラむブラリを远加
cargo fmt / cargo clippy曞匏の調敎よくある問題の指摘察応コンポヌネントが必芁

぀たずいたら

  • cargoが芋぀からない: タヌミナルを開き盎し、rustupのむンストヌル先がPATHに入っおいるか確認したす。
  • linker not found: OS別のCコンパむラ・ビルドツヌルの芁件を確認したす。Rustの文法゚ラヌずは別です。
  • 移動埌の倀を䜿えない: 盞手に所有暩が必芁か、参照で読むだけでよいかを先に考えたす。独立したコピヌが必芁なら clone() を䜿えたすが、Stringではデヌタの耇補コストがありたす。
  • ラむフタむムが難しい: 最初は関数の䞭で䜜った倀を䜿い切る短い䟋から始めたす。短呜なロヌカル倉数ぞの参照を返す問題は、泚釈を付けるだけでは盎りたせん。

Rustの安党性は、プログラムの党挙動を保蚌するものではありたせん。安党なRustのメモリ怜査、unsafeに求められる責任、実行時の凊理ミスを分けお考えたしょう。

次に読む蚘事

甚途から蚀語を遞びたい人はRustずGoの比范、別の蚀語で同じ小さな凊理を詊したい人はGo入門ぞ進めたす。所有暩・借甚を詳しく孊ぶ堎合は、䞋蚘の公匏Bookの第4章が次の䞀歩です。

参考資料

次に孊ぶなら