Inkdropのロードマップ vol.5

Inkdropのロードマップ vol.5

Inkdropのロードマップ vol.5

個人開発者として成功し続けるための戦略

英語で先に書いてから日本語に訳しています

どうもみなさん、お元気ですか。Inkdrop作者のTAKUYAです。先月、Inkdrop v5がリリースされました。よりあなたのノートの整理を支援する新しい機能や改善がふんだんに盛り込まれました。みなさんが気に入ってくださっているのをみてとても嬉しく思います。そして今、ロードマップvol.4がついに完走を迎えました。めでたい。では早速Inkdropの未来について語りましょう。

TL;DR

  • 総売上は2,000万円を超えました
  • 僕は自分と似ている人を助けます
  • 僕はコア体験に集中します。そしてあなたの好きに拡張できるようにします
  • モバイルプラットフォームで1stクラスの体験を実現する

なかなか遠いところまでやってきました

Inkdropはロードマップを毎年アナウンスしています。今回のロードマップはVolume 5を数えます。5です!なかなかの所にまで来ました。最初のロードマップを発表したのは4年前になります。それもこれも支えて下さっているみなさんのお陰です。ありがとうございます。売上は幸いコロナ時代にも関わらず安定しており、総売上は2,000万円を超えました 🎉

Stripeのダッシュボード

その売上で開発機にMac Proを買うことが出来ました。初期の頃の事はよく覚えています — — 沢山の人が、僕が個人開発だから何年持つか分からないし信用出来ないという理由でInkdropを使いたくないと言っていました。でもご覧の通り、僕もプロジェクトも健在しています。これはInkdropが突然あなたのデータと共に消え去るなんて事はない裏付けとなるでしょう。

僕は自分と似ている人を助けます

なぜこの僕が燃え尽きずにこのプロジェクトを何年も続けられたかというと、その大きな理由はメインのターゲット層に大きく関係しています。僕は自分と似た人に向けて作っています — — Markdownをプレーンテキストで書き、個人のメモ用途で使いたい人たちです。つまり、これはとてもニッチな製品です。万人向けでは決してありません。なので、今まで沢山の機能要望に対してノーと言い続けてきたため、沢山の人がInkdropから去りました。自分が使いもしない機能を追加する代わりに、コアの機能の改善に集中して取り組み続けてきました。これが走り続けるために最も大事なファクターです。売上を倍にするため、ターゲット層を広げることも出来たでしょう。例えば、Markdownとは何かすら知らない初心者のプログラマーは世の中にごまんといます。彼らをターゲットにするのは確かに良さそうです。でももしやったら、すぐさま何が分からないのか分からないような問い合わせに埋もれるのは間違いありません。それらに答えようとしても、彼らは僕の言ってる事がさっぱり分からないでしょう。謎の理由で怒った人たちの対応にも追われることになります。そうして僕は疲れ果てて、開発の時間をなんとかこじ開けるために、ユーザサポートを任せる人を雇う事になります。しかしそれでは解決しません。サポートチームの人材を教育し、マネージメントする必要が生じます。そして倍増したはずの売上は彼らの報酬に消えます。この道を辿らなくて本当に良かった。僕は小さくある事を愛しています。小さいという事は、自由な事です。

つまり、僕は万人を喜ばせる事はしません。それが走り続けるために重要な事です。でも、あなたの声は喜んで聞きます。過去のリリースノートをご覧ください。各リリースで、コントリビュートして下さった人をクレジット記載しています。ご覧の通り、多くの追加された機能と修正された問題は、ユーザの皆さんからリクエスト・報告いただいたものです。それはInkdropがあなたと共に進化してきたという意味です。僕は全てを把握している訳ではありませんから、あなたのフィードバックはいつも僕に考えさせ、新しいアイデアを与えてくれます。最初は機能要望にノーと断っても、他の人からも同じ要望を受け続ければ、再検討します。なので、ぜひ遠慮せずにあなたの考えを聞かせてください。いつもフィードバックありがとうございます!

