Neo4j on Ubuntu — グラフデータベースの構築とCypherクエリ入門

データベース

RDBMSでは表現しづらい「人と人のつながり」「商品の推薦チェーン」「ネットワーク経路」——そういったデータを扱うとき、グラフデータベースが本領を発揮します。Neo4j はその代表格で、ノード(頂点)とリレーションシップ(辺)でデータを表現し、SQL に相当する Cypher クエリで直感的に検索できます

この記事では Ubuntu 24.04 LTS に Neo4j をインストールし、Cypher クエリの基本を実際に動かしながら解説します。インストールから Neo4j Browser(WebUI)でのグラフ可視化まで、実際のコマンド出力と画面スクリーンショットをそのまま載せています。

この記事のポイント

  • Ubuntu 24.04 LTS(docker run / apt 両対応)で Neo4j 5.x を動かす手順を実測
  • 公式リポジトリの apt 候補バージョンは 1:5.26.27(2026-06-20 確認)
  • Neo4j Browser(ポート 7474)で Cypher クエリをブラウザから実行できる
  • MATCH クエリの応答は 16ms(ローカル Docker・2レコード)
  • メモリは起動直後で約 970 MiB を消費する——VPS は 2GB 以上が現実的

目次

  1. グラフデータベースと Neo4j の基本概念
  2. 動作確認済み環境
  3. インストール手順(apt 経由)
  4. Docker で素早く試す
  5. Neo4j Browser で接続する
  6. Cypher クエリ入門——CREATE / MATCH / RETURN
  7. よくあるエラーと解決策
  8. まとめ

グラフデータベースと Neo4j の基本概念

一般的なデータベースが「テーブルの行と列」でデータを管理するのに対し、グラフデータベースは ノード(Node)と リレーションシップ(Relationship)でデータを表現します。

概念 グラフDB(Neo4j) RDBMS(MySQL等)
データの単位 ノード(Node) 行(Row)
データの属性 プロパティ(Property) カラム(Column)
データの関連 リレーションシップ(有向・型付き) 外部キー・JOIN
クエリ言語 Cypher SQL
得意な用途 ソーシャルグラフ・推薦・経路探索 集計・トランザクション

SNSの「フォロー関係」をSQLで表現しようとすると SELF JOIN を何重にも書くことになりますが、Cypher なら MATCH (a)-[:FOLLOWS]->(b) と書くだけです。正直、「こんなに簡潔に書けるんだ」と初めて触ったとき少し驚きました。

動作確認済み環境

項目
OS Ubuntu 24.04.4 LTS(Noble Numbat)
Neo4j(apt) 1:5.26.27(公式リポジトリ・2026-06-20 確認)
Neo4j(Docker) 5.20.0 Community Edition
Java(apt依存) OpenJDK 21.0.11
Java(Docker内) OpenJDK 17.0.11 (Temurin)
テスト環境 Docker(ubuntu:24.04)+ neo4j:5.20-community

メモリ要件に注意

Neo4j は起動直後だけで約 970 MiB(実測)を消費します。1GB RAM の VPS では厳しいので、本番運用なら 2GB 以上のプランを選んでください。

インストール手順(apt 経由)

Ubuntu の標準リポジトリには Neo4j が含まれていないため、Neo4j が提供する公式 Debian リポジトリを追加してからインストールします。

手順1:前提パッケージと GPG キーを準備する




ubuntu@vps: ~
$ sudo apt-get update
$ sudo apt-get install -y wget gnupg apt-transport-https
Reading package lists… Done
0 upgraded, 3 newly installed, 0 to remove.

手順2:Neo4j 公式リポジトリを追加する




ubuntu@vps: ~
$ wget -qO – https://debian.neo4j.com/neotechnology.gpg.key \
| sudo gpg –dearmor -o /etc/apt/trusted.gpg.d/neo4j.gpg

$ echo ‘deb [signed-by=/etc/apt/trusted.gpg.d/neo4j.gpg] \
https://debian.neo4j.com stable 5′ \
| sudo tee /etc/apt/sources.list.d/neo4j.list
deb [signed-by=…] https://debian.neo4j.com stable 5

$ sudo apt-get update
Get:1 https://debian.neo4j.com stable/5 InRelease [3,194 B]

手順3:Neo4j をインストールして起動する

Neo4j apt install 実行ログ(Ubuntu 24.04 実測)
Neo4j apt install 実行ログ(Ubuntu 24.04 実測)



ubuntu@vps: ~
$ sudo apt-get install -y neo4j
The following NEW packages will be installed:
neo4j (+ OpenJDK 21, cypher-shell …)
194 newly installed, 0 to remove.
Setting up neo4j (1:5.26.27) …

$ neo4j –version
5.26.27

