
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ã¢ããªã®æ©èœã®é²å
ãªãªãŒã¹ä»¥åŸæ©èœã¯å¢ããŠãããä»ã®ã¢ããªã«ã¯ä»¥äžã®ãããªæ©èœããããŸãã

ã¢ããªã®ãªãªãŒã¹ä»¥åŸãäºçŽ/宿æ³äœéšãããããããããã«æ§ã
ãªæ¹åãæ©èœè¿œå ãè¡ã£ãŠããŸãããæµ·å€çžäºå©çšããã¡ããªãŒå
±æãç©ä»¶ã®å£²åŽãªã©ãã§ããããã«ãªã£ãããNOT A HOTEL DAOã®æ©èœã远å ãããŸããã
ãã®ããã«æ©èœãå¢ããŠããã¢ããªããã§ããããšãå¢ããã®ã¯è¯ãããšã§ããäžæ¹ã§ãæ©èœã®è¿œå ã«ãã£ãŠãã¶ã€ã³ãå€ãããããã䜿ãã¥ãããçããããããã©ã³ãã€ã¡ãŒãžãæãããããŠã¯ãããŸããããŸããApple ã® Human Interface Guidelines ã«æ²¿ã£ãèªç¶ãªãã¶ã€ã³ãé©çšããããšã倧äºã§ããéçºã®éã¯ãã®æ©èœã®è¿œå ã«ãã£ãŠæ¬åœã«èª²é¡ã¯è§£æ±ºãããã®ããæ¢åã®ãã¶ã€ã³/䜿ãåæãæãªããªããããšãã£ãããšãåžžã«èããããã«ããŠããŸãã
iOSã¢ããªéçºã®å€å
3幎ãçµãŠiOSã¢ããªéçºã®èгç¹ã§ã®å€åããããããããŸããã
ã¢ãžã¥ãŒã«æ°ã®å€å

ç§ãã¡ã®ã¢ããªã§ã¯åœåãã Swift Package Manager ã䜿çšãããã«ãã¢ãžã¥ãŒã«æ§æãæ¡çšããŠããŸããã¢ãžã¥ãŒã«ã¯æ©èœãå¢ããã«äŒŽã£ãŠå¢å ãçŽ2åã«ãªããŸããã å¯èªæ§ãæ ä¿ãäŸåé¢ä¿ãæç¢ºã«ãããããæ©èœããšã«1ã¢ãžã¥ãŒã«ãšããããã¯ã1ç»é¢1ã¢ãžã¥ãŒã«ãããã®ç²åºŠã§ã¢ãžã¥ãŒã«ãåãããšãå€ãã§ãã
ãŸããã©ã€ãã©ãªã䜿çšãããããªæ©èœå®è£
ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãšå®äœãåããŠã¢ãžã¥ãŒã«å®çŸ©ããå©çšåŽã¯ã€ã³ã¿ãŒãã§ãŒã¹ãžäŸåããããšã§ã©ã€ãã©ãªãžã®çŽæ¥çãªäŸåãé¿ããããã«ããŠããŸãã
ä»åŸããã«ã¢ãžã¥ãŒã«ãå¢ããŠããããšãäºæ³ãããŸãããã¢ãžã¥ãŒã«åã¯å€ãã®å Žåã{æ©èœå} + {ç»é¢å}ããšãã圢åŒã§åœåãããŠããŸãããã®ããã¢ãžã¥ãŒã«æ°ãå€ããŠããé¢é£ã¢ãžã¥ãŒã«ã¯Xcodeäžã§èŠã€ãããã倧ããªäžäŸ¿ã¯æããŠããŸããã
äžæ¹ã§ããã¬ãã¥ãŒãã¢ããªå
šäœã®ãã«ãæéãæ°ã«ãªã£ãŠããŠãããããã¯ä»åŸæ¹åããŠãããããšæã£ãŠããŸãã
ã¢ãŒããã¯ãã£ã®å€å
ç§ãã¡ã¯ãªãªãŒã¹åœåãã The Composable Architecture (ä»¥äž TCA) ã䜿çšããèšèšãæ¡çšãçŸç¶ã䜿çšããŠããŸãã
åœå㯠0.38.3 ã ã£ã TCA ãä»ã§ã¯ 1.23.0 ãšãªããŸããã

æåãšæ¯ã¹ããš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ããŒã ã§ã¯æ¡çšåŒ·åäžã§ãã
ã«ãžã¥ã¢ã«é¢è«ãåãä»ããŠãããŸãã®ã§ããæ°è»œã«ãé£çµ¡ãã ããã