僕はコア体験に集中します。そしてあなたの好きに拡張できるようにします。

機能要望は当初から変わってきています。v5にもなり、基本的にノートアプリとして基本的に必要な機能は揃いました。ユーザさんがそれらに満足しているからか、最近では特定の用途に特化した提案をしてくる傾向にあります。それは僕が正しい問題に取り組んできている事を示します。それらの正しい問題に取り組めば取り組むほど、人々はユニークなアイデアを思いつくようになります。もしアプリが正しい問題を解決していなければ、あなたはアイデアを提案する前にとっくに使うのをやめてしまっているでしょう。しかしながら、一部のアイデアはアプリの基本コンセプトに影響を与えるため、残念ながら受け入れられません。同時に、僕らには沢山の個人的好みとユースケースがあることも理解しています。そこでこれらの要望に対しては、プラグインで実現できないかまず考えます。Inkdropは様々な機能が実現できるパワフルなAPIを提供しています。プラグインの数は既に100個を超えました。素晴らしい。彼らの貢献のお礼にプラグイン開発者ライセンスを提供しています。なので、僕は特定のユースケースのための機能を付けるのではなく、パワフルなAPIを提供する事に集中します。v5では、これまでCLIでしか出来なかったプラグインのインストールをもっと手軽にできるようにGUIを備えました。

一方で、このようにアプリをシンプルで簡潔に保とうと努力していますが、既に一部の人たちは本アプリが「いろいろ出来すぎる」と言っています。これにはちょっと同意します。更なる機能の対応は、必ずしもすべての人にとっていいニュースとは限りません。僕はこのアプリをAdobe製品のように勉強しなければ使えないような膨れ上がったものにしたくありません。最良のユーザ体験とは、ユーザがドキュメントを読まなくても使える事です。

という訳で、僕はコア体験に集中します。そしてみなさんが自由に拡張できるように配慮します。

モバイルプラットフォームで1stクラスの体験を実現する

オーケー、では僕はこのロードマップでどんなコア体験に取り組むのでしょうか?それはモバイル版です。これまでも各ロードマップでモバイル版の改善を掲げて取り組んできましたが、その完成度はデスクトップ版と比べてもまだまだ劣っています。iOSとAndroidの両方において、パフォーマンスや編集体験に深刻な問題が未だにあります。それらの問題を解決して、モバイル版でのノートの読み書きをもっと快適にしたいと思います。では行きましょう。

E2EEでの画像読み込みパフォーマンスを改善

モバイル版はReact Nativeで開発されています。そのお陰でデスクトップ版とJavaScriptの大部分のコードベースを共通化出来ています。個人開発者として、それはモバイル版を素早く開発するには素晴らしい恩恵でした。しかしながらReact Nativeも銀の弾丸ではありません。画像や暗号といったバイナリ処理にはめっぽう弱いという点があります。例えば、PouchDBをハックしてRNで画像の添付を取り扱えるようにしました。更に、RNはNodeJSにある crypto のようなモジュールは提供しません。そのため、モバイル版でEnd-to-End暗号化に対応するためにreact-native-cryptoという pbkdf2 のような暗号系関数をshimしてくれるライブラリを使わざるを得ませんでした。それは全てJavaScriptで実行されるため、一定量のデータを取り扱うにはあまりパフォーマンスの点でよくありません。これらのRNの弱点はパフォーマンスにおいて以下のような問題を引き起こしています:

もし大きな画像をノートに添付していた時、その読み込みはとても時間がかかるか、最悪永遠に読み込まれません。その場合悪いことに、JavaScriptのメインスレッドをブロックするので、アプリそのものが反応しなくなります。

より高速かつ非同期的な画像と暗号データの処理の実現に向けて、ネイティブモジュールを作って解決したいと思います。そしたらreact-native-crypto の依存も無くせるかもしれませんし、アプリの内部がよりシンプルになります。

iOSとAndroid向けのネイティブなMarkdownエディタの実装

モバイル版の現在のMarkdownエディタの実装はWebView内でCodeMirrorを動かして実現しています。CodeMirror自体が苦しんでいるように、WebViewはタッチスクリーン上でのエディタの提供には適していません。僕はAndroidとiOS上でCodeMirrorを動かすためにいくつかの即席パッチを当てています。それでも尚、以下のような問題に直面するかもしれません:

残念ながら、上記の問題は現在のWebベースの実装では解決できません。いろんなエディタライブラリをiOSとAndroid上で試しましたが、どれも基本はPC向けに設計されているため、上手く動きませんでした。その上、Androidはauto-correctなどの入力補助機能を制御するためのソリッドなAPIを提供していません。AndroidはCodeMirrorのステートを頻繁に荒らします。そのため、モバイルデバイス上での編集体験はひどいものとなってしまっています。

新バージョンのCodeMirrorが目下開発されており、彼らはタッチスクリーンもサポートするよと目標を掲げていますし、僕らはそれに期待することも出来るでしょう。しかしながらプロジェクト開始から既に2.5年経っており、ETAは未だ不明です。Xi Editorの開発者が回顧するように、コードエディタを作るのはめちゃくちゃ大変で時間がかかります。

CodeMirror.nextはまだまだ初期開発段階のようなので、別の道を検討したいと思います。それはネイティブのMarkdownエディタを開発することです。はい、それは大きなチャレンジになるでしょう。上手くいくかどうか分かりません。でも聞いてください、その実現のために良さそうなアイデアがあります。こちらが今考えているネイティブエディタのアーキテクチャです:

iOSでは UITextView 、Androidでは EditText をベースにして、バックエンドとしてCodeMirrorを動かしてシンタックスのハイライトや入力補助を行うというアイデアです。このアイデアはHighlightrというコンポーネントを見つけた時に思いつきました。これはhighlight.jsをコアに使っています:

CodeMirrorの方がIncremental Parsingに対応しているのでより良く動くはずと考えます。現行のモバイル版にてダーティ・ハックを既にしているため、CodeMirrorの内部構造は既に少し理解しています。HighlightrはHTMLをNSAttributedString に変換していますが、それはパフォーマンス面であまり良くないでしょう。CodeMirrorをバックエンドにすることで、シンタックスのメタデータをより効率的かつインクリメンタルに取得できます。その方が良さそうです。

これはReact Nativeのコミュニティへ恩返しをする良い機会だという事に気付きました。彼らも同様にソリッドなコードエディタコンポーネントを求めているはずだからです。Markdownだけでなく、HTML, CSS, PythonやRubyなどを書く用途にも使えます。もしこの試みが成功してオープンソースとして公開したら、コミュニティからそれなりの注目が得られるのではないかと思っています。それはInkdropのマーケティングとしても良さそうです。

AndroidのEditTextとiOSのTextKitをいじって、軽いPoCを作り、いけそうだと判断しました。トライしてみましょう。

シェアターゲット&シェアエクステンション

僕らはウェブ上やアプリ内で様々な情報のピースを見つけます。それらを素早くストックできることは重要です。その実現には各プラットフォームでネイティブ実装が必要となります。ただし、ウェブクリッパーではない事に注意してください:

PDFとHTML形式のエクスポート

よりよいエクスポート対応は前回のロードマップに掲げていました。上記のようにネイティブエディタの実装を検討していたので、これはまだ対応していません。今回のネイティブ実装が上手くいったら取り組みます。

ノート内検索

長いノートの閲覧に必要です。

キーバインディング

ハードウェアキーボードを使っている場合、キーバインディングは素早いアクションの実行が出来るため、生産性の向上に大きく寄与します。しかしRNはキーバインディングに対応するAPIを持っていないため、各プラットフォームに特化したネイティブ実装が必要になります。

APIの改善

Command palette

