Pythonで文字列(テキスト)を扱うとき、'Hello'
と書いても"Hello"
と書いても、どちらもエラーになりません。
「えっ、どっちを使えばいいの?」
「違いがあるの?」
と戸惑ったことはありませんか?
実は、シングルクオーテーション(’)とダブルクオーテーション(”)には明確な違いがほとんどないのです。
ですが、コードを読みやすく、バグを防ぐための”使い分けのコツ”**は存在します。
この記事では、Pythonにおけるクオーテーションの違い・使い分け・注意点を、初心者にも分かりやすく解説します。
基本:シングルもダブルも、どちらも文字列を表す

まったく同じ意味です
Pythonでは、以下の2つはまったく同じ意味になります。
コード例
message1 = 'こんにちは'
message2 = "こんにちは"
print(message1)
print(message2)
print(message1 == message2) # 比較してみる
結果
こんにちは
こんにちは
True
説明:どちらも「こんにちは」という文字列を表すコードです。Pythonはどちらのクオーテーションも同等に扱います。
他のプログラミング言語との違い
Pythonの場合
# どちらも文字列
text1 = 'Hello' # 文字列
text2 = "Hello" # 文字列(上と同じ)
他の言語の例(参考)
// JavaScriptでも同じ
var text1 = 'Hello'; // 文字列
var text2 = "Hello"; // 文字列(上と同じ)
// C言語では違う
char text1 = 'H'; // 文字(1文字だけ)
char* text2 = "Hello"; // 文字列
説明:Pythonでは、シングルでもダブルでも「文字列」として扱われます。
なぜ2種類あるの?
それは、文字列の中にクオーテーションを含めたいときに便利だからです。次の章で詳しく見ていきましょう。
使い分けの基本:文字列の中にクオーテーションを含めたいとき
日本語の場合
文字列の中に「」を含めたい場合
# 日本語の引用符を含む場合
quote = '彼は「Pythonが好きです」と言いました。'
print(quote)
結果
彼は「Pythonが好きです」と言いました。
英語の場合
文字列の中にアポストロフィ(’)を含めたい場合
# 英語のアポストロフィを含む場合
sentence = "It's a beautiful day!"
print(sentence)
another_example = "I can't believe it!"
print(another_example)
結果
It's a beautiful day!
I can't believe it!
文字列の中にダブルクオーテーション(”)を含めたい場合
# 英語の引用符を含む場合
quote = 'He said, "Python is awesome!"'
print(quote)
dialogue = 'She asked, "What time is it?"'
print(dialogue)
結果
He said, "Python is awesome!"
She asked, "What time is it?"
エラーになる例
間違った使い方
# これはエラーになります
sentence = 'It's a beautiful day!' # アポストロフィで文字列が終了してしまう
エラーメッセージ
SyntaxError: invalid syntax
説明:'It'
の部分で文字列が終わってしまい、残りのs a beautiful day!'
が不正な構文として扱われます。
正しい使い方の例
複雑な文章での使い分け
# セリフや引用が多い文章
story = 'Tom said, "I\'ll be there at 5 o\'clock." But Mary replied, "That\'s too late!"'
print(story)
# 読みやすく書くなら
story_better = "Tom said, \"I'll be there at 5 o'clock.\" But Mary replied, \"That's too late!\""
print(story_better)
# さらに読みやすく(使い分けを活用)
tom_quote = "I'll be there at 5 o'clock."
mary_quote = "That's too late!"
story_best = f'Tom said, "{tom_quote}" But Mary replied, "{mary_quote}"'
print(story_best)
エスケープシーケンス:同じ種類を使いたいとき

