Neo4j とは?
いわゆるグラフデータベースといわれる、グラフ(Excelとかのグラフではなくネットワーク的なデータ)を扱うデータベースです。
今ではAzureやAWSなどのDocument DBなどでもグラフデータを扱えるAPIもありますが、Neo4jは比較的老舗で情報も多くローカルでも簡単に動かせるので軽く試す分には楽です。
ということで、Windows環境にインストールして、軽くサンプルを動かすまでの手順になります。
※ Macの手順は多くみるのですが、Windowsの手順が古いものしかなかったので記事まとめてみました
Download
Neo4j公式
https://neo4j.com/
上記からDownloadします。右上のDownloadをクリックして進みますが、まず大きく Enterprise版 のバナーが出てきます。 Enterprise版を使いたい方はこちらからでよいですが、お勉強用にCommunity版を使いたい方は、下の方にある DOWNLOAD NEO4J SERVER
をクリックしてください。
ダウンロードのリンクが出てくるので、あまり何も考えずに最新バージョンのCommunity版のzipをダウンロードします。
Windows Neo4j 3.3.5 (zip)
インストールと初回実行
事前にJavaのインストールが必要になりますのでやっておいてください。 最近のJavaだったら特になにも考えずにインストールするだけで使えるはずです。
次に、Downloadしたzipを展開して、適当な場所に置きます。
Cドライブ直下でもいいですし、何かフォルダを切ってもいいです。
そこまでできたらコンソール(DOSプロンプトやMingwや)で展開した場所まで移動して次のコマンドを実行します。
$ cd {zipを展開したディレクトリ}
$ bin/neo4j.bat console
Start/Stop
2018-04-24 23:13:23.826+0000 INFO ======== Neo4j 3.3.5 ========
2018-04-24 23:13:23.873+0000 INFO Starting...
2018-04-24 23:13:27.680+0000 INFO Bolt enabled on 127.0.0.1:7687.
2018-04-24 23:13:33.903+0000 INFO Started.
2018-04-24 23:13:35.288+0000 INFO Remote interface available at http://localhost:7474/
この時に、
Error: missing `server' JVM at `C:\Program Files (x86)\Java\jre1.8.0_171\bin\server\jvm.dll'.
こんなエラーが出ることがあります。 この場合には、
...Java\jre1.8.0_171\bin\client
を...Java\jre1.8.0_171\bin\server
という名前でコピーしてください。
コンソールにURL http://localhost:7474/
と出ているので素直にブラウザで開きます。
オシャレなログイン画面が出てきたら成功です。
Hello World
初期ID/パスワードは neo4j
neo4j
ですので、パスワードをいれてログインします。
ログイン後にパスワードを変えろといってくるので、新しいパスワードを入れます。
オシャレな画面がでてきたと思います。 いろいろgetting started的なものが並んでいますが、それはいったん無視して、
いちばん上部にあるコマンドラインからコマンドをいれていくことで、サンプルを実行していくことになります。
コマンドをいれて
Enter
で実行。
Shift+Enter
で改行されてマルチラインモードになり、その状態ではEnter
で改行になってCtrl+Enter
でコマンド実行になります。
まず、今回はチュートリアルということで、Hello Worldをグラフっぽく表現してみてこんなデータを作ってみます。
I ---[say Hello]--> You
わたし は あなた に say Hello です。 わたし と あなた を say Hello という関係で結び付けたものです。 ...あくまでNeo4jのサンプルということで、例題は適当です。
ということで、さっそくコマンドを実行してみましょう。上部のコマンドラインに入力して実行していってください。
CREATE (:Person{name:"I"});
わたしを作ります。
CREATE (:Person{name:"You"});
あなたを作ります。
MATCH (p1:Person{name:"I"}), (p2:Person{name:"You"}) CREATE (p1)-[:say{word:"Hello"}]->(p2);
わたし(I) から あなた(You) へ、 say(Hello) という関係を作ります。
できたかどうかを見てみましょう。
MATCH (n) OPTIONAL MATCH (n)-[r]-()
RETURN n,r
できました。 say の矢印をクリックすると下の方に word: "Hello"
というもの見ることが出来ます。
もう少し高度な実験
映画のデータベースが入っているのでそれでいろいろと試すことが出来ます。
:play movie graph
これで出てくるチュートリアルでいろいろ遊ぶことができますが、これは先人の記事がたくさんありますので、そちらをみていただければと思います。
おまけ
すべてのノードもエッジも削除するコマンドです。
MATCH (n) DETACH DELETE n;
おわりに
ということで簡単に Neo4j を使う手順でした。
全体的にすこし速度が遅いかな、とか、いろいろ思うこともありますが、見た目も綺麗ですし(重要)、クエリのCypherもとても直観的なので、手元でのPoCなどにはとても良いと思います。
今後グラフデータベースはどんどん流行っていくことが想定されますのでぜひみなさま手元で楽しんでいただければと思います。
なんでもかんでもRDB一本という時代から、適材適所でいろいろなDBが並行して使われ、それをSteram(非バッチ)で扱う時代になってくると思います