セルフホストWiki比較:BookStack, Wiki.js, Outlineどれを選ぶ?
BookStack、Wiki.js、Outlineの3つを比較。構築の難易度、エディタの操作感、ログイン認証の仕様を解説します。ソロ運用からチーム開発まで、用途に最適なWikiの選び方を、各ツールの構造的な違いに基づき具体的に紹介します。
どのセルフホスト型Wikiを運用すべきか
セルフホスト型のWikiは、チームのドキュメントを管理下にあるサーバー上の検索可能な場所に集約します。BookStack、Wiki.js、Outlineはいずれもその役割を果たします。これらの主な違いは、最初のページを読み込むまでに必要な構築の手間と、ログイン可能なユーザーの制限にあります。
BookStackは構築が最も軽量で、構造に関する独自の設計思想が強く反映されています。Wiki.jsは、単一のページツリーに対して最も幅広いエディタの選択肢を提供します。Outlineは3つの中で最も優れた執筆体験を提供しますが、外部のIDプロバイダーを接続するまでユーザーのサインインを許可しません。
以下はすべて、各プロジェクトの公式ドキュメントおよび公開されている設定ファイルに基づいています。これは機能比較であり、ベンチマークではありません。バージョン番号と要件には日付が記載されていますが、これは3つのプロジェクトすべてが頻繁に更新されるためです。
構造こそが真の選択
BookStackはコンテンツの形式を固定します。ページはブックの中に存在し、ブックはチャプターを保持でき、シェルフはブックをグループ化します。5番目の階層を作成することはできません。この制限こそが本製品の特長です。ページを配置すべき場所が一つしかないため、新しい執筆者でも迷うことがありません。その代償として、この形式に適合しないコンテンツは無理やり当てはめる必要があります。
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をインストールしてください。
コンテナを使用する場合は、BookStackのドキュメントでも推奨されているLinuxServer.ioのイメージを利用します。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:単一ツリー、複数のエディタ
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は認証情報としてセットであるため、実行前に両方を変更してください。サンプル値は公開されているためです。タグは意図的にghcr.io/requarks/wiki:2に固定されています。メジャーバージョンの更新は実行中のインスタンスのデータベーススキーマを変更するため、ドキュメントではlatestの使用を推奨していません。
実行すべきはバージョン2の系列です。2026年7月現在、最新のバージョン2リリースは2026年5月公開の2.5.314です。バージョン3も存在しますが、そのドキュメントには「このサイトはWiki.js 3.0の不安定なベータリリース用です。本番環境にはインストールしないでください」と記載されています。:3タグはプレビューとして扱ってください。
初回起動時、Wiki.jsはブラウザベースのセットアップウィザードを表示し、管理者アカウントを作成します。完了するまではポートにアクセスした誰でもウィザードを利用できてしまいます。ファイアウォールを開放する前に、必ずリバースプロキシとTLS(トランスポート層セキュリティ)の背後にサービスを配置してください。サーバーで複数のサービスを運用する場合、Wikiを独自のホスト名で運用し、複数のDockerアプリの前面に配置するTraefikの背後に置くのが自然です。
Wiki.jsが選ばれる理由はエディタの選択肢にあります。1つのインスタンス内でMarkdownページ、ビジュアルエディタページ、生のHTMLページ、AsciiDocページを混在させることが可能です。これは、変換したくない形式の古いコンテンツをインポートする際に役立ちます。一方で、1つのWiki内に4つのスタイルが混在する原因にもなるため、デフォルトのエディタを初日に決定し、その方針を記録しておいてください。
Outline:最高のエディタ、重厚な前提条件
Outlineは、商用ノートツールのような使用感を求めるユーザーが一般的に指すアプリケーションです。Node.jsで構築されており、2026年7月時点の最新リリースは 1.9.2 です。サンプル環境ファイルには必要なコンポーネントが記載されています。DATABASE_URL を介した PostgreSQL、REDIS_URL を介した Redis、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/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、そしてアイデンティティプロバイダーの合計となります。チームがすでに Google Workspace や Microsoft Entra でサインインしている場合、最後のピースを埋める作業は10分程度で済み、Outlineは非常に魅力的な選択肢となります。そうでない場合は、KeycloakやAuthentikのようなサービスを自前でホストする必要があり、パッチ適用やバックアップの対象がもう1つ増えることになります。メモリ予算はそれに応じて確保してください。Outlineのガイドラインでは、データベースと Redis とは別に、WEB_CONCURRENCY で設定されるウェブプロセスあたり約 512 MB のメモリが必要とされています。
各製品における閲覧権限の管理方法
BookStackは標準でローカルのメールアドレスとパスワードによるアカウント管理に対応しており、代替手段としてLDAP、SAML2、OIDCもサポートしています。権限はロールごとに設定され、個別のシェルフ、ブック、チャプター、ページ単位で上書き可能です。階層構造が固定されているため、権限は予測可能な形で下位へ継承されます。
Wiki.jsもローカルアカウント機能を備えており、管理画面で有効化できる多数の認証戦略を追加可能です。ページルールはパスパターンに基づいてアクセスを許可または拒否します。これは強力ですが設定ミスを招きやすく、ops/* に対して記述したルールは、後からそのパス配下に作成したすべてのページにも自動的に適用されます。
Outlineは認証を完全に外部へ委譲します。メンバーシップはIDプロバイダーに準拠し、Outline内部ではコレクションおよびグループ単位でアクセスを制御します。退職時にローカルアカウントが残ることはなく、IDプロバイダーをアカウント削除の起点としている環境では大きな利点となります。
各ツールの検索機能の仕組み
検索機能は、Wikiが有用なツールとして定着するか、忘れ去られたファイルの集積所になるかを分ける重要な要素です。
BookStackはデータベースを検索対象とし、短時間で習得可能なクエリ言語を提供します。"london meeting"のようにフレーズを引用符で囲むと、その文字列と完全に一致する結果を返します。角括弧はタグ検索に使用します。[location=london]はタグ名、値、またはその両方で一致を検索し、!=、>=、likeなどの比較演算子を利用できます。波括弧は{created_after:2016-12-30}のようにメタデータによるフィルタリングを行います。完全一致、タグ、フィルタの各条件は、先頭に-を付けることで否定検索が可能です。BookStackは1つのクエリに含まれる各項目の数に上限を設けており、非常に長いクエリは実行されずに切り詰められます。
Wiki.jsは検索機能をプラグイン可能なモジュールとして扱います。公式にサポートされているエンジンには、標準のデータベースエンジン、PostgreSQLエンジン、Elasticsearch、Algolia、AWS CloudSearch、Azure Searchがあります。標準エンジンは数百ページ程度の規模であれば十分です。PostgreSQLを使用している場合は、管理画面からPostgreSQLエンジンに切り替えてください。単純な文字列一致ではなく、データベース独自の全文検索インデックスを利用するためです。Elasticsearchは、2つ目の検索サービスを運用・保守する手間を許容できるほど大規模なWikiでのみ使用してください。
OutlineはPostgreSQLの全文検索インデックスを検索します。選択可能なエンジンや調整項目はなく、アップロードされたドキュメント内のテキストも検索対象となります。数千件程度のドキュメントを扱うチームWikiであれば、これら3つの中で最も運用負荷が低い選択肢です。ただし、検索速度が低下した場合に調整する手段は提供されていません。
どのツールを選ぶべきか
午後のうちにWikiを稼働させたい場合や、構造よりもコンテンツの議論に時間を割きたい場合は、BookStackを選んでください。BookStackは構成要素が最も少なく、PHPアプリケーション1つとMySQLデータベース1つで動作します。社内の手順書や顧客向けドキュメントに適しており、エンジニア以外のメンバーが執筆するチームにも向いています。また、データベースのダンプファイルとアップロード用ディレクトリをバックアップするだけで全状態を保存できるため、3つの中で最もバックアップが容易です。
特定のエディタや認証戦略が必要な場合、あるいは既存の大量のMarkdownやAsciiDocをインポートし、パス構造を維持したい場合は、Wiki.jsを選んでください。ただし、より重いスタックを運用することになるため、メジャーバージョンのタグを固定して運用してください。
執筆の品質が最も重要であり、Wikiが公開用ではなくチーム用である場合、かつ既にIDプロバイダーを導入している場合は、Outlineを選んでください。この環境であれば、ユーザーが快適に利用できるエディタという恩恵を受けられます。ただし、初めてのセルフホストアプリケーションとして選ぶのは避けてください。
これら3つが適さない場合、多くはコンテンツの種類が原因です。スキャンした請求書や契約書はWikiではなく Paperless-ngxのようなドキュメント管理システム に保存すべきです。無理にWikiへ詰め込むことが、多くのWikiが放置される原因となります。自身のサーバーで運用するその他のツールについては、2026年版セルフホスト候補リスト を参照してください。
サイズ設定とバックアップ
これら3つはすべて小型のVPSで動作します。現実的な最低要件は、それぞれの背後で何が動作しているかによって異なります。BookStackは1つのアプリケーションプロセスとMySQLで構成されます。Wiki.jsはNodeプロセスとPostgreSQLで構成されます。OutlineはNodeプロセス、PostgreSQL、Redisで構成され、通常はIDプロバイダーも併用するため、より多くのメモリを割り当てる必要があります。
データベースとアップロードデータをまとめてバックアップしてください。バックアップを信頼する前に、一度使い捨てのインスタンスで両方を復元してください。復元テストを行っていないWikiのバックアップは、単なる推測に過ぎません。BookStackの場合、これは mysqldump と /config ボリュームを意味します。Wiki.jsとOutlineの場合は pg_dump とデータボリュームを意味し、さらにOutlineでは FILE_STORAGE_LOCAL_ROOT_DIR にあるデータも対象となります。
FAQ
最も簡単にインストールできるセルフホスト型Wikiはどれですか?
BookStackです。これはMySQLデータベースを使用する単一のPHPアプリケーションであり、プロジェクトはUbuntu 24.04向けのインストールスクリプトを提供しています。これを使用すると、Apache、MySQL 8.0、PHP 8.3を一度の実行でセットアップできます。コンテナイメージに必要なのは APP_KEY とデータベースの認証情報のみです。Wiki.jsにはNodeランタイムとPostgreSQLサーバーが必要であり、OutlineにはさらにRedisと外部のIDプロバイダーが必要になります。
Googleや他のSSOプロバイダーなしでOutlineを使用できますか?
いいえ。Outlineにはローカルのユーザー名とパスワードによるログイン機能がありません。サンプル設定には、少なくとも1つのサードパーティ製サインインプロバイダーが必要であると明記されており、それがないとサインインの選択肢が一切なくなります。Google、Slack、Microsoft Entra、Discord、またはセルフホスト型のKeycloakやAuthentikといった汎用的なOpenID Connectサーバーを使用できます。そのプロバイダーを運用することも、Outlineを運用するコストの一部です。
Wiki.js 3とWiki.js 2のどちらをインストールすべきですか?
バージョン2です。2026年7月現在、最新のバージョン2のリリースは2026年5月公開の2.5.314です。バージョン3のドキュメントには、それが本番環境にインストールすべきではない不安定なベータ版であると明記されています。イメージは latest ではなく ghcr.io/requarks/wiki:2 に固定してください。メジャーバージョンの変更は、実行中のインスタンスのデータベーススキーマを変更するためです。
検索機能が最も優れているのはどれですか?
それぞれ異なる強みがあります。BookStackは、完全一致フレーズ、[location=london] などのタグフィルター、{created_after:2016-12-30} などのメタデータフィルターを備えたクエリ言語をユーザーに提供します。これらの用語は、先頭に - を付けることで否定検索が可能です。Outlineは設定が不要で、アップロードされたファイル内のテキストも検索対象となります。Wiki.jsは最も調整の幅が広く、検索エンジンを選択可能です。Wikiの規模が数百ページを超えたら、PostgreSQLエンジンへの切り替えを推奨します。
後からコンテンツを別のWikiへ移行できますか?
部分的には可能ですが、手作業が発生することを想定してください。3つともMarkdownのエクスポートとインポートに対応しているため、ページテキストは通常保持されます。構造は完全には引き継がれません。BookStackの「本」や「章」はOutlineのネストされたドキュメントには対応しておらず、Wiki.jsのパスはBookStackの固定階層にはマッピングされません。添付ファイル、権限、ページ履歴は失われる可能性が最も高いため、移行を決定する前にサンプルをエクスポートして確認してください。