今月から Android 開発の担当もすることになり、勉強し始めたところ。Android のみの勉強会参加は今回が初めて。Google Codelabs で勉強したことが実際にキーワードとして登場するので、あらためて理解が深まった。
イベントページ:https://sansan.connpass.com/event/349010/
CodeRabbitと過ごした1ヶ月 ─ AIコードレビュー導入で実感したチーム開発の進化
mitohato14 さん
- CodeRabbit 導入の経緯
- メンバー全員の approveでマージ、朝夕口頭レビュータイム
- レビューは細かい指摘多め、細かい部分見落としがち、品質が人に依存
- 時間が掛かり、細かい指摘は相互に負担増
- CodeRabbitとは
- リポジトリ全体を考慮したレビュー
- 概要生成、シーケンス図作成、類似リポジトリ列挙やチャット機能
- チャットの過去やり取りは将来にも持ち越されどんどんレベルアップ
- CodeRabbitの設定
- GitHub アカウントログイン、ダッシュボードで有効化
- すぐに使える、yaml で追加設定
instrucrionsでレビュー観点を自然言語で記述可能
- 導入しての所感
- PR内容の要約:どのファイルがどういった内容で、まで一覧化
- シーケンス図の生成:レビューがしやすくなる
- 不要な指摘は、チャットでフィードバックすることで抑制可能
- (具体的な指摘内容はスライド参照)
- 嬉しかったこと
- 変更要約、チャット形式でのやり取り、レビューの早さ(数秒)
- やりとりを通じ、背景や議論をログに残せる
- 人力レビュー前に細かい問題を減らせる
- 変化したこと
- 細かい指摘が減り、広い視点での実装改善レビューが可能に
- 指摘から気づきや議論が生まれる
- Kotlin/Android 的な指摘
- あった(スライド参照)
AndroidアプリエンジニアもMCPを触ろう
@kgmyshin さん
- MCPとは?
- model context protocol
- Android アプリ開発で役立つのか
- いろんな MCP サーバーがある(GitHub, CircleCI, Bitrise, Firebase …)
- Mobile MCP(モバイル端末自動化およびスクレイピングをするMCP)
- mobile-next/mobile-mcp
- AIが勝手に端末を操作する
- Mobile MCP(モバイル端末自動化およびスクレイピングをするMCP)
- MCP Client の方は、InteliJ Idea, Cursor Agent Clineなど、、
- Android Studio は未対応
- いろんな MCP サーバーがある(GitHub, CircleCI, Bitrise, Firebase …)
- 作ってみよう
- 主要な二つの機能:Resource と Tool
- Resource:添付情報(MCP Client が Model に渡す情報)
- Tool:拡張操作(Model がツールを選んで勝手に実行すること)
- 具体の作成方法やセットアップなど
- Claude Desktop で動かしてみるまで
- 主要な二つの機能:Resource と Tool
Fluxの実装を再考した話
技術本部 Sansan Engineering Unit Mobile Applicationグループ 山下 武志 さん
- Fluxアーキテクチャ、しんどい
- 1つの操作に1つのActionCreaterが存在した(戻るボタン、Lit要素、ダイアログ、各タップ):ある画面では40以上
- 1つの論理操作に対して複数のActin(通信開始、失敗成功、、):ある画面では30以上
- ActionCreater (Action生成) と StateMahchine (ActionとStateの合成) が離れていて可読性が低下
- Actionの飛んでくる順番も把握できない(非同期、複数操作)
- テストしにくい → Unit Testのない画面が増えた
- Fluxで重要なのは、UI=f(State) と単方向フロー
- 変えたこと、Before & After
- Action の解釈を変えることで解決
- ActionCreator の責務を変えた
- State の責務を変えた
- ScreenContext の概念を導入した
- Fluxは概念、概念の具象化方法を変えてみよう
JetpackComposeでリッチなUIを作ろう
技術本部 Eight Engineering Unit Mobile Applicationグループ 大塚 丈 さん
- アニメーションとModifierでリッチなUIが簡単に作れる
- 1.
Modifier.graphicsLayer- 要素の締める場所は変わらず見え方だけを変える
scale,translation,rotation,alpha,shape,clip…
- 2.
animateFloatAsState- Float as state,はじめいろいろ用意されている(
dpAsState,colorAsState…) - compose が目標値の変化を検知してくれる
- Float as state,はじめいろいろ用意されている(
- 3. ユーザーインタラクション
- ユーザー操作を受け取る方法が用意されているので、それをStateに反映させる
Modifier.draggable,Modifier.pinterInput,Modifier.transformable…
- ユーザー操作を受け取る方法が用意されているので、それをStateに反映させる
- 困りごと
- 操作によってアニメーションの有無を分ける必要がある場合
- 状態が増えて煩雑 →
Animatableを使う(animateTo,snapTo)
Compose におけるパスワード自動入力とパスワード保存
- パスワードの自動入力 + Google パスワードマネージャによる自動生成
- Compose では Compose UI 1.8.0 以上から提供
Modifier.semantics { contentType = }ContentType.Username+ContentType.Passwordの組み合わせが同じComposableにあって自動入力が発動ContentType.NewPasswordで自動生成が発動
- パスワード保存
autoFillManager?.commitをButton.onClickなどで実行- ↑ 読んでもパスワード保存ダイアログが表示されない罠
NewUsernameとNewPasswordが同一Composableに存在する必要があり- かつ 両方を操作した という条件が必要そう
- 解決策:CredentialManager(注意点)
Foldable 端末で最強のメモ環境を作りたい
@Krgm4D さん
- foldable 対応
- 閉じた状態と開いた状態
windowSizeClassとisOpenedで条件分岐して、Composable を出し分ける- AdaptiveLayout を利用する
- ^置きとかL置きとか
- サブディスプレイモードへの対応(背面ディスプレイに Activity を移動する)