トレタ開発者ブログ

飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。

トレタのエンジニアイベント TORETA TECH UPDATE 2024/08/28開催予定!

こんにちは、トレタ VPoEの北川です。

来る8/28(水)にトレタ主催でエンジニアイベントを開催します。 タイトルは、TORETA TECH UPDATE #1 -飲食を支えるフロントエンドです。

toreta.connpass.com

このイベントでは、トレタで日々行っている開発業務の中での事例紹介を行います。今回はフロントエンドにフォーカスして、特にトレタでの現在の注力事業であるモバイルオーダー「トレタO/X」の開発話を中心に、現場感あふれる内容をお届けします。

開催のきっかけ

トレタで主催するエンジニアのイベントは久しぶりで約5年前になります。 以前は社外向けのイベントを活発に行っていましたが、コロナ禍がありめっきりと活動は少なくなっていました。

toreta.connpass.com

今回のきっかけは技術顧問の奥野さんと雑談している中で生まれました。 5月ごろに奥野さんからフロントエンドカンファレンス北海道2024でトレタでの開発事例を使ってトークしたい、との相談を受けました。 もちろん承諾して、当選したらトレタからもスポンサーブース出して自分も北海道に行くか、なんて考えていたらまさかの落選… 定員に対して数倍の応募があったとのことで、北海道の力恐るべし。 せっかく用意いただいたトーク内容は別の機会で、と話してましたがどうせならトレタで主催するか!と一念発起。 そんな流れで発足したのが今回のイベントです。

このイベントはできれば今後も定期的に続けていきたいと思い、タイトルにはシリーズの名前をつけました。 以前の「TORETA TECH TALK」からなぞらえたのと、トレタのビジョンでもある「飲食店の未来を、アップデートする」から文字をとり 「TORETA TECH UPDATE」と名付けてました。飲食店のテクノロジーをアップデートさせながら、その共有を広く行える場としていければと考えています。

イベントの内容

そういったきっかけで立ち上げたイベントなので、今回のスピーカーの1人は奥野(@okunokenato)さんです。 今回はトレタの事業の一つであるモバイルオーダーの「トレタO/X」のフロントエンド開発の内容を話していただきます。

奥野さんはこのプロダクトの初期から現在まで約2年ほど携わっていただいているので、その間にあったプロダクトの成長や事業戦略にあわせた内部のダイナミックなリアーキテクトの話をしていただきます。 Next.jsのAppRouter化やバックエンドの差し替えなど、サービスを提供しながらいかに内部の開発環境を改善したり途中で増えた概念とどう適合していくか、設計の技が垣間見れると思います。 奥野さんは過去にも大規模開発や開発環境改善など現場でのノウハウについて多く登壇されているので、今回もすぐに実践で使える内容が盛りだくさんです。

speakerdeck.com

2人目のスピーカーはトレタでフロントエンドエンジニアをやっている武市さん(@kazuya_dev)です。 武市さんはこの開発ブログでもリファクタリング部屋の記事に登場していただいています。 まだ若手ですが、同じくトレタO/Xの開発現場でもがきながらも培った知見をたくさんご紹介いただけると思います。

tech.toreta.in

tech.toreta.in

参加者募集中!

今回の会場はClassiさんに提供いただきました。 Classiさんのブログにて技術コミュニティに対して会場提供を行っているのを拝見して相談させていただいたところ快諾いただきました。ありがとうございます!! 新宿駅から近くアクセスがとても良い場所です。

tech.classi.jp

参加者は現在募集中なので、ご興味あればぜひご参加ください! トークの後はQ&Aや懇親会の時間も設けていますので、登壇者に直接質問するチャンスです!

アジャイルorウォーターフォール?トレタの開発プロセスは?

こんにちは、トレタ VPoEの北川です。

カジュアル面談など面談の中の応募者からの質問で、トレタの開発プロセスはどういったものですか?というのはよく受ける質問です。今回は現在のトレタの開発プロセスが日々どう行われているかについて紹介したいと思います。

アジャイル vs ウォーターフォール

開発プロセスにおいうてアジャイル vs ウォーターフォールの論争は令和の時代になっても今だに行われていますが、トレタの開発はどっち、という前にそれぞれの定義を整理しておきましょう。

出典: martinFowloer.com WaterProcessから抜粋

まず、「ウォーターフォール」の明確な定義はないようですが、一般的にはプロダクトの開発工程を段階的に行なっていく手法を指して呼ばれています。主に開発スコープと納期がロックされた環境で使われています。

