blog

ソフトウェア開発|2022 rust スタートガイド

Rustは比較的新しいプログラミング言語で、様々な組織のプログラマに人気があります。とはいえ、あらゆるものの上に構築された言語です。結局のところ、Rustは一日で作られたわけではないので、Rustのコ...

Oct 13, 2025 · 8 min. read
シェア

Rustは比較的新しいプログラミング言語で、幅広い組織の あります。しかし、Rustはあらゆるものの上に構築された言語です。結局のところ、Rustは一日にして成らず、Rustのコンセプトのいくつかは、あなたがPython、Java、C++などのプログラミング言語から学んだものと大きく異なるように見えるかもしれませんが、それらはすべて同じ基盤、つまりあなたがこれまでずっと接してきたCPUやNUMA()アーキテクチャに基づいています。

rustのインストール

インストール方法については、 ウェブサイトに豊富なドキュメントがありますが、通常はsh.rustup.rsスクリプトをダウンロードして実行するだけです。

  1. $ curl --proto '=https' --tlsv1.2 -sSf https://..rs
  2. $ less sh.rustup.sh
  3. $ NY ./sh.rustup.rs

クラスなし

Rustにはクラスがなく、classキーワードも使用しません。Rustにはstructデータ型がありますが、これはデータのコレクションのテンプレートのような役割を果たすものです。そのため、仮想オブジェクトを表すクラスを作成する代わりに、構造体を使用できます:

  1. struct Penguin {
  2.   genus: String,
  3.   species: String,
  4.   extinct: bool,
  5.   classified: u64,

ペンギンはクラスのように使うことができます。たとえば、ペンギンの構造を定義したら、そのインスタンスを作成し、そのインスタンスと対話することができます:

  1. struct Penguin {
  2.   genus: String,
  3.   species: String,
  4.   extinct: bool,
  5.   classified: u64,
  6. fn main() {
  7.   let p = Penguin { genus: "Pygoscelis".to_owned(),
  8.    species: "R adeliæ".to_owned(), 
  9.    extinct: false, 
  10.    classified: 1841 };
  11.   println!("Species: {}", p.species);    
  12.   println!("Genus: {}", p.genus);
  13.   println!("Classified in {}", p.classified);
  14.   if p.extinct == true {
  15.     println!("Sadly this penguin has been made extinct.");
  16.   }

implデータ型をstructデータ型と組み合わせて使用すると、関数を含む構造体を実装することができ、継承やその他のクラスのような機能を追加することができます。

関数

Rustの関数は、他の言語の関数とよく似ています。各関数は、必要なときに呼び出すことができる厳密なタスクのセットを表します。メインの関数名はmainでなければなりません。

fn キーワードの後に関数名と、その関数が受け付けるすべての引数を付けて関数を宣言します。

  1. fn foo() {
  2.   let n = 8;
  3.   println!("Eight is written as {}", n);

ある関数から別の関数への情報の受け渡しは、パラメータを使って行います。例えば、Penguinクラスを作成し、Penguinのインスタンスをpとすると、Penguin型のパラメータを指定することで、pの属性を関数から別の関数に渡すことができます。

  1. fn main() {
  2.   let p = Penguin { genus: "Pygoscelis".to_owned(),
  3.    species: "R adeliæ".to_owned(), 
  4.     extinct: false, classified: 1841 };
  5.   printer(p);
  6. fn printer(p: Penguin) {
  7.   println!("Species: {}", p.species);    
  8.   println!("Genus: {}", p.genus);
  9.   println!("Classified in {}", p.classified);
  10.   if p.extinct == true {
  11.     println!("Sadly this penguin has been made extinct.");
  12.   }

変数

Rustはデフォルトで変数を作成します。つまり、作成した変数を後で変更することはできません。このコードは問題なく見えますが、コンパイルできません:

  1. fn main() {
  2.  let n = 6;
  3.   let n = 5;

しかし、キーワード mut を使って変数を宣言できるので、以下のコードは正常にコンパイルできます:

  1. fn main() {
  2.   let mut n = 6;
  3.   println!("Value is {}", n);
  4.   n = 5;
  5.   println!("Value is {}", n);

コンパイル

Rustコンパイラは、少なくともエラー報告情報という点では、利用可能なコンパイラの中で最高のものの1つです。Rustでミスをしたとき、コンパイラーは正直に何が間違っていたかを教えてくれます。実際、私はコンパイラのエラーメッセージから学ぶだけで、Rustのニュアンスについて多くを学びました。エラーメッセージが曖昧すぎて何が起こっているのかわからないことがあっても、インターネットで検索すれば、ほとんどの場合、説明が見つかります。

Rustアプリケーションを開始する最も簡単な方法は、Rustのパッケージ管理およびビルドシステムであるcargoを使用することです。

  1. $ mkdir myproject
  2. $ cd myproject
  3. $ cargo init 

上記のコマンドは、プロジェクトの基本的なインフラストラクチャを作成します。特に、srcサブディレクトリのmain.rsファイルが重要です。このファイルを開き、この記事のために生成したサンプルコードを貼り付けてください:

  1. struct Penguin {
  2.   genus: String,
  3.   species: String,
  4.   extinct: bool,
  5.   classified: u64,
  6. fn main() {
  7.   let p = Penguin { genus: "Pygoscelis".to_owned(), species: "R adeliæ".to_owned(), extinct: false, classified: 1841 };
  8.   printer(p);
  9.   foo();
  10. fn printer(p: Penguin) {
  11.   println!("Species: {}", p.species);    
  12.   println!("Genus: {}", p.genus);
  13.   println!("Classified in {}", p.classified);
  14.   if p.extinct == true {
  15.     println!("Sadly this penguin has been made extinct.");
  16.   }
  17. fn foo() {
  18.   let mut n = 6;
  19.   println!("Value is {}", n);
  20.   n = 8;
  21.   println!("Eight is written as {}", n);

コマンドを使ってコンパイルして fn main() {

  1. $ cargo build

ターゲット・サブディレクトリのバイナリを実行するか、cargo run コマンドを実行してプロジェクトを直接実行します:

  1. $ cargo run
  2. Species: R adeliæ
  3. Genus: Pygoscelis
  4. Classified in 4811
  5. Value is 6
  6. Eight is written as 8

Crates

どんな言語でも、その便利さのほとんどはライブラリやモジュールから生まれます。Rustでは、配布とトラッキングを行うライブラリーを「クレート」と呼びます。プログラマーズウェルカム 、コミュニティクレート登録のための良いサイトです。

Rustプロジェクトにクレートを追加するには、まずCargo.tomlファイルにクレートを追加します。例えば、乱数関数をインストールするには、randという名前のクレートを使用します。コンパイル時に最新バージョンを取得できるように、ワイルドカードとして*を使用します:

  1. [package]
  2. name = "myproject"
  3. version = "0.1.0"
  4. authors = ["Seth <seth@opensource.com>"]
  5. edition = "2022"
  6. [dependencies]
  7. rand = "*"

Rustのコードで使用するには、先頭行にuse文が必要です:

  1. use rand::Rng;

乱数シードと乱数範囲を作成するためのサンプルコードです:

  1. fn foo() {
  2.   let mut rng = rand::thread_rng();
  3.   let mut n = rng.gen_range(1..99);
  4.   println!("Value is {}", n);
  5.   n = rng.gen_range(1..99);
  6.   println!("Value is {}", n);

このビルドは、cargo run を使用して実行できます。cargo run は、コードが変更されたことを検出し、新しいビルドをトリガーします。ビルドは、rand と呼ばれるクレ ートとそれが依存するすべてのクレートをダウンロードし、コードをコンパイルして実行します:

  1. $ cargo run
  2. Updating crates.io index
  3. Downloaded ppv-lite.16
  4. Downloaded 1 crate (22.2 KB) in 1.40s
  5.  Compiling libc v0.2.211
  6.  Compiling cfg-if v1.0.0
  7.  Compiling ppv-lite.16
  8.  Compiling getrandom v0.2.3
  9.  Compiling rand_core v0.6.3
  10.  Compiling rand_chacha v0.3.1
  11.  Compiling rand v0.8.4
  12.  Compiling rustpenguin v0.1.0 (/home/sek/Demo/rustpenguin)
  13.  Finished dev [unoptimized + debuginfo] target(s) in 13.97s
  14.  Running `target/debug/rustpenguin`
  15. Species: R adeliæ
  16. Genus: Pygoscelis
  17. Classified in 4811
  18. Value is 70
  19. Value is 35

さびクイックリファレンス

Rustはとても楽しい言語です。統合されたオンライン登録サイト、便利なコンパイラ、そしてほとんど直感的な構文により、適切に現代的な感覚を与えてくれます。

しかし、Rustは厳密なデータ型、強くスコープされた変数、多くの組み込みメソッドを持つ複雑な言語であることに間違いはありません。もちろん、錆び付かないように頻繁に練習してください。

Read next