SlideShare a Scribd company logo
1 of 33
Download to read offline
少しずつキャッチアップしていくAndroidアプリ開発
あるあるLT	#13	@	オンライン
2020/11/04
Fumiya	Sakai
自己紹介
・Fumiya	Sakai
・Freelance	App	Engineer
アカウント:
・Twitter:	https://twitter.com/fumiyasac

・Facebook:	https://www.facebook.com/fumiya.sakai.37

・Github:	https://github.com/fumiyasac	

・Qiita:	https://qiita.com/fumiyasac@github
発表者:
・Born	on	September	21,	1984
これまでの歩み:
Web	Designer
2008	~	2010
Web	Engineer
2012	~	2016
App	Engineer
2017	~	Now
iOSのUI実装本を執筆しています!
少しの工夫で実現できるTIPS集 ライブラリ表現の活用集
書籍に掲載したサンプルのバージョンアップや続編等に現在着手中です。
過去に技術書典8で電子版だけ頒布した書籍紹介
Vol.1及びVol.2に頒布したものの中で書籍に載せきれなかったものを紹介
第1章:	メディアアプリ型のUI	
第2章:	構造が複雑な写真表示UI
記事一覧を無限スクロールする様な形のアプリ
UIを一覧/詳細表示を簡素化した実装を紹介。
現在はBoothにて販売中です! https://booth.pm/ja/items/1835468
¥1,000	-	iOSアプリ開発「UI実装であると嬉しいレシピブック	まかない編」
サンプルコード:	https://github.com/fumiyasac/meals_ios_ui_recipe_showcase
第3章:	Combine	+	UICollectionViewCompositionalLayout
タイル状のフォトギャラリーや一覧表示型のア
プリUIでライブラリを活用した実装を紹介。
実務でも利用&考察したもの
特に第1章と第2章の内容に関し
ては、実際に相談されたり、実
装アイデアとして活用する機会
があったものになります。
	全てUIKitを利用
新たに技術書典9で電子版だけ頒布した書籍紹介
表現や動きが特徴的でユーザーにもほんの少し遊び心を与える様なUI実装を紹介
現在はBoothにて販売中です! https://booth.pm/ja/items/2360379
¥1,000	-	iOSアプリ開発「UI実装であると嬉しいレシピブック	おもしろ編」
サンプルコード:	https://github.com/fumiyasac/meals_2nd_ios_ui_recipe_showcase
実務導入前の検証段階
若干一癖がありそう、ぱっと見
だと実装の方針が立ちにくい感
じに見受けられそうなUI実装や
構造に関して考察しました。
	UIKit	&	SwiftUIを利用
第1章:	面白い表現のフォトギャラリーUI	
第2章:	画面ロック機能を利用したUI
UICollectionViewを活用したユニークなレイア
ウト表現と画面遷移カスタマイズ実装を紹介。
第3章:	SwiftUI	+	OSS	Libraryの活用
SceneDelegateの機能や端末認証を利用した画
面ロック機能を盛り込んだ実装を紹介。
今年の5月末よりAndroidアプリ開発もするように
Javaは過去に経験はあったけど、Androidアプリ開発は今回初めて
参考:	比較的軽めのタスクをこなしながらキャッチアップ期間を過ごした時の記録

https://note.com/fumiyasac/n/nec1c3c80f12d
Webエンジニアをしていた際に業務経験としてはあるんだけどもKotlinに触れているわけではなかった。
1.	過去にSpring(Java)等は経験はあったけど…
ざっくりとしたAndroid側の知識はあれどもネイティブアプリ側の開発経験はほぼ皆無といっても良い。
2.	過去にReactNativeを触っていた際にAndroid側に触れたことは少しあったけど…
個人的に「共通点と相違点を見つけながら」という部分にフォーカスを当てて進めていました。
いきなり触るのではなく自分なりにコードにおける大事な部分を言語化しながら読み進めていく。
3.	最初はiOS側の開発と並行しながらAndroid側のコードも読む時間を取る様にする。
基本的には予習と実践の2段構成
(1)	Server	Side	Kotlinでまずは自分なりに練習
簡単にAPIサーバーを立てて試してみようというところから始める
Kotlinそのものに触れる機会を業務外でも持つ
まずはKotlinの書き方そのものに慣れる&Layered	Architectureの基本を知る
iOSアプリサンプル実装で利用するバックエンド用のAPI通信サンプルを元に実装する
自分が経験のある技術スタックからヒント	→	Laravel	/	Rails
Language:
Framework:
Middleware:
Infra:
POST処理実装
テストユーザー作成・認証
GET処理実装
DB格納表示データ返却
Server	Side	Kotlin	+	Spring	Bootのコード例(1)
簡単に責務を分離した状態でDB側とのやり取りをする処理
@Repository

