爆速SQL整形!VS Codeのおすすめ拡張機能と活用法


爆速SQL整形!VS Codeのおすすめ拡張機能と活用法 – 開発効率を劇的に向上させる完全ガイド

SQLは、リレーショナルデータベースを操作するための不可欠な言語です。アプリケーション開発者からデータアナリスト、データベース管理者まで、多くのエンジニアが日常的にSQLと向き合っています。しかし、SQLコードは構造が複雑になりがちで、整形されていないコードは非常に読みにくく、バグの温床となり、保守や共同作業の大きな妨げとなります。

本記事では、世界で最も人気のあるコードエディタの一つであるVS Codeを活用し、SQLコードの整形を「爆速」で行うための方法を徹底的に解説します。手動での整形作業に時間を取られている方、チーム内でのコード規約統一に課題を感じている方、より効率的にSQL開発を進めたいと考えている方は、ぜひこの記事を参考にしてください。

1. はじめに:なぜSQL整形は重要なのか?手動整形の限界と自動化のメリット

1.1 SQLコードの品質と整形の重要性

SQLコードは、システムの心臓部であるデータベースとやり取りする重要なロジックです。その品質は、アプリケーションのパフォーマンス、信頼性、そして保守性に直結します。

  • 可読性の向上: 整形されたSQLコードは、SELECT句、FROM句、WHERE句、JOIN句などの各要素が明確に区別され、適切なインデントや改行によって構造が視覚的に理解しやすくなります。これにより、コードの意図を素早く把握でき、デバッグやレビューの効率が格段に向上します。
  • 保守性の向上: 読みやすいコードは、将来的な機能追加や修正が容易になります。変更箇所の影響範囲を特定しやすく、意図しない副作用を防ぐのに役立ちます。
  • バグの早期発見: インデントや改行が適切に行われていると、句の区切りや条件のAND/ORといった論理構造の誤りが見つけやすくなります。特に複雑なJOINやサブクエリを含むSQLでは、整形による視覚的な構造化がバグの発見に大きく貢献します。
  • チーム開発における統一性: 複数人で一つのプロジェクトに取り組む場合、コーディングスタイルが統一されていないと、コードの可読性が低下し、マージコンフリクトの原因にもなります。自動整形ツールを使えば、事前に定義されたルールに従ってコードが自動的に整形されるため、チーム全体で統一されたコードスタイルを容易に維持できます。レビュー担当者もコードスタイルの指摘に時間を取られることなく、ロジック自体のレビューに集中できるようになります。
  • 集中力の維持と疲労軽減: 整形されていないコードを読み解く作業は、精神的な負担が大きく、疲労の原因となります。自動整形ツールを使えば、整形に意識を割く必要がなくなり、本来のタスクであるロジックの実装や分析に集中できます。

1.2 手動整形の限界

これらのメリットを理解していても、SQLコードを手動で整形するのは骨の折れる作業です。

  • 時間と労力の消費: 一行ずつインデントを調整したり、キーワードの大文字/小文字を修正したり、適切な位置で改行を入れたりする作業は、地味ながらも多くの時間を消費します。特に長いクエリや複雑な構造のクエリでは、手動での整形は非現実的です。
  • 属人性と非一貫性: 手動での整形は、担当者によってスタイルのばらつきが生じがちです。「この人はこうインデントするけど、あの人は別のスタイルだ」といった状況は、チーム全体のコード品質を低下させます。
  • ミス発生のリスク: 手動で整形している最中に、誤って重要な文字を削除してしまったり、構文を壊してしまったりするリスクが伴います。

1.3 VS Codeと拡張機能による自動化のメリット

ここでVS Codeと強力な拡張機能の出番です。VS Codeは豊富な拡張機能エコシステムを持っており、SQLの整形に特化した、あるいはSQL整形に対応した優れた拡張機能が多数提供されています。

これらの拡張機能を活用することで、以下のようなメリットが得られます。

  • 瞬時の整形: ボタン一つ、あるいは保存するだけで、複雑なSQLコードも定義済みのルールに従って瞬時に整形されます。手動では数分かかる作業が、数秒で完了します。
  • 徹底的な一貫性: 設定ファイルやVS Codeの設定でルールを一度定義すれば、何度整形しても常に同じスタイルが適用されます。チーム内で設定ファイルを共有すれば、チーム全体のコードスタイルが一貫します。
  • 時間と労力の劇的な削減: 整形にかかる手作業が不要になるため、開発者は本来のタスクに集中でき、生産性が向上します。
  • ミス発生リスクの低減: 自動ツールが整形を行うため、手動による誤操作のリスクがなくなります。

この記事では、VS Codeで利用できるSQL整形のための主要な拡張機能を紹介し、それぞれの特徴、インストール方法、そしてカスタマイズやチームでの共有といった具体的な活用法を、豊富な設定例とともに解説します。これにより、皆さんのSQL開発環境を「爆速整形」対応にし、開発効率を劇的に向上させることを目指します。

2. VS CodeにおけるSQL開発環境の基本

VS Codeは、SQLファイルの編集環境としても非常に優れています。特別な設定をしなくても、.sql 拡張子のファイルを開けば、基本的なシンタックスハイライトが提供されます。

  • VS Codeのインストール: まだVS Codeをインストールしていない場合は、公式ウェブサイト からダウンロードしてインストールしてください。様々なOSに対応しています。
  • SQLファイルの作成と保存: VS Codeで新しいファイルを開き、ファイル名を your_query.sql のように .sql 拡張子で保存します。VS Codeが自動的に言語モードをSQLと認識し、キーワードや文字列などのシンタックスハイライトが有効になります。
  • 基本的な機能: VS Codeは、ファイルの保存、検索置換、マルチカーソル編集など、基本的なテキストエディタとしての強力な機能を備えています。これらはSQLコードの編集においても非常に役立ちます。

