Inkdrop のロードマップ vol.3

Inkdrop のロードマップ vol.3
今後予定している抜本的改善や新しい機能など
この記事は “The Roadmap of Inkdrop vol.3” の日本語訳です。
こんにちは、TAKUYAです。MarkdownノートアプリInkdropを一人で開発運営しています。
最近、前回のロードマップのタスクをすべて完了しました。
モバイル版の再構築など、なかなかにハードな道のりでした。モバイル版はそのお陰でノートの閲覧や編集がとても快適に使えるようになりました。気に入って下さっているようでとても嬉しいです。ちなみに、その開発で得た知見はこちらの記事にまとめましたのでよろしければ御覧ください。React Nativeの開発に役立つと思います。
そして、ロードマップには無かったのですが、同期機能に関して重要なアップデートがありました。それはコンフリクトしたノートの自動コピーです。最も最悪なユーザ体験はノートのデータが失われることです。この改善によってより安心してアプリが使えるようになりました。この機能のバグ修正に熱心に協力してくださったOtawaraさんやMeoさんに感謝します。ありがとうございます。お陰様で動作が安定しました。
さて、これまで沢山の改善が加えられてきましたが、Inkdropはもっと先へ進みます。フォーラムではその事についてユーザのみなさんからいろいろ意見を仰ぎ、アイデアを頂きました。では、Inkdropの未来について語りましょう。

その前に、一つお話したいお知らせがあります。
このアプリは大手のメディアに一度も取り上げられることなく、ゆっくりと成長してきました。ユーザの増加は口コミを中心にもたらされてきたのです。それは安定したサービスの提供と迅速丁寧なサポートを可能にしました。もしスタートアップのように急激な成長を追い求めていれば、一人ではとても扱えずサーバは不安定、ユーザサポートはお粗末な事になっていたでしょう。
そして今、継続課金ユーザは600人に達しようとしています。だいたい月50人くらいのペースで増えています。目標である1,000人が徐々に見えてきました。総売上はすでに300万円を超えました。お陰様で、当面の生活費はそれほど気にせず、アプリの開発に集中できるようになりました。あと開発ツールや運用ツールにもお金をかけられるようになったので、作業が更に効率化できそうです。ありがとうございます。

