見出し画像

社会人1年生エンジニアの今週の自学 #4(5/1~5/7)

こんにちは!どぎーです!
今週はだいぶ遅れての執筆なので、今週「何を学んでいたのか」・「残り何を進めるか」を宣言していきます!

先週の振り返り

  • MUST

    • 😭 React Native アプリでドロップダウンメニューのバグ解消

    • 😭 Android の個人開発アプリでネットワーク通信周りの DI を整理

    • ✅ ドメイン駆動設計入門の Chapter3(エンティティ)まで読む

    • 😭 AWS 練習用のプロジェクトのフロントエンド側の環境構築

    • 😭 AWS の Udemy 進める(学習計画を立てる)

  • WANT

    • 😭 デザインパターン入門のサンプルコードを Kotlin で書いてみる

      • Iterator

      • Adapter

    • ✅ 個人開発 Android アプリで Gradle Version Catalog, Renovate を導入

    • 😭 M3 のドキュメントを読み、概要を掴む

Android の個人開発アプリでネットワーク通信周りの DI を整理

作業を始めようとしたところ、 DI 周りの整理をする前に以下の作業をする必要があることに気付きました。

DI の勉強しよう💪
→ せっかくならマルチモジュールでやりたい🔥
→ 依存関係の管理なんも考えてなかった💦
→ Version Catalog 使ってみるか〜👀
→ gradle を gradle.kts にしよっと💡
→ 依存関係のバージョンが…😰

It's my 思考

ということで、 DI 周りを整理する前に以下の4つに取り組みました。

  • ライブラリのバージョンを更新する

  • gradle を gradle.kts に移行する(PR

  • Gradle Version Catalog を導入する(PR

  • Renovate を導入する(自動生成された PR

Version Catalog を利用することで、ライブラリのバージョンを一箇所で管理することができます。
その結果、マルチモジュールにしても各モジュールでバージョン管理することがなくなります。
この過程を踏まずにマルチモジュールにすることも可能ですが、やらなくては後々ツラくなることが目に見えていたので、先週宣言した自学には含まれてはいませんでしたが、このタイミングでやってみました💪

Renovate は導入する前のイメージとは裏腹に、GitHub App でインストールするだけで簡単に導入することができました😚
ライブラリの更新を通知してくれるのですごく便利ではあるのですが、まだ設定をカスタマイズできていないので、頻繁に通知が来て「ウザっ」と思っています😇
今後は自分に合うように、設定をカスタマイズしていきます😌

ドメイン駆動設計入門の Chapter3(エンティティ)まで読む

Android エンジニアの同期で DDD 勉強会を企画し、実施しています。
今週で Chapter3 のエンティティまでを読んで議論することにしていたので、該当箇所を読んで自分なりにまとめました。

特に Chapter2 の値オブジェクトの内容に感動しました🥺
というのも、社内の大先輩のコードがまさに値オブジェクトの考えをもとに書かれていると気付けたからです🤩

また、Kotlin には value class という文法があり、値オブジェクトを表現するのに使い勝手が良いことも知れました。

以下は value class の一例です。

@JvmInline
value class Count(val value: Int = 0)

いままでは value class を知らず、モデルを表現するのに data class を使うしか選択肢がありませんでした。
今後はそのクラスが値オブジェクトであることを明示的に表現するために、value class も使っていきます🔥

Android における MVP パターンのサンプル実装(番外)

かましーさんの記事に感化され、自分も MVP パターンでカウントアプリを実装してみました。
以下はリポジトリのリンクです。

自分が Android アプリ開発の実務経験を積み始めた頃には、Android Developers にて推奨アーキテクチャが整備されていたので、それ以外のアーキテクチャでアプリを実装した経験がありませんでした。
過去にどのような設計がされていて、どのような経緯で今に至ったのかを少しでも体感するために、自分でも手を動かしてみました。

実装した感想としては「Contract という Interface に View も Presenter も依存しているのが分かりにくい」といった感じです😇

以下はカウントアプリにおける Contract の一例です。

internal interface CountContract {

  interface View : BaseView<Presenter> {
    fun showCount(count: Count)
    fun showError(message: String)
  }

  interface Presenter : BasePresenter {
    fun onIncrementButtonClick()
    fun onDecrementButtonClick()
  }
}

そもそも Contract.View も Contract.Presenter も、View で呼ぶ処理を定義するのか Presenter で呼ぶ処理を定義するのかが命名の直感に反していて分かりづらいなと思っています。

また View と Presenter が双方向に依存しているため、近頃よく見かける単方向に依存させるアーキテクチャと比較すると、処理(コード)を追いづらいと感じました。

先輩の話によると、推奨アーキテクチャが整備される前の時代は Jetpack の ViewModel や Hilt もなく、プロジェクト毎に設計がバラバラだったということです。
自分は設計を考えるのが好きではあるのですが、プロジェクト毎に設計が異なるとその分学習コストが高くなるので、大変だっただろうなぁとしみじみ思いました😌

MVP パターンは『Android アプリ設計パターン入門』でも解説されています。
該当する章をこれから読み直して MVP パターンの体験を終わりにしようと思います🙌

その他の振り返り(言い訳?)

その他に関しては全く進んでいません!!
具体的には以下の自学です。

  • React Native アプリでドロップダウンメニューのバグ解消

  • AWS 練習用のプロジェクトのフロントエンド側の環境構築

  • AWS の Udemy 進める(学習計画を立てる)

共同開発しているチームメンバーとの相談の結果、これらの自学は先週時点では優先順位を下げていました。
優先順位を調整した分 Android 関連の自学により多くの時間を割くことができたので、ナイスな判断だったと思っています🤘

現在ゴールデンウィーク真っ只中ですが、この辺りはこの期間でガッと進めている状況なので、来週公開の記事を楽しみにしていてください😎

今週の自学

今週はあと5/6(土)、5/7(日)の2日間ですが、今週やっていく(やってきた)ことを宣言します🔥

  • MUST

    • React Native アプリ リファクタ

    • React Native アプリ 認証周りの実装

    • AWS 練習用のプロジェクトのフロントエンド側の環境構築

    • AWS の Udemy 進める(学習計画を立てる)

  • WANT

    • デザインパターン入門のサンプルコードを Kotlin で書いてみる

      • Iterator

      • Adapter

    • M3 のドキュメントを読み、概要を掴む

    • Android の個人開発アプリでネットワーク通信周りの DI を整理

React Native アプリ リファクタ

5/3(水)~5/4(木)の2日間にかけて、React Native アプリの開発チームで開発合宿をしました🙌
合宿期間では普段なかなかできない同期的なコミュニケーションが可能だったので、いままで気になっていた部分を一気にリファクタしました。

具体的には以下の通りです。

  • カラーコードの定数化

  • テキストスタイルの共通化

  • px 値の定数化

  • model の整理

  • ディレクトリ構成の見直し

何をどのようにリファクタしたかは次回の記事で振り返ります!

以前から、開発中にこの辺りがすごく気になっていたので、メンバーと議論しながら一気に進められてめちゃスッキリしました😆
合宿たのぴかった〜〜〜🥳🥳🥳 イエイ!

AWS 関連

今週がデッドラインやで👊


今週の雑談

会社の先輩同輩と新大久保でご飯を食べてきました😚

韓国語で生ビールを注文できてテンション上がりました🤘
「チョギヨ〜センメッチュハナチュセヨ!」

写真はその時食べたポッサムです。
美味しすぎてほっぺた3個くらい落ちました🤤

それでは今週もよろしくお願いします🙌

この記事が気に入ったらサポートをしてみませんか?