<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「シャドーイング」タグの記事一覧｜Rust Tech</title>
	<atom:link href="https://rust-tech.nkhn37.net/tag/shadowing/feed/" rel="self" type="application/rss+xml" />
	<link>https://rust-tech.nkhn37.net</link>
	<description>Rustプログラミング学習サイト</description>
	<lastBuildDate>Fri, 20 Mar 2026 22:49:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://rust-tech.nkhn37.net/wp-content/uploads/2025/06/cropped-lion-preasure-clear-32x32.png</url>
	<title>「シャドーイング」タグの記事一覧｜Rust Tech</title>
	<link>https://rust-tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Rust入門】関数定義の基本を分かりやすく解説</title>
		<link>https://rust-tech.nkhn37.net/rust-function-basic/</link>
					<comments>https://rust-tech.nkhn37.net/rust-function-basic/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Thu, 17 Jul 2025 20:00:00 +0000</pubDate>
				<category><![CDATA[Rust入門]]></category>
		<category><![CDATA[deref]]></category>
		<category><![CDATA[derefmut]]></category>
		<category><![CDATA[シャドーイング]]></category>
		<category><![CDATA[仮引数]]></category>
		<category><![CDATA[借用]]></category>
		<category><![CDATA[実引数]]></category>
		<category><![CDATA[引数]]></category>
		<category><![CDATA[戻り値]]></category>
		<category><![CDATA[所有権]]></category>
		<category><![CDATA[関数]]></category>
		<guid isPermaLink="false">https://rust-tech.nkhn37.net/?p=389</guid>

					<description><![CDATA[Rust における関数定義の方法について初心者にも分かりやすく解説します。 Rust 関数の基本 プログラミングにおいて関数とは、何度も使用するようなコードを1つのブロックにまとめて関数として名前付けし、何度も使うように [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Rust における<span class="jinr-d--text-color d--marker1 d--bold">関数定義の方法</span>について初心者にも分かりやすく解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">Rust 関数の基本</h2>



<p class="wp-block-paragraph">プログラミングにおいて<span class="jinr-d--text-color d--marker1 d--bold">関数</span>とは、何度も使用するようなコードを1つのブロックにまとめて関数として名前付けし、何度も使うようにできるものです。関数は、プログラミングにおいてどのような言語であっても中核的な役割をします。</p>



<p class="wp-block-paragraph">この記事では、Rust における関数定義や引数などの基本について分かりやすく解説します。</p>



<h3 class="wp-block-heading jinr-heading d--bold">基本的な関数定義と呼び出し</h3>



<p class="wp-block-paragraph">Rust の関数は、<code><span class="jinr-d--text-color d--marker1 d--bold">fn</span></code> を使用して以下のように定義します。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box6  "><div class="a--simple-box-title d--bold">関数の基本構文</div><div class="c--simple-box-inner">
<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn 関数名() {
    // 関数で実行する処理
}</pre>
</div></div></section>



<p class="wp-block-paragraph">以下は、入力された整数の<code>2</code>乗を返す <code>square</code> 関数を定義し、<code>main</code> 関数から呼び出している例です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 2乗を返す関数 square を定義
fn square(x: i32) -> i32 {
    x * x
}

fn main() {
    // square関数を呼び出し
    let result = square(2);
    
    println!("2 の 2乗 は {} です。", result);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
2 の 2乗 は 4 です。</pre>



<p class="wp-block-paragraph">関数 <code>square</code> が受け取っている <code>x</code> を引数と言い、「: i32」の部分は引数の型を示す型注釈と言います。また、「<code>-&gt; i32</code>」の部分は、戻り値の型を示す型注釈です。Rust では関数の最後の式が戻り値となるため、戻り値として値を返す際には「<code>x * x</code>」のようにセミコロン（<code>;</code>）をつけずに記載します。引数や戻り値については以降で詳しく説明します。</p>



<p class="wp-block-paragraph">作成した関数を呼び出すときには、<code>main</code> 関数内で <code>let result = square(2);</code> としているように「<code>関数名();</code>」で何度でも呼び出すことができます。また、戻り値を <code>let</code> を使って変数に束縛することも可能です。</p>



<h3 class="wp-block-heading jinr-heading d--bold">関数定義のルール</h3>



<p class="wp-block-paragraph">関数定義のルールについて、整理しておきましょう。</p>



<h4 class="wp-block-heading jinr-heading d--bold">型注釈は必須</h4>



<p class="wp-block-paragraph">関数では、引数の型注釈（例：<code>x: i32</code>）や戻り値の型注釈（例：<code>-&gt; i32</code>）を明示することが必須です。変数定義の時は、型推論により型が推論されますが、関数の引数の場合は異なるので注意しましょう。ただし、戻り値がないような関数の場合は「<code>-&gt;</code>」の型注釈は省略可能です。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box1  "><div class="a--simple-box-title d--bold">ユニット型 <code>()</code></div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">戻り値がない場合には、実際には「<code>-&gt; ()</code>」という戻り値が設定されています。この <code>()</code> はユニット型と言います。</p>
</div></div></section>



<h4 class="wp-block-heading jinr-heading d--bold">戻り値にはセミコロン「<code>;</code>」を付けない</h4>



<p class="wp-block-paragraph">Rust では、関数の最後の式が戻り値となります。セミコロン「<code>;</code>」を記載すると文となってしまうため、関数内で戻り値を書く場合には「<code>;</code>」を付けないように注意してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn square(x: i32) -> i32 {
    x * x    // セミコロンを付けない
}</pre>



<h4 class="wp-block-heading jinr-heading d--bold">関数名はスネークケース（<code>snake_case</code>）が慣習</h4>



<p class="wp-block-paragraph">関数名は、小文字をアンダースコアでつなげるスネークケース（<code>snake_case</code>）で書くのがRustの慣習となっています。</p>



<h3 class="wp-block-heading jinr-heading d--bold">戻り値と早期終了 (<code>return</code>)</h3>



<p class="wp-block-paragraph">Rust では、関数の最後の式が戻り値になることを見てきましたが、<code><span class="jinr-d--text-color d--marker1 d--bold">return</span></code> キーワードを使って明示的に値を返すことも可能です。</p>



<p class="wp-block-paragraph">以下の例では、絶対値を返却する <code>abs</code> 関数を作成し、<code>x &lt; 0</code> の場合は、その場で <code>-x</code> を <code>return</code> により返して早期終了しています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn abs(x: i32) -> i32 {
    if x &lt; 0 {
        // 早期終了 (return)
        return -x;
    }
    // 通常の戻り値
    x
}

fn main() {
    // abs関数を呼び出し
    let result1 = abs(-5);
    let result2 = abs(10);

    println!("結果 result1: {}, result2: {}", result1, result2);

}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
結果 result1: 5, result2: 10</pre>



<p class="wp-block-paragraph">関数の最後で <code>return</code> を使うのは、非常に多くの言語で見られる方法です。もちろん、Rust でも最後の戻り値で <code>return</code> を使うことができますが、Rust では、最後の戻り値では <code>return</code> を書かないことが一般的です。</p>



<h3 class="wp-block-heading jinr-heading d--bold">関数のシャドーイング（定義の上書き）</h3>



<p class="wp-block-paragraph">Rust では、変数の定義で同じ変数名で <code>let</code> における再定義をすることができました。関数でも同じようにシャドーイングにより定義を上書きすることができます。</p>



<p class="wp-block-paragraph">関数の場合には、外側のスコープで定義した関数を、内側のスコープでシャドーイングすることで定義を上書きすることができます。<code>let</code> の時には同一スコープで再定義ができましたが、<span class="jinr-d--text-color d--marker1 d--bold">関数は同一スコープでは複数回の定義はできない</span>ので注意してください。</p>



<p class="wp-block-paragraph">以下の例で見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn message() {
    println!("メッセージ 1");
}

fn show_message() {
    message();  // 「メッセージ 1」を表示
}

fn main() {
    message();  // 「メッセージ 2」を表示
    {
        message();  // 「メッセージ 3」を表示

        fn message() {
            println!("メッセージ 3");
        }
    }
    message();  // 「メッセージ 2」を表示
    show_message(); // show_message関数経由で「メッセージ 1」を表示

    fn message() {
        println!("メッセージ 2");
    }
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
メッセージ 2
メッセージ 3
メッセージ 2
メッセージ 1</pre>



<p class="wp-block-paragraph">上記の例だと、<code>message</code> という名前の関数を3回定義しています。<code>show_message</code> 関数が使用するのは「<code>メッセージ 1</code>」と表示する <code>message</code> 関数です。一方で、<code>main</code> 関数の最初のスコープでは「<code>メッセージ 2</code>」と表示する <code>message</code> 関数を、一段階内側の <code>{}</code> ブロック内での呼び出しでは「<code>メッセージ 3</code>」と表示する <code>message</code> 関数を呼び出します。</p>



<p class="wp-block-paragraph">このように、関数もスコープによってシャドーイングされる対象となります。ただし、このようにスコープ内で入れ子に関数を定義していくようなスタイルは可読性がよくありません。上記の例は、関数もシャドーイングされるという Rust の言語仕様を説明するものだと理解してください。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">変数や定数については以下の記事も参考にしてください。</p>



<p class="wp-block-paragraph"><a href="https://rust-tech.nkhn37.net/rust-variables-constants/" target="_blank" rel="noreferrer noopener">【Rust入門】変数と定数を分かりやすく解説</a></p>
</div>
		</div></section>



<div id="nkhn3-3444508991" class="nkhn3- nkhn3-entity-placement" style="margin-left: auto;margin-right: auto;text-align: center;"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9478001176347002"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-9478001176347002"
     data-ad-slot="4670569211"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></div><h2 class="wp-block-heading jinr-heading d--bold">関数の引数と戻り値の扱い</h2>



<p class="wp-block-paragraph">ここからは、関数の引数と戻り値の扱いについて、もう少し詳しく見ていきましょう。</p>



<h3 class="wp-block-heading jinr-heading d--bold">引数を値で渡す</h3>



<p class="wp-block-paragraph">関数では、引数として値を渡すことができます。引数では、関数定義で使用される引数を「<span class="jinr-d--text-color d--marker1 d--bold">仮引数（parameter）</span>」、呼び出し時に渡される引数を「<span class="jinr-d--text-color d--marker1 d--bold">実引数（argument）</span>」と言います。</p>



<p class="wp-block-paragraph">仮引数は渡された実引数に対する別名ではなく、オブジェクトのコピーとなっています※。つまり、メモリー上では別で格納されているものです。このコピーは、関数を呼び出すときに作られて、関数が終わって制御が呼び出し元に戻るときに破棄されます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox1 ">
			<i class="jif jin-ifont-v2bulb" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">※ 所有権を持つ型の場合は扱いが異なりますが後ほど説明しますので、今の段階ではコピーであると思ってください。</p>
</div>
		</div></section>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// x は仮引数
fn square(x: i32) -> i32 {
    x * x
}

fn main() {
    let x = 2;

    // x は実引数
    let result = square(x);
    
    println!("{} の 2乗 は {} です。", x, result);
}</pre>



<p class="wp-block-paragraph">上記の例では、<code>square</code> 関数の <code>x: i32</code> が仮引数で、main 関数内の <code>x</code> が実引数です。<code>main</code> 関数内で <code>square</code> 関数が呼び出されると <code>square</code> 関数の <code>x</code> としてコピーが作成され、<code>square</code> 関数処理がされて値を返した際に破棄されています。</p>



<p class="wp-block-paragraph">その後の <code>println!</code> で <code>x</code> を使用していますが、この値は <code>main</code> 関数で最初に定義している <code>let x = 2;</code> です。これは、C言語にもある値渡しの仕組みと同じものです。</p>



<h3 class="wp-block-heading jinr-heading d--bold">関数から値を返す</h3>



<p class="wp-block-paragraph">関数では、引数を受け取るだけではなく、処理結果を呼び出し元に返すことができます。上記の例でも見てきたように関数の戻り値は、最後の式の値になります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn square(x: i32) -> i32 {
    x * x  // 戻り値となる式
}</pre>



<p class="wp-block-paragraph">関数の戻り値を表す型注釈は、関数名の後の「<code>-&gt;</code>」に続けて記載をします。例えば、戻り値がないような関数の場合は、空のタプル <code>()</code> が戻されているとみなされます。戻り値がない場合には「<code>-&gt; ()</code>」は省略可能です。</p>



<h3 class="wp-block-heading jinr-heading d--bold">複数の値を返す</h3>



<p class="wp-block-paragraph">関数から複数の値を返却したい場合には、タプルを使用することで値を返すことができます。以下は、入力された2つの引数で <code>min</code> と <code>max</code> を計算し、<code>(min, max)</code> のタプルとして返却している例です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 最小(min), 最大(max) を確認し、(min, max) のタプルで返却する
fn min_max(a: i32, b: i32) -> (i32, i32) {
    if a &lt; b {
        (a, b)
    } else {
        (b, a)
    }
}

fn main() {
    let a = 10;
    let b = 5;

    let (min, max) = min_max(a, b);
    println!("min: {}, max: {}", min, max);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
min: 5, max: 10</pre>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">タプルについては、以下の記事も参考にしてください。</p>



<p class="wp-block-paragraph"><a href="https://rust-tech.nkhn37.net/rust-basic-types/" target="_blank" rel="noreferrer noopener">基本型を分かりやすく解説（スカラー型と複合型）</a></p>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">呼び出し側の変数の扱い（不変参照と可変参照）</h3>



<p class="wp-block-paragraph">これまでの例では、実引数を関数の仮引数にコピーして処理を返して値を返すというような例を見てきました。実際には、呼び出し元の変数を直接変更したい場合も出てきます。このような場合について、Rustでは所有権という考え方を意識しないといけません。ここでは、基本型と所有権を持つ型（<code>String</code> や <code>Vec</code>）に分けて説明をします。</p>



<h4 class="wp-block-heading jinr-heading d--bold">基本型の場合</h4>



<p class="wp-block-paragraph">基本型はメモリのスタック領域に置かれる型で通常や仮引数へ渡す際にはコピーされます。呼び出し元の基本型の値を変更したい場合には、以下のように <code>&amp;mut</code> として値を変更できる可変参照を渡して使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 呼び出し元の変数を変更する
fn increment(n: &amp;mut i32) {
    *n += 1;
}

fn main() {
    let mut num = 0;

    // 1回目の呼び出し (可変参照)
    increment(&amp;mut num);
    println!("num: {}", num);
    // 2回目の呼び出し (可変参照)
    increment(&amp;mut num);
    println!("num: {}", num);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
num: 1
num: 2</pre>



<p class="wp-block-paragraph">変更が可能な参照を指定する場合には、呼び出し時に実引数には「<code>&amp;mut 変数</code>」のように渡します。一方で、受け取る関数の型注釈は「<code>: &amp;mut 型名</code>」を付けます。Rust において <code>&amp;</code> は参照を表します。そして、<code>*</code> は参照から値を取り出すための演算子です。今回は可変参照を使用しているので、値を書き換えることができます。</p>



<p class="wp-block-paragraph"><code>&amp;mut num</code> は、変数 <code>num</code> の可変な参照を渡しているので、関数 <code>increment</code> で <code>*n</code> により値を変更しています。<code>main</code> 関数で呼び出しから戻ってきた際に <code>num</code> の値が変更されていることからも分かると思います。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box1  "><div class="a--simple-box-title d--bold">基本型がコピーされる理由</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">基本型を関数に渡す際にコピーされるのは、基本型が <code>Copy</code> トレイトを実装しているためです。一方で後述する所有権を持つ型は <code>Copy</code> トレイトが実装されていないため基本は所有権が移動（move）します。</p>
</div></div></section>



<h4 class="wp-block-heading jinr-heading d--bold">所有権を持つ型の場合</h4>



<p class="wp-block-paragraph">基本型について見ましたが、所有権を持つ型（<code>String</code> や <code>Vec</code>）といった型では基本型と少し挙動が異なり、所有権の移動や借用（不変参照、可変参照）について意識する必要があります。</p>



<h5 class="wp-block-heading jinr-heading d--bold">所有権が移動する場合</h5>



<p class="wp-block-paragraph"><code>String</code> 型の例で説明をしていきます。まずは、所有権が移動してしまう例を見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 所有権が移動 (move) する場合
fn print_str_move(s: String) {
    println!("print_str_move: {}", s);
}

fn main() {
    // 所有権の移動の確認
    let s1 = String::from("Hello World");
    print_str_move(s1);
    println!("呼び出し元のs1: {}", s1);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
error[E0382]: borrow of moved value: `s1`
  --> examples\arg_param_string_move.rs:10:30
   |
8  |     let s1 = String::from("Hello World");
   |         -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
9  |     print_str_move(s1);
   |                    -- value moved here
10 |     println!("呼び出し元のs1: {}", s1);
   |                                    ^^ value borrowed here after move
   |
note: consider changing this parameter type in function `print_str_move` to borrow instead if owning the value isn't necessary
  --> examples\arg_param_string_move.rs:2:22
   |
2  | fn print_str_move(s: String) {
   |    --------------    ^^^^^^ this parameter takes ownership of the value
   |    |
   |    in this function
   = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider cloning the value if the performance cost is acceptable
   |
9  |     print_str_move(s1.clone());
   |                      ++++++++

For more information about this error, try `rustc --explain E0382`.
error: could not compile `function_basic` (example "arg_param_string_move") due to 1 previous error</pre>



<p class="wp-block-paragraph">この例では、コンパイル時にエラーとなります。これは、関数に <code>s1</code> を渡す際に所有権を関数側へ移動（<code>move</code>）しているためです。この時に、<code>"Hello World"</code> が格納されるオブジェクトは関数へ所有権が移り、関数呼び出し後に解放されてしまいます。そのため、呼び出し元で再度呼び出そうとするとエラーとなってしまいます。</p>



<p class="wp-block-paragraph">これを回避する1つの方法は、<code>help</code> に記載のように <code>clone()</code> を使用してコピーを渡すことです。以下のようにするとエラーは起こりません。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// コピーを受け取っている
fn print_str_move(s: String) {
    println!("print_str_move: {}", s);
}

fn main() {
    // 所有権の移動の確認
    let s1 = String::from("Hello World");
    
    // 所有権が移動しないようにコピーを渡す
    print_str_move(s1.clone());
    println!("呼び出し元のs1: {}", s1);
}</pre>



<p class="wp-block-paragraph">ただし、<code>String</code> や <code>Vec</code> のようにヒープ領域を使用する型はサイズが可変であることから、使用している領域が大きい可能性があり、コピーをすることは不必要なメモリ利用や応答性の低下につながる可能性があります。そのため、以降で紹介する借用（不変参照や可変参照）をうまく使用します。</p>



<h5 class="wp-block-heading jinr-heading d--bold">借用（不変参照と可変参照）</h5>



<p class="wp-block-paragraph">所有権を借用するケースについて見ていきましょう。Rust において借用には、読み取り専用の「不変参照」と変更も可能な「可変参照」があります。これらは呼び出し元で定義している変数が指すオブジェクトへの参照です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 不変参照 (読み取り専用) の場合
fn print_str_ref(s: &amp;String) {
    println!("print_str_ref: {}", s);
}

// 可変参照 (変更可) の場合
fn print_str_change(s: &amp;mut String) {
    s.push_str("!!!");
    println!("print_str_change: {}", s);
}

fn main() {
    // 不変参照の場合
    let mut s1 = String::from("World World");
    print_str_ref(&amp;s1);

    // 可変参照の場合
    print_str_change(&amp;mut s1);
    println!("呼び出し元のs1: {}", s1);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
print_str_ref: World World
print_str_change: World World!!!
呼び出し元のs1: World World!!!</pre>



<p class="wp-block-paragraph">読み取り専用の不変参照で関数を定義する場合には、型注釈として「<code>: &amp;型名</code>」として定義します。関数呼び出しの際には「<code>&amp;変数名</code>」で渡します。これは、呼び出し元のオブジェクトを指していますが、読み取り専用の参照のため誤った値の変更を避けることができます。</p>



<p class="wp-block-paragraph">次に変更可の可変参照で関数を定義する場合には、型注釈として「<code>: &amp;mut 型名</code>」として定義します。関数呼び出しの際には「<code>&amp;mut 変数名</code>」で渡します。これは変更可であるため呼び出し元の変数の値を変更します。そのため、上記例で <code>main</code> 関数に戻ってきた際に <code>s1</code> の値が変わっていることが分かります。</p>



<p class="wp-block-paragraph">上記の内容は所有権の考え方をまだ学んでいない方には少し難しいかもしれません。所有権や借用については、別途詳しく説明しようと思います。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box1  "><div class="a--simple-box-title d--bold">String で <code>*</code> がいらない理由</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記の例で <code>String</code> の参照から値にアクセスする際に <code>*</code> を使っていませんでした。これは、<code>String</code> 型が <code>Deref</code> や <code>DerefMut</code> トレイトを実装しているためです。</p>



<p class="wp-block-paragraph"><code>*</code> により参照から値を取り出すことをデリファレンスと呼びます。Rust では、<code>Deref</code> や <code>DerefMut</code> によりデリファレンスの振る舞いが定義されており、<code>String</code> 型や <code>Vec</code> 型のような型では <code>*</code> を使わなくてもいいように Rust の型システムが自動で変換してくれます。</p>
</div></div></section>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Rust の関数は、明確な型注釈や所有権のルールにも従って、安全で予測可能なコードを書くために必要なものです。この記事では、関数の基本的な定義方法から、引数と戻り値の扱い、所有権と参照の使い分けまでを学びました。</p>



<p class="wp-block-paragraph">特に、以下のポイントを押さえておきましょう。</p>



<ul class="wp-block-list jinr-list">
<li>関数の引数と戻り値には型注釈が必須（ただし、戻り値がない場合は省略可能）</li>



<li>関数の最後の式が戻り値（セミコロンをつけない）</li>



<li>所有権の移動と参照（不変・可変）の違いを理解する</li>



<li>基本型と所有権を持つ型（Stringなど）で挙動が異なる</li>
</ul>



<p class="wp-block-paragraph">Rustの関数をしっかりと理解することは、より発展的なジェネリクスやクロージャなどの理解のために必要です。ぜひこの記事を参考に、関数の書き方に慣れていきましょう。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/rust-tech-sample-source/tree/main/rust-basic/function-basic" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://rust-tech.nkhn37.net/rust-programming-basics/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://rust-tech.nkhn37.net/wp-content/uploads/2025/08/77e7c51961993fb9cb96c02a2311436d-320x180.jpg" alt="Rust プログラミング入門" /></div><div class="a--blogcard-title d--bold">Rust プログラミング入門</div></a></section><div id="nkhn3-1511202132" class="nkhn3-multiplex nkhn3-entity-placement" style="margin-left: auto;margin-right: auto;text-align: center;"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9478001176347002"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9478001176347002"
     data-ad-slot="8958649655"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></div>]]></content:encoded>
					
					<wfw:commentRss>https://rust-tech.nkhn37.net/rust-function-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Rust入門】変数と定数を分かりやすく解説</title>
		<link>https://rust-tech.nkhn37.net/rust-variables-constants/</link>
					<comments>https://rust-tech.nkhn37.net/rust-variables-constants/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Wed, 09 Jul 2025 20:00:00 +0000</pubDate>
				<category><![CDATA[Rust入門]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[let]]></category>
		<category><![CDATA[mut]]></category>
		<category><![CDATA[イミュータブル]]></category>
		<category><![CDATA[シャドーイング]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[所有権]]></category>
		<guid isPermaLink="false">https://rust-tech.nkhn37.net/?p=282</guid>

					<description><![CDATA[Rustの変数と定数 プログラムを実行していく際には、ある値をコンピューターのメモリ上に格納し、取り出しながら様々な処理を実行していきます。ある値を含む場所のメモリをオブジェクトと呼びます。そして、そのオブジェクトを識別 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading jinr-heading d--bold">Rustの変数と定数</h2>



<p class="wp-block-paragraph">プログラムを実行していく際には、ある値をコンピューターのメモリ上に格納し、取り出しながら様々な処理を実行していきます。ある値を含む場所のメモリをオブジェクトと呼びます。そして、そのオブジェクトを識別するための識別子が必要です。</p>



<p class="wp-block-paragraph">ある値（オブジェクト）を識別子（名前）に束縛することで、<strong><span class="jinr-d--text-color d--marker1 d--bold">変数（variable）</span></strong>を定義します。また、プログラムを実行している最中に値が変更されることのない、あらかじめ決められた値は<strong><span class="jinr-d--text-color d--marker1 d--bold">定数（constant）</span></strong>と呼ばれます。</p>



<p class="wp-block-paragraph">この記事では、Rustにおける変数と定数の扱いや使い方について解説します。</p>



<h3 class="wp-block-heading jinr-heading d--bold">Rustの変数は基本イミュータブルで変更不可</h3>



<p class="wp-block-paragraph">Rustで最初に覚えておいてほしいことは「<strong><span class="jinr-d--text-color d--marker1 d--bold">変数は基本イミュータブルで変更ができない</span></strong>」ということです。他のプログラミング言語を学んできた人は変数の値を変えられることが普通であることが多かったと思いますし、変数という名前から考えると違和感を覚えるかもしれません。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box1  "><div class="a--simple-box-title d--bold">ミュータブルとイミュータブルとは？</div><div class="c--simple-box-inner">
<ul class="wp-block-list jinr-list">
<li>ミュータブル：変更可能で、作成後も内容を変更することができます。</li>



<li>イミュータブル：変更不可能で、一度作られたらその内容を変更することはできません。</li>
</ul>
</div></div></section>



<p class="wp-block-paragraph">例えば、Haskellなどの関数型プログラミング言語は、変数がイミュータブルで、関数も副作用を持たないように設計されているため、参照透過性が高く、同じ入力には常に同じ出力が保証されます。変数の値が変更できないことは、不便に思うかもしれないですが、一方で値が変わらないことが保証されるため、バグがないプログラムを書くことが可能になります。</p>



<p class="wp-block-paragraph">Rustでの変数定義と利用の例を見てみましょう。</p>



<p class="wp-block-paragraph">[<code><a href="https://github.com/nkhn37/rust-tech-sample-source/blob/main/rust-basic/variables_and_constants/examples/immutable.rs" target="_blank" rel="noreferrer noopener">immutable.rs</a></code>]</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn main() {
    let x = 5;
    println!("xの値: {}", x);

    // 以下はエラーとなる
    // x = 6;
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【コンパイル結果】
error[E0384]: cannot assign twice to immutable variable `x`
 --> examples\immutable.rs:7:5
  |
2 |     let x = 5;
  |         - first assignment to `x`
...
7 |     x = 6;
  |     ^^^^^ cannot assign twice to immutable variable
  |
help: consider making this binding mutable
  |
2 |     let mut x = 5;
  |         +++</pre>



<p class="wp-block-paragraph">Rustでは、変数の定義に <code><strong><span class="jinr-d--text-color d--marker1 d--bold">let</span></strong></code> キーワードを使い、変数 <code>x</code> に <code>=</code> で値を設定します。「<code>let x = 5;</code>」のような記載を「文」といい、Rustでは、<strong><span class="jinr-d--text-color d--marker1 d--bold">値を束縛する</span></strong>という表現をします。また、変数はスネークケース（<code>snake_case</code>）という小文字単語をアンダースコアでつなぐ形式にするのが通例です。</p>



<p class="wp-block-paragraph">上記例で一度定義した x に対して、<code>x = 6;</code> という形で値を変更した場合には、コンパイルの際に「<code>cannot assign twice to immutable variable</code>」というようなエラーが発生します(コメントアウトしているため外して実行してみてください)。これは、イミュータブルな変数に2度、値を設定しようとしているというエラーです。</p>



<p class="wp-block-paragraph">ただし、コンパイル結果の <code>help:</code> の記載を見てみると分かりますが、Rustでは値を変更するための方法があります。以降ではその方法を見てみましょう。</p>



<h3 class="wp-block-heading jinr-heading d--bold">変更するにはミュータブル <code>mut</code> の指定が必要</h3>



<p class="wp-block-paragraph">Rustで値を変更する変数の場合には、<code>let mut</code> という形で <code><strong><span class="jinr-d--text-color d--marker1 d--bold">mut</span></strong></code> キーワードを指定します。</p>



<p class="wp-block-paragraph">[<code><a href="https://github.com/nkhn37/rust-tech-sample-source/blob/main/rust-basic/variables_and_constants/examples/mutable.rs" target="_blank" rel="noreferrer noopener">mutable.rs</a></code>]</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn main() {
    // ミュータブルな変数として定義する
    let mut x = 5;
    println!("xの値: {}", x);

    // ミュータブルな変数に値を再度設定する
    x = 6;
    println!("xの値: {}", x);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
xの値: 5
xの値: 6</pre>



<p class="wp-block-paragraph">上記の結果を見てみると分かるように、今度は <code>x</code> の値を変更してもエラーは発生せずに実行を完了することができます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox1 ">
			<i class="jif jin-ifont-v2bulb" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><strong>【ポイント】</strong></p>



<p class="wp-block-paragraph">Rust の変数が基本的にイミュータブルであるのはメモリ安全性（データ競合の防止）のためです。一方で、厳格すぎると開発効率の低下につながってしてしまうため、<code>mut</code> を使うことで明示的に「この変数は変更可能です」と定義して使えるようにすることで、安全性と開発効率のバランスをとっています。</p>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">シャドーイング</h3>



<p class="wp-block-paragraph">Rustでは、一度定義した変数を再度 <code>let</code> を用いて再定義することができます。このことを「<strong><span class="jinr-d--text-color d--marker1 d--bold">シャドーイング（shadowing）</span></strong>」と言います。</p>



<h4 class="wp-block-heading jinr-heading d--bold">シャドーイングの基本</h4>



<p class="wp-block-paragraph">以下の例では、一度 <code>let x = 5;</code> で定義した変数 x について、再度 <code>let x = 10;</code> で再定義しています。</p>



<p class="wp-block-paragraph">[<code><a href="https://github.com/nkhn37/rust-tech-sample-source/blob/main/rust-basic/variables_and_constants/examples/shadowing.rs" target="_blank" rel="noreferrer noopener">shadowing.rs</a></code>]</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn main () {
    let x = 5;
    println!("xの値: {}", x);

    // xをシャドーイングする
    let x = 10;
    println!("xの値: {}", x);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
xの値: 5
xの値: 10</pre>



<p class="wp-block-paragraph">上記で見たように一度定義した <code>x</code> の値を変更することは、イミュータブルな性質から不可能でした。しかし、今回の例での <code>let</code> を使った再定義は問題なくできます。この時に、もともと定義していた <code>x = 5;</code> を後の定義が覆い隠してしまうことから、シャドーイング（shadowing）と呼ばれるわけです。</p>



<p class="wp-block-paragraph">同じスコープ内では、前に定義した <code>x = 5;</code> の値は二度と使えなくなるため、スコープを抜けたタイミングで <code>5</code> が格納されているメモリ領域は自動で解放されます。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box1  "><div class="a--simple-box-title d--bold">スコープとは？</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">スコープとは、変数の有効範囲を定めるコードブロック（<code>{}</code>）の範囲のことを言います。Rustでは、変数はスコープ内で有効であり、スコープを抜けると所有権が失われ、自動的にリソース（メモリ）が解放されます。C/C++のように <code>free</code> などで手動でメモリを開放する必要がなく、Rustではこの処理がコンパイラと言語仕様で保証されているため、メモリ解放忘れのバグを防止できます。所有権については、少し難しいのでまた別途取り上げます。</p>
</div></div></section>



<h4 class="wp-block-heading jinr-heading d--bold">異なるスコープでのシャドーイング</h4>



<p class="wp-block-paragraph">異なるスコープでシャドーイングによる変数の再定義をした場合に、どのような挙動になるのかを以下の例で確認してみましょう。</p>



<p class="wp-block-paragraph">[<code><a href="https://github.com/nkhn37/rust-tech-sample-source/blob/main/rust-basic/variables_and_constants/examples/shadowing_other_scope.rs" target="_blank" rel="noreferrer noopener">shadowing_other_scope.rs</a></code>]</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fn main () {
    let x = 5;
    println!("xの値: {}", x);
    {
        // 異なるスコープでシャドーイングする
        let x = 10;
        println!("xの値: {}", x);
    }
    println!("xの値: {}", x);
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
xの値: 5
xの値: 10
xの値: 5</pre>



<p class="wp-block-paragraph">上記例では、<code>let x = 5;</code> で一度定義した変数を一段深いスコープで <code>let x = 10;</code> で再定義しています。このとき、このスコープ内で <code>x</code> の値は <code>10</code> ですが、スコープを抜けると外側の <code>x = 5;</code> に戻ります。そのため、<code>println!</code> で <code>5</code> が表示されていることが分かります。なお、<code>10</code> が格納されているメモリは、スコープを抜けた際に解放されます。このように異なるスコープ間でのシャドーイングの挙動はよく理解しておきましょう。</p>



<h3 class="wp-block-heading jinr-heading d--bold"><code>const</code> 定数</h3>



<p class="wp-block-paragraph">Rustで定数を定義するためには、<strong><span class="jinr-d--text-color d--marker1 d--bold"><code>const</code></span></strong> キーワードを使用して定義します。</p>



<p class="wp-block-paragraph">定数とはコンパイル時に値が確定しているもので、一度決めたら絶対に変わらない値を定義する際に使用します。例えば、システムで共通に使用するパラメータを定義するような場合です。</p>



<p class="wp-block-paragraph">定数は、大文字のスネークケース（<code>SNAKE_CASE</code>）で定義するのが通例です。定数は関数内でも定義できますが、実際にはプログラム全体で使う値を定義するために、グローバルに定義されることが多いです。</p>



<p class="wp-block-paragraph">定数は以下のように定義して使用します。</p>



<p class="wp-block-paragraph">[<code><a href="https://github.com/nkhn37/rust-tech-sample-source/blob/main/rust-basic/variables_and_constants/examples/constant.rs" target="_blank" rel="noreferrer noopener">constant.rs</a></code>]</p>



<pre class="EnlighterJSRAW" data-enlighter-language="rust" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 定数を定義 (型注釈は必須)
const MAX_USERS: u32 = 100;

fn main () {
    // 定数を利用
    println!("MAX_USERS: {}", MAX_USERS)
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
MAX_USERS: 100</pre>



<p class="wp-block-paragraph">変数と定数の違いの一つとして、<strong><span class="jinr-d--text-color d--marker1 d--bold">型定義が必須である</span></strong>ことがあげられます。変数は型推論がされるため、指定は必須ではありません。上記例では、<code>MAX_USERS: u32 = 100;</code> の <code>: u32</code> という部分が 32ビットの符号なし整数であることを示しています。Rustの標準的な型については、別途取り上げて説明しようと思います。</p>



<p class="wp-block-paragraph">また、コンパイル時に決定する性質であることから、動的に確保されるヒープ領域に格納される型（<code>Vec&lt;T&gt;</code>など）での定義もできません。</p>



<div id="nkhn3-555745100" class="nkhn3- nkhn3-entity-placement" style="margin-left: auto;margin-right: auto;text-align: center;"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9478001176347002"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-9478001176347002"
     data-ad-slot="4670569211"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></div><h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">この記事では、Rustにおける変数と定数の基本的な使い方について解説しました。</p>



<p class="wp-block-paragraph">Rustの変数はデフォルトでイミュータブル（変更不可）であり、安全性を高めるための設計となっています。一方で、<code>mut</code> キーワードを使うことで明示的に可変な変数も定義できるため、安全性と柔軟性のバランスがとられています。</p>



<p class="wp-block-paragraph">同じ名前の変数を再定義する「シャドーイング」やスコープにより変数の有効範囲が制限される仕組みもRustの所有権やメモリ管理の考え方と密接に関係しています。また、<code>const</code> によってコンパイル時に固定される定数を定義することで、値の意味付けや再利用性を高めることができます。</p>



<p class="wp-block-paragraph">Rustを学び始めたばかりの段階では、このような「変数と定数の基本的なルール」をしっかり理解しておくと、Rustの中心的な概念である所有権やライフタイムなどについても理解しやすくなります。ぜひ基本をしっかりと押さえておいてください。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/rust-tech-sample-source/tree/main/rust-basic/variables-and-constants" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://rust-tech.nkhn37.net/rust-programming-basics/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://rust-tech.nkhn37.net/wp-content/uploads/2025/08/77e7c51961993fb9cb96c02a2311436d-320x180.jpg" alt="Rust プログラミング入門" /></div><div class="a--blogcard-title d--bold">Rust プログラミング入門</div></a></section><div id="nkhn3-3310516589" class="nkhn3-multiplex nkhn3-entity-placement" style="margin-left: auto;margin-right: auto;text-align: center;"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9478001176347002"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9478001176347002"
     data-ad-slot="8958649655"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></div>]]></content:encoded>
					
					<wfw:commentRss>https://rust-tech.nkhn37.net/rust-variables-constants/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: rust-tech.nkhn37.net @ 2026-06-05 04:57:10 by W3 Total Cache
-->