データベース · 3 min read · Dec 20, 2025

Ubuntu 22.04にNeo4jグラフデータベースをインストールして構成する方法

Neo4jはデータ関係を作成するために使用されるグラフデータベースです。従来のデータベース内のデータは、テーブルのような構造で保存されます。グラフィカルデータベースはデータノード間の関係を記録します。各ノードは接続されている他のすべてのノードへの参照を保存します。従来のデータベースは関係データを直接保存しませんが、インデックスを使用してデータ構造を検索することで接続を特定できますが、これは高コストで時間がかかります。Neo4jのようなグラフィカルデータベースは、これらのオーバーヘッドを回避し、複雑な関係をエンコードおよびクエリできます。

グラフィカルデータベースにおけるデータの保存方法

Neo4jはNeo Technologyによって開発されました。JavaとScalaで書かれており、無料のコミュニティ版とエンタープライズ版の両方が利用可能です。Neo4jは独自のクエリ言語であるCypherを使用しますが、他のスタイルでもクエリを書くことができます。

このチュートリアルでは、Ubuntu 22.04サーバーにNeo4jをインストールして構成する方法を学びます。

前提条件

  • 最低1つのCPUコアと2GBのメモリを持つUbuntu 22.04を実行しているサーバー。要件に応じてサーバーをアップグレードする必要があります。
  • sudo権限を持つ非rootユーザー。
  • すべてが更新されていることを確認してください。
  • $ sudo apt update
  • 基本的なユーティリティパッケージをインストールします。いくつかはすでにインストールされているかもしれません。 $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

ステップ1 - Neo4jをインストールする

Neo4jをインストールする最初のステップは、GPGキーを追加することです。

$ curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg

Neo4jリポジトリをシステムAPTのソースディレクトリに追加します。

$ echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable latest" | sudo tee -a /etc/apt/sources.list.d/neo4j.list

次のメジャーバージョンへのアップグレードのリスクを避けるために、上記のコマンドでlatestの代わりに必要なメジャーおよびマイナーバージョンを指定できます。

次のコマンドはNeo4j 5.xリポジトリを追加します。これにより、6.xバージョンがリリースされてもアップグレードされることはありません。

$ echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 5" | sudo tee -a /etc/apt/sources.list.d/neo4j.list

システムリポジトリリストを更新します。

$ sudo apt update

インストール可能なNeo4jのバージョンをリストします。

$ apt list -a neo4j
Listing... Done
neo4j/stable 1:5.3.0 all
neo4j/stable 1:5.2.0 all
neo4j/stable 1:5.1.0 all

Neo4jコミュニティ版をインストールします。

$ sudo apt install neo4j

次のコマンドを使用して特定のバージョンをインストールできます。

$ sudo apt install neo4j=1:5.3.0

バージョンには、Debianのバージョン管理ポリシーに従って、エポックバージョンコンポーネント(1:)が含まれていることに注意してください。

Neo4jは必要なJDKバージョンを自動的にインストールします。

Neo4jサービスを有効にします。

$ sudo systemctl enable neo4j

Neo4jサービスを開始します。

$ sudo systemctl start neo4j

Neo4jサービスのステータスを確認します。

$ sudo systemctl status neo4j
? neo4j.service - Neo4j Graph Database
     Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-01-21 20:50:52 UTC; 33s ago
   Main PID: 5241 (java)
      Tasks: 72 (limit: 1030)
     Memory: 399.3M
        CPU: 20.350s
     CGroup: /system.slice/neo4j.service

ステップ2 - 接続をテストする

Neo4jはデータを操作するためにCypherシェルを使用します。

Cypherシェルに接続します。

$ cypher-shell

ユーザー名とパスワードを求められます。デフォルトのユーザー名とパスワードはneo4jです。新しいパスワードを選択するように求められます。

username: neo4j
password:
Password change required
new password:
confirm password:
Connected to Neo4j using Bolt protocol version 5.0 at neo4j://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j@neo4j>

これにより、Neo4j DBMSへの接続が成功したことが確認されます。

:exitと入力してシェルを終了します。

neo4j@neo4j> :exit

Bye!

ステップ3 - リモートアクセスのためにNeo4jを構成する

