はじめに
こんにちは。開発統括本部テックリード室Bグループの内田(@kb_17Cl)です。 内定者アルバイトを経て、2024年の4月に24新卒として正社員登用され、研修を経て8月にテックリード室に配属されました。
本記事では、現在進めている全サービス横断の検索画面のモダナイズプロジェクトについて、これまでの流れと併せて紹介いたします。
モダナイズに至った背景
DMMでは、各サービスの検索画面だけではなく、全サービス横断の検索画面(以下「全体検索」と呼ぶ)も提供しています。(検索バーで「すべて」を選択した状態で検索すると、そのページにアクセスされます)
一昔前までは、全サービスの検索画面が一つのアプリケーションで運用されていました。ところが、それが徐々にサービスごとにアプリケーションが分裂していき、その結果全体検索のみが旧アプリケーションで運用されることになりました。
かつては全サービスを担っていただけではなく、コード自体はCVSが用いられていた時代から存在していたこともあり、レガシーかつ今では使われていないコードが結構残ってしまっている状況でした。(コード内のコメントに「ケータイ」という言葉が使われていた部分には特に時代を感じました) また、このアプリケーションは現在オンプレで運用されており、インフラ面でも自由度が低い点も課題でした。(詳細は下図の通り)
また、現在はオンプレで運用されているGitHub Enterprise、CircleCIが用いられていますが、クラウド版のGitHub、GitHub Actionsへの移行も併せて進めています。
このような背景から、全体検索もリプレースをしようということになり、私の配属後の最初のミッションとなりました。
技術選定について
使用技術は以下の通りです。
インフラ | クラウドサービス | AWS |
管理 | Terragrunt | |
フロントエンド | 言語 | TypeScript |
フレームワーク | Next.js | |
バックエンド | 言語 | Go |
フレームワーク | Echo |
インフラについて
今回のモダナイズの背景として、オンプレからの脱却もあるため、インフラの技術選定は特に時間をかけました。 構成図は以下の通りです。
IaCのツールにTerragruntを採用しました。 Terragruntは、環境ごとのスケール設定をしやすくするTerraformのラッパーツールです。これにより、TerraformをDRYに実装できます。
プロジェクトによっては、環境ごとに構成が異なる場合もあり、DRYな実装が必ずしも正解とは限りません。しかし、本プロジェクトのように環境間の共通部分が多い場合、Terragruntは有用と考え、導入しました。 なお、当プロジェクトでTerragruntを導入した件については、11月28・29日に開催されたCloudNative Days Winter 2024にて登壇(LT)しました。
また、インフラの修正をはじめ、その他アプリケーションに対する変更を簡単に手動でも確認できるよう、各プルリクエストごとに開発(検証)環境も立ち上げるGitHub Actionsも実装しました。 必要に応じて、プルリクエスト上でトリガーコメントを送信すると自動的に開発環境が立ち上がり、削除も可能です。
フロントエンドについて
Next.jsを採用し、SSRを用いた運用としました。 見た目には大きな変化はありませんが、ただ既存の実装を踏襲するのではなく、実装そのものは必要に応じて全く新しいものになるように意識しています。
バックエンドについて
バックエンドには、Go言語を採用しました。弊社の他プロジェクトでもGoの導入は増えており、Goの知見の共有や議論は社内Slackの技術チャンネルや、timesなどでも積極的に行われています。本プロジェクトでもその流れを踏襲することとし、より更なる知見の共有や議論の活発化を目指しています。
また、クラスの設計にも時間を費やしました。今回のモダナイズに至った背景から、ここを疎かにするとモダナイズの意味がなくなるからです。 疎結合かつ高凝集な設計・実装を目指すことが、真の意味でリプレースを行なうことになると考え、議論も行いつつ設計を決定しました。
アサイン後から現在までの動き
8月
まずはオンボーディングから始まりました。 既存のものを作り替える以上、まず既存のコードや仕様の把握は必須であるため、メンバーにレクチャーしてもらいながらコードリーディングを進めました。 先述の通り、すでに使われていないコードも混在していたりなど、コード量は極めて膨大であったうえ、私が触れたことのないPHPで書かれていたため、かなり時間を要しました。
そのあとは、モダナイズプロジェクトの全体の計画フェーズに入り、今期中のタスクを洗い出したうえで工数・工期の見積もりを算出しました。 具体的な実装計画はもちろんですが、他部署との連携・コミュニケーションが必要な場面もあり、リードタイムを考慮したうえでの見積もりが求められました。
9月〜10月中旬
技術選定や実装・設計を開始し、それと並行して、他部署との調整もこの期間から始めました。 リードする立場でのこのような経験はなかったため、議論の進め方やまとめ方などに多少苦戦しました。 また、技術選定や実装についても私がリードしているため、そのような立場でのレビューも初めのうちはなかなか慣れませんでした。
10月下旬〜現在
他部署とのコミューニケーションは引き続き取りつつではありますが、技術選定や設計がおおむね落ち着いたため、本格的な実装フェーズに入りました。 本格的な実装を進めていくにつれて、メンバー間の技術力・得意分野の違いが明らかになってきました。 メンバーごとに得意なタスクを多めに進めていく形式を取ってはいますが、互いの技術力アップもまた重要であるため、タスクによってはペアプロを実施することもあります。
さいごに
配属されてまだ4ヶ月しか経過していませんが、技術面はもちろんのこと、そのほかの仕事面においてもかなりの成長機会に恵まれているなと感じています。
リードする立場である以上、自分が担当しているタスク以外の状況も常に把握する必要があったり、チーム全体の成長も考慮したタスクの割り振りを考えたりなど、難しさを感じる場面も多々あります。 いきなりこのような立場になり、正直なところ若干の戸惑いを覚えたことも事実ではありますが、気軽に相談できる環境は整っているため、この先についても不安はあまり感じてはいません。 定期的に上長やメンターと1on1を実施していただいたり、時には他部署の先輩方と呑みに行ったりした際に自分の感じたことや、次取るべきアクションについて相談したりなど、より良い進め方について模索しているところです。
このプロジェクトはまだ道半ばであり、まだ経験不足な点もありますが、これらの経験を活かしさらに多くのプロジェクトをリードできる存在になりたいと考えております。
最後に、DMMでの新卒採用につきましては下記募集ページをご覧ください。