Flutter 3.24のアップデートにて、
Flutter GPU と呼ばれる低レベルのグラフィックレンダリングのAPIが紹介されました。
Flutter GPU により、2Dだけでなく3Dのグラフィックが、
ネイティブのコードの利用をせずに利用できるようになります。
本セッションでは、Getting started with Flutter GPUと、
私の調査結果から、このFlutter GPUについて紹介、解説を行います。
具体的には以下の内容について解説します。
本セッションを通して、Flutterの未来を覗いてみませんか?
モバイルアプリの開発において、審査は避けられないプロセスです。
しかし、リリース後にバグが発覚すると、再び審査を経る必要があり、ユーザーに不便を強いることがあります。
特にユーザー数が多い企業のアプリでは、このプロセスが大きな課題となり得ます。
このセッションでは、月間約2万人が利用する弓道アプリ「採点簿」での実際のCodePush導入経験を基に、運用ノウハウを解説します。
また、このノウハウを本業の大規模アプリに組み込み、実際に稼働させた過程を具体的に説明します。
真心を込めて開発したアプリがカクついたときのショックは、今でも忘れられません。
アプリがスムーズに動かないとき、あなたなら何から始めますか?どこから修正しますか?リビルドの回数を減らすために const を使ったところ、カクつきが改善されました。でも、リビルドの回数は何回から何回に減少したのでしょう?パフォーマンスを改善する際には、推測に頼るのではなく計測をしてボトルネックを特定することが重要です。
本セッションでは、UIパフォーマンス計測の入門として、DevToolsに注目します。DevToolsは、Flutterアプリのパフォーマンス計測には欠かせないツールです。特に、フレームレートの監視、ジャンクやスクロールヒッチの検出、ウィジェットのリビルドの計測、メモリの割り当てとCPU使用率の分析に焦点を当てます。そして、サンプルプロジェクトを使って実際にUIパフォーマンスを計測し、問題の原因を特定し、一つずつ改善していきます。
UIパフォーマンスの問題により、描画が乱れたり、操作が遅くなったりすることは珍しくありません。そんなときでも焦らず計測し、ボトルネックを特定し、問題を解消するための実践的な方法を、デモを交えて紹介します。
スムーズで快適なアプリをユーザーに届けたい方
根拠を持ってUIパフォーマンスの改善をしたい方
Flutterアプリケーション開発の核心となるのは、WidgetとPackageです。これらを深く理解することで、あらゆる開発課題に効率的に対応できるようになります。
本セッションでは、YouTubeで公開されている「Flutter Widget of the Week」や「Flutter Package of the Week」シリーズの内容からピックアップしてFlutterのWidgetとPackageについて解説します。
参加者の皆様は、Flutterの基本的な要素を再確認しつつ、新たな視点や活用法を学ぶことができます。WidgetとPackageの理解を深めることで、より効率的で創造的なFlutter開発のスキルを身につけることができるでしょう。
本セッションは、以下の方々に特におすすめです:
Flutterを始めたばかりの初心者からなんとなく一通りの開発ができる人まで幅広く聞いてもらえるセッションにする予定です。
以下のようなコードがDartで書けることはご存じでしょうか。
Dart3でパターンマッチングが導入されてから、色々な表現の幅が広がりました。このトークでは、あまり標準的ではないDart標準の表記方法をクイズ形式で紹介していこうと思います。
Person fromJson(Map<String, dynamic> json) {
if (json case {'company': String company, 'name': String name}) {
return Person(company: company, name: name);
} else if (json case {'name': String name}) {
return Person(name: name);
}
throw Exception('Illegal json format');
}
Dart 中級者以上
このセッションでは、プレーン Flutter API を使って、MVVM アーキテクチャと簡単な状態管理や依存性注入を作り、仕組みの基本を知ってもらい、
これらのキーポイントを知ることで、要件仕様書を満たし、機能の追加や振る舞い変更も、処理フローのテストもしやすい実装作りを説明します。
仕事や自分でアプリを作るにも、 「このボタンを押したら、サーバからデータを取得して画面のここの表示が変わる」などから、
「必要なライブラリなどの要素技術を選択して、どんな入力で、どんな関数やフローで、どんな出力やエラーを期待するか」の要件仕様書ができます。
ですが要件仕様書を愚直に Widget に実装すると、神Widgetが誕生してしまうので、
一般的に MVVMで、Clean Archtecture に則り、View はデータの表示に徹し、ViewModel はデータ(状態)の提供と更新に徹し、
状態管理ライブラリで、状態更新された View のみの表示更新①、DI/依存性注入ライブラリで、テストコード①②を実装しています。
①Riverpod/GetItは、MVVM 専用ではありませんから、実装コードには工夫が必要!
②テストする関数やフローの実装を変えず、依存するデータや状態をテストダブル(モックオブジェクト等)にすり替えます。
初心者から中級者
このセッションではFlutter創設メンバーであるEric Seidelらが手掛けているサービスのShorebirdについて話します。
モバイルアプリの更新はWebアプリとは異なり、各プラットフォームのストア審査を通過する必要があり、時間と手間がかかります。
特に、ユーザーの手元で発生している不具合対応のアップデートが必要な状況では、この審査プロセスが迅速なリリースの障害となることがあります。
Shorebirdを使えば、AndroidとiOSアプリをストアの審査なしで素早く更新することが可能になります。
セッション内では実際にコードの修正を行い、ストアを経由せずにアプリを更新するデモンストレーションを行う予定です。
本セッションでは、FlutterとDartを活用した総合チケット管理システムの開発経験を共有します。
Flutter/Dartのクロスプラットフォーム対応の強みを最大限に活かし、Webサイト、モバイルアプリケーション、バックエンドを一貫して開発した経験を共有します。
(注:本プロジェクトは進行中のため、詳細は変更の可能性があります)
AwarefyではローカルキャッシュのためのパッケージをHIVE→Isar→Floor(sqflite)という流れで置き換えてきました。ローカルキャッシュを実装する上でのキャッシュ戦略について、Floorでの実装を交えながらお話しします。
Flutter アプリケーションにおいて、ジェスチャー操作は重要な UI 要素です。基本的なタップやスワイプは広く実装されていますが、より複雑で洗練されたジェスチャー操作の活用はまだ十分ではありません。
複雑なジェスチャーの実装には、 GestureDetector の深い理解が必要です。また、多様なジェスチャーの種類、適切な制御方法、カスタムジェスチャーの作成など、高度なスキルが求められます。
本セッションでは、 GestureDetector の仕組みから、様々なジェスチャーの種類と実装方法、制御テクニック、オリジナルのジェスチャー作成までを包括的に解説します。実践的なコード例と共に、複雑なジェスチャーを使いこなすための知識とスキルを提供します。
・より高度なユーザーインターフェースの実装に挑戦したい開発者
・独自のジェスチャー操作を実装したいと考えているアプリ開発者
Dart の Class modifiers (クラス修飾子) は、2023年5月にリリースされた Dart 3 で大幅に機能が強化され、今では Dart/Flutter で開発するアプリのクラス設計において欠かせない存在となりました。
本セッションでは、Dart の Class modifiers の機能を簡単におさらいするとともに、実際のモデリングやクラス設計、実装においてどのように活用できるのかを紐解きます。Class modifiers の理解を深めることで、インターフェースを利用した抽象化、sealed class を利用したパターンマッチングなど、クリーンなコードを書くためのヒントを得られます。
また、Dart の機能・言語仕様にとどまらず、 Class modifiers を知り、活用することで Flutter アプリの開発にどのようなメリットが生じるのか、といった実践的な内容にも踏み込んで解説します。
本セッションの想定視聴者は次のとおりです。
このセッションでは、Flutter公式が開発しているvideo_playerについて話します。
video_playerの構成や使える機能などの紹介はもちろん、動画という各ネイティブ独自の機能を呼び出すときに考えなければいけない難しい部分についての話を行います。
video_playerはシンプルな機能しか提供していません。
本セッションでは、そんなvideo_playerを拡張するためにはどのような実装が必要かを、基本的なHLSの説明を元にvideo_playerに追っかけ(タイムシフト)再生を追加する例を元に紹介します。
・video_playerを使っている人
・Flutterの動画再生に興味がある人
・Flutterでネイティブコードの呼び出しを実装したことがある人、興味がある人
チーム開発において、効率的な開発環境はプロジェクトの成功に不可欠です。
本セッションでは、Flutter 開発における環境構築から CI/CD といった開発フロー全体における、具体的なノウハウとプラクティスを発表します。
チームメンバーが開発に集中できる環境を整え、生産性の向上を目指しましょう。
具体的には、以下のトピックを中心に解説します。
デザインシステムの文脈の元、
Flutterでデザイン再現度を上げるにはどうすべきか以下のような内容を話します。
※ デザインツールはFigmaを前提としています。
・ チームでのデザインシステムへの取り組みの紹介
・ デザイナーの巻き込んでいくか
・ 実際のFlutterでのデザインの再現方法
・ プログラムしやすいデザインとして、デザイナーに何を連携して何をデザインシステムとしてまとめたか紹介
・ デザインの再現度を高めたい方。
・ Figmaを見てFlutterで実装する際のTipsを知りたい方。
・ 「デザインシステム」・デザイナーと実装しやすいデザインについて協議を進めていきたい方。
「ダウンロードしておいたファイル(端末に保存したファイル)を利用してアプリを動作させる方法」について設計・Tips・注意点を紹介します。
※ 実際に業務で利用した知見が含まれます。
現状含んでいない内容
オフラインで実行した処理(ポイント付与など)を、オンラインに繋げた際に連携する方法。
※ 実績がないため、用意できたとしても調査した結果のみとなります。
・ オフラインを前提としたアプリを検討したことがあり、Flutterアプリを動作させる方法についてヒントが欲しい方。
・ 端末内にファイル保存をする仕様を検討されている方。
Awarefyでは、MaestroによるE2Eテスト環境を構築し、運用しています。そして、実行にかかるコストを削減するため、Maestroが用意しているCIサービスであるMaestro Cloudを使わず、GitHub Actionsからself-hosted runnersで実行することに成功しました。
Maestroを用いたE2Eテストの実装から、self-hosted runnersで実行するためのハウツーについて話します。
社内向けのOpenID Connect (OIDC)クライアントライブラリ 開発した経験を共有します。
株式会社GENDA が提供するGENDA ID (グループ横断の ID プラットフォーム)に対応するため、FlutterアプリからOIDCのRelying Partyとして機能するPublic Clientライブラリの開発プロセス、直面した課題、そしてその解決策について詳しく説明します。
弊社ではネイティブアプリとWebアプリをFlutterでのフルリプレイスを進めていて、AndroidとWebをフルリプレイスすることができました。
Flutterで独自デザインを実現するためのカスタマイズには制限があり、どこまでできるのか頻繁にデザイナーとのやり取りが発生しました。
本セッションでは、Flutterのデザインカスタマイズの制限をどのように克服し、デザイナーとの調整をスムーズに進めたかを共有します。
特に、Widgetbookを活用することでデザイン調整の工数をどのように削減したか、実際の体験談を交えて紹介します。
画像切り抜きパッケージ "crop_your_image" の公開から 3 年が経ちました。
LIKE 数は 500 に迫り、POPULARITY は 98%、リポジトリへの issue やプルリクは今でも定期的に作成され、画像切り抜きパッケージとして当初の想定の何倍も使われていると自画自賛しています。
このセッションでは、そんな crop_your_image パッケージの開発を振り返りながら、パッケージ開発の経緯や使いやすいパッケージを実現するためのアイデア、パッケージ開発から得られるスキルやノウハウなどを余すところなく共有しながら、パッケージ開発が普段のアプリ開発に対しても大きな糧になることを説明します。
Studyplusは、多機能かつユーザー数の多い大規模なネイティブアプリです。弊社では、数年前からこのStudyplusのネイティブアプリと同様の機能を持つWebアプリをFlutterを使ってフルリプレイスするプロジェクトを進めてきました。
このセッションでは、ネイティブとWebをワンソースで開発するという他にないレアな事例を基に、リプレイスプロジェクトの進め方、直面した課題、そして得られた知見について詳しくお話しします。