Inkdrop v5をリリースしました

Inkdrop v5をリリースしました
より高速なデータ同期とアプリ起動、アイコンの刷新とよりシンプルになったUI、プロジェクトのような動作が加わったノートブック、そしてプラグイン管理GUIなど
英語で書いてから日本語訳しています ⇒ English version is available here.
こんにちは、TAKUYAです。本日Inkdrop v5をリリースしました。前回のアップデートから5ヶ月ぶりとなります。沢山の新機能、改善やバグ修正があります。アナウンスできてとても嬉しいです。ベータ版のテストを手伝ってくださった皆さんに感謝します。ありがとう、Andi, can_Y, ebigram, Erdem, Gustavo, James, Mike, Rael, tdudz, Zhuolun!さて、本稿ではv5の新しく加えられた変更点についてご紹介して行きます。
Inkdropとは? — 4年かけて作ったアプリ

偶然この記事に出会ったみなさん: はじめまして!僕はInkdropを4年間ひとりで開発しています。時が経つのは早いですね。これはプレーンテキストのMarkdownノートアプリで、macOS、Windows、Linux、iOSそしてAndroidと様々なプラットフォームで動作し、End-to-end暗号化方式で安全に同期します。最初は自分のために作りました。当時、コードの構文ハイライトやvimキーバインディング、ハック可能性などのプログラマーフレンドリーな機能を備えたEvernoteの代替アプリをずっと探していまいた。でも全然見つけられなかったので自分で作ることにしたのがきっかけです。良いノートアプリを作る旅は想像するよりも本当に険しいものでした。でも4年間耐え忍び、改善し続けました。当ブログでは開発を通して学んだことをシェアしています。個人開発のビジネスにご興味のある方はご覧ください:
去年は、技術的負債を綺麗にすべくアプリをイチから作り直すという苦行(笑)を無事やり遂げました:
今回のアップデートはこれらの積み重ねの上に乗るものです。
実は完全な独りきりの開発ではありません
独りきりで良いエディタを作るのは至難の業です。なぜならデベロッパーには数え切れないほど沢山の個人の好みや「あるといい」機能があるからです。この問題に対処すべく、InkdropではパワフルなAPIを提供して、みなさんに自由に新たな機能や見た目を追加できるようにしました。僕自身はコア機能の改善に勤しむ傍ら、ついにプラグインの数は100個を超えました!そのうち80%がユーザコミュニティ製のプラグインです。素晴らしいですね。ユーザさんが楽しみながらInkdropをハックしていて僕もとても楽しいです。プラグインはこちらから閲覧できます。
プラグインは僕が沢山のオプション機能を追加する代わりに、コアの重要な機能の改善に集中することが出来ます。なので、Inkdropではプラグイン開発者ライセンスでプラグインの開発を推進しています:

プラグインを作れば、Inkdropを永久無料で使えるというライセンスです。
より高速な同期とアプリ起動
ではまずはv5におけるパフォーマンス改善についてお話したいと思います。
データベースのクラスタをスケールアウトしてから、データ同期が予想外に遅くなってしまいました。調査の結果、サーバ間のRTTは166msと遅く、それは各サーバが異なるリージョンで動いているのが原因でした。つまりネットワークトポロジが悪かったのです。そこでサーバを同一リージョンに移し、しかしAvailability Zoneは別々の配置にしたところ、RTTは1ms以下に改善しました。その結果、ノート同期速度は以前の3倍になりました!
アプリの起動速度も格段に良くなりました。InkdropはElectron製のアプリなのですが、以前のバージョンでは起動に4秒もかかり、とても遅いものでした。今回、v8 snapshotsを利用することでこの起動速度の改善に成功しました。以下をご覧の通り、アプリの起動は1,000ミリ秒速くなりました。起動速度が遅いとストレスですよね。今回、この問題が解決できてとても嬉しく思います。具体的にどうやって達成したのかは以下の記事に書きました:

以下の通り、とても速いです。

アイコンの刷新とよりシンプルになったUI
ツールバーのアイコンは今ではちょっと古い感じがしていました。昨今の高解像度なディスプレイでは、それらは少々太すぎました。その上、エディタ上のアクションボタン群は幅を取りすぎていて、小さいディスプレイをお使いの方には使いづらいという問題がありました。

そこで、アイコンを刷新し、エディタアクションボタン群を再配置して、よりモダンでクリーンにしました:

右上の「 ︙ 」ボタンをクリックすると、エディタドラワー(Editor drawer)が表示されます:

今回の改善にはStreamline Iconsを使いました :)
プロジェクト的な動作が加わったノートブック
デベロッパーのみなさんは、沢山のプロジェクトやサイドプロジェクトを抱えていることでしょう。Inkdrop v4では柔軟性が足りなかったため、また一つプロジェクトが増えるたびに、ノートの整理がやりづらくなっていました。たとえ沢山のノートブックやタグやノートを作ったとしても、Inkdropは常にあなたの日頃のハックの努力をメモできる場所でなければなりません。その実現に向けて、今回のアップデートでは以下の新機能がサポートされました:
- ノートのピン (pin notes to the top)
- 畳まれた親ノートブックで子ノートも表示
- ワークスペース・ビュー
- 各ビューにおけるソート順序の記憶
- ナビゲーション・ステートの記憶
以下で詳しくご説明します。
ノートのピン
Inkdropにて、どのノートで作業していたか覚えておくのに苦労する事が時々あるでしょう。 “Pin to Top”機能は、特定のノートをノート一覧の上部に据え付ける事ができます:

畳まれた親ノートブックで子ノートも表示
v5以前では、選択したノートブックは基本的にその直下にあるノートしか一覧表示しませんでした。沢山の子/孫ノートブックがある場合、そのプロジェクトの中身を縦断的に素早く把握したくても出来ませんでした。Inkdrop v5では選択ノートブックがサイドバー上で畳まれた状態の時、その子ノートも一覧に含むようになりました。以下をご覧ください:

サイドバーのノートブック右に表示されているノート数表示も、畳む/展開の状態に応じて変化していることに注目してください。
ワークスペース・ビュー
デフォルトでは、サイドバーにはデータベース内の全てのノートブック、ステータスとタグが表示されています。それらは一緒くたになっていて、どのプロジェクトに関する情報か見分けるのが難しい状態です。今作業しているプロジェクトに関する情報だけを表示したいという事があるでしょう。ワークスペース・ビューはサイドバーの情報を特定のノートブックに絞り込む事ができます:

各ビューにおけるソート順序の記憶
各ビュー(all/notebook/tag/status)において、ソート順序の設定が記憶されるようになりました。これでいちいちノートブック間でソート設定を切り替える必要がなくなりました。
ナビゲーション・ステートの記憶
ノートを書いている最中、他のノートを参照することが多々あるかもしれません。なので、ノートテイキングにおいてノートの検索から素早く編集していたノートに戻れる機能は重要です。以下のデモをご覧ください:

プラグイン管理GUI
プラグインはipm
コマンドからインストール出来ましたが、いちいちターミナルを開いてコマンドを実行する必要があり、あまり手軽とは言えませんでした。一部のユーザさんはこのコマンドの取り扱いに混乱している様子でした。100個以上のプラグインがある今、簡単にプラグインをインストール・アンインストール出来ることは重要です。そこで、v5ではプラグイン管理のGUIを実装しました。ターミナルを開くこと無く、プラグインを追加・削除できます:

オートアップデートにも対応したので、 ipm update
を実行する必要も無くなりました:

..and many more!
他にも沢山の改善やバグ修正があります。全て列挙するととても長くなってしまうので、詳しくはリリース・ノートをご覧ください。