OAuth apps ãã GitHub Apps ã«ç§»è¡ããå©ç¹
GitHub Apps ã¯ãGitHub ãšã®çµ±åæ¹æ³ãšããŠæšå¥šãããŠããŸãã GitHub Apps ã«ã¯ãOAuth apps ã«æ¯ã¹ãŠå€ãã®å©ç¹ããããŸãã
- ãã现ããã¢ã¯ã»ã¹èš±å¯ããªããžã㪠ã¢ã¯ã»ã¹ã®éžæè¢ãæå¹æéã®çãããŒã¯ã³ãªã©ã®åŒ·åãããã»ãã¥ãªãã£æ©èœ
- ãŠãŒã¶ãŒããç¬ç«ããŠããŸãã¯ãŠãŒã¶ãŒã«ä»£ãã£ãŠåäœã§ããããš
- ã¹ã±ãŒã©ãã«ãªã¬ãŒãå¶é
- çµã¿èŸŒã¿ã® Webhook
詳ããã¯ããGitHub App ã®äœæã«ã€ããŠããã芧ãã ããã
OAuth app ãã GitHub App ãžã®åãæ¿ã
æ¬¡ã®æé ã§ã¯ãOAuth app ãã GitHub App ã«ç§»è¡ããæ¹æ³ã®æŠèŠã瀺ããŸãã å ·äœçãªæé ã¯ãã¢ããªã«ãã£ãŠç°ãªããŸãã
1. OAuth app ã確èªãã
OAuth app ã®ã³ãŒãã確èªãçŽããŠãã ããã OAuth app ãè¡ã API èŠæ±ã¯ãGitHub App ã«å¯ŸããŠéžã¶ã¢ã¯ã»ã¹èš±å¯ã決å®ããã®ã«åœ¹ç«ã¡ãŸãã
ããã«ãOAuth apps ã§ã¯äœ¿çšã§ããªã REST API ãšã³ããã€ã³ããããã€ããããŸãã ãGitHub App ã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ã§äœ¿çšã§ãããšã³ããã€ã³ãããåç §ããŠã䜿çšãã REST ãšã³ããã€ã³ãã GitHub Apps ã§äœ¿çšå¯èœã§ããããšã確èªããŸãã
2. GitHub App ãç»é²ãã
æ°ãã GitHub App ãç»é²ããŸãã 詳ããã¯ããGitHub App ã®ç»é²ããã芧ãã ããã
OAuth app ãšæ¯èŒãããšãGitHub App ã®èšå®ã¯ãã现ããå¶åŸ¡ã§ããŸãã ããã€ãã®éèŠãªè¿œå ã¯æ¬¡ã®ãšããã§ãã
-
åžžã«ãŠãŒã¶ãŒã®ä»£çãšããŠåäœãã OAuth app ãšã¯ç°ãªããGitHub App ã¯ãããèªäœãšããŠããŸãã¯ãŠãŒã¶ãŒã®ä»£çãšããŠã¢ã¯ã·ã§ã³ãå®è¡ããããã«èšå®ã§ããŸãã æ°ãã GitHub App ã§ãŠãŒã¶ãŒã®ä»£çãšããŠã®ã¢ã¯ã·ã§ã³ãå®è¡ããªãå Žåã¯ã"ãŠãŒã¶ãŒã®èå¥ãšæ¿èª" ã«é¢ããèšå®ãã¹ãããã§ããŸãã 詳ããã¯ããGitHub ã¢ããªã§ã®èªèšŒã«ã€ããŠããã芧ãã ããã
-
Webhook ã䜿çšãããšãç¹å®ã®ã€ãã³ããçºçãããšãã« GitHub App ã«éç¥ã§ããŸãã ãªããžããªãŸãã¯çµç¹ããšã« API ã䜿ã£ãŠæ§æããå¿ èŠããã OAuth apps ã® Webhook ãšã¯ç°ãªããGitHub Apps ã«ã¯ Webhook ãçµã¿èŸŒãŸããŠããŸãã GitHub App ãç»é²ãããšãã«ãåä¿¡ãã Webhook ã€ãã³ããéžã¶ããšãã§ããŸãã ããã«ãOAuth app ãçŸåšããŒãªã³ã°ã䜿çšããŠã€ãã³ããçºçãããã©ããã倿ããŠããå Žåã¯ã代ããã« Webhook ãžã®ãµãã¹ã¯ã©ã€ãã«ãã£ãŠ GitHub App ãã¬ãŒãå¶éå ã«ç¶æããããšãæ€èšããŠãã ããã 詳ããã¯ããGitHub Apps ã§ã® Webhook ã®äœ¿çšããã芧ãã ããã
-
OAuth app ã®å ŽåããŠãŒã¶ãŒãã¢ããªãæ¿èªãããšãã«ã¹ã³ãŒããèŠæ±ããŸãã GitHub App ã§ã¯ãã¢ããªèšå®ã§ã¢ã¯ã»ã¹èš±å¯ãæå®ããŸãã ãããã®ã¢ã¯ã»ã¹èš±å¯ã¯ã¹ã³ãŒãããã现ãããã¢ããªã«å¿ èŠãªã¢ã¯ã»ã¹èš±å¯ã®ã¿ãéžã¶ããšãã§ããŸãã ããã«ããããã®ã¢ã¯ã»ã¹èš±å¯ã¯ REST API ãšã³ããã€ã³ããš Webhook ã€ãã³ãã«ããããããŠãããããç¹å®ã® REST API ãšã³ããã€ã³ãã«ã¢ã¯ã»ã¹ããããç¹å®ã® Webhook ã«ãµãã¹ã¯ã©ã€ããããããããã« GitHub App ã«å¿ èŠãªã¢ã¯ã»ã¹èš±å¯ãç°¡åã«å€æã§ããŸãã çŸåšãGraphQL èŠæ±ã«é¢ããã¢ã¯ã»ã¹èš±å¯ã¯ææžåãããŠããŸããã 詳ããã¯ããGitHub ã¢ããªã®ã¢ã¯ã»ã¹èš±å¯ãéžæããããã芧ãã ããã
3. ã¢ããªã®ã³ãŒãã倿Žãã
GitHub App ãç»é²ãããã以åã® OAuth app ã®ã³ãŒãããæ°ãã GitHub App ã§åäœããããã«èª¿æŽããŸãã
èªèšŒãæŽæ°ãã
GitHub App ã® API èªèšŒãåŠçããããã«ã¢ããªã®ã³ãŒããæŽæ°ããå¿ èŠããããŸãã GitHub App ã¯ã3 ã€ã®æ¹æ³ã§èªèšŒã§ããŸãã
- ã¢ããªèªäœãšã㊠(GitHub App ç»é²ã«é¢ãã詳现ãååŸãŸãã¯å€æŽããããã€ã³ã¹ããŒã« ã¢ã¯ã»ã¹ ããŒã¯ã³ãäœæããããããã)ã 詳ããã¯ããGitHub AppãšããŠã®èªèšŒããã芧ãã ããã
- ã¢ããªèªäœã®ä»£çãšããŠã¢ã¯ã·ã§ã³ãå®è¡ããããã«ãã¢ããªã®ã€ã³ã¹ããŒã«ãšããŠã 詳ããã¯ããGitHub App ã€ã³ã¹ããŒã«ãšããŠã®èªèšŒããã芧ãã ããã
- ã¢ã¯ã·ã§ã³ãåž°å±ãããŠãŒã¶ãŒã瀺ãããã«ããŠãŒã¶ãŒã®ä»£çãšããŠã 詳ããã¯ãããŠãŒã¶ãŒã«ä»£ãã£ãŠ GitHub ã¢ããªã§èªèšŒããããã芧ãã ããã
GitHub ã®å
¬åŒãª Octokit.js ã©ã€ãã©ãªã䜿çšããŠããå Žåã¯ãçµã¿èŸŒã¿ã® App
ãªããžã§ã¯ãã䜿çšããŠèªèšŒã§ããŸãã äŸã«ã€ããŠã¯ããREST API ãš JavaScript ã䜿çšããã¹ã¯ãªããããšãWebhook ã€ãã³ãã«å¿çãã GitHub App ã®æ§ç¯ããåç
§ããŠãã ããã
ã¬ãŒãå¶éã確èªãã
GitHub Apps ãš OAuth apps ã®ã¬ãŒãå¶éã®éãã確èªããŸãã GitHub Apps ã§ã¯ã¬ãŒãå¶éã«å¯ŸããŠã¹ã©ã€ãã£ã³ã° ã«ãŒã«ã䜿ããŸããããã¯çµç¹ã®ãªããžããªæ°ãšãŠãŒã¶ãŒæ°ã«åºã¥ããŠå¢ããããšãã§ããŸãã 詳ããã¯ããRate limits for GitHub Apps (GitHub ã¢ããªã®ã¬ãŒãå¶é)ããã芧ãã ããã
å¯èœã§ããã°ãæ¡ä»¶ä»ãã®èŠæ±ã䜿çšããããŒãªã³ã°ã§ã¯ãªã Webhook ãžã®ãµãã¹ã¯ã©ã€ãã«ãã£ãŠã¬ãŒãå¶éå ã«çãŸãããã«ããããšãæ€èšããŠãã ããã æ¡ä»¶ä»ãã®èŠæ±ã®è©³çްã«ã€ããŠã¯ããREST API ã䜿çšããããã®ãã¹ã ãã©ã¯ãã£ã¹ããåç §ããŠãã ããã GitHub App ã§ã® Webhook ã®äœ¿çšã®è©³çްã«ã€ããŠã¯ããGitHub Apps ã§ã® Webhook ã®äœ¿çšããšãWebhook ã€ãã³ãã«å¿çãã GitHub App ã®æ§ç¯ããåç §ããŠãã ããã
ã³ãŒãããã¹ããã
æ°ãã GitHub App ããã¹ãããŠãã³ãŒããæ³å®ã©ããã«åäœããããšã確èªããŸãã
4. æ°ãã GitHub App ãå ¬éãã
ä»ã®ã¢ã«ãŠã³ãã§æ°ãã GitHub App ã䜿çšã§ããããã«ããå Žåã¯ãã¢ããªããããªãã¯ã§ããããšã確èªããŸããGitHub App ãèŠã€ããããããã«ã¯ãã¢ããªã GitHub Marketplace ã«æ²èŒããŸãã 詳现ã«ã€ããŠã¯ããã¢ããªã® GitHub Marketplace ã«ã€ããŠããšãGitHub Appããããªãã¯ãŸãã¯ãã©ã€ããŒãã«ããããåç §ããŠãã ããã
5. ãŠãŒã¶ãŒã«ç§»è¡ãæç€ºãã
æ°ãã GitHub App ã®æºåãã§ãããã以åã® OAuth app ã®ãŠãŒã¶ãŒã«æ°ãã GitHub App ãžã®ç§»è¡ãæç€ºããŸãã ãŠãŒã¶ãŒãèªåçã«ç§»è¡ããæ¹æ³ã¯ãããŸããã åãŠãŒã¶ãŒã¯ãèªåã§ GitHub App ã®ã€ã³ã¹ããŒã«ãæ¿èªããŸãã¯ãã®äž¡æ¹ãè¡ãå¿ èŠããããŸãã
ã¢ããªææè ã¯ãæ°ãã GitHub App ã®ã€ã³ã¹ããŒã«ãæ¿èªãè¡ãããšãšã以åã® OAuth app ã«å¯Ÿããæ¿èªãåãæ¶ãããšããŠãŒã¶ãŒã«ä¿ãè¡ååèµ·ãçµã¿èŸŒãå¿ èŠããããŸãã ããã¥ã¡ã³ããŸãã¯ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãæŽæ°ããå¿ èŠããããŸãã
GitHub App ã®ã€ã³ã¹ããŒã«ããŠãŒã¶ãŒã«æ±ãã
GitHub App ãããèªäœã®ä»£çãšã㊠API èŠæ±ã Organization ãŸãã¯ãªããžã㪠ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãè¡ãããã«ããå ŽåããŠãŒã¶ãŒã¯ GitHub App ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ãŠãŒã¶ãŒã¯èªåã®ã¢ã«ãŠã³ããŸã㯠Organization ã« GitHub App ãã€ã³ã¹ããŒã«ãããšãã«ãã¢ããªãã¢ã¯ã»ã¹ã§ãããªããžããªãéžã³ãã¢ããªãèŠæ±ãã Organization ãšãªããžããªã®ã¢ã¯ã»ã¹èš±å¯ãä»äžããŸãã
ãŠãŒã¶ãŒã GitHub App ãã€ã³ã¹ããŒã«ã§ããããã«ãã¢ããªã® Web ããŒãžãžã®ãªã³ã¯ã远å ã§ããŸãããŠãŒã¶ãŒã¯ãããã¯ãªãã¯ããŠãGitHub App ãã€ã³ã¹ããŒã«ã§ããŸãã ã€ã³ã¹ããŒã« URL ã®åœ¢åŒã¯ https://github.com/apps/YOUR_APP_NAME/installations/new
ã§ãã YOUR_APP_NAME
ããGitHub App ã®ã¹ã©ãã°åã«çœ®ãæããŸãããã®ååã¯ãGitHub App ã®èšå®ããŒãžã® [ãããªã㯠ãªã³ã¯] ãã£ãŒã«ãã«ãããŸãã
OAuth app ã§ã¢ã¯ã»ã¹ããŠãããªããžããªãäºåã«éžã¶ã«ã¯ãã€ã³ã¹ããŒã« URL ã« /permissions
ãšã¯ãšãª ãã©ã¡ãŒã¿ãŒã远å ã§ããŸãã ããã«ãããŠãŒã¶ãŒã¯ãOAuth app ã§æ¢ã«ã¢ã¯ã»ã¹ã§ããŠãããªããžããªãžã®ã¢ã¯ã»ã¹æš©ã GitHub App ã«ä»äžã§ããŸãã ã¯ãšãª ãã©ã¡ãŒã¿ãŒã¯æ¬¡ã®ãšããã§ãã
suggested_target_id
: GitHub App ãã€ã³ã¹ããŒã«ãããŠãŒã¶ãŒãŸã㯠Organization ã® IDã ãã®ãã©ã¡ãŒã¿ãŒã¯å¿ é ã§ããrepository_ids[]
: ã€ã³ã¹ããŒã«çšã«éžã¶ãªããžã㪠IDã çç¥ãããšããã¹ãŠã®ãªããžããªãéžã°ããŸãã äºåéžæã§ãããªããžããªæ°ã¯ãæå€§ã§100ã§ãã OAuth app ã§ã¢ã¯ã»ã¹ã§ãããªããžããªã®ãªã¹ããååŸããã«ã¯ãèªèšŒããããŠãŒã¶ãŒã®ããã®ãªããžããªã®ãªã¹ããš Organization ã®ãªããžããªã®ãªã¹ãã®ãšã³ããã€ã³ãã䜿çšããŸãã
(äŸ: https://github.com/apps/YOUR_APP_NAME/installations/new/permissions?suggested_target_id=ID_OF_USER_OR_ORG&repository_ids[]=REPO_A_ID&repository_ids[]=REPO_B_ID
)ã
GitHub Apps ã®ã€ã³ã¹ããŒã«ã®è©³çްã«ã€ããŠã¯ããå人åãã¢ã«ãŠã³ãçšã« GitHub Marketplace ãã GitHub ã¢ããªãã€ã³ã¹ããŒã«ãããããOrganization ã® GitHub Marketplace ãã GitHub ã¢ããªãã€ã³ã¹ããŒã«ããããããµãŒã ããŒãã£ããã® GitHub App ã®ã€ã³ã¹ããŒã«ãããç¬èªã® GitHub App ã®ã€ã³ã¹ããŒã«ããåç §ããŠãã ããã
ã¢ããªã®æ¿èªããŠãŒã¶ãŒã«æ±ãã
GitHub App ã§ãŠãŒã¶ãŒã®ä»£çãšã㊠API èŠæ±ãè¡ãå ŽåããŠãŒã¶ãŒãã¢ããªãæ¿èªããå¿ èŠããããŸãã ãŠãŒã¶ãŒã¯ãã¢ããªãæ¿èªãããšãã«ããŠãŒã¶ãŒã®ä»£ããã«åäœããããã®ã¢ã¯ã»ã¹èš±å¯ãã¢ããªã«ä»äžããã¢ããªããèŠæ±ãããã¢ã«ãŠã³ã ã¢ã¯ã»ã¹èš±å¯ãä»äžããŸãã ã¢ããªã Organization ã¢ã«ãŠã³ãã«ã€ã³ã¹ããŒã«ãããŠããå Žåããã® Organization å ã®åãŠãŒã¶ãŒã¯ãã¢ããªãèªåã®ä»£ããã«åäœã§ããããã«ã¢ããªãæ¿èªããå¿ èŠããããŸãã
ãŠãŒã¶ãŒã«ã¢ããªã®æ¿èªãæ±ããããã«ãWeb ã¢ããªã±ãŒã·ã§ã³ ãããŒãŸãã¯ããã€ã¹ ãããŒãä»ããŠãŠãŒã¶ãŒãèªå°ããŸãã 詳ããã¯ããGitHub ã¢ããªã®ãŠãŒã¶ãŒ ã¢ã¯ã»ã¹ ããŒã¯ã³ã®çæããã芧ãã ããã
GitHub Apps ã®èªå¯ã®è©³çްã«ã€ããŠã¯ããGitHub App ã®æ¿èªããåç §ããŠãã ããã
OAuth app ã¢ã¯ã»ã¹ãåãæ¶ããããŠãŒã¶ãŒã«ä¿ã
ãŸãã以åã® OAuth app ã®ã¢ã¯ã»ã¹æš©ãåãæ¶ããããŠãŒã¶ãŒã«ä¿ãå¿ èŠããããŸãã ããã¯ãOAuth app ããå®å šã«ç§»è¡ããã®ã«åœ¹ç«ã¡ããŠãŒã¶ãŒã®ããŒã¿ã®ã»ãã¥ãªãã£ãç¶æããã®ã«ã圹ç«ã¡ãŸãã 詳ããã¯ããæ¿èªããã OAuth ã¢ããªãã¬ãã¥ãŒããããã芧ãã ããã
ã€ã³ã¿ãŒãã§ã€ã¹ãŸãã¯ããã¥ã¡ã³ããæŽæ°ãã
OAuth app ãã GitHub App ãžã®å€æŽãåæ ããããã«ãã¢ããªã«é¢é£ãããŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ãŸãã¯ããã¥ã¡ã³ããæŽæ°ããå¿ èŠããããŸãã
6. 以åã® OAuth app ã® Webhook ãåé€ãã
ãŠãŒã¶ãŒã GitHub App ãã€ã³ã¹ããŒã«ãããªããžããªãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããšãã«ã以åã® OAuth app ã® Webhook ãåé€ããå¿ èŠããããŸãã æ°ãã GitHub App ãšä»¥åã® OAuth app ãåãã€ãã³ãã® Webhook ã«å¿çããå Žåãéè€ããåäœããŠãŒã¶ãŒã«ãã£ãŠèгå¯ãããå¯èœæ§ããããŸãã
ãªããžããªã® Webhook ãåé€ããã«ã¯ãadded
ã¢ã¯ã·ã§ã³ã䜿çšã㊠installation_repositories
Webhook ããªãã¹ã³ã§ããŸãã GitHub App ããã®ã€ãã³ããåãåã£ãããREST API ã䜿çšããŠãOAuth app ã®ãããã®ãªããžããªã® Webhook ãåé€ã§ããŸãã 詳现ã«ã€ããŠã¯ããWebhook ã®ã€ãã³ããšãã€ããŒããããã³ããªããžã㪠ãŠã§ããã㯠㮠REST API ãšã³ããã€ã³ãããåç
§ããŠãã ããã
åæ§ã«ãOrganization ã® Webhook ãåé€ããã«ã¯ãcreated
ã¢ã¯ã·ã§ã³ã䜿çšã㊠installation
Webhook ããªãã¹ã³ã§ããŸãã GitHub App ã Organization ã®ã€ãã³ããåãåã£ããšãã«ãREST API ã䜿çšããŠããã® Organization ã® Webhook ãšãOAuth app ã®å¯Ÿå¿ãããªããžããªãåé€ã§ããŸãã 詳现ã«ã€ããŠã¯ããWebhook ã®ã€ãã³ããšãã€ããŒããããçµç¹ã® Webhook ã® REST API ãšã³ããã€ã³ãããããªããžã㪠ãŠã§ããã㯠㮠REST API ãšã³ããã€ã³ãããåç
§ããŠãã ããã
7. 以åã® OAuth app ãåé€ãã
ãŠãŒã¶ãŒãæ°ãã GitHub App ã«ç§»è¡ãçµãããã以åã® OAuth app ãåé€ããå¿ èŠããããŸãã ããã«ãããOAuth app ã®è³æ Œæ å ±ã®äžæ£äœ¿çšãåé¿ã§ããŸãã ãã®ã¢ã¯ã·ã§ã³ã«ãããOAuth app ã®æ®ãã®æ¿èªããã¹ãŠåãæ¶ãããŸãã 詳ããã¯ããOAuth ã¢ããªã®åé€ããã芧ãã ããã OAuth app ã GitHub Marketplace ã«æ²èŒãããŠããå Žåã¯ãæåã« GitHub Support ã«åãåãããŠãããŒã±ãããã¬ãŒã¹ããã¢ããªãåé€ããããšãå¿ èŠãªå ŽåããããŸãã