🔤

シングルクォートかダブルクォートか

2025/03/03に公開2

シングルクォートかダブルクォートか

はじめに

フロントエンド開発において、一見些細に思えるコード規約の問題が、チーム開発では意外と大きな議論になることがある。特にシングルクォート(')とダブルクォート(")のどちらを使うべきかという問題は、Next.js や React のプロジェクトでもよく出てくる話題だ。個人的には「こんな細かいことで議論するのもどうかと思う」と感じることもあるが、一貫性のあるコードベースを維持するためには、チームとして明確な方針を持つことが重要だろう。

この記事では、Next.js(React)開発におけるシングルクォートとダブルクォートの選択について、実践的な観点から考察していきたい。

現状の採用状況とトレンド

まず、JavaScript エコシステム全体を見渡すと、シングルクォートが優勢になっている印象を受ける。主要なスタイルガイドを見てみよう:

  • Airbnb JavaScript Style Guide: シングルクォート推奨
  • Google JavaScript Style Guide: シングルクォート推奨
  • StandardJS: シングルクォート必須

一方で、Next.js の公式ドキュメントやサンプルコードを見ると、両方が混在している状況だ。ただし全体的な傾向としては、React/Next.js エコシステムではシングルクォートを採用しているプロジェクトが多いように思える。

実際には、これは歴史的な経緯やコミュニティの慣習から来ているものであり、技術的な優劣というよりは文化的な側面が強い。

シングルクォートの実践的メリット

// シングルクォートを使ったNext.jsコンポーネントの例
import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div className='container'>
      <p>カウント: {count}</p>
      <button onClick={() => setCount(count + 1)}>増やす</button>
    </div>
  );
}

シングルクォートの最大のメリットは、実践的には以下の点にあると思う:

  1. タイピング効率: 多くのキーボードレイアウトでは、シングルクォートは Shift キーを押さずに入力できる
  2. ツールとの親和性: ESLint や Prettier など、多くのツールのデフォルト設定がシングルクォート
  3. コミュニティ標準: JavaScript/TypeScript コミュニティではシングルクォートが広く採用されている

特に、Next.js などのモダンなフレームワークを使う開発者は、他の JavaScript プロジェクトにも関わることが多いため、エコシステム全体で一貫してシングルクォートを使うことでコンテキストスイッチのコストを減らせるという利点がある。

ダブルクォートの実践的メリット

// ダブルクォートを使ったNext.jsコンポーネントの例
import { useState } from "react";

export default function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div className="container">
      <p>カウント: {count}</p>
      <button onClick={() => setCount(count + 1)}>増やす</button>
    </div>
  );
}

ダブルクォートにも、以下のような実践的なメリットがある:

  1. HTML との一貫性: JSX は HTML に近い構文を持ち、HTML ではダブルクォートが標準
  2. エスケープの減少: 英語のテキストでアポストロフィーを使う場合にエスケープが不要
  3. 視覚的区別: JSX 内で属性値と JavaScript の文字列を視覚的に区別しやすい場合がある

個人的には、特にマークアップが多いコンポーネントでは、HTML の慣習に合わせてダブルクォートを使う方が直感的に感じることがある。

実践的な選択基準

実務では、以下のポイントを考慮して選択すると良いだろう:

  1. 既存のコードベース: 新規プロジェクトでない場合、既存のコードの慣習に従うのが最も実践的
  2. チームの好み: 開発チームの多数派が好む方式を採用することで、摩擦を減らせる
  3. 自動化ツールの活用: Prettier や ESLint で強制することで、議論や非一貫性を排除できる
// .prettierrc.js の例
module.exports = {
  singleQuote: true, // シングルクォートを使用
  jsxSingleQuote: true, // JSX内でもシングルクォートを使用
};

コード規約の自動化は、こういった細かい議論に時間を費やすことなく、より重要な設計や機能実装に集中するためのコツだと思っている。

考察:Next.js プロジェクトにおける選択

Next.js の文脈で考えると、現在のトレンドとしてはシングルクォートが優勢だが、絶対的な正解はないと思う。

それよりも重要なのは、プロジェクト内での一貫性だ。特に Next.js のような大規模なプロジェクトでは、コードの読みやすさと一貫性が生産性に直結する。

個人的には、Next.js のプロジェクトではシングルクォートを基本としつつ、JSX の属性値にはダブルクォートを使うという折衷案も実践的な選択肢だと感じている。これは TypeScript の公式スタイルガイドに近い考え方だ。

// 折衷案の例
import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);
  const message = 'カウント値';

  return (
    <div className="container">
      <p>
        {message}: {count}
      </p>
      <button onClick={() => setCount(count + 1)}>増やす</button>
    </div>
  );
}

まとめ

シングルクォートとダブルクォートの選択は、技術的な優劣というよりはチームの好みや既存のコードベースとの一貫性の問題だ。Next.js プロジェクトでは、JavaScript/TypeScript のエコシステム全体のトレンドに合わせてシングルクォートを採用するケースが多いが、絶対的な正解はない。

大切なのは:

  1. プロジェクト内で一貫した規約を設ける
  2. ESLint や Prettier で自動的に強制する
  3. 些細な問題に時間を使いすぎないよう、早めに決断する

結局のところ、どちらを選んでも大きな問題はない。それよりも、選んだ規約を一貫して適用し、開発者が本質的な問題に集中できる環境を整えることが重要だろう。

Discussion

Honey32Honey32

失礼します。

シングルクオートのサンプルコードも、全部ダブルクオートになってますよ

apollo880apollo880

うわーー、ご指摘ありがとうございます、、(IDEでmdファイル保存したときにフォーマットかかってるの見落としてました。。)