拙者、FlutterNinjas2025にて修行して参った!

はじめに

拙者👋 江戸時代が大好きなアプリチームのルーカスでござる。

(YOUTRUST / X)

今日は朝日(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の両立が非常に興味深かったです。従来のパスワード認証に代わり、指紋や顔認証といった生体認証でスムーズなログインを実現し、ユーザー体験が大幅に向上する点が印象的でした。🔒👆

FlutterFirebase・プラットフォーム固有APIを組み合わせた実装の裏側や苦労話もリアルに共有され、とても参考になりました。アーカイブや公開資料が出たら、ぜひチェックしてみてください。🎥

🚀 なぜパスキーなのか?

既存のパスワード認証だと

  • ❌ 覚えにくい
  • ❌ 盗まれやすい
  • ❌ フィッシングリスク
  • ❌ データベース漏洩の危険

パスキーはこれらの課題を解決し、ユーザーは指紋や顔認証でログイン可能に。👍

🧠 パスキーの仕組み(ざっくり)

  1. 🔒 秘密鍵:端末に安全に保存(サーバーへ送られない)
  2. 🔑 公開鍵:サーバーへ送信し、認証に利用

ログイン時、サーバーがチャレンジ(ランダムデータ)を送信。端末は秘密鍵で署名し、サーバーは公開鍵で検証して認証します。

📱 Flutterでの実装

passkeys パッケージを使うことで、iOS・Android両対応のパスキー認証を簡単に導入可能です。

  • iOSAuthenticationServices
  • AndroidCredential Manager API

⚠️ セキュリティ注意点
- 「生体認証だけ」はパスキーではなく、通常はパスワードをSecure Storeに保存し、生体認証で解除しています。
- AndroidではAPKの署名(ハッシュ)が重要です。

🤖 Building Flutter Apps with AI Capabilities Without Connection, Bills and Privacy Concerns

Gemma 3n

このトークは@Sashaさんによるもので、オンデバイスAIの最新トレンドが非常にわかりやすく解説されていました。

従来のクラウドAI(ChatGPTやGemini)とオンデバイスAIの違いを説明後、Googleがオープンソースで公開しているGemmaモデルを紹介。Flutterアプリ内で動くGemma 3nを、MediaPipeを活用して実装する方法を共有してくれました。🤖✨

「接続なし・課金なし・プライバシー保護」を実現するAI体験に興味がある方は必見です👀。

☕️ 休憩タイム

二つの素晴らしいトークの後は、美味しいお弁当で休憩。🍱久しぶりに再会した仲間との会話も弾みました。
Majidさんと和食をシェアしつつ、カルビ寿司に心を奪われたのは内緒です(笑)。

みんなで好きなWidgetや出身地、Flutter経験年数を書き込むボードも設置📋。僕は「ドイツ」と「ブラジル」を記入しました。😁

📖 KonMariメソッドの5つのルールを開発に適用

プロジェクトが大きくなると、コードの散らかり(clutter)も増加します:

  • レガシーコード
  • 未使用ウィジェット
  • 複雑化したウィジェット

そこで、近藤麻理恵さんのKonMariメソッドを参考にしたアプローチを実践します。
「コードベースにもときめきを!」✨ by Vogelさん

  1. Commit yourself to tidying up — 片付けることを決意する
  2. Imagine your ideal lifestyle — 理想のコードベースを思い描く
  3. Finish discarding first — まずは捨てることを完了する
  4. Tidy by Category, Not by Location — カテゴリごとに整理する
  5. 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ではエンジニアを募集しております。👩‍💻👨‍💻情熱ある方はぜひご応募ください!✨

herp.careers