SSD Nodes Learn Hosting plans →
ガイド Matt Connor著者 Matt Connor ・更新日 2026-10-19

セルフホスト型Wiki比較:BookStack、Wiki.js、Outline

BookStack、Wiki.js、Outlineを、構築の手間、編集方式、ログイン方法、検索で比較します。個人管理者とチーム向けの選択も明確に解説します。

運用すべきセルフホスト型 Wiki

セルフホスト型 Wiki を使うと、チームのドキュメントを、管理下のサーバー上にある検索可能な 1 か所へ集約できます。BookStack、Wiki.js、Outline はいずれもこの用途に対応しています。主な違いは、最初のページを表示するまでにどれだけ構成を組み立てる必要があるか、そして誰にログインを許可するかです。

BookStack は構築が最も簡単で、構造に関する方針が最も明確です。Wiki.js は、1 つのページツリー上で利用できるエディターの選択肢が最も豊富です。Outline は 3 つの中で執筆体験が最も優れていますが、外部の identity provider に接続するまで誰もサインインできません。

以下の内容は、各プロジェクトの公式ドキュメントと公開されている設定ファイルを確認したものです。これはベンチマークではなく、機能の比較です。3 つとも開発が進んでいるため、バージョン番号と要件には基準日を付けています。

構造こそが実際の選択です

BookStack はコンテンツの構造を固定します。ページはブック内にあり、ブックにはチャプターを追加でき、シェルフでブックをまとめます。5 番目の階層を独自に作ることはできません。この制限こそが製品の特徴です。新しい執筆者でも、ページを配置できる場所が 1 つしかないため、置き場所に迷いません。一方で、この構造に合わないコンテンツも、そこへ無理に当てはめる必要があります。

Wiki.js は、ディスク上のフォルダーに似たパスツリーを使用します。ops/backup/restic にあるページは、配置した場所に置かれ、階層の深さも選択できます。同じテーマを 2 人が異なるブランチに分類することを防ぐ仕組みはありません。そのため、Wiki.js のインスタンスにはツリーを管理する担当者が 1 人必要です。

Outline は、ドキュメントをドキュメント内にネストするコレクションを使用します。ドキュメントの移動は、マウスでドラッグして行います。3 つの中で最も柔軟ですが、その分、構造が最も簡単に崩れます。

BookStack: 最小構成のインストール

BookStack は、MySQL をバックエンドに使用する PHP アプリケーションです。2026 年 10 月時点の文書化された要件は、PHP 8.2 以降、MySQL 8.0 または MariaDB 10.6 以降です。ソースからインストールする場合は、Composer 2.2 以降も必要です。現在のリリース系列は 26.09 で、2026 年 9 月 24 日にリリースされました。最新の安定版は 26.09.1 です。26.09 以降では APP_KEY の設定が必要です。以下のコンテナ手順では、すでに設定しています。

プロジェクトがインストールスクリプトを公開しているのは、現在 22.04、24.04、26.04 の、サポート対象である Ubuntu LTS リリースだけです。24.04 用のスクリプトは、Apache、MySQL 8.0、PHP 8.3 をインストールします。26.04 では、以下のコマンドで installation-ubuntu-26.04.sh を使用してください。MySQL 8.4 と PHP 8.5 がインストールされます。

wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-24.04.sh
chmod a+x installation-ubuntu-24.04.sh
sudo ./installation-ubuntu-24.04.sh

実行する前に、このスクリプトの警告を読んでください。文書には、「ONLY FOR A FRESH OS, it will install Apache, MySQL 8.0 & PHP 8.3 and could OVERWRITE any existing web setup on the machine」と記載されています。すでに port 80 で応答しているサーバーでは、スクリプトがそのポートを取得し、Apache の設定を書き換えます。その場合はコンテナを使用してください。または、Ubuntu 24.04 上の既存の LAMP スタックに BookStack を手動でインストールします。

