AI

社内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.jsBookStackOutline
ライセンスAGPL-3.0MITBSL-1.1
エディタMarkdown/WYSIWYG/50+WYSIWYG/MarkdownNotion風ブロック
Git同期
リアルタイムコラボ
Slack連携✅(認証)✅(検索・通知)
SSO✅ 多数
GraphQL API
REST API
最小RAM512MB512MB1GB
GitHub Stars24k+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_IDBOOKSTACK_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

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。