interface	ItemRepository	:JpaRepository<ItemEntity,	Int>	{

	 @Query(value	=	"SELECT	*	FROM	items	ORDER	BY	id	ASC	LIMIT	:limit	OFFSET	:offset"	,	nativeQuery	=	true)

	 fun	selectItemPerPage(@Param("limit")	limit:	Int,	@Param("offset")	offset:	Int):	List<ItemEntity>

}
@Service

class	ItemService	{

				@Autowired

				private	lateinit	var	itemRepository:	ItemRepository

				fun	findListPerPage(limit:	Int,	offset:	Int):	List<ItemEntity>	{

								return	itemRepository.selectItemPerPage(limit	=	limit,	offset	=	offset)

				}

}
@Entity

@Table(name="items")

data	class	ItemEntity(・・・MySQL側のカラム構造と合わせた構成にする・・・)
「Entity	⇆	Repository	⇆	Service」の3層構成
Entity: DB格納内容とのMapping
Service: RepositoryのSQL処理との仲介
Repository: ライブラリJPAを利用してSQLを組み立てる処理
Server	Side	Kotlin	+	Spring	Bootのコード例(2)
実際にJSONの形式でデータを返却するための処理
@RestController

@RequestMapping(“/api/v1")

@Api(description	=	"iOSアプリトップ画面アイテム一覧に関するエンドポイント(表示コンテンツ)")

class	ItemController	{

	 private	val	LIMIT_PER_PAGE	=	9

	 @Autowired

	 private	lateinit	var	itemService:	ItemService

	 @GetMapping("/items")

	 fun	findListPerPage(@ApiParam(value	=	"ページ番号",	required	=	false)	@RequestParam(required	=	false,	defaultValue	=	"1")	page:	
String):	ItemListResponse	{

	 	 val	currentPage	=	page.toInt()

	 	 if	(currentPage	<	1)	{	throw	BadRequestException(“パラメーターの値が不正です。")	}

	 	 val	hasNextPage	=	(currentPage	*	LIMIT_PER_PAGE	<	itemService.findAllCount())

	 	 val	offset	=	(currentPage	-	1)	*	LIMIT_PER_PAGE

	 	 val	items	=	itemService.findListPerPage(limit	=	LIMIT_PER_PAGE,	offset	=	offset)

	 	 return	ItemListResponse(result	=	items,	currentPage	=	currentPage,	hasNextPage	=	hasNextPage)

	 }

}
実際にAPIレスポンスを返却するController部分
Annotationの理解: 結構最初は取っ付きづらい部分
Pagination処理: Service層へ必要なものを送る
(2)	あれ、感覚が似ているかもしれない…?
コードの書き方の部分や設計に関する細かな部分での類似点に触れる
①
GUIを利用したレイアウトの作成について(1)
AutoLayout(iOS)	&	ConstraintLayout(Android)を見てみる
10
24
24
10
CenterX:280
CenterY:200
相対的な位置関係の調節を
コードまたはGUIで実装
<androidx.constraintlayout.widget.ConstraintLayout

				android:layout_width="match_parent"

				android:layout_height="wrap_content">

				<View	

								android:layout_width="0dp"

								android:layout_height="wrap_content"

								app:layout_constraintTop_toTopOf="10dp"

								app:layout_constraintBottom_toBottomOf="10dp"

								app:layout_constraintStart_toStartOf="24dp"

								app:layout_constraintEnd_toEndOf="24dp"	/>
contentView.addSubview(childView)

childView.snp.makeConstraints	{	make	in

					make.top.equalToSuperview().offset(10.0)

					make.right.equalToSuperview().offset(24.0)

					make.left.equalToSuperview().offset(24.0)

					make.bottom.equalToSuperview().offset(10.0)

}
contentView.addSubview(childView)

childView.snp.makeConstraints	{	make	in

					make.centerX.equalToSuperview()

					make.centerY.equalToSuperview()

					make.height.equalTo(200.0)

					make.width.equalTo(280.0)

}
<LinearLayout

				android:layout_width="match_parent"

				android:layout_height="wrap_content"

				android:gravity="center_horizontal"

				android:orientation="vertical">

				<View

								android:layout_width="280dp"

								android:layout_height="200dp"	/>
iOS:	AutoLayout	(with	SnapKit)
Android:	ConstraintLayout	&	Gravity
①	相対配置
②	中央寄せ
①
②
②
GUIを利用したレイアウトの作成について(2)
UIStackView(iOS)	&	LinearLayout(Android)を見てみる
UIStackViewの内部にXibで切り出したりコードで
作成したView要素のクラスを追加する。
iOS:	UIStackView
match_parent/wrap_contentで親との位置関係を
指定しorientationで横・縦方向の指定をする。
Android:	LinearLayout
レイアウトを構築する上で
も活用機会が多いView要素
Horizontal
Vertical
<LinearLayout

				android:layout_width="match_parent"

				android:layout_height="wrap_content"

				android:orientation=“vertical">

この中に各種要素やConstraintLayoutを配置

</LinearLayout>
contentsStackView.addArrangedSubview(contentView1)

contentsStackView.addArrangedSubview(contentView2)
コードでの実装例:
contentView2
contentView1
縦に長い可変の画面要素の配置や等間隔での要素
の整列時に用いる場面など結構な頻度で活用する
ConstraintLayoutとも上手に併用しながら実装
アーキテクチャの大枠をiOS/Androidで合わせる
iOS/Android間で設計思想を合わせておくことで考えやすくなると感じています
責務に適切に分割/分離することで実装が考えやすくなる。
1.	MVVM(MVP)+	Layered	Architectueの構成
共通の拠り所とできうる基準を持つことでの安心感がある。
2.	ドメイン駆動設計(DDD)の世界に触れてみる
Entity
Service
Repository
DataTransfer
Factory
UseCase
Presenter
ViewModel
Activity
Fragment
BindingModel
iOS開発/Android開発を行ったり来たりしなければいけない場合にはこの恩恵を感じる場面は多いはず。
InfraStructure
DataStore
Context
①
②①
②
iOS/Android間でも実装や機能設計の際にお互
いのコードを比較しながら参考にしやすい
View要素や画面構築の手法やライフサイクル
が違うので切り分けて考える必要がある
APIサーバーより取得したデータの内容を画面に表示する際の処理の例を考えてみる
実装方法の手法をできるだけ統一する(1)
iOS側はRxSwift	/	Android側はRxJavaを利用した処理の事例
UseCase
Presenter
Repository層で定義したAPI通信後の処理をそれぞれ定義する。(※One	Usecase	has	many	Repositories)

Repositoryの処理を実行	→	flatMapでレスポンス内容を変換	→	Single<T>	/	Maybe<T>	/	Completableに変換
Repository
InfraStructure
UseCaseで実行された処理に対してUI側で実施する処理をそれぞれ定義する。

UseCaseの処理を実行	→	Main	Threadで実行する	→	成功時	/	エラー発生時	/	処理完了時	に合わせてUI処理を実行
今回例として挙げる部分はこちら
REST	APIやGraphQLを利用してサーバー側との非同期通信を実施する基盤となる処理
非同期通信の処理結果を元にEntityに変換したり内部キャッシュに保存する処理
※	RxSwift	/	RxJavaのStreamに乗せていくイメージ
doSomethingUseCase.execute()

.observeOn(

				uiScheduler

).subscribeBy(

				onSuccess	=	{	dto	->

//	MEMO:	処理成功時の処理(Viewの組み立て)

//	→	iOS側とほんのちょっと違う部分

								view.setUpContent(

												SomethingConverter.convertToBindingModel(dto)

								)

				},

				onError	=	{	error	->

//	MEMO:	エラー発生時のハンドリング処理

				},

				onComplete	=	{

								//	MEMO:	処理が完了した際に実施する処理

				}

).addTo(disposables)
Point1:
doSomethingUseCase.execute()

.observeOn(

				mainScheduler

).subscribe(

				onSuccess:	{	[weak	self]	dto	in

								guard	let	weakSelf	=	self	else	{	return	}

								//	MEMO:	処理成功時の処理(Viewの組み立て)

								weakSelf.view?.setupContent(

												SomethingConverter.convertToViewModel(dto)

								)

				},

				onError:	{	[weak	self]	error	in

								//	MEMO:	エラー発生時のハンドリング処理 

				},

				onCompleted:	{	[weak	self]	in

								//	MEMO:	処理が完了した際に実施する処理

				}

).disposed(by:	disposeBag)
実装方法の手法をできるだけ統一する(2)
実際のコードとして実装を当てはめてみるとこのような形にできる(Presenter)
スレッドや非同期
通信時処理はある
程度は類似した形
Android:	RxJavaを利用
Point2:
iOS:	RxSwiftを利用
RxSwift	/	RxJava
での記法をヒント
にして実装する
Maybe<Dto> Maybe<Dto>
iOS/Androidで頻出のOSSライブラリを調べてみる
iOS/Androidのよく用いられているものを知っておくと結構ヒントになることも
RxSwift(Ractive	Programming),	Resolver(Dependency	Injection),	Alamofire(Networking),	SwiftyJSON(JSON	Decoder),

Kingfisher(Image	Cache),	Quick	+	Nimble	+	SwiftyMocky(Unit	Testing),	…
1.	iOS側のライブラリ例
RxJava(Ractive	Programming),	Dagger2(Dependency	Injection),	OkHttp	+	Retrofit(Networking),	ExoPlayer(Movie),

Picasso(Image	Cache),	Groupie(RecyclerView),	BubbleLayout(Tooltip),	Mockito(Mocking),	…
2.	Android側のライブラリ例
Apollo(GraphQL),	lottie(Animation),	Firebase(Platform),	Realm(Data	Storage),	JWTDecode(JWT),	…
3.	iOS/Android両方ある例
iOS開発/Android開発を行ったり来たりしなければいけない場合にはこの恩恵を感じる場面は多いはず。
(3)	Android開発における基本事項を押さえる
実務でAndroid開発を進めていく上で最低限必要そうな部分を整理する
iOS/Androidのデザインガイドラインを理解する
デザインの統一感を意識していく際にもMaterialDesignの事を知る
iOS側もデザインをMaterialDesignに寄せていく決断をした際もガイドラインと合わせて不自然にならないように注意。
iOS:	Human	Interface	Guideline Android:	Material	Design
一見すると同じ様な見た目にも見えるかもしれないが、細かな点を注意深く見ていくと実装で配慮すべき点が見えてくる。
ActivityやFragmentのライフサイクルを理解する
画面に関する実装をする場合には押さえておきたい重要な部分
Activity Fragment
できるだけ見通しをよくす
るためにシンプルにする。
Activity:
Fragment:
画面レイアウトに関する処
理はできるだけこちらへ。
どんな感じの構成になっているかの一例:
Intentによる画面遷移処理など画面クラス全体に関わるもの
Activity:
Fragment:
RecyclerViewの処理やメニュー部分など画面表示全般
※	ActivityとFragmentが1対1対応が基本型
サーバー側とのAPI通信処理に関する概要
メールアドレスとパスワードで認証処理を実行する部分に関する例
val	okHttpClient	=	OkHttpClient.Builder()

				.addInterceptor(loggerInterceptor)

				.addInterceptor(OnlyBasicAuthorizationInterceptor())

				…	途中省略	…

				.build()

return	Retrofit.Builder()

				.baseUrl(BuildConfig.SESSION_API_URL)

				.client(okHttpClient)

				.addConverterFactory(GsonConverterFactory.create())

				.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

				.build()

				.create(SessionsApiClient::class.java)
interface	SessionsApiClient	{

				@POST("v1/sessions")

				fun	login(

								@Body	body:	HashMap<String,	String>

				):	Single<SessionTokenEntityJson>

}
sessionsApiClient.login(hashMapOf(

				EMAIL	to	email.value,	PASSWORD	to	password.value

))
OKHttpとRetrofitを併用したAPI通信処理:
①	APIリクエスト実行用Factoryクラス抜粋 ②	APIエンドポイント定義
③	必要があればModule化しておく
@Module

internal	class	XXXModule	{

@Provides

fun	provideSessionsApiClient():	
SessionsApiClient	=

				SessionsApiClientFactory().create()
実際の処理をする責務ではこんな感じで利用
当該エンドポイントとの通信実行
Log出力やBasic認証に関する処理
よく利用するRecyclerViewでの実装方法(1)
RecyclerViewを利用する際に押さえておきたい部分を簡単にまとめてみる
RecyclerView:
ListViewの進化版でListViewよりも高機能(Header/Footerはない,	区切り線は自前で準備)
Adapter:
1行分のデータを1行分のViewにして生成するもの
ViewHolder:
1行分のViewの参照を保持するもの(ライブラリ:	Groupieを利用)
ViewHolder Adapter RecyclerView
LayoutManager:
DataSizeを考慮してResponsiveにLayoutを管理する
①	Layout読み込み	&	Inflate
②	表示数分ViewHolder生成
DataSource ③	1行分データ取得④	1行分取得して設定
1行できたら格納
よく利用するRecyclerViewでの実装方法(2)
画面を構成するFragmentやViewHolder1個分の要素と関係を簡単にまとめてみる
Fragment
Fragment●●Binding
fragment_xxx.xml

-	ConstraintLayout

		-	Toolbar

		-	RecyclerView
fragment_xxx.xml内に配置
した要素をIDで取得可能
配置したRecyclerViewに適用するAdapter初期化時に下記も一緒に渡す

①	ViewHolderタップ時のEventListener	/	②	BindingModel
XML内では	android:text=“@{bindingModel.name}”の様にできる
Adapter
ViewHolder
※View要素内ではbinding.bindingModelで取得
・BindingModel内のデータを元にViewHolderを生成処理を実施

・ViewHolderタップ時のEventListenerとのBindもここで行う
※ライブラリ「Groupie」を利用
view_xxx.xml

ViewHolder1個分のLayout
BindingModel View要素に表示対象のデータ
View●●Binding
※Fragment同様XMLとBinding
例)	binding.recyclerView
(4)	UI実装をAndroidで実現しようとする場合の考え方
iOSのUI実装との相違点をヒントにして処理を調べていく様なアプローチ
Androidでは標準で準備されている表現例(1)
DrawerMenuはAndroidだと標準で用意されているがiOSは別途作成が必要
AndroidではDrawerMenuが標準で実装されている
公式ドキュメントでも実装方針や方法が示されている。

https://developer.android.com/guide/navigation/navigation-ui
一方でiOSでは自前で実装するかライブラリを活用する
ライブラリを利用しないで独自実装を進める方針:
-	ContainerViewとGestureRecognizerを利用して実現する
iOSアプリ内でDrawerMenuに近しい挙動を実現する例:

https://qiita.com/fumiyasac@github/items/eb5b17ab90f5aa27b793
ライブラリを利用して進める方針:
例)	SideMenu:

https://github.com/jonkykong/SideMenu
-	よく利用されるものなので著名なライブラリも存在する
Androidでは標準で準備されている表現例(2)
Tab付SwipeViewもAndroidでは実装方法が紹介されているがiOSは別途作成が必要
Tab	No.1 Tab	No.2 Tab Tab	No.1 Tab	No.2 Tab
AndroidではTab付SwipeViewの事例がすでにある
公式のドキュメントでも実装方針や方法が示されている。

https://developer.android.com/guide/navigation/navigation-
swipe-view

一方でiOSでは自前で実装するかライブラリを活用する
ライブラリを利用しないで独自実装を進める方針:
-	タブ表示部分:	UIScrollView	or	UICollectionView
例)	Parchment:

https://github.com/rechsteiner/Parchment
-	コンテンツ表示部分:	UIPageViewController
ライブラリを利用して進める方針:
-	よく利用されるものなので著名なライブラリも存在する
Swipable	Page	Contents
iOSとAndroidでのUI表現の方針の違いを知る(1)
縦方向だけではなく横方向へのスクロールも考慮する様な形の画面
Androidにおける実装方針例
RecyclerViewの入れ子構造	&	適用するLayoutManagerをSection毎に変更
Section:	0	(Category)
Section:	1	(Article)
Section:	2	(Featured)
Horizontal	Scroll
Horizontal	Scroll
Grid	Layout	Pattern
val	gridlayoutManager	=	GridLayoutManager(recyclerView.context,	4)

gridlayoutManager.spanSizeLookup	=	object	:	GridLayoutManager.SpanSizeLookup()	{

				override	fun	getSpanSize(position:	Int):	Int	{

								if	(categoriesCount	<	position)	{

												return	4

								}	else	{

												return	1

								}

				}

}

recyclerView.layoutManager	=	gridlayoutManager
val	linearLayoutManager	=

				LinearLayoutManager(recyclerView.context,	LinearLayoutManager.HORIZONTAL,	false)

recyclerView.layoutManager	=	linearLayoutManager
※iOSではUICollectionViewを利用する
-	格子状に並べる表現におけるLayoutManager設定例
-	水平方向へのスクロール表現におけるLayoutManager設定例
iOSとAndroidでのUI表現の方針の違いを知る(2)
Pinterestの様に配置するサムネイル画像のアスペクト比に合わせる
Androidにおける実装方針例
適用するLayoutManagerをStaggeredGridLayoutManagerに変更
Waterfall	Grid
val	staggeredGridLayoutManager

	=	StaggeredGridLayoutManager(2,	StaggeredGridLayoutManager.VERTICAL)

recyclerView.layoutManager	=	gridlayoutManager
※iOSではUICollectionViewを利用する
-	一見すると難しそうなレイアウトに見えるが実はこれだけ
写真アスペクト比
を考慮する形のレ
イアウト表現
参考:	StaggeredGridLayoutManager

https://developer.android.com/reference/androidx/
recyclerview/widget/StaggeredGridLayoutManager
一方でiOSでは自前で実装するのはなかなか大変な実装
参考:	UICollectionViewCompositionalLayoutを利用した例

https://qiita.com/fromkk/items/475eb761fa3352829f52
従来通りのUICollectionViewの実装だとレイアウト属性を調整する形になる
iOSとAndroidでのUI表現の方針の違いを知る(3)
配置したヘッダー画像がスクロールに合わせて伸縮する様なレイアウト
AndroidではCoodinatorLayoutを活用して実装する
①	実際の実装事例紹介

https://guides.codepath.com/android/handling-scrolls-with-
coordinatorlayout
一方でiOSでは自前で実装するかライブラリを活用する
ライブラリを利用しないで独自実装を進める方針:
基本はUIScrollView等を利用してスクロールの変化量をキャッチ
してヘッダー画像に付与しているAutoLayout制約を変更する形

(UINavigationBarの変化も考慮すると結構大変な処理)
例)	ParallaxHeader:

