Menu
Coddy logo textTech

プログラミングの変数とは?

プログラミングにおける変数とは、プログラムの実行中に読み書きできる値を保存する、名前の付いたメモリ上の場所です。score や user_name のような名前があるので、コードは値がどこに保存されているかを知らなくても、その値を参照できます。

執筆: Kevin Spektor, 共同創業者、CTO

更新日: 2026年9月24日

スコアを記録するゲームは、数値を覚えておき、それに足し、最後に表示する必要があります。その数値はコードに書き込めません。遊ぶたびに違うからです。そこでプログラムはメモリに場所を確保し、score のような名前を付け、今の値が必要になるたびにその名前を使います。

変数のしくみ

プログラムの中で、変数には3つのことが起こります。

  1. 作成。 プログラムは値のためにメモリを確保し、そこに名前を付けます。Pythonでは、名前に初めて代入したときにこれが起こります。JavaやCでは、int score; のように、まず型を付けて変数を宣言します。
  2. 代入。 = で名前の下に値を保存します。もう一度代入すると、古い値は置き換えられます。
  3. 使用。 式の中に名前が出てくると、プログラムはその時点で変数が持っている値を読み取ります。
Start: 0
After one point: 10
Doubled: 20

代入の各行では、まずその時点の score の値を使って右辺が計算されます。そして結果が同じ名前の下に保存し直されます。名前は変わらず、中の値が変わっていきます。

イコール記号は「保存する」という意味

数学では x = x + 1 に解はありません。プログラムでは普通の命令です。x の今の値を取り出し、1を足し、結果を x に保存します。= は代入演算子で、常に右辺の値を左辺の名前に移します。

2つの値が等しいかどうかを調べるには、プログラミング言語は別の演算子 == を使います。式 x == 5 は何も変えず、True か False、つまりブール値を返します。

数学での意味とは関係がありますが、同じではありません。代数の 2x + 3 = 7 のxは、解いて求める1つの未知数を表します。プログラムの変数は、プログラムの実行に合わせて変わりうる既知の値を持っています。

変数とデータ型

どの値にも型があります。整数、小数、テキスト、ブール値、リストなどです。言語によって、変数そのものが型を持つかどうかが違います。

PythonやJavaScriptでは値が型を持ち、1つの変数が時間とともに別の型の値を持つことができます。これを動的型付けと呼びます。

42 <class 'int'>
forty-two <class 'str'>

Java、C、C++では、変数は宣言したときに選んだ型に固定されます。これが静的型付けです。int の変数にテキストを入れようとするコードは、プログラムを実行する前にコンパイラが拒否します。

int age = 30;          // Java: type, name, value
String name = "Rosa";
let age = 30;          // JavaScript: can be reassigned
const PI = 3.14159;    // cannot be reassigned

Cでは、型によって変数が使うメモリの量も決まります。int は現在のほぼすべてのシステムで4バイト、double は8バイト、char はちょうど1バイトです。ゲームのすべてのスコアのように、多くの値を1つの名前でまとめて持つには、配列やリストを使い、scores[0] のように位置で各値にアクセスします。

箱とラベル

変数は、よく値を入れる箱として描かれます。このイメージはCにはよく当てはまります。int x; は実際に決まった大きさのメモリ領域で、y = x; はその値を2つ目の領域にコピーします。

Pythonはむしろラベルに近い動きをします。すべての値はオブジェクトで、変数はそこに貼られた名前です。2つの名前が同じリストを指すと、その違いが表に出ます。

5 6
[1, 2, 3, 4]

数値の場合、y = y + 1 は新しい数値を作ってラベル y をそちらに貼り替えるので、x は5を指したままです。リストの場合、b = a は何もコピーしません。2つの名前が1つのリストを指しているので、b を通した変更が a からも見えます。別のリストが欲しいときは b = a.copy() と書きます。JavaやJavaScriptのオブジェクトや配列も同じように振る舞います。

