メモ探しは沼になりますね。そんな中で見かけたのが「NoteDiscovery」。シンプルな見た目ながら、Markdownでナレッジベースを作成出来るセルフホスト可能なメモアプリで、プラグインによる拡張も出来るそうです。メモ単位でmdファイルとして保存されるのは大きなポイントですね。バックアップやいざという時のリカバリーが便利です。

Docker環境でセットアップ
bash <(curl -fsSL https://raw.githubusercontent.com/gamosoft/notediscovery/main/docker-compose.ghcr.yml 2>/dev/null || true) 2>/dev/null; \
sudo bash -c '
set -e
INSTALL_DIR="/opt/docker/notediscovery"
echo "=== NoteDiscovery セットアップ開始 ==="
# Dockerがなければインストール
if ! command -v docker &>/dev/null; then
echo "[1/4] Docker をインストール中..."
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
else
echo "[1/4] Docker は導入済み"
fi
# フォルダ作成
echo "[2/4] ディレクトリ作成: $INSTALL_DIR"
mkdir -p "$INSTALL_DIR/data"
# docker-compose.yml 生成
echo "[3/4] docker-compose.yml 作成中..."
cat > "$INSTALL_DIR/docker-compose.yml" << '"'"'EOF'"'"'
services:
notediscovery:
image: ghcr.io/gamosoft/notediscovery:latest
container_name: notediscovery
ports:
- "8000:8000"
volumes:
- ./data:/app/data
restart: unless-stopped
environment:
- TZ=Asia/Tokyo
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('"'"'http://localhost:8000/health'"'"')"]
interval: 60s
timeout: 3s
retries: 3
start_period: 5s
EOF
# 起動
echo "[4/4] コンテナ起動中..."
cd "$INSTALL_DIR"
docker compose pull
docker compose up -d
echo ""
echo "✅ NoteDiscovery の導入完了!"
echo " URL: http://$(hostname -I | awk '"'"'{print $1}'"'"'):8000"
echo " データ: $INSTALL_DIR/data"
echo " 管理: cd $INSTALL_DIR && docker compose [up -d / down / logs -f]"
'
シンプルなコピペバージョン
上記は長くて煩雑なので、短くしたバージョンです。
sudo bash -c 'set -e; D=/opt/docker/notediscovery; command -v docker &>/dev/null || { curl -fsSL https://get.docker.com | sh && systemctl enable --now docker; }; mkdir -p "$D/data"; cat > "$D/docker-compose.yml" <<'"'"'EOF'"'"'
services:
notediscovery:
image: ghcr.io/gamosoft/notediscovery:latest
container_name: notediscovery
ports:
- "8000:8000"
volumes:
- ./data:/app/data
restart: unless-stopped
environment:
- TZ=Asia/Tokyo
healthcheck:
test: ["CMD","python","-c","import urllib.request; urllib.request.urlopen('"'"'http://localhost:8000/health'"'"')"]
interval: 60s
timeout: 3s
retries: 3
start_period: 5s
EOF
cd "$D" && docker compose pull && docker compose up -d && echo "✅ 完了: http://$(hostname -I | awk '"'"'{print $1}'"'"'):8000"'
コマンドの内容は下記です。
| ステップ | 内容 |
|---|---|
| Docker未導入なら | get.docker.com から自動インストール |
| フォルダ作成 | /opt/docker/notediscovery/ と data/ サブフォルダ |
| compose作成 | TZを Asia/Tokyo に設定済みのファイルを生成 |
| 起動 | docker compose pull && up -d |
| 完了表示 | アクセス先URLを表示 |
おもな管理コマンドは下記です。
cd /opt/docker/notediscovery
docker compose logs -f # ログ確認
docker compose down # 停止
docker compose pull && docker compose up -d # 更新
テンプレートを作成
_templatesフォルダを作成してその中にテンプレートを保存すれば、ノート作成時に利用できます。たとえば下記のようなテンプレートを作成すれば、月単位のタグが表示されて便利かも。
---
tags:
- {{year}}年{{month}}月
- 未分類
created: {{datetime}}
---


パスワードを設定する
デフォルトではパスワードは何もありません。LAN内だけで使用するなら問題ありませんが、認証を有効にしたい場合は、docker-compose.yml の environment に以下を追記するだけです。
sudo nano /opt/docker/notediscovery/docker-compose.yml
environment:
- TZ=Asia/Tokyo
- AUTHENTICATION_ENABLED=true
- AUTHENTICATION_PASSWORD=任意のパスワード
- AUTHENTICATION_SECRET_KEY=ランダムな文字列
SECRET_KEY はこのコマンドで生成できます:
docker exec notediscovery python -c "import secrets; print(secrets.token_hex(32))"
修正したら再起動します。
cd /opt/docker/notediscovery && docker compose up -d
ローカルネットワーク内だけで使うなら認証なしでも問題ありませんが、インターネットに公開する場合はnginxなどのリバースプロキシ+HTTPS推奨です。