対して、開発スコープを分割して開発サイクルを回していく反復型(Iterative)プロセスがあります。ウォーターフォールでは各開発工程の期間が長いため、前工程への差し戻しがプロジェクト全体に大きな遅延をもたらすため、反復型では開発スコープを小さくすることで大幅な遅延リスクを小さく抑えています。

出典: martinFowloer.com WaterProcessから抜粋

最初に定めたスコープを分割した反復型の中には、それら分割したスコープを随時入れ替えたり途中で新しい機能を追加するなどして、開発スコープを柔軟に扱う適用型プロセス(AdaptivePlanning)があります。プロジェクトの状況やデリバリーした機能のフィードバックを受けて計画を更新していくことで開発状況の変化に応じたより柔軟に対応ができます。

さらにその中でも開発サイクル(スプリント)ごとに開発スコープを都度決めていくのがアジャイルとなります。

まとめると、以下のようになります。

計画の変更 開発サイクル
ウォーターフォール なし 1
予測反復型 なし n
適用型 あり n
アジャイル あり(スプリント毎) n

トレタでの開発プロセス

上記の整理をしたところでトレタでの開発プロセスはどれかというと、予測反復型と適用型の混合です。

機能を検討する際にはまずは予測型のように最終的な理想系のUXの計画と、システムとしてどう実装していくかを設計を行い、おおよその開発工数の全体感を作ります。

次にユーザーに価値のある単位でフェーズを分割します。反復型にしてユーザーになるべく早く価値を届けるようにするためです。ここで分割したフェーズは大体1〜2ヶ月の大きさになります。機能の大きさにも寄りますが、影響範囲が大きく工数がかかる機能だと3~4フェーズになることがあります。

分割したフェーズでスケジュールを立てて行きますが、3~4フェーズ目になるとスケジュール上には置かずにバックログに積む場合があります。適用型のように途中で他に優先度の高い機能開発が入るなど状況の変化に対応するためです。 このやり方はいわゆる「ローリング・ウェーブ計画法」と呼ばれている手法で、将来の不確実性が高いのでおおまかな設計や方針は立てつつ、直近の詳細のみを詰める、というやり方です。

先行フェーズのフィードバックを受けてから後続フェーズの仕様を決めていく場面もあります。こちらはより適応型に近いプロセスです。 トレタのプロダクトは飲食店SaaSとして提供しているため、規模や業態が様々なすべての飲食店のニーズをSaaSという形で一つの仕様にするのはなかなか難しいです。最初から多様な導入店舗にヒアリングをして最大公約数を求めようとすると、かなり複雑な仕様となってしまうことがあります。

そこで、よりニーズが顕在化していてその機能ができることで明確な店内オペレーションのイメージ(利用イメージ)ができている一部の店舗のニーズに応える形で初期開発(Phase1)の仕様を設計するケースがあります。要望としては上がっているが明確な利用イメージができていない店舗にあててみても、実際に提供した時にはやはりフィットしなかったということが往々にして起きるためです。より利用イメージが固まっている店舗の場合は、こちらが想定した提案に対してオペレーションにフィットしないと感じたら明確に「NO」と言っていただけます。そのように一定数の明確なニーズに応えた初期仕様(プロトタイプ)をまずは作成します。

初期仕様が定まったらそれをベースとして他の複数の導入店舗に対してヒアリングを重ねます。最初のヒアリング時点に比べ機能仕様が定まっているため、より解像度の高い状態で各店舗へのヒアリングが行えます。そこから得られたフィードバックをもとに、複数の店舗でも満足して利用いただける汎用版として次フェーズ(Phase2〜)の仕様やスコープを策定していきます。

さいごに

冒頭にある面談などでトレタでの開発プロセスはどういったものか、という質問に対して、アジャイル的なプラクティス(かんばん、ストーリーポイント、スタンドアップなど)は取り入れているがウォーターフォールとアジャイルの中間くらい、と今まで説明していましたこの記事を書いていくなかで自分でも整理ができました。

ウォーターフォールとアジャイルのどちらが良いかという論争に対して自分は優劣をつける必要はないと思っていますが、自社の開発チームや状況、対象の開発内容に応じて開発プロセスの適した箇所を部分的に取り入れていくのがよいと思います。

トレタのテックトーク -普段使用しているGitコマンドの紹介-

