RESZAIKOチームでのエンジニアとしての仕事

この記事は[一休.com Advent Calendar 2024 第17日目](https://qiita.com/advent-calendar/2024/ikyu)の記事です。

こんにちは。エンジニアのhamabeです。
RESZAIKOチームでバックエンドエンジニアとして働いて2年弱経ちました。
一休ではどんな風に仕事を進めているかお伝えできたらと思います。

# 想定読者
- 一休のエンジニアがどんな風に仕事を進めているか気になる人
- RESZAIKOの開発に興味がある人

# RESZAIKOとは
一休をご存知の方は[一休.com](https://www.ikyu.com)や[一休.comレストラン](https://restaurant.ikyu.com)といった予約サイトのイメージが強いかと思いますが、実はRESZAIKOという飲食店の予約管理を DX するSaaSプロダクトを展開しています。

RESZAIKO は 現在3つのプロダクトを提供しています。
- 複数予約サイトのweb在庫を一括管理する「サイトコントローラー」
- 予約や顧客情報を管理する「予約台帳」
- 店舗独自の予約ページを提供する「Web予約」


![スクリーンショット 2024-12-16 21.17.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/324937db-47bf-70b0-6ec8-6b836ef18e14.png)


私はこのうち「サイトコントローラー」と「予約台帳」の開発を担当しています。

以降の章で実際にエンジニアとしての仕事の一部を紹介したいと思います。

# [実例] 予約台帳の在庫管理機能 開発
予約台帳は、店舗のテーブルと時間の2次元マップになっているチャートと呼ばれる画面が存在します。
この画面で予約を管理したりweb在庫を管理したりといった操作を行います。

下の画像のように「ネット予約枠」と呼ばれる枠を設定すると、そのテーブル及び時間に対して各予約サイトでネット予約を受け付けることができます。

![スクリーンショット 2024-12-17 12.01.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/81f90add-8693-814d-61e8-a74618061f92.png)


この「在庫管理機能」の開発を担当した際は、ドメインモデリング、UI/UXの検討、実装まで一通り行いました。

### ドメインモデリング
ドメインモデルとはビジネス上の問題領域(ドメイン)を解決するための構造です。
ドメインモデルをユーザーに表示したものがUIに、DBに永続化したものがデータベーステーブルになります。
特にバックエンドを担当していると、データベース設計から考えてしまいがちですが、より抽象的なドメインモデルという構造やコンセプトを先に設計します。

![スクリーンショット 2024-12-16 20.04.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/67ddea3d-de97-de7d-cd7c-c1f27fe78633.png)


ユーザーのメンタルモデルやユースケースを意識しながら、台帳で設定できる予約枠はどんな構造が最適か検討を重ねます。

以下のようなgoogleスライドを作って、チームで議論を重ねていきました。
文字だけではなく、図や表でイメージを伝え、開発者以外にもわかるように資料を作成します。

![スクリーンショット 2024-12-16 19.11.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/ba4aa34d-c8c4-da05-13fe-c13ef14c8a5f.png)

### UI/UXの検討
バックエンドシステムに関わることだけでなく、ユーザー体験も同時に考えていきます。

どんな導線で在庫設定操作ができたら嬉しいか、どんな説明が書かれていたらわかりやすいか等の素案を考え、既存画面のスクショを切り貼りしたり、簡易的に図を書いたりしてスライドにまとめます。
この資料を元にデザイナーやフロントエンドエンジニアと議論を重ねてUI/UXを固めていきます。
(本当はfigmaとかで綺麗にできたらいいですが、デザイナーやフロントエンドエンジニアの方に伝われば形式はなんでもいいと思っています)

||
|----|
|![スクリーンショット 2024-12-16 19.30.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/5ed0d2cc-fcf8-94fc-9f53-a5e1179b74d7.png)
|![スクリーンショット 2024-12-16 19.39.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/b1f65c52-3f97-f482-053b-025589f5e13f.png)|


### システムアーキテクチャの検討
システム間のアーキテクチャや連携方式の検討も行います。
RESZAIKOは3プロダクトが連携して、在庫や予約データをやりとりして動く必要があります。
ここでもやはり、スライドで簡易的なシステム連携図やシーケンス図を作ったりして、チーム内で話し合いを行います。

![スクリーンショット 2024-12-16 19.38.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/461c52f4-bc29-d0c5-ef50-1d0fe987a5dd.png)
![スクリーンショット 2024-12-16 21.15.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/eb074268-c058-c7f2-1d52-f299b4a1bbb8.png)


### 実装
検討もそこそこに実装も進めていきます。
ドメインモデルから実装を始め、データベースIOの実装、各種APIなどを実装します。
コードレビューが通れば、プロダクトにマージしていきます。
(今回は実装の詳細にまでは踏み込みません)

![スクリーンショット 2024-12-16 19.54.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651936/0de085f4-1472-de16-59fd-e58bb9c6469f.png)

# 仕事の範囲
ここまでの実例を踏まえ、こんなことを普段しているという雰囲気が伝わりましたでしょうか？
私はバックエンドエンジニアと自称していますが、役割ががっちり決まっているわけではありません。
ここで書いた例だけでなく、要件定義、UI/UX検討、システム設計、テスト、ディレクション、スケジュール管理、エンドユーザー(飲食店)訪問、カスタマーサクセスや営業とのやり取りなど広範囲に仕事を行っています。

仕事の幅を広げることで、その機能をユーザーに提供するために必要な事を部分的にではなくトータルで考えることができるようになり、より良い価値提供につながるのではないかと思います。

# まとめ
一休でのエンジニアとしての仕事の一部を紹介しました。
ユーザーに価値あるサービスを提供するためには、ただ実装の事を考えていればいいわけではありません。
ユーザーに提供するモデルやプロダクトのコンセプト設計、UI/UXの設計など含めて、エンジニア1人1人がトータルで良いものを考えていくことが大切だと考えています。