Rustでエディタを書いている

2022/1からRustでエディタを実装している。 なぜエディタをかいているか? プログラマとしての成長の鈍化を感じていた時に、過去に所属した企業で教えてもらった「プログラマをやっていくなら、OS・エディタ・コンパイラは一度作ってみると良い」とアドバイスを思い出した。 これまではあまり気にしていなかったが、実際に調べてみると自分の知らないことも多く、またチュートリアルやドキュメントも多くあり、意外と実装できることがわかって楽しくなった。 何を元に実装しているか? 自分は「Kilo」というエディタのチュートリアルを参考にしている。 Build Your Own Text Editor ターミナルで動くエディタをC言語で実装する方法が説明されている。 外部ライブラリを使ったりはせず、本当にC言語のみで実装する。 基本的な編集機能からファイルの読み込み、検索やシンタックスハイライトまで、1000行程度の実装でありながらエディタとして最低限の機能は実装する。 また、シンプルな実装なので他の言語にも移植しやすいらしく、GolangやRustで実装されているリポジトリも検索すると見つかる。 なぜRustで実装しているか? まず、「ただ写経しただけでは記憶に残りにくいから」と言うのが大きい。 全く同じものを何度も繰り返すのはしんどいので、なにか変化を起こしたくてC言語以外で実装する事を考えた。 その上でなぜRustかというと、「書きたかったから」と言うのが大きい。 モダンだし、流行ってるし。 また、OSやコンパイラなどの実装にRustは向いている(と聞いた)ので、自分の興味の方向性にもあっていると思った。 自分が実装しているリポジトリ: piruty/rust_editor: Kilo editor in rust

February 13, 2022

Obsidianを使い始めた

Markdownの文章をまとめるのに、Obsidianというアプリを使い始めた。 なぜ、Obsidianを使い始めたか? 自分はもともとNotionを使ってドキュメントを整理していた。 Notion自体は高機能で使いやすいのだが、分報に近いメモを取りながら2窓してNotionのドキュメントを参照することに難しさを感じていた。 また、個人的にNotionは「特定の項目に対する内容を一つのページに纏める」という使い方をしているので、断片的なメモを書きなぐるのには使いにくさを感じていた。 そこで、Notionに変わるシンプルなエディタを探していて、今回Obsidianを使ってみることにした Obsidianの何が良かったか Obsidianの良かったポイントは大きく以下の3つ プラグインが豊富 VIMのキーバインドで使える ライブプレビュー機能がある 自分は以前もObsidianを使っていた時期があるが、ここ数年は使っていなかった。 今回改めて使い始めたところ、コミュニティが開発しているプラグインが非常に充実していることに気がついた。 ObidianはシンプルなMarkdownエディタだが、プラグインを追加することでカンバンを追加したり絵文字を挿入できるようになる。 カレンダーを表示させてデイリーメモと連携するプラグインもある。 プラグインを活用すればNotionぐらいには使えるようになるのでは…と感じた。 Obsidianは公式のプラグインでVIMのキーバインドがサポートされている。 開発もVIMで行っているので、同じ感覚でドキュメント操作できるのは非常に嬉しい。 ドキュメントを編集する限りにおいては違和感も感じることなく使えている。 また、ObsidianはMarkdownのライブプレビューに対応している。 つまり、Markdownのタグを書くとエディタ上で変換して表示してくれる。 NotionのMarkdownエディタの強みとしてこのライブプレビューがあると思っていたので、これをObsidianでも体験できるのでUXは非常に良い。 スマホとの連携 ここからはおまけ。 自分はAndroidを使っていて、こちらでもObsidianアプリがある。 できればPCとスマホを連携させたいと思い検索したところ、いくつか方法が見つかった。 一番かんたんなのは公式の同期機能を契約することなのだが、今回はGoogleDriveによる同期を試している。 PC側については、GoogleDriveのアプリを入れてローカル環境で同期できるように設定を済ませておく。 その上でObsidianのVaultディレクトリを同期している場所に置くだけ。 スマホでやるときは、GoogleDriveとは別のアプリが必要になる。 というのも、GoogleDriveの公式アプリはローカルとの同期機能を提供していないためから。 今回はAutoSync for GoogleDriveを使っている。 このアプリの設定を済ませれば、スマホの任意の場所でGoogleDriveとの同期ができるようになるので、先程のVaultディレクトリが動悸されるように設定する。 スマホ版のObsidianアプリもドキュメントの保存先をローカルのディレクトリから選択・読み込みが可能なので、上で設定した場所を選ぶ。 環境構築はこれで完了。 問題点といて、AutoSyncの自動同期は「バッテリーが十分にある・Wifiにつながっている」というときにしか動いてくれないので、これに当てはまらない場合は手動で動悸する必要がある。 これがちょっとめんどくさいと感じているので、他にもっと簡単な同期方法があればそちらに移行しようと思っている。

February 11, 2022