メむンコンテンツぞスキップ
芋出し画像

NOT A HOTEL予玄の自動移動

    この蚘事は、NOT A HOTELの゜フトりェア開発連茉「Inside the SOFTWARE TEAM」の第5日目です。

    こんにちは
    NOT A HOTELでSoftware Engineerをしおおりたす、@hokutsです。

    この蚘事では、ホテル予玄のアプリなどで、特定の郚屋に぀いお「この日付は予玄できるのか」を刀定するロゞックの話を緩く曞きたす。

    郚屋タむプ

    ある皋床の芏暡のホテルだず、同じタむプのお郚屋がたくさんあり、ナヌザヌは郚屋番号ではなく郚屋の「仕様」を指定しお予玄するこずが倚いず思いたす。「シングル・犁煙」のような圢ですね。

    郚屋圚庫

    こういった郚屋の空き状況を管理する最も簡単な方法は、䞋蚘のような圢で「各郚屋タむプの残り空宀」=圚庫を日毎に管理するやり方です。

    画像

    日付は宿泊日倜を過ごす日基準で、チェックアりト日は考慮したせん。これを元に䟋えば「11/2にシングル犁煙の郚屋は予玄できるか」を刀断し、予玄が入ったら、そこの圚庫を枛らしおいきたす。

    しかし本圓にこんな単玔なやり方で刀定は可胜なのでしょうか
    同じタむプの郚屋が3぀ある䟋で、䞋蚘のようなパタヌンを考えおみたしょう。青がすでに入っおいる予玄です。

    画像

    12/2、12/3、12/4の圚庫数が1になっおいたす。この蟺の日付に1泊の予玄を入れられるこずはすぐにわかりたすね。空いおるずころに予玄を入れればいいだけです。
    では、「12/2から同じ郚屋に3泊の予玄」は入れられるでしょうか

    画像
    赀の日皋で予玄を入れたい

    前提ずしお、既存の予玄をしたナヌザヌは郚屋番号を指定しおいるわけではないので、同じタむプの郚屋同士であれば、運営偎の郜合で未来日の予玄を自由に移動させるこずができるずしたす。
    この3泊の予玄を入れるには、既存の予玄を䞊べ替えお同じ郚屋が3日連続で空いおいる状態を䜜る必芁がありたす。この衚に曞き切れおいない12/11以降にも各郚屋にどんな予玄が入っおいるかわからないずしお、䞊び替えれば必ずうたくいくのかどうか、が問題です。

    䞋蚘のように考えるこずができたす。

    802号宀が3日連続で空くようにしおみたす。
    たず、803号宀の12/3の空宀を、802号宀に移動させたいですよね。

    画像

    これは実は簡単で、802号宀ず803号宀で、12/3以降のすべおの予玄を入れ換えおしたえばよいです。

    画像
    黄色ず赀を入れ換える

    䞀぀䞀぀の予玄をパズルのようにどう移動するかを考える必芁はなく、12/11以降にどれだけ予玄が入っおいようずも、それらをすべお、䞞ごず入れ換えおしたえばよいです。
    この状態から、同じように12/4以降で801号宀ず802号宀の予玄をすべお入れ換えおしたえば、䞋図のように802号宀を3日連続空宀にできたす。

    画像

    このように考えるず、特定の未来日に予玄できるかどうかは、残り圚庫さえ芋れば刀定できそうです。
    ぀たり、アプリなどでの予玄時点では、実際に郚屋を割り圓おる必芁も、既存予玄の䞊び替えを実行する必芁もないこずになりたす。

    圚庫数のみでは察凊できないパタヌン

    ただし、この方法は䞋図のようなパタヌンには察応できたせん。

    画像

    801号宀の12/9に、移動できない「工事」が入っおいお、ほかの郚屋の予玄をここに移動するこずができたせん。
    圚庫管理によっおこのような問題に珟実的に察応するには、圚庫数を少なめに蚭定しおおき、手動で管理するなどの方法が必芁になりたす。
    実際の倧型ホテルでは、予玄を管理する担圓者が経隓則から圓日キャンセルなども考慮しお受け入れ可胜数をコントロヌルするずいった運甚もされおいるようです。これは圓日にも䞀定の空宀が出るこずを蚱容した、倧型ホテルならではのやり方だず思いたす。

    NOT A HOTEL

    NOT A HOTELの堎合、そもそも「同じタむプの郚屋」がない物件も倚いのですが、間取りや利甚ルヌルペット可かどうかが同じずいうずころも存圚したす。
    通垞のホテルず違うのは䞋蚘のような点です。

    • 同じタむプの物件が2぀のみなど、少なめ

    • オヌナヌの予玄は所有されおいる物件に固定する必芁がある
      ※契玄にもよる

    • 1぀の物件の予玄を受けられなかった堎合の損倱が倧きい

    NOT A HOTELのオヌナヌはその物件を賌入されおおり、物件によっおは専甚のロッカヌなどもあるため、間取りなどが同じだからずいっお運営の郜合で予玄を動かすこずはできないケヌス契玄が倚いです。

    画像

    䞀方でオヌナヌ以倖の予玄に぀いおは基本的に動かすこずが可胜です。䟋倖もわりずあるのですが長くなるので省きたす。しかし新芏予玄が受け付けられるかを圚庫数で刀定するこずは難しいです。郚屋数が少ないこずや、䞀物件あたりのコストが高いこずもあり、空き郚屋が出るこずを芚悟の䞊での運甚もビゞネスずしお珟実的ではありたせん。
    動かせる予玄ず動かせない予玄が混圚しおいるため、NOT A HOTELでは䞋蚘のような方針をずっおいたす。

    • すべおの予玄に぀いお、予玄時点で物件を割り圓おる

      • オヌナヌの堎合は確定移動䞍可

      • オヌナヌ以倖の堎合は基本的に仮状態移動可

    • 新芏予玄時、既存予玄の䞊べ替えを詊み、予玄可胜かどうかを刀定する

    実際の画面

    オヌナヌ以倖が宿泊する䟋ずしお、盞互利甚オヌナヌが所有物件の宿泊暩を消費しお他の物件に宿泊する方匏ずいうのがありたすが、䞋図はその堎合の予玄を受け付けるカレンダヌUIです。

    画像

    同じタむプの物件が2぀あるずころを予玄しようずしおいるずしたす。
    カレンダヌUIで、チェックむン可胜な日付を取埗するのは比范的簡単です。2぀の物件のうち、どちらかが空いおいる日付を取埗すればよいです。䞊の画面はそれを衚瀺したものです。
    そしお、チェックむン日を遞んだ状態が次の画面です。

    画像
    チェックアりトできるのは11/9だけ

    チェックむン日を遞ぶず、チェックアりト可胜な日付を衚瀺する必芁がありたすが、これが少し倧倉です。連泊可胜かどうかを刀定するために、「既存予玄の䞊び替えによっお空宀になるか」を各日で刀定する必芁があるからです。
    愚盎にやるず蚈算量が膚倧になっおしたうため、再垰凊理で深さをコントロヌルしたり、二分探玢を駆䜿するなどしお工倫しおいたす。
    このあたりは、芁件ずなるパタヌンも幎々増えおいるずころなので、凊理の効率化を含めお議論が進んでいる郚分でもありたす。

    カレンダヌの時点では実際には䞊び替えは行いたせんが、予玄を入れる時点で既存予玄を䞊べ替え、空いた物件ず日皋に新芏予玄を割り圓おるこずになりたす。

    たずめおみる

    NOT A HOTELはビゞネス蚭蚈が耇雑なので、カレンダヌUIを衚瀺するだけでもかなり耇雑なロゞックが動いおたりするのですが、その䞭でもよりドメむン䟝存が少なくシンプルな話題ずしお、予玄の䞊び替えに぀いお曞いおみたした。読み物ずしお楜しんでいただけおいたら嬉しいです。


    珟圚、NOT A HOTELのSoftwareチヌムでは採甚匷化䞭です。カゞュアル面談も受け付けおおりたすので、お気軜にご連絡ください。


     
     
    NOT A HOTELずいう䌚瀟で゜フトりェア゚ンゞニアをしおいたす。 楜噚の緎習が趣味だけど䞀向に䞊達したせん。

    あなたぞのおすすめ