Inkdrop v5をリリースしました

Inkdrop v5をリリースしました

Inkdrop v5をリリースしました

より高速なデータ同期とアプリ起動、アイコンの刷新とよりシンプルになったUI、プロジェクトのような動作が加わったノートブック、そしてプラグイン管理GUIなど

英語で書いてから日本語訳しています ⇒ English version is available here.

こんにちは、TAKUYAです。本日Inkdrop v5をリリースしました。前回のアップデートから5ヶ月ぶりとなります。沢山の新機能、改善やバグ修正があります。アナウンスできてとても嬉しいです。ベータ版のテストを手伝ってくださった皆さんに感謝します。ありがとう、Andi, can_Y, ebigram, Erdem, Gustavo, James, Mike, Rael, tdudz, Zhuolun!さて、本稿ではv5の新しく加えられた変更点についてご紹介して行きます。

日本語字幕あります。CCボタンをタップ

Inkdropとは? — 4年かけて作ったアプリ

A Markdown note-taking app that syncs

偶然この記事に出会ったみなさん: はじめまして!僕はInkdropを4年間ひとりで開発しています。時が経つのは早いですね。これはプレーンテキストのMarkdownノートアプリで、macOS、Windows、Linux、iOSそしてAndroidと様々なプラットフォームで動作し、End-to-end暗号化方式で安全に同期します。最初は自分のために作りました。当時、コードの構文ハイライトやvimキーバインディング、ハック可能性などのプログラマーフレンドリーな機能を備えたEvernoteの代替アプリをずっと探していまいた。でも全然見つけられなかったので自分で作ることにしたのがきっかけです。良いノートアプリを作る旅は想像するよりも本当に険しいものでした。でも4年間耐え忍び、改善し続けました。当ブログでは開発を通して学んだことをシェアしています。個人開発のビジネスにご興味のある方はご覧ください:

去年は、技術的負債を綺麗にすべくアプリをイチから作り直すという苦行(笑)を無事やり遂げました:

今回のアップデートはこれらの積み重ねの上に乗るものです。

実は完全な独りきりの開発ではありません

独りきりで良いエディタを作るのは至難の業です。なぜならデベロッパーには数え切れないほど沢山の個人の好みや「あるといい」機能があるからです。この問題に対処すべく、InkdropではパワフルなAPIを提供して、みなさんに自由に新たな機能や見た目を追加できるようにしました。僕自身はコア機能の改善に勤しむ傍ら、ついにプラグインの数は100個を超えました!そのうち80%がユーザコミュニティ製のプラグインです。素晴らしいですね。ユーザさんが楽しみながらInkdropをハックしていて僕もとても楽しいです。プラグインはこちらから閲覧できます。

プラグインは僕が沢山のオプション機能を追加する代わりに、コアの重要な機能の改善に集中することが出来ます。なので、Inkdropではプラグイン開発者ライセンスでプラグインの開発を推進しています:

Inkdropプラグイン開発者ライセンスのご案内
プラグインを開発するとInkdropを永久無料で使えるようになります

プラグインを作れば、Inkdropを永久無料で使えるというライセンスです。

より高速な同期とアプリ起動

ではまずはv5におけるパフォーマンス改善についてお話したいと思います。

データベースのクラスタをスケールアウトしてから、データ同期が予想外に遅くなってしまいました。調査の結果、サーバ間のRTTは166msと遅く、それは各サーバが異なるリージョンで動いているのが原因でした。つまりネットワークトポロジが悪かったのです。そこでサーバを同一リージョンに移し、しかしAvailability Zoneは別々の配置にしたところ、RTTは1ms以下に改善しました。その結果、ノート同期速度は以前の3倍になりました!

アプリの起動速度も格段に良くなりました。InkdropはElectron製のアプリなのですが、以前のバージョンでは起動に4秒もかかり、とても遅いものでした。今回、v8 snapshotsを利用することでこの起動速度の改善に成功しました。以下をご覧の通り、アプリの起動は1,000ミリ秒速くなりました。起動速度が遅いとストレスですよね。今回、この問題が解決できてとても嬉しく思います。具体的にどうやって達成したのかは以下の記事に書きました:

