In the AI generation, we are living in now. How can we use it well to develop and implement better products? In this session, I will share with you how to complete an AI application through Flutter Full Stack, combining multi-connection interaction and fun. I will explain the full-end features, functional codes, and benefits it can bring to us so that everyone can experience more possibilities of Flutter!
私たちのチームでは、リリース中となる動画視聴アプリのFlutterでのフルリニューアルの鋭意対応中です。Flutterは、標準のwidgetが豊富に揃えられているのが魅力の一つとなるF/Wですが、それそのままでは複雑な機能要件を全て満足することができないケースがしばしば発生します。
リニューアル対象のアプリでは、動画コンテンツの商品パッケージやシーンのサムネイルといった画像のプレビュー機能があるのですが、それがまさにそうでした。
InteractiveViewerが近しいwidgetになりますが、ピンチ操作による拡大・縮小といった一般的な画像ビューワの操作性はもちろんですが、タップ操作でのオートスケール、フリック操作で画面を閉じる等、特徴的なジェスチャ操作と共存させる上で難しい課題があり、結論としてゼロから実装することになりまして、どうせならpackageとして公開しちゃおうよー
、といった感じで今に至ります。
作業過程でぶつかった課題や、画像ビューワを実装する上での勘所等をお話し、同じような壁にぶつかり、乗り越えようとしてきている皆さんへ共有させていただき、少しでも助力にしていただけたらと思います。
モバイルアプリを長期的に運用・メンテナンスするうえで、機能や複雑化したシステムを削減し、効率的な運用を実現するための「スリム化」が重要なテーマとなっています。
本セッションでは、FacebookとX(旧Twitter)ログインの削除を例に、サービスのスリム化をどのように実行するかについて考察します。
スリム化を進める上での具体的なステップとして、ユーザーへの通知方法、新規登録・ログイン導線の変更、既存ユーザーの対応策などを取り上げ、サービスのスリム化によって得られる利点と潜在的な課題について議論します。
また、削除までの意思決定を行うためにどのようなことを行い、機能のスリム化の意思決定をしたかの流れをお話し、サービス運用に携わるさまざまな役割の方々が直面する課題に焦点を当て、スリム化による具体的な利点と実施方法をお伝えします。
Dart3で以下を実行するとどうなるでしょうか?
void main() {
final l = <String>['あいざわ', 'アイザワ', '相澤', 'いとう', 'イトウ', '伊藤'];
l.sort();
print(l);
}
出力結果は以下です。
[あいざわ, いとう, アイザワ, イトウ, 伊藤, 相澤]
当然空気を読んでくれるはずもなく、無情な結果が出力されました。
ひらがな→カタカナ→漢字どころか、伊藤が相澤より前になりました。
万年出席番号1番だった相澤さんもこれにはびっくりです。
現在観測できる限りでは、Dartでは現状これを直接解決するパッケージが存在しません。
本セッションではこの単純だが厄介な問題に対して、複数の観点から向き合っていきます。
ChatGPTのような生成AIの登場によって、プログラミングの在り方は大きく変わろうとしています。さらに、GitHub Copilot や Cursor などの開発ツールに登場によって、さらに素早く生成AIの機能を使えるようになってきています。
本セッションでは、日常から生成AIをFlutterアプリ開発などのプログラミング作業でフル活用している筆者が、生成AIを使い、より効率的に検索、コード生成、問題解決する方法を探ります。そのためのルールの書き方や、関連ツールについても紹介します。
生成AIの活用方法が気になるFlutterアプリ開発者
トランジションとは、アプリの個々の要素を繋ぐ短いアニメーションのことです。トランジションは、変化した意味を説明したり、UI要素の階層を明確化したり、ユーザーがアプリの動作を直感的に理解するのに役立つため、うまく使うことで、優れたUXを提供します。
本セクションでは、Material Designで紹介されている以下のような代表的なトランジションパターンと、それらの使い道や、実際にFlutterで実現する方法などについて紹介します。また、実際に業務で導入しようとしたときの体験談や反省点などについてもお話します。
トランジションパターンについて正確に理解することによって、UIアニメーションの利点を、ただ単にカッコいいからといった感覚的な理由からではなく、理屈で説明できるようになると思います。
・アニメーションを使ったUX改善に興味がある人
未踏アドバンスト事業 2023 に採択された私は flutter_unity_widget を利用した Flutter × Unity による AR アプリの開発に挑戦し、リリースしたアプリの運用を半年間経験しました。
参考リンク:https://www.cyberagent.co.jp/way/list/detail/id=29535
本トークでは、その際に得た flutter_unity_widget を利用した iOS / Android アプリを運用する上での知見について詳しくお話しできればと思います。
・flutter_unity_widget を利用したアプリをリリースしてみたい人
・flutter_unity_widget を利用したアプリで気をつけるポイントを知りたい人
・Flutter と Unity を掛け合わしたアプリを作ってみたい人
今後Flutterが大きく変わる転換点としてMacrosがあります。
私の所属するチームでは、freezedなどのモデル生成からflutter_genでのアセット管理、独自で運用しているmock用クラスを生成するfake_genなどがあります。それらの生成ファイルが既に1000件を超えており、開発環境及びCI環境で無視できない時間がかかっていました。
今後Macros導入によってそれらが何が変わり、何が必要なくなるのかをお話しします。
本セッションでは、Flutterを用いたマルチプラットフォーム災害危機情報可視化システムの開発について詳しく解説します。
みちびき(準天頂衛星システム)の災害・危機管理通報情報を専用の受信機を通じ、マルチプラットフォームデバイス(Android, Web, macOS)で受け取り、インターネット接続環境の有無に問わない状況下での災害危機情報の提供を実現します。
(本プロジェクトは進行中のため、内容は変更される可能性があります)
ローカルDBは手軽にアプリのデータを永続化することができるものの、アプリのリリース後、手元を離れ、長期にわたって変更が加えられるその実体を正確に把握し続けることは困難です。
また、アプリの成長や新しいローカルDBパッケージの登場に伴い、使用パッケージを変更したくなることもあるかもしれません。
私は個人で開発しているFlutterアプリケーションをおよそ4年半もの間運用しており、その間にパッケージ変更を伴う2度の大規模マイグレーションを経験しました。
さらに、パッケージ変更を伴わない中規模のマイグレーションも1度経験しており、現在は2度目の中規模マイグレーションに直面しています。
ユーザーの持つデータ実体を正確に把握できていない状態でのマイグレーションがどれほど恐ろしいか、ご想像に難くないかと思われます。
しかし、そのような困難を乗り越える中で、私が得た知見は決してゼロではありません。
本LTでは、3度のマイグレーションを終え4度目に取り組む今、私が考えるFlutterにおけるローカルDBの
についてお話しします。
私の所属するチームでは、事業のスケールと共にアプリチームのメンバーも増え、現在10人のメンバーがいます。
そのスケールの中で開発生産性を落とさず、さらに増加させていく取り組みとしてコードレビューを促進する取り組みを行っています。
このセッションでは、以下の内容についてお話しします:
想定視聴者
Flutterは標準でスクリーンリーダーに対応しており、簡単に文字を読み上げることができます。
しかし、Semanticsウィジェットを正しく使わないと、スクリーンリーダーを使用する人にとって使いにくいアプリになってしまうことがあります。
スクリーンリーダーに対応するために重要なSemanticsの要素として下記があります。
上記の内容を踏まえ、本セッションでは、Semanticsの使い分けによるスクリーンリーダー対応の最適化の手法についてお話しします。
具合的には、以下の内容についてお話しします。
Flutterアプリ開発において「Widget」は欠かすことのできない重要な概念です。
Flutterのアップデートともに多彩な進化を遂げているWidgetを、私たちはどれくらい知り、どれくらい正しく使えているでしょうか?
例えば、DialogにはAlertDialog・SimpleDialog・Dialogが存在しますが目的や使い方は異なります。
本セッションでは普段のアプリ開発でよく使うWidgetから最近登場したWidgetまで、その機能と適切な使い所と実装について有名なパッケージなどを例に挙げながらサンプルコードと共に詳解します。
・ 新しいウィジェットや、あまり知られていないウィジェットの使い方を学びたい方
・ ウィジェットの選択や使い分けに関する知識を深めたい方
このセッションでは、Flutter開発における最新のCodePush技術を活用し、コンテンツの動的更新の実現方法を紹介します。CodePushを利用することで、アプリの審査を通さずに迅速な更新が可能となり、開発プロセスが効率化されます。具体的には、CodePushを実現する代表的なパッケージであるShorebirdの内部構造について説明します。また、先駆けとなったReact Native CodePushとの比較を通じて、Flutterの技術的な優位性や制約についても詳しく解説します。
Flutterの新しいレンダリングエンジン「Impeller」は、従来のSkiaと比べて多くの進化を遂げていますが、その具体的な技術的な違いや利点についてはまだ広く理解されていません。
このトークでは、「Impellerを知ろう」というテーマのもと、Impellerの基本的な動作原理やパフォーマンス向上の理由を解説します。
また、メリット・デメリットについても紹介し、実際に運用しているアプリのImpeller有効化の可能性を探っていきます。このセッションを通じて、Impellerの基本をしっかりと押さえ、Flutter開発における新たな可能性を探りましょう。
FlutterのScrolling Widgetsには様々な選択肢があり、それぞれに適用シーンや特長がありますが、最適な選択をするためには各ウィジェットの利点と用途を理解することが必要です。
このトークでは、Scrolling Widgetsの代表例であるSliverをはじめ、ListView、SingleChildScrollView、CustomScrollViewなどを徹底比較し、それぞれの利点と適用シーンを明確にします。
また、なぜ特定のWidgetがパフォーマンスに優れているのか、その背後にある技術的理由を解説します。また、実際に運用されているアプリでの実例などを踏まえつつ、より効率的でパフォーマンスの高いアプリを開発するための知識と技術を身に付けましょう。
弊社ではモバイルアプリのデリバリー効率最大化のために、ネイティブアプリをFlutterにフルリプレイスしました。
そのプロジェクト内では技術的な変更だけでなく、将来的にWebエンジニアがモバイル開発の一部を担えるかどうかの検証も合わせて実施しました。
結果としては個人的、事業的の両面で非常に価値のある取り組みとなりました。
こちらの発表ではまさに実験台となった私の経験を元に
という話を具体的にさせていただきます。
Webエンジニアの方々の「Flutter開発楽しそう」「ここが落とし穴か・・・」という部分を理解する助けや
Flutterエンジニアの方々の「チーム拡大のための1アイデア」「初学者オンボーディングの工夫ポイント」などのつかみになれば幸いです。
Webアプリケーションでお馴染みのhookという概念があります。
これを使うと状態管理や副作用を隠蔽した状態で、とても宣言的にUIを書き上げることができます。
Flutterにおいてもflutter_hooksを使用することで同等の機能を実現でき、StatefulWidgetを全く書く必要がなくなります。
例えばTextEditingControllerなどの各種Controller系コンポーネントの初期化や破棄の処理をいちいち手書きする必要がなくなるのです。
私は業務でflutter_hooksを活用することで、非常に快適に状態管理を行えています。
本セッションでは以下のお話をします。
本セッションでは、Flutter開発におけるCI/CDの重要性と、各開発環境に適したツールの選択について解説します。個人開発、受託開発会社、自社開発スタートアップ、大規模SIer案件まで、幅広い開発経験を持つ講演者が、実践的な知見を共有します。
主な内容:
本セッションを通じて、参加者はFlutter開発におけるCI/CDの実践的な知識を得られ、自身のプロジェクトに最適なCI/CD戦略を立てる力を身につけることができます。
どの規模の開発チームにも適用できる知見を提供し、Flutter開発の効率と品質の向上に貢献します。
本セッションでは、国際的なFlutterカンファレンスへの登壇経験を共有します。2024年、State Of Open Conference(イギリス)、Flutter Connection(パリ)、Fluttercon EU(ベルリン)、Flutter Formosa(台湾)に登壇した経験を基に、以下の点についてお話しします:
このセッションの最大の目的は、グローバルカンファレンスがもたらす素晴らしい機会を皆様にお伝えすることです。最新のFlutter情報収集だけでなく、有名パッケージの作者との意見交換や、かけがえのない友人関係の構築など、得難い経験ができます。
Flutterコミュニティの一員として、より多くの日本人開発者がこの素晴らしい経験をし、グローバルな舞台で活躍することを願っています。本セッションを通じて、皆様の挑戦への第一歩を後押しできれば幸いです。