見出し画像

Evernote代替セルフホストならObsidianよりいいアプリがある


EvernoteはAIを搭載し高額になりました

Evernoteでたびたび問題になるのは性能面より価格面でありました。嫌味ですが私はリッチマンでEvernote信者なのでいまだにEvernoteを使う余裕がありますが、リッチマンのためのアプリになってしまった感は否めません。

特に日本のアプリストアの売り上げの傾向を見ると、海外に比べてゲームとマッチングアプリの売り上げの比率が高く、実用的なアプリへの出費は控えめであり、ノートアプリに高額な投資をするのは、日本人の国民性的に受け入れられないものがあるのだと思います。

海外でも別に不満を持っている人がいないわけではありません。Evernoteの公式Youtubeは基本的に真に利用している人しか閲覧しませんが、それでも価格が高いというコメントが英語で上がっていたりします。そもそも、Youtubeでは新機能について説明する一方で、価格に関して一切触れないスタイルをとっていて、不信を買っています。

とは言っても、競合他社と同等の機能を使う場合で比べて、そこまで高いかというと、幾分安いか、同程度なのですが、EvernoteはNotionのようなフリープランがないので、割高にみられてしまうようです。

私個人としては、AI機能を使うことができない格安プランが中間にあってもよかったのではないかと思いますが、たくさんお金を落としてくれる人を大事にして、ケチなユーザーを切ることで逆に収益性が改善されるタイプのサービスなので、またそれも嫌われる要因の一つかもしれません。

現状Evernoteを使いたいという気持ちがあっても、家庭を持ってお子さんがいるお小遣い制の人には厳しい出費になるのではないでしょうか。

私はいつでもEvernoteを推してきましたし、これからも使い続けますが、Evernoteを使ったことがない他人に気軽にお勧めできるものではないように思えてきました。

そこでみんなUpnoteやObsidianに逃げていますが...

Obsidianについて

Evernoteを貶めて、Obsidianをアゲる記事を書くと閲覧数がぐっと伸びます。ですからObsidianをアゲる記事が毎日のように量産されています。

中には最新の事実に基づかない記事もあり、残念な気持ちになります。そういう人は本当はEvernoteを大して使っていないのでしょう。だって、ちゃんと使っていたらそんな誤認をするはずがありませんから。

ですから、Obsidianをアゲる記事を片っ端から信じるのはやめた方がいいと思います。

最近のEvernoteの様子はこちらにまとめてあります。

もう一つ、Obsidianの記事が量産される理由はあって、Obsidianは使い方がかなり難しい部類のアプリなので、HowToを共有していく意味で記事が上がるのだとは思いますが、ビュー稼ぎ感は否めません。

ですから、必ずしもObsidianはEvernoteの代替になりません。ライトユーザーはとりあえず短文が保存できればどちらでもいいと考えるかもしれませんが、ヘビーユーザーほど違和感を感じると思います。

Evernoteを初めて使った時の感動は皆さんはどこにありましたか?私は「同期」と「実質無制限のアップロード量」「100年宣言」にありました。ですが、素のObsidianにはその3つがありません。無料のプラグインでなんとかすることができますが、不安定でアップロードできる量が限られます。特に設定ファイルの同期があやしくて、データが壊れないかヒヤヒヤすると思います。

それに、Evernoteを使ってきた人は、難解なアイディア整理法であるゼッテルカステンとか、オンラインのAIを使ったオフラインファースト設計という矛盾をやりたいわけではないと思うのです。

Upnoteについて

Upnoteは私個人としてはobsidianよりは有力な乗り換え先になるのではないかと思っています。昔のEvernoteをさらにライトユーザー向けにした雰囲気があるからです。

私は昔触ったことがあるという程度なので詳しくないのですが、Upnoteの開発とサポートは2人で全てこなしており、盤石ではありません。

Evernoteから引っ越したのに、今度は属人的な問題でUpnoteが潰れそうで引っ越さなければならない(しかしエクスポート形式がEvernoteよりも限られているので引っ越せない)という、二の舞になる危険性があると思っています。

