Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
あるあるLT Android採用編 @nabetaro_jp
Slide 2
Slide 2 text
自己紹介 ๏ なべ@nabetaro_jp ๏ and factory.inc ๏ Android エンジニア ๏ 漫画アプリ開発 #スクラム #採用 #チームビルディング #iOSビギナー
Slide 3
Slide 3 text
エンジニアの採用に かかわってますか ! \あるある/
Slide 4
Slide 4 text
Developers Boostで 「採用にコミットした話」で登壇してきました \いいね/
Slide 5
Slide 5 text
Android面接の質問あるある その質問したことある→あるある いい質問ですね→いいね
Slide 6
Slide 6 text
? Q. Kotlinで開発したことあります? あるある! いいね!
Slide 7
Slide 7 text
Kotlinでの開発経験は重要 ๏ 2017年にKotlinが正式にサポートされたのもあり、Javaでの開発はあま り見られなくなった。 ๏ Android KTXなどKotlinの言語機能(拡張、プロパティ、ラムダ、 名前付きパラメータ)をつかうことでよりコードがシンプルに! ๏ String.toColorInt()とか、Collections.joinToString()とか ๏ 業務経験もあるといいけど、さすがにつかっておいてほしいなぁ ๏ Swift -> Javaはむずいけど、Swift -> Kotlinは意外といける
Slide 8
Slide 8 text
例:bundleOf class TitleFragment : Fragment() { companion object { fun newInstance(titleId: TitleId) = TitleFragment().apply { arguments = bundleOf(KEY_TITLE_ID to titleId) } } }
Slide 9
Slide 9 text
例:bundleOf class TitleFragment : Fragment() { companion object { fun newInstance(titleId: TitleId) = TitleFragment().apply { arguments = bundleOf(KEY_TITLE_ID to titleId) } } }
Slide 10
Slide 10 text
? Q. アーキテクチャパターンは どれを採用したことがあります? あるある! いいね!
Slide 11
Slide 11 text
Android MVVMは知見の宝庫 ๏ Googleのアプリのアーキテクチャガイドでも推奨されている ๏ Model, View, ViewModelの頭文字 ๏ Jetpack, Kotlin Coroutinesなしではシナジーが最大化しない
Slide 12
Slide 12 text
viewModelScope fun fetchData(titleId: TitleId) { viewModelScope.launch { _uiState.postValue(UiState.Loading) when (val result = fetchTitleUseCase.execute(titleId)) { is Result.Success -> { _uiState.postValue(UiState.Loaded) _data.postValue(result.data) } is Result.Failure -> { when (val e = result.error) { is TopError.NetworkError -> _uiState.postValue(UiState.Retry) is TopError.TopClientError -> { _uiState.postValue(UiState.Error) showPopupAction.postValue(Event(e.popup)) } else -> showErrorCommand.postValue(e) } } } } }
Slide 13
Slide 13 text
viewModelScope fun fetchData(titleId: TitleId) { viewModelScope.launch { _uiState.postValue(UiState.Loading) when (val result = fetchTitleUseCase.execute(titleId)) { is Result.Success -> { _uiState.postValue(UiState.Loaded) _data.postValue(result.data) } is Result.Failure -> { when (val e = result.error) { is TopError.NetworkError -> _uiState.postValue(UiState.Retry) is TopError.TopClientError -> { _uiState.postValue(UiState.Error) showPopupAction.postValue(Event(e.popup)) } else -> showErrorCommand.postValue(e) } } } } }
Slide 14
Slide 14 text
viewModelScope fun fetchData(titleId: TitleId) { _titleId = titleId viewModelScope.launch { _uiState.postValue(UiState.Loading) when (val result = fetchTitleUseCase.execute(titleId)) { is Result.Success -> { _uiState.postValue(UiState.Loaded) _data.postValue(result.data) } is Result.Failure -> { when (val e = result.error) { is TopError.NetworkError -> _uiState.postValue(UiState.Retry) is TopError.TopClientError -> { _uiState.postValue(UiState.Error) showPopupAction.postValue(Event(e.popup)) } else -> showErrorCommand.postValue(e) } } } } } ๏ ViewModelScopeでJob のキャンセルをVMのライフサ イクルに紐づけることで非同 期処理の管理が楽に
Slide 15
Slide 15 text
だいじなところは何なのか ๏ Android アプリ設計パターン入門 ๏ Fat Activity問題 : 複雑性の増加による開発速度の低下 ๏ Dagger2 : DIライブラリ。Annotationによるコンパイル時のコード生成ベー ス。クラス間の結合度を低下させるため、アジャイル開発やテストに強い。 ๏ RxJava2 : リアクティブプログラミング用。コールバック地獄対策。非同期 処理の実装だけだと学習コストが高いのでCoroutineを使うことが増えた。 ๏ 実際の開発現場のハナシ
Slide 16
Slide 16 text
? Q. Android JetPackについて 知っていることをおしえてください あるある! いいね!
Slide 17
Slide 17 text
高品質かつ簡単に作成するためのライブラリ ๏ 5年前の開発を考えると泣きそうになる ๏ もはやこれなしでは生きていけない ๏ KTX ๏ AAC(Android Architecture Component) ๏ Lifecycle, ViewModel, LiveData, Room, Navigation.. https://developer.android.com/jetpack?hl=ja
Slide 18
Slide 18 text
? Q.Networkの処理とかどんな感じで かいたりします? あるある! いいね!
Slide 19
Slide 19 text
Retrofit + OkHttpは すでにデファクトスタンダード ๏ AsyncTaskを覚えているだろうか?2012年くらいでしょうか・・ ๏ AsyncTaskが抱えていた問題 https:// www.techyourchance.com/asynctask-deprecated/ ๏ Square製 ๏ 今年の6月Version 2.6.0(最新は2.7.0)でサスペンド修飾子がサ ポートされ、HTTPリクエストをcoroutineを使ってかけるようになった @GET("users/{id}") suspend fun user(@Path("id") id: Long): User https://www.techyourchance.com/asynctask-deprecated/
Slide 20
Slide 20 text
Retrofit + OkHttpは すでにデファクトスタンダード ๏ AsyncTaskを覚えているだろうか?2012年くらいでしょうか・・ ๏ Square製 ๏ 今年の6月Version 2.6.0(最新は2.7.0)でサスペンド修飾子がサ ポートされ、HTTPリクエストをcoroutineを使ってかけるようになった @GET("users/{id}") suspend fun user(@Path("id") id: Long): User Retrofitてかいてますやん
Slide 21
Slide 21 text
Androidアプリ開発が簡単になってきた
Slide 22
Slide 22 text
知識を聞いてきたけど ほんとにそれでいいのだろうか?
Slide 23
Slide 23 text
“経験を積んだ人は物事がこうであることを 知っているが、なぜそうであるかは知らない” マルティン・ハイデッガー
Slide 24
Slide 24 text
• 「なぜ」とは自分の動機、ビ ジョンや理念のこと。 • 自分が信じているwhyを語り共 感が生まれれば、人々を惹きつ けることができる。 ゴールデン・サークル
Slide 25
Slide 25 text
? 大事なのは「なぜ」 ๏ What < How < Whyの順番で答えるのは難しくなる ๏ なぜこの技術を使うことになったのか、経緯を知りたい ๏ 何を解決するものなのか、この技術が大事にしていることはなんなのか チームメンバーと開発する上で、納得感を持って作業するためにはなぜに 向き合う必要がある
Slide 26
Slide 26 text
良くも悪くもエンジニア文化にあった人を採用するには 「なぜ」からくる直感に耳を傾けなければならない
Slide 27
Slide 27 text
and factory Advent Calendarでも まとめてみましたのでよかったら見てください \いいね/ https://qiita.com/nabetaro_jp/items/eb9f6fd4f596b38f56cf
Slide 28
Slide 28 text
おしまい