Inkdrop のロードマップ vol.3

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のモジュールとして実装されています。しかしそこにはいくつかの問題があります:

  1. インデックス化が遅い。モバイルで特に顕著です。PouchDBとSQLite3の間に大きなオーバヘッドがあるためです。沢山ノートがある場合、インデックス構築にとても長い時間がかかってしまっています。僕は待たされるのが嫌いです。
  2. マッチングがあいまいで不安定。一貫性のないマッチング動作によってノートの発見を阻害しています。

これらの問題に対処するため、現在の実装を一旦捨てて、効率化と一貫性を念頭に置いて構築し直したいと思います。React NativeとElectronの両方で動くように作るのは結構難しそうですが。

嬉しいことに、すでに沢山のプラグインがユーザのみなさんによって作られています。 Inkdropはデベロッパー向けのアプリです。他の洗練されたエディタと同様に、できるだけ自由にカスタマイズできるように高い拡張性を備えることは重要です。しかしながら現在のAPIドキュメンテーションは不完全で、作者である僕の助けを借りなければプラグインを作成することが難しい状況です。

新しいデスクトップ版もまたパワフルなAPIを備える予定です。その拡張性を出来るだけスムーズに理解できるように、しっかりとしたドキュメンテーションを用意したいと考えています。

Markdownは画像サイズの調整に標準で対応していません。ノートをHTMLビューで見た時、画像が大きすぎたり小さすぎることはよくあるものです。その悩みを解決したい。

この問題に対してはいくつかの解決案があります:

  1. プラグインで画像サイズを指定できるようにMarkdownを拡張する
  2. HTMLのimgタグを使う
  3. プレビュー画面でサイズを調整できるGUIを追加する
  4. #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">![img](inkdrop://file:-58zRhql1#inkdrop-image-small)</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の発展にご期待下さい!

Read more

なぜ体を壊してまで個人開発を頑張るのか?自尊心の欠如や過集中癖と向き合う

なぜ体を壊してまで個人開発を頑張るのか?自尊心の欠如や過集中癖と向き合う

どうもTAKUYAです。最近、個人開発を頑張りすぎて体調を崩してしまいました。アトピーが猛烈に悪化して、QoLが著しく下がってしまいました。まだ療養中ですが、毎日1万歩以上歩いて、徐々に回復しつつあります。 この過ちを繰り返さないためにも、自分は一体何が原因で頑張りすぎてしまうのか?という事について深堀りして考えてみたいと思います。また、個人開発におけるメンタルヘルスはあまり語られていないトピックだと思います。本記事が、同じように仕事を頑張りすぎてしまう人の助けになれば幸いです。 TL;DR * なんとなく続けていたソフト開発が自分を救った * 原体験が歪んだモチベーションを生んでしまった * 親が引くほどの過集中癖がある * 生得的な直せないバグと考えることにする * アプリの成功に関係なく、自分をあるがままに受け入れる * 挫折しないのは、なんだかんだで前向きだから * ユーザさんから「休め!」と叱咤された * 人生は長い。個人開発なんかで死ぬな 自己の原体験について振り返ってみる 個人開発だけで生活するようになって、かれこれ8年ぐらいが経ちます。こう

By Takuya Matsuyama
ユーザサポートの問い合わせを装った攻撃が怖すぎた

ユーザサポートの問い合わせを装った攻撃が怖すぎた

どうもTAKUYAです。個人開発をしていてアプリの知名度が上がってくると、作者個人(あるいはサイト管理人)を狙った攻撃というのをたまに受けます。つい先日も、怖すぎるメールを受け取ったのでシェアします。 件名: Cookie consent prevents platform access Hello, I cannot access use the store. The cookie consent notice keeps appearing and nothing happens once I approve or try to close it, so I’m unable to interact with the website. Please provide guidance on

By Takuya Matsuyama
万年ペーパーの自分が車の運転を楽しめるようになった理由

万年ペーパーの自分が車の運転を楽しめるようになった理由

どうもTAKUYAです。大学の入学前に免許を取って以来ずっとペーパードライバーで、都市生活では出来る限り運転は避ける生活を送っていた。事故を起こせば人を◯してしまう可能性もある代物を日常的に運転するなんて考えられなかった。 そんな自分に転機が訪れたのは、結婚して大阪に戻った事と、子供ができた事、そしてアウトドアに興味を持った事だ。大阪近辺だと箕面とか野勢、神戸、丹波篠山などが日帰りでドライブしやすい距離だ。それで、恐る恐るタイムズのカーシェアで時々ではあるが運転するようになった。 他の車も生きた人間が運転しているという驚き まず運転していて気づいたのは、他の車にも生きた人間が運転していると言う点だ。そんなのは当たり前だろと思うかもしれないが、結構新鮮な発見だった。Grand Theft Autoなどの現代をモチーフにしたゲームをプレイすれば分かるが、NPCの車の動きは鈍臭いのでガンガンぶつかる。プレイヤーの進行を予測した動きなどしないからだ。 しかし現実では相手も事故りたくないので、お互いに動きを読み合い、譲り合って運転する。ルードな運転手もたまにいるものの、どちらかがよっぽ

By Takuya Matsuyama
禅的思考: なぜInkdropはMarkdown独自拡張をしないのか

禅的思考: なぜInkdropはMarkdown独自拡張をしないのか

InkdropはMarkdownのノートアプリですが、Markdownの独自拡張は「絶対にやらない」と決めていて、それがアプリの哲学になっています。 Markdown(厳密にはGitHub-flavored Markdown)の強みは、ソフトウェア業界標準で広く使われてい緩い文書フォーマットという所です。 アプリの独自記法を加えてしまったら、あなたの書いたノートはたちまちそれらと互換性がなくなります。 「独自記法を加えた方が便利な機能が付けられるだろう」と思うかもしれません。もちろん実際Markdownは完璧な書式ではないため、必要な場面はいくつかあります。例えば画像のサイズ指定方法が定まっていない、など。それでも自分は、ノートの可搬性を第一にしてきました。その裏には禅にまつわる哲学があります。 日本の文化は周りの環境と対立するのではなく、溶け込もう、馴染ませよう、共生しようとする傾向があります。窓の借景、枯山水、建築の非対称性、茶室のシンプルさ、侘び寂びなどあらゆるところで見られます。 絵画における「減筆」の手法を例にとって説明します。 これは、描線を最小限に抑えながら絹や紙の

By Takuya Matsuyama