Flutterの人気に伴い、新規プロジェクトでFlutterを採用する企業も増えてきました。
しかし、その需要に対する供給(Flutterエンジニア)が追いついていないのが現状でしょう。
各社でも、Flutterエンジニア不足、育成に困っているのではないでしょうか?
Flutterが新しい技術だからこそ、有用な育成方法が定まっていないのではないでしょうか?
育成には研修課題を作成し、それをレビューするというコストがかかり、後回しにしてしまいがちだと思います。
本セッションではゆめみのFlutterエンジニア育成方法についてご紹介します。
・Flutter研修課題の内容
・全11Session
・状態管理(Riverpod)
・Unit,Widget Test,etc.
・レビュー時に利用する観点表
・Session毎のレビュー項目
・基礎的なレビュー項目
このトークではFlutterエンジニア育成の例を知ることができ、その結果として育成、レビューコストの削減に繋げることが期待できます。また、Flutterに興味を持つ技術者は、より高品質なコードを書くための知識や、採用の評価ポイントを掴むことができます。
出前館ではtoC向けに出前館アプリ、toB向けに配達員向けアプリ、加盟店向け受注管理アプリなどを提供しています。本セッションではそのアプリにおけるFlutter活用の現在とこれからの我々の取り組みをご紹介します。
出前館ではtoC向けに出前館アプリ、toB向けに配達員向けアプリ、加盟店向け受注管理アプリなどを提供しています。技術選定時は、プロダクトやプロジェクト、開発チームの特性を考慮し、Xamarin、React Native、Kotlin Multiplatform Mobileなど、これまでさまざまな技術を採用してきました。多様な技術を扱うメリットもありますが、そのナレッジ共有や学習コスト、開発効率は課題でした。そこで我々は、Flutterの導入を進めることでそれらの課題へ現在アプローチを始めています。本セッションでは出前館におけるFlutter利用の現在とこれからをお話しします。
画面タッチ時のタッチフィードバックは、Flutterに限らずとても重要な要素です。
Flutterの場合はInkWellウィジェットやMaterialウィジェットを用いることで比較的簡単にRipple effectを表現することが可能ですが、思うようにRipple effectが表示されなかったということは、初心者をはじめ、多くの方が経験されているのではないでしょうか?
本セッションでは、Material Designのガイドラインを読み解きながら、主にMaterialやInkWellウィジェットの内部実装を通してFlutterにおけるRipple effectの表示の仕組みや、細かな制御方法を解説します。その上で、様々なパターンにおけるRipple effectの実装方法などを紹介します。
このセッションでは、既存アプリのリプレースから考えさせられた「コード上で抽象モジュール実態を静的特定する実態」について説明します。
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はEverything is a Widgetになっているため、既存のモバイルアプリのライフサイクルの概念にあてはめるには少し考える必要があります。
また最新のFlutter 3.13.0でライフサイクルの動作がどのように変わったのかを解説します。
このセッションでは以下の内容を想定しています。
Flutterは慣れるととても直感的にレイアウトを組んでいくことができる優秀なフレームワークです。
簡単なものであればただwidthやheightを指定してあげるだけでうまくいくかもしれません。
しかし、赤色の背景に黄色字の画面が突如出現し、サイズ関連のエラーで怒られ、またかとうんざりすることはありませんか?
前もってエラーを予想していればダメージは少ないですが、唐突に現れると、widgetツリーのどこがダメなのか探すこととなり、勘所を掴んでいないとエラー解決に予想以上に時間がかかるかもしれません。
また、Intrinsic
系のwidgetでとりあえず解決することはないですか?
ドキュメントにある通りこれは描画にexpensiveなwidgetで、できれば利用したくないwidgetです。
もしかすると、今直面している問題は上のwidgetを使わずとも解決できるかもしれません。
さらに、sliver系のwidgetを使ったときに出るエラーもこのレイアウト周りが関係していることがあります。
今回のセッションではそんな超重要なレイアウトをドキュメントやソースコード、具体例を通しながら改めて一緒に理解していきます!
レイアウト関連のエラーによく遭遇する方
そのエラー解決に時間がかかってしまう方
Flutterのレイアウトを再入門しておきたい方
Flutterは、1つのコードでモバイル、デスクトップ、ウェブといった複数のプラットフォームで動作するという圧倒的なメリットがあります。しかし、プラットフォームにはそれぞれ画面の大きさ、OSの標準的な動作やデザインといった違いがあります。
これらの違いを考えないまま、1つのコードで開発しても、特定のプラットフォームではユーザーにとっては使いにくいアプリになってしまうこともあると思います。それらをなるべく減らすために、アプリをプラットフォームへ適応させていくことが重要だと考えています。
そもそもプラットフォームに適応するとはなにか?から始まり、Flutterでプラットフォームに適応したアプリを作るにはどうすればいいか、筆者が所属する10Xで複数プラットフォーム(モバイル/Web)へのリリースした経験から実際に行ったことや反省、今後やっていきたいことなどを話していきたいと考えています。
Dart言語はFlutterとともにアプリフロントエンドの領域で広く認知されてきました。しかし、バックエンドにおける実践的な活用例はまだまだ少ないのが現状です。
とはいえ、Flutterアプリ向けのBFF(Backend For Frontend)をDartで実装することは、型宣言を共通化することができ、生産性を飛躍的に向上させるアプローチとなり得ます。
本セッションでは、Dartをバックエンド・BFFに採用する背景から、dart_frogというパッケージの特徴と、マルチパッケージ管理ツールであるmelos を利用して、Flutterでのアプリ構築を加速させる過程について深掘りします。更に、実際の案件でdart_frogとmelosを導入していく過程、そしてそれをどのようなプロジェクトに組み込んだのかの経験談を交えながら、Dartバックエンド・BFFとしての魅力と、それを実現する具体的な手法をお伝えます。
私は、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年間の経験を紹介します。
アプリの開発と保守を通じて得た実践的な知識を皆さんに共有できればと思います。
Flutter で高度なグラフィックスを実現するために、これまでは RenderObject や CustomPainter を利用していました。
しかし、これらは CPU 上で多くの処理を実行することになってしまうため、柔軟性や表現力にどうしても限界がありました。
Flutter 2.8 で Fragment Shader を利用可能になり、GPU 上で処理を実行できるようになったため、より柔軟で高度なグラフィックスを実現できるようになりました。
本セッションでは Fragment Shader の基礎から Flutter での具体的な実装例についてお話しします。