ã¯ããã«
GitHub Apps ã䜿ããšãããã»ã¹ãèªååããããä»ã®ãã©ãããã©ãŒã ã GitHub ãšçµ±åãããã§ããŸãã 詳现ã«ã€ããŠã¯ããGitHub App ã®äœæã«ã€ããŠããåç §ããŠãã ããã
ãã®ã¯ã€ãã¯ã¹ã¿ãŒãã§ã¯ãGitHub App ããã°ããäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã ã¢ããªã«ã¢ã¯ã»ã¹æš©ãä»äžãããŠãããªããžããªã§ pull request ãéããããšãã¢ããªã¯ pull request ã«ã³ã¡ã³ãã远å ããŸãã
ãã®ã¯ã€ãã¯ã¹ã¿ãŒãã§ã¯ãããã«äœæ¥ãéå§ã§ããããã«ãäºåã«èšè¿°ãããã³ãŒãã䜿çšããŸãã ã³ãŒãã®èšè¿°ã«åœ¹ç«ã€è©³çްãªãã¥ãŒããªã¢ã«ã«ã€ããŠã¯ããWebhook ã€ãã³ãã«å¿çãã GitHub App ã®æ§ç¯ããåç §ããŠãã ããã
åææ¡ä»¶
ã³ã³ãã¥ãŒã¿ãŒãŸã㯠codespace ã§ã¯ãNode.js ã®ããŒãžã§ã³ 12 以äžã䜿çšããå¿ èŠããããŸãã 詳ããã¯ãNode.js ã®ããŒãžãåç §ããŠãã ããã
æé 1: ã¢ã㪠ã³ãŒããè€è£œãã
ããã«éå§ã§ããããã«ã䜿çšã§ããã³ãŒããèšè¿°ããŸããã èªåã§ã³ãŒããèšè¿°ããæ¹æ³ã«ã€ããŠã¯ããWebhook ã€ãã³ãã«å¿çãã GitHub App ã®æ§ç¯ããåç §ããŠãã ããã
- github/github-app-js-sample ãªããžããªãè€è£œããŸãã 詳ããã¯ãããªããžããªãã¯ããŒã³ããããã芧ãã ããã ããŒã«ã« ã¯ããŒã³ãŸã㯠GitHub Codespaces ã䜿çšã§ããŸãã
- ã¿ãŒããã« ãŠã£ã³ããŠã§ãè€è£œãæ ŒçŽãããŠãããã£ã¬ã¯ããªã«ç§»åããŸãã
npm install
ãå®è¡ããŠäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã
æé 2: Webhook ãããã· URL ãååŸãã
ã¢ããªãããŒã«ã«ã§éçºããã«ã¯ãWebhook ãããã· URL ã䜿ã£ãŠãGitHub ããã䜿ãã®ã³ã³ãã¥ãŒã¿ãŒãŸã㯠codespace ã« Webhook ã転éã§ããŸãã ãã®ã¯ã€ãã¯ã¹ã¿ãŒãã§ã¯ãSmee.io ã䜿ã£ãŠ Webhook ãããã· URL ãæå®ããWebhook ã転éããŸãã
- ãã©ãŠã¶ãŒã§ https://smee.io/ ã«ã¢ã¯ã»ã¹ããŸãã
- [Start a new channel] (æ°ãããã£ãã«ã®éå§) ãã¯ãªãã¯ããŸãã
- [Webhook Proxy URL] (Webhook ãããã· URL) ã®äžã«ããå®å šãª URL ãã³ããŒããŸãã ãã® URL ã¯ãåŸã®æé ã§äœ¿çšããŸãã
æé 3: GitHub App ãç»é²ãã
æ¬¡ã®æé ã§ã¯ããã®ã¯ã€ãã¯ã¹ã¿ãŒãã«å¿ èŠãªã¢ããªèšå®ãæ§æããæ¹æ³ã«ã€ããŠèª¬æããŸãã èšå®ã®è©³çްã«ã€ããŠã¯ããGitHub App ã®ç»é²ããåç §ããŠãã ããã
- GitHub ã®ä»»æã®ããŒãžã®å³äžé ã«ãããèªåã®ãããã¡ã€ã«åçãã¯ãªãã¯ããŸãã
- ã¢ã«ãŠã³ãèšå®ã«ã¢ã¯ã»ã¹ããŠãã ããã
- å人çšã¢ã«ãŠã³ããææããã¢ããªã®å Žåã¯ã[èšå®] ãã¯ãªãã¯ããŸãã
- çµç¹ãææããã¢ããªã®å Žå:
- [èªåã®çµç¹] ãã¯ãªãã¯ããŸãã
- çµç¹ã®å³åŽã«ãã [èšå®] ãã¯ãªãã¯ããŸãã
- å·ŠåŽã®ãµã€ãããŒã§ [ éçºè èšå®] ãã¯ãªãã¯ããŸãã
- å·ŠåŽã®ãµã€ãããŒã§ã [GitHub Apps] ãã¯ãªãã¯ããŸãã
- [æ°ãã GitHub App] ãã¯ãªãã¯ããŸãã
- [GitHub App å] ã«ãã¢ããªã®ååãå
¥åããŸãã ããšãã°ã
USERNAME-quickstart-app
ã§ããUSERNAME
ã¯ãèªèº«ã® GitHub ãŠãŒã¶ãŒåã§ãã - [ããŒã ããŒãžã® URL] ã«ã
https://github.com/github/github-app-js-sample#readme
ããšå ¥åããŸãã - ãã®ã¯ã€ãã¯ã¹ã¿ãŒãã§ã¯ãããŠãŒã¶ãŒã®ç¹å®ãšèªå¯ããšãã€ã³ã¹ããŒã«åŸãã®ã»ã¯ã·ã§ã³ã¯ã¹ãããããŸãã ãããã®èšå®ã®è©³çްã«ã€ããŠã¯ããGitHub App ã®ç»é²ããåç §ããŠãã ããã
- [Webhook] ã®äžã§ [ã¢ã¯ãã£ã] ãéžæãããŠããããšã確èªããŸãã
- [Webhook URL] ã®äžã«ãåã® Webhook ãããã· URL ãå ¥åããŸãã 詳现ã«ã€ããŠã¯ããæé 2: Webhook ãããã· URL ãååŸããããåç §ããŠãã ããã
- [Webhook ã·ãŒã¯ã¬ãã] ã«ãã©ã³ãã ãªæååãå ¥åããŸãã ãã®æååã¯åŸã§äœ¿çšããŸãã
- [ãªããžããªã®ã¢ã¯ã»ã¹èš±å¯] ã§ã[pull request] ã®æšªã«ãã [èªã¿åãããã³æžã蟌ã¿] ãéžæããŸãã
- [ã€ãã³ãã®ãµãã¹ã¯ã©ã€ã] ã§ã [pull request] ãéžæããŸãã
- [ãã® GitHub App ãã€ã³ã¹ããŒã«ã§ããå Žæ] ã§ã [ãã®ã¢ã«ãŠã³ãã®ã¿] ãéžæããŸãã
- [GitHub App ãäœæãã] ãã¯ãªãã¯ããŸãã
æé 4: è奿 å ±ãšè³æ Œæ å ±ãæ ŒçŽãã
ãã®ã¯ã€ãã¯ã¹ã¿ãŒãã§ã¯ãã¢ããªã®è³æ Œæ
å ±ãšè奿
å ±ãç°å¢å€æ°ãšã㊠.env
ãã¡ã€ã«ã«æ ŒçŽããŸãã ã¢ããªããããã€ãããšãã«ãè³æ Œæ
å ±ã®ä¿åæ¹æ³ã倿Žããããšããå§ãããŸãã 詳现ã«ã€ããŠã¯ããã¢ããªã®é
眮ããåç
§ããŠãã ããã
è³æ Œæ å ±ãããŒã«ã«ã«æ ŒçŽããããã以äžã®æé ãå®è¡ããåã«ããèªåãã»ãã¥ãªãã£ã§ä¿è·ãããã³ã³ãã¥ãŒã¿ãŒã§äœæ¥ããŠããããšã確èªããŠãã ããã
.env
ãã¡ã€ã«ãäœæããŸãã
è€è£œããããªããžããªã«ã¯ã.gitignore
ãã¡ã€ã«ã« .env
ãå«ãŸããŠããŸãã ããããããšã§ãã¢ããªã®è³æ Œæ
å ±ã誀ã£ãŠã³ãããããã®ãé²ãããšãã§ããŸãã .gitignore
ãã¡ã€ã«ã®è©³çްã«ã€ããŠã¯ãããã¡ã€ã«ãç¡èŠããããåç
§ããŠãã ããã
-
github/github-app-js-sample ã®è€è£œãæ ŒçŽãããŠãããã£ã¬ã¯ããªã«ç§»åããŸãã
-
ãã®ãã£ã¬ã¯ããªã®æäžäœã¬ãã«ã«
.env
ãšããååã®ãã¡ã€ã«ãäœæããŸãã -
次ã®å 容ã
.env
ãã¡ã€ã«ã«è¿œå ããŸãã å€ã¯åŸã®æé ã§æŽæ°ããŸããText APP_ID="YOUR_APP_ID" WEBHOOK_SECRET="YOUR_WEBHOOK_SECRET" PRIVATE_KEY_PATH="YOUR_PRIVATE_KEY_PATH"
APP_ID="YOUR_APP_ID" WEBHOOK_SECRET="YOUR_WEBHOOK_SECRET" PRIVATE_KEY_PATH="YOUR_PRIVATE_KEY_PATH"
ã¢ããªèšå®ã«ç§»åãã
ã¢ããªã®äœæåŸã«ã¢ããªèšå®ããç§»åããå Žåã¯ãã¢ããªã®èšå®ããŒãžã«ç§»åããŸãã
- GitHub ã®ä»»æã®ããŒãžã®å³äžé ã«ãããèªåã®ãããã¡ã€ã«åçãã¯ãªãã¯ããŸãã
- ã¢ã«ãŠã³ãèšå®ã«ã¢ã¯ã»ã¹ããŠãã ããã
- å人çšã¢ã«ãŠã³ããææããã¢ããªã®å Žåã¯ã[èšå®] ãã¯ãªãã¯ããŸãã
- çµç¹ãææããã¢ããªã®å Žå:
- [èªåã®çµç¹] ãã¯ãªãã¯ããŸãã
- çµç¹ã®å³åŽã«ãã [èšå®] ãã¯ãªãã¯ããŸãã
- å·ŠåŽã®ãµã€ãããŒã§ [ éçºè èšå®] ãã¯ãªãã¯ããŸãã
- å·ŠåŽã®ãµã€ãããŒã§ã [GitHub Apps] ãã¯ãªãã¯ããŸãã
- ã¢ããªã®ååã®æšªã«ãã [ç·šé] ãã¯ãªãã¯ããŸãã
ã¢ããªã®è³æ Œæ å ±ãšè奿 å ±ãååŸãã
- ã¢ããªã®èšå®ããŒãžã§ã[ã¢ã㪠ID] ã®æšªã«ããèªåã®ã¢ããªã®ã¢ã㪠ID ã確èªããŸãã
.env
ãã¡ã€ã«ã§ãYOUR_APP_ID
ãèªåã®ã¢ããªã®ã¢ã㪠ID ã«çœ®ãæããŸãã- ã¢ããªã®èšå®ããŒãžã® [ç§å¯ããŒ] ã§ã [ç§å¯ããŒã®çæ] ãã¯ãªãã¯ããŸãã ãæå ã®ã³ã³ãã¥ãŒã¿ã«ããŠã³ããŒãããã PEM ãã©ãŒãããã®ç§å¯éµã衚瀺ãããŸãã 詳ããã¯ããGitHub Apps ã®ç§å¯ããŒã®ç®¡çããã芧ãã ããã
- codespace ã䜿çšããŠããå Žåã¯ãããŠã³ããŒããã PEM ãã¡ã€ã«ã codespace ã«ç§»åããŠãcodespace ããã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
.env
ãã¡ã€ã«ã§ãYOUR_PRIVATE_KEY_PATH
ãç§å¯ããŒãžã®å®å šãªãã¹ (.pem
æ¡åŒµåãå«ã) ã«çœ®ãæããŸãã.env
ãã¡ã€ã«ã§ãYOUR_WEBHOOK_SECRET
ãã¢ããªã® Webhook ã·ãŒã¯ã¬ããã«çœ®ãæããŸãã Webhook ã·ãŒã¯ã¬ãããå¿ããå Žåã¯ã[Webhook ã·ãŒã¯ã¬ãã (çç¥å¯èœ)] ã®äžã® [ã·ãŒã¯ã¬ããã®å€æŽ] ãã¯ãªãã¯ããŸãã æ°ããã·ãŒã¯ã¬ãããå ¥åãã [倿Žã®ä¿å] ãã¯ãªãã¯ããŸãã
æé 5: ã¢ããªãã€ã³ã¹ããŒã«ãã
ã¢ããªã§ãªããžããªã® pull request ã«ã³ã¡ã³ããæ®ãã«ã¯ããªããžããªãææããã¢ã«ãŠã³ãã§ã¢ããªãã€ã³ã¹ããŒã«ãããã®ãªããžããªãžã®ã¢ã¯ã»ã¹èš±å¯ãä»äžããå¿ èŠããããŸãã ã¢ããªã¯ãã©ã€ããŒãã§ãããããã¢ããªãææããã¢ã«ãŠã³ãã§ã®ã¿ã€ã³ã¹ããŒã«ã§ããŸãã
- äœæããã¢ããªãææããã¢ã«ãŠã³ãã§ãã¢ããªãã€ã³ã¹ããŒã«ããæ°ãããªããžããªãäœæããŸãã 詳ããã¯ããæ°ãããªããžããªã®äœæããã芧ãã ããã
- ã¢ããªã®äœæåŸã«ã¢ããªèšå®ããç§»åããå Žåã¯ãã¢ããªã®èšå®ããŒãžã«ç§»åããŸãã 詳现ã«ã€ããŠã¯ããã¢ããªèšå®ã«ç§»åããããåç §ããŠãã ããã
- [ãããªã㯠ããŒãž] ãã¯ãªãã¯ããŸãã
- [ã€ã³ã¹ããŒã«] ãã¯ãªãã¯ããŸãã
- [éžæãããªããžããªã®ã¿] ãéžæããŸãã
- [ãªããžããªã®éžæ] ããããããŠã³ ã¡ãã¥ãŒãéžæãããã®ã»ã¯ã·ã§ã³ã®ã¯ããã«éžæãããªããžããªãã¯ãªãã¯ããŸãã
- [ã€ã³ã¹ããŒã«] ãã¯ãªãã¯ããŸãã
æé 6: ãµãŒããŒãèµ·åãã
ãã¹ãã®ããã«ããèªèº«ã®ã³ã³ãã¥ãŒã¿ãŒãŸã㯠codespace ããµãŒããŒãšããŠäœ¿ããŸãã ã¢ããªã¯ããµãŒããŒãå®è¡äžã®ãšãã«ã®ã¿ã¢ã¯ãã£ãã§ãã
-
ã¿ãŒããã« ãŠã£ã³ããŠã§ãgithub/github-app-js-sample ã®è€è£œãæ ŒçŽãããŠãããã£ã¬ã¯ããªã«ç§»åããŸãã
-
Smee.io ãã転éããã Webhook ãåä¿¡ããã«ã¯ã
npx smee -u WEBHOOK_PROXY_URL -t http://localhost:3000/api/webhook
ãå®è¡ããŸããWEBHOOK_PROXY_URL
ããWebhook ãããã· URL ã«çœ®ãæããŸãã URL ãå¿ããå Žåã¯ãã¢ããªã®èšå®ããŒãžã® [Webhook URL] ãã£ãŒã«ãã§ç¢ºèªã§ããŸããæ¬¡ã®ãããªåºåã衚瀺ãããŸãã
WEBHOOK_PROXY_URL
㯠Webhook ãããã· URL ã§ããForwarding WEBHOOK_PROXY_URL to http://localhost:3000/api/webhook Connected WEBHOOK_PROXY_URL
-
2 ã€ç®ã®ã¿ãŒããã« ãŠã£ã³ããŠã§ãgithub/github-app-js-sample ã®è€è£œãæ ŒçŽãããŠãããã£ã¬ã¯ããªã«ç§»åããŸãã
-
npm run server
ãå®è¡ããŸãã ã¿ãŒããã«ã«Server is listening for events at: http://localhost:3000/api/webhook
ãšè¡šç€ºãããã¯ãã§ãã
æé 7: ã¢ããªããã¹ããã
ããã§ãµãŒããŒãå®è¡ããã転éããã Webhook ã€ãã³ããåä¿¡ããããã«ãªã£ãã®ã§ãpull request ãéããŠã¢ããªããã¹ãããŸãã
- ãæé 5: ã¢ããªãã€ã³ã¹ããŒã«ãããã§äœæãããªããžããªã§ pull request ãéããŸãã 詳ããã¯ããpull request ã®äœæããã芧ãã ããã
- smee.io ã® Webhook ãããã· URL ã«ç§»åããŸãã
pull_request
ã€ãã³ãã衚瀺ãããŸãã ããã¯ãpull request ãäœæãããšãã« GitHub ããæ£åžžã« pull request ã€ãã³ããéä¿¡ãããããšã瀺ããŠããŸãã npm run server
ãå®è¡ããã¿ãŒããã«ã«ã¯ã"#1 ã® pull request ã€ãã³ããåä¿¡ããŸãã" ã®ãããªã¡ãã»ãŒãžã衚瀺ãããŸãã#
ã®åŸã®æŽæ°ã¯ãéãã pull request ã®çªå·ã§ãã- pull request ã®ã¿ã€ã ã©ã€ã³ã«ãã¢ããªããã®ã³ã¡ã³ãã衚瀺ãããŸãã ã³ã¡ã³ãã§ã¯ãè€è£œããããªããžããªå
ã®
message.md
ãã¡ã€ã«ã®å 容ã䜿çšãããŸãã - äž¡æ¹ã®ã¿ãŒããã« ãŠã£ã³ããŠã§ãCtrl+C ããŒãæŒããŠãµãŒããŒã忢ãã転éããã Webhook ã®ãªãã¹ã³ã忢ããŸãã
æ¬¡ã®æé
ããã§ã¢ããªãã§ããã®ã§ãã¢ããªã®ã³ãŒããæ¡åŒµããã¢ããªããããã€ããã¢ããªãå ¬éããããšãã§ããŸãã
ã¢ããªã®ã³ãŒãã倿Žãã
github/github-app-js-sample ãªããžããªããã©ãŒã¯ããããŸããŸãª Webhook ã€ãã³ãã«å¿çããããããŸããŸãª API èŠæ±ãè¡ãããã«ã³ãŒãã倿ŽããŸãã ã³ãŒãã®è©³çްã«ã€ããŠã¯ããWebhook ã€ãã³ãã«å¿çãã GitHub App ã®æ§ç¯ããåç §ããŠãã ããã
è¡ããã API èŠæ±ãåä¿¡ããã Webhook ã€ãã³ãã®ããã«ã¢ããªã«è¿œå ã®ã¢ã¯ã»ã¹èš±å¯ãå¿ èŠã«ãªãå Žåã¯ãå¿ããã«ã¢ããªã®ã¢ã¯ã»ã¹èš±å¯ãæŽæ°ããŠãã ããã 詳ããã¯ããGitHub ã¢ããªã®ã¢ã¯ã»ã¹èš±å¯ãéžæããããã芧ãã ããã
ã¢ããªã®ãããã€
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãã³ã³ãã¥ãŒã¿ãŒãŸã㯠codespace ããµãŒããŒãšããŠäœ¿çšããŸããã ã¢ããªãéçšç°å¢ã§äœ¿çšããæºåãã§ããããã¢ããªãå°çšãµãŒããŒã«ãããã€ããå¿ èŠããããŸãã ããšãã°ãAzure App Service ã䜿çšã§ããŸãã
ãµãŒããŒãçšæããããã¢ããªã®èšå®ã§ Webhook ã® URL ãæŽæ°ããŸãã éçšç°å¢ã§ã¯ Webhook ã転éããããã« Smee.io ã䜿çšããªãã§ãã ããã
ãŸããã³ãŒãå
ã® port
宿°ãš host
宿°ãæŽæ°ããå¿
èŠããããŸãã 詳ããã¯ããWebhook ã€ãã³ãã«å¿çãã GitHub App ã®æ§ç¯ããã芧ãã ããã
ã¢ããªã®ç§å¯ããŒã Webhook ã·ãŒã¯ã¬ããã¯çµ¶å¯Ÿã«å
¬éããªãã§ãã ããã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãgitignore ã® .env
ãã¡ã€ã«ã«ã¢ããªã®è³æ Œæ
å ±ãæ ŒçŽããŸããã ã¢ããªããããã€ããéã«ãè³æ Œæ
å ±ãä¿åããå®å
šãªæ¹æ³ãéžã³ãããã«å¿ããŠå€ãååŸããããã«ã³ãŒããæŽæ°ããå¿
èŠããããŸãã ããšãã°ãã¢ããªããããã€ãããµãŒããŒäžã®ç°å¢å€æ°ã«è³æ Œæ
å ±ãä¿åã§ããŸãã Azure Key Vault ãªã©ã®ã·ãŒã¯ã¬ãã管çãµãŒãã¹ã䜿ãããšãã§ããŸãã
ã¢ããªãå ±æãã
ã¢ããªãä»ã®ãŠãŒã¶ãŒãçµç¹ãšå ±æãããå Žåã¯ãã¢ããªãå ¬éããŸãã 詳ããã¯ããGitHub Appããããªãã¯ãŸãã¯ãã©ã€ããŒãã«ããããã芧ãã ããã
ãã¹ã ãã©ã¯ãã£ã¹ã«åŸã
GitHub App ã«é¢ãããã¹ã ãã©ã¯ãã£ã¹ã«åŸãããã«ããå¿ èŠããããŸãã 詳ããã¯ããGitHub App ãäœæããããã®ãã¹ã ãã©ã¯ãã£ã¹ããã芧ãã ããã