Neo4Jを動かしてみた

297
Neo4Jを動かしてみた

Neo4Jを使って評価してみる話が出たので、とりあえず動かしてみるまのでメモ。

docker-compose

version: '3'
services:
  neo4j:
    container_name: neo4j
    image: neo4j
    ports:
        - 7474:7474
        - 7687:7687
    environment:
        - NEO4J_AUTH=neo4j/neo4jpasswprd
    volumes: 
        - ~/neo4j/data:/data
        - ~/neo4j/logs:/logs
        - ~/neo4j/conf:/conf
  • NEO4J_AUTHはNeo4Jの管理画面や後述のneo4j-driverでベーシック認証を行うときのユーザー名とパスワード
  • volumesはデータなどの格納先
  • portsで指定しているのは以下の通りのようだ
    • 7474: 管理画面のポート
    • 7687: Neo4JにAPIアクセスするためのポート

TypeScriptからのアクセス

neo4j-driverを使う。これにはTypeScript用の型定義も含まれている。

yarn add neo4j-driver

接続

const driver = neo4j.driver(
  'neo4j://localhost:7687',
  neo4j.auth.basic('neo4j', 'neo4jpasswprd')
)

ここではベーシック認証を使っているが、他の認証方式はまたの機会に。

書き込み

const node = { id: 'foobar', name: 'John Doe'}
driver.session().executeWrite(tx => {
  tx.run('MERGE (n: TestNode { id: $id,  name: $name })', node)
})

読み込み

const ret = await driver.session().executeRead(async tx => {
  const result = await tx.run('MATCH (n: TestNode) RETURN n')
  return result.records.map(r => {
    return {
      id: r.get('n').properties.id,
      name: r.get('n').properties.name
    }
  })
})

Neo4JはCypherで操作を行うので、アプリケーションを書く上ではCypher言語に習熟すれば良いようだ。