感想
まずは、株式会社ログラスさんの5Daysインターンに参加させていただき、ありがとうございました。また、今回のチーム(メンターの方も含めて)は最高のチームだったと思います。あと、もう1スプリント、1ヶ月続けてみたかったです。きっと大分強いチームになったんじゃないかと勝手に思っています。終始楽しく、また成長もさせてくれたチームに感謝です。
参加のきっかけ
エージェントからおすすめされたこと、1on1での面談の感触や、プロダクト、言語、開発手法に惹かれたため、参加を決めました。(※正直始まる前は、5Daysのインターンなので、そこまで深い内容ではないだろうと思っていました。すみません )
学んだこと
DDD
DDD(ドメイン駆動設計)の考え方を学びました。最初自分は、DDDはドメイン部分を最初にガッチリ決めて、そのあとはあまり変更しないようにする開発手法だと思っていました。ただ、これは誤りで、そこを柔軟に変更していけるのがDDDの強みであると知れたのが大きかったです。
実際の開発の流れ:
ドメインの理解 -> ドメインモデリング -> ドメインの実装 -> ...
いいなと思ったのは、この順序通りにやらないといけないわけではなく、先に進んだ時に設計、実装に困ったり、うまくいかないときは、戻るのもありというものです。
自分たちのチームも、ドメインモデリングに困ったら、ドメイン理解を深めたり、実装で足りないところ、修正すべきところがあったら、モデリングをし直す、修正するということを繰り返していました。最初はいちいちやるのめんどくさいなみたいなのもあったのですが、ドメインの実装がしっかりしていると、実装が大分楽になることを実感したので、今回習ったDDDは自分の開発に取り入れていきたいと思います。
オニオンアーキテクチャ
DDDをやっていく時にいくつかのアーキテクチャがあるのですが、今回のインターンではオニオンアーキテクチャを使いました。クリーンアーキテクチャと似ているとは思うのですが(オニオンアーキテクチャの後により依存関係を減らしたのがクリーンアーキテクチャという理解)、オニオンはDTOみたいなのがない分、シンプルだなーと思いました。やっぱり、エンジニアとしてはシンプルな方が好きなので、このアーキテクチャはどんどん使っていきたいと思います。まあただ、クリーンアーキテクチャの方はそれぞれの層の依存関係がより少ない?ので、よりテストしやすいのかなーとも思っています。ここら辺の理解はまだまだ浅いので、この先勉強してそれぞれのメリット、デメリットを言語化できるようにしたいですね。
(実はオニオンアーキテクチャ、DDDは一回雰囲気で開発したことがあったので、ある程度は知っていたのですが、今回のインターンで今までの理解の間違いを正すことができ、またそれぞれの理解を深めることができたと思っています。)
スクラム
ログラスさんはFAST(Fluid Adaptive Scaling Technology)に移行しているらしいですが、今回は普通のスクラムを学びました。5日間を二つのスプリントに分けるという、狂気の沙汰をやっていたのですが、メンターのサポートのおかげで、最初のスプリントよりも、次のスプリントの方が数倍のコミットをすることができたのが驚きでした。
Sprint1とSprint2の違いは、Sprint1ではドメイン理解やモデリングに時間をかけていたのもありますが、チケット分割等がうまく行っていなかったため、スクラムがうまく行っていなかったのがあると思います。Sprint2では、チケットの粒度を小さくし、またチケットごとに何が達成できていれば、このチケットを完了していいかを書くようにしたことで、チケットの分割さえできればあとは開発するだけみたいな状態を作り出したのが良かったのかなと思います。
ただ、チケット分割は大分疲れました。チケットを分割し、それぞれの目標を考えれば考えるほど、これも考えないといけないんじゃない?みたいな気づきが多く、また、このチケット分割でうまく開発できるのかみたいなところも考えないといけないので、相当疲れました... 2~3時間やりましたが、みんな死んでましたね... ただ、これをやったおかげで、開発中にここ考えてなくない?みたいなものが減って、大分開発に集中できたので、やっぱりチケット分割はやるべきなんだなと実感しました。まあ、大分疲れるのでお菓子が欲しいですね〜
ペアプロ
これは学んだというところなのか怪しいですが、ペアプロの良さを知ることができたのも良かったです。自分は実装することが多かったのですが、ペアプロのおかげで自分の間違いを書いている際に指摘してもらえたり、理解が異なっている部分を知ることができたりしたので、早期に問題を発見し、そこに対応できるというのが素晴らしいなと思いました。
やっぱり、自分一人だとちょっとよくわからないけど一旦PRに出してみるか、みたいなのがあったりすると思うのですが、そもそもPRを出す前に問題を発見できることが多いので、レビュー負荷を減らせるみたいなのも良いなと思いました。また、うちのチームはペアプロもやりながら、レビューをもう片方のペアプロ組がやることで、各々の全体的なコードの理解の差を減らすことができ、得意不得意はあれど、誰にIssueを割り振っても、ある程度対応できるような状態を作ることができたのも良かったと思います。
総括
技術好きで、プロダクト志向的なところもある人は大分いいインターンなんじゃないかなって思ってます。普通のインターンで、DDDやオニオンアーキテクチャを教えてもらえるところあります!? アーキテクチャとか結構気になる自分としては最高のインターンだったと思います。
あと、Kotlin今回初めて使ったのですが、Kotlinいいですね〜 Javaをちょっとモダンにした感じが良かったですね。特にnull
を?
で処理できるところとか、.let
からのit
みたいなのも自分は好きですね。やっぱり静的型付け言語最高です!OOPだし。
あと、個人的な感想なのですが、自分のチームのメンターの方との相性が良かったです。本当にあの方がメンターで良かった!!!と心の底から思います。
今回のインターン本当に行って良かったと思います!
最高でした!ありがとうございます