Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android StudioのLiveTemplateの便利な使い方 / Android Li...

shogo.yamada
July 11, 2023
1.1k

Android StudioのLiveTemplateの便利な使い方 / Android LiveTemplate Method

shogo.yamada

July 11, 2023
Tweet

Transcript

  1. © ZOZO, Inc. 株式会社ZOZO
 ブランドソリューション開発本部 フロントエンド部 FAANSブロック Android担当
 
 山田

    尚吾
 ・Twitter: @yshogo87
 ・2018年入社(入社5年目)ZOZOTOWN → FAANS
 ・趣味は、読書、eスポーツ鑑賞
 (読書好きの方お話しましょう!)
 2
  2. © ZOZO, Inc. アジェンダ
 3 • FAANSとは
 • LiveTemplateって知ってますか?
 •

    LiveTemplateはgit管理ができる!
 • FAANS Andridチームで使うことになった経緯と使い方
 • まとめ

  3. © ZOZO, Inc. アジェンダ
 4 • FAANSとは
 • LiveTemplateって知ってますか?
 •

    LiveTemplateはgit管理ができる!
 • FAANS Andridチームで使うことになった経緯と使い方
 • まとめ

  4. © ZOZO, Inc. アジェンダ
 6 • FAANSとは
 • LiveTemplateって知ってますか?
 •

    LiveTemplateはgit管理ができる!
 • FAANS Andridチームで使うことになった経緯と使い方
 • まとめ

  5. © ZOZO, Inc. 8 こんなのとか?
 @Provides fun provide〇〇Repository( context: Context,

    provider: 〇〇Provider, ): 〇〇Repository = 〇〇RepositoryImpl( context, provider, )
  6. © ZOZO, Inc. 9 こんなのとか?
 @HiltViewModel class 〇〇ViewModel @Inject constructor(

    private val handle: SavedStateHandle, private val △△UseCase: △△UseCase, ) : ViewModel() { init { fetchInitialData() } }
  7. © ZOZO, Inc. 13 テンプレートの設定方法と中身
 設定→LiveTemplate
 @Provides fun provide$NAME$Repository( context:

    Context, provider: $NAME$Provider, ): $NAME$Repository = $NAME$RepositoryImpl( context, provider, ) $NAME$ みたいな変数を駆使することで同じ名前を一気に設定したりできる。

  8. © 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」と入力する)

  9. © ZOZO, Inc. アジェンダ
 16 • FAANSとは
 • LiveTemplateって知ってますか?
 •

    LiveTemplateはgit管理ができる!
 • FAANS Andridチームで使うことになった経緯と使い方
 • まとめ

  10. © ZOZO, Inc. アジェンダ
 21 • FAANSとは
 • LiveTemplateって知ってますか?
 •

    LiveTemplateはgit管理ができる!
 • FAANS Andridチームで使うことになった経緯と使い方
 • まとめ

  11. © ZOZO, Inc. 24 FAANS Androidチームが使うことになった経緯
 import javax.inject.Inject interface TestRepository

    { fun hoge(hogeId: Int): Response<Hoge> } class TestRepositoryImpl @Inject constructor( apiProvider: Provider ) : TestRepository { fun hoge(hogeId: Int): Response<Hoge> { } } ・赤いところが、毎回違う定義
 ・他が同じコード

  12. © 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() } } ・テストコードも大枠は大体同じ

  13. © ZOZO, Inc. 26 これらをLiveTemplateで解決する
 package ${PACKAGE_NAME} import javax.inject.Inject interface

    ${Name}Repository {} class ${Name}RepositoryImpl @Inject constructor( ) : ${Name}Repository { }
  14. © 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() } }
  15. © 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() { }
  16. © ZOZO, Inc. アジェンダ
 32 • FAANSとは
 • LiveTemplateって知ってますか?
 •

    LiveTemplateはgit管理ができる!
 • FAANS Andridチームで使うことになった経緯と使い方
 • まとめ

  17. © ZOZO, Inc. 33 まとめ
 • LiveTemplateはJetbrain社のIDEにある機能
 • 個人レベルで定義可能
 •

    Git管理もできるので、「チームの実装を楽にするために」 も、「設計を強制するために」も使える