スコープ (プログラミング)

プログラミングにおけるスコープ（, 可視範囲）とは、ある変数や関数などの名前（識別子）を参照できる範囲のこと。通常、変数や関数が定義されたスコープの外側からは、それらの名前を用いるだけでは参照できない。このときこれらの変数や関数は「スコープ外」である、あるいは「見えない」といわれる。
プログラミングでは、ソースコードの可読性を向上し、また予期しない誤動作を避けるためにも、それぞれの処理段階で必要のない要素の名前はできるだけ参照されないようにすることが望ましい。特に、複数の関数にまたがったスコープを持つことのできるグローバル変数（大域変数）は便利な場合もあるが、どこで参照・変更されているかを常に気にしていなければならず、不用意な変更は危険でもある。たとえば、CERT C コーディングスタンダードには、「変数と関数の有効範囲を最小限にする」（DCL19-C）というレコメンデーションがある。
通例、入れ子になったスコープ階層ごとに同じ名前の識別子が出現したとき、より内側のスコープに属する識別子のほうが優先的に名前解決に使用される。
スコープと生存期間.
スコープとは別に、生存期間あるいは寿命 (lifetime) と呼ばれる概念がある。スコープは名前の可視性や名前解決について議論されるものであり、生存期間はオブジェクトの有効期間やライフサイクルについて議論されるものである。例えばC言語において、関数内すなわちローカルスコープの変数（ローカル変数）にcodice_1キーワード（静的記憶クラス指定子）を付加すると、その変数の可視範囲は関数内かつ所属ブロック内のままで変わらないが、生存期間は変化する。
スコープの種類.
名前空間からの分類.
なお、オブジェクト指向言語は通例カプセル化のため、フィールドやメソッドについてアクセス可能な範囲（可視性）を指定できるの機能を備えているが、アクセス修飾子によるアクセス制限とスコープの概念は関連があるものの別物である。また、基底クラスで定義されたフィールドやメソッドが派生クラスからもアクセス可能な場合は、それらを参照する際に、C++では基底クラス名を用いた修飾によりスコープを明示するが、JavaやC#ではcodice_4やcodice_5といったキーワードによるエイリアスを使う。