では本題に入りましょう。今回も長い旅になりそうです。
新しいモバイル版の紹介記事にて言及した通り、デスクトップ版は根本的な再デザインが必要でした。今後も安全性や安定性、シンプルさ、簡潔さを保ちつつ開発を長期的に継続していくためです。なぜならアプリのスタックが古くなりつつあるからです。たとえばReactは未だにv14を使っています。いくつかのライブラリは既にdeprecateされています。これらを最新版にキャッチアップするには、breaking changeが多すぎます。また、2年前の僕にとってReactでの開発は初めてでしたが、今ならもっとうまくやれるでしょう。
新しいコアモジュール群はJavaScript + Flowで書き直されテストが加えられました。これらのモジュールはデスクトップ版(Electron)とモバイル版(React Native)間で共用されることを前提としています。ここでデスクトップ版と統合したいと思います。
現在データの暗号化はInkdropのサーバ上で行われます。僕はただのインディーデベロッパーなので、僕の運用するサーバが完全に安全だと信じるのは難しいでしょう。また、僕がみなさんのデータを盗み見していないことを証明するのは構造的に不可能です。そのためユーザ自身で用意したCouchDBと同期できる機能をサポートしています。ただ、それは明らかにお茶を濁しているだけで、本質的な問題を解決していません。
クラウド同期に標準対応しているノートアプリとして、セキュリティは最上級の問題です。ずっと、どうすればInkdropにEnd-to-End暗号化(端末上で暗号化すること)を導入できるか考えていました。これはAppleのiCloudでも採用されている技術で、もはやデファクトスタンダードなセキュリティ技術といえるでしょう。なのでサービスとしての要求基準を上げる必要があります。
透明性の担保として、開発した暗号化モジュールの一部はオープンソース化しようと考えています。コードレベルで安全性を確認できます。また、もしInkdropのクライアントを開発するときにも再利用できます :)
技術的に難しいものではありますが、やるべき時です。
ノートが増えるにつれて、検索機能の重要性は増します。
現在の検索UIは冗長な構文や小さなテキストボックスのせいで結構使いづらいです。デフォルトの検索条件である -status:completed -status:dropped は長すぎるのでなんとかして短く表示したいところです。クエリが長くなれば折り返して常に全容が見えるようにすべきです。また、検索条件の入力補助としてオートコンプリートがあると便利です。
検索アルゴリズムはTF/IDFによる実装で、PouchDBのモジュールとして実装されています。しかしそこにはいくつかの問題があります:
- インデックス化が遅い。モバイルで特に顕著です。PouchDBとSQLite3の間に大きなオーバヘッドがあるためです。沢山ノートがある場合、インデックス構築にとても長い時間がかかってしまっています。僕は待たされるのが嫌いです。
- マッチングがあいまいで不安定。一貫性のないマッチング動作によってノートの発見を阻害しています。
これらの問題に対処するため、現在の実装を一旦捨てて、効率化と一貫性を念頭に置いて構築し直したいと思います。React NativeとElectronの両方で動くように作るのは結構難しそうですが。
嬉しいことに、すでに沢山のプラグインがユーザのみなさんによって作られています。 Inkdropはデベロッパー向けのアプリです。他の洗練されたエディタと同様に、できるだけ自由にカスタマイズできるように高い拡張性を備えることは重要です。しかしながら現在のAPIドキュメンテーションは不完全で、作者である僕の助けを借りなければプラグインを作成することが難しい状況です。
新しいデスクトップ版もまたパワフルなAPIを備える予定です。その拡張性を出来るだけスムーズに理解できるように、しっかりとしたドキュメンテーションを用意したいと考えています。
Markdownは画像サイズの調整に標準で対応していません。ノートをHTMLビューで見た時、画像が大きすぎたり小さすぎることはよくあるものです。その悩みを解決したい。
この問題に対してはいくつかの解決案があります:
- プラグインで画像サイズを指定できるようにMarkdownを拡張する
- HTMLのimgタグを使う
- プレビュー画面でサイズを調整できるGUIを追加する
- #inkdrop-image-* のようなURLハッシュを識別する
1番目はシンプルですがMarkdownのシンタックスを拡張したくありません。他のツールとの互換性が失われるからです。2番目はシンタックスを壊しませんが、HTMLをわざわざ書くのは面倒です。3番目はWYSIWYGっぽい機能です。プレーンなテキストエディタにはそぐわないでしょう。
なので4番目のソリューションを採用したいと思います。例えば、以下のように画像を記述します:
<span id="58b2" class="rd qe io rq b gz sb sc m sd se"></span>
アプリはURIのハッシュ部分を認識します。この場合 #inkdrop-image-smallです。それに対して以下のようなCSSを適用します:
<span id="24fa" class="rd qe io rq b gz sb sc m sd se">img[src*="#inkdrop-image-small"] {<br></br> max-height: 10em;<br></br>}</span>
これで小さな画像表示が得られます。もしピクセルパーフェクトな表示を得たい場合は、画像をクリックしてください。フルウインドウのプレビューが表示されます。
Samantha と Sceptic、アイデアありがとう!
Markdownで直にテーブルを記述するのは結構大変ですよね。なにかテーブルを生成を支援する機能が欲しいところです。また、ショートカットでカーソル位置の前/後に列や行を追加できたり削除したり出来るとなお便利です。ただし、TyporaのようなWYSIWYGスタイルのテーブルエディタは実装しません。
Inkdropが様々な国の人々に使われていることは、僕がとても誇りに思っている事実の一つです。しかし現在のスペルチェッカーは英語にしか対応していません。他の言語への対応はそこまで難しくありませんので、対応したいと思います。
Cornelius、提案ありがとう!
お読み下さりありがとうございます。
お気付きかもしれませんが、今回のロードマップは新機能の追加よりもコア機能の改善にフォーカスしています。より永く使って頂けるように、シンプルでクリーン、安定かつ安全なサービスを提供するためです。
でもここで挙げたのはあくまで大きな変更のみです。これまでのように、予告なく新機能や改善が加えられることもあります。なのでぜひ遠慮なくご意見をお聞かせください。僕はいつでもあなたのご意見を歓迎します。
いつもバグ報告や機能要望ありがとうございます。これからのInkdropの発展にご期待下さい!