カテゴリ: 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
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New2
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New3
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
New4
Flask
Flask-WTFでファイルアップロードフォームを完全ガイド!初心者でもわかる画像やPDFのアップロード方法
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.8
Java&Spring記事人気No8
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説