https://github.com/romansorochak/ParallaxHeader
Streachy	Header
②	CoodinatorLayoutに関する解説

https://techblog.yahoo.co.jp/android/androidcoordinatorlayout/
iOSとAndroidでのUI表現の方針の違いを知る(4)
iOSのUITabBarControllerの様な下タブで選択画面を切り替える形の表現
≡	タイトル
Bottom	Navigation
ViewPager
Toolbar	Title
スクリーン
Androidにおける実装方針例 ※iOSではUITabBarControllerを利用する
下タブを切り替え
るとタイトル表示
が変更される
下タブを切り替え
るとスクリーン表
示が変更される
ViewPager	&	BottomNavigation
BottomNavigationの使いどころを整理する

https://qiita.com/konifar/items/d64ada9c8ce069e6d138
BottomNavigationViewとNavigationを一緒に使う

https://qiita.com/superman9387/items/d373c8bddfe2243a49a7
ViewPagerとPagerAdapterでスワイプビューを作ってみる

https://qiita.com/shira-jun/items/1c40b087b38a370c6d18
BottomNavigation(下タブ)	+	Navigationを試してみる

https://qiita.com/orimomo/items/313ce4e273fa741dddf2
Navigation	+	BottomNavigationViewでFragmentの状態を残す

https://bit.ly/3mOV5Rh
まとめ
iOS/Android開発を並行しながら進めることで感じる共通点と相違点に向き合う
1.	予習と実践の2段構成を基本にして進めていくことで見えたものがある:
UIの作り方における作法や開発で利用するプログラミング言語、それにデザインに対する考え方はもちろん違いはある部分では
あるが内部実装における設計パターン等の部分については類似点があったりもするのでそこを手がかりとする。
2.	機能や実装を実現するにあたって必要そうになる部分をしつこく調査する:
実務でのコードを読む他にもUdemyの教材等も活用して本当に基本的な部分の理解から少しずつスタートしていった。

