Inkdrop のロードマップ vol.4

Inkdrop のロードマップ vol.4
エクスポート機能の強化、ノートブックのプロジェクトライクな動作、モバイル版のプラグイン対応など
更新: 新しいロードマップはこちら
English version is available here.
どうもTAKUYAです。
Inkdropはクロスプラットフォームで同期するMarkdown専用ノートアプリです。つい先日までvol.3のロードマップに取り組んでいましたが、ついに完走しました🎉 今僕らは、より永く続く開発に向けてモダンなライブラリを使ってイチから作り直したv4を手にしました。 (v4の新しい点についてもしまだご存じない方は、こちらを参照ください) この取り組みが本プロジェクトの継続性を高める大事なステップになると僕は信じています。このv4のローンチに併せてウェブサイトをリデザインしたのですが、この作業はアプリのコンセプトについて見つめ直すいい機会になりました。ですので、ロードマップの話に入る前に、まずは本アプリのコンセプトについて改めてお話したいと思います。どうぞお付き合いください。
Inkdropの課金ユーザが1,000人を突破しました!
この話を最初にさせてください。自分がこのプロジェクトを始めた当初、1,000人の顧客を集めることをゴールに掲げました。そして現在は1,200人に到達しました。本当にありがとうございます!この目標を達成した事により、新規顧客の獲得を焦るあまり大事な既存顧客から注意を背けてしまわないで済みます。そしてもっと広い視野をもって長期的な戦略を立てて行動できるようになりました。僕は1人でやっていますので、ユニコーン・スタートアップのように指数関数的成長は要りません。僕はこのサービスを「より大きく」ではなく「より良く」していきたいと考えています。ぜひ一緒にInkdropを育てて行きましょう!
“Organizing Markdown notes made simple”
Markdownノートの整理をシンプルに。
これがウェブサイトで掲げているスローガンです。つまりInkdropはあなたのMarkdownノートの整理をお手伝いすることで、日々のハッキング作業においてメモを快適に取れるようにし、生産性を高めます。これがInkdropのコア・コンセプトです。
僕がこのアプリを作った最も大きな理由は、自分自身が複数のデバイス・コンピュータ間でノートを整理するのに困っていたからでした。最初のベータ版をリリースした時、沢山の人が僕と同じ悩みを抱えている事を発見しました。そこで、安全でシームレスなデータ同期機能と、Markdownノートの整理を支援する機能に集中して取り組む事に決めました。そして今、Inkdropは僕のほとんどのかゆい所に手が届くようになりました。これからも同じ方向性で進んでいきます。つまり、チーム向けの機能やWYSIWYGエディタなどは今後も対応しませんし、このアプリは引き続きデベロッパ向けであり、マス市場は狙いません。
では、Inkdropがここから更にどのようにMarkdownノートの整理を支援していくのか、お話しましょう。
エクスポート機能の強化
Markdownは規格化されたプレーンテキストのフォーマットです。企業独自のシステムはもとより、World-Wide-Webにすら依存しません。その読みやすく書きやすいシンタックスによって、今日ではMarkdownは様々な目的で利用されています。ドキュメント作成、ブログ執筆、そしてもちろん、ノートテイキングなど。例えば、Gatsbyのような静的サイトジェネレータを使えば、Markdownファイルからウェブサイトを構築できます。Markdownが .md
のファイル形式としてある時、Markdownのポータビリティを最大限に活用することが出来るのです。
InkdropのMarkdownはプラグインでシンタックスを独自に拡張したりしない限り、CommonMarkの規格に互換性があります。それによって、あなたのノートは様々なツールや場所で再利用できます。しかしInkdropのエクスポート機能はそれをするためにはまだ不十分です。現状では、単一のノートを各フォーマットで出力するか、すべてのノートを一括で .md
形式で出力する事しか出来ません。つまり、具体的には以下に挙げる機能が足りていません:
- ノートブックごとに出力
- 柔軟なディレクトリ構造とファイル名パターン
- YAML frontmatterの対応
これらの機能は、ノートをただInkdropのデータベースに格納しておくのではなく、様々な用途で活用できるようにするでしょう。考えただけで楽しいですね!
よりプロジェクトっぽい挙動をノートブックに加える
Inkdropの開発を続けるに従って、一部の人たちがノートブックに対してプロジェクトのような振る舞いを求めている事に気が付きました。具体的には以下の機能要望を受けました:
- Pin notes to top on note list
(特定のノートを一覧の上に固定したい) - Save/remember sort & order settings per notebook
(ノートブックごとに並び替え順序を記憶してほしい) - Finding sub-notes in parents folder
(親ノートブックからでも子ノートブックのノートを一覧してほしい) - Display sub notebooks on notebook filter menu on sidebar
(サイドバー上のノートブックフィルターメニューに子ノートブック一覧も表示してほしい)
これらの要望は別々に見えますが、共通点があります: 彼らはワークスペースを求めています。正直なところ、僕は当時これらの機能に必要性を感じなかったのでお断りしました(それはアプリを安定かつシンプルに保つためには重要な事です)。しかし僕自身がInkdropをより多くの目的に使うようになるにつれて、それらの必要性を理解するようになりました。それらは複数のプロジェクトにおいてノートの整理を手助けしますし、上記で述べたアプリのコンセプトにも合致します。Inkdropは何年間も使えるものであるべきです。あなたは年月を経て多くのプロジェクトを手掛けるでしょう。これらの機能に対応すれば、Inkdropはより長期の利用に耐えうるようになります。
実装面では、データベースの仕様に大きな変更を必要とするので、少し時間がかかりそうです。しばらく調査した結果、Androidの対応が一番大変そうです (いつも通り😂)。なぜならFTS5がAndroidビルトインのSQLite3で有効化されていないからです。最近、React Native 0.60がAndroidXベースに移行しましたが、これは朗報です。おそらく、FTS5が有効化されているsqlite-androidをアプリに組み込めるようになったはずです。もしそうでなければ、別の方法をどうにかして見つけなければなりません。
モバイル版でのプラグイン対応
去年、モバイル版でプラグイン機構を実現するためのアイデア(英語)をシェアしました。これは実現可能であることを、ノート共有機能にて検証しました。僕はmathシンタックスを共有ノートでも使えるようにしました。これは実際にブラウザでmathプラグインが動作しています。モバイル版のエディタ実装は埋め込みWebViewで動作していて、デスクトップ版と似たコンポーネント構成です。ですから、まず最初のステップとして同様にmathプラグインの対応をモバイル版に追加してみたいと思います。なぜなら、mathプラグインはInkdropにおいて最も使われているプラグインの一つだからです。次のステップで他のプラグインの対応も進めていきます。
Android版のGboard対応
GboardはCodeMirrorと相性が悪く、上手く動きません(カーソルがワープしたりする)。CodeMirrorはInkdrop内部で使っているエディタコンポーネントです。この問題を回避するためにGboardを強制的にデフォルトで無効化するようにしているのですが、これが別の問題を引き起こす結果となっています — — それは日本語が入力できなくなる事と、英語のオートコレクトが機能しなくなる問題です。とても辛いですね。CodeMirrorは目下、次のバージョン6を開発していて、それはモバイルでの動作も主眼に入れているので期待できますが、まだまだ時間がかかりそうで待っていられません。そのため、自分でどうにか解決しようとこれまでずいぶん多くの時間をこの問題に費やしてきました。そして最近ついに解決方法を発見しました。実は既に一ヶ月ほどベータ版で配信してテストしていたのですが、今のところテストに参加してくださっているユーザさんのデバイスで上手く動いている様子です。しばらくしたら公開したいと思います。