スコープ: 変数が存在する範囲

変数はプログラムの一部でしか見えません。その範囲をスコープと呼びます。関数の中で作った変数はローカル変数で、関数の実行中だけ存在し、関数が戻ると消えます。ファイルのトップレベルで作った変数はグローバル変数で、そのファイルのどこからでも読めます。

ローカル変数のほうが扱いやすいのは、それを変更しうる行がすべて1つの関数の中にあるからです。グローバル変数に多く頼るプログラムは、逆の理由でデバッグが難しくなります。

変数名の付け方

よい名前は、値が何を意味するかを伝えます。total_price、is_logged_in、retries_left などです。ほとんどの言語に共通するルールは次のとおりです。

  • 名前は英字、数字、アンダースコアでできていて、数字から始めることはできない
  • if、for、class のような言語のキーワードは名前にできない
  • 大文字と小文字は区別されるので、total と Total は別の変数になる

書き方のスタイルは言語によって違います。Pythonは snake_case(user_name)を使い、JavaとJavaScriptは camelCase(userName)を使います。決して変わるべきでない値は、MAX_SIZE のように大文字で名前を付けることがよくあります。

よくある間違い

値を持つ前に変数を使う。 Pythonは NameError で止まります。

NameError: name 'total' is not defined

名前のつづりを間違えたときも同じエラーになります。コンピュータにとって、totla と total は別の名前だからです。

== のつもりで = と書く。 Pythonでは if x = 5: は構文エラーなので、すぐに気づけます。CやJavaScriptでは if (x = 5) は有効なコードです。x に5を保存し、条件は常に真になります。プログラムは動いて間違った結果を出します。見つけるのに長い時間がかかることもある論理エラーです。

1つの変数に2つの役目を持たせる。 関数の最初では価格を、最後では個数を持つ変数でも動きはしますが、読む人は誰でも、今どちらの意味なのかを追いかけなければなりません。意味ごとに別の名前を付けましょう。

次に読むもの

変数は値を持ちます。次のステップは、どんな種類の値があるかを知ることです。真と偽についてはブール値とは何かを、1つの名前で多くの値を扱うには配列とは何かを読んでください。Pythonの変数ガイドでは代入、命名規則、複数代入をさらに詳しく説明しています。Pythonコースでは、最初のレッスンから変数を書いて変更していきます。

よくある質問

Pythonの変数とは何ですか?
Pythonの変数は、値を指す名前です。age = 30 のように代入するだけで作れて、型を宣言する必要はありません。同じ名前が、あとで別の型の値を指すこともできます。Pythonの変数名は、慣習として snake_case で書きます。
変数を一言で定義すると?
変数とは、プログラムが保存し、書き換えられる値に付けた名前です。名前はそのままで、その下の値は入れ替えられます。スコアボードの「ホーム」というラベルはそのままで、下の数字だけが増えていくのと同じです。
子どもに変数を説明するにはどうすればいいですか?
ラベルを貼った箱にたとえてみてください。ラベルが score のような名前で、箱には一度に1つのものが入ります。中をのぞいて何が入っているか見ることも、取り出して新しいものを入れることもでき、ラベルは変わりません。
変数と定数の違いは何ですか?
変数の値は設定したあとでも変えられますが、定数の値は一度代入したら固定されます。Javaでは final、JavaScriptとCでは const で定数を表します。Pythonには強制される定数がないので、MAX_USERS のように名前を大文字で書いて、変えるべきではないことを示します。
プログラミングの変数にはどんな種類がありますか?
変数は、どこから見えるかで分けるのが一般的です。ローカル変数は1つの関数の中だけに存在し、グローバル変数はファイル全体やプログラム全体から見え、インスタンス変数はクラスの1つのオブジェクトに属します。整数、浮動小数点数、文字列、ブール値など、保持する値の型で分けることもあります。
Coddy programming languages illustration

Coddyでコードを学ぼう

始める