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

Inkdrop v6 Canary版リリースしました — 新Markdownエディタやその他新機能盛り沢山

Inkdrop v6 Canary版リリースしました — 新Markdownエディタやその他新機能盛り沢山

Inkdrop v6.0.0 Canary版リリースしました — 新Markdownエディタやその他新機能盛り沢山 こんにちはTAKUYAです。 v6.0.0 の最初の Canary バージョンをリリースしました 😆✨ v6では、アプリのコア機能の改善がたくさん盛り込まれています! * リリースノート(英語): https://forum.inkdrop.app/t/inkdrop-desktop-v6-0-0-canary-1/5339 CodeMirror 6 ベースの新しいエディタ フローティングツールバー v5ではツールバーがエディタの上部に固定されており、使っていないときもスペースを占有していました。 v6では、テキストを選択したときだけ表示されるフローティングツールバーに変わりました。 GitHub Alerts 構文のサポート Alerts の構文が正しい色と左ボーダーでハイライトされるようになりました。 ネストされたアラートや引用にも対応しています。 また、アラートタイプの入力を支援する補完機能も追加されました。 スラッシュコマンド 空行で /

By Takuya Matsuyama
AIのお陰で最近辛かった個人開発がまた楽しくなった

AIのお陰で最近辛かった個人開発がまた楽しくなった

AIのお陰で最近辛かった個人開発がまた楽しくなった こんにちは、TAKUYAです。日本語ではお久しぶりです。僕はInkdropというプレーンテキストのMarkdownノートアプリを、デスクトップとモバイル向けにマルチプラットフォームで提供するSaaSとして、かれこれ9年にわたり開発運営しています。 最近、その開発にClaude Codeを導入しました。エージェンティックコーディングを可能にするCLIのAIツールです。 最初の試行は失敗に終わったものの、徐々に自分のワークフローに馴染ませることができました。そして先日、アプリ開発がまた「楽しい」と感じられるようになったのです。これは予想外でした。 本稿では、自分がエージェンティック・コーディングをワークフローに取り入れた方法と、それが個人開発への視点をどう変えたかを共有します。 * 翻訳元記事(英語): Agentic coding made programming fun again 自分のアプリに技術的負債が山ほどあった ご想像のとおり、9年も続くサービスをメンテするのは本当に大変です。 初期の頃は新機能の追加も簡単で

By Takuya Matsuyama
個人開発を7年以上続けて分かった技術選択のコツ

個人開発を7年以上続けて分かった技術選択のコツ

個人開発を7年以上続けて分かった技術選択のコツ InkdropというMarkdownノートアプリを作り続けて7年になる。 お陰さまでその売上でずっと生活できている。 これまで個人開発でどう継続していくかについて「ユーザの退会理由をあれこれ考えない」とか「アプリの売上目標を立てるのをやめました」とか、ビジネス面あるいはメンタル面からいろいろ書いてきた。 今回は、技術面にフォーカスして、どう継続して開発していくかについてシェアしたい。 TL;DR * 最初はとにかく最速でリリースする事を最優先する * 迷ったら「ときめく方」を選べ * 程よいところで切り上げて開発を進める * 使っているモジュールがdeprecatedされるなんてザラだと覚悟する * 古いから悪いとは限らない * シンプルにしていく * 老舗から継続の秘訣を学ぶ * 運ゲー要素は排除しきれない 最初はとにかく最速でリリースする事を目標に技術選定する 開発計画とビジネス計画は切っても切り離せない。 コーディングに傾倒するあまり完璧主義に陥って結局リリース出来ないまま頓挫してしまう個人開発者は多い

By Takuya Matsuyama
子育て中の個人開発者の一日

子育て中の個人開発者の一日

子育て中の個人開発者の一日 どうもTAKUYAです。 久しぶりに生活まわりの事を書きたい。自分はInkdropというMarkdownノートアプリを売って生きている。 子供も無事順調に成長しており、あと数ヶ月で3歳になるというところで、イヤイヤ期もやっと終わりが見えてきた。 生活パターンもなんとなく定着しつつあるので、ここで一旦どんなルーティンなのか書き出してみる。ちなみに当方今年で40歳。 平日の1日の流れ * 06:30 妻と子供起床、朝食 * 07:10–30 俺起床、朝食 * 07:40 布団を畳んで子供を着替えさせる。妻はその間に化粧や通勤の準備 * 08:00 ストレッチと軽い筋トレ(腕立て50回、スクワット100回) * 08:10 妻と子供を見送る。15分前後瞑想 * 08:30 散歩 * 09:00 作業開始(カフェまたは家) * 11:00 昼飯 * 12:00 ダラダラする * 12:30 作業再開(だいたい家)

By Takuya Matsuyama