インデントとは?
インデント(字下げ)とは、文章や文字の先頭に空白(スペース)を挿入し、文字を右側に配置することです。
プログラミングのコード記述で「インデントを揃える」といった言葉を聞いたことがある人もいるのではないでしょうか。
では、なぜインデントは使われるのか、その理由を詳しく見ていきましょう。
インデントを使う理由
「なぜインデントは揃える必要があるの?」と思う人もいるのではないでしょうか。
インデントを使う理由は、大きく分けて次の3つです。
- 文章(コード)が読みやすい
- 文章(コード)が理解しやすい
- 文章(コード)をメンテナンスしやすい
ひとつずつ簡単に説明します。
1.文章(コード)が読みやすい
インデントを使う大きな理由のひとつは「読みやすさ」にあります。
極端な例ですが、以下のようにインデントがバラバラになっていたり、使われていないかったりすると「読みづらい」と感じるはずです。
■インデントがバラバラな例
日本国民は、正当に選挙された国会における代表者を通じて行動し、 われらとわれらの子孫のために、諸国民との協和による成果と、 わが国全土にわたつて自由のもたらす恵沢を確保し、 政府の行為によつて再び戦争の惨禍
■インデントがない
日本国民は、正当に選挙された国会における代表者を通じて行動し、われらとわれらの子孫のために、諸国民との協和による成果と、わが国全土にわたつて自由のもたらす恵沢を確保し、政府の行為によつて再び戦争の惨禍
日本語であればまだ読めるかもしれませんが、プログラミングのコードなどはインデントがないと可読性が極端に下がります。
読みづらい文章を読むのには、時間がかかる、そもそも読む気が起きないといった弊害がありますよね。
このような弊害を取り除くためにも、インデントの読みやすさは有効です。
2.文章(コード)が理解しやすい
文章の可読性が下がることで、記述内容の理解度にも影響を及ぼすでしょう。
プログラミングであれば、バグや不具合が発生した場合に、どの記述が悪いのかなかなか見つからないのは問題です。
内容がごちゃごちゃ書かれていて「どこに何が書かれているのか」がわからない文章よりも、パッと見てわかる状態の文章の方がよいことは自明ですよね。
3.文章(コード)をメンテナンスしやすい
また、ソースコードであれば後々、メンテナンスが必要になることもあります。
その際に読みづらいコードで記述されていると、メンテナンスも難しくなるといった悪影響を与えることに。
文章作成後のことも考えると、インデントを正しく使うことはとても大切なのがわかります。
このように「読みやすさ」「理解しやすさ」「メンテナンスしやすさ」を考慮して、インデントを使うことが重要です。
SQLでインデントのルールはある?
インデントをつける際に「ルールはあるの?」と気になる人もいるかもしれません。
ですが、一般的にインデントをつけるルールというものは存在しません。
会社やプロジェクトによっては、決められている場合もあるでしょう。
インデントと合わせて押さえておきたいSQLの記述方法
インデントのルールはありませんが、SQLクエリの記述にはある程度の共通認識が必要です。
なぜなら独自のやり方になると、他の人が読んだ場合に「読みづらい」と感じてしまうこともあるからです。
ここでは、よく用いられているSQLの記述方法を5つ紹介します。
- 大文字・小文字を使い分け
- 予約語の後は改行
- 1カラム1行
- 2スペースでインデント
- セミコロンは最終行に配置
ひとつずつ記述方法を見ていきましょう。
1.大文字小文字を使い分け
SQL文の大文字・小文字の使い分けも読みやすさにつながります。
サイトや人によっては大文字と小文字を分けて使っていたり、すべて小文字で書いている人もいるでしょう。
「何で大文字と小文字で分かれていたり、全部小文字だったりするんだろう?」と疑問に思っている人もいるかもしれません。
SQL文は大文字で記述しても、小文字で記述しても動作に問題はありません。
単純に読みやすさを基準にして使い分けています。
SQL文の大文字・小文字に関する記述方法は、以下を参考にするとよいでしょう。
- 大文字:予約語(SELECT、FROM、WHERE…)/関数
- 小文字:テーブル名/カラム名/オブジェクト名
大文字で書いても小文字で書いても動作に支障はありませんが、上記のようなルールで記述されていると読みやすく、理解もしやすくなります。
【悪い例】
select date, name as first_name, memo from user join class on user.id = class.id;
【良い例】
SELECT date, name AS first_name, memo FROM user JOIN class ON user.id = class.id;
2.予約語の後は改行
予約語の後は改行を入れると一気に読みやすさがアップします。
1行にすべての情報が書いてあっても読める人もいるとは思いますが、適切な位置で改行されたSQL文は見た目もキレイで何がどこに書いてあるのか一目でわかるものです。
ただし、全ての予約語に改行を入れてしまうのも、改行が増えすぎて逆に読みづらくなることもあるでしょう。
そのため、基準として次の予約語の後に改行を入れます。
- SELECT
- FROM
- WHERE
- GROUP BY
- ORDER BY
上記の基準を参考に、改行を入れた例が次の通りです。
【悪い例】
SELECT date, name AS first_name, memo FROM user JOIN class ON user.id = class.id;
【良い例】
SELECT date, name AS first_name, memo FROM user JOIN class ON user.id = class.id;
基本的に、「予約語→テーブル名→予約語→カラム名→予約語→…」といった順番で並べるという認識で問題ないでしょう。
3.1カラム1行
SELECTやWHEREなどで指定する条件式やカラムは、1行に1つまでにしましょう。
1行に多くの情報を記述してしまうと、ASの指定箇所や関数の範囲などがわかりづらくなります。
カラム名や条件式の認識違いが起こると、意図しない動作を引き起こす可能性も出てくるので重要なポイントです。
先ほどのSQL文をより整形すると、次の「良い例」のようになります。
【悪い例】
SELECT date, name AS first_name, memo FROM user JOIN class ON user.id = class.id;
【良い例】
SELECT date , name AS first_name , memo FROM user JOIN class ON user.id = class.id;
良い例では、カラムごとにも改行を入れています。
また、カラムを区切るカンマ(,)は行頭に記述するとよいでしょう。
4.2スペースでインデント
本題の「インデント」については、半角スペース2つでのインデントに統一すると良いでしょう。
会社やプロジェクトのルールによっては「半角スペース4つ」など決められている場合もあるので、この辺りはケースバイケースではあります。
SQL文に改行を入れるだけでも可読性はグッと上がりますが、インデントがあるとより読みやすくなります。
予約語は先頭に配置し、テーブル名やカラム名にインデントをつけます。
インデントを入れた例とそうでない例を見比べてみましょう。
【悪い例】
SELECT date , name AS first_name , memo FROM user JOIN class ON user.id = class.id;
【良い例】
SELECT date , name AS first_name , memo FROM user JOIN class ON user.id = class.id;
インデントがない場合よりも、予約語とそれ以外の情報がわかりやすく区別されていますよね。
これを見るだけでもインデントの重要性がわかるのではないかと思います!
5.セミコロンは最終行に配置
細かい部分にはなりますが、セミコロンは最終行に配置するとよいです。
その理由は、複数のSQLクエリを並べて記述する際に、SQLクエリがどこで終わっているのかがわかりやすくなるからです。
また、セミコロンは記述を忘れると正常に動作しないため、記述忘れを防ぐ意味でも最終行に書くようにすると良いですね。
【悪い例】
SELECT date , name AS first_name , memo FROM user JOIN class ON user.id = class.id;
【良い例】
SELECT date , name AS first_name , memo FROM user JOIN class ON user.id = class.id ;
以上、5つのSQL記述方法について紹介しました。
「何だか細かいルールが多くて大変」と感じた人もいるかもしれません。
しかし、これらの記述を意識するだけSQL文の読みやすさが格段に変わります。
これまでSQL文の記述方法を意識していなかった人は、ぜひ参考に記述してみてください!
SQL文の整形サンプル
ここまで、SQL文の記述方法やインデントのつけ方を紹介しました。
毎回記述方法を意識してSQL文を書くのもよいですが、頻繁に使うSQLクエリはフォーマットがあると便利です。
ここでは、よく利用するSQL文の整形サンプルを紹介します。
- SELECT文
- CREATE文
- INSERT文
- UPDATE文
- DELETE文
- ALTER文
- MERGE文
- CASE式
- WHERE句
ひとつずつ、記述例を見ていきましょう。
SELECT文
SQL文の中でも頻繁に使う構文です。
基本的な記述方法の通り、予約語は行頭に記述し、テーブル名やカラム名の前には半角スペース2つ分のインデントをつけます。
ただし、改行が増えすぎても可読性に欠けるため、「AS句」はカラム名と合わせて1行で記述しましょう。
SELECT テーブル名.カラム名1 AS 別カラム名1 , テーブル名.カラム名2 AS 別カラム名2 FROM テーブル名 WHERE テーブル名.カラム名3 = 条件 ORDER BY テーブル名.カラム名1 , テーブル名.カラム名2 ;
CREATE文
CREATE文は「CREATE」と「TABLE」を分けて記述しています。
改行が増えるのが嫌な場合は、1行で記述しても問題ないでしょう。
カラム名とデータ型は、行ごとに揃えて記述すると可読性の観点からよいです。
CREATE TABLE テーブル名( カラム名1 データ型 , カラム名2 データ型 , カラム名3 データ型 ) ;
INSERT文
INSERT文も、改行が増えるのが嫌な場合は、「INSERT INTO」と1行で記述しても問題ないです。
また、カラム名と値は行ごとに揃えて記述しています。
INSERT INTO テーブル名( カラム名1 , カラム名2 , カラム名3 ) VALUES( 値1 , 値2 , 値3 ) ;
UPDATE文
UPDATE テーブル名 SET テーブル名.カラム名1 = 値1 , テーブル名.カラム名2 = 値2 WHERE テーブル名.カラム名1 = 条件 ;
DELETE文
DELETE FROM テーブル名 WHERE テーブル名.カラム名1 = 条件 ;
ALTER文
ALTER TABLE テーブル名 ALTER COLUMN カラム名 データ型 ;
MERGE文
MERGE文は全体的に記述量が多く、複雑になりがちですが、記述方法通りに書けばきれいに整形できます。
MERGE INTO テーブル名1 USING テーブル名2 ON ( テーブル名1.カラム名1 = テーブル名2.カラム名2 ) WHEN MATCHED THEN -- 条件が一致した場合 UPDATE テーブル名 SET テーブル名.カラム名1 = 値1 , テーブル名.カラム名2 = 値2 WHERE テーブル名.カラム名1 = 条件 WHEN NOT MATCHED THEN -- 条件が一致しなかった場合 INSERT INTO テーブル名( カラム名1 , カラム名2 , カラム名3 ) VALUES( 値1 , 値2 , 値3 ) ;
CASE式
CASE、WHEN、THEN、ELSEの後にそれぞれ改行を入れるときれいに整形できます。
「CASE」から「END」まではインデントを入れて、条件文とその条件式をわかりやすく記述しましょう。
CASE WHEN 条件式 THEN 1 WHEN 条件式 AND 条件式 THEN 2 ELSE 0 END
WHERE句
WHERE句の場合、カラムと条件式の比較は左辺にカラムを記述するように統一しましょう。
WHERE テーブル名.カラム名 = 条件式 AND テーブル名.カラム名 < 条件式
また、複数テーブルで条件式を使う場合は、FROM句に記述した順番で記述します。
FROM テーブル名1 , テーブル名2 , テーブル名2 WHERE テーブル名1.カラム名1 = 条件式 AND テーブル名1.カラム名2 = 条件式 AND テーブル名2.カラム名1 = 条件式 AND テーブル名2.カラム名2 = 条件式 AND テーブル名2.カラム名1 = テーブル名1.カラム名1 AND テーブル名3.カラム名1 = 条件式 AND テーブル名3.カラム名2 = 条件式 AND テーブル名3.カラム名1 = テーブル名1.カラム名1 AND テーブル名3.カラム名2 = テーブル名1.カラム名2 AND テーブル名3.カラム名3 = テーブル名2.カラム名3
条件の「AND」と「OR」は行頭に記述するように統一すると、可読性が上がってよいでしょう。
SQLでインデントをつけるツール
ここまで、SQLでインデントをつける基準・ルールについて解説しました。
内容は理解したものの「毎回この基準を確認しながら、インデントをつけるのは面倒くさい」と感じる人もいるでしょう。
実は、Web上でインデントを簡単につけてくれるツール・サイトがあります。
手間隙をかけずに、ある程度SQLクエリを整形したい場合に便利です。
例えば、以下のようなサイトがあります。
使い方は至って簡単で、整形したいSQL文を入力し、条件を設定すればOKです。
例えば、「SQL文整形」でSQL文を整形した場合、次のような形で表示されます。
整形されたSQL文を見ると、予約語が大文字になっていたり、改行・インデントがついていたりと、この記事で説明した内容が反映されていますよね。
このような形で、入力したSQL文を簡単に整形できます。
サイトやツールによっては指定できる条件が異なるので、ぜひ自分にあったツールを見つけて活用してください。
まとめ
SQLのインデントについて解説しました。
インデントは、自分や他の人がSQL文を読んだ際の読みやすさやメンテナンスしやすさにもつながる重要な要素です。
決まったルールというものはありませんが、この記事を参考に読みやすいSQL文を作成しましょう。