カテゴリ: Python 更新日: 2025/12/06

Pythonのスコープとは?ローカル変数・グローバル変数の違いと使い分け

Pythonのスコープとは?ローカル変数・グローバル変数の違いと使い分け
Pythonのスコープとは?ローカル変数・グローバル変数の違いと使い分け

先生と生徒の会話形式で理解しよう

生徒

「先生、Pythonで変数を使っていたら、急にエラーが出ました!同じ名前の変数を使っただけなのに…」

先生

「それは“スコープ”の問題かもしれませんね。Pythonでは、変数が“どこで使えるか”がとても重要なんですよ。」

生徒

「“どこで使えるか”?…つまり、使っていい場所が決まってるんですか?」

先生

「その通りです!今回はPythonのスコープ、そしてローカル変数とグローバル変数の違いを、初心者にもわかるようにじっくり解説していきますね。」

1. Pythonのスコープとは?

1. Pythonのスコープとは?
1. Pythonのスコープとは?

Pythonのスコープ(scope)とは、変数が有効に使える範囲のことです。簡単に言うと、「この変数はどこで使えるのか?」を決めるルールのことです。

変数はどこで作ったかによって、その使える場所が決まります。これを知っておかないと、「変数が見つからない!」というエラーが出ることがあります。

2. ローカル変数とは?

2. ローカル変数とは?
2. ローカル変数とは?

ローカル変数(local variable)とは、関数の中でだけ使える変数のことです。

例えて言えば、キッチンの中だけで使えるフライパンみたいなものです。キッチン(関数)の外ではそのフライパン(変数)は使えません。


def greet():
    message = "こんにちは"
    print(message)

greet()
print(message)  # ← ここでエラーになります!

こんにちは
NameError: name 'message' is not defined

上の例では、messagegreet関数の中で作られた変数なので、関数の外では使えません。

3. グローバル変数とは?

3. グローバル変数とは?
3. グローバル変数とは?

グローバル変数(global variable)は、関数の外で作った変数で、プログラムのどこからでも使える変数です。

例えるなら、家じゅうどこでも使える冷蔵庫のような存在です。


message = "おはよう"

def greet():
    print(message)

greet()
print(message)

おはよう
おはよう

このように、関数の外で作った変数は、関数の中でも使えます。

4. 関数の中でグローバル変数を変更したいとき

4. 関数の中でグローバル変数を変更したいとき
4. 関数の中でグローバル変数を変更したいとき

関数の中でグローバル変数を変更したい場合は、globalというキーワードを使います。

ただし、これはちょっと注意が必要です。無闇に使うと、プログラムがわかりにくくなる原因になります。


count = 0

def add():
    global count
    count += 1

add()
print(count)

1

このように、globalを使えば、関数の中でもグローバル変数を変更できます。

5. なぜローカル変数とグローバル変数を分けるの?

5. なぜローカル変数とグローバル変数を分けるの?
5. なぜローカル変数とグローバル変数を分けるの?

それはバグ(間違い)を防ぐためです。

もしすべての変数がどこでも使えてしまったら、どこで値が変わったのかが分かりづらくなり、プログラムのミスに気付きにくくなってしまいます。

ローカル変数を使えば、関数の中だけの影響で済むので、安心して書けるんですね。

6. 同じ名前の変数があったらどうなる?

6. 同じ名前の変数があったらどうなる?
6. 同じ名前の変数があったらどうなる?

ローカル変数とグローバル変数に同じ名前の変数があった場合、Pythonはまずローカル変数を優先して使います。


name = "外の名前"

def show_name():
    name = "中の名前"
    print(name)

show_name()
print(name)

中の名前
外の名前

このように、nameという変数が関数の中にも外にもありますが、関数の中では中の値が使われます

7. スコープの基本ルール(LEGB)

7. スコープの基本ルール(LEGB)
7. スコープの基本ルール(LEGB)

