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

貫禄を捨てて愛嬌で生き延びろ!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