社内WikiOSS比較:Wiki.js vs BookStack vs Outline でConfluence代替をセルフホスト
オープンソースラボ編集部 ・ 2026年6月13日
社内WikiOSS比較:Wiki.js vs BookStack vs Outline でConfluence代替をセルフホスト
AtlassianのConfluenceは月$5.75/ユーザー(クラウド版)、20人チームで月$115。Wiki.js(Node.js製・Git同期)・BookStack(Laravel製・本/章/ページ構造)・Outline(Notion風・Slack統合)はOSSの社内ドキュメント管理ツールで、技術ドキュメント・手順書・議事録をセルフホストで無料管理できます。
社内Wikiツールの選定理由
- コスト削減: Confluenceは30人チームで月$172.50。セルフホストでサーバー代$20/月のみに
- Gitバージョン管理: ドキュメントをGitHubと同期してPRでレビューしたい(Wiki.js)
- わかりやすい階層: 本→章→ページという直感的な構造でドキュメントを整理したい(BookStack)
- Notion風UI: リアルタイムコラボ・コマンドパレット・@メンションがあるモダンなエディタ(Outline)
- Slack連携: Slackから検索・通知・リンク展開ができる(Outline)
主要ツールの概要
Wiki.js
Node.js製のフル機能Wikiエンジンです。GitHubスター24k+。Markdown・WYSIWYG・AsciiDoc・HTML等50以上のエディタに対応し、GitHubとの双方向同期・SSO認証・多言語対応・強力な検索機能を持ちます。
# Wiki.jsをdocker-composeで起動
version: "3"
services:
wikijs:
image: requarks/wiki:2
restart: always
ports:
- "3000:3000"
environment:
DB_TYPE: postgres
DB_HOST: postgres
DB_PORT: "5432"
DB_USER: wikijs
DB_PASS: wikijs_pass
DB_NAME: wikijs
depends_on:
- postgres
postgres:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: wikijs
POSTGRES_USER: wikijs
POSTGRES_PASSWORD: wikijs_pass
volumes:
- wikijs_db:/var/lib/postgresql/data
volumes:
wikijs_db:
# Wiki.js のGit同期設定(管理画面→ストレージ→Git)
# GitHubリポジトリとドキュメントを双方向同期
# 設定値(管理画面で入力)
# リポジトリURL: https://github.com/your-org/docs.git
# ブランチ: main
# 認証タイプ: SSH または Personal Access Token
# コミット名: Wiki.js Bot
# コミットメール: wiki@yoursite.com
# 同期方向: 双方向(GithubとWiki両方から更新可能)
# 同期間隔: 5分
# GitHub Actions でWiki.jsドキュメントをPRレビュー対象にする
# .github/workflows/docs-review.yml
// Wiki.js APIでドキュメントを検索するNext.jsコンポーネント
// Wiki.jsはGraphQL APIを提供
const WIKIJS_GRAPHQL = process.env.WIKIJS_URL + "/graphql";
const WIKIJS_TOKEN = process.env.WIKIJS_API_TOKEN;
async function searchDocs(query: string) {
const res = await fetch(WIKIJS_GRAPHQL, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${WIKIJS_TOKEN}`,
},
body: JSON.stringify({
query: `
query SearchPages($query: String!) {
pages {
search(query: $query) {
results {
id
title
description
path
locale
}
suggestions
totalHits
}
}
}
`,
variables: { query },
}),
});
const data = await res.json();
return data.data.pages.search.results;
}
// Next.jsのサイト内検索にWiki.jsドキュメントを含める
export async function SearchBar() {
const [results, setResults] = useState([]);
return (
<input
placeholder="ドキュメントを検索..."
onChange={async (e) => {
if (e.target.value.length > 2) {
const docs = await searchDocs(e.target.value);
setResults(docs);
}
}}
/>
);
}
BookStack
PHP(Laravel)製のシンプルな社内Wikiプラットフォームです。GitHubスター15k+。「書棚(Shelves)→本(Books)→章(Chapters)→ページ(Pages)」という直感的な4階層構造で、技術ドキュメント・手順書・FAQ・議事録を整理できます。WYSIWYG・Markdown・コードブロック・画像埋め込みに対応。
# BookStackをdocker-composeで起動
version: "3"
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
restart: always
ports:
- "6875:80"
environment:
PUID: "1000"
PGID: "1000"
TZ: Asia/Tokyo
APP_URL: https://wiki.yoursite.com
APP_KEY: "base64:your-32-char-base64-encoded-key"
DB_HOST: bookstack_db
DB_PORT: "3306"
DB_USER: bookstack
DB_PASS: bookstack_pass
DB_DATABASE: bookstack
# メール設定
MAIL_DRIVER: smtp
MAIL_HOST: smtp.sendgrid.net
MAIL_PORT: "587"
MAIL_ENCRYPTION: tls
MAIL_USERNAME: apikey
MAIL_PASSWORD: your-sendgrid-key
MAIL_FROM: wiki@yoursite.com
# 認証設定(Slackでサインイン)
SLACK_APP_ID: your-slack-app-id
SLACK_APP_SECRET: your-slack-app-secret
depends_on:
- bookstack_db
volumes:
- bookstack_data:/config
bookstack_db:
image: lscr.io/linuxserver/mariadb:latest
restart: always
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を使ってNext.jsにヘルプドキュメントを表示
const BOOKSTACK_URL = process.env.BOOKSTACK_URL;
const BOOKSTACK_TOKEN = process.env.BOOKSTACK_TOKEN_ID + ":" + process.env.BOOKSTACK_TOKEN_SECRET;
// ページ一覧を取得
async function getPages(bookId?: number) {
const params = bookId ? `?filter[book_id]=${bookId}` : "";
const res = await fetch(`${BOOKSTACK_URL}/api/pages${params}`, {
headers: { Authorization: `Token ${BOOKSTACK_TOKEN}` },
next: { revalidate: 3600 },
});
return res.json();
}
// 特定ページのHTMLコンテンツを取得してNext.jsに埋め込む
async function getPageContent(pageId: number) {
const res = await fetch(`${BOOKSTACK_URL}/api/pages/${pageId}`, {
headers: { Authorization: `Token ${BOOKSTACK_TOKEN}` },
next: { revalidate: 1800 },
});
const page = await res.json();
return { title: page.name, html: page.html, updated_at: page.updated_at };
}
// Server Componentでヘルプページを表示
export async function HelpPage({ pageId }: { pageId: number }) {
const { title, html } = await getPageContent(pageId);
return (
<article>
<h1>{title}</h1>
<div dangerouslySetInnerHTML={{ __html: html }} />
</article>
);
}
Outline
Notion風のモダンな社内Wikiです。GitHubスター29k+。リアルタイムコラボレーション・コマンドパレット(/コマンド)・@メンション・Slackコマンド(/outline search)・フィーチャーフラグ・アクセス制御に対応し、スタートアップからエンタープライズまで幅広く使われています。
# Outlineをdocker-composeで起動
version: "3"
services:
outline:
image: outlinewiki/outline:latest
restart: always
ports:
- "3000:3000"
environment:
NODE_ENV: production
SECRET_KEY: "your-32-char-hex-secret"
UTILS_SECRET: "your-32-char-hex-utils-secret"
DATABASE_URL: postgres://outline:outline_pass@postgres:5432/outline
REDIS_URL: redis://redis:6379
URL: https://docs.yoursite.com
PORT: "3000"
# Slack OAuthで認証
SLACK_CLIENT_ID: your-slack-client-id
SLACK_CLIENT_SECRET: your-slack-client-secret
SLACK_VERIFICATION_TOKEN: your-slack-token
SLACK_APP_ID: your-slack-app-id
# S3にファイル保存
AWS_ACCESS_KEY_ID: your-aws-key
AWS_SECRET_ACCESS_KEY: your-aws-secret
AWS_REGION: ap-northeast-1
AWS_S3_UPLOAD_BUCKET_NAME: your-outline-bucket
AWS_S3_UPLOAD_BUCKET_URL: https://your-outline-bucket.s3.ap-northeast-1.amazonaws.com
# メール
SMTP_HOST: smtp.sendgrid.net
SMTP_PORT: "587"
SMTP_USERNAME: apikey
SMTP_PASSWORD: your-sendgrid-key
SMTP_FROM_EMAIL: docs@yoursite.com
depends_on:
- postgres
- redis
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: outline
POSTGRES_USER: outline
POSTGRES_PASSWORD: outline_pass
volumes:
- outline_db:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
outline_db:
機能比較表
| 比較項目 | Wiki.js | BookStack | Outline |
|---|---|---|---|
| ライセンス | AGPL-3.0 | MIT | BSL-1.1 |
| エディタ | Markdown/WYSIWYG/50+ | WYSIWYG/Markdown | Notion風ブロック |
| Git同期 | ✅ | ❌ | ❌ |
| リアルタイムコラボ | ❌ | ❌ | ✅ |
| Slack連携 | ❌ | ✅(認証) | ✅(検索・通知) |
| SSO | ✅ 多数 | ✅ | ✅ |
| GraphQL API | ✅ | ❌ | ✅ |
| REST API | ✅ | ✅ | ✅ |
| 最小RAM | 512MB | 512MB | 1GB |
| GitHub Stars | 24k+ | 15k+ | 29k+ |
社内Wikiとセットで活用するナレッジ管理はknowledgeカテゴリ(/categories/knowledge)でまとめています。Wikiのドキュメントを検索するOSSツールはopen-source-search-engine(/categories/devops)も参照してください。
FAQ
Q. Wiki.jsのGit同期でGitHubとドキュメントを同期するメリットは何ですか?
A. Git同期の主なメリット: ①PRでドキュメントレビュー: ドキュメントの変更をPRとして提出→エンジニアがコードレビューと同じフローで承認②バージョン履歴: 誰がいつ何を変えたかがgit logで追跡可能③バックアップ: GitHubがドキュメントのバックアップになる④Markdownファイルとして管理: VS CodeやCursorでドキュメントを直接編集してプッシュできる。設定の注意点: Wiki.jsの双方向同期はコンフリクトが起きる可能性があります。「GitHubからWiki.jsへの一方向」が最も安定します。チーム分業: エンジニアはGitHubでMarkdownを編集→自動でWiki.jsに反映、非エンジニアはWiki.jsのWYSIWGエディタで編集→GitHubにプッシュ、という使い分けが理想的です。
Q. BookStackのページをNext.jsの公開ドキュメントサイトに埋め込む際の注意点は?
A. BookStack APIを使ってコンテンツを取得する際の注意点: ①認証トークンの管理: BOOKSTACK_TOKEN_IDとBOOKSTACK_TOKEN_SECRETはサーバーサイドの環境変数に保存し、クライアントサイドに漏れないようにすること(Server Componentまたは/apiルートで処理)②HTMLサニタイズ: BookStackのAPIが返すHTMLをdangerouslySetInnerHTMLで表示する際はDOMPurify等でXSSをサニタイズ③ISRキャッシュ: { next: { revalidate: 1800 } }で30分キャッシュするとBookStackへのAPI呼び出しを最小化④画像URL: BookStackの画像URLには認証が必要なため、公開ドキュメントに埋め込む場合は画像をS3等に別途ホストする必要があります。最もシンプルな構成: BookStackをプライベートネットワークに置き、公開APIエンドポイントからのみコンテンツを取得する構成が安全です。
Q. OutlineをSlackと連携させてチームに定着させる方法は?
A. Slack連携の設定と定着化のポイント: ①Slashコマンド: /outline search キーワードでSlackからWikiを検索。設定: Outline管理画面→Integrations→Slack②Link Unfurling: Slackにdocs.yoursite.comのURLを貼ると自動でドキュメントの内容をプレビュー表示③通知: ドキュメントが更新されたらSlackの指定チャンネルに通知(コメント・共有・更新の各イベントで設定可能)。定着させるコツ: ①チームMTGの議事録は必ずOutlineに書く習慣をつける②READMEのリンクをOutlineに移す③オンボーディング資料をOutlineで管理する④週1回「今週のドキュメント更新」をSlackに自動投稿するn8nワークフローを作る。
Q. ConfluenceからOutlineへの移行でコンテンツを移行するツールはありますか?
A. 公式・非公式の移行パスがあります。①Confluence HTML Export→Outline: ConfluenceのSpace→スペースをエクスポート(HTMLまたはXML)→confluence-to-outlineというCommunityツールでOutlineのJSON形式に変換→Outline APIでインポート。②Markdown経由: Confluence→Markdownエクスポートプラグイン(confluence-to-markdown)→Outlineの「Markdownインポート」機能で取り込み。注意点: ①画像はConfluenceのアタッチメントとして保存されているため、個別にダウンロードしてOutlineのS3に再アップロードが必要②コメント・インラインコメントは移行できない③テーブルの複雑なレイアウトは崩れる可能性がある。移行規模の目安: 100ページ以下ならスクリプトで自動化、それ以上は移行の優先順位をつけて段階的に対応するのが現実的です。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| Git同期・エンジニアチーム | Wiki.js |
| 書棚構造・シンプル | BookStack |
| Notion風・Slack統合 | Outline |
| Confluence代替のファースト選択 | Outline |