エスケープとは?
エスケープシーケンスとは、バックスラッシュ(\)を使って、「これは特別な文字ですよ」という意味を表す方法です。
シングルクオーテーション内でアポストロフィを使う
コード例
# アポストロフィをエスケープ
sentence = 'It\'s a beautiful day!'
print(sentence)
# 複数のアポストロフィ
text = 'We can\'t do it, but we won\'t give up!'
print(text)
結果
It's a beautiful day!
We can't do it, but we won't give up!
ダブルクオーテーション内でダブルクオーテーションを使う
コード例
# ダブルクオーテーションをエスケープ
quote = "He said, \"Python is awesome!\""
print(quote)
# HTMLのコード例
html = "<div class=\"container\">Hello</div>"
print(html)
結果
He said, "Python is awesome!"
<div class="container">Hello</div>
その他のエスケープシーケンス
よく使うエスケープシーケンス
# 改行
text_with_newline = "1行目\n2行目\n3行目"
print(text_with_newline)
# タブ
text_with_tab = "名前\t年齢\t職業"
print(text_with_tab)
# バックスラッシュ自体
path = "C:\\Users\\Desktop\\file.txt"
print(path)
# バックスペース(前の文字を削除)
text_with_backspace = "Hello\bWorld"
print(text_with_backspace)
結果
1行目
2行目
3行目
名前 年齢 職業
C:\Users\Desktop\file.txt
HellWorld
raw文字列:エスケープを無効にする
コード例
# 通常の文字列(エスケープが有効)
normal_path = "C:\\Users\\Desktop\\file.txt"
print("通常:", normal_path)
# raw文字列(エスケープが無効)
raw_path = r"C:\Users\Desktop\file.txt"
print("raw:", raw_path)
# 正規表現でよく使われる
import re
pattern = r"\d{3}-\d{4}-\d{4}" # 電話番号のパターン
print("正規表現:", pattern)
結果
通常: C:\Users\Desktop\file.txt
raw: C:\Users\Desktop\file.txt
正規表現: \d{3}-\d{4}-\d{4}
説明:r
を付けると、バックスラッシュをそのまま文字として扱います。
コードの読みやすさを重視した使い分けルール
PEP8での推奨事項
Pythonのスタイルガイド「PEP8」では、どちらを使ってもOKとされていますが、「一貫性が大事」とも書かれています。
実践的なおすすめルール
1. 文字列の内容に応じて選ぶ
# 英語が多いプロジェクト → ダブルクオーテーション
greeting = "Hello, how are you?"
response = "I'm fine, thank you!"
# 日本語が多いプロジェクト → シングルクオーテーション
あいさつ = 'こんにちは、元気ですか?'
返事 = 'はい、元気です!'
2. HTML・JSONが多い場合
# HTMLではダブルクオーテーションが一般的
html_template = '<div class="container">Content</div>'
# JSONでもダブルクオーテーションが標準
json_data = '{"name": "田中", "age": 25}'
3. SQL文の場合
# SQLではシングルクオーテーションが一般的
sql_query = "SELECT * FROM users WHERE name = 'Tanaka'"
チーム開発でのルール統一
設定ファイルで統一(.editorconfig)
[*.py]
quote_style = "single" # または "double"
自動整形ツールの活用
# Blackを使った自動整形
# インストール: pip install black
# 実行: black your_file.py
# 設定例(pyproject.toml)
[tool.black]
line-length = 88 target-version = ['py38'] include = '\.pyi?$'
Prettierとの併用
{
"singleQuote": true,
"trailingComma": "es5"
}
複数行文字列:トリプルクオーテーションの活用