Electron製アプリの起動速度を1,000ミリ秒速くする方法
JavaScriptの読み込みはめっちゃ遅い / require() は必要になるまで呼び出すな / V8 snapshotsを使う

以下の通り、とても速いです。

アイコンの刷新とよりシンプルになったUI

ツールバーのアイコンは今ではちょっと古い感じがしていました。昨今の高解像度なディスプレイでは、それらは少々太すぎました。その上、エディタ上のアクションボタン群は幅を取りすぎていて、小さいディスプレイをお使いの方には使いづらいという問題がありました。

そこで、アイコンを刷新し、エディタアクションボタン群を再配置して、よりモダンでクリーンにしました:

右上の「 ︙ 」ボタンをクリックすると、エディタドラワー(Editor drawer)が表示されます:

今回の改善にはStreamline Iconsを使いました :)

プロジェクト的な動作が加わったノートブック

デベロッパーのみなさんは、沢山のプロジェクトやサイドプロジェクトを抱えていることでしょう。Inkdrop v4では柔軟性が足りなかったため、また一つプロジェクトが増えるたびに、ノートの整理がやりづらくなっていました。たとえ沢山のノートブックやタグやノートを作ったとしても、Inkdropは常にあなたの日頃のハックの努力をメモできる場所でなければなりません。その実現に向けて、今回のアップデートでは以下の新機能がサポートされました:

  • ノートのピン (pin notes to the top)
  • 畳まれた親ノートブックで子ノートも表示
  • ワークスペース・ビュー
  • 各ビューにおけるソート順序の記憶
  • ナビゲーション・ステートの記憶

以下で詳しくご説明します。

ノートのピン

Inkdropにて、どのノートで作業していたか覚えておくのに苦労する事が時々あるでしょう。 “Pin to Top”機能は、特定のノートをノート一覧の上部に据え付ける事ができます:

畳まれた親ノートブックで子ノートも表示

v5以前では、選択したノートブックは基本的にその直下にあるノートしか一覧表示しませんでした。沢山の子/孫ノートブックがある場合、そのプロジェクトの中身を縦断的に素早く把握したくても出来ませんでした。Inkdrop v5では選択ノートブックがサイドバー上で畳まれた状態の時、その子ノートも一覧に含むようになりました。以下をご覧ください:

サイドバーのノートブック右に表示されているノート数表示も、畳む/展開の状態に応じて変化していることに注目してください。

ワークスペース・ビュー

デフォルトでは、サイドバーにはデータベース内の全てのノートブック、ステータスとタグが表示されています。それらは一緒くたになっていて、どのプロジェクトに関する情報か見分けるのが難しい状態です。今作業しているプロジェクトに関する情報だけを表示したいという事があるでしょう。ワークスペース・ビューはサイドバーの情報を特定のノートブックに絞り込む事ができます:

各ビューにおけるソート順序の記憶

各ビュー(all/notebook/tag/status)において、ソート順序の設定が記憶されるようになりました。これでいちいちノートブック間でソート設定を切り替える必要がなくなりました。

ナビゲーション・ステートの記憶

ノートを書いている最中、他のノートを参照することが多々あるかもしれません。なので、ノートテイキングにおいてノートの検索から素早く編集していたノートに戻れる機能は重要です。以下のデモをご覧ください:

プラグイン管理GUI

プラグインはipm コマンドからインストール出来ましたが、いちいちターミナルを開いてコマンドを実行する必要があり、あまり手軽とは言えませんでした。一部のユーザさんはこのコマンドの取り扱いに混乱している様子でした。100個以上のプラグインがある今、簡単にプラグインをインストール・アンインストール出来ることは重要です。そこで、v5ではプラグイン管理のGUIを実装しました。ターミナルを開くこと無く、プラグインを追加・削除できます:

オートアップデートにも対応したので、 ipm update を実行する必要も無くなりました:

..and many more!

他にも沢山の改善やバグ修正があります。全て列挙するととても長くなってしまうので、詳しくはリリース・ノートをご覧ください。

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