セルフホスト型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 年 7 月時点の文書化された要件は、PHP 8.2 以降、および MySQL 8.0 または MariaDB 10.6 以降です。ソースからインストールする場合は、Composer 2.2 以降も必要です。現在のリリース系列は 26.05 です。
プロジェクトは、Ubuntu の各リリース向けにインストールスクリプトを 1 つずつ公開しています。24.04 用のスクリプトは、Apache、MySQL 8.0、PHP 8.3 を自動的にインストールします。
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実行する前に、そのスクリプトの警告を読んでください。文書には、「新規インストールした OS 専用です。Apache、MySQL 8.0、PHP 8.3 をインストールし、マシン上の既存の Web 環境を上書きする可能性があります」と記載されています。すでに 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-stoppedAPP_URL には、スキームとポートを含め、読者が実際に入力するアドレスを指定する必要があります。http://localhost に設定した後でサイトを HTTPS で提供してください。そうしないと、生成されるリンクとリダイレクトが誤ったホストを指し、読者にはログインページが自分自身へ繰り返し戻るように表示されます。Compose ファイルに慣れていない場合は、この手順の前に VPS での Docker Compose の基本 を確認してください。
起動後は、コンテナが実行中であることだけでなく、アプリケーションが応答することも確認します。
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login200 OK が表示されれば、PHP アプリケーションが起動し、データベースに接続できています。500 が表示される場合、ほとんどの場合は APP_KEY が空であるか、データベースの認証情報が一致していません。docker compose logs bookstack を実行すると、どちらが原因か確認できます。
Wiki.js: 1 つのツリー、複数のエディター
Wiki.js は Node.js アプリケーションです。公式の Docker 構成では PostgreSQL と組み合わせますが、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 年 7 月時点で、Version 2 の最新リリースは 2026 年 5 月公開の 2.5.314 です。Version 3 も存在しますが、その公式ドキュメントには「このサイトは Wiki.js 3.0 の不安定なベータリリース用です。本番環境にはインストールしないでください」と記載されています。:3 タグはプレビュー版として扱ってください。
初回アクセス時、Wiki.js はブラウザー上のセットアップ手順を表示し、管理者アカウントを作成します。セットアップを完了するまで、ポートに到達できる全員にそのウィザードが表示されます。そのため、ファイアウォールを開放する前に、サービスをリバースプロキシと TLS(トランスポート層セキュリティ)の背後に配置してください。サーバーでこのサービス以外にも複数のサービスを運用する場合、専用ホスト名の wiki は 複数の Docker アプリの前段に Traefik を置く構成に自然に組み込めます。
エディターを選べることが、Wiki.js が選ばれる理由です。1 つのインスタンスで、Markdown ページ、ビジュアルエディターページ、raw HTML ページ、AsciiDoc ページを並行して管理できます。変換したくない形式の古いコンテンツを取り込む場合に便利です。一方で、1 つの wiki に 4 種類の独自スタイルが混在することにもなります。そのため、初日にデフォルトエディターを決め、その決定を記録してください。
概要: 最も優れたエディターと、最も重い前提条件
Outline は、商用のノートツールのような使用感を求める人が通常想定する製品です。Node.js アプリケーションであり、2026 年 7 月時点の現行リリースは 1.9.2 です。サンプルの環境ファイルには、DATABASE_URL 経由の PostgreSQL、REDIS_URL 経由の Redis、2 つのランダムな Secret、そして外部から到達可能な 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/dataPGSSLMODE=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、ID プロバイダーです。チームですでに Google Workspace または Microsoft Entra を使ってサインインしている場合、最後の要素の設定は 10 分程度で済み、Outline は非常に魅力的な選択肢になります。そうでない場合は、Keycloak や Authentik なども自分でホスティングする必要があります。これは、パッチ適用とバックアップが必要な 2 つ目のサービスになります。メモリもそれに応じて見積もってください。Outline のガイダンスでは、データベースと Redis に加えて、Web プロセス 1 つあたりおよそ 512 MB が必要であり、値は WEB_CONCURRENCY で設定します。
誰が何を読めるかに関する各製品の扱い
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 エンジンに切り替えてください。データベース独自の全文検索インデックスを使用し、単純な文字列一致より効率的に検索できるためです。Elasticsearch は、別の検索サービスを運用し、パッチを適用することを受け入れられる規模の wiki に限定してください。
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 server を使用できます。その provider の運用も、Outline の運用コストに含まれます。
Wiki.js 3 と Wiki.js 2 のどちらをインストールすべきですか?
Version 2 です。2026 年 7 月時点で、Version 2 の最新リリースは 2026 年 5 月に公開された 2.5.314 です。Version 3 のドキュメントには、本番環境にはインストールすべきでない不安定な beta 版であると明記されています。イメージは latest ではなく ghcr.io/requarks/wiki:2 に固定してください。major version の変更により、稼働中の instance のデータベース schema が変更されるためです。
検索機能が最も優れているのはどれですか?
それぞれ異なる点で優れています。BookStack では、完全一致フレーズを指定できる query language、[location=london] のような tag filter、{created_after:2016-12-30} のような metadata filter を利用できます。これらの語句には、先頭に - を付けて否定を指定できます。Outline は設定不要で、アップロードしたファイル内のテキストを検索できます。Wiki.js は検索 engine を選択できるため、最も細かく調整できます。wiki が数百ページを超えたら、PostgreSQL engine への切り替えを検討する価値があります。
後から別の wiki にコンテンツを移行できますか?
一部は可能ですが、手作業が必要になると考えてください。3 つとも Markdown の export と import に対応しているため、ページ本文は通常維持されます。構造は正確には維持されません。BookStack の books と chapters に対応する構造は、Outline の入れ子になった documents にはありません。また、Wiki.js の paths は BookStack の固定階層に対応しません。失われやすいのは attachments、permissions、page history です。移行を決定する前に、サンプルを export してこれらを確認してください。