Google Keepはやめよう:DockerでMemosをセルフホストして、高速でプライベートなHomeLabを構築

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

現代のメモ作成における課題

多くの人はGoogle KeepやNotionから使い始めます。これらは確かに便利ですが、大きな妥協も伴います。Google Keepは高速ですが、構造化に欠け、データは独自のクローズドな環境に閉じ込められます。Notionは多機能ですが、動作が重く感じることが多々あります。買い物リストやターミナルコマンドを書き留めるためだけに、ワークスペースの読み込みに4秒も待たされるのはストレスが溜まる体験です。HomeLab愛好家にとっての目標はシンプルです。自分のデータを完全に所有し、レイテンシ(遅延)を排除することです。

私は数ヶ月かけて、ツイートのように素早く書き込めて、ローカルのテキストファイルのようにプライベートな、ちょうど中間にあるツールを探していました。そこで出会ったのがMemosです。これはオープンソースのセルフホスト型ハブで、軽量なSQLiteデータベース上で動作します。自分の環境で1年以上運用していますが、今ではコードスニペットや会議のメモ、ふとした思考を書き留める主要な場所になっています。

ワークフローにおけるMemosの立ち位置

なぜMemosが効果的なのかを理解するには、情報の分類方法に注目する必要があります。ほとんどのツールは、「アーキテクト(建築家)型」「付箋型」「ストリーム(流れ)型」の3つに分類されます。

アーキテクト型 (Notion, Obsidian)

これらは構造化された知識のためのものです。Obsidianは長文の執筆には最高ですが、ファイルの同期設定が必要です。Notionは本格的なデータベースです。しかし、Dockerのポート番号を保存するためだけにNotionを開くのは、数メートル移動するためだけに大型のディーゼルエンジンを始動させるようなものです。

付箋型 (Google Keep)

速度の面では、KeepがMemosに最も近いです。シンプルなカード形式のレイアウトを採用しています。欠点は何でしょうか?データがGoogleのサーバー上にあること、およびMarkdownがサポートされていないことです。開発者にとって、シンタックスハイライトなしでコードを書くのは致命的です。

ストリーム型 (Memos)

Memosは「マイクロブログ」の哲学を採用しています。自分専用の非公開Twitterタイムラインを持っているような感覚です。思考を入力して保存を押すと、時系列のストリームに追加されます。標準でMarkdownをサポートし、タグで整理でき、自前のローカルハードウェアで動作するため瞬時に反応します。

Memosをセルフホストすべき理由(とすべきでない理由)

完璧なツールなど存在しません。Memosを毎日使ってみてわかった現実を伝えます。

メリット

  • データの主権: メモは自分のSSDに保存されます。サードパーティのAIが、次期モデルの学習のためにあなたのプライベートな思考をスキャンすることはありません。
  • 極めて少ないリソース消費: Dockerイメージは約40MBです。実行中のRAM消費量は通常50MB未満です。これはRaspberry Piや月額5ドルのVPSにとって理想的な候補です。
  • ネイティブMarkdown対応: コードブロック、チェックリスト、太字などを完璧に処理します。
  • 強力なREST API: シンプルなHTTPリクエストを使って Memosにメモを投稿できます。私はこれを利用して、サーバースクリプトからのログを直接タイムラインに自動送信しています。

妥協点

  • 複雑なデータベース機能はない: リレーショナルテーブルやNotionスタイルのプロパティが必要な場合、Memosはシンプルすぎると感じるでしょう。
  • バックアップの責任: あなたがシステム管理者です。ドライブが故障し、memos_prod.dbファイルのバックアップを取っていなければ、メモは消えてしまいます。
  • 接続性: 外出先で同期するには、TailscaleのようなVPNやリバースプロキシを介して自宅ネットワークへの安定した接続環境を構築する必要があります。

デプロイガイド

Memosを実行するには、Dockerが最も信頼できる方法です。インストール環境をクリーンに保位、将来の移行もフォルダを移動するだけで済むようになります。

1. 環境の準備

まず、Memos専用のディレクトリを作成します。これにより、SQLiteデータベースをアプリケーションのロジックから分離して管理できます。

mkdir -p ~/homelab/memos
cd ~/homelab/memos

2. Docker Composeの設定

docker-compose.ymlファイルを作成します。標準のdocker runコマンドよりもComposeを推奨するのは、それがスタックの構成ドキュメントとして機能するからです。お好みのエディタを使って、以下を貼り付けてください:

services:
  memos:
    image: neosmemo/memos:latest
    container_name: memos
    restart: always
    ports:
      - 5230:5230
    volumes:
      - ./data:/var/opt/memos
    environment:
      - TZ=Asia/Tokyo

ここでの設定内容: ポート5230をマッピングし、./dataフォルダに永続ボリュームを作成しています。これにより、Memosコンテナをアップデートしても、メモが消失することはありません。

3. サービスの起動

コマンド一つでコンテナを起動します:

docker compose up -d

docker psと入力して、正しく動作しているか確認してください。Memosコンテナが「Up」と表示されていれば成功です。

本番環境への最適化

アプリをインストールするのは半分に過ぎません。生活の一部として定着させるには、セキュリティと自動化が必要です。

外部アクセスとSSL

ポート5230を直接インターネットに公開してはいけません。代わりに、Cloudflare TunnelsやNginx Proxy Managerのようなリバースプロキシを使用してください。これにより、notes.yourdomain.comのようなドメイン経由で、完全なHTTPS暗号化を用いてメモにアクセスできるようになります。公共のWi-Fiで「Moe Memos」などのモバイルアプリを使用するなら、これは必須です。

自動バックアップ

Memosは単一のSQLiteファイルに依存しているため、バックアップは非常に簡単です。シンプルなcronジョブを設定して、毎晩午前2時にデータベースをNASやクラウドストレージにコピーするようにしましょう。crontabに記述する例を以下に示します:

0 2 * * * cp ~/homelab/memos/data/memos_prod.db ~/backups/memos_$(date +%F).db

ターミナル連携

APIこそがMemosの真骨頂です。ユーザー設定でアクセスートークンを生成すれば、ターミナルから直接思考を送信できます。ブラウザを開くことさえせずにアイデアを保存するには、このcurlコマンドを使用します:

curl -X POST "https://your-memos-url/api/v1/memos" \
     -H "Authorization: Bearer 自分のトークン" \
     -H "Content-Type: application/json" \
     -d '{"content": "新しいDockerのドキュメントをチェックすること。 #調査"}'

結論

Memosは「第二の脳」や企業向けWikiを目指しているわけではありません。邪魔をしないデジタルスクラッチパッド(メモ帳)です。自分でホストすることで、クラウドプロバイダーでは決して実現できないスピードとプライバシーを手に入れることができます。機能過多なソフトウェアに疲れを感じている人にとって、これは一服の清涼剤となるでしょう。

Share: