見出し画像

リプレイスレポート|技術選定(サーバーサイド)

コドモンの開発ブログを移転しました。最新の記事はこちらからご覧ください。


こんにちは!コドモンプロダクトチームの市川です。

今日は、コドモン開発チームのリプレイスレポートの第二弾。リプレイス後の技術スタックのうちサーバーサイドの設計思想・言語について、どのような基準で選定したのか、選定に関わったメンバーの座談会形式でまとめてみます📝

メンバー紹介

技術選定は当時のアーキテクトチームで行いました。メンバーは以下。

T村:チームリーダー。コドモン開発チームの守護神。
S口:バックエンドコーディングマシーン。画面越しにしか存在しない。
E戸:SRE。守備範囲が異様に広い。
S山:フロントエンド気になるマン。1万円超えのオリーブオイル常用者。
I川:組織気になるマン。「豚キムチはめんつゆで奥行きが出る」を布教中。

リプレイス後の技術スタック

画像1

サーバーサイドの技術選定を振り返ってあれこれ

I川:サーバーサイドの技術選定は、言語より設計思想が大事!という前提で考え始めましたね。
S口:言語はどうにでもなる。設計の方が重要。設計は肝。
T村:現行プロダクトの「設計思想が薄くて保守性を高めきれてない」という課題を背景に、リプレイスするならちゃんと設計するのは前提でした。
I川:(開発スピード重視から保守性も担保していくフェーズに変わったというのは前回の記事にある通りです)
S口:ちゃんと設計→開発する仕組みを整えていれば、開発も保守もスピード出るし、設計をちゃんとすることにはデメリットがない。むしろちゃんと設計してる方がスピードは出る。
全員:それですな。

設計思想

I川:DDD(ドメイン駆動設計)を取り入れる理由として、リプレイスプロジェクトのキックオフの頃にS口さんが説明した資料には以下のように書いてますね。スクラムの要素も入ってますが。

▼DDDとスクラムに期待すること

1. ユーザーにとって真に価値のある機能を開発する
スクラムの「小さく作る」「ユーザーからのフィードバックを得る」「改善する」というサイクリックな行動規範と、「自己組織化されたチーム」のオーナーシップマインドがこれを促す
2. ソフトウェアの中核知識を、絶え間なく関係者間で共有/改善する
DDDの「モデル駆動設計」というプラクティスがこれを促す
3. 疎結合を保つ
DDDの思想そのものがこれを促す

I川:DDDでの開発経験者はS口さんと私だけだったので、その恩恵を他の人もイメージできるかは不安でした。
T村:経験はなくてもDDDのこういうのが良さそう、というのはすんなり理解できましたよ。
S口:上記には入ってないですが、DDDのデザインパターン(entityやrepository)を取り入れることでメンテナンス性を担保する、というのもDDD選定理由のひとつにありましたね。
E戸:その方向で言うとクリーンアーキテクチャもですね。
T村:DDDとクリーンアーキテクチャの設計を二軸で取り入れて、コードの質と保守性を担保しようというのが選定の要約ですね。

Go

E戸:言語としてGoを選んだのは、僕が前職で開発実績があって「Goいいな」と思っていたので推した感じでしたね。
T村:実務で実績がなくてもプライベートで触ったことがある人は割と多かったし、Goでいくことはすんなり合意しましたね。
I川:未経験からコドモンで初めてエンジニアになる人への教育的な意図で静的型付け言語を選んでおきたいという観点もありました。現行プロダクトはPHPとAngularJS(Typescriptなし)と、サーバーサイドもフロントエンドも動的型付け言語なので。
S山:フロントエンドもそれでTypescriptを激推ししてましたね。
I川:ふふふ。

S口:私は今回初めてGo触りましたが、やりたいことをシンプルに書けて良かったですね。
I川:なるほど。Goで良かったなと思う要素、けっこうあります?
S口:Goがいいなと思うポイント、いくつかありますよ。まずは、言語仕様がシンプルなので学習コストが低いところ。他の言語である程度開発してきた人なら誰でもすんなり扱えるんじゃないかな。
E戸:ですね。
S口:次に、静的型付けとlinterの強力なチェックで、コーディングミスによるバグが混入しにくいところ。これは動的型付けとの比較の色合いが強い感想です。
I川:わかります。
S口:それから、HTTP通信と並列処理の書きやすさ。
E戸:言語仕様に組み込まれてていいですよね。
S口:そして、インターフェース駆動でコーディングしやすいところ。インターフェースの扱いがゆるくて最初は違和感ありましたが、慣れると扱いやすいです。
T村:なるほど。
S口:最後に、パフォーマンス面でやっぱり相当早いところ。私は長年Javaで開発してきましたが、かなり違いますね。
E戸:たくさんありましたね、Goの推しポイント。

〜つづく〜

以上、リプレイス技術選定のサーバーサイド編でした。インフラなど他の編もまた記事にする予定です。

また、コドモン開発チームでは、リプレイスを一緒に進めてくれるテックリードを募集しています。気になる方はお気軽にエントリーしていただけると嬉しいです!