Inkdrop Mobile v2 プライベートβ 公開のお知らせ

TAKUYA
週休7日で働きたい
7 min readApr 17, 2018

--

Inkdrop Mobile v2.0.0 release candidate

こちらは本家記事の日本語訳です。

こんにちは、InkdropソロデベロッパーのTAKUYAです。

長らくお待たせしていた新モバイル版Inkdropがようやくプライベートβでの公開に漕ぎ着けました。最後にロードマップを公表してから早6ヶ月です。あっという間でした。ずっと水面下で開発していたので一部の方にはこのプロジェクトの勢いが以前よりも衰えたと感じていたかもしれません。ご安心ください、そんなことは全くありません。英語アカウントの方のTwitterで頻繁に開発の進捗を報告していたので、ご存知の方もいるかと思います。長い間お待ちいただき本当にありがとうございます。

本稿ではこの6ヶ月間の取り組みや、新しいインターフェイスと多くの改善が加えられたアプリについて少しご紹介します。

フルスクラッチによる再構築

6ヶ月も要した主な理由はこれです。以前、こちらの記事にも書きましたが、Inkdropには根本的な再デザインが必要でした。今後も安全性や安定性、シンプルさ、簡潔さを保ちつつ開発を長期的に継続していくためです。そのために新しいコアモジュール群はJavaScript + Flowで書き直されテストが加えられました。これらは次のロードマップで、デスクトップ版の実装にも置き換えられます。そうすれば、このアプリは5プラットフォームに対応しながらも1つの共通化されたコードベースによって構成されるようになって、たった一人でも十分可能なメンテ性が実現されます。これは自分だけでなく皆さんにとっても、プロジェクトの継続性を確かなものにする重要なステップです。その難しい作業を6ヶ月でほぼ終えることができて僕はとても嬉しいです。

では、今回のアップデートについてもう少し詳しく見ていきましょう。

大幅なパフォーマンス改善

以前のバージョンでは大きな問題を抱えていました — すごく動作が遅かった点です。Google Pixel 1のようなハイエンド製品であっても苦しい動作ラグがありました。なぜこんなに重かったのかというと、アプリはReact Native製で、JavaScriptで組まれていたからです。JavaScriptはマルチスレッドに対応していません。なのでデータアクセス処理をバックグラウンドスレッドで実行させるために悪戦苦闘していました。そこにはUIに影響を与える3つのボトルネックがありました:

  1. SQLite の I/O
  2. 全文検索に向けた日本語のトークナイズ
  3. 大量の単語データの保存

1については、拙作のsqlite3モジュールを改良してすべての処理をバックグラウンドスレッドで行うようにしました。2に対しては、専用の分かち書きネイティブモジュールを開発しました。3はPouchDB依存の問題なのですが、内部処置を小分けして実行するように改造しました。これらの対処が功を奏して、僕らが渇望していたスムーズなスクロールやもっさり感が解決できました。

そしてエディタです。これもノートの読み込みがすごく重かったのですが、改善しました。重かった理由は、コンポーネントがWebベースで作られていたことと、非効率なビュー構造です。アプリはWebViewを毎回ノートを開くたびに読み込まなくてはいけませんでした。それが受け入れがたい読み込み時間を引き起こしていました。React Nativeはプログラミングパラダイムとして宣言的なビューの記述をしなくてはなりません。そのため、エディタを閉じてノート一覧画面に戻ると常にWebViewもアンロードされてしまっていました。この問題を解決するために畳み込み構造を持つコンポーネントを設計しました。エディタは常にノート一覧画面の裏にいるので、アンロードされません。このコンポーネントのお陰で無駄な読み込み時間を短縮することが出来ました。

これらの改善によって、手元のMoto G5 (Google Pixel 1よりも二倍遅い)でも充分なパフォーマンスで動作するようになりました。

最上級のAndroidサポート

僕はiOSユーザなので、アプリのUIがiOSっぽくなってしまうのは避けがたい問題でした。でも NativeBase というReact Native向けのクロスプラットフォームなコンポーネントライブラリのお陰で、簡単にマテリアルデザインに沿ったUIを構築できました。Androidユーザの皆さんが違和感なく使えるものになったことを願います :)

Android版のMarkdownエディタは完成度が低くてお粗末なものでした。それはエディタと呼ぶには相応しくないほどに機能が大きく欠けていました。そこには技術的なハードルがあったからです — Google Play Storeでもごく僅かなアプリしか高機能なエディタを備えていないように。しかしInkdropはそれを乗り越えました。デスクトップ版と同じ実装、つまりAndroid上でCodeMirrorをうまく動かすことに成功しました。ツールバーはもちろん、リスト補完、コードブロックの構文ハイライト、オートインデント、日本語入力対応などがAndroidでも実現しました。この実装アプローチには多くの可能性があります。例えば、vimキーバインドの対応も将来的には不可能ではないでしょう。

タブレット対応

僕らはプログラミングをするのにまだまだPCが不可欠ですが、アプリがユビキタスに様々なデバイスで動作することを望んでいます。いつでもどこでも働けるように。だからタブレット対応によってアプリがより便利でパワフルになることは間違いありません。僕もそれを望んでいた一人です。自分のiPad Proでも使えるようになってすごく嬉しいです。

タブレット上では、アプリはデスクトップ版と同じく3カラムのレイアウトです。サイドバーとノート一覧は非表示に出来るので、読み書きに集中できます。大きなタッチスクリーンでのノートテイキングを是非お楽しみください。

美しいダークテーマ

なぜ僕らプログラマーは暗黒のUIをこぞって好むのでしょうか。僕にはわかりません。しかし、かっこいいのは事実です。本ベータ版ではデフォルトのUIがダークテーマに設定されています。反転した色の美しき世界へようこそ。

アーリーアクセスを正規ユーザの皆様へ

みなさんのサポートがなければここまでたどり着けませんでした。感謝の意を込めて、正規ユーザの皆様に限定してベータ版のアクセスをいち早くご提供します。

プライベートβテストに参加するには以下の手順を踏んでください:

  1. フォーラムにログインする
  2. 専用トピックを開く — このトピックは正規ユーザのみにアクセスが制限されています。もし開けなければご連絡ください。
  3. コメントで参加の旨を表明する(例: “I’d like to test android version.”など。出来れば英語でお願いします) — あなたのプラットフォーム(Android/iOS)を教えてください。Androidの場合はPlay Storeの登録アドレスをDM経由で教えてください。
  4. バグなどが見つかった場合は、上記トピックにコメントしてご報告ください。もしくはこちらのトピックにて日本語で投稿できます。開けない方はこちらを参照。

ご協力ありがとうございます!

--

--