MySQL Workbenchでタブ入力をスペース4つに変える設定を示す代表画像

概要

SQLスクリプトを複数人で管理する場合、インデントのルールを揃えることが重要です。タブとスペースが混在すると、コードの整列が崩れ、Gitのdiffで不要な変更が多く発生することがあります。

開発環境では、タブの代わりにスペース4つを使うポリシーがよく採用されます。MySQL Workbenchもバージョン6.2.4以降、タブ入力をスペースに変換する設定を提供しています。

設定

MySQL Workbenchでタブをスペースに変えるには、Preferencesメニューに移動します。

1Edit -> Preferences

MySQL WorkbenchのEdit → Preferencesメニューに移動する画面

PreferencesウィンドウでGeneral Editors項目を選択したあと、Indentation設定を変更します。

1General Editors -> Indentation
2
3Tab key inserts spaces instead of tabs: チェック
4Indent width: 4
5Tab width: 4

General EditorsのIndentationでタブの代わりにスペースを使うよう設定する画面

設定を保存したあとSQL編集画面でタブキーを入力すると、タブ文字ではなくスペース4つが入力されます。すぐに反映されない場合は、開いている編集画面を閉じて再度開くか、MySQL Workbenchを再起動してください。

プロシージャエディタでは設定が同じように適用されないことがあります。この場合はSQL編集画面で記述したあとプロシージャに反映するか、別のエディタでフォーマットを整えてから貼り付ける方法で対応します。

参考ドキュメント: MySQL Workbench General Editors Preferences

すでにタブが入っているファイルを整理する

この設定は今後入力するタブにのみ適用されます。すでに保存されているSQLファイル内のタブ文字はそのまま残ります。

コマンドラインで一括変換するにはexpandを使用します。

1# ファイル1つを変換
2expand -t 4 old.sql > new.sql
3
4# ディレクトリ全体を変換(実行前にバックアップを推奨)
5find . -name "*.sql" -exec bash -c 'expand -t 4 "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {} \;

Windowsで作業する場合は、VS Codeでファイルを開き、コマンドパレットからConvert Indentation to Spacesを実行する方法もあります。

.editorconfigでチームのルールを固定する

WorkbenchのPreferencesはそのPCのみに適用されます。チームメンバーごとに使うエディタが異なる場合は、リポジトリのルートに.editorconfigを置くほうが確実です。

1# .editorconfig
2root = true
3
4[*.sql]
5indent_style = space
6indent_size = 4
7end_of_line = lf
8insert_final_newline = true
9trim_trailing_whitespace = true

VS Code、IntelliJ、Vimなど、ほとんどのエディタがこのファイルを認識します。ただし、MySQL Workbenchは**.editorconfig**を読み込みません。 Workbench側は前述のPreferences設定で別途合わせる必要があります。

インデントがdiffに与える影響

タブとスペースが混在すると、ロジックはそのままなのにインデントだけが変わった行がdiffに大量に含まれてしまいます。レビュー時に実際の変更点が埋もれてしまい、git blameも見当違いのコミットを指すようになります。

すでに混在してしまったファイルを整理する場合は、インデント整理のみを行うコミットを分離するほうが良いです。機能変更と混ざるとレビューが難しくなります。

1git commit -m "chore: SQL 들여쓰기를 공백 4칸으로 통일"

空白の変更を無視して見たい場合は、以下のオプションを使用します。

1# 空白の変更を無視したdiff
2git diff -w
3
4# 空白の変更を無視したblame
5git blame -w