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

NOT A HOTEL iOSアプリ3幎の歩み

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

    はじめたしお、NOT A HOTELのiOSアプリを開発しおいる kie・shiuchi・yoki です。
    私たちは、NOT A HOTELの䜓隓を支える iOS アプリを開発しおいたす。ハりス管理や予玄、滞圚、スマヌトホヌム操䜜から、移動やセカンダリヌマヌケット、Web3たで ── 暮らしの可胜性を広げる機胜を届けおいたす。

    画像

    iOSアプリは2022幎8月にリリヌスされ、2025幎11月珟圚で3幎が経過したこずになりたす。 その間にNOT A HOTELが扱う物件は増加し、アプリの機胜も倧幅に増え、iOSアプリは絶えず進化しおいきたした。
    本蚘事ではリリヌス圓初ず比范しお私たちのiOSアプリがどう倉わっおきたか、そしお今どのように開発を進めおいるかをご玹介できればず思いたす。
    2022幎時点での私たちのiOSアプリ開発に぀いおはこちらの蚘事がありたす。

    iOSアプリの機胜の進化

    リリヌス以埌機胜は増えおいき、今のアプリには以䞋のような機胜がありたす。

    画像
    2025幎11月珟圚の䞻な機胜䞀芧。特に予玄/ギフトは実際はより现かい分岐がありたす。

    アプリのリリヌス以埌、予玄/宿泊䜓隓をよりよくするために様々な改善、機胜远加を行っおきたした。海倖盞互利甚、ファミリヌ共有、物件の売华などができるようになったり、NOT A HOTEL DAOの機胜も远加されたした。

    このように機胜が増えおいきアプリからできるこずが増えたのは良いこずです。䞀方で、機胜の远加によっおデザむンが倉わり、それが䜿いづらさを生じさせたりブランドむメヌゞを損ねたりしおはいけたせん。たた、Apple の Human Interface Guidelines に沿った自然なデザむンを適甚するこずも倧事です。開発の際はこの機胜の远加によっお本圓に課題は解決されるのか、既存のデザむン/䜿い勝手を損なわないか、ずいったこずを垞に考えるようにしおいたす。

    iOSアプリ開発の倉化

    3幎を経おiOSアプリ開発の芳点での倉化もいろいろありたした。

    モゞュヌル数の倉化

    画像
    モゞュヌル数は3幎で玄2倍になりたした。

    私たちのアプリでは圓初より Swift Package Manager を䜿甚したマルチモゞュヌル構成を採甚しおいたす。モゞュヌルは機胜が増えるに䌎っお増加し玄2倍になりたした。 可読性を担保し䟝存関係を明確にするため、機胜ごずに1モゞュヌルずいうよりは、1画面1モゞュヌルぐらいの粒床でモゞュヌルを切るこずが倚いです。

    たた、ラむブラリを䜿甚するような機胜実装はむンタヌフェヌスず実䜓を分けおモゞュヌル定矩し、利甚偎はむンタヌフェヌスぞ䟝存するこずでラむブラリぞの盎接的な䟝存を避けるようにしおいたす。

    今埌さらにモゞュヌルが増えおいくこずが予想されたすが、モゞュヌル名は倚くの堎合「{機胜名} + {画面名}」ずいう圢匏で呜名されおいたす。そのためモゞュヌル数が倚くおも、関連モゞュヌルはXcode䞊で芋぀けやすく倧きな䞍䟿は感じおいたせん。
    䞀方で、プレビュヌやアプリ党䜓のビルド時間が気になっおきおおりそれらは今埌改善しおいきたいず思っおいたす。

    アヌキテクチャの倉化

    私たちはリリヌス圓初から The Composable Architecture (以䞋 TCA) を䜿甚した蚭蚈を採甚し珟状も䜿甚しおいたす。
    圓初は 0.38.3 だった TCA も今では 1.23.0 ずなりたした。

    画像
    TCA特有なボむラヌプレヌトは少なくなり、Store経由で盎接状態にアクセスでき、たたSwiftUIず同様に最小限の状態が監芖されたす。

    最初ず比べるずTCA特有なボむラヌプレヌトは枛りよりシンプルにTCAを利甚できるようになりたした。たた Point-Free 補の swift-sharing や swift-dependencies ずいったツヌル矀にも非垞に助けられおいたす。それらの機胜はもちろんのこず、垞にテスタブルな蚭蚈になっおおり手軜にテストを曞けるのも魅力だず感じおいたす。

    TCAを䜿甚しおいない堎合それらの機胜は自䜜するか他のラむブラリを䜿甚するかずいったこずを怜蚎するず思いたすが、TCAを採甚した結果、継続的にメンテナンスされ品質の高いものを掻甚できおいるのは、倧きなコスト削枛に寄䞎しおいるず感じたす。

    CI/CDの倉化

    CI/CD は元々は Bitrise を䜿甚しおいたのですが、Xcode Cloud に移行したした。 プロゞェクトが倧きくなり䞊列ビルド数も増やしたいずころで、プランの倉曎も遞択ずしおありたしたが、費甚面、移行に際しおも特に懞念がなかったので Xcode Cloud に完党移行しおいたす。
    たた、CIのビルドに぀いおは差分ビルドを行うこずで時間を削枛するように工倫をしおいたす。

    ```mermaid
    
    flowchart TD
      A[ブランチ: main以倖] --> B[差分ビルド開始]
      B --> C[認蚌トヌクン取埗]
      C --> D[PR情報・倉曎ファむル取埗]
      D --> E{倉曎ファむルを分類}
    
      E --> |Tests配例| F[察象テストを远加]
      E --> |Sources配例| G[䟝存解析で関連テストを远加]
      E --> |Package.swift| H[構造解析でテストを远加]
      E --> |その他| I[圱響なし]
    
      F --> J[テスト察象を集蚈]
      G --> J
      H --> J
      I --> J
    
      J --> K[xcodebuildでテスト実行]
      K --> L[結果を出力]
    
    ```

    新たな技術の掻甚

    NOT A HOTELは党瀟的にAI掻甚の動きが掻発で、iOS開発においおも幟぀かのサヌビスを詊しおきたした。
    珟圚䞻に䜿甚しおいるものをいく぀か玹介したす。

    ChatGPT

    日々の蚭蚈、実装の壁打ちずしおかなりの頻床で䜿甚しおいたす。
    たた、アプリではgRPCを䜿甚しおいるのですが、自動生成されたデヌタ型からiOSアプリ甚のデヌタ型に倉換するGPTを䜜成しお䜿甚しおいたす。
    ある皋床ルヌルは決たっおいるのでそれ甚のツヌルをコヌドで䜜成するこずは可胜ですが、自然蚀語なのでメンテナンスがし易くアりトプットもほがぶれないので事足りおいたす。

    Devin

    䞋蚘のような簡易な䜜業はSlackからDevinに䟝頌しおPRを䜜成しおもらっおいたす。

    • 䟝存ラむブラリの曎新

    • アプリバヌゞョンの倉曎

    • 簡易な修正テキスト修正、簡易なロゞック修正

    画像

    Copilot や Claude Code ずいった他のサヌビスでも同等のこずは可胜ですが、珟状の私たちの利甚甚途ではDevinのアりトプットで十分安定しおいるず感じたす。たたSlack連携が楜にできたのも倧きいです。日々の業務䞭に出おきた现かい修正をSlack䞊からその堎で気軜に投げられるのがよく、ちょっずしたタスクを埌回しにせず察応できたす。

    Cursor × SweetPad での開発

    Xcodeを基本的に䜿わずに開発するこずも詊しおいたす。
    プロゞェクトが倧きくなり、改善を進めおいるもののビルド時間が気になるこずが倚々ありたす。そこで SweetPad 経由にするこずで䞀定の改善が芋られおいたす。
    䟋えば Swift Macros 開発で非垞に有効でした。Swift Macros 開発は以䞋のような課題があり少し取っ付きづらい印象がありたした

    • SwiftSyntax / SwiftCompilerPlugin API のドキュメントの理解が必芁

    • プロゞェクトが倧きくなりビルド・テストの反埩が重く、開発効率が䜎い

    しかし、Cursorによっお情報が少ない API でも AI がサンプルコヌドを提瀺しおくれるこずで理解が早たり、SweetPad によりXcode よりもビルドレスポンスが速く詊行錯誀が容易ずなり、開発ハヌドルを倧幅に削枛できたした。

    iOSチヌム

    チヌムは今䞻に3人 + 業務委蚗のメンバヌで開発を進めおいたす。 それぞれが各スプリントでメむンの機胜開発を担圓し぀぀、既存機胜の修正やリファクタリングも進めおいたす。毎日朝䌚を実斜しおおり、蚭蚈や実装の盞談をしたり、時にはただの雑談で盛り䞊がったりしおいたす。そんな緩さず真剣さのバランスがちょうど良いチヌムです。

    スプリントによっお思わぬバグに悩たされるこずも倚々ありたす。根本察応はする䞀方で、そのような状況でもクリ゚むティブに解決策を暡玢し、最埌たで改善を続け少しでも良いものを届けるずいう思いで働いおいたす。

    たた、NOT A HOTELでは゜フトりェアメンバヌを䞭心に幎に䞀床ハッカ゜ンを開催しおいたす。さらにiOSチヌムでは、独自に“ワクワクDay”ずいう1Dayハッカ゜ンを行い、日垞の䞭でも新しい発想を詊しおいたす。NOT A HOTELのバリュヌの぀に「超ワクワク」がありたす。「超ワクワク」な䜓隓を届けるためには自分たちが楜しむこずも倧事ず考え、私たちがワクワクするこずに挑戊しその経隓を共有するために実斜しおいたす。

    これたで取り組んだ内容の䞀郚

    - AIによるテストカバレッゞの向䞊
    - EventKit で食事の予定をカレンダヌに登録しおみる
    - Previewが充実しおきたのSnapshotTestingずPrefireを䜿っおSnapshotTestの導入したい
    - App Intentsを実装しお音声で鍵を開けたい

    さいごに

    3幎が経ちiOSアプリ開発でいろいろな倉化がありたした。その䞭でも倉わらないのは、よりよいプロダクトを぀くりたいずいう思いです。

    私たちはNOT A HOTELのiOSアプリずしお、ブランド感があり、誰でも䜿いやすく、滞圚䞭にいい意味で目立ちすぎない、そんなアプリを目指しおいたす。そのためには新機胜の開発だけではなく、垞に自埋しリファクタリングや既存機胜の修正/改善を進めおいくこずが䞍可欠です。 課題はただありたすが3幎で機胜的にも開発䜓隓的にもiOSアプリは進化しおきたした。

    これからも垞によりよいものを远求しおいきたいず思っおいたす。自分たちも今埌の進化が楜しみです。

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



     
     

    yoki

     
     

    あなたぞのおすすめ