Slide 1

Slide 1 text

Android StudioのLiveTemplateの便 利な使い方
 株式会社ZOZO
 ブランドソリューション開発本部 フロントエンド部 FAANSブロック
 山田 尚吾 Copyright © ZOZO, Inc. ZOZO Tech Meetup - iOS/Android (2023/07/11)


Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO
 ブランドソリューション開発本部 フロントエンド部 FAANSブロック Android担当
 
 山田 尚吾
 ・Twitter: @yshogo87
 ・2018年入社(入社5年目)ZOZOTOWN → FAANS
 ・趣味は、読書、eスポーツ鑑賞
 (読書好きの方お話しましょう!)
 2

Slide 3

Slide 3 text

© ZOZO, Inc. アジェンダ
 3 ● FAANSとは
 ● LiveTemplateって知ってますか?
 ● LiveTemplateはgit管理ができる!
 ● FAANS Andridチームで使うことになった経緯と使い方
 ● まとめ


Slide 4

Slide 4 text

© ZOZO, Inc. アジェンダ
 4 ● FAANSとは
 ● LiveTemplateって知ってますか?
 ● LiveTemplateはgit管理ができる!
 ● FAANS Andridチームで使うことになった経緯と使い方
 ● まとめ


Slide 5

Slide 5 text

© ZOZO, Inc. ショップスタッフの販売サポートツール「FAANS」
 5 引用: https://corp.zozo.com/news/20220802-zozomofaans/

Slide 6

Slide 6 text

© ZOZO, Inc. アジェンダ
 6 ● FAANSとは
 ● LiveTemplateって知ってますか?
 ● LiveTemplateはgit管理ができる!
 ● FAANS Andridチームで使うことになった経緯と使い方
 ● まとめ


Slide 7

Slide 7 text

© ZOZO, Inc. 7 いつも同じようなコードを書いていませんか?


Slide 8

Slide 8 text

© ZOZO, Inc. 8 こんなのとか?
 @Provides fun provide〇〇Repository( context: Context, provider: 〇〇Provider, ): 〇〇Repository = 〇〇RepositoryImpl( context, provider, )

Slide 9

Slide 9 text

© ZOZO, Inc. 9 こんなのとか?
 @HiltViewModel class 〇〇ViewModel @Inject constructor( private val handle: SavedStateHandle, private val △△UseCase: △△UseCase, ) : ViewModel() { init { fetchInitialData() } }

Slide 10

Slide 10 text

© ZOZO, Inc. 10 これLiveTemplateで解決できる!


Slide 11

Slide 11 text

© ZOZO, Inc. 11 LiveTemplateとは
 Jetbrain社のIDEに搭載されている機能
 ライブテンプレートの略語を展開すると、その変数は値を入力できる入力フィールドとして表示されるか、値に置 き換えられます。これらは、変更可能なデフォルト値または関数を使用して計算された値です。
 引用:https://pleiades.io/help/idea/template-variables.html


Slide 12

Slide 12 text

© ZOZO, Inc. 12 テンプレートを作っておくと略語でテンプレを呼び出せる


Slide 13

Slide 13 text

© ZOZO, Inc. 13 テンプレートの設定方法と中身
 設定→LiveTemplate
 @Provides fun provide$NAME$Repository( context: Context, provider: $NAME$Provider, ): $NAME$Repository = $NAME$RepositoryImpl( context, provider, ) $NAME$ みたいな変数を駆使することで同じ名前を一気に設定したりできる。


Slide 14

Slide 14 text

© ZOZO, Inc. 14 デフォルトでもいろいろ設定してある
 fun newInstance($args$): $fragment$ { val args = Bundle() $addArgs$ val fragment = $fragment$() fragment.arguments = args return fragment } Toastを作る(「toast」と入力)
 android.widget.Toast.makeText($context$, "$text$", Toast.LENGTH_SHORT).show() Fragmentのインスタンスを作る(「newInstance」と入力する)


Slide 15

Slide 15 text

© ZOZO, Inc. 15 そして、このLiveTemplateは
 Git管理できます!!


Slide 16

Slide 16 text

© ZOZO, Inc. アジェンダ
 16 ● FAANSとは
 ● LiveTemplateって知ってますか?
 ● LiveTemplateはgit管理ができる!
 ● FAANS Andridチームで使うことになった経緯と使い方
 ● まとめ