Pythonのスコープは、次の順番で探されます。これをLEGBルールといいます。

  • L(Local): 関数の中で定義された変数
  • E(Enclosing): ネストされた関数の外側
  • G(Global): ファイル内で定義されたグローバル変数
  • B(Built-in): Pythonにもともとある関数(例:printlen

初心者のうちは、「ローカルとグローバル」の2つを意識しておけば十分です。

8. 実際にスコープのエラーを防ぐためには?

8. 実際にスコープのエラーを防ぐためには?
8. 実際にスコープのエラーを防ぐためには?

変数をどこで作って、どこで使っているかをしっかり確認することが大切です。

関数の外で使いたい変数なら、外に書く。関数の中だけで使うなら、ローカルにする。このルールを守るだけで、ミスはかなり減ります。

まとめ

まとめ
まとめ

今回はPythonのスコープについて、ローカル変数とグローバル変数の違いを中心に学びました。スコープとは変数が「どこで使えるか」を決める大切な仕組みであり、初心者にとって最初に理解すべき重要なポイントです。ローカル変数は関数の中だけで有効で、外では使えません。一方、グローバル変数はプログラム全体で共有されます。さらに、関数の中でグローバル変数を変更したいときは「global」キーワードを使う必要があることも確認しました。これを誤って使うとプログラムの可読性が下がり、バグの原因にもなるため、注意が必要です。

また、同じ名前の変数がローカルとグローバルに存在すると、関数の中ではローカル変数が優先されることも実際のコードで確認しました。Pythonでは「LEGBルール」という基本的な探索順序があり、ローカル、外側の関数、グローバル、ビルトインの順番で変数が探されるというルールを理解することが大切です。この仕組みをしっかり把握しておくことで、プログラムのエラーを防ぎ、より正確で読みやすいコードを書くことができます。

サンプルプログラムを振り返る

ここでもう一度、スコープを意識したシンプルなプログラムをまとめます。ローカル変数とグローバル変数の挙動を比較することで、スコープの考え方を整理できます。


message = "外のあいさつ"

def greet():
    message = "中のあいさつ"
    print("関数の中では:", message)

greet()
print("関数の外では:", message)

関数の中では: 中のあいさつ
関数の外では: 外のあいさつ

このように、同じ名前の変数を使っていても、スコープによって参照される値が変わります。初心者はまず、関数の中で定義した変数は関数の外では使えない、というシンプルなルールを意識しましょう。

スコープを理解するメリット

スコープを理解することで、次のようなメリットがあります。

  • エラーを防ぎ、プログラムが正しく動くようになる
  • コードを整理して読みやすくできる
  • 関数ごとに役割を明確にでき、プログラムが複雑になっても管理しやすい
  • グローバル変数を無闇に使わず、予期せぬバグを防げる

特にPython初心者は「変数はどこで使えるのか?」という視点を持つことが、プログラミングスキルの成長に直結します。

先生と生徒の振り返り会話

生徒

「先生、最初は同じ変数名を使っても大丈夫だと思っていたけど、スコープの仕組みを知らなかったからエラーが出ていたんですね。」

先生

「そうですね。Pythonではローカル変数とグローバル変数の違いを理解することがとても大切なんです。関数の中でしか使えない変数と、どこでも使える変数をきちんと分けておくと、コードが整理されてエラーも防げます。」

生徒

「LEGBルールも覚えました!ローカル、外側の関数、グローバル、ビルトインの順番で探すんですよね。」

先生

「その通り!その仕組みを知っているだけで、どの変数が参照されるのかを予測できるようになります。これからプログラムを書くときは、スコープを意識して書いてみましょう。」

生徒

「はい!ローカル変数を積極的に使って、必要なときだけグローバル変数を使うように気をつけます!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Pythonで「変数が見つからない」というエラーが出たのはなぜですか?

これはスコープの問題です。変数が作られた場所によって、その変数が有効に使える範囲が決まります。関数の中で作られた変数は関数の外では使えません。

ローカル変数とグローバル変数の違いは何ですか?

ローカル変数は関数の中だけで使える変数で、関数の外からはアクセスできません。グローバル変数は関数の外で作り、プログラムのどこからでも使える変数です。
カテゴリの一覧へ
新着記事
New1
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New2
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New3
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New4
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.5
Java&Spring記事人気No5
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.6
Java&Spring記事人気No6
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう