Tutanotaは、ブラウザ、iOS、Android向けのアプリとして利用できる安全なオープンソースのメールサービスです。クライアントコードはGPLv3で公開されており、AndroidアプリはF-Droidで利用できるため、誰もが完全にGoogleフリーのバージョンを使用できます。
Tutanotaはオープンソースに重点を置いており、Linuxクライアントで開発しているため、Linuxおよびその他のプラットフォーム用のデスクトップアプリをリリースしたいと考えました。小さなチームであるため、Linux、Windows、MacOS向けのネイティブアプリの構築をすぐに除外し、Electronを使用してアプリを適応させることにしました。
Linuxターミナル
- Linux用の上位7つのターミナルエミュレータ
- Linuxでのデータ分析のための10個のコマンドラインツール
- 今すぐダウンロード:SSHチートシート
- 高度なLinuxコマンドのチートシート
- Linuxコマンドラインチュートリアル
Electronは、視覚的に一貫性のあるクロスプラットフォームアプリケーションを高速で出荷したい人にとって、特にブラウザAPIの束縛から解放される必要のあるWebアプリがすでに存在する場合に最適です。 Tutanotaはまさにそのようなケースです。
TutanotaはSystemJSとMithrilに基づいており、すべての人にシンプルで安全なメール通信を提供することを目的としています。そのため、ユーザーがメールクライアントに期待する多くの標準機能を提供する必要があります。
基本的なプッシュ通知、テキストと連絡先の検索、2要素認証のサポートなど、これらの機能の一部は、最新のAPIと標準のおかげでブラウザーで簡単に提供できます。その他の機能(サーバーを使用しない自動バックアップやIMAPサポートなど)では、システムリソースへのアクセスが制限されていない必要があります。これは、まさにElectronフレームワークが提供するものです。
Electronを「単なる基本的なラッパー」と批判する人もいますが、明らかな利点があります。
- Electronを使用すると、WebアプリをLinux、Windows、およびMacOSデスクトップにすばやく適合させることができます。実際、ほとんどのLinuxデスクトップアプリはElectronで構築されています。
- Electronを使用すると、デスクトップクライアントをWebアプリと同等の機能にすることが簡単にできます。
- デスクトップアプリを公開したら、無料の開発機能を使用して、使いやすさとセキュリティを強化するデスクトップ固有の機能を追加できます。
- 最後になりましたが、間違いなく重要なことですが、これは、アプリをネイティブに感じさせ、IDを維持しながらユーザーのシステムに統合するための優れた方法です。
Tutanotaでは、多額の投資家の資金に依存するのではなく、コミュニティ主導のプロジェクトです。フリーミアムサービスの有料プランにアップグレードするユーザーの増加に基づいて、チームを有機的に成長させます。ユーザーが望んでいることに耳を傾けることは、私たちにとって重要であるだけでなく、私たちの成功にとっても不可欠です。
デスクトップクライアントの提供は、Tutanotaでユーザーが最も望んでいた機能でした。現在、すべてのユーザーに無料のベータ版デスクトップクライアントを提供できることを誇りに思っています。 (暗号化されたデータの検索という、非常に要望の多かった別の機能も実装しましたが、それはまた別のトピックです。)
ユーザーにTutanotaの署名付きバージョンを提供し、バックグラウンドプロセスを介したプッシュ通知など、ブラウザーでは不可能な機能を有効にするというアイデアが気に入りました。現在、プロキシとして機能するサーバーに依存せずにIMAPサポート、自動バックアップ、オフラインの可用性など、デスクトップ固有の機能を追加する予定です。
Electronを選択したのは、ChromiumとNode.jsの組み合わせが、Webアプリに最小限の変更を加えるだけで済むため、小規模な開発チームに最適であることが約束されたためです。始めたばかりのすべてにブラウザAPIを使用し、進行するにつれてそれらのコンポーネントをよりネイティブなバージョンにゆっくりと置き換えていくのは特に役に立ちました。このアプローチは、添付ファイルのダウンロードと通知で特に便利でした。
Electronのセキュリティ問題を引用する人がいることは承知していましたが、Webアプリでアクセスを微調整するためのElectronのオプションは非常に満足のいくものでした。 ElectronのセキュリティドキュメントやLucaCarettoniのElectronSecurityChecklistなどのリソースを使用して、Webアプリの信頼できないコンテンツによる壊滅的な事故を防ぐことができます。
Tutanota Webクライアントは、プロセス間通信用の堅固なプロトコルを使用して最初から構築されました。 Webワーカーを利用して、データの暗号化と要求中にユーザーインターフェイス(UI)のレンダリングを応答性の高い状態に保ちます。これは、同じプロトコルを使用してネイティブ部分とWebビューの間で通信するモバイルアプリの実装を開始したときに役立ちました。
そのため、デスクトップクライアントの構築を開始したとき、ネイティブプッシュ通知、メールボックスのオープン、ファイルシステムの操作などの多くのバインディングがすでに存在していたため、ネイティブ(ノード)側のみを実装する必要がありました。
もう1つの便利な点は、Babelトランスパイラーを使用したビルドプロセスでした。これにより、コードベース全体を最新のES6 JavaScriptで記述し、異なる環境間でユーティリティモジュールを組み合わせることができます。これにより、Electronベースのデスクトップアプリにコードを迅速に適合させることができました。ただし、いくつかの課題に直面しました。
Electronを使用すると、さまざまなプラットフォームのデスクトップ環境と非常に簡単に統合できますが、適切な処理を行うための時間投資を過小評価することはできません。結局、私たちが予想していたよりもはるかに時間がかかったのはこれらの小さなことでしたが、デスクトップクライアントプロジェクトを完了するためにも重要でした。
プラットフォーム固有のコードが必要な場所がほとんどの摩擦を引き起こしました:
- たとえば、ウィンドウ管理とトレイは、3つのプラットフォームで微妙に異なる方法で処理されます。
- Tutanotaをデフォルトのメールプログラムとして登録し、自動起動を設定するには、UAC互換の方法でユーザーに管理者アクセスを求めるプロンプトを表示しながら、Windowsレジストリに飛び込む必要がありました。
- コピー、貼り付け、元に戻す、やり直しなどの標準機能を提供するには、ショートカットとメニューにElectronのAPIを使用する必要がありました。
このプロセスは、さまざまなプラットフォームでのアプリの特定の、場合によっては直接互換性のない動作に対するユーザーの期待によって少し複雑になりました。 3つのバージョンをネイティブに感じさせるには、ブラウザーでの検索と同様のテキスト検索を提供するために、Webアプリにいくつかの反復と、いくつかのささやかな追加が必要でした。
Electronでの経験はおおむね前向きで、プロジェクトは4か月足らずで完了しました。かなり時間のかかる機能がいくつかありましたが、Linux用のTutanotaデスクトップクライアントのベータ版を簡単に出荷できることに驚きました。興味がある場合は、GitHubのソースコードに飛び込むことができます。