Webブラウザーを Google Chrome からArcに乗り換えたところ、Google Keep Chrome 機能拡張 がログイン時に Custom scheme URI not allowed エラーで動作しなくなってしまいました。Arcや Microsoft Edge などのChromiumベースのWebブラウザーは Google Chrome と機能拡張の互換性があるのですが、Google Keep Chrome 機能拡張 が Google Chrome 以外のWebブラウザーでの利用を想定していなそうです。

Google Keep はWebクリッパーとしてしか使っていなかったので、Webクリッパーの代替を探すことにしました。Google Keep の前はEvernoteを使っていたのですが、現在の状況でEvernoteに戻る気にはなれません。Pocketも昔からあるRead-it-Later(あとで読む)アプリですが、本文の保存と全文検索には$44.99/年の Pocket Premium が必要です。Notionも一時期Webクリッパーとして使っていたのですが、TABLEが保存されない点と、クリップ時にラベルを付けられない点が気になっていました。そんなときに見つけたのが Comparing web clipper capabilities between Omnivore, Notion, and Evernote - Omnivore Blog という記事でした。以下のように、比較表を見るとOmnivoreも良さげです。

OmnivoreはAGPL-3.0のオープンソースソフトウェア (OSS) で、コミュニティによって開発されています。クラウドベースのシステムなので、Evernoteの経験から収益モデルが気になるところですが、Pricing | Omnivore Docs によると、将来的には有償アドオンを計画しているものの、現在のところは完全に無料で、寄付だけに頼っているそうです。

Webに早速ログインしてみると、見た目のきれいさが好印象です。OSSだと見た目が後回しになっているものが少なくないですが、きちんとデザインされています。

Webクリッパー機能拡張

Omnivore機能拡張はワンクリックするだけでクリップできます。Evernote Web Clipper 機能拡張 は動作が遅めな一方、Omnivoreは非常に高速です。Evernote Web Clipper は全文なのか一部なのか選択でき、Google Keep Chrome ではクリップする部分を選択する必要がありましたが、Omnivoreはワンクリックで全文取得のみです。

Omnivoreはハイライトという機能があるので、全文取得しつつ選択した部分はハイライトしてくれると、より良かったのですが、メモを Add Note に記載することはできます。OmnivoreはRead-it-Laterアプリと自称しているので、ちゃんと読む前に(ハイライト部分が不明な時点で)クリップするという想定なのでしょう。

ネイティブアプリ

iOS (iPhone / iPad) 版Android版のモバイルアプリが用意されています。こちらの見た目も洗練されています。

また、Mac版のネイティブアプリもありますが、Web版に比べるとやや機能が少なめです。

Omnivoreの機能

自動取得されるメタ情報

Omnivoreのリーダーはきれいで高速に動いて快適です。テーマや文字サイズ変更 / マージンや行間の変更もできます。ヘッダー部分にはタイトルだけでなく、Webページの発行日 / 読むのに必要な想定時間 / 著者名 / オリジナルへのリンクが含まれています。

また、取得日時 / 概要も自動取得されています。

HighlightとNote

本文の一部をハイライトさせ、ハイライト部分だけを抽出したペインがあります。また、ハイライト部分にメモを付けることや、ページ全体へのメモを書くこともできます。

また、ハイライトされた記事だけをフィルターして一覧することもできます。

全文検索

検索フィルターは充実しており、それを Saved Searches として保存しておくことができます。しかし、日本語検索に未対応です。全文検索にはPostgreSQLのtsvector_update_trigger()を使用しているものの、これが英語辞書 (pg_catalog.english) しか現在は参照していないので、pg_catalog.japanese も選べるようになることが期待されます。コア開発チームにシンガポール在住の方がいて、公式Discordでも話題になっているので、きっとなんとかなるでしょう。あとで公式Discordの Feature Request に入れておきます。

Obsidian Integration

この日本語検索ができない問題の回避策にもなるのが Obsidian Integration です。obsidian-omnivore Plugin をObsidianにインストールすると、Omnivoreの記事がObsidianに自動レプリケーションされるようになります。

ObsidanなのでOmnivoreで直接見るよりも地味ですが、自分のメモとWebクリップを(日本語で)串刺し検索できるというのは大きな強みです。デフォルトではハイライトとノート部分のみがレプリケーションされますが、さまざまな変数でテンプレートを作れるので、本文を追加することも容易です。私は以下のようなテンプレートを使っています。

# {{{title}}}