僕の場合は「アプリにおける頻出のUI表現」と「利用ライブラリとその効用」という観点からも調査をする形にした。
iOSアプリ開発は相変わらず楽しい、そして今新しいページが追加されている感覚が自分の中にある。
3.	iOSアプリではこうするけれどもAndroidアプリではどうする?という視点で紐解く:
iOSでのUI実装の方針をヒントにしながら、Androidアプリではいかに実現するかという視点を自分は持つ様に心がけた。

特に現在携わっている業務内ではDDDでアーキテクチャが合わせてあったのでその恩恵にうまくあやかることができた。
参考資料
この他にも沢山の情報に助けられてきましたがその一部をご紹介できれば!
iOSエンジニアだし、Androidアプリも作れるでしょ?

https://speakerdeck.com/akatsuki174/iosensiniatasi-androidahurimozuo-rerutesiyo
Modernize	the	development	of	LINE	Messenger	for	Android

https://speakerdeck.com/line_devday2019/modernize-the-development-of-
line-messenger-for-android
雰囲気で理解しないAndroid	MVVM

https://allyourbase.hatenablog.com/entry/dive-into-android-mvvm
これからはじめるAndroid開発

https://speakerdeck.com/star_zero/devfest-2020
来年に備えるためにAndroidの知識を網羅する