基本的な使い方
シングルトリプル
long_text = '''これは
複数行に
またがるテキストです。
改行も自動で保持されます。'''
print(long_text)
ダブルトリプル
html_template = """
<html>
<head>
<title>タイトル</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>これはサンプルです。</p>
</body>
</html>
"""
print(html_template)
結果
これは
複数行に
またがるテキストです。
改行も自動で保持されます。
<html>
<head>
<title>タイトル</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>これはサンプルです。</p>
</body>
</html>
実用的な使用例
SQL文の記述
query = """
SELECT
u.name,
u.email,
p.title as post_title
FROM users u
LEFT JOIN posts p ON u.id = p.user_id
WHERE u.created_at >= '2025-01-01'
ORDER BY u.name
"""
print(query)
JSONデータの定義
sample_data = """
{
"users": [
{
"id": 1,
"name": "田中太郎",
"email": "tanaka@example.com"
},
{
"id": 2,
"name": "佐藤花子",
"email": "sato@example.com"
}
]
}
"""
import json
data = json.loads(sample_data)
print(data)
ドキュメント文字列(docstring)
def calculate_area(width, height):
"""
長方形の面積を計算する関数
Args:
width (float): 幅
height (float): 高さ
Returns:
float: 面積
Example:
>>> calculate_area(3, 4)
12
"""
return width * height
# docstringの確認
print(calculate_area.__doc__)
トリプルクオーテーション内でのクオーテーション使用
どちらの種類も自由に使える
mixed_quotes = '''
彼は「こんにちは」と言った。
She said, "How are you?"
It's a beautiful day!
"Absolutely!" he replied.
'''
print(mixed_quotes)
結果
彼は「こんにちは」と言った。
She said, "How are you?"
It's a beautiful day!
"Absolutely!" he replied.
実践的な活用例とベストプラクティス
プロジェクトでの統一ルール例
ルール1:内容重視型
# 英語の文章 → ダブルクオーテーション
english_text = "Welcome to our website!"
error_message = "An error occurred. Please try again."
# 日本語の文章 → シングルクオーテーション
japanese_text = 'ウェブサイトへようこそ!'
error_message_jp = 'エラーが発生しました。再度お試しください。'
# プログラムの識別子 → シングルクオーテーション
user_id = 'user_123'
status = 'active'
ルール2:一律統一型
# 全てシングルクオーテーションで統一
message = 'Hello, World!'
description = 'This is a sample text.'
html_class = 'container main-content'
# エスケープが必要な場合のみ使い分け
english_quote = "It's a beautiful day!" # アポストロフィがあるため
パフォーマンスの比較
速度テスト
import timeit
# シングルクオーテーション
single_time = timeit.timeit(
"text = 'Hello, World!'",
number=1000000
)
# ダブルクオーテーション
double_time = timeit.timeit(
'text = "Hello, World!"',
number=1000000
)
print(f"シングル: {single_time:.6f}秒")
print(f"ダブル: {double_time:.6f}秒")
print(f"差: {abs(single_time - double_time):.6f}秒")
説明:実際のパフォーマンス差はほとんどありません。
ツールを使った自動統一
Black(自動整形ツール)
# Blackのインストールと実行
# pip install black
# black your_file.py
# 設定ファイル(pyproject.toml)
[tool.black]
line-length = 88 target-version = ['py39'] string-normalization = true # 文字列を統一
Flake8(静的解析ツール)
# Flake8でクオーテーションスタイルをチェック
# pip install flake8
# flake8 your_file.py
# 設定ファイル(.flake8)
[flake8]
max-line-length = 88 extend-ignore = E203, W503
pre-commit(コミット前チェック)
# .pre-commit-config.yaml
repos:
- repo: https://github.com/psf/black
rev: 22.3.0
hooks:
- id: black
language_version: python3
よくある間違いと対処法

間違い1:クオーテーションの不一致
悪い例
# 開始と終了が違う
text = 'Hello" # SyntaxError
message = "World' # SyntaxError
良い例
# 開始と終了を合わせる
text = 'Hello'
message = "World"
間違い2:エスケープの忘れ
悪い例
# エスケープが必要なのに忘れている
path = 'C:\new\folder' # \nが改行文字として解釈される
print(path) # C:
# ew\folder
良い例
# raw文字列を使用
path = r'C:\new\folder'
print(path) # C:\new\folder
# またはエスケープ
path = 'C:\\new\\folder'
print(path) # C:\new\folder
間違い3:トリプルクオーテーションの誤用
悪い例
# 単純な文字列にトリプルクオーテーションは不要
simple_text = """Hello""" # 過剰
良い例
# 単純な文字列
simple_text = "Hello"
# 複数行が必要な場合のみトリプルクオーテーション
multi_line = """
Line 1
Line 2
Line 3
"""
デバッグのコツ
文字列の内容を確認
# repr()で実際の文字列を確認
text = "Hello\nWorld"
print(text) # Hello
# World
print(repr(text)) # 'Hello\nWorld'
# 文字列の長さを確認
print(len(text)) # 11(\nも1文字として数える)
まとめ:使い分けをマスターして読みやすいコードを書こう!
重要なポイント
基本的な理解
'文字列'
も"文字列"
もPythonでは同じ意味- パフォーマンスの差はほとんどない
- 選択は主に可読性とメンテナンス性の問題
使い分けのコツ
- 文字列の内容に応じて外側のクオーテーションを選ぶ
- アポストロフィが多い → ダブルクオーテーションで囲む
- ダブルクオーテーションが多い → シングルクオーテーションで囲む
- 複数行 → トリプルクオーテーション
チーム開発での重要性
- プロジェクト内での一貫性を保つ
- 自動整形ツールを活用する
- コードレビューで統一性をチェック
実践での選択指針
状況 | 推奨 | 理由 |
---|---|---|
英語が多いプロジェクト | " | アポストロフィが頻出 |
日本語が多いプロジェクト | ' | 英語の引用符が少ない |
HTMLテンプレート | ' | HTML属性のダブルクオーテーション |
JSON文字列 | ' | JSON内のダブルクオーテーション |
SQL文 | " | SQL内のシングルクオーテーション |
複数行テキスト | ''' または""" | 改行を含む長いテキスト |
コメント