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

貫禄を捨てて愛嬌で生き延びろ!40代オッサンの生存戦略

貫禄を捨てて愛嬌で生き延びろ!40代オッサンの生存戦略

どうもTAKUYAです。 つい先週(11月19日)に誕生日を迎え、41歳になりました。40代と言うのは若い頃には想像もしなかった年代で、どう生きれば良いのかというイメージがあまり具体的に湧かない、曖昧な年齢ではないでしょうか?自分の父親を想像するも、日中はいつも仕事でいなかったのであまり参考になりません。 自分は個人開発で生計を立てていて20代、30代で積み上げて来たものが上手く実を結んだおかげで今の生活があります。育児にも、いわゆるサラリーマンよりかは柔軟に参加できていて、子供との時間も沢山取れています。ママ友も出来ました(迷惑かけっぱなしですが)。 本記事では、そんなライフスタイルを送る自分が40代で大事にしたいことについて書きたいと思います。タイトルにもある通り、結論から言うとそれは「愛嬌」だと思います。以下、中年男性の愛嬌の重要性について説明します。 TL;DR * 「貫禄が出てきたね」と言われたら注意 * 笑顔を作れ。オッサンがムスッとしてたら普通に怖い * 謙虚に振る舞え。実績を積むと周りが萎縮する * ギャップ萌えを活用しろ 「貫禄が出てきたね」と言わ

By Takuya Matsuyama
過集中を避けるための働き方とルーティン(二児の父ver.)

過集中を避けるための働き方とルーティン(二児の父ver.)

どうもTAKUYAです。 先日書いた通り、最近個人開発を頑張りすぎて体を壊してしまいました。 その原因の一つが過集中癖です。自分はもともと何かに集中すると周りが見えなくなる傾向があり、それがたまに私生活にも影響を及ぼします。同じ失敗を繰り返さないためにも、ちょっと働き方を再設計したいと思います。 働き方に対して他人の指摘をアテにしない 自分のようなフリーランサーまたは自作サービスで生計を立てている人は、時間の使い方を自分で自由に決められます。その反面、どこまでも極端な働き方が出来てしまい、それを指摘したり止めてくれる人がいないという欠点もあります。自分には妻がいますが、全く違う業界なので自分の作業ペースがどのようなものか具体的に把握できません。 「疲れた!」と言えば「休んだら?」と言ってくれますが、働き方やペース配分などにまで口は出しません。なので、他人のストップサインはアテに出来ません。 (心理カウンセラーの可能性を別途検討中) 最近子供が生まれたので厳密なルーティン実行は出来ない 一日を時間単位・分単位で区切ってルーティンを組むのは気持ちがいいですよね。僕もそうしたい

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

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

どうも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