https://speakerdeck.com/wasabeef/looking-back-on-this-android-year-in-preparation-for-next-year
ロードマップの一例
1.	Kotlin文法やAndroid開発環境
2.	Layout構築やLifecycle理解
3.	API通信やデータ永続化処理
4.	頻出Architectureへの理解
5.	頻出UI処理と伴うロジック処理
6.	UnitTest/DI/MultiModule
Thank	you	for	listening	!

More Related Content

What's hot

試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & CombineFumiya Sakai
 
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介Fumiya Sakai
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるFumiya Sakai
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方Fumiya Sakai
 
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装Fumiya Sakai
 
アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集Fumiya Sakai
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説Fumiya Sakai
 
RxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップRxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップFumiya Sakai
 
Approach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOSApproach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOSFumiya Sakai
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめできるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめFumiya Sakai
 
iOSのUI構築小技集(小さなとこから始められる編)
iOSのUI構築小技集(小さなとこから始められる編)iOSのUI構築小技集(小さなとこから始められる編)
iOSのUI構築小技集(小さなとこから始められる編)Fumiya Sakai
 
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒントiOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒントFumiya Sakai
 
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録Fumiya Sakai
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fumiya Sakai
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)Fumiya Sakai
 
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-EdoiOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-EdoMegumi Otani(Czenhe)
 
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞくReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞくFumiya Sakai
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐためにFumiya Sakai
 
Swiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返りSwiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返りHikari Yanagihara
 

What's hot (20)

試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
 
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
 
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
 
アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集アプリ開発におけるテキスト装飾のアイデア集
アプリ開発におけるテキスト装飾のアイデア集
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
 
RxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップRxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップ
 
Approach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOSApproach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOS
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめできるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
 
iOSのUI構築小技集(小さなとこから始められる編)
iOSのUI構築小技集(小さなとこから始められる編)iOSのUI構築小技集(小さなとこから始められる編)
iOSのUI構築小技集(小さなとこから始められる編)
 
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒントiOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
 
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
 
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
 
Swift instagram viewer
Swift instagram viewerSwift instagram viewer
Swift instagram viewer
 
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-EdoiOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
 
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞくReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために
 
Swiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返りSwiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返り
 

Similar to 少しずつキャッチアップしていくAndroidアプリ開発

メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察Fumiya Sakai
 
まずはできるところから始める UnitTestとテストができる実装について
まずはできるところから始める UnitTestとテストができる実装についてまずはできるところから始める UnitTestとテストができる実装について
まずはできるところから始める UnitTestとテストができる実装についてFumiya Sakai
 
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).Fumiya Sakai
 
あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)Fumiya Sakai
 
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話Go言語で色々試行錯誤して フレームワークもどきを作ってみた話
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話Fumiya Sakai
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付きMayumi Narisawa
 
