Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Xamarinで割り勘アプリを作る
Search
Ryosuke Uchiyama
January 31, 2020
Programming
1
130
Xamarinで割り勘アプリを作る
Ryosuke Uchiyama
January 31, 2020
Tweet
Share
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
AWSでサーバレスな書籍管理アプリを作る
step63r
0
36
PythonでSlack通知botを作る
step63r
0
10
ChatGPT実践
step63r
1
350
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
12
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
12
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
250
Build 2021 プレイバック
step63r
0
31
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
43
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
110
Other Decks in Programming
See All in Programming
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
Grafana:建立系統全知視角的捷徑
blueswen
0
330
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
120
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
480
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
CSC307 Lecture 03
javiergs
PRO
1
490
Package Management Learnings from Homebrew
mikemcquaid
0
230
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
140
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
590
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
New Earth Scene 8
popppiees
1
1.5k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
190
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
The Curious Case for Waylosing
cassininazir
0
240
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
160
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Thoughts on Productivity
jonyablonski
74
5k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
Transcript
Xamarinで割り勘アプリを作る Ryosuke Uchiyama
ソースコード step63r/DrinkPartyBillSplit https://github.com/step63r/DrinkPartyBillSplit
10分で分かった気になるXamarin
今までのアプリ開発 iOS App Android App Windows App Objective-C Xcode Java
Eclipse C# Visual Studio
モバイル向けクロスプラットフォーム開発環境? No Silver Bullet 銀の弾丸などない
Xamarin • ネイティブAPIを100%移植 • ネイティブアプリを作成できる • C# / .NET /
Visual Studioで開発できる • コードを共通化できる • 画面も共通化できる
Xamarinネイティブ iOS C# UI Android C# UI Windows C# UI
Shared C# Backend
Xamarin.Forms Shared C# Backend Shared UI Code iOS Android Windows
もっと詳しく
Page群
Layout群
Control群 ActivityIndicat or BoxView Button DatePicker Editor Entry Image Label
ListView Map OpenGLView Picker ProgressBar SearchBar Slider Stepper TableView TimePicker WebView EntryCell ImageCell SwitchCell TextCell ViewCell
.NET StandardによるBCLの一元化
.NET StandardによるBCLの一元化
Portable Class Library (PCL)
MVVMパターン
WPFにおける見た目 <> C# XAML (MainWindow.xaml) コードビハインド (MainWindow.xaml.cs)
素直に分離 <> XAML (MainWindow.xaml) C# コードビハインド (MainWindow.xaml.cs) C# その他クラス 見た目
ロジック
データバインディングに最適化 <> XAML + コードビハインド C# C# その他クラス C# 見た目
ロジック データバインドの ソース
MVVMパターン View ViewModel Model データ バインディング コマンド メソッド呼出し プロパティ設定 変更通知
変更通知
なぜMVVMなのか • 見た目とロジックを分離できる • 分離できるのでテストコードが書きやすくなる • コードビハインドの記述が減る(複雑な描画処理の場合は必要) • UIスレッド外からの変更通知が容易に受け取れる •
Viewがインスタンスを持たなくてもオブジェクトの操作が可能になる
割り勘アプリ
開発環境 • Windows 10 Pro (64-bit) • SO-01H / Android
7.0 (Nugat) • Visual Studio Professional 2019 • .NET Standard 2.0 ※iOS版はビルド環境なしのため対象外
機能概要 • 飲み会の割り勘金額を計算する • 役職ごとに参加人数とうち主賓人数を入力し、精算額を按分する • 主賓の負担金額は0円とする • 役職は職位と名前で任意に設定できる •
割り勘金額計算ルールはなるべく柔軟に決められるようにする • 役職設定と飲み会データはXML形式で保存する
画面遷移 宴会一覧・追加 宴会詳細 メニュー 役職一覧・追加・削除
データモデル 飲み会クラス • 飲み会ID • 開催日付 • 飲み会名 • 参加者リスト
• 合計金額 役職クラス • 役職ID • 役職名 参加者クラス • 役職ID • 参加人数 • 主賓人数 割り勘後支払額クラス • 役職 • 支払人数 • 一人あたり金額 標準割り勘ルール • 割り勘金額を計算する 割り勘ルールインタフェース 計算
Data Models Party string ID DateTime Date string Name List<Attendee>
Attendees int TotalFee Grade int Id string Name Attendee Grade Grade int TotalCount int GuestCount SplitBill Grade Grade int Payer int Amount DefaultSplitRule CalculateAmountAsync() ISplitRule 計算
ファイルの保存先について • XamarinのファイルIOはプラットフォームにより異なる • なのでファイル作成や保存ロジックも本来ならばOS個別に書く必要がある • が、それはとてもめんどくさい(低レイヤはあまり深く考えたくない!) • そこで、PCL Storageというライブラリを使う
• これでXamarin.FormsのIOロジックを共通に呼び出せるようになる • ただし.NET Standardプロジェクトの場合、本当はNetStandard Storageを使 う必要があるが、Warningでビルドは通るのでひとまず無視する
Visual Studio 2019でXamarin Androidエミュレータ設定まで
インストール
Hyper-V /Windows Hypervisor Platform
Android SDK Manager
Android Device Manager
プロジェクトの作成
Demo
Appendix
参考文献 • 10分間で分かった気になれるXamarin概要 - Build Insider • 第1回:Xamarinでアプリを作ろう (1/5):特集:Visual StudioとXamarinで始めるiOS/Android/UWPアプリ開発
- @IT • Introducing .NET Standard – .NET Blog • プログラミングな日々: MVVMとは何か • Xamarin で ItemsControl っぽいコントロールを作りたい(1) - しっぽを追いかけて • GitHub - dsplaisted/PCLStorage: PCL Storage - Portable Storage APIs • Hyper-VでサクサクAndroidエミュレータを使おうと思ったらハマったはなし – Qiita