$ sudo systemctl enable –now neo4j
Created symlink /etc/systemd/system/multi-user.target.wants/neo4j.service

実測では apt-cache policy neo4j でインストール候補バージョンが 1:5.26.27 と表示されました(2026-06-20)。Java 依存は OpenJDK 21.0.11 が自動でインストールされます。

手順4:初期パスワードを変更する

初回起動後、デフォルト認証情報(neo4j / neo4j)でログインしてパスワードを変更します。




ubuntu@vps: ~
$ cypher-shell -u neo4j -p neo4j
The credentials you provided were valid, but must be changed before you can use this instance.
neo4j> ALTER CURRENT USER SET PASSWORD FROM ‘neo4j’ TO ‘MyStrongPass123!’;
0 rows available after 5 ms, consumed after another 0 ms

初回ログイン必須

Neo4j は初回起動後に必ずパスワード変更を求めます。cypher-shell でも Neo4j Browser でも最初にこの変更が必要です。スキップできません。

Docker で素早く試す

VPS を契約する前に手元で動作確認したい場合は Docker が便利です。ワンコマンドで Neo4j Browser まで使えます。




ubuntu@local: ~
$ docker run -d \
–name neo4j_test \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/testpassword123 \
neo4j:5.20-community
df46af370104a191…

$ docker logs neo4j_test 2>&1 | grep “Started”
2026-06-20 07:25:55.294+0000 INFO Started.

$ curl -s http://localhost:7474/ | python3 -m json.tool
{
“neo4j_version”: “5.20.0”,
“neo4j_edition”: “community”
}
Neo4j インストール方法別バージョン比較(実測)
Neo4j インストール方法別バージョン比較(実測)
Neo4j コンテナ稼働統計(Docker実測)
Neo4j コンテナ稼働統計(Docker実測)

実測では起動まで約 20秒、その後 curl localhost:7474neo4j_version: "5.20.0" が返ることを確認しました。アイドル時のメモリ消費は 970 MiB でした。

Neo4j Browser で接続する

http://localhost:7474/browser/ をブラウザで開くと Neo4j Browser が起動します。接続フォームが表示されたら、Bolt URL(neo4j://localhost:7687)とユーザー名・パスワードを入力して「Connect」を押します。

Neo4j Browser ログイン画面(ポート 7474)
Neo4j Browser ログイン画面(ポート 7474)

接続が成功すると「Connected to Neo4j」と表示され、ダッシュボードが展開します。「Getting started」「Try Neo4j with live data」「Cypher basics」の3つのガイドが表示されるので、Cypher をはじめて触る場合は「Start querying」から入ると良いです。

接続後のダッシュボード(:play start ガイド表示)
接続後のダッシュボード(:play start ガイド表示)

Cypher クエリ入門——CREATE / MATCH / RETURN

Cypher の基本は3つです。CREATE でノードを作り、MATCH でパターンを探し、RETURN で結果を返す——RDBMSの INSERT / SELECT に対応します。

①ノードとリレーションシップを作成する




neo4j> cypher-shell
// Person ノードを3件作成
neo4j> CREATE (alice:Person {name: ‘Alice’, age: 30})
CREATE (bob:Person {name: ‘Bob’, age: 25})
CREATE (carol:Person {name: ‘Carol’, age: 35})
CREATE (tech:Topic {name: ‘Linux’, category: ‘OS’})
CREATE (db:Topic {name: ‘Neo4j’, category: ‘Database’})
CREATE (alice)-[:KNOWS {since: 2020}]->(bob)
CREATE (bob)-[:KNOWS {since: 2021}]->(carol)
CREATE (alice)-[:INTERESTED_IN]->(tech)
CREATE (alice)-[:INTERESTED_IN]->(db)
CREATE (bob)-[:INTERESTED_IN]->(tech)
RETURN ‘Done’ AS result;
result
“Done”

:Person:Topic はラベル(型)、{ name: 'Alice' } はプロパティです。-[:KNOWS {since: 2020}]-> のように、リレーションシップにもプロパティを持たせられるのが RDB との大きな違いです。

②関係をたどって検索する(MATCH)

Cypher クエリ実行結果(CREATE / MATCH 実測)
Cypher クエリ実行結果(CREATE / MATCH 実測)



neo4j> cypher-shell
// 知人関係を取得
neo4j> MATCH (p:Person)-[r:KNOWS]->(q:Person)
RETURN p.name AS from_person, q.name AS to_person, r.since AS since_year;
from_person, to_person, since_year
“Alice” , “Bob” , 2020
“Bob” , “Carol” , 2021

// ノード数をラベル別に集計
neo4j> MATCH (n) RETURN labels(n) AS label, count(*) AS count ORDER BY count DESC;
label , count
[“Person”] , 3
[“Topic”] , 2

