CanonicalがFlutterにLinuxデスクトップアプリのサポートを提供

by Canonical on 14 July 2020

Chris Sells(Google)、Ken VanDine(Canonical)

GoogleはFlutterの開発当初から、ターゲットプラットフォームを問わず、ネイティブ速度で動作する美しいUIを構築するための移植可能なフレームワークを目指しています。このため当初はAndroidとiOSのモバイルプラットフォームに力を注ぎました。Google Playには、すでに8万種類以上の美しいFlutterアプリが公開されています。

この成功を踏まえ、1年以上前から、ウェブOSとデスクトップOS(macOS、Windows、Linux)の両方でデスクトップクラスの体験を提供することに努めてきました。たとえば、デスクトップタイプのマウス入力とキーボード入力のほか、サイズ調整可能なトップレベルウィンドウに対応するよう、広範囲にわたるエンジンのリファクタリングを行いました。また、マテリアル密度のサポートやNavigationRailなどのデスクトップに適した新しいUI機能や、基礎となるデスクトップOSへのディープインテグレーションへの実験とDart:FFIでの実験、システムメニューバーや標準ダイアログへのアクセスが含まれます。このような作業を重ねたのは、Flutterがモバイルスタイルの体験だけでなく、フルサイズの最新デスクトップアプリに対応することを確認するためです。

プラットフォームにFlutterを搭載するのは長年の目標でした。この目標は、Googleアシスタントなどの製品ではすでに達成されていますが、今後は他の多くのプラットフォームでFlutterが使われることを楽しみにしています。今日は、Flutter対応Linuxアルファ版を、世界で最も人気の高いLinuxディストリビューションであるUbuntuの発行元のCanonicalとともに共同発表できることをうれしく思います。

Linux向けFlutterが必要な理由とは?

昨年、GoogleがFlutterでデスクトップクラスのアプリケーションをサポートすると発表した際、Canonicalは、Ubuntuを含むLinuxディストリビューションがFlutterアプリ開発者にとって魅力的なターゲットプラットフォームになる可能性を見出しました。Flutterはネイティブアプリ開発のクロスプラットフォームツールとして急速に成長しており、Canonicalはその最先端に立ちたいと考えたのです。CanonicalがFlutterにデスクトップLinuxサポートを追加することで、アプリケーション開発者は、Linux用アプリストアであるSnap StoreでLinuxユーザー向けアプリを簡単に公開できます。Canonicalは、Linuxが主流のFlutterプラットフォームとなることで、アプリケーション開発者が何百万人ものLinuxユーザーにアプリを公開し、質の高いアプリケーションが幅広く提供されることを期待しています。

FlutterがCanonicalにとって魅力的な理由は数多くあります。

  • 急速に成長しているアプリケーション開発者のエコシステム
  • マルチプラットフォームをサポート
  • ネイティブアプリケーションに高度に最適化
  • 宣言型、リアクティブ、コンポーザブルなウィジェットに対応する現代的なUIフレームワーク
  • Visual Studio Code、Android Studio、IntelliJを使用した高度な開発プラットフォーム

GoogleはまずmacOS対応のアルファ版をリリースし、次にLinuxとWindowsに対応する計画を発表しました。Canonicalは、大半のLinuxディストリビューションで最善のFlutter体験を提供できるよう、専任の開発者チームをGoogleの開発者とともに作業させるなど、Flutterに大きく投資しています。Canonicalは今後もGoogleと協力を続け、Linuxのサポートを強化するとともに他の対応プラットフォームとのフィーチャーパリティを維持する方針です。

Flokk:Flutterのデスクトップ適性を証明

Flutterがデスクトップに対応することを実証するため、私たちはgskinner.comの設計者や開発者と協力し、革新的で美しいFlutterデスクトップアプリ「Flokk」を作成しました。Flokkは、実際のデータ、特にGoogle連絡先リストを使用する実用的なアプリです。

Flokkでは、連絡先の検索、新規連絡先の追加、既存連絡先の編集など、連絡先の管理に加え、GitHubやTwitterのハンドル情報を連絡先と関連付けることができます。

GitHubとTwitterの表示によって、連絡先が個人的なソーシャルネットワークに変身します。Flokkの連絡先に好きなSNSがなくてもご心配なく。Flokkは完全なオープンソースなのでプルリクエスト(PR)で追加をリクエストできます。

Flokkは、ソーシャル分野での革新的な活用だけでなく、Flutterの機能を使用してアプリの見た目もグレードアップします。たとえばダークテーマ機能では、色を変えるだけでなくその変化をアニメーション化します。

Flokk Contactsのクリエイティブチームを率いるのは、卓越したデザインと革新的なユーザー体験の実装で知られるGrant Skinner氏です。彼はLinuxでFlutterを使うことについて、次のように語っています。