あとで別の記事を書こうと思っていますが----Evernoteを潰れる潰れるとサゲたがる人には残念な話ですが----皮肉にも値上げをすることによりEvernoteはかなり効率よく儲かっていますので、潰れることはUpnoteよりは考えにくいと思われます。

また安い価格を維持するため、ストレージ逼迫対策として企業努力をしているようであります。

アップロードされた画像は劣化してしまいますし、WEBクリップは完全なWEBクリップではなく、文章以外の画像などはソースから引っ張ってくる手法をとっており、ソースが消えればWEBクリップも消えるという微妙な設計になっています。

新機能の追加は2人では追いつかないらしく、最近流行りのAIとの連携は望み薄でしょう。

簡単に短文が同期できればいいのであれば、無料のGoogleのサービスの方が楽なのではないかという気もしますし、それ以上ヘビーに使おうと思うとEvernote並みの一覧性はないという中途半端な感じもします。

この記事は、Obsidianはなんか違うけどパソコン初心者向けのUpnoteよりはヘビーに使いたい、パソコン中級者以上をターゲットにしてるところはありますので、別にUpnoteを選ぶことについてはこれ以上とやかく言うつもりはありません。

Obsidianより安定して無料で使えるアプリ:Affine

Affineの概要

AffineはNotionとMiroをくっつけた、Notion代替アプリとして紹介されることが多いですが、名前が有名グラフィックツールのAffinityとだいぶ被っており、わかりにくいためか存在がいまいち知られていません。

モバイルはもちろんLinuxにもアプリがあり、WEB版も使用できます。WEBクリッパーもあります。

OSSなので、セルフホストしてしまえば無料で100GBまで利用することができます。100GB?と思ったかもしれません。私は長年かけてEvernoteに画像やPDFを大量にアップロードしてOCRをかけていて、ノートの総数は5,500程度ありますが、それでも推定50GBあるかないかくらいだと思われますので、当面使えるでしょう。

またドキュメントには、将来的に制限を解放予定である旨が記されていますので、無制限になる予定ではあります。

日本語にもきちんと対応していて、サーバーも安定しており、同期は滑らかです。複数人で共有して同時編集することも可能で、AI機能も搭載しています。

Affineに課金する場合の価格

10GBまでのクラウドストレージは無料です。それ以上になると課金プランで$6.75/月となっています。AI利用は$8.9/月かかります。

ソースネクストでも取り扱いがあり、一年版が11,880円、AIも使うと27,500円です。

また信者プランという買い切り制度があり、$500払えば、1TBのストレージを永年使えます。

Affineの機能

機能の概要については先ほどのソースネクストのページが綺麗にまとまっています。

画面構成はこんな感じです
編集画面はEvernoteと違い、ノート一覧は見えません
デイリーノートが簡単に管理できるようになっています
  • テンプレート機能

  • obsidian並みかそれ以上の強力なシンタックスハイライト

  • スラッシュコマンドやマークダウンライクな記法

  • PDFの埋め込みビュー

  • フォルダとタグによる管理

  • 豊富なプロパティ

  • バージョン履歴

  • MCPサーバー

  • ルールによる自動フォルダ分け

など機能盛りだくさんで、ちょっと複雑な画面配置をしているので、慣れるまでは少し時間がかかります。

Affineのセルフホスト

基本的にはdocker composeします。公式のyamlと.envを使えばほとんど設定の必要はなく、問題なく立ち上がると思います。

私はさらにtailscaleのコンテナを組み込みましたので、ここに載せておきます。また公式にはありませんが、環境変数にSELFHOSTED=trueを指定してください。

