セミコロンは必要?不要?—言語ごとのルールと本当の意味を徹底解説!

こんにちは。ゆうせいです。
プログラミングを始めたばかりの方からよく聞かれる質問のひとつに、
「行末のセミコロンって、書かなきゃダメ?」があります。
たしかに、セミコロン(;
)をつける言語もあれば、書かなくても動く言語もありますよね。
しかも、書かなくても動くのにLintツールでは怒られるなんてことも…。
今回は、「行末のセミコロン」の意味と役割、そして言語ごとの考え方の違いについて、しっかりわかりやすく解説します!
セミコロンの役割ってなに?
まずは基本からおさらいです。
セミコロン(;
)は、「文の終わり」を示す記号です。
たとえば、英語で言えば「.(ピリオド)」のようなもの。
ただし、プログラミング言語では次のような意味があります:
セミコロン=“ここで文が終わる”ことを明示する記号
例(JavaScript):
let a = 1;
let b = 2;
これで「aに1を代入する」「bに2を代入する」という2つの文であることが明確になります。
言語ごとに異なるセミコロンの扱い
ここが一番混乱しやすいところです。
実は、言語によってセミコロンの扱いが大きく異なります!
言語 | セミコロンの扱い | 備考 |
---|---|---|
C / C++ / Java | 必須 | 書かなければコンパイルエラー |
JavaScript | 省略可能(ASIにより自動挿入される) | ただし、省略が原因でバグになることも |
TypeScript | 省略可能(基本はJSと同様) | Linterの設定により強制されることが多い |
Python | 不要(むしろ書かない) | 複数文を書く場合に限って使うことがある |
Ruby | 不要(書くこともできる) | 読みやすさを優先 |
Go | 必須(ただしgofmt で自動挿入) | 手書きではなくても自動で付けてくれる |
Swift | 不要(書いてもOK) | 一行に複数文を書く場合は必要 |
JavaScriptで省略するとどうなる?—ASIの落とし穴
JavaScriptは「Automatic Semicolon Insertion(ASI)」という仕組みにより、セミコロンを自動補完してくれます。
でも、これが曲者なんです。
例:セミコロン省略によるバグ
// セミコロンを省略
const func = () => {
return
{
name: "Yusei"
};
};
console.log(func()); // → undefined になる!
なぜ?
JavaScriptは return
のあとにセミコロンを自動で挿入してしまうため、return;
で終了と判断 → { name: "Yusei" }
は実行されない。
つまり、省略したことで意図しない動作になることがあるんです。
Pythonではセミコロンが要らない理由
Pythonでは、インデント(字下げ)と改行が「文の区切り」になります。
例:
x = 5
y = 10
print(x + y)
セミコロンは基本使いませんが、1行に複数の文を書く場合のみ例外的に使えます。
x = 5; y = 10; print(x + y)
ただし、可読性が下がるので、普通は使いません!
LinterやFormatterはセミコロンについてどう判断する?
ツールによってもセミコロンの扱いは変わります。
ESLint(JavaScript/TypeScriptのLinter):
semi: ["error", "always"]
→ セミコロン必須semi: ["error", "never"]
→ セミコロン禁止
つまり、チームやプロジェクトの方針に応じて統一できるんです。
Prettier(Formatter):
- デフォルトではセミコロンを付けます(
semi: true
) semi: false
で省略派にも対応可能
結論:セミコロンは「言語のルール」に従うのが正解!
- C言語などでは必須。書かないと動きません。
- JavaScriptなどでは省略可能だが、意図しないバグが起こることも。
- PythonやRubyでは不要。可読性を優先。
セミコロンを「つけるかどうか」は、
好みではなく、言語の仕様+チームルールで判断することが重要です!
今後の学習の指針
次のステップとしては、「その言語の公式スタイルガイドを読む」ことをおすすめします。
例えば:
- JavaScriptなら「Airbnbスタイルガイド」
- Pythonなら「PEP8」
- Goなら「Effective Go」
さらに、PrettierやESLint、Blackなどのツールを導入し、スタイルを自動化することで、
書き方の迷いやミスをグッと減らせます!
他にも「これは書くべき?省略していい?」といった書き方の悩みがあれば、いつでも聞いてくださいね。もっと掘り下げて解説していきますよ!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