Started streaming 2 records after 16 ms

MATCH クエリの応答は 16ms でした(ローカル Docker・2レコード)。MATCH のパターン (p:Person)-[r:KNOWS]->(q:Person) はそのままグラフの形を描いていて、SQL の JOIN よりも意図が伝わりやすいと感じます。

③関心ごとを介した2ホップ検索




neo4j> cypher-shell
// 同じトピックに興味を持つ人を探す(2ホップ)
neo4j> MATCH (a:Person)-[:INTERESTED_IN]->(t:Topic)<-[:INTERESTED_IN]-(b:Person)
WHERE a.name <> b.name
RETURN a.name AS person_a, b.name AS person_b, t.name AS shared_topic;
person_a, person_b, shared_topic
“Alice” , “Bob” , “Linux”

このクエリが面白いのは、「アリスとボブが Linux という共通の関心を持っている」という事実を、JOIN なしで自然言語に近い形で書けることです。ホップ数を変えるだけで「友人の友人」「商品の推薦チェーン」にそのまま応用できます

④ブラウザでグラフを可視化する

Neo4j Browser の上部入力欄に Cypher を貼り付けて実行すると、テーブル表示だけでなくノードを円で、リレーションシップを矢印で描いたグラフビューに切り替えられます。

Cypher クエリ結果(Neo4j Browser テーブルビュー)
Cypher クエリ結果(Neo4j Browser テーブルビュー)

上の画面は MATCH (p:Person)-[r:KNOWS]->(q:Person) RETURN p.name, q.name, r.since を実行した結果です。テーブルビューでは「Alice → Bob (2020)」「Bob → Carol (2021)」が表示されています。

よくあるエラーと解決策

①「ServiceUnavailable: WebSocket connection failure」




Neo4j Browser エラー
ServiceUnavailable: WebSocket connection failure.
Due to security constraints in your web browser,
the reason for the failure is not available to this Neo4j Driver.

原因:Bolt ポート(7687)が開いていない、または Neo4j が起動していません。

解決:sudo systemctl status neo4j でサービス状態を確認し、ファイアウォール(ufw)でポート 7474 と 7687 を開けてください。




ubuntu@vps: ~
$ sudo systemctl status neo4j
● neo4j.service – Neo4j Graph Database
Active: active (running) since …

$ sudo ufw allow 7474/tcp
$ sudo ufw allow 7687/tcp
Rules updated

②「The credentials you provided were valid, but must be changed」

初回ログイン時に必ず出るメッセージです。エラーではなく、パスワード変更を促しています。ALTER CURRENT USER SET PASSWORD で変更してください(前述の手順4参照)。

③コンテナ起動直後に 7474 に繋がらない

Neo4j は起動に 10〜20秒かかります。docker logs neo4j_test 2>&1 | grep Started で「Started.」が出るまで待ってからブラウザを開いてください。

④メモリ不足でコンテナが落ちる




ubuntu@vps: ~
Stopping service. Unable to allocate sufficient Java heap memory.

起動直後で約 970 MiB を消費します(実測)。1GB RAM の VPS では OOM Killer に落とされることがあります。ヒープを制限する場合は環境変数で調整できます。




ubuntu@vps: ~
$ docker run -d \
-e NEO4J_server_memory_heap_initial__size=512m \
-e NEO4J_server_memory_heap_max__size=512m \
-e NEO4J_server_memory_pagecache_size=256m \
-e NEO4J_AUTH=neo4j/pass \
neo4j:5.20-community

まとめ

  • Ubuntu 24.04 への Neo4j インストールは、公式リポジトリを追加してから apt-get install -y neo4j。インストール候補は 1:5.26.27(2026-06-20 実測)
  • 手軽に試すなら docker run -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=... neo4j:5.20-community で即起動できる
  • Neo4j Browser(ポート 7474)から Cypher をブラウザで実行してグラフを可視化できる
  • MATCH クエリは SQL の JOIN より直感的で、ホップ数を変えるだけで経路探索・推薦ロジックに応用できる
  • 起動メモリは約 970 MiB——VPS は 2GB 以上推奨

グラフデータベースは「使いどころを選ぶ」ツールですが、SNSの友人探索・商品推薦・組織図のような関係性が中心のデータには RDB より明らかに向いています。まず Docker で手元に立ち上げて Cypher を書いてみると、考え方のシフトを体で理解できます。

VPS で本番稼働を考えている方へ

  • Neo4j は 2GB RAM 以上の VPS が現実的。東京リージョンのある Vultr や ConoHa が選択肢に入ります
  • 本番では neo4j.conf でヒープとページキャッシュを明示的に設定してください
  • バックアップは neo4j-admin database dump コマンドで定期的に取ることを推奨します

コメント

タイトルとURLをコピーしました