オープンソースWiki・ナレッジベース比較:Outline vs BookStack vs Wiki.js でチームWikiをセルフホストする
オープンソースラボ編集部 ・ 2026年6月13日
オープンソースWiki・ナレッジベース比較:Outline vs BookStack vs Wiki.js でチームWikiをセルフホストする
ConfluenceやNotionに依存せず、チームのナレッジベースをオープンソースでセルフホストしましょう。Outline・BookStack・Wiki.jsはデータを自社サーバーに完全保持しながら、美しいドキュメント管理プラットフォームを提供します。
チームWikiが必要な場面
- 社内ドキュメント: 運用手順書・オンボーディング・技術仕様をチームで管理
- データ主権: 社外秘の技術ドキュメントをクラウドサービスに預けたくない
- コスト削減: Confluenceは$5.16/ユーザー/月〜、Notionは$10/ユーザー/月〜
- カスタマイズ: 独自のテーマ・ブランディング・統合を実装
- エアギャップ: インターネット非接続環境での社内ナレッジ管理
主要ツールの概要
Outline
モダンなUIとMarkdownエディタを持つオープンソースWikiです。GitHubスターが29k+で最も注目されているチームナレッジベースです。リアルタイム共同編集・Slack統合・検索・コレクション(フォルダ)・テンプレート・バックリンクを提供します。
# Outlineをdocker-composeで起動
version: "3"
services:
redis:
image: redis
ports:
- "6379:6379"
postgres:
image: postgres:16
environment:
POSTGRES_DB: outline
POSTGRES_USER: outline
POSTGRES_PASSWORD: outline_pass
volumes:
- postgres_data:/var/lib/postgresql/data
outline:
image: outlinewiki/outline:latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://outline:outline_pass@postgres:5432/outline
REDIS_URL: redis://redis:6379
SECRET_KEY: your-secret-key-min-32chars
UTILS_SECRET: your-utils-secret
URL: https://wiki.example.com
PORT: 3000
# ファイルストレージ(S3互換)
AWS_ACCESS_KEY_ID: your-access-key
AWS_SECRET_ACCESS_KEY: your-secret-key
AWS_REGION: ap-northeast-1
AWS_S3_UPLOAD_BUCKET_NAME: outline-files
AWS_S3_UPLOAD_BUCKET_URL: https://outline-files.s3.ap-northeast-1.amazonaws.com
# 認証(Slack OAuth)
SLACK_CLIENT_ID: your-slack-client-id
SLACK_CLIENT_SECRET: your-slack-client-secret
depends_on:
- postgres
- redis
volumes:
postgres_data:
// Outline REST APIでドキュメントを作成
const BASE_URL = "https://wiki.example.com/api";
const API_TOKEN = "your-api-token";
const headers = {
"Content-Type": "application/json",
"Authorization": `Bearer ${API_TOKEN}`,
};
// コレクション(フォルダ)を作成
const collectionResp = await fetch(`${BASE_URL}/collections.create`, {
method: "POST",
headers,
body: JSON.stringify({
name: "エンジニアリング",
description: "技術ドキュメントのコレクション",
color: "#0369A1",
icon: "✏️",
permission: "read_write",
}),
});
const collection = (await collectionResp.json()).data;
// ドキュメントを作成
const docResp = await fetch(`${BASE_URL}/documents.create`, {
method: "POST",
headers,
body: JSON.stringify({
title: "APIリファレンス",
text: "# APIリファレンス
## 認証
...",
collectionId: collection.id,
publish: true,
}),
});
const doc = (await docResp.json()).data;
console.log(`Created: ${doc.url}`);
// ドキュメントを検索
const searchResp = await fetch(`${BASE_URL}/documents.search`, {
method: "POST",
headers,
body: JSON.stringify({ query: "デプロイ手順", limit: 10 }),
});
const results = (await searchResp.json()).data;
results.forEach((r) => console.log(`- ${r.document.title}`));
# OutlineのAPIをPythonで使う
import httpx
BASE_URL = "https://wiki.example.com/api"
API_TOKEN = "your-api-token"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_TOKEN}",
}
def get_all_documents(collection_id: str) -> list:
'''コレクションの全ドキュメントを取得'''
docs = []
offset = 0
while True:
resp = httpx.post(f"{BASE_URL}/documents.list", headers=headers, json={
"collectionId": collection_id,
"limit": 25,
"offset": offset,
})
data = resp.json()["data"]
if not data:
break
docs.extend(data)
offset += 25
return docs
def export_as_markdown(doc_id: str) -> str:
'''ドキュメントをMarkdownでエクスポート'''
resp = httpx.post(f"{BASE_URL}/documents.export", headers=headers, json={
"id": doc_id,
})
return resp.json()["data"]
BookStack
シンプルな階層構造(棚→本→章→ページ)でドキュメントを管理するWikiです。PHPで実装されており、Wikiの構造が明確で、ページの検索・バージョン管理・権限制御が充実しています。
# BookStackをDockerで起動(docker-compose)
version: '3'
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
environment:
PUID: 1000
PGID: 1000
APP_URL: https://wiki.example.com
DB_HOST: bookstack_db
DB_PORT: 3306
DB_USER: bookstack
DB_PASS: bookstack_pass
DB_DATABASE: bookstack
volumes:
- bookstack_data:/config
ports:
- "6875:80"
depends_on:
- bookstack_db
bookstack_db:
image: lscr.io/linuxserver/mariadb:latest
environment:
PUID: 1000
PGID: 1000
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: bookstack
MYSQL_USER: bookstack
MYSQL_PASSWORD: bookstack_pass
volumes:
- bookstack_db_data:/config
volumes:
bookstack_data:
bookstack_db_data:
# BookStack REST APIでページを操作
import httpx
BASE_URL = "https://wiki.example.com/api"
API_TOKEN_ID = "your-token-id"
API_TOKEN_SECRET = "your-token-secret"
headers = {
"Authorization": f"Token {API_TOKEN_ID}:{API_TOKEN_SECRET}",
"Content-Type": "application/json",
}
# 本の一覧取得
books = httpx.get(f"{BASE_URL}/books", headers=headers).json()["data"]
for book in books:
print(f"Book: {book['name']} (ID: {book['id']})")
# ページを作成(Markdown形式)
new_page = httpx.post(f"{BASE_URL}/pages", headers=headers, json={
"book_id": books[0]["id"],
"name": "デプロイ手順書",
"markdown": "# デプロイ手順
## 本番環境へのデプロイ
```bash
npm run build
```",
}).json()
print(f"Created page: {new_page['name']}")
# 全ページを検索
search_results = httpx.get(
f"{BASE_URL}/search",
headers=headers,
params={"query": "デプロイ"},
).json()
for result in search_results["data"]:
print(f"- {result['name']} ({result['type']})")
Wiki.js
Node.jsで構築された高機能なWikiで、Git連携・多言語対応・多彩な認証・豊富なエディタ(Markdown/WYSIWYG/ドローイング)を提供します。PostgreSQL・MySQL・SQLite・MongoDB・Microsoft SQL Serverに対応します。
# Wiki.jsをdocker-composeで起動
version: "3"
services:
db:
image: postgres:16
environment:
POSTGRES_DB: wiki
POSTGRES_USER: wikijs
POSTGRES_PASSWORD: wikijs_pass
volumes:
- db_data:/var/lib/postgresql/data
wiki:
image: requarks/wiki:2
depends_on:
- db
ports:
- "3000:3000"
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: wikijs_pass
DB_NAME: wiki
volumes:
db_data:
# Wiki.js GraphQL APIでページを操作
mutation CreatePage {
pages {
create(
content: "# はじめに
Wiki.jsのAPIでページを作成しました。"
description: "APIで作成したページ"
editor: "markdown"
isPrivate: false
isPublished: true
locale: "ja"
path: "engineering/api-reference"
tags: ["api", "engineering"]
title: "APIリファレンス"
) {
responseResult {
succeeded
errorCode
message
}
page {
id
path
title
}
}
}
}
// Wiki.js GraphQL APIをJavaScriptで使う
const WIKI_URL = "https://wiki.example.com";
const API_TOKEN = "your-api-token";
async function queryWiki(query, variables = {}) {
const resp = await fetch(`${WIKI_URL}/graphql`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${API_TOKEN}`,
},
body: JSON.stringify({ query, variables }),
});
return resp.json();
}
// ページ一覧取得
const pages = await queryWiki(`
query {
pages {
list(orderBy: TITLE) {
id path title description updatedAt
}
}
}
`);
// Gitリポジトリのコミットごとに同期
const syncResult = await queryWiki(`
mutation {
storage {
syncAllTargets {
responseResult { succeeded message }
}
}
}
`);
機能比較表
| 比較項目 | Outline | BookStack | Wiki.js |
|---|---|---|---|
| エディタ | Markdown + リッチテキスト | WYSIWYG / Markdown / HTML | Markdown / WYSIWYG / Draw.io |
| 共同編集 | ✅ リアルタイム | ❌ | ❌ |
| 検索 | ✅ 全文検索 | ✅ | ✅ |
| Git連携 | ❌ | ❌ | ✅ |
| バックリンク | ✅ | ❌ | ✅ |
| コレクション/階層 | コレクション | 棚→本→章→ページ | フォルダ |
| テンプレート | ✅ | ✅ | ✅ |
| Slack統合 | ✅ | ❌ | ✅ |
| SSO(SAML/OIDC) | ✅ | ✅ | ✅ |
| APIの質 | ✅ REST | ✅ REST | ✅ GraphQL |
| 多言語対応 | ✅ | ✅ | ✅ 日本語 |
| バックアップ | S3エクスポート | mysqldump | Git / FS |
| 実装言語 | TypeScript(Node.js) | PHP(Laravel) | Node.js |
| ライセンス | BSL 1.1 | MIT | AGPL 3.0 |
| GitHub Stars | 29k+ | 15k+ | 24k+ |
ナレッジ管理・ドキュメントツールはknowledgeカテゴリ(/categories/knowledge)で一覧でき、チームコミュニケーションツールはcommunicationカテゴリ(/categories/communication)でも探せます。
FAQ
Q. OutlineはConfluenceの代替になりますか?
A. スタートアップ〜中規模チームのドキュメント管理用途では十分代替できます。Outlineが現在Confluenceに劣る点: Jira・Trelloとの深いネイティブ統合(Confluenceはアトラシアン製品と緊密に連携)・マクロ・テンプレートの豊富さ・エンタープライズ向けのコンプライアンス機能。しかし、ConfluenceがCloud基本プランで$5.16/ユーザー/月〜かかるのに対し、OutlineはOSS版なら無料(ホスティングコストのみ)です。SlackをOIDCプロバイダーとして使う場合、Outlineの認証設定は非常にシンプルです。
Q. Wiki.jsのGit連携はどう動きますか?
A. Wiki.jsはストレージプロバイダーとしてGitHubやGitLabを設定できます。設定すると: ページの保存時に自動的にGitリポジトリにコミット→プッシュ、GitリポジトリのMarkdownファイルを変更すると自動的にWiki.jsに反映、複数の環境間でWikiを同期できます。PRを使ったドキュメントレビューやgit blameでの変更履歴追跡ができるため、開発チームのドキュメントワークフローに自然に統合されます。
Q. BookStackは大規模なドキュメントに向いていますか?
A. BookStackの4階層構造(棚→本→章→ページ)は大規模ドキュメントの整理に適しています。ただしページ数が数千を超えると全文検索のパフォーマンスが低下する場合があります。本番環境では: MariaDB/MySQLの全文検索インデックスを有効化、Redis/Memcachedでキャッシュ、十分なRAM(2GB以上推奨)が必要です。OutlineやWiki.jsと比べてUIがシンプルなため、技術者以外のスタッフにも教えやすい利点があります。
Q. Confluenceからのデータ移行はできますか?
A. OutlineはConfluenceのエクスポート(HTMLやXML形式)を取り込む機能を提供しています。完全な移行ガイドは公式ドキュメントにあります。BookStackもConfluenceのHTMLエクスポートをインポートできます。Wiki.jsはMarkdownファイルをGit経由で直接インポートできます。移行前にConfluenceからPDFやWordではなくHTML/Markdown形式でエクスポートすることが重要です。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| モダンUI・リアルタイム共同編集 | Outline |
| シンプル・非技術者も使いやすい | BookStack |
| Git連携・バックアップ | Wiki.js |
| Confluence代替 | Outline |