コンテナ方式では、LinuxServer.io のイメージを使用します。これは BookStack の文書が案内している方法です。BookStack にはセッション暗号化キーが必要です。キーがないとページを提供できないため、最初に生成します。

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey

表示された値を APP_KEY にコピーし、サービスを記述します。

services:
  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - APP_URL=https://wiki.example.com
      - APP_KEY=paste_the_generated_key_here
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_USERNAME=bookstack
      - DB_PASSWORD=change_me
      - DB_DATABASE=bookstackapp
    volumes:
      - ./config:/config
    ports:
      - 6875:80
    restart: unless-stopped

APP_URL は、スキームと port を含め、読者が実際に入力するアドレスと一致させる必要があります。これを http://localhost に設定してからサイトを HTTPS で提供すると、生成されるリンクとリダイレクトが誤ったホストを指します。その結果、読者にはログインページが自分自身へ戻り続けるように表示されます。Compose ファイルに慣れていない場合は、この手順の前に VPS での Docker Compose の基本から始めてください。

起動後は、コンテナが実行中であることだけでなく、アプリケーションが応答することも確認します。

docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login

200 OK は、PHP アプリケーションが起動し、データベースに接続できたことを示します。500 は、ほぼ常に APP_KEY が空であるか、データベース認証情報が一致していないことを示します。BookStack は、デフォルトではエラーをコンテナ出力ではなくログファイルに書き込みます。ホスト上の ./config/log/bookstack/laravel.log を開き、どちらの原因かを確認してください。docker compose logs bookstack にはコンテナ自体の起動メッセージが表示されますが、アプリケーションのエラーが含まれていない場合があります。

Wiki.js: 1 つのツリーで複数のエディター

Wiki.js は Node.js アプリケーションです。公式に記載されている Docker 構成では PostgreSQL と組み合わせますが、Wiki.js は MySQL、MariaDB、MSSQL、SQLite にも対応しています。以下は、プロジェクト独自の Docker ページにある compose ファイルです。

services:
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: wiki
      POSTGRES_PASSWORD: wikijsrocks
      POSTGRES_USER: wikijs
    logging:
      driver: none
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data
  wiki:
    image: ghcr.io/requarks/wiki:2
    depends_on:
      - db
    init: true
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: wikijsrocks
      DB_NAME: wiki
    restart: unless-stopped
    ports:
      - "80:3000"
volumes:
  db-data:

実行する前に POSTGRES_PASSWORD と DB_PASS を同時に変更してください。これらは 1 つの認証情報を構成しており、サンプル値は公開されているためです。タグを ghcr.io/requarks/wiki:2 に固定しているのには理由があります。ドキュメントでは latest を推奨していません。メジャーバージョンをまたぐ更新では、稼働中のインスタンスのデータベーススキーマが変更されるためです。

運用する対象は Version 2 系列です。2026 年 10 月時点で、Version 2 の最新リリースは 2026 年 10 月公開の 2.5.316 です。Version 2 のリリースは現在、別の requarks/wiki-v2 リポジトリから公開されており、:2 イメージタグが引き続きそれらを追跡します。Version 3 は公開ベータ版です。インストールドキュメントによると、Version 3 のイメージには 3.0.0-beta というタグが付けられます。また、ベータ期間が終了するまで通常の 3 タグと 3.0 タグは使用できません。本番環境の対象ではなく、プレビューとして扱ってください。リリース 2.5.316 では、後でコンテンツを Version 3 に移行するためのエクスポートユーティリティも追加されています。

初回の読み込み時に、Wiki.js はブラウザー上のセットアップ手順を表示し、管理者アカウントを作成します。セットアップを完了するまで、ポートに到達できる全員にこのウィザードが表示されます。そのため、ファイアウォールを開放する前に、サービスをリバースプロキシと TLS(トランスポート層セキュリティ)の背後に配置してください。サーバーでこのサービス以外にも複数のサービスをホストする場合、専用のホスト名を持つ wiki は 複数の Docker アプリの前段に Traefik を配置する構成 に自然に組み込めます。

