mieki256's diary



2023/12/03() [n年前の日記]

#1 [pc][windows] EvernoteからObsidianに移行できないか試してみた

Evernoteの無料プランの制限が厳しくなったらしいので、今まで溜めていたメモを別の何かに逃がしてみることにした。

_「Evernote」無料プランの上限変更が正式決定、導入は12月4日から - 窓の杜
_Evernote、無料プランを大幅制限 ノートの上限数が10万→50に - ITmedia NEWS


ひとまず、ローカルで動作して、クラウドにデータをアップロードしたりしない、Obsidian というMarkdownエディタにインポートできないか試してみた。

_Obsidian - Sharpen your thinking

環境は、Windows10 x64 22H2。

Evernoteからエクスポート :

Evernoteに溜めこんだメモ(ノートブック、ノート)を、何かしらのファイルとしてエクスポートしたい。デスクトップ上で動作する Evernote Legacy で、エクスポートしたいノートブックを右クリックして、エクスポートを選んだ。.enex を選択。

ちなみに、Evernote Legacy ではなく、現行版Evernoteでも同じことをしたのだけど、現行版でエクスポートした .enex を他の変換ツールに渡すと、 「無題のノート」なるファイルが500ファイル以上出来上がってしまってよろしくなかった。何故かは分からないけど、自分の環境の場合は、Legacy 版でエクスポートしたほうが良さそうだなと…。

ついでに、単一htmlや複数htmlでもエクスポートしておいた。これで万が一、Evernote が利用できなくなっても、メモを参照することぐらいはできるだろう…。

Obsidianにインポート :

最初は、importer というプラグインをインストールして利用したのだけど、ノートが955ほどあるはずなのに、600前後しか .md ファイルになってない。どう見ても大量にノートを取りこぼしている…。

ググっていたら、Yarle という変換ツールが良さそうに見えた。

_akosbalasko/yarle: Yarle - The ultimate converter of Evernote notes to Markdown
_[Obsidian] Evernoteからの移行ツール - 端くれプログラマの備忘録
_EvernoteからObsidianへの移行 | 備忘録とか、買ったものとか
_Yarle のコマンドを使ってEvernoteのノート(ENEX形式)をMarkdownファイルに変換する - ラボラジアン

yarle-evernote-to-md_win_x64.exe を入手して実行。以下にインストールされて、かつ、自動起動した。
C:\Users\(USERNAME)\AppData\Local\Programs\yarle-evernote-to-md\

保存しておいた .enex を指定して、保存場所を指定。途中で変換オプションを尋ねてくるけれど、デフォルトのまま試した。

数分ほど変換処理にかかって、出力フォルダに大量の .md が保存された。

Obsidian で管理してるフォルダの中に、Evernote というフォルダを作成して、その中に今回変換した .md ファイル群をフォルダごと移動。

Obsidian を起動すると、.mdファイル群を読み込んでくれたようで、検索すると Evernote から持ってきたメモもリストアップされた。

ただ、ノートが955あるはずなのに、951ファイルの .md しかない…。4ファイルというか、4ノートほど消滅している…。さて、一体どれが変換できなかったのか…。

Yarle の変換オプションで、タグのネストのあたりを Yes にしたり等色々試してたら、955ファイルが出力された。どのあたりのオプションを弄ったのかよく覚えてないのがなんともアレだけど、とりあえずそのあたりを色々変えて処理すれば改善する場合もあるようだなと…。

また、Evernote側で、複数のhtmlとしてノート群をエクスポートしておけば、各ノートのタイトルとノート数を確認できるだろうから、それと照らし合わせてどのノートが変換されなかったのか絞り込むこともできるかもしれない。

タグが反映されない :

Obsidian で Evernoteから持ってきた .md を確認したところ、Evernote上でつけていたタグが反映されてないことに気づいた。

.md の中を覗くと、例えば以下のような記述があったので、タグ情報を取り出すことはできているようだけど…。
Tags: #Aterm #Router