本番環境では、Neo4jがリモートホストからの接続を受け入れることを確認する必要があります。デフォルトでは、Neo4jはlocalhostからの接続のみを受け入れます。

Neo4jの設定ファイルを編集することで、リモートホストからの接続を受け入れるように構成できます。Neo4jは設定を/etc/neo4j/neo4j.confファイルに保存します。編集のために開きます。

$ sudo nano /etc/neo4j/neo4j.conf

コメントアウトされた行#dbms.default_listen_address=0.0.0.0を見つけ、先頭のハッシュを削除してコメントを解除します。

. . .
#***************************************************************
# ネットワークコネクタの構成
#***************************************************************

# デフォルトの構成では、Neo4jはローカル接続のみを受け入れます。
# 非ローカル接続を受け入れるには、この行のコメントを解除します:
server.default_listen_address=0.0.0.0
. . .

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

デフォルトでは、値0.0.0.0は、localhostを含むシステム上のすべての利用可能なIPv4インターフェースにNeo4jをバインドします。特定のIPアドレスにNeo4jを制限したい場合は、たとえばプライベートネットワークIPを指定してください。

Neo4jをIPv6インターフェースで使用するように構成することもできます。IPv4と同様に、default_listen_addressの値を、Neo4jと通信するために使用する特定のIPv6アドレスに設定できます。サーバーのローカルIPv6アドレスのみを使用するようにNeo4jを制限したい場合は、::1を指定します。これは、IPv6表記を使用したlocalhostに対応します。

IPv6アドレスでNeo4jを構成した場合、IPv6アドレスを直接使用してcypher-shellに接続することはできません。代わりに、IPv6アドレスに解決されるDNS名を構成するか、リモートシステムの/etc/hostsファイルにアドレスを名前にマッピングするエントリを追加する必要があります。そうすれば、リモートシステムからIPv6を使用してNeo4jに接続するためにDNSまたはhostsファイル名を使用できるようになります。

たとえば、IPv6アドレスが2001:db8::1のNeo4jサーバーは、リモート接続システムに次のような/etc/hostsエントリを必要とします。

2001:db8::1 your_hostname

次に、リモートシステムから指定した名前を使用してサーバーに接続できます。

$ cypher-shell -a 'neo4j://your_hostname:7687'

IPv6ローカルホストアドレスの::1を使用するようにNeo4jを制限した場合、次のように/etc/hostsファイルから事前構成されたip6-localhost名を使用して、Neo4jサーバー自体でローカルに接続できます。

$ cypher-shell -a 'neo4j://ip6-localhost:7687'

接続URIでcypher-shellを呼び出すと、通常どおりユーザー名とパスワードを求められます。

ステップ4 - ファイアウォールアクセスを構成する(UFW)

リモート接続を有効にしたら、ファイアウォールを使用してNeo4jを制限し、接続を信頼できるシステムのみに制限できます。

Neo4jは、組み込みのHTTPインターフェース用に7474ポートで、メインのボルトプロトコル用に7687ポートで2つのネットワークソケットを作成します。

Ubuntu 22.04はデフォルトでUncomplicated Firewall(UFW)を使用します。

信頼できるリモートホストがIPv4を使用してboltインターフェースにアクセスできるようにファイアウォールを構成するには、次のコマンドを使用します。

$ sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

信頼できるリモートシステムのIPアドレスを203.0.113.1の値の代わりに置き換えます。同様に、次のコマンドを使用して、ネットワーク範囲全体を許可できます。

$ sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp

実際のネットワークを192.0.2.0/24の値の代わりに置き換えます。

IPv6を使用してリモートホストへのアクセスを許可するには、次のコマンドを使用できます。

$ sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp

信頼できるシステムのIPv6アドレスを2001:DB8::1/128の値の代わりに置き換えます。

IPv4と同様に、次のコマンドを使用してIPv6アドレスの範囲を許可できます。

$ ufw allow from 192.0.2.0/24 to any port 7687 proto tcp

再度、強調表示された2001:DB8::/32ネットワーク範囲の代わりに信頼できるネットワーク範囲を置き換えます。

変更を適用するためにファイアウォールを再読み込みします。

$ sudo ufw reload

