- 技術 💻
ブラケットとは?括弧の種類と呼び方一覧|[]{}()の意味・入力・エラー原文
結論
ブラケット(bracket)は、文字を左右から囲む「括弧」の英語名です。プログラミングでは主に角括弧 [ ] を指し、丸括弧 ( ) はパーレン(parenthesis)、波括弧 { } はブレース(brace)と呼び分けます。建築や家具では、壁から突き出して棚や照明を支える金具のことです。
この記事でわかること
- 括弧14種の日本語名・英語名・文字コードと、分野ごとの意味の違い
- Python・JavaScript・Java・C・Rust・Go・bash・JSON・正規表現・SQLで括弧の役割を実行した結果
- 閉じ忘れ・種類違い・全角の括弧で出るエラー原文と、見つけ方・直し方
同じ「ブラケット」という言葉でも、文章・プログラミング・数学・建築で指すものが違います。まず場面を確かめ、次に括弧の種類を見分けると、意味が決まります。
flowchart LR
A[ブラケット] --> B{場面}
B --> C[文章<br>括弧全般]
B --> D["プログラム<br>主に [ ]"]
B --> E[建築・家具<br>支え金具]
B --> F[英語の慣用<br>区分・層]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| ブラケットとは | 括弧の英語名。プログラミングでは主に [ ]。建築では支え金具 | ブラケットとは(場面別の意味) |
| 括弧の種類と呼び方 | ( ) 丸括弧・[ ] 角括弧・{ } 波括弧・< > 山括弧・「 」かぎ括弧・【 】隅付き括弧など | 括弧の種類と呼び方一覧 |
| 角括弧・大括弧・ブラケットの違い | どれも [ ]。大括弧は数式の入れ子の順から来た呼び方 | 括弧の種類と呼び方一覧 |
| プログラミングでの意味 | ( ) 呼び出し・優先、[ ] 配列・添字、{ } ブロック・辞書、< > 型引数 | プログラミングでの括弧の役割 |
| 括弧の打ち方(キーボード) | 日本語配列は ( ) が Shift+8・9、[ ] は @ と : の右のキー | 括弧の入力方法 |
| 全角と半角の括弧の違い | 別の文字。プログラムに全角の括弧があるとエラーになる | 全角括弧と半角括弧の違い |
| 「'(' was never closed」と出た | 開いた括弧が閉じられていない。表示された行から下を探す | 対応の取れていない括弧のエラー |
| 文章の括弧と句点 | 括弧の中で文が終わるなら閉じ括弧の前に句点を打つ(公用文の考え方) | 数学と文章の括弧 |
確認環境:Ubuntu 24.04.5 LTS の作業用フォルダーで、Python 3.13.18、Node.js 22.23.4、OpenJDK 21.0.12(javac)、GCC 13.3.0、rustc 1.97.0、Go 1.24.7、GNU bash 5.2.21、GNU grep、jq 1.7、Python 同梱の SQLite 3.53.1 を使い、括弧の役割を確かめるコードと、閉じ忘れ・種類違い・全角の括弧を入れたファイルを実行して、出力とエラーの原文を写しました。環境変数を空にした状態(env -i、言語は LANG=C.UTF-8)で動かしているので、エラーは英語の原文です。文字の名前と文字コードは Python の unicodedata(Unicode 15.1.0)で、キーボードの刻印の位置は Ubuntu の XKB のキー配置データ(jp と us)で確かめました。言葉の意味はデジタル大辞泉(Weblio 掲載)と英語版 Wikipedia「Bracket」、文章での括弧の使い方は文化審議会「公用文作成の考え方(建議)」、変換候補は Google 日本語入力のオープンソース版 Mozc の記号辞書、VS Code の括弧の機能、Python の正規表現のエラー名、SQLite の [ ] による識別子の囲みは各公式ドキュメントで確かめています。Windows・Mac・スマホの実機は動かしていないため、入力方法はキー配置データと公式資料で確かめた範囲だけを書きました。図は mermaid 11.16.0 で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「ブラケットとは?括弧の種類と呼び方一覧|[]{}()の意味・入力・エラー原文」
ブラケットとは(場面別の意味の表)
この節では、「ブラケット」という言葉が場面ごとに何を指すのかが分かります。
ブラケットは英語の bracket をカタカナにした言葉で、もとは「腕木・支え」の意味です。壁から突き出して物を支える形が、文字を左右から囲む記号の形に似ていることから、括弧の名前にも使われるようになりました。デジタル大辞泉は、ブラケットを「腕木・持ち送り」「壁に取り付ける照明器具」「括弧」などと説明しています。
| 場面 | ブラケットが指すもの | 例 |
|---|---|---|
| プログラミング | 主に角括弧 [ ]。括弧全般を指すことも | 配列 a[0]、型 list[int]、正規表現 [0-9] |
| 文章・印刷(英語) | 英国では丸括弧 ( )、米国では角括弧 [ ] | 引用文に補った語を [ ] で示す |
| 文章(日本語) | 括弧全般。種類は「〇〇括弧」と呼び分ける | 「かぎ括弧」【隅付き括弧】 |
| 数学 | 角括弧 [ ]。区間・ガウス記号・入れ子の括弧 | [0, 1]、[x] |
| 建築・家具・照明 | 壁から突き出して支える金具。壁付けの照明 | 棚受けブラケット、ブラケットライト |
| 機械・自動車 | 部品を取り付けるための補助の金具 | エンジンブラケット |
| 歯科 | 歯列矯正で歯に付け、ワイヤーを留める小さな器具 | 矯正用ブラケット |
| 英語の慣用表現 | 「区分・層」 | age bracket(年齢層)、tax bracket(税率区分) |
この記事では、プログラミングと文章の「括弧」としてのブラケットを中心に説明します。金具・照明・歯科の意味は上の表の一言にとどめます。なお、2021年にサポートが終わったテキストエディター「Brackets」は製品名で、記号とは別のものです。
記号としてのブラケット
文字を左右から囲む対の記号
開き括弧と閉じ括弧で1組
プログラミングでは主に [ ]
金具としてのブラケット
壁や柱から突き出して物を支える
棚受け・照明・機械部品の取り付け
形が「コ」の字や「L」の字
括弧の種類と呼び方一覧(日本語名・英語名・文字コード)
この節では、よく使う括弧の名前・英語名・文字コードが一覧で分かります。
半角の ( ) [ ] { } < > は英数字と同じ1バイトの文字で、プログラムで使うのはこちらです。かぎ括弧や隅付き括弧は日本語の文章用の文字で、UTF-8 では3バイトになります。文字の正式な名前(Unicode の文字名)は、手元の Python で調べたものです。
| 記号 | 日本語の呼び方 | 英語の呼び方 | 文字コード | 主な用途 |
|---|---|---|---|---|
| ( ) | 丸括弧・小括弧・パーレン | parentheses、round brackets | U+0028 / U+0029 | 関数の呼び出し、計算の優先、補足 |
| [ ] | 角括弧・大括弧・ブラケット | square brackets | U+005B / U+005D | 配列・添字、正規表現の文字クラス |
| { } | 波括弧・中括弧・ブレース | curly brackets、braces | U+007B / U+007D | ブロック、辞書・オブジェクト |
| < > | 山括弧(本来は不等号) | angle brackets(文字名は less-than sign) | U+003C / U+003E | HTML のタグ、型引数 |
| 〈 〉 | 山括弧 | angle brackets | U+3008 / U+3009 | 日本語の文章での強調・書名 |
| 《 》 | 二重山括弧 | double angle brackets | U+300A / U+300B | 書名・作品名 |
| 「 」 | かぎ括弧 | corner brackets | U+300C / U+300D | 会話・引用・語の強調 |
| 『 』 | 二重かぎ括弧 | white corner brackets | U+300E / U+300F | かぎ括弧の中の引用・書名 |
| 【 】 | 隅付き括弧(墨付き括弧とも) | black lenticular brackets | U+3010 / U+3011 | 見出し・項目・強調 |
| 〔 〕 | 亀甲括弧 | tortoise shell brackets | U+3014 / U+3015 | 引用文への補足、注記 |
| ( )[ ]{ } | 全角の丸・角・波括弧 | fullwidth parenthesis など | U+FF08 など | 日本語の文章の中の括弧 |
| ⟨ ⟩ | 数学用の山括弧 | mathematical angle brackets | U+27E8 / U+27E9 | 内積・量子力学の記法 |
手元で文字名とバイト列を出した結果の一部です(左から文字・コード・文字名・UTF-8 のバイト・幅の区分)。
$ python3 uni.py
( U+0028 LEFT PARENTHESIS 28 EAW=Na NFKC=((同じ)
( U+FF08 FULLWIDTH LEFT PARENTHESIS ef bc 88 EAW=F NFKC=(
[ U+005B LEFT SQUARE BRACKET 5b EAW=Na NFKC=[(同じ)
{ U+007B LEFT CURLY BRACKET 7b EAW=Na NFKC={(同じ)
< U+003C LESS-THAN SIGN 3c EAW=Na NFKC=<(同じ)
〈 U+3008 LEFT ANGLE BRACKET e3 80 88 EAW=W NFKC=〈(同じ)
「 U+300C LEFT CORNER BRACKET e3 80 8c EAW=W NFKC=「(同じ)
【 U+3010 LEFT BLACK LENTICULAR BRACKET e3 80 90 EAW=W NFKC=【(同じ)
〔 U+3014 LEFT TORTOISE SHELL BRACKET e3 80 94 EAW=W NFKC=〔(同じ)
⟨ U+27E8 MATHEMATICAL LEFT ANGLE BRACKET e2 9f a8 EAW=Na NFKC=⟨(同じ)
1< > の正式名は「不等号」
半角の < と > の文字名は LESS-THAN SIGN・GREATER-THAN SIGN。山括弧として使われているが、文字としては不等号。
2山括弧は3種類ある
半角の < >、日本語用の〈 〉(U+3008)、数学用の⟨ ⟩(U+27E8)。見た目が似ていても別の文字。
3名前に BRACKET が付く
かぎ括弧は CORNER BRACKET、隅付き括弧は BLACK LENTICULAR BRACKET。英語では括弧全般が bracket の仲間。
「大括弧・中括弧・小括弧」という呼び方
日本の数学の教科書では、括弧を入れ子にするとき内側から ( ) → { } → [ ] の順に使うため、[ ] を大括弧、{ } を中括弧、( ) を小括弧と呼ぶことがあります。ただ、この順番は国や分野で逆になることがあり、海外の数式やプログラムでは ( ) → [ ] → { } の順もよく見ます。形で呼ぶ「角括弧・波括弧・丸括弧」のほうが、相手が誰でも同じ記号を思い浮かべられます。
英語の bracket と parenthesis の違い(イギリス英語・アメリカ英語)
英語版 Wikipedia の「Bracket」は、何も付けずに brackets と言ったとき、イギリス英語では丸括弧 ( )、アメリカ英語では角括弧 [ ] を指すと説明しています。プログラミングの英語の資料はアメリカ英語が多いので、bracket だけなら [ ] と読むのが安全です。
| 記号 | アメリカ英語 | イギリス英語 | 開発者の会話でよく聞く言い方 |
|---|---|---|---|
| ( ) | parentheses | round brackets、brackets | パーレン、paren |
| [ ] | brackets、square brackets | square brackets | ブラケット、角括弧 |
| { } | braces、curly brackets | curly brackets、curly braces | ブレース、カーリーブラケット、ニョロ括弧 |
| < > | angle brackets | angle brackets | アングルブラケット、山括弧 |
単数形は parenthesis、複数形は parentheses です。1組の ( ) は2文字なので、ふつうは複数形で言います。引用符(' ' や " ")も文字を囲みますが、英語では quotation marks と呼び、括弧には入れません。
プログラミングでの括弧の役割(() [] {} <> 言語別の早見表)
この節では、プログラムの中で4種類の括弧がそれぞれ何を表すのかが、言語別に分かります。
大まかには、( ) は「呼び出しと優先」、[ ] は「並び(配列)と取り出し(添字)」、{ } は「まとまり(ブロック・辞書)」、< > は「型を渡す」です。ただし言語によって例外があり、同じ { } でも Python では辞書、JavaScript ではオブジェクトかブロック、bash ではコマンドのまとまりになります。
| 言語・場面 | ( ) 丸括弧 | [ ] 角括弧 | { } 波括弧 | < > 山括弧 |
|---|---|---|---|---|
| Python | 呼び出し・優先・タプル | リスト・添字・スライス・型引数 | 辞書・集合・f文字列の差し込み | 比較演算子だけ |
| JavaScript | 呼び出し・優先・アロー関数の引数 | 配列・添字・分割代入 | ブロック・オブジェクト・${} |
比較(TypeScript では型引数) |
| Java・C# | 呼び出し・優先・キャスト | 配列 | ブロック・配列の初期化 | ジェネリクス List<String> |
| C | 呼び出し・優先・キャスト・マクロ | 配列・添字 | ブロック・初期化子 | #include <stdio.h> |
| Rust | 呼び出し・タプル・マクロ | 配列・添字・vec![] |
ブロック・{} の書式 |
ジェネリクス・ターボフィッシュ |
| Go | 呼び出し・優先 | 配列・スライス・map・型パラメーター | ブロック・複合リテラル | 比較演算子だけ |
| bash | サブシェル・配列・$( ) |
条件判定 [ ]・グロブ |
グループ・ブレース展開・${ } |
リダイレクト |
| JSON | 使わない | 配列 | オブジェクト | 使わない |
| 正規表現 | グループ | 文字クラス | 回数の指定 | 名前付きグループ (?P<n>) |
次の節から、この表の内容を言語ごとに実行して確かめます。
PythonとJavaScriptの括弧(実行結果)
この節では、Python と JavaScript で、括弧の種類によって値の型や動きがどう変わるかが、実行結果で分かります。
Python:括弧で型が決まる
Python では、( ) はタプル、[ ] はリスト、{ } は辞書か集合を作ります。ただし括弧1組だけではタプルにならず、カンマがあって初めてタプルになります。空の { } は集合ではなく辞書です。
t = (1, 2, 3) # 丸括弧: タプル
one = (1) # 丸括弧1つは「ただの値」
one_t = (1,) # カンマでタプル
l = [1, 2, 3] # 角括弧: リスト
d = {"a": 1} # 波括弧: 辞書
s = {1, 2} # 波括弧: 集合
e = {} # 空の波括弧は辞書
print(type(t).__name__, type(one).__name__, type(one_t).__name__)
print(type(l).__name__, l[0], l[-1], l[1:])
print(type(d).__name__, d["a"], type(s).__name__, type(e).__name__, type(set()).__name__)
name = "RJC"
print(f"{name} / {{波括弧そのもの}} / {2 * (3 + 4)}")
def f(x: list[int]) -> dict[str, int]:
return {"n": len(x)}
print(f([1, 2]), f.__annotations__)
print([x * 2 for x in range(3)], {x: x * x for x in range(3)}, (x for x in range(3)).__class__.__name__)
$ python3 py_ok.py
tuple int tuple
list 1 3 [2, 3]
dict 1 set dict set
RJC / {波括弧そのもの} / 14
{'n': 2} {'x': list[int], 'return': dict[str, int]}
[0, 2, 4] {0: 0, 1: 1, 2: 4} generator
[exit 0]
(1)は int、(1,)は tupleでした。括弧ではなくカンマがタプルを作ります。- 空の集合は
{}ではなくset()で作ります。 - f文字列の中で波括弧そのものを出すときは
{{}}と2つ重ねます。 - 内包表記は、[ ] ならリスト、{ } なら辞書か集合、( ) ならジェネレーターになりました。
JavaScript:{ } はブロックかオブジェクトか
JavaScript では、{ } が「ブロック」なのか「オブジェクト」なのかを、書いた位置で判断します。アロー関数の => の直後の { } は関数の本体(ブロック)として読まれるため、オブジェクトを返したいときは ( ) で囲みます。
const a = [1, 2, 3]; // 角括弧: 配列
const o = { name: "RJC", n: 1 }; // 波括弧: オブジェクト
console.log(a[0], o["name"], o.n, Array.isArray(a), typeof o);
const f1 = () => { n: 1 }; // 波括弧はブロックになる
const f2 = () => ({ n: 1 }); // 丸括弧で囲むとオブジェクト
console.log(f1(), f2());
const { name } = o; const [first, ...rest] = a; // 分割代入
console.log(name, first, rest, `${name}は${a.length}件`);
console.log((1 + 2) * 3, 1 + 2 * 3, [..."ab"], [] + [], [] + {});
$ node js_ok.js
1 RJC 1 true object
undefined { n: 1 }
RJC 1 [ 2, 3 ] RJCは3件
9 7 [ 'a', 'b' ] [object Object]
[exit 0]
f1() は undefined を返しました。{ n: 1 } がブロックとして読まれ、n: はラベル、1 はただの式になったためで、エラーは出ません。エラーにならずに値が変わるので、気づきにくい誤りです。
アロー関数でオブジェクトを返す
() => { n: 1 } と書く。ブロックとして読まれ、戻り値は undefined() => ({ n: 1 }) と丸括弧で囲む。手元では { n: 1 } が返った波括弧の意味は位置で決まる。迷ったら丸括弧で「式」だと示す
Java・C・Rust・Goの括弧(配列・ジェネリクス)
この節では、静的な型を持つ言語で、角括弧と山括弧がどう使い分けられているかが分かります。
Java・C#・Rust は型引数に < > を使い、Go は [ ] を使います。C の < > は、型ではなく #include で標準ヘッダーを読み込むときの囲みです。
Java:[ ] は配列、< > は型引数
import java.util.*;
public class Ok {
public static void main(String[] args) { // [] 配列、{} ブロック
int[] nums = {3, 1, 2}; // {} 配列の初期化子
List<String> names = new ArrayList<>(); // <> 型引数(ダイヤモンド演算子)
names.add("RJC");
Map<String, List<Integer>> m = Map.of("a", List.of(nums[0], nums[1]));
System.out.println(nums.length + " " + nums[0] + " " + names + " " + m);
}
}
$ javac -d /dev/shm/t168/jcls Ok.java
[exit 0]
$ java -cp /dev/shm/t168/jcls Ok
3 3 [RJC] {a=[3, 1]}
[exit 0]
右辺の new ArrayList<>() のように中身の無い < > は「ダイヤモンド演算子」と呼ばれ、型を左辺から推論させる書き方です。List<Integer>> のように > が2つ続いても、手元の javac 21 は問題なく読みました。
C:マクロでは丸括弧を省かない
#include <stdio.h>
#define SQ(x) ((x) * (x))
#define SQ_BAD(x) x * x
int main(void) {
int a[3] = {1, 2, 3};
printf("%d %d %d %d\n", a[2], 2[a], SQ(1 + 2), SQ_BAD(1 + 2));
return 0;
}
$ gcc -o /dev/shm/t168/okc ok.c
[exit 0]
$ /dev/shm/t168/okc
3 3 9 5
[exit 0]
SQ_BAD(1 + 2) は 9 ではなく 5 になりました。マクロは文字の置き換えなので 1 + 2 * 1 + 2 と展開されます。引数と全体を丸括弧で囲んだ SQ は 9 です。また、C では a[2] と 2[a] がどちらも 3 を返しました。添字は「先頭からいくつ目か」の足し算として定義されているためで、読みにくいので使いません。
Rust と Go:! のあとの括弧と、[ ] の型パラメーター
fn main() {
let v: Vec<i32> = vec![1, 2, 3];
println!("{} {:?}", v[0], v);
let n = "42".parse::<i32>().unwrap();
println!("{}", n + 1);
}
$ rustc --color never -o /dev/shm/t168/okrs ok.rs && /dev/shm/t168/okrs
1 [1, 2, 3]
43
func Max[T int | float64](a, b T) T { // Go の型パラメーターは [ ]
if a > b {
return a
}
return b
}
func main() {
m := map[string][]int{"a": {1, 2}} // map[キー]値、{} は複合リテラル
fmt.Println(Max(3, 7), Max[float64](1.5, 0.5), m["a"][1])
}
$ go run main.go
7 1.5 2
[exit 0]
Rust の vec![ ] や println!( ) は関数ではなくマクロで、! のあとの括弧は ( ) [ ] { } のどれでも書けます(手元でも vec!(1, 2)・vec!{3, 4}・println![…] がそのまま動き、[1, 2] [3, 4] と出ました)。慣習として、並びを作る vec! は [ ]、関数のように使う println! は ( ) を使います。parse::<i32>() の ::<> は、形が魚に見えることから「ターボフィッシュ」と呼ばれます。
型引数に < > を使う
Java List<String>
C# List<int>、TypeScript Array<T>
Rust Vec<i32>、C++ std::vector<int>
型引数に [ ] を使う
Go Max[float64]
Python list[int]、dict[str, int]
Scala List[Int]
JSONの角括弧と波括弧(パースエラーの原文)
この節では、JSON の [ ] と { } の決まりと、括弧を間違えたときに jq・Python・Node.js が出すエラーの原文が分かります。
JSON で使う括弧は2種類だけで、[ ] は配列(値の並び)、{ } はオブジェクト("名前": 値 の組)です。( ) や全角の括弧は使えず、名前は必ずダブルクォーテーションで囲みます。
{"name": "RJC", "tags": ["SES", "SI"], "n": 1}
$ jq -r '.tags[0], (.tags | length), {name, n}' ok.json
SES
2
{
"name": "RJC",
"n": 1
}
括弧を間違えた5つのファイルを jq 1.7 に読ませたときのエラーです。
| 入れた誤り | ファイルの中身 | jq 1.7 のエラー原文 |
|---|---|---|
| ] の代わりに } で閉じた | {"tags": ["SES", "SI"} |
Objects must consist of key:value pairs at line 1, column 22 |
| 最後の } が無い | {"tags": ["SES", "SI"] |
Unfinished JSON term at EOF at line 2, column 0 |
| 名前を ' ' で囲んだ | {'name': 'RJC'} |
Invalid numeric literal at line 1, column 8 |
| ] の前に余計なカンマ | {"tags": ["SES", "SI",]} |
Expected another array element at line 1, column 23 |
| 全角の括弧で書いた | ("tags": ["SES"]) |
Malformed BOM |
同じ誤りを Python の json と Node.js の JSON.parse に読ませると、文言が変わりました。
Python 3.13(] の代わりに })
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 22 (char 21)
Python 3.13(余計なカンマ)
json.decoder.JSONDecodeError: Illegal trailing comma before end of array: line 1 column 22 (char 21)
Python 3.13(全角の括弧)
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Node.js 22(] の代わりに })
SyntaxError: Expected ',' or ']' after array element in JSON at position 21 (line 1 column 22)
- 全角の括弧で jq が「Malformed BOM」と出したのは、全角の「(」の UTF-8 が
ef bc 88で、BOM(ef bb bf)と同じefで始まるためだと考えられます。文言が括弧と無関係に見えても、先頭の文字を疑います。 - どのツールも「何列目か」を出します。その列の直前の括弧の種類を見ると、多くは原因が分かります。
JSON の読み書きとエラーの直し方は、関連記事「JSON.parseとJSON.stringifyの使い方|エラー原因と整形」で扱っています。
正規表現の括弧([ ] 文字クラス・( ) グループ・{ } 回数)
この節では、正規表現で3種類の括弧が何を意味するかと、括弧そのものを探すときの書き方が分かります。
正規表現では、[ ] は「この中のどれか1文字」、( ) は「まとめて扱う・取り出す」、{ } は「何回くり返すか」です。括弧の文字そのものを探すときは \[ \( のように前に \ を付けます。全角の括弧は特別な意味を持たないので、そのまま書けます。
import re
s = "注文A12・注文B7・注文C345(3件)[済]"
print(re.findall(r"[A-C]\d{1,2}", s)) # [] 文字クラス・{} 回数
print(re.findall(r"([A-C])(\d+)", s)) # () グループ
print(re.findall(r"(?:注文)([A-C])", s)) # (?: ) 取り出さないグループ
print(re.findall(r"\[(.+?)\]", s), re.findall(r"((.+?))", s)) # 括弧そのものは \[ \]、全角はそのまま
print(re.sub(r"\(|\)", "", "(a)(b)"), re.escape("[x](y){z}"))
$ python3 re_ok.py
['A12', 'B7', 'C34']
[('A', '12'), ('B', '7'), ('C', '345')]
['A', 'B', 'C']
['済'] ['3件']
ab \[x\]\(y\)\{z\}
[exit 0]
\d{1,2} は数字1〜2文字なので、C345 からは C34 だけが取り出されました。括弧を閉じ忘れたパターンでは、言語ごとに次のエラーになりました。
| パターン | Python 3.13(re.compile) | Node.js 22(new RegExp) | GNU grep -E |
|---|---|---|---|
(a |
re.PatternError: missing ), unterminated subpattern at position 0 |
Invalid regular expression: /(a/: Unterminated group |
grep: Unmatched ( or \( |
[a |
re.PatternError: unterminated character set at position 0 |
Invalid regular expression: /[a/: Unterminated character class |
grep: Unmatched [, [^, [:, [., or [= |
a) |
re.PatternError: unbalanced parenthesis at position 1 |
Invalid regular expression: /a)/: Unmatched ')' |
エラーにならず、文字の ) として一致した |
a{2 |
エラーにならず、文字の a{2 として扱った |
u フラグ無しは文字として一致。u フラグ付きは Incomplete quantifier |
エラーにならず、文字の a{2 として一致した |
閉じ忘れの扱いは、ツールによって「エラーにする」「文字として読む」に分かれました。エラーが出ないまま意図と違う文字列に一致することがあるので、括弧を文字として探すときは \) \{ と明示します。なお Python 3.13 の公式ドキュメントによると、正規表現のエラーは re.error から re.PatternError に名前が変わり、re.error は互換のための別名として残っています。
grep では -E の有無で括弧の意味が逆になる
grep の既定(基本正規表現)では、( ) と { } はただの文字で、\( \) \{ \} と書いたときだけ特別な意味になります。-E(拡張正規表現)ではその逆です。
$ cat t.txt
aa (b) [c]
$ grep -o '(b)' t.txt
(b)
$ grep -o -E '(b)' t.txt
b
$ grep -o 'a{2}' t.txt
[exit 1]
$ grep -o 'a\{2\}' t.txt
aa
$ grep -o -E 'a{2}' t.txt
aa
記号ごとの意味と言語別の違いは、関連記事「正規表現 早見表|記号一覧・言語別の違い・実用パターン(実行結果つき)」で扱っています。
シェル(bash)の括弧:( ) { } [ ] [[ ]] $( ) の違い
この節では、bash で括弧の種類ごとに何が起きるかと、空白の有無で動かなくなる理由が分かります。
bash では、( ) の中は別のシェル(サブシェル)で動き、{ } の中は今のシェルで動きます。そのため、( ) の中で移動したフォルダーや代入した変数は、閉じ括弧のあとに残りません。
cd /srv/s4/r17/t168/exp
( cd /tmp; echo "() の中: $PWD" ); echo "() の後: $PWD"
{ cd /tmp; echo "{} の中: $PWD"; }; echo "{} の後: $PWD"
cd /srv/s4/r17/t168/exp/sh
n=0; ( n=5 ); echo "()で代入した後 n=$n"; { n=5; }; echo "{}で代入した後 n=$n"
echo "コマンド置換 \$( ): $(echo hi | tr a-z A-Z)"
echo "算術展開 \$(( )): $(( (2 + 3) * 4 ))"
f=report.txt; echo "変数展開 \${ }: ${f%.txt}.csv / 長さ ${#f}"
echo "ブレース展開 { }: " file{1..3}.log img.{png,jpg}
touch a1 b1 c1 d1; echo "グロブ [ ]: " [ab]1 "/ [!ab]1 →" [!ab]1; rm -f a1 b1 c1 d1
x=5; if [ "$x" -gt 3 ]; then echo "[ ] (test) 真"; fi
if [[ $x == [0-9] && -n $x ]]; then echo "[[ ]] 真"; fi
arr=(apple banana); echo "配列 ( ) と \${arr[1]}: ${arr[1]} 件数 ${#arr[@]}"
$ bash ok.sh
() の中: /tmp
() の後: /srv/s4/r17/t168/exp
{} の中: /tmp
{} の後: /tmp
()で代入した後 n=0
{}で代入した後 n=5
コマンド置換 $( ): HI
算術展開 $(( )): 20
変数展開 ${ }: report.csv / 長さ 10
ブレース展開 { }: file1.log file2.log file3.log img.png img.jpg
グロブ [ ]: a1 b1 / [!ab]1 → c1 d1
[ ] (test) 真
[[ ]] 真
配列 ( ) と ${arr[1]}: banana 件数 2
[exit 0]
| 書き方 | 意味 | 空白の決まり |
|---|---|---|
( コマンド ) |
サブシェルで実行。変数・cd が外に残らない | 空白は無くても動く |
{ コマンド; } |
今のシェルでまとめて実行 | { の後に空白、} の前に ; か改行が要る |
[ 条件 ] |
test コマンド。[ はコマンドの名前 | [ の後と ] の前に空白が要る |
[[ 条件 ]] |
bash の条件式。&& やパターン一致が使える | [ と同じく空白が要る |
$( コマンド ) |
コマンドの出力を文字列として埋め込む | 中は自由 |
$(( 式 )) |
整数の計算 | 中は自由 |
${ 変数 } |
変数の展開・置換・切り出し | 空白を入れない |
a{1..3} |
ブレース展開(文字の組み合わせを作る) | 中に空白を入れない |
空白を忘れたときのエラーです。[ "$x" -gt 3] はエラーを出しても終了コードが 0 のまま、次の行へ進みました。if の条件が偽として扱われるだけなので、スクリプトは止まりません。
$ bash e1.sh # if [ "$x" -gt 3]; then ...
e1.sh: line 2: [: missing `]'
[exit 0]
$ bash e5.sh # if [x -gt 3 ]; then ...
e5.sh: line 2: [x: command not found
[exit 0]
$ bash e2.sh # {echo hi;}
e2.sh: line 1: syntax error near unexpected token `}'
e2.sh: line 1: `{echo hi;}'
[exit 2]
$ bash e6.sh # { echo hi }
e6.sh: line 2: syntax error: unexpected end of file
[exit 2]
$ bash e4.sh # echo $(date
e4.sh: line 2: unexpected EOF while looking for matching `)'
[exit 2]
[x が「command not found」になったのは、[ がコマンドの名前で、空白が無いと [x という名前のコマンドを探しに行くためです。${ } の置換や切り出しの書き方は、関連記事「bash変数展開の一覧|${var:-default}と文字列の置換・切り出し」で扱っています。
SQL・HTML・Markdownの括弧
この節では、SQL の丸括弧と角括弧、HTML の山括弧、Markdown の角括弧の役割が分かります。
SQL:( ) で条件の優先を変え、[ ] で列名を囲む
SQL では AND が OR より先に評価されるため、OR をまとめたいときは ( ) で囲みます。また SQLite と SQL Server では、予約語と同じ列名などを [ ] で囲めます(標準 SQL の書き方はダブルクォーテーション、MySQL はバッククォート)。Python 同梱の SQLite 3.53.1 で確かめました。
db.execute('CREATE TABLE t ([order] INTEGER, dept TEXT, age INTEGER)')
db.executemany("INSERT INTO t VALUES (?, ?, ?)", [(1, "A", 20), (2, "B", 40), (3, "A", 50)])
print("[order] で予約語を列名に:", db.execute("SELECT [order] FROM t ORDER BY [order]").fetchall())
print("かっこ無し:", db.execute("SELECT [order] FROM t WHERE dept = 'A' OR dept = 'B' AND age >= 30").fetchall())
print("かっこ有り:", db.execute("SELECT [order] FROM t WHERE (dept = 'A' OR dept = 'B') AND age >= 30").fetchall())
[order] で予約語を列名に: [(1,), (2,), (3,)]
かっこ無し: [(1,), (2,), (3,)]
かっこ有り: [(2,), (3,)]
IN ( ): [(1,), (3,)]
OperationalError: incomplete input
かっこ無しでは「A の全員」または「B で30歳以上」と読まれ、20歳の1番も入りました。最後の行は WHERE (dept = 'A' と閉じ忘れたときのエラーです。AND・OR の優先順位は、関連記事「SQL WHEREの複数条件|AND・ORの優先順位とかっこ・NOTの書き方」で扱っています。
HTML と Markdown
- HTML の < > はタグの囲みです。本文に < を文字として書くときは
<、> は>と書きます。Python のhtml.escape('<b>太字</b> と a < b')は<b>太字</b> と a < bを返しました。英語版 Wikipedia も、HTML のタグでは Unicode の山括弧(〈 や ⟨)ではなく半角の不等号だけが認められる例を挙げています。 - Markdown の [ ] はリンクの文字、( ) はリンク先です。
[RJC](https://www.r-jc.jp/)の形で書き、は画像になります。チェックボックスは- [ ]と- [x]です。
Markdown の記法と環境ごとの違いは、関連記事「Markdownの書き方一覧|記法早見表と環境別の対応・変換結果つき」で扱っています。
数学と文章の括弧(入れ子の順番・区間・句点の打ち方)
この節では、数学での括弧の使い方と、日本語の文章で括弧と句点をどう組み合わせるかが分かります。
数学の括弧
数式の括弧は、日本の教科書では内側から ( ) → { } → [ ] の順に重ねます。ただしプログラムに書き写すときは、全部を ( ) にします。[ ] や { } は、多くの言語で別の意味(リスト・集合など)を持つからです。
$ python3 -c 'print(2 * (3 + (4 - (1 + 1)) * 5))'
26
$ python3 -c 'x = [4 - (1 + 1)]; print(x, type(x).__name__); print({3 + 1}, type({3 + 1}).__name__)'
[2] list
{4} set
$ python3 math.py # print(2 * {3 + [4 - (1 + 1)] * 5})
TypeError: unsupported operand type(s) for +: 'int' and 'list'
教科書の書き方のまま 2 * {3 + [4 - (1 + 1)] * 5} と書くと、Python は [ ] をリスト、{ } を集合と読み、文法エラーではなく型のエラーになりました。
| 書き方 | 数学での意味 | 例 |
|---|---|---|
| [a, b] | 閉区間(a 以上 b 以下) | [0, 1] は 0 も 1 も含む |
| (a, b) | 開区間(a より大きく b より小さい)。座標・組にも使う | (0, 1) は 0 も 1 も含まない |
| [a, b) | 半開区間(a 以上 b 未満) | Python の range(a, b) と同じ範囲 |
| [x] | ガウス記号(x を超えない最大の整数) | [3.7] = 3、[−3.7] = −4 |
| { … } | 集合 | {1, 2, 3} |
| ⟨a, b⟩ | 内積・組 | ⟨u, v⟩ |
ガウス記号はプログラムでは floor(床関数)にあたります。手元では math.floor(-3.7) が -4、int(-3.7) が -3 で、負の数では結果が違いました。
文章の括弧と句点(公用文作成の考え方)
文化審議会の建議「公用文作成の考え方」(令和4年1月7日)は、括弧について次の考え方を示しています。
- 括弧は ( )(丸括弧)と「 」(かぎ括弧)を基本とし、括弧の中でさらに括弧を使うときは、そのまま重ねて使う。解説・広報などでは「 」の中で『 』を使うこともある。
- 【 】(隅付き括弧)は、項目を示したり、強調すべき点を目立たせたりするのに使う。
- 括弧の中で文が終わるときは、閉じ括弧の前に句点(。)を打つ。ただし、引用、名詞や語としての使用、強調、日付などに括弧を使うときは打たない。
- 文の一部への注釈なら、閉じ括弧のあとに句点を打つ。建議の解説の例は「当事業は一時休止を決定した。ただし、年内にも再開を予定している(日程は未定である。)。」。
新聞・出版・社内の表記の決まりでは、括弧の中の句点を省くものもあります。どちらにするかは所属先の決まりに合わせ、1つの文書の中ではそろえます。
どの括弧を使うかの判断表
| したいこと | 使う括弧 | 注意 |
|---|---|---|
| 読み方・補足・略語の元を書く | ( ) | 日本語の文の中は全角、英文の中は半角 |
| 会話・引用・語を目立たせる | 「 」 | 中で引用を重ねるなら『 』 |
| 書名・作品名 | 『 』 | 英語ではイタリック体にすることが多い |
| 見出し・項目名・お知らせの強調 | 【 】 | 多用すると目立たなくなる |
| 引用文に自分の補足を入れる | 〔 〕(英語では [ ]) | 元の文の括弧と区別する |
| プログラム・数式・コマンド | 半角の ( ) [ ] { } < > | 全角は使わない |
| 入力欄の書き方の説明 | <ファイル名> や [オプション] | < > は必須、[ ] は省略可の意味で使う慣習が多い |
全角括弧と半角括弧の違い(文字コードと置き換え方)
この節では、全角と半角の括弧が別の文字であることと、プログラムに紛れ込んだ全角の括弧を見つけて直す方法が分かります。
全角の( と半角の ( は、見た目が似ているだけの別の文字です。半角の ( は U+0028 で1バイト、全角の( は U+FF08 で UTF-8 では3バイトです。プログラムは半角の括弧しか括弧として読まないので、全角が入ると次のエラーになりました。
$ python3 e4.py # print("hello")
File "/srv/s4/r17/t168/exp/e4.py", line 1
print("hello")
^
SyntaxError: invalid character '(' (U+FF08)
$ node j4.js # console.log("hi");
/srv/s4/r17/t168/exp/j4.js:1
console.log("hi");
SyntaxError: Invalid or unexpected token
$ javac E3.java # System.out.println("hi");
E3.java:3: error: illegal character: '('
System.out.println("hi");
^
E3.java:3: error: not a statement
E3.java:3: error: illegal character: ')'
3 errors
Python は文字と番号(U+FF08)まで出しますが、Node.js は「Invalid or unexpected token」だけで、どの文字かを示しませんでした。Node.js でこの文言が出たら、まず全角の括弧・空白・引用符を疑います。
全角の括弧を探して直す
全角の括弧がある行を探す
GNU grep の -P で文字の番号を指定して探す。手元では3つのファイルの該当行が出た。
括弧だけを半角に置き換える
Python の str.translate で()[]{}の6文字だけを ( ) [ ] { } に置き換える。文字列の中身は変えない。
NFKC は文字列の中まで変わると知っておく
Unicode の正規化 NFKC でも全角の括弧は半角になるが、表示用の文字列「ABC(株)」まで「ABC(株)」に変わる。
実行し直して確かめる
置き換えたあとに実行し、エラーが消えたことを確かめる。日本語入力をオフにしてからコードを書く習慣にする。
$ grep -n -P '[\x{FF08}\x{FF09}\x{FF3B}\x{FF3D}\x{FF5B}\x{FF5D}]' e4.py j4.js e5.json py_ok.py
e4.py:1:print("hello")
j4.js:1:console.log("hi");
e5.json:1:("tags": ["SES"])
$ python3 -c 'import sys; s=open(sys.argv[1]).read(); print(s.translate(str.maketrans("()[]{}","()[]{}")), end="")' e4.py
print("hello")
$ python3 -c 'import unicodedata as u; s="print(\"ABC(株)\")"; print(u.normalize("NFKC", s))'
print("ABC(株)")
文字コードの表で見たとおり、日本語用の〈 〉「 」【 】は NFKC でも変わりません。半角に対応する文字が無いためです。
括弧の入力方法(キーボード配列・変換・スマホ)
この節では、日本語配列と英語配列のキーボードで括弧を打つキーと、かぎ括弧などを変換で出す方法が分かります。
日本語配列(JIS)のキーボードでは、( ) は Shift+8 と Shift+9、[ ] は「@」と「:」それぞれの右にあるキー、{ } はその2つのキーに Shift です。英語配列(US)では ( ) が Shift+9 と Shift+0 で、1つずつずれています。Ubuntu の XKB のキー配置データ(jp と us)で確かめた位置です。
| 括弧 | 日本語配列(JIS) | 英語配列(US) | 日本語入力オンのとき |
|---|---|---|---|
| ( ) | Shift+8 / Shift+9 | Shift+9 / Shift+0 | 全角の( )になることが多い |
| [ ] | @ の右のキー / : の右のキー | P の右の2つのキー | 「 」になる(かな入力でも同じキー) |
| { } | Shift+(@ の右) / Shift+(: の右) | Shift+(P の右の2つ) | 全角の{ } |
| < > | Shift+「,」 / Shift+「.」 | Shift+「,」 / Shift+「.」 | 全角の< > |
XKB の jp 配列の定義では、かな入力のときの [ ] の位置のキーに kana_openingbracket(U+300C「)と kana_closingbracket(U+300D」)が割り当てられていました。日本語入力をオンにして [ ] のキーを押すと「 」になるのはこのためです。
/usr/share/X11/xkb/symbols/jp("common")
key <AE08> {[ 8, parenleft ]};
key <AE09> {[ 9, parenright ]};
key <AD12> {[ bracketleft, braceleft ]};
key <AC12> {[ bracketright, braceright ]};
/usr/share/X11/xkb/symbols/us("basic")
key <AE09> {[ 9, parenleft ]};
key <AE10> {[ 0, parenright ]};
key <AD11> {[ bracketleft, braceleft ]};
key <AD12> {[ bracketright, braceright ]};
【 】や『 』を変換で出す
キーに無い括弧は、読みを打って変換します。Google 日本語入力のオープンソース版 Mozc の記号辞書(symbol.tsv)では、次の読みに括弧が登録されていました。
| 打つ読み | 候補に出る括弧(Mozc の辞書) |
|---|---|
| かっこ | ( )〔 〕[ ]{ }〈 〉《 》「 」『 』【 】など |
| かぎかっこ | 「 」『 』 |
| かくかっこ | [ ]〚 〛 |
| なみかっこ | { } |
| やまかっこ | 〈 〉《 》« » ‹ › |
| こうかっこ | 〔 〕〘 〙 |
Mozc の辞書では、【 】は「かっこ」の読みだけに登録されていて、「すみつき」の読みはありませんでした。Windows の Microsoft IME・Mac の日本語入力・スマホのキーボードも読みからの変換で括弧を出せますが、出る候補と並び順は製品と版で違うため、この記事では候補の一覧を Mozc の辞書でだけ確かめています。スマホも、日本語キーボードで「かっこ」と打ち、変換候補から選ぶのが手順として分かりやすい方法です。
- 1コードを書く前に日本語入力をオフにするオンのまま [ を押すと「 になり、( は全角の( になりやすい
- 2キーボードの配列を確かめるJIS と US では ( ) の位置が1つずれる。OS の設定と刻印が違うと別の記号が出る
- 3文章の【 】は「かっこ」で変換するMozc の辞書では「すみつき」の読みは登録されていなかった
- 4エディターで対応する括弧の色分けを使うVS Code は editor.bracketPairColorization.enabled で対になる括弧を色分けできる
対応の取れていない括弧のエラー原文と直し方
この節では、括弧の閉じ忘れ・閉じすぎ・種類違いで各言語が出すエラーの原文と、症状から原因を探す手順が分かります。
括弧のエラーは、エラーが出た行より前で括弧を開いたまま、ということがよくあります。表示された行だけを見ても原因が無いときは、上の行の開き括弧を数えます。
$ python3 e1.py # print("hello"
SyntaxError: '(' was never closed
$ python3 e2.py # x = [1, 2, 3)
SyntaxError: closing parenthesis ')' does not match opening parenthesis '['
$ python3 e3.py # x = (1 + 2))
SyntaxError: unmatched ')'
$ python3 e6.py # 2行目の return [1, を閉じずに次の def へ
File "/srv/s4/r17/t168/exp/e6.py", line 2
return [1,
^
SyntaxError: '[' was never closed
$ node j1.js # console.log("hello"
SyntaxError: missing ) after argument list
$ node j3.js # if (true) { … の } が無い
/srv/s4/r17/t168/exp/j3.js:3
SyntaxError: Unexpected end of input
$ javac E1.java # System.out.println("hi";
E1.java:3: error: ')' or ',' expected
$ javac E2.java # クラスの最後の } が無い
E2.java:4: error: reached end of file while parsing
$ gcc e1.c # printf("hi\n";
e1.c:3:18: error: expected ‘)’ before ‘;’ token
$ gcc e2.c # main の最後の } が無い
e2.c:4:5: error: expected declaration or statement at end of input
$ rustc e1.rs # let v = vec![1, 2, 3);
error: mismatched closing delimiter: `)`
--> e1.rs:2:17
|
2 | let v = vec![1, 2, 3);
| ^ ^ mismatched closing delimiter
| |
| unclosed delimiter
$ go run e/e.go # fmt.Println("hi" の ) が無い
e/e.go:6:18: syntax error: unexpected newline in argument list; possibly missing comma or )
Python 3.13 と Rust は、開いた括弧の位置まで示しました。Node.js と Java は「最後まで読んだが閉じていない」としか出さず、場所はファイルの最後の行になります。
よくあるエラーと直し方(症状→原因→直し方)
| 症状(エラー原文) | 原因 | 直し方 |
|---|---|---|
'(' was never closed(Python) |
開いた ( を閉じていない | 示された ( から対になる ) を足す |
closing parenthesis ')' does not match opening parenthesis '[' |
[ を ) で閉じた。種類違い | 開きと同じ種類の閉じ括弧にする |
unmatched ')'・Unexpected token ')' |
閉じ括弧が1つ多い | 余分な閉じ括弧を消す |
Unexpected end of input・reached end of file while parsing |
{ を閉じないままファイルが終わった | インデントをそろえて、どの { が閉じていないか探す |
invalid character '(' (U+FF08)・Invalid or unexpected token |
全角の括弧が入っている | 半角に置き換え、日本語入力をオフにして書く |
[: missing `]'(bash) |
] の前に空白が無い | [ "$x" -gt 3 ] のように両側に空白 |
syntax error near unexpected token `}'(bash) |
{ の直後に空白が無い | { echo hi; } の形にする |
Objects must consist of key:value pairs(jq) |
JSON の [ を } で閉じた | [ は ]、{ は } で閉じる |
| エラーは出ないが値が違う | アロー関数の { }・マクロの括弧不足・数式の [ ] | 丸括弧で式の範囲をはっきりさせる |
括弧の対応を自分で確かめる小さなスクリプト
エラーの場所が分かりにくいときのために、開き括弧をスタック(積み上げ)に入れ、閉じ括弧で取り出して種類を比べるスクリプトを書いて試しました。文字列やコメントの中の括弧も数える簡易版なので、目安として使います。
import sys
PAIRS = {")": "(", "]": "[", "}": "{"}
def check(text):
stack = []
for ln, line in enumerate(text.splitlines(), 1):
for col, ch in enumerate(line, 1):
if ch in "([{":
stack.append((ch, ln, col))
elif ch in PAIRS:
if not stack:
return f"{ln}行{col}列: 閉じ '{ch}' に対応する開きがありません"
op, l2, c2 = stack.pop()
if op != PAIRS[ch]:
return f"{ln}行{col}列: '{ch}' が {l2}行{c2}列の '{op}' と合いません"
elif ch in "()[]{}":
return f"{ln}行{col}列: 全角の '{ch}' (U+{ord(ch):04X}) があります"
if stack:
op, l2, c2 = stack[-1]
return f"{l2}行{c2}列の '{op}' が閉じられていません(残り {len(stack)} 個)"
return "OK: 括弧の対応は取れています"
for path in sys.argv[1:]:
print(path, "→", check(open(path, encoding="utf-8").read()))
$ python3 brackets.py py_ok.py e2.py e3.py e4.py e6.py j3.js e1.json e4.sh
py_ok.py → OK: 括弧の対応は取れています
e2.py → 1行13列: ')' が 1行5列の '[' と合いません
e3.py → 1行12列: 閉じ ')' に対応する開きがありません
e4.py → 1行6列: 全角の '(' (U+FF08) があります
e6.py → 2行12列の '[' が閉じられていません(残り 1 個)
j3.js → 1行11列の '{' が閉じられていません(残り 1 個)
e1.json → 1行22列: '}' が 1行10列の '[' と合いません
e4.sh → 1行7列の '(' が閉じられていません(残り 1 個)
Node.js が「3行目で入力が終わった」としか言わなかった j3.js も、このスクリプトでは「1行11列の { が閉じられていない」と開いた位置が分かりました。
括弧のエラーを探す順番
- 1エラーの行と列を見るPython・Rust は開いた括弧の位置まで出す
- 2全角の括弧が無いか探すgrep -P で U+FF08 などを探す
- 3その行より上の開き括弧を数える「end of input」系は最後の行に出るので上を見る
- 4エディターで対応する括弧へ飛ぶVS Code は Ctrl+Shift+\(Mac は ⇧⌘\)
- 5インデントを自動整形するずれた位置が閉じ忘れの場所
- 6エラーが出ないのに値が違うなら括弧の意味を疑うアロー関数の { }、マクロ、数式の [ ] { }
VS Code の公式ドキュメントは、カーソルが括弧の近くにあると対になる括弧が強調表示されること、対になる括弧へ Ctrl+Shift+\(Mac は ⇧⌘\)で移動できること、editor.bracketPairColorization.enabled で対になる括弧を色分けできること(最大6色)を説明しています。
よくある質問
Q. ブラケットとは何ですか? A. 文字を左右から囲む括弧の英語名(bracket)です。プログラミングでは主に角括弧 [ ] を指します。建築・家具では、壁から突き出して棚や照明を支える金具のことです。
Q. ブラケットとパーレン(パーレンシス)の違いは? A. ブラケットは角括弧 [ ]、パーレンは丸括弧 ( ) です。英語の parenthesis(複数形 parentheses)を略してパーレンと呼びます。イギリス英語では brackets だけで丸括弧を指すため、英語の資料では文脈で確かめます。
Q. 角括弧と大括弧は同じですか? A. 同じ [ ] です。大括弧は、数式で内側から ( ) → { } → [ ] と重ねる順番から来た呼び方です。順番は国や分野で違うことがあるので、形で呼ぶ角括弧のほうが誤解がありません。
Q. 波括弧(中括弧){ } は英語で何と言いますか? A. braces または curly brackets です。日本の開発者の間では「ブレース」「カーリーブラケット」とも呼びます。
Q. < > は括弧ですか? A. 半角の < > は文字としては不等号(LESS-THAN SIGN・GREATER-THAN SIGN)です。HTML のタグや Java の型引数で山括弧として使われています。日本語の文章で使う山括弧〈 〉は U+3008 の別の文字です。
Q. 【 】の名前と出し方は? A. 隅付き括弧(墨付き括弧とも)と呼びます。キーボードには無いので、「かっこ」と打って変換します。Mozc の辞書では「すみつき」の読みは登録されていませんでした。
Q. キーボードで [ ] を打つとかぎ括弧「 」になります。 A. 日本語入力がオンになっています。日本語入力をオフにすると半角の [ ] が出ます。かな入力の配列では、同じキーに「 」が割り当てられています。
Q. 括弧の中の文に句点は付けますか? A. 公用文作成の考え方では、括弧の中で文が終わるなら閉じ括弧の前に句点を打ち、引用や語・日付を囲むときは打たないとしています。社内や媒体の表記の決まりがあれば、それに合わせます。
Q. 「SyntaxError: '(' was never closed」はどう直しますか? A. 示された ( を閉じる ) が無いという意味です。その行から下を見て、対になる ) を足します。複数行にまたがる式では、閉じ忘れたまま次の行の def などでエラーになることがあります。
Q. Python で空の集合を {} で作れないのはなぜですか?
A. 空の {} は辞書を作る決まりだからです。手元でも type({}) は dict でした。空の集合は set() で作ります。
Q. プログラムの数式に [ ] や { } を使えますか? A. 多くの言語では使えません。Python では [ ] がリスト、{ } が集合になり、手元では TypeError になりました。計算の優先を示す括弧はすべて ( ) で書きます。
まとめ
- ブラケットは括弧の英語名。プログラミングでは主に角括弧 [ ] を指し、( ) はパーレン、{ } はブレースと呼び分ける。建築では支え金具のこと。
- プログラムの括弧は、( ) が呼び出しと優先、[ ] が配列と添字、{ } がブロックと辞書、< > が型引数。ただし言語ごとに例外があり、Go と Python は型引数に [ ] を使う。
- エラーにならずに値が変わる括弧の誤りがある。手元では
() => { n: 1 }が undefined、括弧の無い C のマクロが 9 ではなく 5、数式の [ ] { } が Python で TypeError になった。 - 全角の括弧は別の文字(U+FF08 など)で、Python は文字番号まで、Node.js は「Invalid or unexpected token」だけを出した。grep -P で探し、括弧だけを置き換える。
- 閉じ忘れは、エラーの行より上で開いたままのことが多い。Python・Rust は開いた位置を示し、Node.js・Java はファイルの最後を示した。エディターの対応表示と小さなチェック用スクリプトで場所を絞る。
参考・出典
確認日:2026年10月29日
- デジタル大辞泉「ブラケット」(Weblio 辞書に掲載):https://www.weblio.jp/content/Bracket
- Wikipedia「Bracket」(英語版):https://en.wikipedia.org/wiki/Bracket
- 文化審議会「公用文作成の考え方(建議)」令和4年1月7日:https://www.bunka.go.jp/seisaku/bunkashingikai/kokugo/hokoku/pdf/93731901_01.pdf
- Visual Studio Code「Code Navigation」(Bracket matching・Bracket Pair Colorization):https://code.visualstudio.com/docs/editing/editingevolved
- Mozc(Google 日本語入力のオープンソース版)記号辞書 symbol.tsv:https://github.com/google/mozc/blob/master/src/data/symbol/symbol.tsv
- Ubuntu 24.04 の XKB キー配置データ:/usr/share/X11/xkb/symbols/jp・/usr/share/X11/xkb/symbols/us(xkb-data パッケージ)
- Python「unicodedata — Unicode データベース」:https://docs.python.org/ja/3/library/unicodedata.html
- Python「re — 正規表現操作」:https://docs.python.org/ja/3/library/re.html
- SQLite「SQLite Keywords」([ ] での識別子の囲み):https://www.sqlite.org/lang_keywords.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「ブラケットとは?括弧の種類と呼び方一覧|[]{}()の意味・入力・エラー原文」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。