以下のページを目にして理由が分かった。

_Tags - Obsidian Help

通常、Obsidian上でタグを指定する時は、「#タグ名」で記述するけれど、「tags:」を使ってタグを記述する時は、フォーマットが違ってくるらしい。例えば前述のタグ情報は、以下のように書かないといけない。
tags:
  - Aterm
  - Router

950ファイルも手作業で修正するのは厳しいので、簡単なRubyスクリプトを書いて修正することにした。

ただ、元の .md は、最初のあたりの改行コードが CRLF、本文の改行コードが LF になっていて、Rubyスクリプトで元の改行コードの混在ぶりを反映させる方法が分からない…。解決策が思いつかなかったので、仕方なく今回は、全部CRLFで出力し直してしまうことにした。

__conv_tag.rb
# Yarle が出力した md ファイルの Tags: 行を変更。
# Source URL の行も削除する。
# カレントフォルダ内の *.md 全てを対象にして処理をする。

require "fileutils"

write_enable = true
# write_enable = false

Dir.glob("./*.md").each do |fn|
  puts fn

  # backup file
  if write_enable
    FileUtils.cp(fn, fn + ".bak")
  end

  # read file
  # f = File.open(fn, "rb:utf-8")
  f = File.open(fn, "r:utf-8")
  buf = f.read()
  f.close

  # lines = buf.split(/\r\n/)
  # lines = buf.split(/\r/)
  lines = buf.split(/\R/)

  lines_new = []
  lines.each { |s|
    if s =~ /Source URL: \[\]\(.+\)/
      puts s
      next
    end

    if s =~ /^Tags:/
      tags = s.split(" ")
      tags_new = []
      tags.each do |t|
        if t == "Tags:"
          tags_new.push("tags:")
        elsif t =~ /^#(.+)/
          tags_new.push("  - #{$1}")
        end
      end
      tags_new.each { |t| puts t }
      tags_new.each { |t| lines_new.push(t) }
      next
    end

    lines_new.push(s)
  }

  # write file
  if write_enable

    # LF
    # f = File.open(fn, mode = "wb")

    # CRLF
    f = File.open(fn, mode = "w")

    # f.write(lines_new.join("\r\n"))
    f.write(lines_new.join("\n"))

    f.close
  end
end

.md が入ってるディレクトリの中で、以下を実行。
ruby _conv_tag.rb

"Source URL"の行がエラーになる :

.md の最初のあたりに、以下のような記述の行があると、タグ等が反映されない状態になってしまう。

Source URL: [](http://yoshidastyle.net/Blogs/2013/05/27/microsoft-office-excel-2000-2003-err)

ざっと見た感じ、メモの本文中にも該当URLがメモしてあることが多かったので、行ごと削除してしまうことにした。前述の _conv_tag.rb の中で一緒に処理してしまった。

暗号化部分の確認 :

Evernote上では「選択したテキストを暗号化」を使って、パスワードを入力しないと内容が見れない箇所をいくつか設定していた。変換後の .md内では、該当部分は謎の文字列になっていた。これでは何が書いてあったのか分らない…。

ただ、どうも規則性と言うか、最初の部分だけはどれも同じ文字列に見えたので、変換後の .md の中から特定文字列を検索することで、暗号化が使われていたノートを絞り込めた。自分の場合、「RU5DM」で検索すると、利用されている場所がリストアップされた。このあたりは環境やパスワードによって違う文字列になるのかもしれない。

後は以下の作業をコツコツと。
  1. Obsidian上で、特定文字列で検索して、使われている .md を開いた。
  2. Evernote上で、該当するノートを探して、暗号化を解除して、元の文字列をコピー。
  3. Obsidian上で、元文字列を追加していった。

スクリプトの類を書いて自動化できそうな気もするけれど…。

以上です。

過去ログ表示

Prev - 2023/12 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project