Adobe DPSで電子書籍アプリを作ってApp Storeで販売しよう
Adobe DPSで電子書籍アプリを作ってApp Storeで販売しようAdobe DPSで電子書籍アプリを作ってApp Storeで販売しよう
Adobe DPSで電子書籍アプリを作ってApp Storeで販売しようTakashi Oonishi
 
Potatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaPotatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaAkira Iwaya
 
App Inventor@夏サミOpenJam2012
App Inventor@夏サミOpenJam2012App Inventor@夏サミOpenJam2012
App Inventor@夏サミOpenJam2012Takeaki Tada
 
App inventorで想いを形に
App inventorで想いを形にApp inventorで想いを形に
App inventorで想いを形にTakeaki Tada
 
Appmethodで何か作ってみる
Appmethodで何か作ってみるAppmethodで何か作ってみる
Appmethodで何か作ってみるYou&I
 
F#で動かすraspberry pi+lego mindstorms
F#で動かすraspberry pi+lego mindstormsF#で動かすraspberry pi+lego mindstorms
F#で動かすraspberry pi+lego mindstormsMasuda Tomoaki
 
Lync 2013 アプリの開発ーJapan SharePoint Group
Lync 2013 アプリの開発ーJapan SharePoint GroupLync 2013 アプリの開発ーJapan SharePoint Group
Lync 2013 アプリの開発ーJapan SharePoint Groupadachiyosuke
 
