1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【JavaScript】定数で長い文字列(SQL文)を持たせる

Last updated at Posted at 2022-01-03

はじめに

筆者はJavaScriptの経験が浅いため、参考程度にご覧いただければと思います。
また、誤記や誤字、アドバイス等ありましたら、コメントお願いします!

経緯

Node.jsを使用したAPI作成で「SQL文」を文字列として、const定数に持たせる際、
どのように書けば見やすいのか、候補をまとめてみました。

1行で書く

短いSQL文なら問題ないが、定数宣言合わせて2行になる場合は、
横スクロールしないと、全体が確認できないので、見づらい

const sqlStr =
  "SELECT param1, param2, param3, param4, param5 FROM test_table WHERE param6 = 'test';";

加算演算子で文字を連結

JavaScriptを触ったことがない人でも
何となくイメージしやすい形かつ、コードが長くなっても見やすい

const sqlStr =
  "SELECT" +
  " param1," +
  " param2," +
  " param3," +
  " param4," +
  " param5 " +
  "FROM test_table " +
  "WHERE param6 = 'test';";

バックスラッシュ( \ )で文字を連結

SQL文を持たせる場合、個人的に、これが一番最適
(ただし、下記のように文字の前にインデントが入る場合に限る)

const sqlStr =
  "SELECT\
    param1,\
    param2,\
    param3,\
    param4,\
    param5\
  FROM test_table\
  WHERE param6 = 'test';";

SQL文はそれぞれの語句(SELECTやFROMやWHEREなど)の後に必ず空白を挟まなくてはいけないので、空白を入れるのを忘れていた場合、正常に動かない。

下記コードの場合、SQL実行の際に、エラーになる。
param5とFROMに空白が入らない: "...param4, param5FROM test_table..."

const sqlStr =
  "SELECT" +
  " param1," +
  " param2," +
  " param3," +
  " param4," +
  " param5" + // param5の後に空白がない
  "FROM test_table " +
  "WHERE param6 = 'test';";

その反面、バックスラッシュ( \ )でSQL文を表現した場合、インデントの空白も文字列の空白として、判断されるため、空白によるエラーは発生しづらい。

コメントで頂いた方法(2022/01/03 14:50追記)

配列で文字列を連結する

全ての文字列の間に、明示的に空白を入れることができるため、文字列間に必ず空白が入っていないといけない時にはこの方法が一番安心できそう。

const sqlStr = [
  "SELECT",
  " param1,",
  " param2,",
  " param3,",
  " param4,",
  " param5",
  "FROM test_table ",
  "WHERE param6 = 'test';"
].join(" ");

バッククォートで文字列を作る

バッククォート内の文字列は改行を自由に入れることができるため、改行が入っても問題ない(改行で文字列を区切りたい)場合は、バッククォートを使用するのが良さそう。
(SQL文の場合は、改行が入っていても、問題ないため、この方法が◎)

const sqlStr =
  `SELECT
    param1,
    param2,
    param3,
    param4,
    param5
  FROM test_table
  WHERE param6 = 'test';`;

まとめ

  • SQL文を作成する場合:バッククォート内で適宜、改行を入れる
  • 文字列の間に空白を入れたい場合:バックスラッシュ( \ )を入れる又は配列joinを使用する

参考

1
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?