はじめに
今日は朝日(YOUTRUST / X)と葉(YOUTRUST)と3人でFlutterNinjasに参加しました。🎉この記事では初日の体験についてお話しします。
昨年は朝日さんだけが参加していましたが、僕と葉さんにとっては初めての参戦です。忍者ゆえ、まず侵入ルートを調査し…会場はdocomo R & D OPEN LAB ODAIBAが主催しているため、まずはお台場へ。🚆今回、埼京線で40分の遅延がありましたが、実際の忍者は諦めませんでした。💪混雑した電車を乗り越え、ようやく到着です!
FlutterNinjasとは何?
FlutterNinjasは東京で開催されるグローバルなFlutterイベントで、海外と日本のFlutterコミュニティをより近づけることを目的としています。今回は第2回目の開催です。🌏✨
すべてのコンテンツに触れると長くなってしまうため、特に印象に残ったトークをピックアップして紹介します。🔍
🔐 Seamless Passkey Authentication with Flutter × Firebase and Our Journey on Banking App
このトークは@ShoheiさんとYamamotoさんのお二人による発表でした。
Flutterアプリにおけるパスキー認証の導入事例で、特に銀行系アプリにおけるセキュリティとUXの両立が非常に興味深かったです。従来のパスワード認証に代わり、指紋や顔認証といった生体認証でスムーズなログインを実現し、ユーザー体験が大幅に向上する点が印象的でした。🔒👆
Flutter・Firebase・プラットフォーム固有APIを組み合わせた実装の裏側や苦労話もリアルに共有され、とても参考になりました。アーカイブや公開資料が出たら、ぜひチェックしてみてください。🎥
🚀 なぜパスキーなのか?
既存のパスワード認証だと
- ❌ 覚えにくい
- ❌ 盗まれやすい
- ❌ フィッシングリスク
- ❌ データベース漏洩の危険
パスキーはこれらの課題を解決し、ユーザーは指紋や顔認証でログイン可能に。👍
🧠 パスキーの仕組み(ざっくり)
- 🔒 秘密鍵:端末に安全に保存(サーバーへ送られない)
- 🔑 公開鍵:サーバーへ送信し、認証に利用
ログイン時、サーバーがチャレンジ(ランダムデータ)を送信。端末は秘密鍵で署名し、サーバーは公開鍵で検証して認証します。
📱 Flutterでの実装
passkeys パッケージを使うことで、iOS・Android両対応のパスキー認証を簡単に導入可能です。
- iOS:
AuthenticationServices
- Android:
Credential Manager API
⚠️ セキュリティ注意点
- 「生体認証だけ」はパスキーではなく、通常はパスワードをSecure Storeに保存し、生体認証で解除しています。
- AndroidではAPKの署名(ハッシュ)が重要です。
🤖 Building Flutter Apps with AI Capabilities Without Connection, Bills and Privacy Concerns
このトークは@Sashaさんによるもので、オンデバイスAIの最新トレンドが非常にわかりやすく解説されていました。
従来のクラウドAI(ChatGPTやGemini)とオンデバイスAIの違いを説明後、Googleがオープンソースで公開しているGemmaモデルを紹介。Flutterアプリ内で動くGemma 3nを、MediaPipeを活用して実装する方法を共有してくれました。🤖✨
「接続なし・課金なし・プライバシー保護」を実現するAI体験に興味がある方は必見です👀。
☕️ 休憩タイム
二つの素晴らしいトークの後は、美味しいお弁当で休憩。🍱久しぶりに再会した仲間との会話も弾みました。
Majidさんと和食をシェアしつつ、カルビ寿司に心を奪われたのは内緒です(笑)。
みんなで好きなWidgetや出身地、Flutter経験年数を書き込むボードも設置📋。僕は「ドイツ」と「ブラジル」を記入しました。😁
📖 KonMariメソッドの5つのルールを開発に適用
プロジェクトが大きくなると、コードの散らかり(clutter)も増加します:
- レガシーコード
- 未使用ウィジェット
- 複雑化したウィジェット
そこで、近藤麻理恵さんのKonMariメソッドを参考にしたアプローチを実践します。
「コードベースにもときめきを!」✨ by Vogelさん
- Commit yourself to tidying up — 片付けることを決意する
- Imagine your ideal lifestyle — 理想のコードベースを思い描く
- Finish discarding first — まずは捨てることを完了する
- Tidy by Category, Not by Location — カテゴリごとに整理する
- Does it Spark Joy? — ときめくコードか?最終的には「見て気持ちいいコード」を目指す
💡 ときめくコードベースのメリット
- テクニカルデット減少 → 隠れバグも減る
- ビルド時間・パフォーマンス改善⚡
- チームでのコーディングスタイル統一
- 読みやすくナビゲートしやすい構造
- 新メンバーのオンボーディングがスムーズに
📊 DCM(Dart Code Metrics)で可視化と分析
プロジェクト構成を視覚化するためにアーキテクチャグラフを作成。各機能の分離状況が一目で把握できます📈。
✅ DCMダッシュボードで確認できる項目
- 潜在的なバグ
- 可読性の問題
- 保守性の問題
- 未使用コードの検出
🛠️ DCMの分析設定
analysis_options.yaml
にルールを追加して、プロジェクト全体に統一ルールを適用します。
ルール例
Avoid throw Exception inside catch clause.
→ Error.throwWithStackTrace を使用
各ルールにはドキュメント、違反例、解決策が用意されており、開発者がすぐに理解できます。
📈 タイムラインで改善を可視化
ダッシュボードでは、時間経過に伴う問題の増減を確認可能。
「改善できているか?」を振り返るのに役立ちます。⏳
🔍 さらに便利なツール
- 依存関係チェック:パッケージ間依存を分析
- WidgetAnalyzer:類似ウィジェットを検出
- ベースラインファイル生成:既存コードの初期状態を記録
🚀 導入方法
🔧 準備フェーズ
- 分析カテゴリのすり合わせ
- 重要度(severity)の定義
- 設定ファイルの作成
- 社内トレーニングの実施
- フィードバックループ設計
🔄 実行と自動化
- CI/CDへの統合
- 段階的導入(オプションチェック→本番チェック)
- 違反修正フェーズへの移行
📊 モニタリングと改善
- ダッシュボードで継続的モニタリング
- ビルド時間やPR指摘数で効果測定
- カスタムルール導入で標準強化
- 新ルール評価・更新
- 新カテゴリ追加計画
Flutterでも「ときめきのコード整理」が可能です。🎉
クリーンなコードベースがチーム開発を加速させます!🚀
〆
本日は無事に潜入成功、初日レポートはここまででござる。🌙
明日は第2日目のFlutterNinjasを楽しみにしています!
YOUTRUSTではエンジニアを募集しております。👩💻👨💻情熱ある方はぜひご応募ください!✨