Slide 17

Slide 17 text

© ZOZO, Inc. 17 Settings→Editor→File and Code Templates


Slide 18

Slide 18 text

© ZOZO, Inc. 18 Settings→Editor→File and Code Templates


Slide 19

Slide 19 text

© ZOZO, Inc. 19 .idea/fileTemplateにファイルが作成される
 LiveTemplateの設定 ProjectのLiveTemplateの設定な どが自動で格納

Slide 20

Slide 20 text

© ZOZO, Inc. 20 できたファイルをGitで管理すれば、
 他のメンバーも同じテンプレートを使用できる
 このファイルをGit管理している。

Slide 21

Slide 21 text

© ZOZO, Inc. アジェンダ
 21 ● FAANSとは
 ● LiveTemplateって知ってますか?
 ● LiveTemplateはgit管理ができる!
 ● FAANS Andridチームで使うことになった経緯と使い方
 ● まとめ


Slide 22

Slide 22 text

© ZOZO, Inc. 22 FAANS Androidチームが使うことになった経緯
 Repositoryを分割するリファクタリングとテスト コードを書くタスクをやることになった。


Slide 23

Slide 23 text

© ZOZO, Inc. 23 FAANS Androidチームが使うことになった経緯
 Repositoryを分割するリファクタリングとテスト コードを書くタスクをやることになった。
 同じようなコードを何回も書くことに。。。


Slide 24

Slide 24 text

© ZOZO, Inc. 24 FAANS Androidチームが使うことになった経緯
 import javax.inject.Inject interface TestRepository { fun hoge(hogeId: Int): Response } class TestRepositoryImpl @Inject constructor( apiProvider: Provider ) : TestRepository { fun hoge(hogeId: Int): Response { } } ・赤いところが、毎回違う定義
 ・他が同じコード


Slide 25

Slide 25 text

© ZOZO, Inc. 25 @ExperimentalCoroutinesApi class HogeRepositoryTest { @MockK lateinit var provider: HogeProvider @Before fun setUp() { MockKAnnotations.init(this) } @After fun tearDown() { clearAllMocks() } @Test fun ``() = runTest { Truth.assertThat(-1).isNotNull() } } ・テストコードも大枠は大体同じ


Slide 26

Slide 26 text

© ZOZO, Inc. 26 これらをLiveTemplateで解決する
 package ${PACKAGE_NAME} import javax.inject.Inject interface ${Name}Repository {} class ${Name}RepositoryImpl @Inject constructor( ) : ${Name}Repository { }

Slide 27

Slide 27 text

© ZOZO, Inc. 27 @ExperimentalCoroutinesApi class ${Name}RepositoryTest { @MockK lateinit var repository: ${Name}Repository @Before fun setUp() { MockKAnnotations.init(this) } @After fun tearDown() { clearAllMocks() } @Test fun ``() = runBlockingTest { Truth.assertThat(-1).isNotNull() } }

Slide 28

Slide 28 text

© ZOZO, Inc. 28 packageを右クリック→New→選ぶ


Slide 29

Slide 29 text

© ZOZO, Inc. 29 他の活用事例
 FragmentとViewModelを同時に作って、設計通りのコードを生 成する


Slide 30

Slide 30 text

© ZOZO, Inc. 30 @AndroidEntryPoint class ${Name}Fragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View = ComposeView(requireContext()).apply { setViewCompositionStrategy( ViewCompositionStrategy.DisposeOnLifecycleDestroyed(viewLifecycleOwner), ) @HiltViewModel class ${Name}ViewModel @Inject constructor() : ViewModel() { }

Slide 31

Slide 31 text

© ZOZO, Inc. 31 このLiveTemplateを使えば、
 実装の手間を省くことの他に設計を強制できる


Slide 32

Slide 32 text

© ZOZO, Inc. アジェンダ
 32 ● FAANSとは
 ● LiveTemplateって知ってますか?
 ● LiveTemplateはgit管理ができる!
 ● FAANS Andridチームで使うことになった経緯と使い方
 ● まとめ


Slide 33

Slide 33 text

© ZOZO, Inc. 33 まとめ
 ● LiveTemplateはJetbrain社のIDEにある機能
 ● 個人レベルで定義可能
 ● Git管理もできるので、「チームの実装を楽にするために」 も、「設計を強制するために」も使える


Slide 34

Slide 34 text

No content