「Flokk Contactsアプリの開発は簡単でした! Flutterに関する過去のすべての知識を応用し、ほとんど修正なしでLinuxをターゲットとしましたが、アプリの動作は完璧です。Canonicalチームとは楽しく協力できました。彼らは熱心で、積極的で、Linuxのためだけでなく、すべてのプラットフォームのためにFlutterを改善しようとする意欲にあふれていました。非常に良いプロジェクトだったので、また別の主要OSをターゲットにすることを楽しみにしています。」 ― Grant Skinner氏

LinuxマシンにFlokkアプリを入れてみたい方は、ぜひ最新リリースをGitHubからダウンロードしてください。snapdをお使いなら、Snap Storeからダウンロードしていただけます。

Flutter を簡単にLinuxへインストール

ここまでで、デスクトップクラスのアプリにとって(特にLinuxで)Flutterがどれだけ便利かをおわかりいただけたと思います。次は、ご自身のLinuxマシンで実行してみましょう。できるだけ簡単にお試しいただけるよう、Snap StoreではLinux対応Flutter SDKをSnapとして提供しています。Flutter SDK Snapは、お好きなLinuxディストリビューションでFlutterアプリを開発するためのすべてを備えています。たくさんの依存関係をインストールする必要はありません。Flutter SDK Snapと好きなIDEをインストールするだけで、Linux対応アプリケーションを作成、ビルド、公開する準備ができます。

たとえばLinux対応Flutterアプリケーションの開発を始めるとして、Visual Studio CodeをIDEに選んだ場合、Linuxのターミナルで実行する必要があるのは以下だけです。

$ snap install –classic flutter

$ snap install –classic code

$ code –install-extension dart-code.flutter

Linuxでモバイルアプリも開発したい場合は、Android SDKまたはAndroid Studio(Android SDKを含む)をインストールします。Flutter SDKのSnapについては、https://snapcraft.io/flutterをご覧ください。

Linuxデスクトップ対応Flutter

デスクトップアプリをビルドするLinuxマシンにFlutter SDKをインストールしたら、Flutter dev(またはマスター)チャネルにアクセスし、Linuxデスクトップサポートを有効化します。

$ flutter channel dev

$ flutter upgrade

$ flutter config –enable-linux-desktop

新しいFlutterプロジェクトを作成すると、Linuxサブフォルダーが作成されます。これで、Linuxマシン上で動作するデスクトップアプリとして実行が可能となります。

$ flutter create counter

$ cd counter

$ flutter run -d linux

これで、FlutterでビルドされたまっさらのLinuxアプリがGTK+の最新安定版で動作します。Linuxを有効化した後でLinuxサポートを追加したい既存のFlutterプロジェクトがある場合は、下記の要領でLinuxサブフォルダーを追加できます。

$ cd my_flutter_app

$ flutter create .

これで、Linuxデスクトップ上でFlutterアプリのビルドと実行を行うために必要なRunnerプロジェクトの入ったLinuxサブフォルダーができます。

FlutterからLinuxのネイティブコードへのアクセス

Dartの記述とFlutterウィジェットの作成によってデスクトップをサポートすることに加え、Linuxデスクトップアプリは、プラットフォームチャネルまたはDart Foreign Function Interface for C/C++を使用してネイティブLinuxのすべてにアクセスできます。既存のコードを再利用したい場合は、DartとFlutterのパッケージマネージャーサイトであるpub.devでそのコードを検索してください。pub.devに公開されている大半のパッケージは純粋なDartで、たいていはLinuxアプリで問題なく使用できます。プラグインと呼ばれる一部のパッケージは、1つまたは複数のプラットフォームに特有のネイティブコードを含みます。今回のリリースでは、Linuxのネイティブ機能を使用する3種類のプラグインをpub.devに公開しました。

  • url_launcher:指定のURLでデフォルトのブラウザを起動する
  • shared_preferences:アプリセッション間でユーザー設定を共有
  • path_provider:ダウンロード、画像など、専用フォルダに関するパス情報

このようなプラグインは、アプリに使用できるだけでなく、FlutterコードからどのようにネイティブにLinuxにアクセスするかの例も示します(url_launcherのLinux実装など)。

Snap Storeでの展開

Snap StoreにFlutterアプリを展開するには、まず、アプリケーションをSnapとしてビルドし、公開するためのツールであるSnapcraftをインストールする必要があります。

$ sudo snap install snapcraft –classic

Snapcraftツールを実行するには、アプリのプロジェクトフォルダにsnapcraft.yamlファイルを作成します。以下は、Flokk用のファイルの例です。

name: flokk-contacts

version: 1.0.0

summary: Flokk Contacts

description: A fresh and modern Google Contacts manager that integrates with GitHub and Twitter.

confinement: strict

base: core18

grade: stable

apps:

  flokk-contacts:

    command: flokk-contacts

    extensions: [flutter-master]

    plugs:

– network

parts:

  flokk-contacts:

    source: .

    plugin: flutter

    flutter-target: lib/main.dart # The main entry-point file of the application

これで、snapcraft.yamlファイルの入ったフォルダでSnapcraftを実行し、アプリケーションのSnapをビルドできます。

