Neo4j をWindowsでHello World (2018)

# 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や)で展開した場所まで移動して次のコマンドを実行します。

```console
$ 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的なものが並んでいますが、それはいったん無視して、

![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/33095/94815ca7-e77a-b988-8ff3-2c1ece29b8b3.jpeg)

いちばん上部にあるコマンドラインからコマンドをいれていくことで、サンプルを実行していくことになります。

> コマンドをいれて ``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 
```

![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/33095/f61683fd-d8e3-7a81-b7ba-8db06c803eb0.jpeg)

できました。 say の矢印をクリックすると下の方に ``word: "Hello"`` というもの見ることが出来ます。

## もう少し高度な実験

映画のデータベースが入っているのでそれでいろいろと試すことが出来ます。

```
:play movie graph
```

これで出てくるチュートリアルでいろいろ遊ぶことができますが、これは先人の記事がたくさんありますので、そちらをみていただければと思います。

## おまけ

すべてのノードもエッジも削除するコマンドです。

```
MATCH (n) DETACH DELETE n;
```

# おわりに

ということで簡単に Neo4j を使う手順でした。
全体的にすこし速度が遅いかな、とか、いろいろ思うこともありますが、見た目も綺麗ですし(重要)、クエリのCypherもとても直観的なので、手元でのPoCなどにはとても良いと思います。

今後グラフデータベースはどんどん流行っていくことが想定されますのでぜひみなさま手元で楽しんでいただければと思います。

> なんでもかんでもRDB一本という時代から、適材適所でいろいろなDBが並行して使われ、それをSteram(非バッチ)で扱う時代になってくると思います