デフォルトのVS Codeでもシンタックスハイライトは提供されますが、整形機能や入力補完、データベース接続機能などは、拡張機能を追加することで格段に強化されます。特に整形機能は、手動でのコーディング規約適用という面倒な作業を自動化するために必須です。

3. SQL整形のための主要な拡張機能カタログ

VS Codeのマーケットプレイスには、SQL整形をサポートする拡張機能がいくつか存在します。ここでは、特に人気があり、機能が豊富でカスタマイズ性が高い拡張機能を中心に紹介します。

いくつかの拡張機能は、データベース接続やクエリ実行機能も持っており、その一部として整形機能を提供しています。一方で、純粋にコード整形に特化した拡張機能もあります。

主要な拡張機能候補:

  • Prettier (with SQL plugin): 多言語対応の有名フォーマッタ。SQL整形はプラグインで提供される。
  • SQL Formatter (VS Code Marketplace上の特定の拡張機能名): SQL整形に特化した拡張機能。
  • SQLTools: データベース接続・実行機能がメインだが、整形機能も持つ。
  • vscode-sqltools-plusplus: SQLToolsをベースにした拡張機能で、整形機能も強化されている場合がある。

本記事では、特に多くのユーザーに利用されており、カスタマイズの自由度も高いPrettier (with SQL plugin)SQL Formatter を深く掘り下げて解説します。これらの拡張機能を使いこなせれば、ほとんどのSQL整形ニーズを満たせるでしょう。

3.1 Prettier (with SQL Plugin)

特徴:
Prettierは、JavaScript、CSS、HTMLなど、様々な言語に対応した非常に人気のあるコードフォーマッタです。一貫したコードスタイルを自動的に適用することに特化しており、「opinionated formatter」(意見を持ったフォーマッタ)として知られています。つまり、あまり多くのカスタマイズオプションは提供せず、「こうあるべき」という明確なスタイルを強制することで、スタイルに関する議論をなくし、コードレビューの効率を高めることを目指しています。

SQLの整形機能は、本体ではなく prettier-plugin-sql という外部プラグインによって提供されます。Prettierエコシステムの一部として、他の言語の整形と合わせて一元的に管理しやすいのが大きなメリットです。

インストール方法:

PrettierでSQLを整形するには、いくつかのコンポーネントが必要です。

  1. Node.jsのインストール: PrettierはNode.js上で動作します。まだインストールしていない場合は、Node.js公式サイト からインストールしてください。
  2. Prettier本体のインストール: プロジェクトのディレクトリ内で、npmまたはyarnを使ってPrettierをインストールします(プロジェクトに依存関係として追加するのが一般的ですが、グローバルインストールも可能です)。
    bash
    # プロジェクトローカルにインストール (推奨)
    npm install --save-dev prettier
    # または
    yarn add --dev prettier
  3. prettier-plugin-sql のインストール: Prettier本体と同じく、プロジェクトにインストールします。
    bash
    # プロジェクトローカルにインストール
    npm install --save-dev prettier-plugin-sql
    # または
    yarn add --dev prettier-plugin-sql
  4. VS Code拡張機能「Prettier – Code formatter」のインストール: VS Codeを開き、拡張機能ビュー(Ctrl+Shift+X または Cmd+Shift+X)で「Prettier」と検索し、「Prettier – Code formatter」をインストールします。この拡張機能が、VS CodeからPrettier CLI(コマンドラインインターフェース)を呼び出して整形を実行する役割を担います。

設定方法:

Prettierの主要な設定は、プロジェクトルートに配置する .prettierrc ファイルで行います。このファイルはJSON, YAML, JSなどの形式で記述できます。

VS Codeの settings.json では、主に 「どのフォーマッタを使うか」「どのタイミングで整形するか」 といったVS Code側の挙動を設定します。

.prettierrc の設定例 (JSON形式):

“`json
// .prettierrc
{
“trailingComma”: “es5”,
“tabWidth”: 2,
“semi”: true,
“singleQuote”: true,
// SQLプラグインの設定はplugins配列に指定
“plugins”: [
“prettier-plugin-sql”
],
// prettier-plugin-sql 固有の設定はここに記述
“pluginSearchDirs”: [“.”], // プロジェクトルートをプラグイン検索ディレクトリに追加
“language”: “sql”, // 使用する言語を指定 (plugins配列で指定している場合は不要なことも)

// prettier-plugin-sql の設定例
“keywordCase”: “upper”, // キーワードを大文字にする (SELECT, FROM, WHEREなど)
“indent”: 2, // インデント幅 (スペース数)
“linesBetweenQueries”: 2 // クエリ間に挿入する空行数
// その他のSQL固有設定は prettier-plugin-sql のドキュメントを参照
}
“`

"plugins": ["prettier-plugin-sql"] の指定が重要です。これにより、PrettierはSQLファイルを整形する際にこのプラグインを使用します。

settings.json の設定例:

PrettierをSQLファイルのデフォルトフォーマッタとして設定し、保存時に自動整形を有効にするには、以下のように設定します。

json
// settings.json (ユーザーまたはワークスペース設定)
{
"editor.defaultFormatter": null, // 全体のデフォルトをリセット
"[sql]": {
// SQL言語モードに対して設定を適用
"editor.defaultFormatter": "esbenp.prettier-vscode", // Prettier拡張機能をデフォルトフォーマッタに指定
"editor.formatOnSave": true // ファイル保存時に自動整形を有効化
},
"prettier.configPath": ".prettierrc" // プロジェクトルートの.prettierrcを読み込む設定 (通常不要だが念のため)
// その他のPrettier拡張機能に関する設定
// "prettier.enable": true, // Prettier全体を有効化 (デフォルトtrue)
// "prettier.resolveGlobalModules": true // グローバルインストールされたprettierを検索する場合
}

"[sql]" セクション内で editor.defaultFormatteresbenp.prettier-vscode (Prettier拡張機能のID) に指定することで、SQLファイルを開いた際にPrettierがフォーマッタとして優先されるようになります。また、editor.formatOnSavetrue にすることで、SQLファイルを保存するたびに自動的に整形が行われるようになります。