$ snapcraft

うまくいけば、使用中のワーキングディレクトリにファイル(例:flokk-contacts_1.0.0_amd64.snap)が生成されます。

Snap Storeに公開するアカウントを設定すれば、Snapの公開準備はOKです。

$ snapcraft login

$ snapcraft register flokk-contacts #(registers the snap name in the store, these must be unique)

$ snapcraft upload flokk-contacts_1.0.0_amd64.snap –release edge 

これでSnapがSnap Storeにアップロードされ、エッジチャネルに公開を試みます。エッジチャネルに公開されたアプリケーションは、Snap Store Desktopクライアントを通じて、またはコマンドラインでインストールが可能です。

$ snap install –edge flokk-contacts

初めてSnapをビルドし、Snap Storeで公開される方は、チュートリアル(英語)https://snapcraft.io/first-snap#flutterをお役立てください。

Flutter Linuxデスクトップのサンプル

Flokk Contactsアプリは、Linuxデスクトップをターゲットとした実用的なFlutterアプリの良い例です。さらに簡単なサンプルとして、デスクトップ機能を紹介するためにビルドされたPhoto Searchアプリもご覧ください。

Photo Searchは、複数のプラグインを使ってネイティブプラットフォームの機能にアクセスし、macOSとLinuxの両方に対応するシンプルなオンライン写真検索アプリです。

Flutterをもっと活用し、複数の小さなアプレットを持つ包括的なアプリなら、昨年のリニューアルでモバイルに加えてデスクトップもサポートするようになったFlutter Galleryをお勧めします。実際の動作は、Snap Storeでもご覧いただけます。

Flutterの楽しい面が見られるもう1つのデスクトップアプリは、Thorsten Lorenz氏が開発したbatufoというマルチプレイヤーゲームです。美しい背景もさながら、このゲームでは世界中のプレーヤーがリアルタイムで競い合うことができます。

Thorsten氏は、Linux、macOS、Android、iOSなど複数のFlutterプラットフォームをサポートするためにこのゲームの開発を続けています。開発の過程や今後の更新に関心のある方は、コーディングセッションの動画、またGitHubに公開されているコードをご覧ください。Linuxでインストールするには、Snap Storeから入手できます。

まとめ

このアルファ版、そしてGoogleとCanonicalの緊密な協力により、Linux開発者は好きなオペレーティングシステムでFlutterのサポートを利用できます。第一歩は、SnapからFlutter SDKをインストールすることです。次にVisual Studio CodeまたはAndroid Studioを使って、Linuxでデスクトップアプリのビルドとテストを実行します。最後にSnap Storeでアプリを展開します。最新情報は、flutter.devのデスクトップページをご覧ください。私たちは、他の対応プラットフォームと同様、LinuxでもFlutterを快適にご利用いただけるよう改善に努めています。ぜひご意見やご感想をお聞かせください

Canonicalチームが発表したLinux対応Flutterは、Flutterを、ターゲットとするプラットフォームを問わない最良のアプリ開発環境にするという私たちの夢に向けた大きな一歩です。デスクトップをターゲットとしたことで、Google自体が直接サポートできないものの、私たちが今後も協力関係を築き、エコシステムを成長させたいと考えている多様なデバイスに対して、Flutterエンジンの順応性が大きく向上しました。

目標は、高速で美しいアプリを必要するデバイスのあるところに、常にFlutterがあることです。

関連記事

Canonical、Open Operator Collectionが 従来のLinuxやWindowsアプリケーションに対応するKubernetesオペレーターを拡大

【2020年11月12日】Ubuntuの提供元であるCanonical(本社:英国・ロンドン、CEO:Mark Shuttleworth)は本日、最大のアプリケーションオペレーターコレクションであるCanonicalのOpen Operator Collectionが、クラウドネイティブアプリケーションとWindowsやLinuxの従来型アプリケーションの両方に対応したことを発表しました。コレクションはCharmhub.ioでホストされ、Open Operator Manifestoに適合しています。 次世代の運用がCAASとIAASを統一 CanonicalのプロダクトマネージャーであるSohini Royは次のように述べています。「オペレーターパターンがあればKube […]

Red Hat OpenStack PlatformとCanonicalのCharmed OpenStackとの比較

Charmed OpenStackによる総保有コストの低減と、セキュリティおよび効率の向上 プライベートクラウドインフラストラクチャを使用する今日のすべての組織において、財務の改善、セキュリティの強化、柔軟性の増大のために、OpenStackは不可欠なコンポーネントです。Red HatとCanonicalはどちらも独自の実運用グレードのOpenStackディストリビューションを提供していますが、両社のOpenStack展開、運用、サポートに対する手法は完全に異なるものです。 このホワイトペーパーでは、Red Hat OpenStack Platformと、CanonicalのCharmed OpenStackについて、次のような詳細な比較を行います。 Red Hatのソケ […]


© 2020 Canonical Ltd. Ubuntu および Canonical は、Canonical Ltd の登録商標です。