Inkdropには沢山のコマンドを備え、キーストロークに割り当てて使うことが出来ます。でもAtomやSublime Textのようにコマンドパレットがあれば、どんなコマンドがあるのか見つけやすいですし、キーマップを設定しなくてもすぐに試すことが出来ます。

Let’s make it together

最後までお読みくださりありがとうございます。Inkdropをより洗練し成熟させていくためには、あなたのサポートが必要不可欠です。ぜひロードマップに関するあなたのご意見をお聞かせください。

Read more

ノート駆動AIコーディング術の提案

ノート駆動AIコーディング術の提案

どうもTAKUYAです。みなさんはAIエージェントを普段のコーディングで活用されていますか。ちょっと面白いワークフローを思いついたのでシェアします。それは、ノート駆動のエージェンティック・コーディング・ワークフローです。最近Claude Codeのプランモードを使っていたら、ターミナル内で生成されたプランを読むのが辛かったんです。それで、じゃあMarkdownノートアプリであるInkdropをプランの保存先バックエンドとして使えば解決するんじゃないかと思って、 試してみました。こちらがそのデモです(英語): こちらがClaude Codeの設定ファイル群です: GitHub - inkdropapp/note-driven-agentic-coding-workflow at devas.lifeComplete Claude Code configuration collection - agents, skills, hooks, commands, rules, MCPs. Battle-tested configs from an Anthropic hackathon w

By Takuya Matsuyama
2025年個人開発活動の振り返り

2025年個人開発活動の振り返り

どうもTAKUYAです。もう1月も半ばに差し掛かっているけど、2025年の自分の活動の振り返りをしたい。去年を一言で言うなら、本厄を満喫した年だった。 厄年とは、人生の節目にあたって、体調不良や災難が起こりやすいと経験的に言われる年齢のこと。数え年で42歳、確かにもう若さに任せた事は出来ないなと痛感した年だった。(ところであなたの国ではこのような年はありますか?) 夏に体調を崩して2~3ヶ月動けなくなった 暖かくなり花粉が飛び出した頃に、持病のアトピーが悪化しだして、まともに生活出来なくなってしまった。酷さで言うと、2019年に脱ステした時と同じぐらい。 脱ステに無事成功したから、この地獄は二度と味わうことはないだろうと高を括っていたが、まさか7年後にまた味わうとは思わなかった。当時の独身時代と違い、妻も子供もいる中で、周りに多大な迷惑をかける事となった。夏の子供との思い出が全く無い。悲しい。 現在はQoLもほとんど元の状態まで復活できた。写真を撮って症状の変化を記録したので、機会があればシェアしたい。食事療法など色々試したが、結局歩くのが一番自分に効いた。それ以来、一日一万歩

By Takuya Matsuyama
書いて、歩け!なぜノートアプリはシンプルで充分なのか

書いて、歩け!なぜノートアプリはシンプルで充分なのか

どうもTAKUYAです。今回はノートやメモから新しい発想を生むための考え方についてシェアします。 自分はシンプルさをウリにした開発者向けのMarkdownアプリInkdropを作っています。なので、どうしても「ノートアプリの作者」としてのポジショントークが含まれてしまいますが、逆に言えば、「ノートアプリを約10年間作り続けてきた人間が、どうやってアイデアを生み出しているのか」 という実際的な体験談として読んでもらえれば幸いです。 結論から言うと、僕は「アプリ上でノート同士を連携させる必要はない。繋げるのはあなたの脳だ」と考えています。本稿では、ノートアプリの機能に溺れずユニークなアイデアを考え出すために僕が実践している事をシェアします。 TL;DR * ノート整理に時間をかけるな。グループ化で充分だ * すごい人はアイデアが「降りてくる」のを待つ * プログラミング × 料理動画 という有機的な掛け合わせ * ノートは「忘れる」ために書く * 歩け! ノート整理に時間をかけるな。グループ化で充分だ 巷ではZettelkastenなどが流行っているようですね。これ

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

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

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

By Takuya Matsuyama