Wiki.js が選ばれる理由は、エディターを選択できることです。1 つのインスタンスで、Markdown ページ、ビジュアルエディターのページ、raw HTML ページ、AsciiDoc ページを並行して管理できます。変換したくない形式の古いコンテンツを取り込む場合に便利です。一方で、1 つの wiki に 4 つの独自スタイルが混在する結果にもなります。そのため、初日にデフォルトのエディターを決め、その決定を記録してください。

概要:最高のエディタと、重い前提条件

Outline は、商用ノートツールのような操作感を求めるユーザーが一般的に選ぶアプリケーションです。Node.js で構築されており、2026年10月17日時点での最新リリースは、2026年10月12日公開の 1.11.0 です。サンプル環境ファイルには必要な要素が記載されています。PostgreSQL(DATABASE_URL)、Redis(REDIS_URL)、2 つのランダムなシークレット、そして外部から到達可能な URL です。

openssl rand -hex 32
openssl rand -hex 32

これらを 2 回実行し、両方の値を保持してください。1 つ目を SECRET_KEY、2 つ目を UTILS_SECRET とします。環境ファイルの核となる部分は以下のようになります。

NODE_ENV=production
URL=https://docs.example.com
PORT=3000
SECRET_KEY=<first openssl value>
UTILS_SECRET=<second openssl value>
DATABASE_URL=postgres://outline:change_me@postgres:5432/outline
PGSSLMODE=disable
REDIS_URL=redis://redis:6379
FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data

PGSSLMODE=disable は、データベースが同一マシンまたは同一の Docker ネットワーク上にある場合にのみ正しく機能します。ネットワーク越しにデータベースへ接続する場合はこの設定を外してください。外さない場合、接続は暗号化されずに送信されます。添付ファイルはオブジェクトストレージの使用が必須ではなくなりました。FILE_STORAGE=local を設定すると、アップロード先は上位ディレクトリになります。このディレクトリはコンテナが書き込み可能である必要があり、バックアップ対象にも含める必要があります。ファイルを S3 互換バケットに保存したい場合は、代わりに AWS_* の値を使用して FILE_STORAGE=s3 を設定してください。

次に、多くのユーザーが驚く点について説明します。Outline には組み込みのユーザー名とパスワードによるログイン機能がありません。サンプル設定には「インストールを機能させるには、これらのいずれか 1 つが必須であり、そうでない場合サインインの選択肢がなくなります」と明記されており、サードパーティのサインイン認証情報が必要です。ドキュメント化されているプロバイダーには、Google、Slack、Microsoft Entra、Discord、および OIDC_CLIENT_ID、OIDC_CLIENT_SECRET、OIDC_AUTH_URI、OIDC_TOKEN_URI、OIDC_USERINFO_URI を介した汎用的な OpenID Connect (OIDC) サーバーが含まれます。

つまり、Outline を運用する実質的なコストは、Outline 本体に加えて PostgreSQL、Redis、そしてアイデンティティプロバイダーの合計となります。チームがすでに Google Workspace や Microsoft Entra でサインインしている場合、最後のピースを揃えるのにかかる時間は 10 分程度であり、Outline は非常に魅力的な選択肢となります。そうでない場合は、Keycloak や Authentik といったサービスを自前でホストする必要があり、パッチ適用やバックアップの対象がもう 1 つ増えることになります。メモリ予算はそれに応じて確保してください。Outline のガイドラインでは、データベースと Redis とは別に、WEB_CONCURRENCY で設定される Web プロセスあたり約 512 MB のメモリが必要とされています。

誰が何を読めるかに関する各製品の扱い

BookStack には、標準でローカルのメールアドレスとパスワードによるアカウントがあります。代替手段として LDAP、SAML2、OIDC にも対応しています。権限はロールごとに設定でき、個別の棚、ブック、チャプター、ページで上書きできます。階層が固定されているため、権限は予測しやすい形で下位へ継承されます。

