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

Pythonのスコープとは?ローカル変数・グローバル変数の違いと使い分けを初心者向けに解説!

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

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

生徒

「Pythonで変数を使っていたら、関数の中で値が変わらないことがありました。これってどうしてですか?」

先生

「それは『スコープ』と関係があります。Pythonには、ローカル変数とグローバル変数という考え方があって、それぞれの変数には使える範囲が決まっているんですよ。」

生徒

「ローカル変数とグローバル変数って何ですか? どう使い分ければいいんですか?」

先生

「では、Pythonのスコープ(変数の有効範囲)について、基本からやさしく解説していきましょう!」

1. スコープとは?

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

Python(パイソン)におけるスコープとは、「変数がどこで使えるか」という有効範囲のことを指します。変数(へんすう)というのは、数や文字などの情報を一時的に記憶してくれる箱のようなものでしたね。

プログラムではこの「箱(変数)」を、どこからでも自由に使えるようにしたい場合もあれば、一部だけで使いたいこともあります。スコープを理解すると、どこでどの変数が使えるのかがわかりやすくなり、プログラムのエラーも減らせます。

2. ローカル変数とは?

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

ローカル変数とは、関数(かんすう)の中で作られた変数のことです。関数の外では使うことができません。

たとえば以下のようなコードを見てください。


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

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

この例では、messageという変数はgreet()という関数の中で作られています。このように関数の中で作られた変数は、その関数の中でしか使えません。

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

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

グローバル変数は、関数の外で作られた変数です。この変数は、関数の中でも読み取ることができます。


message = "やあ!"

def greet():
    print(message)

greet()

やあ!

このコードでは、関数の外でmessageを作っているので、関数の中でも使えています。これがグローバル変数の特徴です。

4. グローバル変数を関数内で書き換えるには?

4. グローバル変数を関数内で書き換えるには?
4. グローバル変数を関数内で書き換えるには?

グローバル変数は読み取るだけなら関数の中でもOKですが、書き換える(代入する)には特別な操作が必要です。

それにはglobalというキーワードを使います。これは「この変数はグローバル変数ですよ」とPythonに伝えるためのものです。


count = 0

def add_one():
    global count
    count += 1

add_one()
print(count)

1

global countと書くことで、関数の中でもcountを更新できるようになります。

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

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

すべてグローバル変数にしてしまえば便利そうに見えるかもしれませんが、実はそれはバグの原因になりやすいです。

たとえば、いろんな場所で同じ変数名を使っていたら、うっかり値を上書きしてしまうかもしれません。ローカル変数を使うことで、関数の中だけで完結するので安全で分かりやすいコードになります。

6. スコープのイメージを図で理解しよう

6. スコープのイメージを図で理解しよう
6. スコープのイメージを図で理解しよう

スコープは、「部屋」のようなものだと考えてみましょう。グローバル変数は「家全体」にあるもので、どの部屋(関数)からも見えます。一方、ローカル変数は「その部屋だけの私物」なので、他の部屋からは見えません。

つまり、ローカル変数は関数の中でしか見えない「自分専用のノート」のようなもの、グローバル変数は家族みんなで使う「カレンダー」のようなものです。

7. 同じ名前の変数があるときは?

7. 同じ名前の変数があるときは?
7. 同じ名前の変数があるときは?

関数の中で、グローバル変数と同じ名前のローカル変数を作ると、ローカル変数が優先されます。これを変数の上書きではなく、隠れる(シャドーイング)と言います。


message = "こんにちは"

def greet():
    message = "やあ"
    print(message)

greet()
print(message)

やあ
こんにちは

このように、関数の中ではローカル変数が使われ、外ではグローバル変数がそのまま残っています。

8. スコープを正しく理解してコードを安全に!

8. スコープを正しく理解してコードを安全に!
8. スコープを正しく理解してコードを安全に!

Pythonのプログラムを書くとき、ローカル変数とグローバル変数の違いを理解しておくと、思わぬエラーや不具合を防げます。小さなプログラムではあまり問題にならなくても、プログラムが大きくなればなるほど、スコープの理解が重要になります。

特に初心者のうちは、基本的には関数の中で使う変数はローカル変数として定義し、グローバル変数は必要なときだけにするのがおすすめです。

