2019.09.17

可読性が高いSOQLフォーマットのご紹介

  • このエントリーをはてなブックマークに追加
  • follow us in feedly
gettyimages (12415)

みなさん、こんにちは。
テラスカイの植村です。

Lightning Platform上で開発していると、SOQLを扱うことは多いと思います。
SOQLは後で何度も目にすることになるため、フォーマットを揃えて、見やすく書くことが重要です。
そこで可読性が高く、美しいSOQLのフォーマットを考えてみました。

結論からいくとこんな感じです。二種類考えてみました。

キーワードで右揃え

    select Name
         , Email
         , Account.Name
         , Account.Owner.Name
         , (select Subject
                 , Status
                 , CaseNumber
              from Cases
          order by CreatedDate desc
             limit 1)
      from Contact
     where CreatedDate = TODAY
       and LeadSource = 'Web'
       and (Fax != null or Phone != null)
       and Birthdate != null
  order by Name
     limit 100
キーワードで右揃え

キーワードで改行

    select
        Name
        , Email
        , Account.Name
        , Account.Owner.Name
        , (
            select
                Subject
                , Status
                , CaseNumber
            from
                Cases
            order by
                CreatedDate desc
            limit
                1
          )
    from
        Contact
    where
        CreatedDate = TODAY
        and LeadSource = 'Web'
        and (Fax != null or Phone != null)
        and Birthdate != null
    order by
        Name
    limit
        100
キーワードで改行
前者はコンパクトです。SOQLはSQLほど複雑にならないので、このフォーマットでも破綻することはありません。私は普段このフォーマットで書いています。
後者はインデントルールが単純で迷いづらいですが、少し間延びした感じになります。

どちらも重要な部分が縦に並んでいるので可読性が高いですし、エディタで複数行をまとめて編集しやすいです。
お好きな方をお使いください。

ポイント

カンマは行頭
一般的に末尾に書かれることが多いですが、先頭に書いたほうが記述しやすいですし、継続行というのが分かりやすいです。SOQLに限らず、行末まで見なくてよい形式の方が素早く読めるため好ましいと思います。

キーワードは小文字
一般的に大文字で書かれることが多いと思いますが、大文字の連続は文字として可読性が低いです。小文字で統一すれば迷いませんし、可読性も高くなります。
例外として日付リテラルのみ大文字で書きます(Apexのバインド変数と区別しやすくするため)。

項目ごとに改行
項目名を横に並べて書くこともできますが、可読性, 編集しやすさが落ちます。最初から改行しておいた方がいいと思います。

Apexで書く場合の注意点

SOQLの開始行のインデントに依存しないように書くことが重要です。そうしないと変数名や型名などのリファクタリング時に都度再インデントする必要が出てきます。また前後の行と位置が揃わないので可読性が下がります。
    Contact[] contacts = [select Name
                               , Email
                            from Contact
                           where Name = :name];
☓だめな例
    Contact[] contacts = [
        select Name
             , Email
          from Contact
         where Name = :name
    ];
○良い例

まとめ

可読性を意識したSOQLのフォーマットを紹介させて頂きました。
ただし、複数人で開発する際は、フォーマットを統一することが重要なため、他と形式を揃えることをお勧めします。
ご参考になれば幸いです。

SOQL

16 件
     
  • banner
  • banner

関連する記事