Wiki.js にもローカルアカウントがあり、管理画面で有効にする認証方式が多数用意されています。ページルールでは、パスパターンに基づいてアクセスを許可または拒否します。強力な反面、設定を誤りやすい仕組みです。ops/* 用に作成したルールが、そのパスの下に後から格納したすべてのページに、気付かないまま適用される可能性があるためです。

Outline では、この問題を全面的にアイデンティティプロバイダーへ委任します。メンバーシップはアイデンティティプロバイダーに従い、Outline 内ではコレクションとグループ単位でアクセスを制御します。退職者が会社を離れてもローカルアカウントが残りません。すでにアイデンティティプロバイダーをアカウント無効化の仕組みに利用している場合、これは大きな利点です。

各製品で検索がどのように動作するか

検索機能によって、wiki が定着するか、忘れられたファイルの置き場になるかが決まります。

BookStack はデータベースを検索し、1 分で習得できるクエリ言語を読者に提供します。"london meeting"のようにフレーズを引用すると、その文字列と完全に一致する結果が必要になります。角括弧ではタグを検索します。[location=london]はタグ名、値、またはその両方で一致し、比較には !=、>=、like などがあります。波括弧では、{created_after:2016-12-30}のようにメタデータで絞り込みます。完全一致、タグ、フィルターの各条件には、先頭に - を付けて否定を指定できます。BookStack では、1 つのクエリに含められる各種類の条件数に上限があります。そのため、非常に長いクエリはそのまま実行されず、切り詰められてから実行されます。

Wiki.js では、検索を交換可能なモジュールとして扱います。ドキュメントに記載されているエンジンは、基本的なデータベースエンジン、PostgreSQL エンジン、Elasticsearch、Algolia、AWS CloudSearch、Azure Search です。数百ページ程度であれば、基本エンジンで十分です。PostgreSQL を使用する場合は、管理画面で PostgreSQL エンジンに切り替えてください。単純な照合ではなく、データベース自体の全文検索インデックスを使用するためです。2 つ目の検索サービスを運用してパッチを適用することを受け入れられる規模の wiki であれば、Elasticsearch を使用します。

Outline は PostgreSQL の全文検索インデックスを検索します。選択できるエンジンはなく、調整する項目もありません。また、アップロードしたドキュメント内のテキストも検索します。数千件程度のドキュメントを扱うチーム wiki であれば、3 つの中で最も手間がかかりません。一方で、検索が十分に高速でなくなった場合に調整できる手段もありません。

自分に合うものを選ぶ

今日の午後には wiki を稼働させたい、構成よりもコンテンツについて議論したいという場合は、BookStack を選んでください。構成要素が最も少なく、1 つの PHP アプリケーションと 1 つの MySQL データベースで動作します。社内の運用手順書や顧客向けドキュメントに適しており、執筆者の多くがエンジニアではないチームにも向いています。3 つの中でバックアップも最も簡単です。全体の状態が、1 つのデータベースダンプと uploads ディレクトリにまとまるためです。

他の製品にはない特定のエディターや認証方式が必要な場合、または既存の Markdown や AsciiDoc を大量に移行し、パス構造を維持したい場合は、Wiki.js を選んでください。ただし、より複雑な構成を運用することになり、メジャーバージョンのタグを固定する必要があります。

執筆の品質を最も重視し、wiki を一般公開ではなくチームで利用し、すでに identity provider がある場合は、Outline を選んでください。その構成により、実際に使いやすいエディターを利用できます。ただし、最初の self-hosted アプリケーションとして選ぶのは避けてください。

3 つのどれにも合わない場合、通常はコンテンツの種類が適合していません。スキャンした請求書や契約書は wiki ではなく、Paperless-ngx などのドキュメント管理システムで管理するものです。それらを wiki に無理に取り込むことが、多くの wiki が最終的に使われなくなる理由です。もう 1 つのよくある不一致は、wiki ではなく、ドキュメント、テーブル、ホワイトボードを 1 つのキャンバスに配置する workspace を求めるケースです。この場合は、上記 3 つのどれよりも self-hosted AFFiNE workspaceの方が適しています。自分のサーバーで運用する価値のある他の選択肢も幅広く確認したい場合は、2026 年版 self-hosting 候補一覧を参照してください。

サイズ見積もりとバックアップ

3 つとも小規模な VPS に収まりますが、現実的な最低要件は、それぞれの背後で動作する構成によって異なります。BookStack は 1 つのアプリケーションプロセスと MySQL で構成されます。Wiki.js は Node プロセスと PostgreSQL で構成されます。Outline は Node プロセス、PostgreSQL、Redis に加えて、通常は ID プロバイダーも併用します。そのため、Outline には追加のメモリを割り当てます。

データベースとアップロードデータはまとめてバックアップし、そのバックアップに依存する前に、両方を使って使い捨てのインスタンスへ 1 回復元してください。復元を試していない wiki のバックアップは、推測にすぎません。BookStack では、mysqldump と /config ボリュームが対象です。Wiki.js と Outline では、pg_dump とデータボリュームが対象です。さらに Outline では、FILE_STORAGE_LOCAL_ROOT_DIR に格納されているデータも対象になります。

FAQ

最も簡単にインストールできる self-hosted wiki はどれですか?

BookStack です。MySQL データベースを使用する単一の PHP アプリケーションで、Ubuntu 24.04 用のインストールスクリプトがプロジェクトから提供されています。このスクリプトを 1 回実行するだけで、Apache、MySQL 8.0、PHP 8.3 が構成されます。コンテナイメージに必要なのは APP_KEY とデータベースの認証情報だけです。Wiki.js では Node runtime と PostgreSQL サーバーも必要です。Outline では、それに加えて Redis と外部の identity provider が必要になります。

Google や別の SSO provider なしで Outline を使用できますか?

いいえ。Outline にはローカルの username と password によるログイン機能がありません。サンプル設定には、少なくとも 1 つの third party sign-in provider が必要であり、指定しなければサインイン手段が一切なくなると記載されています。Google、Slack、Microsoft Entra、Discord、または self-hosted Keycloak や Authentik などの汎用的な OpenID Connect サーバーを使用できます。その provider の運用も Outline の運用コストに含まれます。

Wiki.js 3 と Wiki.js 2 のどちらをインストールすべきですか?

Version 2 です。2026 年 10 月時点で、Version 2 の最新リリースは 2026 年 10 月の 2.5.316 です。Version 3 はまだ beta で、イメージには 3.0.0-beta tag が付いています。実行中の instance で major version を変更するとデータベース schema が変わるため、イメージは latest ではなく ghcr.io/requarks/wiki:2 に固定してください。

最も優れた検索機能を持つのはどれですか?

それぞれ異なる点に強みがあります。BookStack では、完全一致フレーズを指定できる query language、[location=london] のような tag filter、{created_after:2016-12-30} のような metadata filter を使用できます。これらの語句は、先頭に - を付けて除外することもできます。Outline は設定不要で、アップロードしたファイル内のテキストも検索します。Wiki.js は検索 engine を選択できるため、最も細かく調整できます。wiki が数百ページを超えたら、PostgreSQL engine への切り替えを検討する価値があります。

後から別の製品へコンテンツを移行できますか?

一部は可能ですが、手作業が必要になると考えてください。3 つとも Markdown の export と import に対応しているため、ページ本文は通常維持されます。ただし、構造はきれいには移行されません。BookStack の books と chapters に相当する構造は Outline の nested documents にはなく、Wiki.js の paths も BookStack の固定階層には対応しません。失われやすいのは attachments、permissions、page history です。移行を決定する前にサンプルを export し、これらが維持されることを確認してください。

この記事は役に立ちましたか?

#bookstack#wikijs#outline#wiki#self-hosting#knowledge-base