このセッションでは、既存アプリのリプレースから考えさせられた「コード上で抽象モジュール実態を静的特定する実態」について説明します。
Flutterを使った既存 iOS/Android アプリのリプレースは、ブラッシュアップしたシングルコードベースの新規開発です。
これは「何のために何が求められているのか」を洗い出すことのない、安易な「既存アプリの挙動やロジックの踏襲」という開発方針を慎み、
要件の核心を抽象統一化する、iOS/Android UI共通部品と、プラットフォーム依存部が分離された純粋なドメインロジックの開発作業でもあります。
ですが可搬性を保つためプロパティ・フィールドに抽象型を宣言して粗結合にすると、実態が実行時に決定するため、チームメンバーであってもコードを追わないと実態が把握できなくなります。
そこで Flutter や Dart の基本機能や API を使ってコード上で抽象モジュールの実態を静的特定させる実装について、いくつかのパターンを説明します。
中級開発者
既存アプリの Flutter リプレースを行おうと思っている開発者となるため。
2023年6月、Apple よりApple Vision Pro が発表されました。
現実空間とデジタルのコンテンツをシームレスに複合させる、
空間コンピューティングを可能とする次世代の眼鏡型デバイスです。
2024年初頭の発売が予定されており、開発者向けにSDK等が現在提供されています。
一方Flutterは、空間コンピューティングで使用される3D制作に対し相性が良いとは現状言えません。
では、Flutter エンジニアは Apple Vision Pro の動向を指を加えて見ているしかないのでしょうか?
私はそんなことはないと考えます。
Flutter というフレームワークのある特性は、
空間コンピューティングに対して、またApple Vision Pro のアプリとしてかなりの力を発揮します。
本セッションでは、Apple Vision Pro に対するFlutter アプリの強みを解説します。
また、この強みを活かし、既存のFlutter製 iOS/iPadアプリを
Apple Vision Pro 向けのアプリとして適用させる方法について実践を交え、解説します。
Apple Vision Pro 向けのアプリを作りたい方
既存のFlutterアプリのApple Vision Proに対応を検討している方
最新技術の動向を知りたい方
2023年7月に、キャリアSNSアプリYOUTRUSTの、投稿画像やプロフィール画像の閲覧機能の改善を行いました。
画像ビューアのライブラリはすでに広く使われているものが多数ありますが、重ねるコンテンツをカスタマイズできる余地を残しつつ、「ピンチ・ダブルタップズーム」「上下にスワイプして閉じる」などの機能を、違和感なく同時に実現するためには、既存のものでは解決できず、標準の機能を組み合わせて実装する必要がありました。
また、画面遷移時や、タップ時やスワイプ時のアニメーションを工夫することにより、既存のものに比べてスムーズで直感的な動きを実現することができました。
このセッションでは、実際の画像閲覧機能の実装と、直感的な動きを実現するためのアニメーションなどについて紹介します。また、関連する以下の要素などについて解説し、理解を深めます。
■ジェスチャー操作に応じた体験を作る要素
・GestureDetector
・Listener
・InteractiveViewer
■アニメーションを実現するための要素
・Animation widgets
・Tween
・Hero / PageRoute
昨今のアプリ開発ではメジャーになったスキーマ駆動開発ですが、
このセッションではOpenAPIを使って、高速にバックエンドとの通信部分の開発を行う手法を紹介します。
OpenAPIはオプションが多様でdioのgeneratorやserializationライブラリが選べたりと、自由度が高いが故にハマるポイントを解説します。
このセッションでは以下の内容を想定しています。
Flutterは慣れるととても直感的にレイアウトを組んでいくことができる優秀なフレームワークです。
簡単なものであればただwidthやheightを指定してあげるだけでうまくいくかもしれません。
しかし、赤色の背景に黄色字の画面が突如出現し、サイズ関連のエラーで怒られ、またかとうんざりすることはありませんか?
前もってエラーを予想していればダメージは少ないですが、唐突に現れると、widgetツリーのどこがダメなのか探すこととなり、勘所を掴んでいないとエラー解決に予想以上に時間がかかるかもしれません。
また、Intrinsic
系のwidgetでとりあえず解決することはないですか?
ドキュメントにある通りこれは描画にexpensiveなwidgetで、できれば利用したくないwidgetです。
もしかすると、今直面している問題は上のwidgetを使わずとも解決できるかもしれません。
さらに、sliver系のwidgetを使ったときに出るエラーもこのレイアウト周りが関係していることがあります。
今回のセッションではそんな超重要なレイアウトをドキュメントやソースコード、具体例を通しながら改めて一緒に理解していきます!
レイアウト関連のエラーによく遭遇する方
そのエラー解決に時間がかかってしまう方
Flutterのレイアウトを再入門しておきたい方
Flutterは、1つのコードでモバイル、デスクトップ、ウェブといった複数のプラットフォームで動作するという圧倒的なメリットがあります。しかし、プラットフォームにはそれぞれ画面の大きさ、OSの標準的な動作やデザインといった違いがあります。
これらの違いを考えないまま、1つのコードで開発しても、特定のプラットフォームではユーザーにとっては使いにくいアプリになってしまうこともあると思います。それらをなるべく減らすために、アプリをプラットフォームへ適応させていくことが重要だと考えています。
そもそもプラットフォームに適応するとはなにか?から始まり、Flutterでプラットフォームに適応したアプリを作るにはどうすればいいか、筆者が所属する10Xで複数プラットフォーム(モバイル/Web)へのリリースした経験から実際に行ったことや反省、今後やっていきたいことなどを話していきたいと考えています。
私は、2022年3月より 約1年半ほど 緊急地震速報等の地震情報を「より早く・より正しく・よりわかりやすく」入手することを目標にしたアプリケーション「EQMonitor」を製作しています。このアプリにより、地震情報をインターネット経由で素早く入手できるようになりました。しかし、これでは十分ではないと考えます。
例えば、山間部 あるいは災害で地上通信インフラが使用できなくなったような場合でも、我々は重要な情報を素早く得る必要があります。そのために、準天頂衛星システム「みちびき」の災害・危機管理通報サービス「災危通報」を使用し、スマートフォンからその情報をチェックできるシステムを作り上げます。
PRIORIS社のGNSS受信機とのUSBシリアルコンソール接続を通じて、情報を解析していく手法についてお話していきます。
私たちのチームでは品質保証向上のために、ユニットテストにおけるに工夫を数多く行ってきました。
Flutterでアプリを運用するにあたり、どのようにユニットテストを通して、品質保証を担保できるかを共有します。
例
アプリ内のユニットテストカバレッジ
モックの生成と活用方法
テーブルドリブンテストの導入と活用方法
Custom Hooksをどのようにテストするのか
UIなどのテストを書きづらいロジックのテスト方法
Flutter開発で品質保証の向上に興味がある方
私たちのチームでは開発生産性向上のためにトランクベース開発を採用しております。
運用の過程で様々な課題と対面し、都度チーム内で熱い議論を行ってきました。
そこで生まれたTipsをご紹介します。
例
Firebase RemoteConfigを用いたFeatureFlag運用
実装を行う上で、FeatureFlagをどこでみるのか
PRの回転率向上につながっているのかどうか
どのようなフロー・タイミングで自動テストを実行するのか
Conflictを起こしづらい実装方法
上記で挙げた課題に対して行ったことの紹介はもちろん、以下のことについても話します。
トランクベース開発を検討した背景
トランクベース開発によるメリット、デメリット
Flutter開発で開発生産性向上に興味がある方
Flutter開発での運用方法を考えている方
セッションの概要を記載してください。
分散型SNSのプロトコルであるNostrをFlutterで実装し、投稿、閲覧だけでなく、TODO機能と組み合わせてTODO×SNSとしてハッカソンに出場した話です。
誰に向けたセッションなのかを記載してください。
分散型SNSに興味がある人、Nostrの概要について知りたい人、SNSとTODO機能の組み合わせについて知りたい人
Dart 3.0 で Records や Patterns などの強力な言語機能が追加され、Dart はますます魅力的な言語になってきました。
そういったこともあり、個人的に Dart で CLI ツールを開発する機会が増えてきました。
いくつもの Dart プロジェクトを並行して開発していると、スムーズかつ安全に開発を進めるために、それぞれのプロジェクトで Dart のバージョンを切り替える必要が出てきました。
そこで、Flutter のバージョン管理ツールで人気のある FVM のようなものがあれば便利だと思い、FVM を参考に Dart Version Manager (DVM) を開発しました。
本セッションでは、DVM を開発するにあたって苦労した点・工夫した点についてお話しします。
堅牢で品質の高いアプリーケーション開発を行うためには適切なアーキテクチャを選択することが重要です。
Flutterにおいては主要な状態管理のパッケージの移り変わりが激しかったり、その登場から日が浅かったりとアーキテクチャのデファクトスタンダートがなく幅広い選択肢があるように思われます。
そこで本セッションではFlutterと同じく宣言的UIフレームワークであり、歴史も長いAndroidを参考にしたLayer-firstなFlutterのアーキテクチャについて紹介します。
アジェンダとしては前半に、
後半に、
を予定しています。
このセッションでは、宣言的UIの経験がなかったAndroidアプリ開発者がFlutterを使って業務プロジェクトに取り組んだ2年間の経験を紹介します。
アプリの開発と保守を通じて得た実践的な知識を皆さんに共有できればと思います。
複数のユーザータイプと多数の画面を持つアプリにおける画面遷移の管理は、一筋縄ではいきません。
弊社のアプリでは、この問題に対処するためにauto_routerライブラリのAutoRouteGuardを活用して、画面をハンドリングしています。
本セッションでは、AutoRouteGuardを用いた画面遷移の最適化手法を紹介します。
本セッションは、auto_routerライブラリのAutoRouteGuardを中心に解説しますが、
go_routerのredirectにも適用可能な内容となっています。
高品質なプロダクト開発には、モニタリング体制の構築とそれに伴う検知から修正までのフロー作りが欠かせません。しかし、これらは一見すると難易度が高く感じるかもしれません。
そこで、私たちのチームはエラーの可視化とモニタリングのためのツール、Sentryを活用しています。
私のチームではSentryを2年以上利用してきました。またエラーモニタリングツールとしてだけではなく、多角的なモニタリング体制を構築するために利用してきました。
このセッションでは、Sentryを用いた多様なモニタリングの手法とその運用経験から得られた知見、そして具体的なTipsを紹介します。具体的には以下の内容を予定しています。
品質保証は、私たちのチームにとって重要な課題であり、そのためにintegration_testを用いた自動テストを導入し、一年間で40以上のテストシナリオを作成しました。しかし、integration_testを効果的に利用するためには、多くの課題を解決する必要がありました。WebViewの実行、OS機能のテスト、コーディングコストなど、これらの課題に対し、私たちは以下のキーワードを元に解決策を見つけてきました。
現在、integration_testは私たちのチームが品質保証を達成するための強力なツールとなっています。
このセッションでは、私たちのチームが培ってきたintegration_testのノウハウを惜しみなく公開します。
Flutter 2.10でuseMaterial3
プロパティが登場して以降、Flutter 3.0でさらに対応が進み、最近ではMaterial 3のアプリもよく見かけるようになりました。当時はコンポネントも未対応なものがありましたが、現在ではほぼ全ての対応が完了し2023年の4QにはMaterial 3がデフォルトとなる予定です。
本セッションでは現場での商用サービス経験を元に、Material 3の背景からTheme APIの活用事例、ダークテーマやDynamic Color対応によるパーソナライズ化の考え方など、包括的なThemeの活用についてお話します。
AIアプリの開発に興味がある方や作ってみたい方は注目
このセッションでは、FlutterフレームワークとTensorFlow Liteを使用してモバイル環境で機械学習アプリケーションを開発する方法と
MNIST(Mixed National Institute of Standards and Technology)を活用して、手書きの数字を分類するアプリを作成する方法を紹介します。
1.はじめに
Flutter開発でDependency Injection(DI)に興味がある方は注目
Dependency Injectionはソフトウェアデザインのパターンの一つで、
オブジェクト間の依存関係を緩やかにし、柔軟性を高めるための技術です。
このパターンは、オブジェクト間の結合度を低くし、再利用性と保守性を向上させるのに役立ちます。
セッションはDependency Injection が難しい方のための内容を含めています。
基本から、FlutterでDependency Injectionを使用する方法について詳しく説明します。