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 以上が現実的
目次
- グラフデータベースと Neo4j の基本概念
- 動作確認済み環境
- インストール手順(apt 経由)
- Docker で素早く試す
- Neo4j Browser で接続する
- Cypher クエリ入門——CREATE / MATCH / RETURN
- よくあるエラーと解決策
- まとめ
グラフデータベースと 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 キーを準備する
$ sudo apt-get install -y wget gnupg apt-transport-https
Reading package lists… Done
0 upgraded, 3 newly installed, 0 to remove.
手順2:Neo4j 公式リポジトリを追加する
| 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 をインストールして起動する

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)でログインしてパスワードを変更します。
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 まで使えます。
–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”
}


実測では起動まで約 20秒、その後 curl localhost:7474 で neo4j_version: "5.20.0" が返ることを確認しました。アイドル時のメモリ消費は 970 MiB でした。
Neo4j Browser で接続する
http://localhost:7474/browser/ をブラウザで開くと Neo4j Browser が起動します。接続フォームが表示されたら、Bolt URL(neo4j://localhost:7687)とユーザー名・パスワードを入力して「Connect」を押します。

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

Cypher クエリ入門——CREATE / MATCH / RETURN
Cypher の基本は3つです。CREATE でノードを作り、MATCH でパターンを探し、RETURN で結果を返す——RDBMSの INSERT / SELECT に対応します。
①ノードとリレーションシップを作成する
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)

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> 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 を貼り付けて実行すると、テーブル表示だけでなくノードを円で、リレーションシップを矢印で描いたグラフビューに切り替えられます。

上の画面は MATCH (p:Person)-[r:KNOWS]->(q:Person) RETURN p.name, q.name, r.since を実行した結果です。テーブルビューでは「Alice → Bob (2020)」「Bob → Carol (2021)」が表示されています。
よくあるエラーと解決策
①「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 を開けてください。
● 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.」が出るまで待ってからブラウザを開いてください。
④メモリ不足でコンテナが落ちる
起動直後で約 970 MiB を消費します(実測)。1GB RAM の VPS では OOM Killer に落とされることがあります。ヒープを制限する場合は環境変数で調整できます。
-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コマンドで定期的に取ることを推奨します


コメント