---
title: "ArangoDBとは？3.12のライセンス・AQLの書き方・Docker導入を実装目線で解説"
url: "https://www.issoh.co.jp/tech/details/7760/"
published: 2025-07-17
updated: 2026-10-12
categories: ["データベース"]
publisher: "株式会社一創"
---

# ArangoDBとは？3.12のライセンス・AQLの書き方・Docker導入を実装目線で解説

ArangoDBは、ドキュメント・グラフ・キーバリューの3つのデータモデルを1つのエンジンと1つのクエリ言語（AQL）で扱うマルチモデルデータベースです。2026年10月時点の現行版は3.12系（最新パッチは2026年9月29日タグの3.12.12.1）で、3.12からライセンスがBSL 1.1へ変わり、WindowsとmacOSのネイティブ版も提供が終わりました。古い解説記事の導入手順やライセンス説明はそのままでは使えません。本記事では、現行版の前提で構造・ライセンスの境界・Dockerでの起動・AQLとPythonからの操作・MongoDBやNeo4jとの選び分けを順に整理します。

## まとめ：ArangoDBの現状と採用前に確認すること

- 現行版は3.12系。3.12.12.1（2026年9月29日タグ）が最新パッチで、Docker公式イメージは `arangodb`（Docker Official Image）を使う
- ソースはBSL 1.1、配布バイナリはCommunity License。**商用目的か、データが100GB以上ならEnterpriseライセンスが必要**
- 3.12.5以降はEnterprise機能（SmartGraphs、Hot Backup、暗号化など）もCommunity Editionに含まれる。差はライセンス条件だけになった
- Windows・macOSは3.12でネイティブ版が廃止。手元ではDocker、本番はLinux（x86-64はAVX必須、ARMはAArch64）
- AQLはSQLに近い `FOR … FILTER … RETURN` 構文で、同じクエリの中でグラフ走査（`OUTBOUND`）と結合を書ける
- 3.12.4でベクトルインデックスが入り、3.12.9から空のコレクションにも先に作れるようになった

以下、仕組み→ライセンス→導入→クエリ→選定の順に、判断に必要な仕様を確認していきます。

## ArangoDBの構造：コレクション・エッジ・RocksDBの関係

ArangoDBのデータはすべてJSONドキュメントとして保存され、モデルの違いは「どのコレクションに入れ、どう引くか」で表現します。グラフ専用の格納形式を別に持つのではなく、ドキュメントの一種としてエッジを持つのが設計の要です。

### ドキュメントコレクションと \_key・\_id・\_rev

各ドキュメントはシステム属性として `_key`（コレクション内の主キー）、`_id`（`コレクション名/_key` の形の全体識別子）、`_rev`（リビジョン）を持ちます。スキーマは任意で、キーバリュー用途は `_key` で引くだけのコレクションとして扱います。キーバリュー専用のエンジンがあるわけではなく、値も `_id`・`_rev` を伴うJSONドキュメントとしてRocksDBに保存されます。Redisのようなインメモリのキーバリューストアを置き換える前提では設計しません。

### エッジコレクションの \_from・\_to によるグラフ表現

グラフの辺は、エッジコレクションに入る「`_from` と `_to` に頂点の `_id` を持つドキュメント」です。辺にも任意の属性（重み・期間など）を持たせられ、エッジインデックスが `_from`・`_to` で自動的に張られます。名前付きグラフ（Named Graph）を定義し、名前付きグラフ用APIで更新すると、エッジ定義に沿った接続関係をDB側で検証できますが、エッジコレクション名を直接指定して走査することも可能です。

### ストレージエンジンはRocksDBのみ

3.4で既定がRocksDBになり、3.7で旧来のMMFilesエンジンが削除されたため、現行版のストレージエンジンはRocksDBだけです。ドキュメント単位のロックと、RocksDBのLSMツリーによる書き込み特性を前提に設計します。ベクトルインデックスを有効にするとRocksDBに専用のカラムファミリーが追加され、以後は無効化できない点も覚えておきます（後述）。

## 3.12系の版とライセンス：BSL 1.1とCommunity Licenseの境界