実例コード:

整形前:

sql
select id, name from users where status = 'active' and registration_date > '2023-01-01' order by registration_date desc limit 10;

.prettierrc の設定例:
json
{
"plugins": ["prettier-plugin-sql"],
"keywordCase": "upper",
"indent": 2
}

整形後 (Prettier + prettier-plugin-sql による整形結果例):

sql
SELECT
id,
name
FROM
users
WHERE
status = 'active' AND registration_date > '2023-01-01'
ORDER BY
registration_date DESC
LIMIT 10;

PrettierのSQLプラグインは比較的新しいため、複雑な構文(例えば、特定のデータベース方言に特化した構文や、高度なウィンドウ関数など)に対しては、他のSQL特化型フォーマッタほど柔軟に対応できない場合もあります。しかし、一般的なSELECT, INSERT, UPDATE, DELETE文やDDLであれば、十分な整形能力を持っています。

Pros:
* 多言語対応の強み:プロジェクト全体でPrettierを使っている場合、SQLも同じワークフローで整形できる。
* .prettierrc による設定共有の容易性:チームで同じ整形ルールを簡単に共有できる。
* 高い人気と活発なコミュニティ:問題解決の情報が見つけやすい。
* 保存時自動整形との連携がスムーズ。

Cons:
* SQL整形はプラグインに依存するため、Prettier本体とプラグインの両方を管理する必要がある。
* SQL特化型フォーマッタと比較すると、カスタマイズオプションが少ない場合がある(特に高度な整形ルールに関して)。
* Node.js環境が必要。

3.2 SQL Formatter (VS Code Marketplace上の特定の拡張機能名)

特徴:
VS Code Marketplaceで「SQL Formatter」として提供されている拡張機能(いくつか候補がありますが、ここでは特に利用者が多いものを想定して説明します)は、その名の通りSQLの整形に特化しています。Prettierと比較して、より多くのSQL方言(MySQL, PostgreSQL, SQL Server, Oracle, DB2, N1QL, PL/SQL, FlinkSQL, SparkSQLなど)に対応しており、SQL整形に関する非常に豊富なカスタマイズオプションを提供しているのが大きな特徴です。

インストール方法:

VS Codeを開き、拡張機能ビュー(Ctrl+Shift+X または Cmd+Shift+X)で「SQL Formatter」と検索し、目的の拡張機能(例えば、SQL Formatter by Tao Qusql-formatter by zeroiki など、評価の高いものを選んでください。本記事では、sql-formatter ライブラリをベースにした拡張機能を想定して説明を進めます)をインストールします。

設定方法:

SQL Formatter拡張機能のほとんどの設定は、VS Codeの settings.json で行います。設定項目は通常、拡張機能のID(例: sql-formatter)をプレフィックスとして持ちます。

settings.json の設定例:

“`json
// settings.json (ユーザーまたはワークスペース設定)
{
“editor.defaultFormatter”: null, // 全体のデフォルトをリセット
“[sql]”: {
// SQL言語モードに対して設定を適用
“editor.defaultFormatter”: “zeroiki.sql-formatter”, // SQL Formatter拡張機能をデフォルトフォーマッタに指定 (拡張機能IDはインストールしたものに合わせて変更)
“editor.formatOnSave”: true // ファイル保存時に自動整形を有効化
},

// SQL Formatter 固有の設定例 (拡張機能によって設定項目の名前や有無が異なる場合があります)
“sql-formatter.dialect”: “mysql”, // 使用するSQL方言を指定 (mysql, postgres, sqlserver, oracle, db2, n1ql, plsql, flinksql, sparksqlなど)
“sql-formatter.indent”: 2, // インデント幅 (スペース数)
“sql-formatter.keywordCase”: “upper”, // キーワードを大文字にする
“sql-formatter.functionCase”: “lower”, // 関数名を小文字にする
“sql-formatter.linesBetweenQueries”: 2, // クエリ間に挿入する空行数

“sql-formatter.expressionWidth”: 50, // 式の幅を指定して改行を制御
“sql-formatter.denseOperators”: true, // 演算子の周りのスペースを詰める
“sql-formatter.logicalOperatorNewline”: “before”, // 論理演算子 (AND, OR) を前の行末に置くか、次の行頭に置くか (“before” or “after”)
“sql-formatter.breakBeforeBooleanOperator”: true, // 論理演算子の前で改行するか

“sql-formatter.aliasAs”: “keyword”, // エイリアスに AS キーワードを常に使う (“keyword”), 使わない (“never”), 使うがオプション (“always”)
“sql-formatter.tabulateAlias”: true, // SELECT句のエイリアスを揃えるか
“sql-formatter.alignAlias”: true, // SELECT句のエイリアスをカラム名に対してインデントで揃えるか

“sql-formatter.breakBeforeComma”: false, // カンマの前で改行するか (trueなら前置カンマスタイルに近くなる)
“sql-formatter.commaPosition”: “after”, // カンマを要素の後ろに置くか (“after”)、前に置くか (“before”) – breakBeforeCommaと合わせて設定

// FROM, JOIN, WHERE句などの改行/インデントに関する詳細設定
“sql-formatter.richtextIndent”: false, // リッチテキストのようなインデントを有効にするか
“sql-formatter.nestedJoinNewline”: “join”, // ネストしたJOIN句の改行スタイル

// CASE文のフォーマット
“sql-formatter.caseClauseNewline”: “when” // CASE WHEN … を改行するか
}
“`

SQL Formatterは、VS Codeの settings.json を通じて、キーワードの大文字/小文字、インデント幅、改行ルール、エイリアスのスタイル、カンマの位置など、非常にきめ細やかな設定が可能です。sql-formatter.dialect で使用しているデータベースの種類を指定することで、その方言に合わせた整形が行われます。

実例コード:

整形前:

sql
SELECT u.id, u.name, o.order_date FROM users u JOIN orders o ON u.id = o.user_id WHERE u.status = 'active' AND o.amount > 1000 ORDER BY o.order_date DESC LIMIT 5;

settings.json の設定例:
json
{
"[sql]": {
"editor.defaultFormatter": "zeroiki.sql-formatter",
"editor.formatOnSave": true
},
"sql-formatter.dialect": "mysql",
"sql-formatter.indent": 2,
"sql-formatter.keywordCase": "upper",
"sql-formatter.functionCase": "lower",
"sql-formatter.aliasAs": "keyword", // AS を常に使う
"sql-formatter.breakBeforeBooleanOperator": true, // AND/ORの前で改行
"sql-formatter.commaPosition": "after" // カンマは後置
}

整形後 (SQL Formatter による整形結果例):

sql
SELECT
u.id,
u.name,
o.order_date
FROM
users AS u
JOIN
orders AS o
ON u.id = o.user_id
WHERE
u.status = 'active'
AND o.amount > 1000
ORDER BY
o.order_date DESC
LIMIT 5;

SQL Formatterは、SQL整形に特化しているだけあって、様々なSQL構文やスタイルに対する豊富な設定オプションを提供しています。特定のコーディング規約に厳密に従う必要がある場合や、特定のデータベースの方言に合わせた整形を行いたい場合に非常に強力です。

Pros:
* SQL整形に特化しており、非常に豊富なカスタマイズオプションを提供。
* 様々なSQL方言に対応している。
* .prettierrcのような別設定ファイルが不要で、VS Codeの settings.json だけで完結する(人によってはメリット)。
* 保存時自動整形との連携がスムーズ。

Cons:
* Prettierのような多言語対応ではないため、SQL以外の言語の整形は別のツールや拡張機能が必要。
* 設定項目が非常に多いため、目的の設定を見つけるのに少し時間がかかる場合がある。
* 拡張機能の種類がいくつか存在するため、どれを選ぶか迷う可能性がある。

3.3 その他の注目拡張機能

  • SQLTools: これは主にデータベース接続、クエリ実行、スキーマ探索などの機能を提供する拡張機能ですが、多くのドライバで簡単な整形機能(通常はVS Codeの組み込みフォーマッタを呼び出すか、基本的なインデント調整など)が提供されます。本格的な整形には、PrettierやSQL Formatterと併用するのが一般的です。
  • 特定のデータベース向け拡張機能: 例えば、「PostgreSQL」「MSSQL」「Oracle Developer Tools for VS Code」といった公式または非公式の拡張機能が、それぞれのデータベースに特化した機能(構文補完、クエリ実行、デバッグなど)と共に、基本的な整形機能を提供している場合があります。これらの整形機能は、多くの場合、SQL Formatterほど高度なカスタマイズはできませんが、そのデータベースの方言に最適化されていることがあります。

4. 拡張機能の導入とセットアップ

ここでは、前述の拡張機能、特にPrettierとSQL FormatterをVS Codeで効果的に使うための具体的なセットアップ方法を解説します。

4.1 VS Codeマーケットプレイスからのインストール

VS Codeの拡張機能は、エディタの拡張機能ビューから簡単に検索・インストールできます。

  1. VS Codeを開きます。
  2. サイドバーにある「拡張機能」アイコン(四角が重なったようなアイコン、Ctrl+Shift+X または Cmd+Shift+X で開閉)をクリックします。
  3. 検索バーに拡張機能名(例: Prettier, SQL Formatter, prettier-plugin-sql ※VS Code拡張機能としてはPrettier - Code formatterを検索)を入力します。
  4. 目的の拡張機能が見つかったら、その項目をクリックして詳細を表示し、「Install」ボタンをクリックします。
  5. インストールが完了したら、VS Codeを再起動するよう促される場合があります。指示に従って再起動してください。

Prettierの場合は、npm/yarnで prettierprettier-plugin-sql をインストールする作業も忘れないでください。

4.2 複数の整形拡張機能が入っている場合の注意点とデフォルトフォーマッタの設定

複数のSQL整形が可能な拡張機能(例: SQL FormatterとSQLTools)をインストールしている場合、VS Codeはどの拡張機能を使って整形すればよいか迷うことがあります。この場合、VS Codeはデフォルトフォーマッタの設定に従います。

特定の言語(ここではSQL)に対して、使用するデフォルトのフォーマッタを明示的に設定することが推奨されます。これにより、意図しない拡張機能で整形されてしまうことを防げます。

settings.json で以下のように設定します。

“`json
// settings.json
{
// グローバルなデフォルトフォーマッタを指定する場合
// “editor.defaultFormatter”: “esbenp.prettier-vscode”, // 例: 全体でPrettierをデフォルトにする

// 言語ごとのデフォルトフォーマッタを指定する場合 (SQLに対して)
“[sql]”: {
“editor.defaultFormatter”: “zeroiki.sql-formatter” // 例: SQLに対してSQL Formatterをデフォルトにする (インストールした拡張機能のIDに置き換えてください)
// “editor.defaultFormatter”: “esbenp.prettier-vscode” // 例: SQLに対してPrettierをデフォルトにする
}
}
“`

拡張機能のIDは、拡張機能ビューで目的の拡張機能をクリックし、詳細ページのタイトル下にある発行者名と拡張機能名の組み合わせ(例: esbenp.prettier-vscode, zeroiki.sql-formatter)で確認できます。

4.3 保存時の自動整形 (editor.formatOnSave)

最も効率的に整形を行う方法は、ファイルを保存するたびに自動で整形を実行する設定です。これにより、「整形し忘れた」という状況がなくなり、常にきれいなコードが保たれます。

settings.json で以下のように設定します。

“`json
// settings.json
{
// グローバルに全ての言語で保存時整形を有効にする場合
// “editor.formatOnSave”: true,

// 特定の言語 (SQL) だけで保存時整形を有効にする場合
“[sql]”: {
“editor.formatOnSave”: true
// “editor.defaultFormatter”: “…”, // 上記で設定したデフォルトフォーマッタも忘れずに指定
}
}
“`

