シンプルで軽量なメモ「NoteDiscovery」

メモ探しは沼になりますね。そんな中で見かけたのが「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.ymlenvironment に以下を追記するだけです。

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推奨です。