「arangodb license」「arangodb enterprise」で調べる人が最も迷うのが、3.12で変わったライセンスです。ソースコードとバイナリで条件が異なり、原文はGitHubの[LICENSE](https://github.com/arangodb/arangodb/blob/devel/LICENSE)と[ArangoDB Community License](https://arangodb.com/community-license/)で確認できます。

| 対象                 | ライセンス             | 主な条件                |
| ------------------ | ----------------- | ------------------- |
| GitHubのソース（3.12以降） | BSL 1.1           | 社内本番利用は可・DBaaS提供は不可 |
| BSLの転換             | Apache 2.0        | 各版の初回公開から最長4年後      |
| 公式バイナリ・Dockerイメージ  | Community License | 社内業務のみ・合計100GB未満    |
| 上記を超える利用           | Enterprise（有償）    | 商用利用・データ量上限なし       |

BSL 1.1の追加利用許諾（Additional Use Grant）は、社内本番での利用を認めつつ、第三者がデータベースを作成・管理できる商用サービスとしての提供を禁じています。一方、公式バイナリとDockerイメージに付くCommunity Licenseは、ライセンス原文で利用を「社内業務の目的」かつ「クラスタ全体で合計100GB未満のデータセット」に限っています（商用化・再配布も不可）。公式ドキュメントは同じ上限を100GiBと表記しているため、境界付近のデータ量になる場合は原文の100GB未満を基準に見積もります。3.11以前はApache 2.0だったため、旧版の記事にある「完全なオープンソース」という説明は3.12以降には当てはまりません。

### 3.12.5でEnterprise機能がCommunity Editionへ統合

3.12.4まではSmartGraphs、SatelliteCollections、OneShard、Hot Backup、保存データの暗号化、監査ログなどがEnterprise Edition専用でした。3.12.5からはこれらがCommunity Editionにも時間制限なしで含まれます。機能差で版を選ぶ必要はなくなり、判断軸は「商用目的か」「データが100GBに達するか」の2点に絞られました。社内システムでも、利用企業の顧客にサービスとして提供する構成なら商用に当たる可能性が高いため、契約前にArango社へ確認するのが安全です。

### Arango社の製品体系：Contextual Data Platform 4.0とAMP

開発元はArangoDB, Inc.で、2025年10月に会社ブランドをArangoへ改めました（データベース製品名はArangoDBのまま、公式サイトは `arango.ai`）。2026年3月17日のNVIDIA GTCで「Arango Contextual Data Platform 4.0」を発表し、ArangoDBを土台にGraphRAGやAutoGraphなどのAIサービスを載せたKubernetesベースの製品群を前面に出しています。マネージドサービスは旧称ArangoGraph Insights Platformから「Arango Managed Platform（AMP）」へ名前が変わりました。データベース単体を使うだけなら、従来どおりArangoDB本体（3.12系）を自前で運用すれば足ります。

## 3.12で削除・変更された機能：アップグレード前の確認点

3.11以前の環境を3.12へ上げる場合や、古い手順書を流用する場合は、次の削除・既定値変更に当たらないかを先に確認します。

- Windows（インストーラー・ZIP）とmacOS（DMG・tar.gz）のパッケージ提供を終了。WindowsやmacOSをホストにした本番運用はサポート対象外
- グラフ分析エンジンPregelを削除（`PREGEL_RESULT()` とPregel用HTTP APIも削除）
- EnterpriseのLDAP認証を削除（`--ldap.*` 系の起動オプションも削除）
- 3.12.9から、Foxxやユーザー定義関数などサーバー側JavaScriptのファイル・環境変数・外部HTTPへのアクセスが既定で拒否に変更

影響が大きいのは最後の項目です。3.12.8以前で動いていたFoxxサービスが外部APIを呼んでいる場合、3.12.9へ上げただけで呼び出しが失敗します。`--javascript.endpoints-allowlist` などの許可リストを明示的に設定してから更新してください。Pregelでページランク等を計算していた場合は、アプリケーション側で計算するか、AMPのグラフ分析機能など別の手段へ移す必要があります。

## Dockerでの起動手順と初期設定

3.12以降、WindowsやmacOSの手元で試す方法はDockerが基本です。公式イメージは `arangodb`（Docker Official Image）で、2026年9月24日に3.12.12が公開されています。以前よく使われた `arangodb/arangodb` リポジトリは2025年4月の3.12.4.3で更新が止まっているため、新規に使わないでください。

### 公式イメージの起動コマンドと認証の環境変数

```
docker run -d --name arangodb-instance \
  -p 127.0.0.1:8529:8529 \
  -e ARANGO_ROOT_PASSWORD=change-me \
  -v arangodb_data:/var/lib/arangodb3 \
  -v arangodb_apps:/var/lib/arangodb3-apps \
  arangodb:3.12.12
```

認証の指定は3通りで、`ARANGO_ROOT_PASSWORD` は任意のrootパスワード、`ARANGO_RANDOM_ROOT_PASSWORD=1` は起動時にランダム生成して標準出力へ表示（`docker logs` で確認）、`ARANGO_NO_AUTH=1` は認証なしです。認証なしはテスト専用で、インターネットから到達できる場所では使いません。Apple シリコンのMacではAVX命令を必要とするamd64版が動かないため、`--platform linux/arm64/v8` を付けてARM版を明示します。

### データ永続化のボリューム

イメージは `/var/lib/arangodb3`（データ）と `/var/lib/arangodb3-apps`（Foxxなどの拡張）をボリュームとして宣言しています。上のコマンドのように名前付きボリュームを割り当てないと、コンテナを作り直したときにデータの所在が分かりにくくなります。Linuxで本番運用する場合は、CPUコア数×8×8000を目安とする `vm.max_map_count`（32コアなら2048000）、Transparent Huge Pagesの `madvise` 設定、`vm.overcommit_memory=0` をホスト側で設定しておきます。

### Web UIとarangoshでの接続確認

起動後、ブラウザで `http://localhost:8529` を開くとWeb UIのログイン画面が出ます。ユーザー `root` と設定したパスワードでログインし、データベース・コレクションの作成、AQLエディタでのクエリ実行、グラフの可視化ができます。コマンドラインで確かめる場合は、コンテナ内のシェル `arangosh` を使います。

```
docker exec -it arangodb-instance arangosh \
  --server.endpoint tcp://127.0.0.1:8529 \
  --server.username root
```

同梱のクライアントツールには、JSON・CSVを取り込む `arangoimport`、論理バックアップの `arangodump` と `arangorestore`、Hot Backupを操作する `arangobackup` があります。

## AQLの書き方：SQLとの対応とグラフ走査

AQL（ArangoDB Query Language）は、データの読み書きをすべて1つの言語で書くための宣言型クエリ言語です。SQLの `SELECT … FROM … WHERE` に相当する処理を、ループの形で `FOR … FILTER … RETURN` と書きます。

### 基本構文とSQLの対応

| SQL                  | AQL                     |
| -------------------- | ----------------------- |
| SELECT \* FROM users | FOR u IN users RETURN u |
| WHERE age >= 30      | FILTER u.age >= 30      |
| ORDER BY name        | SORT u.name             |
| LIMIT 10             | LIMIT 10                |
| GROUP BY city        | COLLECT city = u.city   |
| INSERT INTO users    | INSERT {…} INTO users   |

以下の例は、`users`・`orders` のドキュメントコレクションと、`follows` のエッジコレクション（`_from`・`_to` に `users/alice` などを持つ）を作成済みで、ユーザーに `age`・`city`・`active` 属性がある前提です。結合は、`FOR` を入れ子にして `FILTER` で条件を書くのがAQLの書き方です。値はバインド変数（`@min_age`、コレクション名は `@@coll`）で渡すと、クエリ文字列の組み立てによるインジェクションを避けられます。

```
FOR u IN users
  FILTER u.age >= @min_age
  FOR o IN orders
    FILTER o.user_key == u._key
    SORT o.created_at DESC
    LIMIT 10
    RETURN { name: u.name, total: o.total }
```

### 件数の数え方：COLLECT WITH COUNTとLENGTH

SQLの `COUNT(*)` に当たる書き方は2つあります。条件付きで数えるなら `COLLECT WITH COUNT INTO`、コレクション全体の件数ならコレクションを `LENGTH()` に渡します。

```
// 条件に合う件数
FOR u IN users
  FILTER u.city == "Tokyo"
  COLLECT WITH COUNT INTO n
  RETURN n
```

コレクション全体を数える場合は、次のクエリを別に実行します。

```
// コレクション全体の件数
RETURN LENGTH(users)
```

都市ごとの件数は `COLLECT city = u.city WITH COUNT INTO n` のように、グループ化と組み合わせて書けます。

### OUTBOUND・INBOUNDの走査とSHORTEST\_PATH

グラフ走査は `FOR 頂点, 辺, パス IN 最小..最大 方向 開始頂点 エッジコレクション` の形です。方向は `OUTBOUND`（\_fromから\_toへ）、`INBOUND`（逆向き）、`ANY`（両方向）から選びます。

```
// aliceがフォローしている人を2段先まで
FOR v, e, p IN 1..2 OUTBOUND "users/alice" follows
  FILTER v.active == true
  RETURN DISTINCT v.name
```

最短経路は、次のクエリを別に実行します。

```
// 2人の間の最短経路
FOR v IN ANY SHORTEST_PATH "users/alice" TO "users/bob" follows
  RETURN v.name
```

走査の途中で枝刈りしたい場合は `PRUNE` 句を使います。`PRUNE` は走査の各ステップでできるだけ早く評価され、条件が真になった経路はその先へ進みません。`FILTER` は基本的に結果の後絞りで、オプティマイザが走査内へ移せる条件以外は探索量を減らしません。分岐の多いグラフで最大深度を大きく取るときは、どこで探索を止めるかを `PRUNE` で明示します。

## PythonからArangoDBを操作する手順（python-arango）

Pythonの公式ドライバは `python-arango` で、2026年8月31日公開の8.3.5が最新です（Python 3.10以上が必要）。リポジトリはGitHubのarangodbオーガニゼーション配下にあります。

```
python3 -m pip install python-arango==8.3.5
```

上のコマンドをターミナルで実行後、次のコードをPythonファイルに保存して実行します。

```
from arango import ArangoClient

client = ArangoClient(hosts="http://localhost:8529")
db = client.db("_system", username="root", password="change-me")

if not db.has_collection("users"):
    db.create_collection("users")
users = db.collection("users")
users.insert_many([
    {"_key": "alice", "name": "Alice", "age": 34},
    {"_key": "bob", "name": "Bob", "age": 27},
])

cursor = db.aql.execute(
    "FOR u IN users FILTER u.age >= @min RETURN u.name",
    bind_vars={"min": 30},
)
print(list(cursor))
```

`ArangoClient.db()` は接続先データベースのハンドルを返すだけで、この時点では認証を検証しません。接続確認を最初に済ませたい場合は `verify=True` を渡します。AQLは必ず `bind_vars` で値を渡し、f文字列でクエリに埋め込まないようにします。

## ベクトルインデックスとAI関連機能：3.12.4以降の追加点

3.12.4でベクトルインデックスが追加され、埋め込みベクトルを保存した属性に対して近似最近傍検索ができるようになりました。AQLでは `APPROX_NEAR_COSINE()` と `APPROX_NEAR_L2()` で類似ドキュメントを取得します。グラフ走査と同じクエリの中でベクトル検索を書けるため、「似た文書を取り、その文書に関係するエンティティをグラフでたどる」というGraphRAG型の検索を1つのDBで組めるのがArangoDBの強みです。

使う前に押さえる制約は3つあります。サーバーを `--vector-index` 付きで起動する必要があり（3.12.4と3.12.5では `--experimental-vector-index`）、一度有効にすると無効化できません。3.12.8まではデータを先に投入してからでないとインデックスを作れず、3.12.9から先に作成して十分な件数がたまった時点で自動的に学習する方式になりました。また学習はデータの分布に基づくため、後から追加したベクトルは最初に作ったクラスタに割り当てられるだけで、分布が大きく変わったら作り直しが必要です。フィルタ付きのベクトル検索は3.12.6から使えます。

ベクトル検索専用の製品との使い分けは、[ベクトルデータベースとグラフデータベースの違い](/tech/details/4682/)で比較しています。グラフと組み合わせた検索方式そのものは[GraphRAGの仕組み](/tech/details/8326/)が参考になります。

## MongoDB・Neo4jとの違いと選定基準

ArangoDBの比較対象は、ドキュメントDBの代表のMongoDBと、グラフDBの代表のNeo4jです。どちらか一方のモデルで足りる場合、専用製品のほうがエコシステムと運用情報が厚くなります。

| 観点       | ArangoDB                  | MongoDB        | Neo4j      |
| -------- | ------------------------- | -------------- | ---------- |
| 主なモデル    | ドキュメント＋グラフ                | ドキュメント         | プロパティグラフ   |
| クエリ言語    | AQL                       | MQL・集計パイプライン   | Cypher     |
| 多段のグラフ走査 | AQLで記述                    | $graphLookupのみ | Cypherで記述  |
| マネージド    | AMP                       | MongoDB Atlas  | Neo4j Aura |
| ライセンス    | BSL 1.1・Community License | SSPL           | GPLv3・商用   |

MongoDBは `$graphLookup` で再帰的な参照をたどれますが、経路そのものを返したり最短経路を求めたりする処理は苦手です。Neo4jはCypherでグラフを検索できますが、ノードのプロパティに入れ子のMAPをそのまま保存することはできません。入れ子のJSONを保持して検索したい場合は、グラフへの再モデル化やドキュメントDBとの併用を検討します。MongoDBのマネージド版は[MongoDB Atlasのクラスタ階層と料金](/tech/details/16446/)、Neo4jは[Neo4jのCypherとエディション選定](/tech/details/15996/)で詳しく扱っています。

### ArangoDBを選ぶべき条件と避けるべき条件

選ぶべきなのは、同じエンティティを「属性で検索するドキュメント」と「関係をたどるグラフの頂点」の両方として扱い、それを同じDBで管理し、バックアップをまとめたい場合です。製品カタログと推薦グラフ、ID・権限の関係管理、ナレッジグラフとベクトル検索の併用が典型です。複数コレクションをまたぐACID保証が要件なら、クラスタでは複数DB-Serverにまたがるトランザクションの原子性に制約があるため、単一サーバーかOneShardを前提に構成します。

逆に、次の条件に当てはまるなら採用を見送ります。社外向けSaaSの基盤にする場合や、データが100GBに達する見込みがある場合に、Enterprise契約の予算が取れないならライセンス上そもそも使えません。グラフ走査がほぼ無く、ドキュメント検索だけで済む場合はMongoDBやPostgreSQLのJSONBのほうが採用実績と運用知見が多くなります。Windowsサーバーでの本番運用が前提の組織も、3.12以降はサポート外です。クラウドのマネージドグラフDBで足りるなら、[Amazon Neptune](/tech/details/3337/)のようにクラウド事業者のサービスを選ぶ選択肢もあります。

## 運用で詰まりやすい点：バックアップとクラスタ構成

バックアップは3方式あります。`arangodump`・`arangorestore` による論理バックアップはコレクション単位で移行にも使え、`arangobackup` によるHot Backupは書き込みを短時間止めてクラスタ全体の整合した時点を取得します。Hot Backupは3.12.4までEnterprise専用でしたが、3.12.5以降はCommunity Editionでも使えます。サーバーを停止して取るファイルコピー（コールドバックアップ）も可能ですが、稼働を止められないシステムではHot Backupを基本にします。

クラスタはAgent・Coordinator・DB-Serverの3種類のプロセスで構成し、データはシャードに分割されます。シャードキーの決め方が結合とグラフ走査の性能を左右する点は、[シャーディングのシャードキー設計](/tech/details/16274/)と同じ考え方です。最初から大規模クラスタを組むより、単一サーバーで始めて100GBの上限やライセンス条件とあわせて拡張計画を立てるほうが、費用の見通しを立てやすくなります。

## よくある質問

### ArangoDBは無料で使えますか？

社内業務の目的で、データセットがクラスタ全体で合計100GB未満であればCommunity Editionを無料で使えます。3.12以降は商用目的での利用や100GB以上のデータにはEnterpriseライセンスが必要です。ライセンス原文には開発・検証用途を上限から外す規定はないため、検証環境でも同じ条件で考えます。

### ArangoDBはWindowsやMacにインストールできますか？

3.12以降はWindows・macOS向けのネイティブパッケージが提供されていないため、Docker公式イメージ `arangodb` を使います。Apple シリコンのMacでは `--platform linux/arm64/v8` を指定します。どちらのOSも本番環境のホストとしてはサポート外です。

### ArangoDBの既定ポートとWeb UIのURLは？

既定ポートは8529で、Web UIはブラウザで `http://localhost:8529` を開くと使えます。初期ユーザーは `root` で、パスワードはDocker起動時の環境変数で指定します。

### AQLとSQLの違いは何ですか？

AQLは `FOR` ループの形で書き、テーブルの代わりにコレクションを、行の代わりにJSONドキュメントを扱います。AQL固有のグラフ走査構文（`OUTBOUND`・`SHORTEST_PATH`）を同じ言語で書ける点が最大の違いです。

### ArangoDBとMongoDBはどちらを選ぶべきですか？

多段の関係をたどるグラフ処理が要件にあるならArangoDB、ドキュメントの検索と集計が中心ならMongoDBが向きます。商用サービスで大規模データを扱う場合は、両者のライセンス条件（ArangoDBのCommunity License、MongoDBのSSPL）を先に確認してください。

## 関連記事

- [Neo4jとは？グラフデータベースの構造とCypher・エディション選定を実装視点で解説【2026年版】](/tech/details/15996/)
- [ベクトルデータベースとグラフデータベースの違い｜比較表と使い分け・GraphRAGでの併用【2026年版】](/tech/details/4682/)
- [MongoDB Atlasとは？クラスタ階層・料金・セキュリティ設定と採用判断を実装者目線で解説【2026年版】](/tech/details/16446/)
- [Amazon Neptuneとは｜3つのクエリ言語・Analyticsとの違い・料金モデルを実装目線で解説【2026年版】](/tech/details/3337/)
- [データベースとは？種類・DBMS・RDBとNoSQLの選び方を実装目線で解説](/tech/details/13012/)

---

出典: [ArangoDBとは？3.12のライセンス・AQLの書き方・Docker導入を実装目線で解説](<https://www.issoh.co.jp/tech/details/7760/>)（株式会社一創）
