【2026年版】社内Wikiの検索を爆速化!VPS上にMeilisearchなどの検索エンジンをホストする
【最初に結論】自分ならMeilisearch一択、VPSは月1,000円台で十分
はっきり書いておきます。
- 検索エンジン選び → Meilisearch。Elasticsearchは最初に選ばなくていい
- VPSスペック → 2GBプランでスタート。月830〜1,500円の固定料金で管理がラク
- SaaS(Algolia)との比較 → 月$500〜かかるAlgoliaと体験はほぼ同じ。VPS代だけで済む
- GPU → この用途に完全に不要。GPU付きVPSを勧めてくる記事があったら広告費目的を疑っていい
「社内Wikiで検索しても欲しい情報が出てこない」「NotionやConfluenceの検索が遅くてイライラする」——この悩み、自分も通ってきた道です。結論から言うと、VPS上にMeilisearchを置くだけでインスタント検索(打った瞬間に結果が返る)が実現します。しかもセットアップは5分で終わる。
「本当に5分で終わるの?」と思うのは当然なので、以下で実際の手順をそのまま書きます。
Meilisearchとは?
Meilisearchは2019年創業のフランス発のオープンソース全文検索エンジンです。Rust製でレスポンスが50ms以下、タイポに強い(ファジーマッチ)、日本語対応済み、セットアップが驚くほど簡単という特徴があります。
ぶっちゃけ、「Rust製だから速い」「フランス発だから」みたいな話はどうでもよくて、「Dockerで1コマンド起動して、JSONを投げたら検索できる」 この手軽さが最大の理由です。Elasticsearchみたいに設定ファイルと格闘しなくていい。「なんかよくわからないけど動いた」で十分なんです、最初は。
主要検索エンジンの比較
| 項目 | Meilisearch | Elasticsearch | Typesense | Algolia(SaaS) |
|---|---|---|---|---|
| セットアップの簡単さ | ◎ | △(設定複雑) | ◎ | ◎(SaaS) |
| レスポンス速度 | ◎(~50ms) | ○(100ms〜) | ◎(~50ms) | ◎(CDN活用) |
| RAM消費 | ○ | △(重い) | ○ | —(SaaS) |
| 日本語対応 | ◎(組み込み) | ○(プラグイン要) | ○(設定要) | ◎ |
| タイポ耐性 | ◎ | ○ | ◎ | ◎ |
| 月額コスト | VPS代のみ | VPS代のみ | VPS代のみ | $0〜$500+ |
| ライセンス | SSPL(セルフホスト可) | SSPL | GPL-3.0 | プロプライエタリ |
自分の判断基準を本音を言えば、:
社内Wiki用途なら、最初からElasticsearchを選ぶ理由はほぼないです。「なんとなく名前を聞いたことがあるから」でElasticsearchを選んで、設定の複雑さと4GB以上のRAM消費に挫折するのがよくあるパターン。自分も一度そのルートで時間を無駄にしました。
MeilisearchかTypesenseで動くものをまず作って、「これでは足りない」という具体的な理由が出てきたときに初めてElasticsearchを検討すれば十分です。99%のケースでその理由は出てこないと思いますが。
Algoliaは使い勝手は最高ですが、ドキュメントが増えると月$500〜余裕で超えます。1ドル150円換算で月7万5,000円。VPS月830円と比べると別次元のコストです。「お金で解決したい」という人以外には勧めません。
VPS環境でのMeilisearchセットアップ
推奨スペック(正直ベースの話)
| ドキュメント数 | RAM | ストレージ |
|---|---|---|
| 〜10万件 | 2GB | 10GB |
| 〜100万件 | 4〜8GB | 50GB |
| 100万件〜 | 16GB以上 | 100GB以上 |
自分の場合、社内WikiやMarkdownファイルの全文検索なら2GBプランで余裕でした。XServerVPSの2GBプランは830円/月(固定)。「毎月いくらかかるか計算したくない」人には固定料金のほうが精神的にラクです。ConoHaは時間課金もありますが、検索サーバーは常時起動するものなので月76時間を超えたあたりからXServerの固定プランのほうが安くなる。後で詳しく書きます。
はっきり言っておきます。この用途にGPU付きVPSは不要です。 MeilisearchはAI推論エンジンではなく全文検索エンジンです。GPU推しの記事を見かけたらアフィリエイト報酬目的の可能性を疑っていい。真剣に言っています。
Dockerで起動(最短5分)
# Meilisearch用ディレクトリ作成
mkdir -p /opt/meilisearch/data
# docker-compose.yml作成
cat > /opt/meilisearch/compose.yml << 'EOF'
services:
meilisearch:
image: getmeili/meilisearch:latest
container_name: meilisearch
ports:
- "7700:7700"
environment:
- MEILI_MASTER_KEY=your_secure_master_key_here
- MEILI_ENV=production
volumes:
- ./data:/meili_data
restart: unless-stopped
EOF
# 起動
cd /opt/meilisearch && docker compose up -d
# 動作確認
curl http://localhost:7700/health
# {"status":"available"}
「最短5分」と書きましたが、自分が実際にやって5分かかりませんでした。Dockerさえ入っていれば本当にこれだけです。{"status":"available"} が返ってきた瞬間に「あ、動いてる」ってなります。
nginxでHTTPS化(推奨)
# /etc/nginx/sites-available/meilisearch
server {
listen 443 ssl;
server_name search.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/search.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/search.yourdomain.com/privkey.pem;
location / {
proxy_pass http://localhost:7700;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# APIキー認証のため、Masterキーは公開しない
# フロントエンドにはSearch-only APIキーを発行して渡す
}
}
HTTPS化はやっておいたほうがいいです。「どうせ社内ツールだから」「イントラだから」でHTTPのまま放置して後で詰まるパターンを何度か見てきたので。Let’s Encryptで無料で入るので面倒くさがらずにやっておきましょう。5分もかからないです。
ドキュメントのインデックス化
APIでドキュメントを登録する
# インデックス作成
curl -X POST 'http://localhost:7700/indexes' \
-H 'Authorization: Bearer your_secure_master_key_here' \
-H 'Content-Type: application/json' \
--data-binary '{
"uid": "wiki",
"primaryKey": "id"
}'
# ドキュメントをバルク追加(JSON配列)
curl -X POST 'http://localhost:7700/indexes/wiki/documents' \
-H 'Authorization: Bearer your_secure_master_key_here' \
-H 'Content-Type: application/json' \
--data-binary '[
{
"id": 1,
"title": "VPSの選び方",
"content": "VPSを選ぶ際は、メモリ・CPU・ストレージのバランスを考えます...",
"category": "インフラ",
"updated_at": "2026-07-16"
},
{
"id": 2,
"title": "Docker入門",
"content": "Dockerはコンテナ型仮想化技術です...",
"category": "開発",
"updated_at": "2026-07-15"
}
]'
Pythonスクリプトで既存Wikiをインデックス化
import meilisearch
import json
import glob
client = meilisearch.Client(
'http://localhost:7700',
'your_secure_master_key_here'
)
index = client.index('wiki')
# Markdownファイルを一括インデックス化
documents = []
for i, filepath in enumerate(glob.glob('/opt/wiki/**/*.md', recursive=True)):
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
# ファイル名からタイトル抽出
title = filepath.split('/')[-1].replace('.md', '').replace('-', ' ')
documents.append({
'id': i + 1,
'title': title,
'content': content[:5000], # 先頭5000文字
'path': filepath,
})
# バルク追加(タスクIDを返す)
task = index.add_documents(documents)
print(f"Task ID: {task.task_uid} — インデックス化を実行中...")
このスクリプト、自分の場合はMarkdownファイル500件くらいで試して1分かかりませんでした。content[:5000] で先頭5000文字に絞っているのは、全文を突っ込むとRAMを無駄に食うからです。検索用途なら冒頭で十分。「全文インデックスしないと引っかからないケースがある」という反論はわかりますが、まず動かしてから問題が出たら考えればいい。
検索APIの使い方
# 基本検索
curl -X POST 'http://localhost:7700/indexes/wiki/search' \
-H 'Authorization: Bearer SEARCH_ONLY_API_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{
"q": "Docker VPS 環境構築",
"limit": 10,
"attributesToHighlight": ["title", "content"]
}'
# フィルタリング検索(カテゴリ絞り込み)
curl -X POST 'http://localhost:7700/indexes/wiki/search' \
-H 'Authorization: Bearer SEARCH_ONLY_API_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{
"q": "セキュリティ",
"filter": "category = インフラ",
"sort": ["updated_at:desc"],
"limit": 5
}'
フロントエンドへの組み込み(JavaScript)
import { MeiliSearch } from 'meilisearch'
const client = new MeiliSearch({
host: 'https://search.yourdomain.com',
apiKey: 'SEARCH_ONLY_API_KEY' // 読み取り専用キーのみ公開
})
async function searchWiki(query) {
const result = await client.index('wiki').search(query, {
limit: 10,
attributesToHighlight: ['title', 'content'],
highlightPreTag: '<mark>',
highlightPostTag: '</mark>'
})
return result.hits
}
SEARCH_ONLY_API_KEY を使う部分、ここを間違えてMasterキーをフロントエンドに直書きしている実装をたまに見かけます。はっきり言って危ないです。MasterキーはサーバーサイドのAPIやインデックス操作専用にして、フロントエンドには検索専用キーだけ渡してください。ここだけは手を抜かないでほしい。
よくある質問(FAQ)
まとめ:あなたの使い方で選ぶ判断テーブル
| あなたの状況 | 判断 | 理由 |
|---|---|---|
| 社内WikiのMarkdownを検索したい(〜10万件) | Meilisearch + VPS 2GB(月830〜1,500円) | RAM 2GBで十分・セットアップ5分 |
| NotionやConfluenceの検索に不満がある | Meilisearch + Notion API連携 | 既存ツールを捨てなくていい。検索だけ外出し |
| ログ分析やアグリゲーションが必要 | Elasticsearch(移行前提で) | Meilisearchでは本格的なログ分析は辛い |
| とにかくすぐ使いたい、お金で解決する | Algolia | 設定ゼロだが月$500〜は覚悟 |
| 月のコストを固定したい | XServer VPS(830円/月 固定) | 毎月計算しなくていいのが精神的にラク |
| まず試してみたい、コスト最小で | ConoHa VPS(時間課金) | 動作確認だけなら数円で済む |
| 「GPU付きVPSにしたほうがいい」という記事を見た | 無視していい | 全文検索にGPUは不要。広告報酬目的の可能性が高い |
コスト感の整理(正直ベース)
- XServer VPS 2GBプラン:830円/月(= 1日あたり約27円)固定
- ConoHa VPS 2GBプラン:約2円/時間(= 月換算で約1,488円。月76時間超えるとXServerのほうが安い)
- Algolia:月$500〜(= 1ドル150円換算で月7.5万円〜、1日あたり約2,500円〜)
損益分岐点の話をはっきり言うと、検索サーバーは「使うときだけ立ち上げる」ものではなく常時起動するものです。24時間365日動かすと月720時間。ConoHaの時間課金だと720時間×2円=1,440円。XServerの830円より高くなります。つまり実際にはほぼXServerの固定プラン一択になる。「まず試したい」段階だけConoHaで、動作確認できたらXServerに移行するのが一番無駄がない流れです。
あと、「VPSを使わずに自分のPC立ち上げっぱなしで代替しよう」という発想はやめたほうがいいです。何かあったときにリモートデスクトップで入らないといけないから全然手放しにならないし、精神的に気になり続ける。月830円でそのストレスから解放されるなら安いです。
これが最終回答じゃないんだから、まず2GBプランのVPSでDockerを起動してみてください。うまくいかなかったらそのときに考えればいい。「やってみたい」と思ったなら、その気持ちのまま動いたほうがいい。
XServer VPSでMeilisearchを今すぐ始める →![]()