SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します

    • このページをはてなブックマークに追加

    公開日:2021年09月08日 最終更新日:2021年10月14日

    多重の入れ子構造を使って巨大なSQLを書くと、SQLが肥大化しがちです。するとSQLの可読性が下がり、メンテナンスが難しいという問題が発生する場合も。今回は、そんな複雑になりがちなSQL文を見やすくきれいに整形する方法をご紹介したいと思います。

    1. SQLの整形とは

    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    SQLの整形とは、SQLの体裁を整えて、書いた人以外の人が読んでも一発でその内容が理解できるような形にすることです。
    SQLが数行程度で済むうちは大丈夫ですが、行数が増えてくると「コードの読みやすさ」は最重要課題になります。特に開発の現場では次のような問題が発生します。

    • チームメンバーが解読に困って、チームでの作業に支障が出る

    • 保守を引き継いだ人が解読に困って、改修やメンテナンスの作業に支障が出る

    • 文法ミスや「,」や「;」の打ち忘れが、どこで発生しているのか見つけ難い

    一行の長いSQL文があった場合、決まったポイントで改行やインデントを加えます。するとどこが抽出対象でどこが抽出条件なのかなどを、パッと見て把握しやすくなります。

    例えば、次のようなSQLがあったとします。

    SELECT num, name FROM user_table WHERE country = 'JPN' AND age >= 20 AND age <= 30 AND ( grade = 'A' OR grade = 'C' OR grade = 'D');
    

    これを改行で整形すると、次のようになります。

    SELECT
            num,
            name
    FROM
            user_table
    WHERE
            country = 'JPN'
            AND age >= 20 
            AND age <= 30
            AND (
                grade = 'A'
                OR grade = 'C'
                OR grade = 'D'
            );
    

    こうしておくと、どこから何をどんな条件で操作しようとしているSQLなのかを、後日ぱっと見たときや、専門外の人が見たときでも、内容を把握しやすくなるのです。

    さらにこの条件の場合、もっとすっきりとさせることもできます。

    SELECT
            num,
            name
    FROM
            user_table
    WHERE
            country = 'JPN'
            AND age BETWEEN 20 AND 30 
            AND grade IN ( 'A', 'C', 'D');
    

    それでは、整形の仕方を詳しく見ていきましょう。

    ▲ページトップへ戻る

    1.1 基本的な整形ルール

    基本的な整形ルールとして、インデントの活用や大文字、小文字の使い分け、条件(ANDやOR)の位置を揃えるなどが挙げられます。このルールには国際標準などはなく、個人の好みや現場の取り決め(コーディング規約)によって異なるルールを設定して書かれているような状況ではありますが、ここでは、よく見かける整形ルールをご紹介したいと思います。

    ▲ページトップへ戻る


    1.1.1 インデント

    上でも挙げましたが、このようにずらっと一行に書かれたSQLがあったとします。

    SELECT num, name FROM user_table WHERE country = 'JPN' AND age >= 20 AND age <= 30 AND ( grade = 'A' OR grade = 'C' OR grade = 'D');
    

    これを改行とインデント で整形すると、次のようになります。

    インデント:行頭に空白やタブを入れること

    SELECT
            num,
            name
    FROM
            user_table
    WHERE
            country = 'JPN'
            AND age >= 20 
            AND age <= 30
            AND (
                grade = 'A'
                OR grade = 'C'
                OR grade = 'D'
            );
    

    ▲ページトップへ戻る


    1.1.2 大文字・小文字を使い分ける

    かつてSQLといえば、仕様の関係上、全ての文字が大文字という時代もありました。しかし今では、大文字と小文字を使い分けることができます。人や現場によってルールが異なりますが、例えばSQLの構文(SELECTやINSERTなど)は大文字、テーブル名やカラム名を小文字といったように使い分けると、構文の部分と固有名の部分が見分けやすくなるという意見が多いようです。

    全て大文字の場合

    SELECT
            ID,
            NAME
    FROM
            USER_TABLE
    WHERE
            COUNTRY = 'JPN'
            AND AGE BETWEEN 20 AND 30 
            AND GRADE IN ( 'A', 'C', 'D');
    

    大文字と小文字を使い分けた場合

    SELECT
            id,
            name
    FROM
            user_table
    WHERE
            country = 'JPN'
            AND age BETWEEN 20 AND 30 
            AND grade IN ( 'A', 'C', 'D');
    

    ▲ページトップへ戻る


    1.1.3 AND/ORの条件は行の先頭に記述する

    ANDやORといった条件は、行の先頭に記述することでも可読性を改善できます。

    行の末尾に記述した場合

    (略)
    WHERE
            country = 'JPN' AND
            age >= 20 AND
            age <= 30 AND (
                grade = 'A' OR
                grade = 'C' OR
                grade = 'D'
            );
    

    行の先頭に記述した場合

    (略)
    WHERE
            country = 'JPN'
            AND age >= 20 
            AND age <= 30
            AND (
                grade = 'A'
                OR grade = 'C'
                OR grade = 'D'
            );
    

    ▲ページトップへ戻る

    1.2 SQLの整形を行う方法

    次に、このSQLの整形作業を効率的に行うための手段にはどのようなものがあるかを、ご紹介します。


    1.2.1 SI Object Browserを使う

    Oracleデータベースを利用している環境では「SI Object Browser」を導入している現場も多いです。SI Object Browserには「SQL整形」という機能があり、SQLの自動整形を行ってくれるので便利です。
    まずは自動整形を行い、自動整形でも可読性が十分ではない箇所を手動で直すと良いでしょう。

    ▲ページトップへ戻る


    1.2.2 手作業

    SI Object BrowserのSQL整形機能で対応しきれない微調整などには、高機能テキストエディタの利用がおすすめです。Windows標準のメモ帳でも対応することができますが、作業効率がぐんと変わります。

    筆者がSEの実務で使用していたオススメは、サクラエディタです。インストールせずに使うこともできるため、自分にインストール権限のないPCなどでも使用することができます。特にSQL整形には矩形選択がとても便利ですので、興味のある方はそちらの記事もご覧下さい。

    なおSQLの強調キーワード(構文を自動で色分けしてくれる機能)も、初期機能で設定されています。

    ▲ページトップへ戻る


    1.2.3 外部サービス

    SQLの自動整形ができるWebサイトを使って、オンラインで整形する方法もあります。ただしこの場合、そのサービスに整形したいSQLを送信することになります。つまりSQLに含まれる個人情報や顧客情報資産を、漏洩させてしまう恐れがあるのです。

    項目の内容だけでなく、業務で作成されたSQLであればそのソース自体が、外部への持ち出し禁止とされている現場は多々あります。

    そのため無料ツールサイトを業務で使用することはおすすめできませんが、個人開発などの場合であればとても便利に使える場面もあるので、使い分けに気を付けて活用して下さい。

    ▲ページトップへ戻る

    2. オンラインで無料で使用できるSQL整形ツール3選

    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    業務情報を扱う場合は利用できませんが、個人開発などの場面であればオンラインの無料ツールはとても便利です。ここでは、3つのおすすめサイトをご紹介します。

    ▲ページトップへ戻る

    2.1 SQL文整形(ラッコツールズ)

    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    ▸ サイトURL:https://rakko.tools/tools/37/

    インデントや改行を調節して、SQL文を整形します。複数のオプションが選択できるので、お好みのSQL文に一発で整形可能です。

    整形前

    SELECT num, name FROM user_table WHERE country = 'JPN' AND age >= 20 AND age <= 30 AND ( grade = 'A' OR grade = 'C' OR grade = 'D');
    

    整形後

    SELECT
            num,
            name
    FROM
            user_table
    WHERE
            country = 'JPN'
            AND age >= 20 
            AND age <= 30
            AND (
                grade = 'A'
                OR grade = 'C'
                OR grade = 'D'
            );
    

    ▲ページトップへ戻る

    2.2 SQLフォーマッターFor Web

    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    ▸ サイトURL:https://atl2.net/webtool/sqlフォーマッターfor-web/

    こちらもインデントや改行を調節して、SQL文を整形します。こちらはカンマやAND/ORの位置を前か後か、お好みで選ぶことも可能です。

    整形後

    SELECT
        num,
        name
    FROM
        user_table
    WHERE
        country = 'JPN'
    AND age >= 20
    AND age <= 30
    AND (
            grade = 'A'
        OR  grade = 'C'
        OR  grade = 'D'
        )
    ;
    

    ▲ページトップへ戻る

    2.3 Instant SQL Formatter

    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    ▸ サイトURL:https://www.dpriver.com/pp/sqlformat.htm

    海外サイトですが、日本語も文字化けせず利用することができます。英語ではありますが、テーブル名やカラム名の大文字小文字化などの設定可能部分が最も多いサイトです。

    整形後

    SELECT num,
           name
    FROM   user_table
    WHERE  country = 'jpn'
           AND age >= 20
           AND age <= 30
           AND ( grade = 'a'
                  OR grade = 'c'
                  OR grade = 'd' ); 
    

    ▲ページトップへ戻る

    3. SQLやデータベースに関する案件の例

    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    最後に、現在プロエンジニアに掲載されているデータベース関連のおすすめ案件をご紹介します。

    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    自社サービス向けのデータ分析支援を行うエンジニアを募集する案件です。月額単価は90万円~で、スキル見合いとなっております。

    詳しくは案件情報ページをご覧下さい。
    データエンジニア★自社サービス向けデータ分析支援


    SQLを簡単に読みやすく整形する方法。無料ツールもご紹介します【フリーランスエンジニア案件情報 | プロエンジニア】

    新システムのデータベース設計を行い、旧システムのデータベースからデータ移行作業まで行う案件です。月額単価は70万円~で、スキル見合いとなっております。

    詳しくは案件情報ページをご覧下さい。
    データベースエンジニア★勤怠・購買管理システムのデータ移行

    ▲ページトップへ戻る

    4. まとめ

    SQLの整形ルールや方法について、いかがでしたでしょうか。整形ルールには国際規格や標準といったものがないのが現状で、それぞれが好みで行っている場合もあります。ですが開発現場によってはコーディング規約や暗黙のルールがある場合もありますので、先輩などに確認してみることもおすすめです。個人で開発する場合でも、SQLは特にきれいに整えると可読性と保守性がぐっと上がったことが実感できるものです。長いSQLを扱う際には、ぜひ実践してみて下さいね。

    ▲ページトップへ戻る


    最新の求人情報をチェック!

    月額単価90万円〜
    勤務地 東京都 品川区 ・23区外
    月額単価80万円〜
    勤務地 東京都 千代田区 ・港区
    • このページをはてなブックマークに追加

    おすすめ記事

  • ピックアップ

    フリーランス

    【JavaScript/SQL】システムエンジニア★某保険会社向け通達ニュース開発支援(Intra-mart) NEW

    月額単価 :90万円〜

    既存Formaアプリケーションの改修作業(Intra-mart) 工程:設計、開発、単体テスト、結合テスト

    フリーランス

    【Java/SQL】システムエンジニア★サイトリニューアルに関わる決済・返金処理のWebAPI及びバッチ設計

    月額単価 :80万円〜

    オンラインショッピングサイトリニューアルに関わる決済、返金処理のWebAPI及びバッチ設計をご担当いた...

    フリーランス

    【PMO】国保システム向け支援

    月額単価 :80万円〜

    病院にかかった患者さんの健康保険が有効かどうか、診療報酬点数が何点か、等を管理しているシステムに...

    正社員

    【Java】システムエンジニア|業務アプリケーションの開発

    年収 :300万円〜

    WEBアプリケーション開発 業務アプリケーション開発 自社製品開発

    株式会社khronos