はじめに
もうすぐ新卒として入社してから、1年が経とうとしています。
そんな中で
「「 大きく考え方変わった/成長できた 」」
と感じたターニングポイントとなる技術こと、
ターニング技術一覧をご紹介致します。
開発手法編
まずはプロダクトを開発する上で重要な開発手法についてです。
アジャイル開発
ご存知の方も多いと思います。
絶賛、弊社でも輪読会の対象となりました
何がターニングした?
- インセプションデッキ
- ユーザーストーリー
- ストーリーポイント
- 価値ある成果を毎週届ける
- ベロシティと見積もり修正
上記であげた項目など、
サービス開発において
「「 決めるべき事項 」」や「「 とるべき行動指針 」」
を意識できるようになりました。
スキーマ駆動開発
フロントエンドとサーバーサイドで同時に開発が進められるテクニック。
OpenAPI Specification
やGraphQL
などで定義したスキーマを元に、
フロントやサーバーの言語で型をgenerateして開発を行なっていくと、
ドキュメントとコードにも差分がなくなるので良いよね〜というやつ。
何がターニングした?
サーバーサイドを実装しないとフロント何もできない状況を
過去に味わったことがあったので、
同時並行に開発を進められるのはシンプルに良かった。
また
「「 ドキュメントと実際に提供しているAPIが違う 」」
なんてこともRESTFullAPIでは起こりうるので、、、
-
OpenAPI Specification
に基づきスキーマ定義 - 定義を元に型のコード生成
- ↑を元に開発を行なっていく
この流れの重要性を理解しました。
データベース編
データを格納して、呼び出す部分。
サーバーサイドエンジニアなら必ず触ります。
ORMとRowSQL
そもそも「ORMとは?はにゃ?」という状況で
知らず知らずORMを使っていました。
(学生時代にDjangoでやってました)
何がターニングした?
会社にて膨大なデータの管理及び、テーブル設計をし始めると、
逆にORMに対して違和感を抱くようになり、
そこでちゃんとSQLをゴリゴリと学び/書き始めるようになりました。
entというGraph構造を信仰するORMを使い、
テーブル設計が爆発した知識と経験を持っています...
※entが悪い訳ではありません。使い所には注意してください。
ElasticSearch(NoSQL?)
続いて大規模なデータの取得に対して、有効な手段であり、
全文検索は特にビックリしました。
何がターニングした?
単純にNoSQLの強みを知れた。
設計次第でもあるけど、MySQLでこの速さは出ないなぁという学び。
設計編
学生時代は良くも悪くもあまり意識できなかった部分ですね。
(サービスを作ること自体への楽しさ/苦しさで精一杯)
Container/Presentational Component
「ロジックと見た目を切り分けよう」というコンポーネント設計指針。
最初はReactすら、何もわからなかったので、
「何が違うねん」と思っていましたw
何がターニングした?
DOMとロジックを切り分けて考える機会になりました。
- 見た目に対して、責務を果たすことに注力できる
- ロジックに対して、責務を果たすことに注力できる
読みやすくなるし、切り分けはとても大事。
Atomic Design
いわば見た目のデザイン手法をフロントエンドでも取り入れたやつです。
何がターニングした?
コンポーネントという単位を理解する良いキッカケになりました。
「使いまわせる」、「枠組みを作る」、「責務を明確にする」は大事。
汎用性高く、ただし修正する際には一眼で場所がわかるようにするなど、
しっかり考えなければ、この設計は成り立ちません。
Domain Driven Design(DDD)
エリックエヴァンスこと、ドメイン駆動設計です。
サービスで実現したいものを最優先で考える設計手法です。
新卒としてここを学べたとこが一番影響として大きいと思っています。
何がターニングした?
強強エンジニアとはこうゆうことだと気づけるキッカケになりまそた。
- レイヤードアーキテクチャ(Interface→Usecase→Domain←Infra)
- ↑を実現するための依存性注入
- interface(repository)(抽象)を先に実装して、中身を書くこと
- 副作用を少なくテストしやすい関数にすること
- 不変な値オブジェクトとエンティティでモデルを表現すること
- 命名規則(境界づけられたコンテキスト内でのユビキタス言語)
- 何より**サービスで実現したいもの(ドメイン)**が一番大事ということ
初めは読んでいて、
「なんでこんな回りくどいことしてんだ」と何回も思いましたが、
DDDではない実装をしたり、日々エンジニアとして業務をしていると、
ふと腑に落ちる瞬間があります。
まだまだ理解していない(エリック本を読破もしていない)ので、
これからもたくさんのこと学び続けていこうと思います。