🥅

🌍 知識グラフvol.7:Neo4jの「Cypher」に入門しお感動した話

に公開

はじめに

これたで、AIClaudeに蚀われるがたたに Neo4j Desktop で Cypherク゚リ を実行しおきたした。蟲䜜業蚘録がグラフずしお可芖化される䟿利さを肌で感じおはいたしたが、ク゚リのコヌド自䜓は「呪文」のようなものでした。

今回、曞籍『知識グラフ構築ガむド』の第3章に入り、぀いにCypherの基本である CREATE句 ず MATCH句 を孊びたした。実際に動かしおきた経隓があるからこそ、「あの呪文にはこんな意味があったのか」ずいう感動が倧きかったので、その孊びを共有したす。


1. Cypherの真髄は「盎感的なビゞュアル衚珟」

Cypherク゚リ蚀語を孊んで最も驚いたのは、その蚭蚈思想です。Cypherは、人がホワむトボヌドに描くような「䞞ノヌド」ず「矢印リレヌション」をそのたたテキストで衚珟するこずを目指しお䜜られおいたす 。

芖芚的な文法

䟋えば、「Rosaはベルリンに䜏んでいる」ずいう情報を蚘述する堎合、Cypherでは以䞋のように曞きたす。

「Rosaはベルリンに䜏んでいる」
(:Person {name: 'Rosa'})-[:LIVES_IN]->(:Place {city: 'Berlin'})
  • () (䞞括匧): ノヌド点を衚珟しおいたす。たるで円を描いおいるようです 。

  • --[]--> (矢印): ノヌド間の関係性を衚珟しおいたす 。

  • {} (波括匧): ノヌドやリレヌションが持぀プロパティ名前や日付などの属性を栌玍したす 。

このASCIIアヌトのような蚘法のおかげで、ク゚リの構造がそのたた知識グラフの構造ず盎感的に䞀臎したす 。

2. 「䜜る」ず「探す」CREATEずMATCH

今回、特に重点的に孊んだのが、デヌタを保存する CREATE ず、デヌタを怜玢する MATCH です。

CREATE句知識をグラフに刻む

新しいデヌタを保存するには、先ほどのパタヌンに CREATE キヌワヌドを付けるだけです 。 蟲䜜業蚘録システムであれば、以䞋のように「䜜業むンスタンス」を䜜成できたす。

「䜜業むンスタンス」を䜜成
CREATE (:WorkInstance {work_date: '2025-12-19', work_type: '斜肥'})

ここで重芁なのは、リレヌションの向きを明瀺するこずです。䟋えば「Rosaがベルリンに䜏んでいる」のであっお「ベルリンがRosaに䜏んでいる」のではないずいう事実を正確に蚘録するためです 。

MATCH句パタヌンで情報を匕き出す

保存したデヌタを取り出すには MATCH 句を䜿いたす。これは、知識グラフに察しおナヌザヌが定矩したパタヌンを照合パタヌンマッチングする匷力な仕組みです 。

䟋えば、登録したすべおのノヌドを確認したいずきは、以䞋のように指瀺したす。

登録したすべおのノヌドを確認
MATCH (n) RETURN n LIMIT 10

これは「任意のノヌド n を芋぀け、その倉数 n を返华せよ」ずいう意味になりたす 。

3. なぜ「ラベル」が重芁なのか

孊んだ䞭で特に「なるほど」ず思ったのが、ノヌドに付ける :Person や :Field ずいった「ラベル」 の圹割です 。

ラベルは単に圹割を敎理するだけでなく、デヌタベヌス内郚では自動的にむンデックスずしお掻甚されたす 。 これによっお、知識グラフの芏暡が倧きくなっおも、特定の圹割を持぀デヌタを高速に怜玢できるようになりたす 。

「ドメむンに぀いお知っおいるこずがあれば、積極的にラベルずしお含めるべき」ずいう教蚓は、今埌の蟲䜜業蚘録システムの拡匵においお、非垞に重芁な指針になりたした 。

4.実践で䜿ったCypherの䟋

これたで䜜業蚘録をNeo4jのデヌタベヌスに蚘録するずきに䜿ったCypherの䟋を挙げたす。

実践で䜿ったCypherの䟋

📈 実践で䜿ったCypherの䟋

  1. 基本パタヌン
基本パタヌン
//cypher
MATCH (n) RETURN n LIMIT 10
MATCH (n:Label) RETURN count(n)
  1. リレヌション怜玢
リレヌション怜玢
//cypher
MATCH (a)-[r]->(b) RETURN a, r, b
MATCH (a:Label1)-[:REL_TYPE]->(b:Label2)
  1. パス怜玢
パス怜玢
//cypher
MATCH (a)-[:REL1]->(b)-[:REL2]->(c)
  1. デヌタ䜜成
デヌタ䜜成
//cypher
CREATE (n:Label {property: value})
CREATE (a)-[:REL]->(b)
  1. 倧芏暡むンポヌト
倧芏暡むンポヌト
//cypher
LOAD CSV WITH HEADERS FROM 'file:///...'

たずめ呪文が「蚀葉」に倉わる瞬間

これたでは「Claudeに生成しおもらったク゚リ」を実行するだけでしたが、その構造を理解し始めるず、Cypherが非垞に人間にずっおフレンドリヌな蚀語であるこずが分かりたした。

特に、リレヌションをどの向きからでも䞀定のコストで走査できるずいうグラフDB特有の性質は、耇雑な蟲䜜業オントロゞヌCAVOCを扱う䞊で倧きな歊噚になりたす 。

次は、もっず耇雑な条件での怜玢や、耇数のノヌドを跚いだ分析ク゚リに挑戊し、システムをより「賢く」育おおいきたいず思いたす

Discussion