{{#highlights.length}}
## Highlights

{{#highlights}}
> {{{text}}} [⤴️]({{{highlightUrl}}}) {{#labels}} #{{name}} {{/labels}} ^{{{highlightID}}}
{{#note}}

{{{note}}}
{{/note}}

{{/highlights}}
---
{{/highlights.length}}

{{{content}}}

また、Front Matter もテンプレートを使用して作成することができます。私は以下のようなテンプレートを使っています。

id: {{{id}}}
title: >
  {{{title}}}
date: {{#formatDate}}{{dateSaved}},"yyyy-MM-dd"{{/formatDate}}
{{#datePublished}}
date_published: {{#formatDate}}{{datePublished}},"yyyy-MM-dd"{{/formatDate}}
{{/datePublished}}
tags:
  - omnivore
{{#labels.length}}
{{#labels}}  - {{{name}}}
{{/labels}}
{{/labels.length}}
{{#author}}
author: >
  {{{author}}}
{{/author}}
omnivore_url: {{{omnivoreUrl}}}
origin_url: {{{originalUrl}}}

Logseq Integration も用意されていますし、APIWebhookもあります。

RSSリーダー & メルマガリーダー

OmnivoreをRSSリーダーとしても使えます。ただ、RSSファイルのURLを直接指定しないといけないため、やや使い勝手が良くありません。

Omnivoreでメルマガを読むこともできます。@inbox.omnivore.appのメールアドレスを発行できるので、ここにメルマガを転送するとOmnivoreに取り込まれます。

Text-to-Speech

Omnivore for iOS にはText-to-Speech機能が付いています。ただし、日本語には未対応です。

Self-Hosted Omnivore

勤務先のセキュリティポリシー上、クラウドに情報をアップロードできなかったり、将来Omnivoreが有償になった場合でも、Omnivoreを自己ホストすることで対処できます。詳しくは Deploying a minimal self-hosted Omnivore using fly.io and bonsai.io - Omnivore Blog にあります。pg_catalog.japaneseを使うようにコードを修正して自己ホストすれば、日本語が検索できない問題を今すぐ解消できるかもしれません。

Google Keep からOmnivoreへのデータ移行

Omnivoreはデータインポート機能をいくつか備えています。MatterとPocketのデータはそのまま取り込めるのですが、Google Keep のデータはCSVインポートを利用するしかありません。そのため、Google Keep のJSONファイルをCSVファイルに変換するスクリプトを作成してインポートしました。

  1. Goole Data Export から Google Keep のデータの出力依頼
  2. データ準備完了の通知が来たら Export management.zip を取得
  3. Export management.zip を展開すると、Takeout/Keep というフォルダ内にHTMLとJSONが入っている
  4. conv_googlekeep_omnivore.sh をダウンロードして Takeout/Keep などにコピー
  5. conv_googlekeep_omnivore.shに実行権限を付与
  6. すべてのJSONファイルをconv_googlekeep_omnivore.shに入力
  7. ヘッダーを追加
  8. data.csvをLibraryにドラッグ&ドロップ
% cd Takeout/Keep
% chmod 755 conv_googlekeep_omnivore.sh
% for FILE in *.json; do
>   echo "Converting $FILE..." 1>&2
>   cat $FILE | ./conf_googlekeep_omnivore.sh >> converted.csv
> done
% echo 'url,state,labels,saved_at,published_at' > data.csv
% cat converted.csv >> data.csv

エラー処理はまじめにやっていないので、適宜修正して利用してください。特にラベルがないノートを想定しておらず、ラベルがないとjqが (at :0): Cannot iterate over null (null) エラーになります。

正規表現が多くて何をやっているのか分かりづらいですが、正規表現のような人間が読みづらく機械が読みやすいものは生成AIのClaudeなどが得意としています。

なお、Google Keep はノートアプリな一方、OmnivoreはRead-it-Laterアプリなので、OmnivoreではURLが必須で、これが一意である必要があります。また、OmnivoreのCSVインポートはタイトルや本文を取り込まず、URLから改めて取得に行くため、現時点でそのURLが無効だったりアクセスできなかった場合、本文などが取得できません。

まとめ

Google Keep Chrome 拡張機能が Arc / Microsoft Edge 等のChromiumベースブラウザーで動作しないため、Webクリッパーの代替としてOmnivoreに乗り換えました。OmnivoreはAGPL-3.0のOSSで、洗練されたUIと高速なクリップ機能を備えています。ハイライトやノート付け、全文検索も可能で、Obsidian / Logseqインテグレーションもあります。ただし日本語検索には未対応です。Google Keep のデータを自作のスクリプトでJSONからCSVに変換してインポートしました。オールインワンのWebクリッパー / Read-it-Laterアプリとして、Google Keep の代替に有力な選択肢となりそうです。

FacebookTwitter