こんにちは。サーバーサイドエンジニアの森田です。

今回は、弊社のテックトークで紹介されたGitコマンドについてご紹介します。

テックトークとは

隔週に一回開催し、当番の発表者が最近の気になる技術情報であったり、業務する中での技術的な学びを社内に発信する場です。 全体30分の前半はLT(ライトニングトーク)、後半はその内容について参加者内で議論、という形式で行なっています。

今回のテックトーク

今回の発表者は サーバーサイドエンジニアの川村さんです。

今回の発表内容は、日々の開発で頻繁に使用する一般的なGitコマンドに加え、意外と知られていない便利なGitコマンドについての紹介でした。

以下に特におすすめのコマンドをいくつかピックアップして紹介します。

git stash

git stashは、作業中の変更を一時的に保存するコマンドです。これにより、現在の作業内容を保留にして他の作業を行うことができます。特に便利なのが以下のコマンドです:

  • git stash list: 保存した変更の一覧を表示します。
  • git stash apply: スタッシュした内容をブランチに再適用します。
  • git stash pop: 再適用と同時にスタッシュから削除します。

git add -p

部分的に差分をステージングするために使用できるgit add -p。特定の行だけをコミットしたい場合に非常に便利です。

$ git add -p

これにより、変更の一部をインタラクティブに選択してステージングすることができます。ステージングする際に、各変更部分に対して以下のオプションから選択することができます:

  • y(yes): この変更をステージングする
  • n(no): この変更をステージングしない
  • q(quit): ここで操作を終了する
  • a(all): この変更と以降の変更をすべてステージングする
  • d(don’t): この変更と以降の変更をすべてステージングしない
  • j(jump): 次の変更にスキップする
  • J(Jump): 次の変更にスキップして、それ以降のステージング操作を繰り返す
  • g(goto): 指定した変更に移動する
  • /(search): 指定した文字列を含む変更を検索する
  • s(split): 変更をさらに分割して表示する
  • e(edit): この変更を手動で編集する
  • ?(help): ヘルプを表示する

git restore

ファイルの変更を取り消すために使うgit restore。特定のファイルの変更を取り消したいときに便利です。

$ git restore <path/to/file>

これで、指定したファイルの変更が最新のコミットの状態に戻ります。

git rebase -i

コミット履歴を整理するためのgit rebase -i。これを使うと、過去のコミットをまとめたり、修正したりすることができます。

$ git rebase -i HEAD~3

このコマンドを使うと、過去のコミットメッセージや内容をインタラクティブに編集できます。

git log --oneline

シンプルにコミットログを表示するためのgit log --oneline。これにより、複数行のコミットメッセージを1行で表示し、コミットハッシュも短縮して表示します。

$ git log --oneline

git commit --amend

直近のコミットに対して変更を追加したい場合に便利なgit commit --amend。これを使うと、最新のコミットに修正を加えたり、メッセージを変更したりできます。

$ git commit --amend

git fetch

リモートリポジトリの状態を取得するためのgit fetch。発表者の川村さんはFETCH_HEADをよく使用していると述べていました。git fetchコマンドを使ってリモートブランチの内容を取得し、FETCH_HEADを利用することで、特定のリモートブランチの内容をローカルに反映させることができます。

$ git fetch origin branch名
$ git checkout FETCH_HEAD

今回紹介されたコマンドの一覧

  • git stash
  • git add
  • git restore
  • git rebase
  • git log
  • git commit
  • git fetch
  • git checkout
  • git switch
  • git branch
  • git pull

各コマンドの便利なオプションについて紹介されました。

参加者の反応

参加者からは、新たな発見があったとの声もありました。

発表されたコマンド以外にも、参加者からは「こういう使い方をしている」と言った紹介もありGitコマンドに関する知見の共有が行われました。

また、Git操作をコマンドラインで行う人、GUIツールを使う人、IDE(JetBrains系)で行う人など、様々なアプローチが共有されました。


さいごに

今回のテックトークは、Gitコマンドの紹介でした。

意外とコマンドラインで行っている人が多く驚きました。

また、Gitコマンドにはまだまだ知られていない便利な機能がたくさんあることがわかりました。

今後も日々の開発業務に役立つ情報を発信し続けていきたいと思います。

皆さんも、日常的に使用するツールの中にある、まだ知られていない便利な機能をぜひ探してみてください。

次回のテックトークもお楽しみに!

© Toreta, Inc.

Powered by Hatena Blog