マークダウン(MD)を使うクラウドノートツール(≒ Evernoteの代替) Joplin。もちろん名前が大嫌いな系統だけどw※、中身はなかなかいい。検索すると、近頃Evernoteの代わりに使い出した人が多い印象だ。

※どういう由来か知りたくもないから調べてないが、なんか名前がフランス的なので、直感で作者はフランス人だと思っていたが、どうもそんな感じだ。フランスにJoplinという有名な人が居た・居るのかも知れないが、全然知らない。 → 調べたが、2人居てどちらもUSの音楽関係の人(Scott- (c.1867-1917), Janis- (1943-1970)のようだ。作者が好きなのだろうか。だとしたら後者かな。

まだ一週間も使っていないが、日記や買い物リストなど、毎日使うものを移行して実際に使っているが、まだ大きな問題(「こりゃ駄目だ!」ってもの)はない。

また、Evernoteからの乗り換えがほとんどできた。もちろん全部のノートを移した訳ではなく、各種ツールを作って、やろうと思えばできる状況になった。あと、懸案だったWriteNoteの代替については、無理に代わりを用意するのでなく、WriteNoteを使って書いたノートを容易にJoplinに転載(インポート)できるようにした(詳しくは後述)。

以下に、使った感想とtipsなどを書く。

  • 試し始めた時にも書いたが、MDは面倒だけど、ショートカットやボタンやメニューである程度のフォーマットができてプレビューが横に出るので、それほど大きな手間ではない(そういう使い方はWordPressに近いので馴染みがある)。
    • ただ、ショートカットなどのない書式(例: 取り消し線 → <s>..</s>または~~で囲む)には難儀する。近頃は結構覚えてしまい、まんまと はまった感があるw
  • Evernoteのweb版(Evernote web)と違って、見たり書いたりしている時にノートやアプリがおかしくなることがまずないので、ストレスは少ない。
    • ノートの表示が簡素なのもいい。
  • 大きいノート(例: サイズが3MBなど)の操作性はEvernoteのwebやそのAndroidアプリよりいい。「かなりいい」とは言えないが、見ているだけなのに気付くとノートがおかしくなってしまうことがあるEvernote webやAndroidアプリのようなイライラはなく、安定感・安心感がある。
  • MD特有の癖はあるが、Evernoteよりは論理的で好ましい気がしている。
    • 昔のLaTeXのような感じ。
    • 例えば、空白や空行の扱いがEvernoteよりずっと「まとも」(プログラマー?に親和的とかTeX的)。
      • 例: HTMLと同様に、空白や空行を何個入れても1個の扱いになって不便なことはあるが、それはそれで理解できる。
    • MDはフォーマット(書式)の機能が少なくて不便な点はある(MDはプログラムなどの資料を書くにはいいが、普通のドキュメント・ノートを書くには不充分なので失うものが少なくなく、ダウングレードだと思うから、決して満足していない)が、オープンなフォーマットなので、「つぶしが利く」し自動化しやすいのもいい。ENEXでは全然駄目だ。しかも、web版ではそのエクスポートすらできない。
  • Linuxデスクトップアプリについて
    • "(“などを入れると自動的に閉じ”)"が出るのが便利。(こういうのを書いている時のように、)不便なこともあるが、ほとんどの時は便利。
      • もちろん、日本語の「」などには対応していないw
    • Evernote webは、ノートが大きい場合、表示が文字入力に追いつかなくて入力が激遅になったり、ブラウザの状態が変になってイライラすることが多いが、そういう問題は今までのところない。
      • ただし、プレビューを表示している時や、同期が開始した場合は若干遅くなる。
        • プレビューしながら大きいノート(の途中)を変更していると、表示のリフレッシュとリンクするせいか、勝手にスクロールして今書いているところが見えなくなるのが惜しい。
        • それでも、Evernote webのもたつきよりはいい。
    • プレビュー表示をコピーして、フォーマットを維持したままWorPressにペーストできるのが便利。
      • Evernote webは変なタグ(<div>がやたらに多い)が大量に付いてしまって書式がおかしくなるため、プレーンテキストでペーストして再度書式を付けるのが不便だった。
      • また、ブラウザからのペーストもフォント情報(サイズ、使用フォント)が無視されるので気楽・便利(MDにはそういう属性がないため)。
        • 例えば、タイトルのような大きな文字をそのままペーストしても全く問題ないw
    • 他のノートの参照がEvernoteのようにはできない? できるとして、どうやってする? HTMLのリンクにようにする? → 左側のノート一覧ペインのノート名で右クリック → "Copy Markdown link"で可能。 (11/7 6:41)
      • もう少し調べれば分かるかも知れない。
    • 変更したノートは、文字入力が終わってから30秒くらいで自動的にサーバに同期されるようだ。
      • この点はEvernote webと同様だが、同期の状態が分かるのがいい。
      • Evernote webは、「同期が終わりました」などと出ても まだサーバにないことがある(数分遅れる)。
    • ローカルに保存されたノートや設定はDB(sqlite3)に入っているので、Joplinのコマンドになくても手軽に閲覧・操作できる。
    • 正しい使い方かは分からないが、デスクトップ版とコマンドライン版のDBを(sym-linkで)同じものにすると、コマンドライン版でデスクトップ版にノートをインポートしたり(DBが別々でも、サーバ経由で双方は同期される)、コマンドライン版でデスクトップ版の情報が取得できるので便利だし、ディスク使用量を節約できる。
      • また、画像ファイルなどを置くリソースディレクトリも同じものにすれば、ディスク使用量を節約できる。ただ、何らかの競合が起こる可能性はある。
      • DB: $HOME/.config/joplinとjoplin-desktopのdatabase.sqlite
      • リソースディレクトリ: $HOME/.config/joplinとjoplin-desktopのresources
    • まだまだ不足な点やバグがあるが、かなり熱心に開発している感じ。毎日のように(仮)リリースがある。
      • この状態がずっと続くとありがたい。
    • 今までに気付いたバグ・問題など
      • タグでのノートのフィルタリングができないことが多い。 → 一旦別のタグを選択すると直る(= タグが2個以上ないとフィルタリングできない)。
        • そのタグを持つノートが表示されている時が駄目?
      • 取り消し線(~~)がうまく動かない場合がある。なぜか<s>はOK。
      • メモリリークしているのか、使っていると使用量が大きくなる。
        • 簡単に1GBを超え、大きく減ることはなさそう。
      • DBにノート保存先サーバ(クラウド)のパスワードが平文で入っている。
        • 最新では直したようだが、Linux版では対応していないのか、新たに登録する必要があるのか。
      • インポート直後などに書式を設定できなくなる(ボタンなどが無効になる)。 → 一旦ノートを変えると直る。
      • フォーマットのショートカットやボタンを増やして欲しい・増やせるようにして欲しい。
        • 特に取り消し線。
      • 日本語(と英語の混じったテキスト)の処理には対応していないようで、例えば、英単語を選択するつもりでダブルクリックすると、それを含む1行全体が選択されてしまう。まあ、無理もないと思う。
        • もしかして、僕が英語(+一部日本語)環境で使っているせいか?
  • Androidアプリについて
    • 電池消費はそれほど大きくない。
      • 長時間スリープ時に動作が停まって同期しないためか。
        • 電池の「最適化」を無効にしても、長時間スリープ中は全然同期しないが、電池消費が少ない方がいいので、僕は気にしない。
    • (Evernoteと違い、)ノートを見ている時に間違って編集にならないのが すごくいい。
      • 編集ボタンを押さないと編集にならないため。
    • 大きいノートも待てば表示されるようなので、(永遠に出ない)Evernoteよりもずっといい。
      • ただ、メモリは食うようで、最大で1GB近くまで使っていた。
    • 一度、アプリを開いても暗いままのことがあったが、他のアプリもそうだったので、OS全体がおかしくなっていたようだ(それで、スマフォを再起動した)。
      • その原因がJoplinかは不明。
    • 時々、ノートが同期しないことがある。
      • データ量が多い場合に途中で止めているのかも知れない。
      • 試しに省電力(最適化)をoffにしてみたが、消費電力は増えなかったものの、長時間スリープ中に同期していなかったので、意味がないようだ。
    • アプリにはデスクトップ版のようなフォーマット(書式設定)のボタンやメニューがないので、MDを手で入れるのだろうか。今はスマフォでは見るのが主だし、書くのはWriteNoteが主だし、Joplinで書くとしてもプレーンテキストが主だからまず問題ないが、仮にフォーマットを付けたい場合は面倒だ。
      • そのうちフォーマットボタンが付くのを期待する。
    • AndroidでのWriteNote(Evernoteに手軽にメモするアプリ)の代わりが要る。 → なんとかした。下を参照のこと。
      • 例えば、ノートの編集時にノートの一番上に行くのが面倒。
      • あと、現在時刻を自分で入れるのも面倒だし、Mazec(手書き文字入力)では「いま」を変換して現在時刻が出ないのも不便。
  • Joplinではないが、pandoc(ドキュメントフォーマット変換プログラム)はすごく大きい。コマンド1個で80MB近くもある・・・
    • あと、いろいろな癖があって、使う時に苦労した。
  • EvernoteからJoplinに移行する場合にノートのデータ量が気になる(大き過ぎるとサーバが容量不足になる)が、Evernoteのバックアップディレクトリは約600MB、約800ノートなので、まあ大丈夫そうだ。
    • ただ、手で一個ずつインポートするのは現実的でないので、いつかは一括処理する必要がある。

という訳で、Joplin(とMD)にはいろいろ癖などがある(だから、誰にでも勧められる訳ではない)が、Evernoteのクソさに比べれば充分我慢できる(それどころか3倍くらいいい※)っていうのが、今の感想である。

※例えば、書くことに集中できる度合いとかイライラの少なさはそのくらい上に感じる。あと、コマンドライン版があってフォーマットがオープンなので、プログラムとの親和性(→ 自動処理の可能性)や将来Joplin後の何かに移る場合の楽さは、100倍いいと言えよう。

それから、僕はブラウザ(= JavaScript)で まともに文書作成をするのはすごく無理があるし※、使い勝手が良くないと思う。Firefoxで使っているとメモリ使用量は10GB近くに膨れ上がり、上に書いたように大きなノートの操作性は最悪だし、しばらく使っていると動かなくなってしまってウインドウを一旦閉じなければならない。そんなのものは実用には程遠い。

※書いたあとで調べたら、デスクトップ版のJoplinもJavaScript(正確にはTypeScript)で書かれているので、JavaScriptかどうかは大きな問題ではないのかも知れない。あと、大量のメモリを消費するのはそのせいかも知れない・・・

 

以下、僕の考えた作業手順や作ったプログラムなどについて書く。

EvernoteからJopplinへの移行方法

JoplinはEvernoteのエクスポートファイル(ENEX)をインポートできるが、そもそもWindowsを起動して今の全ノートを同期するのは面倒だし、ENEXからだとMDでなくHTMLになってしまって※、(外見では分からないが、)ソースが汚くて あとあと不便なので、MDで取り込むことにした。

※実はENEXからMDにインポートできることに今気付いたがw、(ノートを更新・インポートするたびに)Windowsを起動したくないし、既にLinuxにバックアップが揃っていて自動更新されるのでなかったことに良しとする。

そのため、自作のEvernoteバックアッププログラム(en-backup)の作成したENMLもどき(EvernoteのHTMLもどき)をMDに変換し、それをJoplinにインポートするようにした。以下に手順の概要を書く。なお、Joplin(デスクトップ)は1.3.15、pandocは2.11.1を使った。

  1. バックアップしたEvernoteのノート(ENMLもどき)をHTMLに変換する。
    • バックアップしたノートをブラウザに表示するビューア(enb_viewer: 自作)を改造し、ファイルに出力できるようにした。
    • EvernoteのインデントとチェックボックスのMDへの変換のために特別な処理をするようにした。
      • インデントはMDに丁度いいものがなさそうだったので、">"(Block quote)を使うことにした。
        • Evernoteはインデントを"<div style="padding-left: Xpx>"のように書くので、インデント量(px)を">"の個数に変換した。
        • ただし、HTMLとして見た時(実際にはそんな機会はまったくないが・・・)もおかしくしたくなかったので、この段階では特別な目立たない記号("﹎﹍﹎"にした)に変換し、MDへの変換後(pandocの後)に">"に変換することにした。
      • インデントと同様に、チェックボックス(実際には不便なので全然使っていないが・・・)は、HTMLでは特別な記号("☐"と"☑"にした)に変換し、MDへの変換後(pandocの後)にMDのチェックボックス([ ], [X])に変換することにした。
  2. そのHTMLをpandocでMDに変換する。
    • 使用可能なMDのフォーマットはいくつかあるが、markdown_mmdやgfmがいいようだ(最新版の場合。古い版ではmarkdown_mmdが良かった)。
      • 少し比較したところ、gfmだと、Linuxのコマンドなどアルファベット・記号が羅列している時に文字が斜体になってしまうことがあるので、markdown_mmdを使っている。
      • それに、自動改行を止める--wrap=preserveオプションを指定した。
    • pandocはHTMLのチェックボックス(<input type="checkbox" ...>)をMDに変換できないようなので、上述のとおり、pandocの前後に処理を追加して、うまくMDに変換できるようにした。
    • Evernoteは空の<div>を大量に付けているので削除する。
    • 画像(<img src=...>)のパスを修正する。
      • pandocはimgタグにwidth(heightも?)が指定されているとMDの画像("![]()")に変換せずにそのまま出すようなので、変換前にwidthまたはheightを削除するようにした。
      • 画像の指定を絶対パスから相対パスに直す。
        • pandocでMDへの変換後にMDの記述を修正するようにした。
        • 画像をMDと同じディレクトリに置き、[](image.png)のように書けばいい。
        • ただし、Joplinは画像はsym-linkでなく実体でないと駄目なようなので、バックアップディレクトリから作業ディレクトリにコピーするようにした。
        • また、Joplinはインポートする画像にsuffix(".png"など)がないと駄目なようなので、追加した。追加すべきsuffixはHTML(ENML)中のimgタグに書かれているもの(例: "type=image/png")を抽出して設定した。
          • ただ、MIMEタイプがsuffixにならない特別な場合(例: svg: ただし、Evernoteでは使われていないと思う)は、別途、テーブルで定義した。
    • Evernoteとpandocの相性なのかどちらかが悪いのか、HTMLのネストした箇条書き・リスト(ulやol)の最上位がなくなってしまうので、暫定的に"</li>"(リストの項目の終わり)を削除して対応した。
      • HTML的には全然正しくなく、構造を正しく修正すべきだが、中間的なものなので良しとした。
      • 調べた感じでは、Evernoteが入れる"</li>"の位置が正しくないようで、子のリストの<ul><ol>が始まる前に入っているのが良くないようだ。
        • EvernoteはENMLであってHTMLでないと言うことは可能だが、であれば、「そんな変な物を作るのはセンスがないし無駄だし迷惑だから止めろ!」と言いたい。。
  3. できたMDをJoplinにインポートする。
    • メニューのFile → Import → MD - Markdown (file)に上でできたMDを指定する。
    • コマンドライン版では"joplin import -f --format md MD-path"でインポートできるはずだが、未確認。

オーバースペック・やり過ぎなところ、逆に間抜けなところはいろいろあるが、趣味とMD(、そしてsedも!)の勉強には丁度良かった。こういうのを作っておけば、今後もいろいろできそうな気がする。

それから、ENMLからMDへの変換を手軽にするため、Evernoteのバックアップの一覧・プレビューページに変換ボタンを追加し、それを押せば自動的に上の1と2の作業が行えるようにした。3のインポートもやれば可能だが、変換処理に誤りや問題があるかも知れないので、今のところは手で行うようにしている。

 

JoplinでのWriteNoteの代わりについて

Evernoteを完全に止めること自体に大きな意味はない(使えるところ・使える間は使えばいい)ので、外出時などに手軽にメモするのにはWriteNote(とEvernote)を使うことにした。そして、帰宅後に、外で書いたノートを忘れずにJopplinに取り込めるような仕組み(以下に概要を書く)を作った。

  • 定期的(今は1時間に1回)にEvernote中のWriteNoteで作ったノートを検索し、見付かったらそのノート名(タイトル)やGUIDなどをメールで通知する
  • 同じノートが何度も通知されるのは嫌なので、検索した日時を記録しておき、次回はそのあとに作成されたノートだけを検索する。
    • なお、上にも書いたが、ノートの作成・更新がEvernoteに反映されるのに数分間の遅れがあるため、今回検索した時刻の数分(今は5分)前を次の検索開始時刻として記録している。
  • この仕組みはclinote(3rdパーティ製コマンドライン版Evernote)とcrontabで(結構な力技でw)実現した。
  • 通知があったノートは、上述の手順でJoplinに取り込む。
    • ノートが既にバックアップされていたら、一覧からMDに変換できる。
    • 自動でJoplinに取り込むようにもできるが、いつノートの編集を終えたかの判定が難しいので、通知だけにした。
      • WriteNoteのノートができるのは高々1日1個で多くないので、通知だけで充分だと考えた。

 

(11/8 21:20, 11/9 11:35 [画像] WriteNoteの通知メールのコマンド列にバグがある件を追記, その内容を本文に更新)

  •  0
  •  0

コメントを書く / Write a comment

名前 / Name    

メール / Mail 

URL