Orchestra IDE ã®ãªã¢ãŒãã³ã³ãããŒã©ãŒ (React Native / Expo)
æå ã®ã¹ãããããPC ã§åããŠãã Orchestra ãæäœããã¢ããªã§ãã
ã¿ãããŒã¯ç¡ããæåã®ç»é¢ã¯ 1 ã€ã ãã§ã (PC ã«æ¥ç¶äžã¯ãã£ãããæªæ¥ç¶ãªãæ¥ç¶å ã®äžèЧ)ã ã»ãã®ããŒãžã¯ãã£ããå·Šäžã® â° ã¡ãã¥ãŒããéãããæ»ããã§æ»ããŸãã
| ç»é¢ | ã§ããããš |
|---|---|
| ð¬ ãã£ãã (æåã®ç»é¢) | ãšãŒãžã§ã³ããžã®æç€ºã»äžæãããŒã«å®è¡ã®æ¿èª/åŽäžãâ° ã¡ãã¥ãŒããã¹ã¬ããåæ¿ãšåããŒãžãž |
| ð ã«ã³ãã³ | .orchestra/kanban.json ã®ããŒãé²èЧã»ç·šéãã«ãŒãç§»åãã«ã©ã ã®è¿œå /ç·šé/åé€ãçµã蟌ã¿ããã§ãã¯ãªã¹ããã³ã¡ã³ããã¿ã¹ã¯ã®ãšãŒãžã§ã³ãå®è¡ (PC / ã¯ã©ãŠã)ãèªåå®è¡ã® ON/OFF |
| ð Division | .division/projects.json ã®ãããžã§ã¯ã管çã圹å²ã®è¿œå /åé€ãšã¢ãã«å²ãåœãŠãæå¹åãSupabase åæãå²ãåœãŠã®å
±æ |
| âïž ã¯ã©ãŠã | ã¯ã©ãŠãã§åããšãŒãžã§ã³ãã®ã»ãã·ã§ã³ãèµ·å (GitHub 飿ºã§éžãã ãªããžã㪠(éå ¬éãå¯) / Git ã® URL / 空ã®ãã©ã«ããæå€§ 10 å䞊åãDivision ã®ãããžã§ã¯ãæå®)ã»ç£èŠã»è¿œå æç€ºã»åæ¢ã»ã¢ãŒã«ã€ãã倿Žãã¡ã€ã«ãšå·®åã®é²èЧãã»ãã·ã§ã³ããšã®æéãPC ããèµ·åããã»ãã·ã§ã³ãç¶ãããããäžã®æ®µãããããžã§ã¯ãã»ã³ã¹ãã»ã«ã³ãã³ãž |
| ð€ å ±æ | 圹å²ãšã¢ãã«ã®çµã¿åãããå ¬éã»é²èЧã»ãããã»èªåã®ãããžã§ã¯ããžåã蟌㿠|
| ð ã³ã¹ã | ã«ãŒãã£ã³ã°æ¹é (æ§èœ/äžéã³ã¹ã/åºåããŒã¯ã³) ã®èª¿æŽãJev ã«ããèŠç©ããã宿ž¬ã®å©çšå±¥æŽãšéèšãã¯ã¬ãžããæ®é«ã»èªåãã£ãŒãžã»ãã©ã³ã®ç®¡ç |
| â¡ ã¯ã€ãã¯æäœ | ãã¹ãŠä¿åã»ã¿ãŒããã«ãéãã»ãŠã£ã³ããŠåèªã¿èŸŒã¿ãªã©ããšãã£ã¿æäœã®ã¯ã³ã¿ããå®è¡ |
| âïž æ¥ç¶ | æ¥ç¶å ã®åæ¿ã»è§£é€ãã¯ãŒã¯ã¹ããŒã¹ã®ãã¡ã€ã«ã IDE ã§éããDivision ã¢ã«ãŠã³ãã®ãã°ã¢ãŠã |
IDE ãšã®éä¿¡ (ã«ã³ãã³é²èЧã»ãšãŒãžã§ã³ãæäœãªã©) 㯠åã LAN å ã® IDE ãšçŽæ¥ è¡ããå€éšãµãŒããŒã¯ çµç±ããŸãããäžæ¹ãã¢ã«ãŠã³ãã§ã®ãã°ã€ã³ / æ¥ç¶å ã®æ€åº / æ¥ç¶å ããã®ã¢ã«ãŠã³ãã® PC ãã®ç¢ºèªã ã㯠Supabase (Division) ãçµç±ããŸã (æ¥ç¶å åè£ã®äžèЧãåŸãããã ãã§ãæäœãã®ãã®ã¯åŒãç¶ã LAN çŽçµã§ã)ã
ã¯ã©ãŠãã»å ±æã»ã³ã¹ã㯠Division (Supabase / Division API) çŽçµãªã®ã§ãPC ã«æ¥ç¶ããŠããªããŠã䜿ããŸãã æªæ¥ç¶ã®ãšãã¯ãæ¥ç¶å ã®äžèЧã®äžã«ãããã¯ã©ãŠãããå ±æããã³ã¹ããããéããŸã (ãããžã§ã¯ããžã®åã蟌ã¿ãšå ±æã ãã¯æ¥ç¶ãèŠããŸã)ã
Orchestra ã® èšå® â ãªã¢ãŒãã³ã³ãããŒã« ã§ããªã¢ãŒãã³ã³ãããŒã«ãæå¹ã«ãããããªã³ã«ããŸãã ã³ãã³ããã¬ããããã§ãåãæ¿ããããŸãã
Remote Control: Toggle Mobile Serverâ ãµãŒããŒã® ON/OFFRemote Control: Show Connection Infoâ æ¥ç¶å ãšããŒã¯ã³ã®è¡šç€º / ãã¢ãªã³ã°ãªã³ã¯ã®ã³ããŒRemote Control: Regenerate Tokenâ ããŒã¯ã³ã®äœãçŽã
æå¹ã«ãããš http://<PC ã® IP>:39231 ã§åŸ
ã¡åããå§ãŸããŸãã
ã¢ããªãç¹ãã®ã¯ããã°ã€ã³äžã® Division ã¢ã«ãŠã³ãã®ã»ãã·ã§ã³ (åãã¢ã«ãŠã³ãã§ãã°ã€ã³ããŠãã PC) ã ãã§ãã ãã°ã€ã³ããªããšæ¥ç¶ã§ãããå¥ã®ã¢ã«ãŠã³ãã§ãã°ã€ã³ããŠãã PC ã«ã¯ããã¢ãªã³ã°ãªã³ã¯ãæå ¥åã§æå®ããŠãç¹ããŸããã
- IDE ã§ Division ã¢ã«ãŠã³ãã«ãã°ã€ã³ããç¶æ ã§ãªã¢ãŒãã³ã³ãããŒã«ãæå¹ã«ãã
- ã¢ããªãéããåã Division ã¢ã«ãŠã³ãã§ãã°ã€ã³ãã
- ãèŠã€ãã£ãããã€ã¹ããã察象㮠PC ãã¿ããããŠæ¥ç¶
åãã¢ã«ãŠã³ãã§ãã°ã€ã³ããŠãã PC ã¯èªåçã«äžèЧãžè¡šç€ºãããŸã (ãã¹ã¯ãããåŽã çŽ 25 ç§ééã§ããŒãããŒããéã£ãŠãããããæå¹åããæ°åç§ä»¥å ã«èŠã€ããã¯ãã§ã)ã æ°ãã PC ã远å ããããšããŒã«ã«éç¥ã§ãç¥ããããŸã (ã¢ããªèµ·åäž/ãã©ã¢ã°ã©ãŠã³ãã®ã¿ã ã¢ããªãå®å šã«éããŠããŠãå±ã push éç¥ã¯ä»åŸå¯Ÿå¿äºå®ã§ã)ã
- ã¹ãããš PC ãåã Wi-Fi ã«ç¹ã (PC åŽãåãã¢ã«ãŠã³ãã§ãã°ã€ã³ããŠãã)
- æ¥ç¶å
ã®äžèЧã®äžã«ãããæå
¥åã§æ¥ç¶ããéžã³ã
IDE ã§ã³ããŒãããã¢ãªã³ã°ãªã³ã¯ (
orchestra://pair?...) ã貌ãä»ãã- 貌ãä»ããé£ãããã°ãæå ¥åãã¿ãã§ã¢ãã¬ã¹ãšããŒã¯ã³ãå ¥åãã
- ãæ¥ç¶ããã¿ãã
æ¥ç¶ããåã«ãæå®ããã PC ã®ããŒã¯ã³ãã¢ã«ãŠã³ãã® RemoteSession ã«ãããã確ãããŸãã
ç¡ããã°ããã® PC ã¯ããã°ã€ã³äžã®ã¢ã«ãŠã³ãã®ã»ãã·ã§ã³ã§ã¯ãããŸããããšè¡šç€ºããŠç¹ããŸããã
PC åŽããã¢ããªãéã Division ã® JWT ã®ãŠãŒã¶ãŒã PC ã®ã¢ã«ãŠã³ããšéãã° 403 account_mismatch ã§æããŸãã
æ¥ç¶æ å ±ã¯ç«¯æ«å ã«ä¿åãããæ¬¡åèµ·åæã«èªåã§åŸ©åž°ããŸããä¿åããæ¥ç¶ã¯ä¿åããã¢ã«ãŠã³ãã« ã²ãä»ããŠããŠãå¥ã®ã¢ã«ãŠã³ãã§ãã°ã€ã³ããŠããããã ã¯äžèЧã«åºãŸããããã°ã¢ãŠããããš PC ãšã® éä¿¡ãæ¢ã (åãã¢ã«ãŠã³ãã§ãã°ã€ã³ãçŽãã°åŸ©åž°ããŸã)ãå¥ã®ã¢ã«ãŠã³ãã§ãã°ã€ã³ãããšæ¥ç¶ãåããŸãã PC åŽã®ã¢ã«ãŠã³ããéäžã§å€ãã£ãå Žåãããã®å Žã§åæããŸãã
PC ã®ãã£ããæ¬ã§ /remote-control ãšéããšããã®ãã£ãããã¹ãããšåæãããŸãã
æ¥ç¶äžãªããã£ããç»é¢ããã®ãã£ããã«åãæ¿ããããPC ã®ã»ãã·ã§ã³ãåæããŸããããšéç¥ãåºãŸã
(ããããŒã®ç¶æ
衚瀺ã¯ãPC ãšåæäžãã«ãªããŸã)ãæªæ¥ç¶ãªããPC ãããã«ãèŠã€ãã£ãããã€ã¹ãã«
åºãã®ã§ãéžã¹ã°ãã®ãã£ãããéããŸãã
åæäžã¯ PC ã§å¥ã®ãã£ãããéããŠããã¹ããã«ã¯åæãããã£ãããåºç¶ããŸããããããšãã¯
PC ã§ /remote-control off ãšéããŸãã詳ãã㯠Orchestra ã®
docs/REMOTE-CONTROL.md ãåç
§ããŠãã ããã
Android ãªã IDE åŽã®ãLAN ããã®æ¥ç¶ãèš±å¯ãããªãã®ãŸãŸã§ããããŒã転éã§ç¹ãããŸãã
adb reverse tcp:39231 tcp:39231
# ã¢ããªåŽã®æ¥ç¶å
㯠127.0.0.1:39231npm install
npm start # Expo Dev Server (Expo Go / éçºãã«ãã§èªã¿èŸŒã)
npm run typecheck # tsc --noEmit
npm test # jest (API ã¯ã©ã€ã¢ã³ããšçŽç²ããžãã¯ã®ãã¹ã)eas build ãªã©ãå©ããšããŸã次ã®èŠåãåºãŸãã
The "extra.eas.projectId" field is missing from your app config.
ãã® ID 㯠EAS ããµãŒããŒåŽã§çºè¡ãã UUID ãªã®ã§ããªããžããªã«æ±ºãæã¡ã§ã¯æžããŸããã
èŠåãæ¶ãã«ã¯ã¢ã«ãŠã³ãåŽã§äžåºŠã ãçºè¡ããå¿
èŠããããŸã (æ¢ã« EAS äžã«ãããžã§ã¯ãã
ãããªã --id <uuid> ã§çŽã¥ã)ã
npx eas-cli login
npm run eas:init # æ¢åãããžã§ã¯ããªã: npx eas-cli init --id <uuid>çºè¡ããã ID ãç°å¢å€æ°ã§æž¡ããŸã (app.config.ts ã extra.eas.projectId ã«å·®ã蟌ã¿ãŸã)ã
export EXPO_OWNER=<EAS ã®ã¢ã«ãŠã³ãå> # å人ã¢ã«ãŠã³ããªãçç¥å¯
export EAS_PROJECT_ID=<çºè¡ããã UUID>
npm run build:androideas init ã app.json ã« ID ãæžã蟌ãã å Žåã¯ãã¡ãã䜿ãããã®ã§ãç°å¢å€æ°ã¯èŠããŸããã
èšå®ã§ããŠãããã¯åäœã§ã確èªã§ããŸãã
npm run eas:check # 解決ããã projectId ãè¡šç€ºãæªèšå®ãªãæé ãåºã㊠exit 1npm run build:android / build:ios ã¯ãã®ãã§ãã¯ãå
ã«éããŸããID ãç¡ããŸãŸ
eas build ã«é²ããšãèŠåã®ããšå¯Ÿè©±çã«å¥ãããžã§ã¯ããäœã£ãŠããŸãããšãããããã§ãã
ID ã UUID ã®åœ¢ãããŠããªããšãã¯ãapp.config.ts ããã«ãåã«ãšã©ãŒã§æ¢ããŸãã
ãããžã§ã¯ã ID ãæã£ãŠããŠããiOS ãã«ããé察話 (CI ãã¹ã¯ãªããããã® eas build) ã§
å©ããšæ¬¡ã®ãšã©ãŒã§èœã¡ãããšããããŸãã
Distribution Certificate is not validated for non-interactive builds.
Failed to set up credentials.
Credentials are not set up. Run this command again in interactive mode.
EAS ã®ãªã¢ãŒãèšŒææžã¯ãµãŒããŒåŽã«ä¿åãããŸãããApple åŽã®æ€èšŒã¯èª°ããäžåºŠå¯Ÿè©±ã¢ãŒãã§ éãå¿ èŠããããããã¯ãªããžããªã®èšå®ã§ã¯ä»£æ¿ã§ããŸãããããŒã«ã«ã®å¯Ÿè©±ç«¯æ«ããäžåºŠã ã å®è¡ããŠãã ããã
npx eas-cli login
npm run eas:credentials # -> iOS ãéžã³ãDistribution Certificate ã確èª/äœæå¯Ÿè©±äžã«æ¢åã®èšŒææžãéžã¶ããç¡ããã°æ°èŠäœæ (Apple Developer ã¢ã«ãŠã³ããžã®ãã°ã€ã³ã
å¿
èŠ) ããã°ã以åŸã¯é察話㮠eas build --non-interactive ã§ããã®èšŒææžã䜿ããããã«
ãªããŸããCI ã§å®è¡ããå Žåã¯ããã®æ€èšŒãæžãŸããã¢ã«ãŠã³ãã® EXPO_TOKEN ã䜿ã£ãŠãã ããã
èšŒææžãæ€èšŒããããšããproduction ãããã¡ã€ã«ãèªåã§ TestFlight ã«æåºããããšãã
å Žåã¯æ¬¡ã®ãšã©ãŒã§æ¢ãŸãããšããããŸãã
Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode.
ascAppId 㯠App Store Connect ãçºè¡ããæ°å€ ID (App Store Connect â
ã¢ããªæ
å ± â Apple ID) ã§ãç§å¯æ
å ±ã§ã¯ãªãã®ã§ãªããžããªã«ãã®ãŸãŸæžããŸãã
eas.json ã® submit.production.ios.ascAppId ã«èšå®æžã¿ã§ããå¥ã¢ããªã«äœ¿ãåãå Žåã¯
ãã®å€ãæžãæããŠãã ããã
EAS ã®ä»£ããã«ãApple ã® Xcode Cloud ã§ã iOS çããã«ãã»TestFlight é
ä¿¡ã§ããŸãã
ios/ ã¯ã³ãããããŠããªã (Expo ã® managed workflow ã®ãŸãŸ) ã®ã§ãXcode Cloud ã
ãªããžããªã clone ããçŽåŸã« ios/ci_scripts/ci_post_clone.sh ãæ¯åãã€ãã£ããããžã§ã¯ããäœããŸãã
- Homebrew ã§ Node (æ¢å®ã¯
node@22) ãå ¥ãããCocoaPods ãç¡ããã°ãããå ¥ãã npm cinpx expo prebuild --platform ios(ããŒã ID ãšãã«ãçªå·ãããã§å·®ã蟌ã)pod install
app.json ãå€ããŠããæ¬¡ã®ãã«ãã® prebuild ã§ãã®ãŸãŸåæ ãããŸãã
ã¯ãŒã¯ãããŒã¯ Xcode ããäœãã®ã§ãæå
ã§äžåºŠã ã iOS ãããžã§ã¯ããçæããŸã
(ios/ 㯠.gitignore æžã¿ã§ãios/ci_scripts/ ã ããã³ããã察象ã§ã)ã
npm ci
APPLE_TEAM_ID=<ããŒã ID> npx expo prebuild --platform ios
open ios/OrchestraMobile.xcworkspaceXcode ã§ Xcode Cloud ã®ã¯ãŒã¯ãããŒãäœæããæ¬¡ã®ããã«èšå®ããŸãã
| é ç® | å€ |
|---|---|
| ã¯ãŒã¯ã¹ããŒã¹ / ã¹ããŒã | ios/OrchestraMobile.xcworkspace / OrchestraMobile |
| Environment â Environment Variables | APPLE_TEAM_ID = ããŒã ID (developer.apple.com â Membership details ã® 10 æå) |
| Actions | Archive (iOS)ãé ä¿¡ãããªã Deployment Preparation ã TestFlight / App Store ã« |
App Store Connect ã«ã¯ããã³ãã« ID com.hero.orchestra ã®ã¢ã㪠(eas.json ã® ascAppId ãšåããã®) ã
ç»é²æžã¿ã§ããå¿
èŠããããŸãã
ä»»æã®ç°å¢å€æ°:
| 倿° | çšé |
|---|---|
NODE_FORMULA |
Homebrew ã® Node ãã©ãŒãã¥ã©ãå€ãã (äŸ: node@24) |
CFBundleVersion ã«ã¯ Xcode Cloud ã® CI_BUILD_NUMBER ã䜿ããŸã (app.config.ts ã
IOS_BUILD_NUMBER ãšããŠåãåã)ãEAS (appVersionSource: remote) ã§åãããŒãžã§ã³ã
ã¢ããããŒãæžã¿ã®å Žåããã以äžã®çªå·ã¯ App Store Connect ã«åŒŸãããã®ã§ãXcode Cloud ã®èšå®ã§
次ã®ãã«ãçªå·ã EAS ã®ææ°ãã倧ããããŠãããŠãã ãããEAS åŽã®ãã«ãã¯ãããŸã§éãã§ã
ç°å¢å€æ°ãæž¡ããªãéã app.config.ts ã¯äœãäžæžãããŸããã
app.config.ts app.json ã« EAS ã®ãããžã§ã¯ã ID / ã¢ã«ãŠã³ããXcode Cloud ã®ããŒã ID / ãã«ãçªå·ãå·®ã蟌ã
scripts/eas-preflight.js ãã«ãåã« EAS ã®ãããžã§ã¯ã ID ãæã£ãŠããã確èª
ios/ci_scripts/ci_post_clone.sh Xcode Cloud: clone çŽåŸã« prebuild ãš pod install ãè¡ã
App.tsx ã«ãŒãããã°ã€ã³/æ¥ç¶å
äžèЧ/ãã£ãããšãã¡ãã¥ãŒããéãããŒãžã®åãæ¿ã
src/navigation.ts ã¡ãã¥ãŒã«äžŠã¹ãããŒãžãšãæªæ¥ç¶ã§ãéãããã®å®çŸ©
src/api/types.ts IDE ã® remoteControlTypes.ts ã«å¯Ÿå¿ããå
src/api/client.ts HTTP ã¯ã©ã€ã¢ã³ã (React éäŸå = ãã¹ãå¯èœ)
src/lib/pairing.ts ãã¢ãªã³ã°ãªã³ã¯ / æå
¥åã®è§£é
src/lib/connect.ts æ¥ç¶åè£ã®æ€èšŒ (pingâstateâconnect) ã®å
±éããžãã¯
src/lib/remoteSession.ts PC ã® /remote-control ã§åæãããã»ãã·ã§ã³ã®éç¥å€å®
src/lib/divisionAuthConfig.ts Division (Supabase / Division API) ã®å
¬éèšå®
src/lib/divisionAuth.ts Division ãã°ã€ã³ã»RemoteSession äžèЧååŸã»è³Œèª
src/lib/divisionSession.ts Division ã»ãã·ã§ã³ã® secure-store æ°žç¶å
src/lib/divisionSocial.ts å
±ææçš¿ (AssignmentPost) ã®ååŸã»å
¬éã»ãããã»åã蟌ã¿
src/lib/divisionBilling.ts ãã©ã³ã»ã¯ã¬ãžããæ®é«ã»èªåãã£ãŒãžã»Stripe å°ç·
src/lib/divisionRouting.ts Division API ã®ã«ãŒãã£ã³ã°èŠç©ãã / å©çšå±¥æŽ
src/lib/divisionCloud.ts Division API ã®ã¯ã©ãŠããšãŒãžã§ã³ã (ã»ãã·ã§ã³ã®èµ·åã»ã€ãã³ãã»å€æŽ) ãšè¡šç€ºçšã®è£å©é¢æ°
src/lib/divisionGitHub.ts Division API ã® GitHub ã¢ã«ãŠã³ã飿º (ç¶æ
ã»é£æºã»è§£é€ã»ãªããžã㪠/ ãã©ã³ãäžèЧã»é£æºã®å®äºåŸ
ã¡)
src/lib/divisionProjects.ts ã¯ã©ãŠããšãŒãžã§ã³ãã§éžã¶ Division ãããžã§ã¯ã (Supabase ã® Project / PC ã®äžèЧ)
src/lib/social.ts æçš¿ã®å€æã»çµã蟌ã¿ã»èŠçŽ (UI éäŸå)
src/lib/tuning.ts æ¹éã®æ€èšŒãšã³ã¹ãéèš (UI éäŸå)
src/lib/kanban.ts ããŒãã®çµã蟌ã¿ã»éèš (UI éäŸå)
src/lib/format.ts çžå¯Ÿæå»ã衚瀺åã®æŽåœ¢
src/state/AppContext.tsx æ¥ç¶æ
å ±ã®ä¿æãš /api/state ã®ããŒãªã³ã°
src/state/DivisionAuthContext.tsx Division ãã°ã€ã³ç¶æ
+ æ°èŠã»ãã·ã§ã³éç¥
src/state/storage.ts AsyncStorage ãžã®ä¿å (æ¥ç¶æ
å ±ã®ã¿)
src/state/tuningStorage.ts ã«ãŒãã£ã³ã°æ¹éã®ä¿å
src/components/ui.tsx å
±éã® UI éšå
src/components/GitHubRepoPicker.tsx GitHub 飿ºãšãªããžã㪠/ ãã©ã³ãéžã³ (ã¯ã©ãŠãã®æ°èŠã»ã«ã³ãã³ã®ã¯ã©ãŠãå®è¡)
src/components/CloudProjectPicker.tsx ã¯ã©ãŠããšãŒãžã§ã³ãã®ãããžã§ã¯ãéžã³
src/theme.ts è²ã»äœçœã»è§äžž (ãã¹ã¯ãããã®æ¢å®ããŒã Orchestra Dark ãšåãè²)
src/screens/ åç»é¢ (ãã°ã€ã³ / æ¥ç¶å
äžèЧ / æåæ¥ç¶ / ãã£ãã / åããŒãž)
IDE åŽã¯ WebSocket ãæããªãã®ã§ãGET /api/state ã 3 ç§éé (ãšãŒãžã§ã³ãå®è¡äžã¯ 1.2 ç§ã
é£ç¶å€±æäžã¯ 8 ç§) ã§ããŒãªã³ã°ããŠããŸããã¬ã¹ãã³ã¹ã® revision ãå€ãããªãéã
state ãå·®ãæ¿ããªããããç¡é§ãªåæç»ã¯èµ·ããŸãããã¢ããªãããã¯ã°ã©ãŠã³ãã®éã¯
ããŒãªã³ã°ãæ¢ãã埩垰æã«å³åº§ã«åãçŽããŸãã
src/api ãš src/lib 㯠React Native ã«äŸåããªãæžãæ¹ãããŠãããjest (node ç°å¢) ã§
ãã®ãŸãŸãã¹ãã§ããŸããsrc/api/__tests__/integration.test.ts 㯠Node ã® HTTP ãµãŒãã§
IDE ã® API ãæš¡ããŠãURL ã®çµã¿ç«ãŠããã¬ã¹ãã³ã¹ã®åãåºããŸã§ãéãã§ç¢ºèªããŸãã
Division ã®ãã©ã®åœ¹å²ãã©ã®ã¢ãã«ã«æ¯ããããšããçµã¿åããããä»ã®ãŠãŒã¶ãŒãšå ±æã§ããŸãã
- é²èЧ: æ°ç / äººæ° / åãèŸŒã¿æ°ã§äžŠã¹æ¿ããã¿ã€ãã«ãã¢ãã«åã§æ€çŽ¢
- ããã: ã¿ããã§ ON/OFF (ãããæ°ã¯ DB åŽã®ããªã¬ã§éèšããã®ã§ãæ°ãçŽæ¥æžãæããããšã¯ã§ããŸãã)
- åã蟌ã¿: æ¢åãããžã§ã¯ãã«éãã / 眮ãæãã / æ°ãããããžã§ã¯ããšããŠäœã ã® 3 éã
- å ¬é: å ±æããŒãžå³äžã® ïŒããŸã㯠Division ããŒãžã®åãããžã§ã¯ãã«ããå ±æã¢ã€ã³ã³ãã
å ±æãããã®ã¯ 圹å²ãšã¢ãã«ã®çµã¿åããã»ã¿ã€ãã«ã»èª¬æã»è¡šç€ºåã ã ã§ããAPI ããŒãã³ãŒãã ã¯ãŒã¯ã¹ããŒã¹ã®äžèº«ã¯äžåå«ãŸããŸãããæçš¿ãç·šéã»åé€ã§ããã®ã¯æçš¿è æ¬äººã ãã§ã (Supabase ã® RLS ã§åŒ·å¶)ã
ããŒãã« (
AssignmentPost/AssignmentPostLike) ã®ããªã·ãŒã¯ Orchestra ãªããžããªã®supabase/migrations/20260920000000_assignment_post_social.sqlã«ãããŸããæªé©çšã®ç°å¢ã§ã¯ å ±æããŒãžãããã€ã°ã¬ãŒã·ã§ã³ãé©çšããŠãã ããããšè¡šç€ºããŸãã
ãã¹ã¯ãããã® Orchestra ã®ãã¯ã©ãŠããšãŒãžã§ã³ãããšåãæ©èœã§ã (Claude Code on the web ã®ãããªãã®)ã ãšãŒãžã§ã³ã㯠Division ã®ãµãŒããŒäžã§ãã»ãã·ã§ã³ããšã«çšæããã Daytona ã®ãµã³ãããã¯ã¹ã®äžã§åããŸãã ã¹ãããéããŠãäœæ¥ã¯ç¶ããããã€ã§ã (åæã«åãããã®ã¯ 1 ã¢ã«ãŠã³ã 10 åãŸã§) 䞊ã¹ãŠèµ°ãããããŸãã
- èµ·å: ã¯ã©ãŠãããŒãžå³äžã® ïŒ ãããæç€ºã»äžŠåæ° (1ã10)ã»å§ããå Žæãéžã³ãŸãã
äžŠåæ°ã 2 以äžã«ãããšãåãæç€ºã§å¥ã
ã®ãµã³ãããã¯ã¹ãç«ãŠãé¡åã®æ«å°Ÿã«
#1ã#Nãä»ããŸãã- Gitãªããžããª: éžãã ãªããžããªããµã³ãããã¯ã¹ã« clone ããŠããå§ããŸãã
- GitHub ãšé£æº (ãããã): ãGitHub ãšé£æºããæŒããšãã©ãŠã¶ã§ GitHub ã®èªå¯ããŒãžãéããŸããèš±å¯ã㊠ã¢ããªã«æ»ããšã飿ºãèªåã§ç¢ºèªãã (2 ç§ããšã»æå€§ 5 åãã¢ããªã«æ»ã£ãæç¹ã§ããã確èª)ã ãGitHub (@login) ãšé£æºããŸããããšåºãŸãã以åŸã¯ URL ãæããã«ãèªåã®ãªããžã㪠(owner / collaborator / organization ã®ãã®ãæè¿ push ããé ) ãæ€çŽ¢ããŠéžã³ããã©ã³ããéžã¶ã ãã§ã (æ¢å®ã®ãã©ã³ããåæå€)ã éå ¬éãªããžããªã䜿ããŸã: clone 㯠Division ã®ãµãŒããŒã飿ºããã¢ã«ãŠã³ãã®ããŒã¯ã³ã§è¡ãã ããŒã¯ã³ã¯ç«¯æ«ã«ã¯ä¿åãããŸãããååéžãã ãªããžããªãšãã©ã³ãã¯æ¬¡åãéžã°ããç¶æ ã«ãªããŸãã
- 飿ºã®è§£é€: æ°ããã»ãã·ã§ã³ã®ã·ãŒãã§ã飿ºäžã®ã¢ã«ãŠã³ã (@login) ã®æšªã®ãè§£é€ãããã GitHub åŽã§ Orchestra (Division) ã® OAuth ã¢ããªã®ã¢ã¯ã»ã¹ãåãæ¶ããå Žåããæ¬¡ã«äžèЧãéãããšãã« æªé£æºã«æ»ãã®ã§ãããäžåºŠé£æºããŠãã ããã
- URL ãçŽæ¥å
¥å: ãURL ãçŽæ¥å
¥åããããåŸæ¥ã©ãã
https://ã® URL ãšãã©ã³ããæå®ã§ããŸãã å ¬éãªããžããªã®ã»ãã飿ºäžãªã github.com ã® URL ã飿ºããã¢ã«ãŠã³ãã®æš©éã§ clone ããŸãã URL ã«ãŠãŒã¶ãŒåãããŒã¯ã³ã¯å ¥ããããŸããã - GitHub 飿ºã«ã¯ãDivision ãµãŒããŒã« GitHub OAuth ã¢ããªãèšå®ãããŠããå¿ èŠããããŸã (管çè ãèšå®)ã æªèšå®ã®ãµãŒããŒã§ã¯äžèЧã¯åºããURL ã®çŽæ¥å ¥åã ãã«ãªããŸã (ããµãŒããŒåŽã§ GitHub 飿ºãæªèšå®ããšè¡šç€º)ã
- 空ã®ãã©ã«ã: äœãç¡ããšããããäœããããšãã«äœ¿ããŸãã
- ãããžã§ã¯ã: Division ã®ãããžã§ã¯ããéžã¶ãšããšãŒãžã§ã³ãã¯ãã®ãããžã§ã¯ãã®ãã³ãŒããŒãã«å²ãåœãŠã
ã¢ãã«ã§åããŸã (
POST /api/cloud-sessionsã®projectId)ãäžèŠ§ã¯ PC ã«æ¥ç¶ããŠããã° PC ã® Orchestra ã® ãããžã§ã¯ã (PC ã§æå¹ãªãã®ãå é ãç·ã®ç¹)ãæªæ¥ç¶ãªããã¹ã¯ããããšåãã Supabase ã®ProjectããŒãã« (or=(ownerId.eq.<uid>,userId.eq.<uid>)ãæ°ããé ) ããã°ã€ã³äžã® JWT ã§èªã¿ãŸãããæå®ãªãããéžã¹ãŸãã ãããžã§ã¯ããæå®ããã»ãã·ã§ã³ã¯ãäžèЧãšè©³çްã«ãããžã§ã¯ãåãåºãŸãã - ã詳现ãã§ã¢ãã« (
provider/model) ãšé¡åãæå®ã§ããŸããã¢ãã«ãæå®ãããšãããžã§ã¯ãããåªå ãããŸãã
- Gitãªããžããª: éžãã ãªããžããªããµã³ãããã¯ã¹ã« clone ããŠããå§ããŸãã
- ç£èŠ: äžèЧã¯åããŠããã»ãã·ã§ã³ãããã° 4 ç§ãç¡ããã° 20 ç§ããšã«æŽæ°ããŸã (ã¢ããªãåé¢ã«ãããšãã ã)ã ã»ãã·ã§ã³ãéããšãæç€ºã»è¿çã»ããŒã«ã®å®è¡ (æŒããšåºå)ã»ç¶æ ã®å€åã»å®äºã®ãŸãšãã 2 ç§ããšã«è¿œããããŸãã åããŠããã»ãã·ã§ã³ãåŸ æ©äžã倱æã«ãªããšãããŒã«ã«éç¥ã§ãç¥ããããŸã (ã¢ããªã®èµ·åäžã®ã¿)ã
- 远å ã®æç€º / 忢 / ã¢ãŒã«ã€ã: äžã®å ¥åæ¬ããç¶ããæç€ºã§ããŸã (æ¢ãŸã£ãŠããã»ãã·ã§ã³ã¯åéããŸã)ã ã¢ãŒã«ã€ããããšãµã³ãããã¯ã¹ãåé€ããäžèЧããæ¶ããŸãã
- 倿Ž: 倿Žããããã¡ã€ã« (+/â ã®è¡æ°) ãšå·®åãèªããŸãã倿Žãæå ã®ã¯ãŒã¯ã¹ããŒã¹ã«åã蟌ãã®ã¯ PC ã® Orchestra ããè¡ããŸã (ã¢ãã€ã«ã«ã¯ã¯ãŒã¯ã¹ããŒã¹ãç¡ããããããã§ã¯èªãã ãã§ã)ã
- PC ã® Orchestra ããåã Division ã¢ã«ãŠã³ãã§èµ·åããã»ãã·ã§ã³ãäžèЧã«åºãã®ã§ãå€åºå ããæ§åãèŠãŠ ç¶ããæç€ºãããæ¢ãããã§ããŸãã
- æé: ãµãŒããŒãè¿ãã»ãã·ã§ã³ããšã®æé (
costUsd) ãäžèЧã®è¡ãšè©³çްã®èŠåºãã«$0.12ã®ããã«åºãã äžèЧã®äžã«è¡šç€ºäžã®ã»ãã·ã§ã³ã®åèšãåºããŸã (æŒããšã³ã¹ãã®ããŒãžãž)ãã³ã¹ãã®ããŒãžã®ãå©çšå±¥æŽãã«ã ãã¯ã©ãŠããšãŒãžã§ã³ããã®æ¬ããããæè¿ã®ã»ãã·ã§ã³ã®æéããŸãšããŠèŠãããŸãã - ã·ã§ãŒãã«ãã: ã¯ã©ãŠãããŒãžã®äžã®æ®µããããããžã§ã¯ãã(Division)ã»ãã³ã¹ããã»ãã«ã³ãã³ããéããŸã (ãæ»ããã§ã¯ã©ãŠãã«æ»ããŸã)ãã«ã³ãã³ãš Division ã®ãããžã§ã¯ã㯠PC ã®æ¥ç¶ãå¿ èŠãªã®ã§ãæªæ¥ç¶ã®ãšã㯠éµã®å°ã«ãªããPC ã«æ¥ç¶ãããšäœ¿ããŸãããšåºãŸãã
- ã«ã³ãã³ããå®è¡ (PC æ¥ç¶äž): ã«ã³ãã³ã®ã¿ã¹ã¯ã®è©³çްã«ãããã¯ã©ãŠãã§å®è¡ããããã¿ã¹ã¯ã®é¡åã»èª¬æã» æªå®äºã®ãã§ãã¯ãªã¹ããæç€ºã«ããŠã¯ã©ãŠããšãŒãžã§ã³ããèµ·åã§ããŸã (éãåã«æžãæãå¯)ãå§ããå Žæã¯ 空ã®ãã©ã«ããæ¢å®ã§ããGitHub ãªããžããªããéžã¶ãšååã¯ã©ãŠãã§éžãã ãªããžããªãéžã°ããç¶æ ã«ãªããŸãã PC ã§æå¹ãªãããžã§ã¯ãã 1 ã€ã ããªããããæ¢å®ã®ãããžã§ã¯ãã§ããäœæã§ãããšããŒã¹ãã«ãã¯ã©ãŠãã§éãããåºãŠã æŒããšã¯ã©ãŠãã®ããŒãžã§ãã®ã»ãã·ã§ã³ãéããŸããã«ãŒãã«ããã¯ã©ãŠããšãŒãžã§ã³ãã§å®è¡ãéå§ããŸãããã® ã³ã¡ã³ããæ®ããŸãã
èµ·åãšè¿œå ã®æç€ºã«ã¯ Orchestra Plus ãšã¯ã¬ãžãã ãå¿
èŠã§ã (è¶³ããªããã°ãã³ã¹ããâã管çããã確èªã§ããŸã)ã
ã¢ãã«ã®å©çšæéã¯ã»ãã·ã§ã³ããšã«ããããŸããDivision API (/api/cloud-sessions) ã«ã¯ãã»ãã® Division
çŽçµã®ç»é¢ãšåãããã°ã€ã³äžã® Supabase JWT ã Bearer ããŒã¯ã³ãšããŠéããŸããGitHub 飿º
(/api/github/status / connect / disconnect / repos / branches) ãåãã§ãã
ãã£ããã§ã©ã®ã¢ãã«ãéžã°ãããããã³ã¹ããšæ§èœã®æ¡ä»¶ã§èª¿æŽããŸãã
| ã»ã¯ã·ã§ã³ | å 容 |
|---|---|
| æ¹é | æäœæ§èœã¹ã³ã¢ (0ã100) / 1 åã®ã¢ãã«åŒã³åºãã®äžé (USD) / å²ãåœãŠå¯èœãªæå€§åºåããŒã¯ã³ãæ€èšŒã®æ¡ä»¶ã¯ IDE åŽã® AutoRouting.tsx ãšåã |
| èŠç©ãã | äŸé Œæã Jev ã«å€å®ããããªãŒããŒã»ã³ãŒããŒã»ã¬ãã¥ãŒã®æ³å®ã³ã¹ãã衚瀺 (å€å®ã®ãã³ã«æéãçºçããŸã)ãå ¥åããŒã¯ã³æ°ã¯äŸé Œæããèªåã§æŠç® |
| å©çšå±¥æŽ | ã¢ãã«å®è¡ããšã®å®æž¬ããŒã¯ã³æ°ãšæéãæ¥å¥ / 圹å²å¥ / ã¢ãã«å¥ã®éèšãèŠç©ãããšã®å·®ããªã¯ãšã¹ãåäœã®åèš |
| 管ç | ã¯ã¬ãžããæ®é« (è³Œå ¥åã»ãã©ã³ä»äžå)ããããŸã§ã®å©çšé¡ãèªåãã£ãŒãžèšå®ããã©ã³å€æŽã𿝿ã (Stripe) |
æ¹éã¯ãã®ç«¯æ«ã«ä¿åãããèŠç©ããã®æ¡ä»¶ãšããŠäœ¿ãããŸããIDE åŽã®
ãèšå® â Divisionãã® divisionAutoRouting ãšã¯å¥ç®¡çã§ãã
èŠç©ãããšå©çšå±¥æŽã¯ãDivisionãã°ã€ã³æã«çºè¡ããã Supabase JWT ã Bearer ããŒã¯ã³ãšããŠ
Division API (/api/routing/quote, /api/routing/history) ã«éããŸããAPIããŒã端æ«ã«ä¿åã»å©çšããããšã¯ãããŸããã
IDE åŽã®ãšã³ããã€ã³ãäžèŠ§ã¯ Orchestra ãªããžããªã®
docs/REMOTE-CONTROL.md ã«ãããŸãã
src/api/types.ts ã® PROTOCOL_VERSION ãš IDE åŽã®å€ãé£ãéããšãæ¥ç¶æã«èŠåãåºãŸãã
- èªèšŒã¯ããŒã¯ã³ 1 æ¬ (
X-Orchestra-Tokenããã) ã§ããããŒã¯ã³ãç¥ã£ãŠãã端æ«ã¯ IDE ãæäœã§ããŸãã - å¹³æ HTTP ãªã®ã§ãä¿¡é Œã§ãã LAN ã®äžã ãã§äœ¿ã£ãŠãã ãããå ¬è¡ Wi-Fi ã§ã¯äœ¿ããªãã§ãã ããã
- IDE åŽã®èšå®ã§ããšãŒãžã§ã³ããžã®æç€º / ã«ã³ãã³ç·šé / ãããžã§ã¯ãç·šé / ã³ãã³ãå®è¡ãã åå¥ã«ãªãã«ã§ããŸããé²èЧã ãèš±å¯ããéçšãå¯èœã§ãã
- ããŒã¯ã³ãæŒãããšã㯠IDE åŽã§
Remote Control: Regenerate Tokenãå®è¡ããŠãã ããã - Division ã¢ã«ãŠã³ãã®ãã°ã€ã³ã»ãã·ã§ã³ (Supabase JWT) ã¯
expo-secure-store(iOS Keychain / Android Keystore) ã«ä¿åãããæ¥ç¶æ å ± (Connection) ãšã¯å¥ã«ç®¡çãããŸãã - èªåæ€åºã¯ã¢ã«ãŠã³ãã«çŽã¥ã
RemoteSessionããŒãã«ã®è¡ (LAN ã¢ãã¬ã¹ãšããŒã¯ã³) ãèªãã ãã§ã æäœãã®ãã®ã¯åŒãç¶ã LAN çŽçµã§ãããã°ã¢ãŠããããšããã®ç«¯æ«ã®è¡ã¯ IDE åŽã§åé€ãããŸãã - å ±æããŒãžã«åºãæçš¿ã¯ãã°ã€ã³æžã¿ãŠãŒã¶ãŒå šå¡ãèªããŸããå ¬éããã®ã¯åœ¹å²ãšã¢ãã«ã®çµã¿åããã ãã§ã API ããŒãã³ãŒãã¯å«ããŸãããæçš¿ã®ç·šéã»åé€ã¯æçš¿è æ¬äººã«éãããŸãã
- Division APIã¯ãã°ã€ã³äžã®Supabase JWTã§èªèšŒããŸããJWTã®æéãåããå Žåã¯refresh tokenã§æŽæ°ããŸãã
- æ¯æãã¯ã¢ããªå ã§ã¯è¡ãããStripe ã®ç»é¢ããã©ãŠã¶ã§éããŸãã