"[sql]" ブロック内に editor.formatOnSave: true を記述することで、SQLファイル(.sql 拡張子のファイル)を保存するたびに、その言語モードに設定されたデフォルトフォーマッタが実行されます。

4.4 ファイルタイプごとの有効化/無効化

VS Codeは通常、ファイル拡張子(例: .sql)を見て言語モードを判断します。しかし、場合によっては .ddl, .dml, .pgsql, .mysql など、.sql 以外の拡張子を持つファイルでSQLとして扱いたい、あるいは特定の拡張子のファイルでは整形を無効にしたい、といった要望があるかもしれません。

VS Codeの files.associations 設定を使うと、特定の拡張子を任意の言語モードに関連付けることができます。

json
// settings.json
{
"files.associations": {
"*.ddl": "sql", // .ddl 拡張子のファイルをSQLとして扱う
"*.dml": "sql", // .dml 拡張子のファイルをSQLとして扱う
"*.pgsql": "sql" // .pgsql 拡張子のファイルをSQLとして扱う
// 他の拡張子も同様に追加
}
}

これにより、これらの拡張子のファイルもVS CodeでSQLとして認識され、シンタックスハイライトや上で設定した保存時自動整形 ([sql].editor.formatOnSave) が有効になります。

特定の拡張機能の設定で、整形を適用するファイルパターンや言語を指定できる場合もあります。これは各拡張機能の設定ドキュメントを参照してください。

5. 爆速整形を実現する活用法

拡張機能のインストールと基本的な設定ができたら、次は日々のコーディングで整形機能を最大限に活用する方法を見ていきましょう。

5.1 基本的な整形実行方法

拡張機能がインストールされ、デフォルトフォーマッタが設定されていれば、以下の方法で手動で整形を実行できます。

  1. ファイル全体の整形:

    • 整形したいSQLファイルを開きます。
    • コマンドパレットを開きます(Shift + Ctrl + P または Shift + Cmd + P)。
    • 「Format Document」と入力し、表示される候補から「Format Document」を選択して実行します。
    • または、デフォルトのショートカットキー Shift + Alt + F を押します。
    • もし複数のフォーマッタが利用可能な場合は、どのフォーマッタを使用するか選択を求められることがあります。
  2. 選択範囲の整形:

    • 整形したいSQLコードの一部を選択します。
    • コマンドパレットを開きます。
    • 「Format Selection」と入力し、表示される候補から「Format Selection」を選択して実行します。

これらの手動実行は、保存時自動整形を有効にしていない場合や、特定の箇所だけ一時的に整形したい場合に便利です。

5.2 ショートカットキーの設定

より頻繁に整形を実行する場合、デフォルトの Shift + Alt + F 以外の、より押しやすいショートカットキーを割り当てることで、作業効率が向上します。

  1. コマンドパレットを開きます(Shift + Ctrl + P または Shift + Cmd + P)。
  2. 「Keyboard Shortcuts」と入力し、「Preferences: Open Keyboard Shortcuts」を選択します。
  3. 設定画面が開いたら、上部の検索バーに「format document」と入力します。
  4. 表示されるリストから「Format Document」を探します。
  5. その項目にカーソルを合わせ、左端に表示される鉛筆アイコンをクリックするか、項目を右クリックして「Change Keybinding…」を選択します。
  6. 新しいショートカットキーを割り当てます。例えば、Ctrl + Shift + SAlt + F など、自分の慣れたキーバインディング体系に合わせて設定できます。競合するショートカットがないか確認しながら設定してください。
  7. 同様に、「Format Selection」にもショートカットキーを割り当てられます。

keybindings.json を直接編集して設定することも可能です。

json
// keybindings.json
[
{
"key": "ctrl+shift+s", // 例: Ctrl+Shift+S に割り当て
"command": "editor.action.formatDocument",
"when": "editorHas"){ selection && editorTextFocus && resourceScheme == 'file' } // ファイル編集中かつテキストフォーカスがある場合のみ有効
},
{
"key": "alt+f", // 例: Alt+F に割り当て
"command": "editor.action.formatSelection",
"when": "editorHasSelection && editorTextFocus && resourceScheme == 'file'" // 選択範囲があり、ファイル編集中かつテキストフォーカスがある場合のみ有効
}
]

5.3 保存時自動整形 (editor.formatOnSave) の活用

前述の「4.3 保存時の自動整形」で設定した editor.formatOnSave: true は、爆速整形を実現する上で最も重要な設定です。

この設定が有効になっていると、ファイルを手動で保存する(Ctrl+S または Cmd+S)か、自動保存機能が動作するたびに、VS Codeが自動的にデフォルトフォーマッタを呼び出してコードを整形します。

メリット:

  • 手動での整形実行が不要: 整形を意識することなく、常に整形済みのコードが得られます。
  • 「整形し忘れ」がない: ファイルを保存した時点で整形されるため、コミット前に整形を忘れるといったミスを防げます。
  • 継続的な整形: コードを少し修正して保存するたびに、その部分だけでなくファイル全体が整形されるため、コード全体が常にきれいな状態に保たれます。

一度この快適さに慣れると、手動で整形コマンドを実行するのが億劫になるほどです。ぜひ試してみてください。

5.4 クリップボードからの整形

VS Codeの拡張機能の多くは、ファイルとして開かれているバッファに対して整形を実行します。コピーしたSQLクエリを一時的に整形したい場合など、クリップボードの内容を直接整形する機能は標準では提供されていません。

