crispy.data

Neo4j 5 のスタイルガイドを読む

2024-05-02
諸事情で綺麗な Cypher クエリを記述する必要に駆られ、コーディング規約的なものを探していたところ、Neo4j 5 のスタイルガイドを見つけたのでじっくり読んでみた。

推奨

  • monospaced なフォントを使用
  • ラベルやリレーション型について言及する際はコロン(:)を付与
    • (例):Label:REL_TYPE
  • 関数について言及する際は lower camel case と括弧を使用
    • (例)toString()
  • Cypher クエリをファイルに保存する場合は、.cypher の拡張子で保存
  • 左から右へのアローになるようにパターンを記述

インデントと改行

  • 新たな構文(MATCH, CREATE など)を使用する際は改行
  • ON CREATE 、ON MATCH を使用する際は、改行に加えて半角スペースを 2 つを付与
    MERGE (n {name: 'abc'}) ON CREATE SET n.count += 1
  • ON CREATE 、ON MATCH が両方存在する場合は、ON CREATE が先
  • サブクエリを使用する際は、左波括弧の後に改行し、半角スペースを 2 つを付与
  • 簡略化されたサブクエリを使用する際は改行不要

表記

  • 予約語は大文字
  • 値としての null は小文字
    • 条件式で使用される IS NOT NULLNULL は値としての null ではない扱いらしく、大文字にすべきらしい。
  • 真理値(true | false)は小文字
  • 関数、プロパティ、変数、パラメータは小文字から始まる camel case

スペース

プロパティ

  • 左波括弧と key の間のスペースは不要
  • key とコロンの間のスペースは不要
  • コロンと value の間は半角スペース 1 つ
  • value とカンマの間のスペースは不要
  • カンマと key の間は半角スペース 1 つ
  • 右波括弧と value の間のスペースは不要

ノード

  • ラベルや型とプロパティの間には半角スペース 1 つ
  • 演算子の両端には半角スペース 1 つ
  • コロンとラベルや型の間のスペースは不要
  • リスト内のカンマの後は半角スペース 1 つ

その他

  • パターンにはスペースは不要
  • 関数使用時の括弧内の両端のスペースは不要
  • 簡略化されたサブクエリを使用する場合は、半角スペースを 1 つ

その他

  • パターンを改行する場合は、アローの後に改行し、ノードを次の行頭に
    MATCH (a)-->(b)-->(c)--> (d)-->(e) RETURN a, b, c, d, e
  • 使用しない変数は使わず、匿名ノード、匿名リレーションを使用
    MATCH (a)-->()-->()--> (d)-->(e) RETURN a, d, e
  • 冗長性を削減するために、パターンはなるべくつなげる
    MATCH (a:Person)-[:ACTED_IN]->(m:Movie), (m)<--(b:Person) RETURN a, m, b
    MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<--(b:Person) RETURN a, m, b
  • 名前付きノードの後に匿名ノードを記述
  • アンカーノードは MATCH 句の最初に記述
  • STRING を表現するにはシングルクォーテーションを使用
    • ただし、表現したい文字列にシングルクォーテーションを含む場合は、ダブルクォーテーションを使用
  • セミコロンをクエリの最後につけない

後書き

1 行あたり何文字程度とか目安があるのかなと気になってたけど、調べた限りでは特に制限や推奨文字数はなかった。 他のクエリ言語と同じく、大体 80-100 文字ぐらいと考えておけば良いのかな。