「Camelog」Android開発秘話
「Camelog」Android開発秘話「Camelog」Android開発秘話
「Camelog」Android開発秘話Shoya Tsukada
 
「Facebook SDK for Android」を使ったFacebookログイン
「Facebook SDK for Android」を使ったFacebookログイン「Facebook SDK for Android」を使ったFacebookログイン
「Facebook SDK for Android」を使ったFacebookログインHiroyuki Nozaki
 

Similar to 少しずつキャッチアップしていくAndroidアプリ開発 (17)

メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察
 
まずはできるところから始める UnitTestとテストができる実装について
まずはできるところから始める UnitTestとテストができる実装についてまずはできるところから始める UnitTestとテストができる実装について
まずはできるところから始める UnitTestとテストができる実装について
 
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
 
あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)
 
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話Go言語で色々試行錯誤して フレームワークもどきを作ってみた話
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
LIFFとLINE SDKの昨今
LIFFとLINE SDKの昨今 LIFFとLINE SDKの昨今
LIFFとLINE SDKの昨今
 
Adobe DPSで電子書籍アプリを作ってApp Storeで販売しよう
Adobe DPSで電子書籍アプリを作ってApp Storeで販売しようAdobe DPSで電子書籍アプリを作ってApp Storeで販売しよう
Adobe DPSで電子書籍アプリを作ってApp Storeで販売しよう
 
Potatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaPotatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwaya
 
App Inventor@夏サミOpenJam2012
App Inventor@夏サミOpenJam2012App Inventor@夏サミOpenJam2012
App Inventor@夏サミOpenJam2012
 
App inventorで想いを形に
App inventorで想いを形にApp inventorで想いを形に
App inventorで想いを形に
 
Appmethodで何か作ってみる
Appmethodで何か作ってみるAppmethodで何か作ってみる
Appmethodで何か作ってみる
 
F#で動かすraspberry pi+lego mindstorms
F#で動かすraspberry pi+lego mindstormsF#で動かすraspberry pi+lego mindstorms
F#で動かすraspberry pi+lego mindstorms
 
Lync 2013 アプリの開発ーJapan SharePoint Group
Lync 2013 アプリの開発ーJapan SharePoint GroupLync 2013 アプリの開発ーJapan SharePoint Group
Lync 2013 アプリの開発ーJapan SharePoint Group
 
「Camelog」Android開発秘話
「Camelog」Android開発秘話「Camelog」Android開発秘話
「Camelog」Android開発秘話
 
SwiftでSNS投稿を行う
SwiftでSNS投稿を行うSwiftでSNS投稿を行う
SwiftでSNS投稿を行う
 
「Facebook SDK for Android」を使ったFacebookログイン
「Facebook SDK for Android」を使ったFacebookログイン「Facebook SDK for Android」を使ったFacebookログイン
「Facebook SDK for Android」を使ったFacebookログイン
 

More from Fumiya Sakai

RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介Fumiya Sakai
 
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwiftMeasures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwiftFumiya Sakai
 
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになったFumiya Sakai
 
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)Fumiya Sakai
 
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察するUIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察するFumiya Sakai
 
Hint of a little ingenuity about UI.
Hint of a little ingenuity about UI.Hint of a little ingenuity about UI.
Hint of a little ingenuity about UI.Fumiya Sakai
 
書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップFumiya Sakai
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版Fumiya Sakai
 

More from Fumiya Sakai (8)

RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
 
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwiftMeasures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
 
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
 
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
 
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察するUIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
 
Hint of a little ingenuity about UI.
Hint of a little ingenuity about UI.Hint of a little ingenuity about UI.
Hint of a little ingenuity about UI.
 
書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ書籍執筆からの今後に向けてのロードマップ
書籍執筆からの今後に向けてのロードマップ
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
 

少しずつキャッチアップしていくAndroidアプリ開発