name: affine
services:
  affine:
    image: ghcr.io/toeverything/affine:${AFFINE_REVISION:-stable}
    container_name: affine_server
    # ports:
    #   - '${PORT:-3010}:3010'
    network_mode: service:affine-ts
    depends_on:
      redis:
        condition: service_healthy
      postgres:
        condition: service_healthy
      affine_migration:
        condition: service_completed_successfully
    volumes:
      # custom configurations
      - ${UPLOAD_LOCATION}:/root/.affine/storage
      - ${CONFIG_LOCATION}:/root/.affine/config
    env_file:
      - .env
    environment:
      - REDIS_SERVER_HOST=redis
      - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
      - AFFINE_INDEXER_ENABLED=false
      - SELFHOSTED=true
    restart: unless-stopped

  affine_migration:
    image: ghcr.io/toeverything/affine:${AFFINE_REVISION:-stable}
    container_name: affine_migration_job
    volumes:
      # custom configurations
      - ${UPLOAD_LOCATION}:/root/.affine/storage
      - ${CONFIG_LOCATION}:/root/.affine/config
    command: ['sh', '-c', 'node ./scripts/self-host-predeploy.js']
    env_file:
      - .env
    environment:
      - REDIS_SERVER_HOST=redis
      - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
      - AFFINE_INDEXER_ENABLED=false
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      affine-ts:
        condition: service_healthy

  redis:
    image: redis
    container_name: affine_redis
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  postgres:
    image: pgvector/pgvector:pg16
    container_name: affine_postgres
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_DATABASE:-affine}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      # you better set a password for you database
      # or you may add 'POSTGRES_HOST_AUTH_METHOD=trust' to ignore postgres security policy
      POSTGRES_HOST_AUTH_METHOD: trust
    healthcheck:
      test:
        ['CMD', 'pg_isready', '-U', "${DB_USERNAME}", '-d', "${DB_DATABASE:-affine}"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  affine-ts:
      image: tailscale/tailscale:latest
      container_name: affine-ts
      hostname: affine
      environment:
        - TS_AUTHKEY=tskey-xxxxxxxxxxxxx?ephemeral=false
        - TS_EXTRA_ARGS=--advertise-tags=tag:container --reset
        - TS_SERVE_CONFIG=/config/tailscale.json
        - TS_STATE_DIR=/var/lib/tailscale
      volumes:
        - ./config:/config
        - ./tailscale:/var/lib/tailscale
        - /dev/net/tun:/dev/net/tun
      cap_add:
        - net_admin
        - sys_module
      restart: unless-stopped
      healthcheck:
        test: ["CMD", "tailscale", "status"]
        interval: 10s
        timeout: 5s
        retries: 5

migration job は処理が完了したらexcitedするのが正常です。

AffineとローカルLLM(Ollama)の接続

立ち上がったら管理者パネルに入り初期設定を済ませます。

アカウントのパネルを開き、unlimited copilotをオンにするとAIの使用回数制限が無制限になります。

設定のパネルからAIを開き、AI機能を有効にします。

Use custom models in scenarios and override default settings.

使いたいモデルを指定して上書きしてしまいます。gemma4が対応していない要素もありますが、とりあえず上書きしてしまいます。

{"scenarios":{"chat":"gemma4:e4b","image":"gemma4:e4b","coding":"gemma4:e4b","rerank":"gemma4:e4b","embedding":"text-embedding-004","audio_transcribing":"gemma4:e4b","polish_and_summarize":"gemma4:e4b","quick_decision_making":"gemma4:e4b","quick_text_generation":"gemma4:e4b","complex_text_generation":"gemma4:e4b"},"override_enabled":true}

The config for the openai provider.

ollamaのエンドポイントを指定します。apiキーは適当に指定し、oldApiStyleをtrueにしてください。

{"apiKey":"ollama","baseURL":"https://ollama.tail-net.ts.net/v1","oldApiStyle":true}

使わないプロバイダは中身をカラにします

{}

AIが無料で使えるようになります

なお、現時点でAndroidはAI非対応、iOSはバグにより正しく結果を受信できません。ローカルのAIはPCのみでの動作となります。

Affineのいいところ

  • 電気代のみ

  • ローカルLLMも使える

  • Linux用のクライアントもある

  • デイリーノートが使いやすい

  • シンタックスハイライトが最強

Evernoteのいいところ

  • Chat-GPTとの高度な統合がなされ、かつデータはEvernoteの外に出ない

  • 自分でセキュリティ対策やデータロス対策を構じる必要がない

  • Scansnapとの連携

  • 画像とPDFのOCR&添付ファイルの中身まで検索

  • 開発スピードが速い