まとめ

まとめ
まとめ

Pythonにおけるスコープの仕組みは、プログラム全体の見通しや安全性を高めるためにとても重要な知識です。とくにローカル変数とグローバル変数の違いを理解することで、思わぬエラーを避けるだけでなく、整理された読みやすいコードを書くための基礎となります。スコープを正しく使い分けることで、コードの役割や処理の流れがより自然に見えるようになり、複雑な処理を扱う際にも混乱を生みにくくなる点が大きなメリットです。

また、関数内で値を管理したいときにはローカル変数を使い、全体で共有したいときや複数の関数から参照したいときにはグローバル変数が役立ちます。しかし、グローバル変数を多用しすぎると値の管理が難しくなり、意図しない上書きやバグにつながりやすくなります。そのため、基本的にはローカル変数を中心に据えてプログラムを書くことが安心で、安全性の高い設計につながっていきます。

さらに、関数内でグローバル変数を書き換える場合にはglobalキーワードが必要であり、これを忘れると更新したつもりの値が変わらないという問題が起こります。こうした仕組みを理解しておくことで、関数が扱う値の範囲や変数の扱われ方を正しくイメージでき、スコープの仕組みがより身近なものとして感じられるでしょう。

スコープは単なる理屈ではなく、実際のプログラムの動きに直結する大切な概念であり、使い分けを学ぶことでコード全体の品質が向上します。特に大規模な開発や複数人で作業するときには、変数の管理が明確であることは非常に大切です。どの範囲でどの変数が使われているのかを示しておくことで、読み手にも理解しやすい構造になります。

ここでは、今回の学習内容を振り返るために Python のローカル変数・グローバル変数を用いたサンプルコードも示します。変数の扱われ方をより深く理解するための補足として活用してください。

サンプルプログラム(ローカル変数とグローバル変数の復習)


# グローバル変数の定義
counter = 0

# ローカル変数を使う関数
def show_message():
    message = "ローカル変数のメッセージ"
    print(message)

# グローバル変数を書き換える関数
def update_counter():
    global counter
    counter += 1

show_message()
update_counter()
print("グローバル変数 counter の値:", counter)
先生と生徒の振り返り会話

生徒

「今日の内容で、ローカル変数とグローバル変数の違いがすごく分かりやすくなりました! スコープが分からないと値が変わらない理由も理解できませんでした。」

先生

「そうですね。スコープは初心者がつまずきやすい部分ですが、一度理解するとコードの考え方がぐっと広がりますよ。」

生徒

「関数の中で値が変わらないのは、ローカル変数として新しく作られていたからなんですね。」

先生

「その通りです。同じ名前でもスコープが違えば別の変数になります。だから書き換えるときはglobalの指定が必要なんです。」

生徒

「これでスコープの仕組みも理解できたので、今後は意図しない上書きも減らせそうです!」

先生

「よく理解できましたね。変数の扱い方はプログラミングの基礎中の基礎なので、しっかり身につけておくと今後の学習がとても楽になりますよ。」

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

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

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

Pythonのスコープとは何ですか?初心者でも理解できるように教えてください

Pythonのスコープとは、変数がどこで使えるかという有効範囲のことです。ローカル変数やグローバル変数の区別を理解することで、エラーの原因を減らし安全なコードを書くことができます。
カテゴリの一覧へ
新着記事
New1
Django
Djangoのプロジェクトとアプリの違いを徹底解説!初心者でも迷わない構造の考え方
New2
Flask
FlaskでRQ(Redis Queue)を使って非同期タスク管理を行う方法|初心者向けやさしい解説
New3
Flask
FlaskでCookieを安全に使う方法!HttpOnly・Secureフラグの使い方を徹底解説
New4
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.3
Java&Spring記事人気No3
Flask
Flaskアプリの環境変数設定方法!安全で柔軟な構成を実現しよう
No.4
Java&Spring記事人気No4
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.5
Java&Spring記事人気No5
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.6
Java&Spring記事人気No6
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.7
Java&Spring記事人気No7
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.8
Java&Spring記事人気No8
Flask
Flask-WTFの使い方!フォームバリデーションを簡単にする拡張機能の導入手順