Obsidianというノートツールがだいぶ気に入って、今後、これを「メインノート」として使っていこうと思っています。
[[ノートアプリObsidianの基本的な使い方]]
Obsidianは「ローカルファイルでデータを管理するアプリ」なので、テキストファイルをうまく処理さえできれば、全てのファイルのフォーマットを統一する、みたいなのが割と簡単にできます。
その導入として「rename」「sed」あたりのコマンドを学びながら、いろんなデータをObsidianに取り込んでいってます。
[[sedを使ってRoam ResearchやScrapboxのテキストをObsidianに最適化する]]
そして、もう少し本格的にObsidianを使い始めるにあたって、ため込んできたScrapboxのデータをObsidianで読めるようにしたい、と思って、**ScrapboxからエクスポートしたJSONファイルを、Obsidianで開けるようにする**ってのをやってみました。
(Scrapboxのデータは、 Project settingsの中にある Backup からダウンロード可能)
## PythonでScrapboxのJSONファイルからmdファイルを作るスクリプト
とりあえず自分のローカル環境で動作したコードがこれです。
ざっと、以下のようなことをやっています。
* scrapboxディレクトリを作る
* jsonファイルを読み込んで
* タイトルに/が含まれてるとバグるので、-に修正
* タイトル.mdっていうファイルを作って
* "lines"を1行ずつファイルに書き込む
なんかPythonはJSONファイルの処理とか簡単、って書かれてるのを見て、Pythonのことを色々調べながら作ってみました。
(Macに標準でインストールされてる)Python 2系では動かなかったので、Python3が使える環境を用意して、以下のコマンド。(Scrapboxから落としてきたデータは、scrapbox.json、という名前で同じディレクトリに置く)
```
> python3 ./scrapbox_to_obsidian.py
```
Python、だとPythone2が動くことがあるので、明示的に「Python3」て書いてあげるのがいいです。 また、パーミッション変更(chmod 0600 ./scrapbox\_to\_obsidian.py)も必要です。
Python3をMacで使う方法は、こんな感じで検索:[mac python3 インストール - Google 検索](https://www.google.com/search?client=safari&rls=en&sxsrf=ALeKk02n6zTvwFrSKSyXTlv9YFxwgxi2xw%3A1600067903927&ei=PxlfX4aMOPuKr7wP3tOBmA8&q=mac+python3+%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&oq=mac+python3+%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&gs_lcp=CgZwc3ktYWIQAzIECAAQBDIECAAQBDIECAAQHjIECAAQHjIECAAQHjIGCAAQCBAeMgYIABAIEB4yBggAEAgQHjoGCAAQBBAeOggIABAEEAoQHjoICAAQCBAEEB5QxbopWIvHKWDbySloAXAAeAGAAY0BiAGvCJIBAzQuNpgBAKABAaoBB2d3cy13aXrAAQE&sclient=psy-ab&ved=0ahUKEwjGp564jejrAhV7xYsBHd5pAPMQ4dUDCAw&uact=5)
[パーミッションの変更 - Google 検索](https://www.google.com/search?client=safari&rls=en&q=%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%89%E6%9B%B4&ie=UTF-8&oe=UTF-8)
## Gyazoフォーマットの画像をObsidianで見られる状態にする
で、これだけでとりあえずScrapboxのテキストをマークダウンファイルにする、ってのはできるんですが、これだけではちょっと不便なので、Scrapbox用のフォーマットで書かれていた「リンク」と「画像」をObsidianで都合がよい形に修正します。
上記プログラムで一緒に修正するのが圧倒的に正しいんだけど、[ほとんど同じことをすでにsedを使ってやっている](https://goryugo.com/20200911/sed-to-obsidian/)ので、それをちょっとだけ応用して素早く目的を達成することにしました。
まずは、Scrapboxのシングル括弧 \[ をダブル括弧に変更。
アナログに、開き括弧、閉じ括弧を全部修正してやります。 `sed -i .bak 's/\[/[[/g' *.md sed -i .bak 's/\]/]]/g' *.md`
その後、改行なしで複数の画像が入ってる行に改行を入れる。これは、1行目の最後にエンター押してリアルに改行して、続きを書いてやる必要があります。(sedの処理で改行コードを入力するのは、わりとめんどくさいらしい) `sed -i .bak 's/\[https:\/\/\(.*\)\[https/[https:\/\/\1\ [https/g' *.md`
画像が3個以上連続していたらまだ改行が足りないので、上記コードは複数回実行します。(美しくないが、素早く目的を達成するのを優先)
その後、gyazo、が含まれているURLをプレビューできるフォーマットに変更。 `sed -i .bak 's/\[\[https:\/\/gyazo.com\/\(.*\)\]\]$/![Image from Gyazo](https:\/\/i.gyazo.com\/\1\.jpg)/g' *.md`
これで一応、一通りObsidianで使いやすいフォーマットになったのではないかと思います。
## まとめ
こういう一括での変換がまあまあ簡単にできる、というのはやはりローカルでテキストファイル使って出来上がってるシステムならではだよなあ、と思います。
テキストの一括処理というのを学ぶ気になれた、という意味でもよいものだったかも。
それにしても、Pythonでプログラム作ったのとかはじめてなんだけど、これはすごいわかりやすく、確かにJSONを処理するのとか、簡単でええわ、って感じでした。(って言ってこの数行のために色々調べて3時間くらいかかってるけど)
なんにしても、仮に手書きでやってたらどんだけ大変やねん、という行為をプログラムで一発で動かせたのは大変気分良くて達成感高くて、今後もこれは色々お勉強してやるぜ、ってやる気に溢れる感じになってきています。
## 参考
[sedを使ってRoam ResearchやScrapboxのテキストをObsidianに最適化する – ごりゅご.com](https://goryugo.com/20200911/sed-to-obsidian/)
[ローカルで動くRoam Research? Obsidianというツールを使ってみた – ごりゅご.com](https://goryugo.com/20200908/obsidian/)