コードを書いてすぐに結果を確かめられるPythonの対話モード(REPL)は、学習・検証・デバッグの強力な相棒です。
この記事では、起動と終了の基本、式評価やヘルプの見方、複数行入力のコツ、補完や計測などの便利ワザ、そしてトラブル対策まで、実践的に解説します。
対話モード(REPL)とは?Pythonを即実行できる基本とメリット
REPLの意味とPython対話モードの特徴
REPLは「Read-Eval-Print Loop」の略で、入力(Read)を評価(Eval)し、結果を表示(Print)して、再び待機(Loop)する対話的な実行環境を意味します。
PythonのREPLでは、>>>
プロンプトに式や文を書くだけで即時に評価・表示されるため、次のような特徴があります。
- 1行からすぐ試せる即時性があり、フィードバックが早いです。
- 組み込みのヘルプや補完により、API探索が容易です。
- 履歴を辿って再実行・編集できるため、反復的な試行に強いです。
学習・デバッグ・試作での対話モードの活用シーン
学び始めたばかりの型・文法の確認、標準ライブラリやサードパーティAPIの手触り確認、関数の境界条件の検証、小さなアルゴリズムのプロトタイピングなどで活躍します。
エラーの最小再現や、パフォーマンスの概算見積もりにも向いています。
Python対話モードの起動・終了方法(Windows/Mac/Linux)
起動コマンド:python / py / python3 とバージョン確認
環境により呼び出しコマンドが異なります。
まずはバージョン確認で動作するコマンドを把握します。
# Windows(推奨ランチャー)
py --version
# 例: Python 3.12.4
# Windowsでpythonが通っている場合
python --version
# macOS / Linux(多くはpython3)
python3 --version
# バージョンを指定して起動(Windowsランチャー)
py -3.12
起動に成功すると、>>>
が表示されます。
Python 3.12.4 (main, ...) on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
仮想環境(venv)でREPLを開く手順
依存関係を汚さないために、プロジェクトごとに仮想環境を使うのが基本です。
# 仮想環境の作成(プロジェクト直下に .venv を作成)
python -m venv .venv # macOS/Linux は python3 -m venv .venv でも可
# 有効化(activate)
# Windows PowerShell
.venv\Scripts\Activate.ps1
# Windows cmd.exe
.venv\Scripts\activate.bat
# macOS/Linux(bash/zsh)
source .venv/bin/activate
# 有効化後にPythonを起動
python
(.venv) yourproject % python
Python 3.12.4 (main, ...) on darwin
>>>
仮想環境が有効だと、プロンプトに環境名が表示され、which python
(macOS/Linux)や where python
(Windows)で仮想環境内のPythonが参照されます。
対話モードの終了方法:exit()・quit()・Ctrl+D/Ctrl+Z
終了方法はいくつかあります。
覚えやすいのは exit()
とショートカットです。
方法 | macOS/Linux | Windows |
---|---|---|
関数呼び出し | exit() または quit() | exit() または quit() |
キー操作 | Ctrl+D(EOF) | Ctrl+Z の後に Enter(EOF) |
基本の使い方:式評価・変数・ヘルプの活用
>>> プロンプトでの式評価と結果表示(print不要)
REPLでは、式の評価結果が自動で表示されます。
print
は明示的に標準出力へ出したいときに使います。
# 1. 式の評価はそのまま結果が表示されます
>>> 1 + 2
# 2. 関数呼び出しの戻り値も表示されます
>>> len("hello")
# 3. print は常に文字として出力され、戻り値 None は表示されません
>>> print("hi")
3
5
hi
変数の定義・再代入・直前結果を示す _ の使い方
代入文は値が表示されません。
直前の評価結果は特殊変数 _
に入ります(自身で _
を上書きするとその挙動は失われます)。
>>> x = 10 # 代入は表示なし
>>> x + 5
>>> _
>>> x = _ * 2 # 直前の結果で再計算
>>> x
15
15
30
30
注意点として、_
はREPLの内部変数です。
可読性のため、計算途中の値を保持したい場合は明示的な変数名を使うことをおすすめします。
help()・dir()・type()でAPIとドキュメントを調べる
標準で強力な探索機能が備わっています。
# オブジェクトや関数の型を知る
>>> type(42)
>>> type("abc")
# 利用可能な属性・メソッド一覧
>>> dir(str) # str型の属性
>>> dir("abc") # インスタンスの属性
# インラインドキュメント(q で終了)
>>> help(str.replace)
出力例(抜粋):
<class 'int'>
<class 'str'>
['__add__', '__class__', ..., 'upper', 'zfill']
Help on method_descriptor:
replace(self, old, new, count=-1, /)
Return a copy with all occurrences of substring old replaced by new.
importで標準ライブラリを試す(math・random など)
気軽にライブラリを試せるのもREPLの魅力です。
>>> import math, random
>>> math.sqrt(2)
>>> random.choice(["red", "green", "blue"])
1.4142135623730951
green
複数行入力と編集のコツ(関数定義・インデント・履歴)
関数定義・if/for の複数行入力(空行でブロック終了)
複数行ブロックでは ...
の継続プロンプトが出ます。
空行を挟むとブロックが確定します。
>>> def fib(n):
... a, b = 0, 1
... seq = []
... for _ in range(n):
... seq.append(a)
... a, b = b, a + b
... return seq
... # ← 空行で確定
>>> fib(7)
[0, 1, 1, 2, 3, 5, 8]
履歴検索と行編集ショートカット(↑、Ctrl+R、Ctrl+A/E 等)
- 上下矢印で入力履歴を巡回できます。
- Ctrl+R で履歴の逆順検索(readline対応環境)。キーワードをタイプすると該当コマンドが出ます。
- Ctrl+A(行頭へ)、Ctrl+E(行末へ)、Ctrl+K(カーソル以降を削除)、Ctrl+U(カーソル以前を削除)などの編集操作が使えます。
注: macOS/LinuxはGNU readlineが既定で有効なことが多く、これらのキーが使えます。
Windowsでも上下矢印や基本編集は機能しますが、Ctrl+Rの逆検索など一部は環境(Windowsターミナル、WSL、Git Bash 等)に依存します。
コピー&ペースト時のプロンプト記号とインデントの注意
チュートリアルにある >>>
や ...
をそのまま貼り付けると SyntaxError
になります。
貼り付ける場合はプロンプト記号を取り除き、インデントが揃っていることを確認してください。
特にタブとスペースが混在すると IndentationError
になります。
# 悪い例(>>> ... を含む)
>>> for i in range(3):
... print(i)
# 良い例(プロンプト無し、インデントはスペース4推奨)
for i in range(3):
print(i)
0
1
2
便利ワザ:REPLでの生産性アップ
Tab補完(readline環境)と rlcompleter の設定
Tab補完が有効だと、変数名や属性名が半自動で入力できます。
多くの環境で既定有効ですが、無効な場合は rlcompleter
を設定します。
# セッション内だけで有効化
>>> import readline, rlcompleter # Windowsでは環境によりreadlineが無い場合あり
>>> readline.parse_and_bind("tab: complete")
>>> import math
>>> math.sq<Tab> # ← Tab で補完(例)
出力例(補完候補の一例):
sqrt sqrt1pm1
恒常的に有効化したい場合は、ホームに ~/.pythonrc.py
(Windowsは任意パス)を作り、環境変数 PYTHONSTARTUP
にそのパスを設定します。
# ~/.pythonrc.py の例(コメント付き)
import sys
try:
import readline
import rlcompleter
readline.parse_and_bind("tab: complete")
# 履歴ファイル
import atexit, os
histfile = os.path.expanduser("~/.pyhistory")
try:
readline.read_history_file(histfile)
except FileNotFoundError:
pass
atexit.register(readline.write_history_file, histfile)
except Exception as e:
print(f"[startup warning] {e}", file=sys.stderr)
設定例(シェルの初期化ファイルに追記):
# macOS/Linux(bash/zsh)
export PYTHONSTARTUP="$HOME/.pythonrc.py"
pprint・json・from math import * で結果を見やすく
複雑な構造は pprint
や json
を使うと把握しやすくなります。
>>> from pprint import pprint
>>> data = {"users": [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}], "ok": True}
>>> pprint(data)
>>> import json
>>> print(json.dumps(data, ensure_ascii=False, indent=2))
{'ok': True, 'users': [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]}
{
"users": [
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
],
"ok": true
}
from math import *
は打鍵数が減りますが、名前の衝突や可読性低下の原因になります。
REPLでは一時的な用途に限り、import math as m
のように短いエイリアスを使うのが安全です。
>>> import math as m
>>> m.tau # 2π
6.283185307179586
timeit で簡易ベンチマーク、dis でバイトコード確認
小さな比較ならREPLの timeit
が便利です。
>>> import timeit
>>> timeit.timeit("sum(range(1000))", number=10000)
>>> timeit.timeit("s=0\nfor i in range(1000): s+=i", number=10000)
出力例(環境差あり):
0.0278
0.0413
バイトコードの観察には dis
を使います。
>>> import dis
>>> def add(a, b): return a + b
>>> dis.dis(add)
出力例(抜粋):
1 0 RESUME 0
2 LOAD_FAST 0 (a)
4 LOAD_FAST 1 (b)
6 BINARY_OP 13 (+)
10 RETURN_VALUE
例外とスタックトレースを読み解くコツ
トレースバックは「一番下が原因」です。
行番号・関数名・エラーメッセージを確認します。
>>> def div(a, b):
... return a / b
...
>>> def compute():
... return div(10, 0)
...
>>> compute()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in compute
File "<stdin>", line 2, in div
ZeroDivisionError: division by zero
- 末尾の
ZeroDivisionError: division by zero
が直接の原因です。 - その直上に呼び出し経路(
compute
→div
)が示されます。 - 入力位置(
<stdin>
)と行番号で、どこを直せばよいかが分かります。
より高機能な対話環境:IPython / ptpython の紹介
機能拡張を求めるなら以下が有力です。
- IPython: 豊富な補完、ヘルプの整形、シンタックスハイライト、マジックコマンド(例:
%timeit
,%paste
,%run
)など。 - ptpython: 先読み補完、マルチライン編集、テーマ切替など、軽快な操作感。
導入は次の通りです。
pip install ipython ptpython
ipython
ptpython
よくあるトラブルと使い分け
日本語入出力・エンコーディングの注意点
REPL自体はUTF-8対応ですが、端末側の設定で文字化けすることがあります。
- macOS/Linux: 端末のロケールがUTF-8なら通常問題ありません。
locale
で確認できます。 - Windows: 端末のコードページをUTF-8にすると安定します。
:: Windows のコンソールをUTF-8へ
chcp 65001
Python側で明示する方法(3.7+)もあります。
>>> import sys
>>> sys.stdout.reconfigure(encoding="utf-8")
>>> print("日本語OK")
日本語OK
環境変数で強制する方法もあります。
# 一時的にI/OエンコードをUTF-8に
export PYTHONIOENCODING=utf-8
# Python 3.7+ のUTF-8モード(Windowsで有効)
export PYTHONUTF8=1
モジュールの再読み込み:importlib.reload の基本
外部ファイルを編集したあと、REPLを落とさずに反映するには再読み込みを使います。
# m.py を編集していると仮定
>>> import m # 1回目
>>> import importlib
>>> importlib.reload(m) # 変更反映
注意点として、from m import foo
のように名前を直接取り込んだ場合、reload(m)
しても foo
の参照は更新されません。
REPLでは import m
とモジュール名経由の呼び出しを基本にすると安全です。
REPLとスクリプトの使い分け指針(短い検証はREPL、長い処理はファイル)
- REPL向き: 1~数行の検証、API探索、最小再現、軽い計測や可視化の試行。
- スクリプト向き: 複数関数にまたがる処理、再実行や共有が必要なコード、テストやCIに組み込みたい処理、引数や設定を受け取るツール。
REPLで確認した動作をスクリプトに書き出し、バージョン管理する流れが実務では効率的です。
まとめ
Pythonの対話モード(REPL)は、学習から日常の開発まで幅広く力を発揮します。
起動・終了の基本、式評価と _
の活用、help/dir/type
によるAPI探索、複数行ブロックの扱い、履歴と補完の編集術、pprint/json/timeit/dis
などの実用ツール、そして日本語や再読み込みの注意点を押さえれば、短時間で確信を持ってコードを磨けます。
さらに必要があれば、IPythonやptpythonで快適性を高める選択肢もあります。
まずは手元の端末で python
を起動し、小さな疑問から即座に試す習慣を身につけていきましょう。