しかし、簡単なワークフローでクリップボードの内容を整形できます。

  1. 新しいファイルをVS Codeで開きます(Ctrl+N または Cmd+N)。
  2. ファイルにクリップボードの内容を貼り付けます。
  3. ファイルの言語モードをSQLに設定します(右下にある言語モード表示をクリックし、「Configure File Association for ‘.txt'” 等が表示されたらクリックして言語をSQLに変更するか、ファイル名に .sql をつけて保存します)。
  4. 「Format Document」コマンドを実行します(Shift + Alt + F など)。
  5. 整形されたコードを再度クリップボードにコピーします。

この手順も、保存時自動整形と組み合わせるとさらに効率的です。新しいファイルを .sql 拡張子で保存し、貼り付けて保存するだけで自動的に整形されます。

5.5 整形ルールのチーム共有

自動整形ツールを最大限に活用するには、チーム全体で同じ整形ルールを共有することが不可欠です。これにより、コードレビューでのスタイルに関する指摘がなくなり、より重要なロジックのレビューに集中できます。

  • Prettier (.prettierrc) の場合:
    Prettierの設定はプロジェクトルートの .prettierrc ファイルに記述するため、このファイルをGitなどのバージョン管理システムで共有するのが最も一般的で推奨される方法です。リポジトリをクローンした開発者は、.prettierrc ファイルを自動的に取得し、Prettier拡張機能やCLIがそれを読み込んで同じルールで整形を行います。
  • SQL Formatter (settings.json) の場合:
    SQL Formatterの設定はVS Codeの settings.json に記述します。チームで設定を共有するには、以下の方法があります。

    • ワークスペース設定: プロジェクトルートに .vscode フォルダを作成し、その中に settings.json ファイルを配置します。このファイルにプロジェクト固有の設定(SQL Formatterの設定を含む)を記述し、バージョン管理システムで共有します。ワークスペース設定は、ユーザー設定よりも優先されるため、チームメンバーは個人のユーザー設定に関わらず、プロジェクト共通の設定でVS Codeを使用できます。
    • VS Code Settings Sync: VS Codeの組み込み機能であるSettings Syncを利用して、VS Codeの設定全体(拡張機能リスト、キーバインディング、ユーザー設定など)をGitHub Gistなどを介して同期できます。チームメンバーが同じ同期設定をインポートすることで、開発環境をある程度統一できます。ただし、これは個人の設定を共有する側面が強く、プロジェクト固有の設定にはワークスペース設定の方が適しています。
    • VS Code Setting Profiles: VS Codeの最近のバージョンで追加された機能で、特定の設定プロファイルをエクスポート・インポートしたり、GitHub Codespacesなどと連携させたりできます。チームで共通の開発環境プロファイルを作成・共有するのに便利です。

最もシンプルで効果的なのは、プロジェクト固有の整形ルールをワークスペース設定 (.vscode/settings.json) としてリポジトリで共有する方法です。

6. SQL整形ルールの詳細なカスタマイズ例

自動整形ツールの真価は、プロジェクトやチームのコーディング規約に合わせて詳細な整形ルールを設定できる点にあります。ここでは、SQL整形でよくカスタマイズされる項目と、それを主要な拡張機能(主にPrettierとSQL Formatter)でどのように設定するかの具体例を解説します。

設定項目の名前や利用可否は拡張機能によって異なりますが、多くの拡張機能が同様の整形ルールに対応するための設定を提供しています。

6.1 キーワードの大文字/小文字

SQLのキーワード(SELECT, FROM, WHERE, JOIN, CREATE, TABLE など)を大文字にするか小文字にするか、あるいは先頭文字だけ大文字にするかは、最も基本的な整形ルールの一つです。

  • Prettier (prettier-plugin-sql):
    • 設定項目例: "keywordCase": "upper" ("lower", "capitalize" も選択可能)
  • SQL Formatter (sql-formatter):
    • 設定項目例: "sql-formatter.keywordCase": "upper" ("lower", "capitalize" も選択可能)

例 ("keywordCase": "upper"):
“`sql
— Before
select id, name from users;

— After
SELECT
id,
name
FROM
users;
“`

関数名(COUNT, SUM, AVG, NOW など)についても、同様に大文字/小文字のルールを設定できる場合があります。

  • SQL Formatter (sql-formatter):
    • 設定項目例: "sql-formatter.functionCase": "lower" ("upper", "capitalize" も選択可能)

例 ("functionCase": "lower", "keywordCase": "upper"):
“`sql
— Before
SELECT count(*) FROM users WHERE status = ‘Active’;

— After
SELECT
count(*)
FROM
users
WHERE
status = ‘Active’;
“`

6.2 インデントスタイル

インデントにスペースを使うかタブを使うか、使う場合は何文字分インデントするかは、言語全体に共通する一般的なコーディング規約です。多くの整形ツールはこの設定に対応しています。

  • Prettier (共通設定):
    • 設定項目例: "tabWidth": 2, "useTabs": false (スペース2文字を使う場合)
  • SQL Formatter (sql-formatter):
    • 設定項目例: "sql-formatter.indent": 2 (スペース2文字を使う場合)

6.3 SELECTリストのカラムの改行とインデント

SELECT 句に複数のカラムがある場合、一行にまとめて書くか、各カラムを新しい行に改行して書くかのルールです。可読性を高めるためには、カラムが多い場合に改行するのが一般的です。

多くの整形ツールは、SELECT キーワードの後に続くカラムリストを自動的に改行してインデントする機能を持っています。これは特定のオプションで制御するよりも、インデント幅行幅の設定に依存することが多いです。行幅を超える場合に自動的に改行されます。

しかし、SQL Formatterのように、より細かい制御ができるものもあります。

  • SQL Formatter (sql-formatter): 特定の設定項目で強制的に改行させるなど、細かい制御が可能な場合があります。

例 (自動改行とインデント):
“`sql
— Before
SELECT user_id, user_name, email, registration_date, last_login_date, status FROM users WHERE status = ‘active’;

— After (行幅設定とインデント設定による自動改行)
SELECT
user_id,
user_name,
email,
registration_date,
last_login_date,
status
FROM
users
WHERE
status = ‘active’;
“`

6.4 FROM句、JOIN句の改行とインデント

FROM 句や複数の JOIN 句がある場合、どのように改行しインデントするかです。各テーブルやJOIN句を新しい行に書くのが一般的です。

整形ツールは通常、FROM, JOIN, LEFT JOIN, RIGHT JOIN, INNER JOIN, FULL OUTER JOIN, ON などのキーワードで適切な位置に改行とインデントを挿入します。

  • SQL Formatter (sql-formatter): nestedJoinNewline など、JOIN句のネストに対する改行ルールを設定できる場合があります。

例 (JOIN句の改行とインデント):
“`sql
— Before
SELECT u.name, o.order_date FROM users u JOIN orders o ON u.id = o.user_id LEFT JOIN products p ON o.product_id = p.id WHERE u.status = ‘active’;

— After
SELECT
u.name,
o.order_date
FROM
users AS u
JOIN
orders AS o
ON u.id = o.user_id
LEFT JOIN
products AS p
ON o.product_id = p.id
WHERE
u.status = ‘active’;
“`

6.5 WHERE句の条件の改行とインデント

WHERE 句に複数の条件が ANDOR で結合されている場合、各条件を新しい行に書くことで論理構造が分かりやすくなります。

多くの整形ツールは、ANDOR の前後で改行を挿入し、適切なインデントを行います。

  • SQL Formatter (sql-formatter): logicalOperatorNewline (論理演算子を前の行末に置くか、次の行頭に置くか)、breakBeforeBooleanOperator (論理演算子の前で改行するか) など、詳細な設定が可能です。

例 ("breakBeforeBooleanOperator": true"logicalOperatorNewline": "before" の組み合わせに近い整形):
“`sql
— Before
SELECT * FROM products WHERE category = ‘electronics’ AND price > 5000 AND stock > 0;

— After
SELECT
*
FROM
products
WHERE
category = ‘electronics’
AND price > 5000
AND stock > 0;
“`

6.6 エイリアスの位置と表記

テーブル名やカラム名にエイリアス(別名)を付ける際のスタイルです。AS キーワードを使うか使わないか、そしてエイリアスを元の名前の直後に書くか、インデントで揃えるかなどがカスタマイズ可能です。

  • Prettier (prettier-plugin-sql): ある程度固定のスタイルが適用されます。
  • SQL Formatter (sql-formatter): "aliasAs": "keyword" ("always", "never", "keyword"), "tabulateAlias": true, "alignAlias": true など、詳細な設定が可能です。

例 ("aliasAs": "keyword", "alignAlias": true):
“`sql
— Before
SELECT u.id i, u.name n FROM users u;

— After
SELECT
u.id AS i,
u.name AS n
FROM
users AS u;
“`

6.7 カンマの位置

SELECT リストや GROUP BY 句などのリスト形式の要素で、カンマを要素の後ろに置く(後置カンマ)か、要素の前に置く(前置カンマ)かのスタイルです。前置カンマは、変更箇所が分かりやすい(差分が見やすい)という理由で一部のチームで好まれます。

  • Prettier (prettier-plugin-sql): 通常、後置カンマがデフォルトスタイルです。設定で変更できるかはプラグインのバージョンに依存します。
  • SQL Formatter (sql-formatter): "breakBeforeComma": true (カンマの前で改行)、"commaPosition": "before" (カンマを要素の前に置く) などの設定で前置カンマスタイルを実現できます。

例 ("breakBeforeComma": true, "commaPosition": "before"):
“`sql
— Before
SELECT id, name, email FROM users;

— After
SELECT
id
, name
, email
FROM
users;
“`

6.8 その他のカスタマイズ項目

上記以外にも、多くのSQL整形ツールは以下のようなカスタマイズ項目を提供しています。

  • CASE文のフォーマット: CASE WHEN ... THEN ... ELSE ... END の構造をどのようにインデントし改行するか。
  • 演算子周りのスペース: =+, > などの演算子の周りにスペースを入れるか詰め込むか。
  • セミコロンの扱い: 各クエリの終わりにセミコロンを強制的に付けるか、除去するか。
  • コメントの整形: 行コメント (--) やブロックコメント (/* ... */) のインデントや、ブロックコメント内のアスタリスク (*) の整列。
  • 特定の句の改行: GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET などの句の前に改行を挿入するか。
  • DDL (CREATE TABLE, ALTER TABLEなど) の整形: カラム定義などをどのように整列・インデントするか。

これらの設定を settings.json.prettierrc に記述することで、チーム独自の厳密なコーディング規約にも対応した自動整形環境を構築できます。

7. トラブルシューティングとよくある問題

SQL整形拡張機能は強力ですが、時として期待通りに動作しないことがあります。ここでは、よくある問題とその解決策をいくつか紹介します。

7.1 「整形されない!」

  • 拡張機能がインストールされているか?
    VS Codeの拡張機能ビューで、使用したい整形拡張機能が「インストール済み」になっているか確認します。
  • 拡張機能が有効になっているか?
    インストール済みでも無効になっている場合があります。拡張機能ビューで確認し、必要であれば有効化します。
  • VS Codeのデフォルトフォーマッタ設定は正しいか?
    「4.2 デフォルトフォーマッタの設定」で説明したように、settings.json"[sql].editor.defaultFormatter" が、使用したい拡張機能のIDになっているか確認します。IDが間違っているか、null になっていると整形が実行されません。
  • 保存時自動整形 (formatOnSave) が有効になっているか?
    手動で整形コマンドを実行しても何も起きない場合は、ショートカットキーが間違っているか、コマンドパレットからの実行を試してください。保存時に整形されない場合は、"[sql].editor.formatOnSave"true になっているか確認します。
  • ファイルがSQLとして認識されているか?
    開いているファイルの右下にある言語モード表示が「SQL」になっているか確認します。もし違う場合は、「4.4 ファイルタイプごとの有効化/無効化」を参考に、ファイル拡張子と言語モードの関連付け設定 (files.associations) を見直します。
  • SQLコードに構文エラーがないか?
    一部の整形ツールは、重大な構文エラーを含むコードを正常に整形できない場合があります。まずは構文エラーがないか確認し、クエリが実行できる状態か試してみてください。
  • 対象の拡張機能が現在開いているファイルに対応しているか?
    特にリモート環境(WSL, Dockerコンテナなど)で作業している場合、拡張機能がリモート側にもインストールされ、正しく動作する設定になっているか確認が必要な場合があります。

7.2 「期待通りに整形されない!」

  • 整形ルールの設定は正しいか?
    使用している拡張機能(PrettierまたはSQL Formatterなど)の設定ファイル(.prettierrc または settings.json)を開き、整形したいルールに対応する設定項目が正しく記述されているか確認します。設定項目の名前や値は、拡張機能の公式ドキュメントで確認してください。設定変更後は、VS Codeの再起動が必要な場合もあります。
  • 異なる拡張機能の設定が競合していないか?
    複数の整形拡張機能が入っている場合、設定が意図せず競合している可能性があります。「4.2 デフォルトフォーマッタの設定」で、SQLに対して使用するフォーマッタを一つに絞る設定が推奨されます。
  • 特定のSQL構文に対応していない?
    非常に複雑なクエリや、特定のデータベース独自の特殊な構文を使用している場合、整形ツールがその構文に対応しておらず、期待通りに整形できないことがあります。これは拡張機能の限界である可能性が高いです。その場合は、その部分だけ手動で調整するか、代替の整形ツールを検討する必要があります。
  • 拡張機能のバグ?
    一般的な構文なのに期待通りに整形されない場合、使用している拡張機能のバグである可能性もゼロではありません。拡張機能のGitHubリポジトリなどで、同様のIssueが報告されていないか確認したり、最新バージョンにアップデートしたりしてみてください。可能であれば、開発者にIssueとして報告することも検討しましょう。

7.3 パフォーマンスの問題

非常に巨大なSQLファイル(数千行、数万行など)を開いたり保存したりする際に、整形処理が遅くなることがあります。

  • ファイルの分割: 可能であれば、巨大なファイルを意味のある小さなファイルに分割することを検討します。
  • 整形機能の一時的な無効化: パフォーマンスが問題になる特定のファイルタイプやフォルダに対して、整形機能を一時的に無効にする設定がないか、拡張機能のドキュメントを確認します。
  • VS Code全体のパフォーマンス設定: VS Code自体のファイル監視や拡張機能の実行に関する設定を見直すことで、パフォーマンスが改善される場合があります。

8. さらに開発を加速!関連拡張機能 (おまけ)

SQL開発の効率をさらに高めるために、整形機能と合わせて利用すると便利なVS Code拡張機能をいくつか紹介します。

  • データベースクライアント機能 (例: SQLTools):
    VS Codeから直接データベースに接続し、クエリを実行したり、テーブル構造を確認したりできる拡張機能です。コードエディタとデータベースクライアントを往復する手間が省け、開発効率が大幅に向上します。多くのデータベース(MySQL, PostgreSQL, SQL Server, SQLite, Oracleなど)に対応したドライバが提供されています。
  • SQL構文チェッカー/Linter (例: SQLFluff):
    整形だけでなく、SQLの構文エラーやスタイル違反を検出・警告してくれる拡張機能です。定義済みのルールセットに従ってコードを静的に解析し、潜在的な問題を教えてくれます。整形ツールと組み合わせて使うことで、コードの品質をさらに高められます。SQLFluffはPythonベースのツールですが、VS Code拡張機能を通じて利用できます。
  • スニペット拡張機能:
    よく使うSQLの定型句(例: SELECT * FROM, INSERT INTO ... VALUES, CREATE TABLE, JOIN構文のテンプレートなど)を短い入力で展開できる拡張機能です。コーディング速度が向上します。
  • バージョン管理連携 (Git):
    VS CodeはGitとの連携機能が非常に強力です。SQLファイルも他のコードと同様にバージョン管理することで、変更履歴の追跡、差分表示、ブランチ管理などが容易になります。整形ツールによる変更も差分として表示されるため、変更内容を確認しやすくなります。

これらの拡張機能を組み合わせることで、VS CodeをSQL開発のための強力な統合環境として活用できます。

9. まとめ

本記事では、VS CodeでSQLを爆速整形するための様々な方法と、おすすめの拡張機能、そしてその詳細な活用法について解説しました。

SQLコードの整形は、単に見た目をきれいにするだけでなく、可読性、保守性、そしてチーム開発における効率と品質を劇的に向上させるための重要なプロセスです。手動での整形は非効率で属人性が高いため、VS Codeの強力な拡張機能を活用した自動化が不可欠です。

主要なSQL整形拡張機能として、多言語対応でエコシステムが魅力的なPrettier (with SQL plugin) と、SQL整形に特化し豊富なカスタマイズオプションを持つSQL Formatter を詳しく紹介しました。これらの拡張機能は、VS Codeの settings.json.prettierrc ファイルを通じて、キーワードの大文字/小文字、インデント、改行ルール、エイリアスのスタイルなど、きめ細やかな整形ルールを設定できます。

これらの拡張機能を導入し、特に保存時の自動整形 (editor.formatOnSave) を設定することで、整形作業にかかる時間と労力をゼロに近づけ、「爆速整形」を実現できます。さらに、ワークスペース設定や .prettierrc ファイルをチームで共有することで、プロジェクト全体のコードスタイルを一貫させることができます。

もちろん、特定のニーズに合わせてショートカットキーを設定したり、関連する他の拡張機能(データベースクライアント、Linterなど)と組み合わせて利用したりすることで、VS CodeでのSQL開発環境をさらに強化できます。

もし現在、手動でのSQL整形に時間を取られている、あるいはチームのコードスタイルがばらついているといった課題を感じているのであれば、ぜひ本記事を参考に、VS CodeのSQL整形拡張機能を導入してみてください。きっと、皆さんのSQL開発体験が劇的に向上するはずです。より快適で、より生産的なコーディングライフを送りましょう!


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール