はじめに
クラウド開発環境 PaizaCloud IDE(以下、PaizaCloud)を開発環境としたHello World シリーズを書いています。今回はRustを試してみます。
もし、実際にPaizaCloudで試す場合は以下等を参照して下さい。
クラウド開発環境PaizaCloudクラウドIDEのすすめ
📝 今回の内容について
今回は私自身がRustを学びながら試していく「自分のためのHello World」です。
ChatGPTに教えてもらいながら、C言語との比較で「こう動くのか」の確認です。
専門的な解説というより、実際に動かした記録と気づいたことの記録です。
以上のような感じで読んでもらえればうれしいです。
📝 ご注意
この記事は C言語との比較を交えながらRustの書き方を確認 しています。
もしC言語を知らない場合は、比較の部分は読み流して構いません。
Rustの文法や動作の説明自体は独立して理解できるように書いているつもりですので、
Rustの部分に注目して読んでいただければ大丈夫です。
ということでとにかくやってみます。
🧩 まずはHello World
fn main()
{
println!("hello world!");
}
PaizaCloudでやってみる
PaizaCloudでは既にRustのコンパイル環境が構築済みなのですぐに使えます。以下のスクリーンショットのように実行まで出来ました。
- helloworld.rs というファイル名で上記Hello Worldプログラムを保存
-
rustc helloworld.rsでコンパイル -
helloworldというファイルが生成されていることを確認 -
./helloworldで実行 - 実行結果を確認

ここまでは問題なく出来ました。
💬 確認ポイント
-
fn main() は関数の定義。C言語の int main() と似ている
ただし、Rustでは戻り値の型指定を省略できます(省略時は () = 何も返さない)。 -
{} でブロックを囲む点もCと同じ
Rustではインデントに意味はなく、{}の構造で判断します。 -
println! は標準出力に文字を表示するマクロ
最後の ! は「関数ではなくマクロである」ことを示しています。
以上のような確認ポイントをchatgptにもらいました。まあそうなのかと理解した上で私が気になったのは、! です。この ! の意味は何だということです。ということで以下に続きます。
🧠 println! の “!” は何?
Rustの println! は、関数ではなく**マクロ(macro)**です。
マクロは、コンパイル時に展開される仕組みで、
出力やフォーマットなどの「汎用的なコード」を安全に生成するために使われます。
もし ! をつけずに println("hello"); と書くと、
println は関数ではありません
というエラーになります。
この ! を書かないと以下のようなコンパイルエラーが出ました。(要点だけ抜粋です。)
error[E0423]: expected function, found macro `println`
--> helloworld.rs:3:5
|
3 | println("hello world!");
| ^^^^^^^ help: use `!` to invoke the macro: `println!`
- つまり「!」は構文の一部であり、省略できない
実際のここでの println! の処理は標準出力への出力とのことです。ここではターミナル(黒い画面)に普通に表示するということです。
以上を理解しました。
🧩 変数を使ってみる
次は、C言語でいう printf("%s", msg); に相当する書き方です。
fn main()
{
let msg = "hello world!";
println!("{}", msg);
}
💬確認ポイント
-
letは変数宣言
msgは**イミュータブル(変更不可)**な変数として宣言されます。
もし変更したい場合はlet mut msg = ...;のように mut をつけます。 -
"{}"は出力フォーマット
println!("{}", msg); のように書くと、{} の部分に msg の内容が入ります。 -
これはC言語の
printf("%s", msg);と非常に似ていますが、
Rustは型安全にフォーマットを処理するため、
コンパイル時に型が合わない場合はエラーになります。
let msg="hello world!"の後に、単純に、msg="hello world2!"と書いたら以下のコンパイルエラーがでました。(要点だけ抜粋です。)
error[E0384]: cannot assign twice to immutable variable `msg`
--> helloworld.rs:4:5
3 | let msg = "hello world!";
| ---
| |
| first assignment to `msg`
| help: make this binding mutable: `mut msg`
4 | msg = "hello world2!";
| ^^^^^^^^^^^^^^^^^^^^^ cannot assign twice to immutable variable
- mutを書くことで、変更可の変数になるということを理解した
- println!の文字列表示はこのように書くことを理解した
数値フォーマットでの画面出力
数値を画面に出力する例を実行してみます。
fn main() {
let a = 42;
let b = 255;
// デフォルトの表示
println!("a = {}, b = {}", a, b);
// 数値フォーマットの例
println!("a (10進数) = {}", a);
println!("b (16進数) = {:x}", b);
println!("b (大文字16進) = {:X}", b);
println!("b (2進数) = {:b}", b);
println!("b (8進数) = {:o}", b);
}
実行例は以下のようになります。
a (10進数) = 42
b (16進数) = ff
b (大文字16進) = FF
b (2進数) = 11111111
b (8進数) = 377
デフォルトでも表示出来て、フォーマット指定ももちろんできるということですね。
📘ここまでのまとめ
-
Rustは
{}のブロック構造で制御する(インデントは自由) -
println!の!は「マクロ」を意味し、省略できない -
文字列埋め込み(フォーマット)は
"{}"としてprintln!に渡す -
数値の表示フォーマットも指定できる
さいごに
実際にRustを動かしてみました。まだ最初の段階ですが続けてみたいと思います。以下次回予告をしたいと思います。
🔜 次回予告
次は if文やfor文などの基本構造(構造化3要素) をRustで試してみます。
RustでもC言語のように順次・分岐・繰り返しが使えるのかを確認します。
ついでに配列や所有権にも少し触れてみたいと思います。
その次回は以下に投稿しました。
Rust編その2
ありがとうございます。