プログラミングの変数とは?
プログラミングにおける変数とは、プログラムの実行中に読み書きできる値を保存する、名前の付いたメモリ上の場所です。score や user_name のような名前があるので、コードは値がどこに保存されているかを知らなくても、その値を参照できます。
更新日: 2026年9月24日
スコアを記録するゲームは、数値を覚えておき、それに足し、最後に表示する必要があります。その数値はコードに書き込めません。遊ぶたびに違うからです。そこでプログラムはメモリに場所を確保し、score のような名前を付け、今の値が必要になるたびにその名前を使います。
変数のしくみ
プログラムの中で、変数には3つのことが起こります。
- 作成。 プログラムは値のためにメモリを確保し、そこに名前を付けます。Pythonでは、名前に初めて代入したときにこれが起こります。JavaやCでは、
int score;のように、まず型を付けて変数を宣言します。 - 代入。
=で名前の下に値を保存します。もう一度代入すると、古い値は置き換えられます。 - 使用。 式の中に名前が出てくると、プログラムはその時点で変数が持っている値を読み取ります。
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の変数とは何ですか?
age = 30 のように代入するだけで作れて、型を宣言する必要はありません。同じ名前が、あとで別の型の値を指すこともできます。Pythonの変数名は、慣習として snake_case で書きます。変数を一言で定義すると?
子どもに変数を説明するにはどうすればいいですか?
score のような名前で、箱には一度に1つのものが入ります。中をのぞいて何が入っているか見ることも、取り出して新しいものを入れることもでき、ラベルは変わりません。変数と定数の違いは何ですか?
final、JavaScriptとCでは const で定数を表します。Pythonには強制される定数がないので、MAX_USERS のように名前を大文字で書いて、変えるべきではないことを示します。