ファイアウォールのステータスを確認します。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
7687/tcp                   ALLOW       203.0.113.1

ステップ5 - Neo4jを使用する

cypher-shellツールを使用してNeo4jに接続します。ユーザー名とパスワードを求められます。

$ cypher-shell

リモートアクセス用にNeo4jを構成した場合、リモートシステムからNeo4jに接続するには次のコマンドを使用します。

$ cypher-shell -a 'neo4j://203.0.113.1:7687'

ここで203.0.113.1はNeo4jサーバーのIPアドレスです。

IPv6を使用している場合は、ステップ3で説明した名前を持つ/etc/hostsエントリがあることを確認してください。次に、次のようにNeo4jサーバーに接続します。

$ cypher-shell -a 'neo4j://your_hostname:7687'

your_hostnameがリモートシステムの/etc/hostsファイルでNeo4jサーバーのIPv6アドレスにマッピングされていることを確認してください。

Sliteというノードと著者の名前をNeo4jに追加しましょう。次のコマンドは、Sliteタイプのノードを作成し、名前をNavjot Singhにします。

neo4j@neo4j> CREATE (:Slite {name: 'Navjot Singh'});

次の出力が得られます。

0 rows
ready to start consuming query after 124 ms, results consumed after another 0 ms
Added 1 nodes, Set 1 properties, Added 1 labels

次に、さらに従業員を追加し、COLLEAGUEという関係を使用してそれらを関連付けます。ノードを任意の名前の関係でリンクできます。

さらに3人の従業員を追加し、COLLEAGUE関係を使用してリンクします。

neo4j@neo4j> CREATE
             (:Slite {name: 'Sammy'})-[:COLLEAGUE]->
             (:Slite {name: 'Peter Jack'})-[:COLLEAGUE]->
             (:Slite {name: 'Chris Rock'});

同様の出力が得られます。

0 rows
ready to start consuming query after 72 ms, results consumed after another 0 ms
Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels

次に、いくつかの関係を作成しましょう。

PeterとChrisは同じ部門で働いており、ノードとして同じプロパティを持っているため、名前の列を持つ関係を作成します。

neo4j@neo4j> MATCH (a:Slite),(b:Slite)
             WHERE a.name = 'Peter Jack' AND b.name = 'Chris Rock'
             CREATE (a)-[r:DEPARTMENT { name: 'Designers' }]->(b)
             RETURN type(r), r.name;
+----------------------------+
| type(r)      | r.name      |
+----------------------------+
| "DEPARTMENT" | "Designers" |
+----------------------------+

1 row
ready to start consuming query after 60 ms, results consumed after another 17 ms
Created 1 relationships, Set 1 properties

次に、SammyとPeterの間に別の接続を作成します。彼らは同じプロジェクトで作業しています。

neo4j@neo4j> MATCH (a:Slite), (b:Slite)
             WHERE a.name = 'Peter Jack' AND b.name = 'Sammy'                                                                        CREATE (a)-[r:PROJECT { name: 'Test Project 1' }]->(b)                                                                  RETURN type(r), r.name;
+------------------------------+
| type(r)   | r.name           |
+------------------------------+
| "PROJECT" | "Test Project 1" |
+------------------------------+

1 row
ready to start consuming query after 132 ms, results consumed after another 12 ms
Created 1 relationships, Set 1 properties

次のクエリを使用して、これらのすべてのデータを表示しましょう。

neo4j@neo4j> MATCH (a)-[r]->(b)
             RETURN a.name,r,b.name
             ORDER BY r;
+-------------------------------------------------------------------+
| a.name       | r                                   | b.name       |
+-------------------------------------------------------------------+
| "Sammy"      | [:COLLEAGUE]                        | "Peter Jack" |
| "Peter Jack" | [:COLLEAGUE]                        | "Chris Rock" |
| "Peter Jack" | [:DEPARTMENT {name: "Designers"}]   | "Chris Rock" |
| "Peter Jack" | [:PROJECT {name: "Test Project 1"}] | "Sammy"      |
+-------------------------------------------------------------------+

4 rows
ready to start consuming query after 99 ms, results consumed after another 5 ms

結論

これで、Ubuntu 22.04サーバーにNeo4jをインストールして構成する方法に関するチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。