ã¯ããã«
ç§ã¯BlueSkyãšããSNSããã£ãŠãããBlueSkyã¯Xã®äºæSNSã®ãããªèªèã§æããããããšãå€ãããææ³çã«ã¯å€§ããç°ãªã£ãŠãããããã代衚ããæ©èœããã£ãŒãã§ããããã£ãŒãã¯ä»»æã®ã¢ã«ãŽãªãºã ã§ã¿ã€ã ã©ã€ã³ãæ§ç¯ããæ©èœã§ãããå ±æããããšãã§ãããBlueSkyäžã«ã¯å€çš®å€æ§ã®ãã£ãŒããå ¬éãããŠããããããèªåã®ããŒã ç»é¢ã«ãã³çãããŠããããšã§ãèªåã ãã®ã¿ã€ã ã©ã€ã³ãè²ãŠãŠããããšãã§ããããã£ãŒãã®äœæã¯å®å šã«ã³ãã¥ããã£ã«å§ããããŠãã®ã§ãã¢ã«ãŽãªãºã ãçµæžçïœ¥æ¿æ²»çãªåœ±é¿ãæ®ã©åããªããšããç¹ã§Xãä»ã®SNSãšã¯äžç·ãç»ããŠãããäžæ¹ã§ãããçšåºŠã«ã¹ã¿ãã€ãºããªããšèª°ãããªãè空ã®ã¿ã€ã ã©ã€ã³ã«æŸæµãããŠããŸãã
èªåã§ããã£ãŒãã¯äœããïŒ
ãã£ãŒãã¯å€æ°å ¬éãããŠãããã®ã䜿ãã°ããã®ã ããèªäœããããšãã§ãããå ¬åŒããã£ãŒãäœæã®ã¹ã¿ãŒã¿ãŒããããçšæããŠããã
èªåã§ãµãŒããŒãç«ãŠãã°âŠããããäžè¬äººã«ãµãŒããŒã®ç¶æç®¡çã¯ããªãããŒãã«ãé«ãã
ãã£ãŒããžã§ãã¬ãŒã¿ãŒã®åé¡
ã³ãã¥ããã£ã®äžã«ã¯ããã£ãŒããç°¡åã«äœãããµãŒãã¹ãå±éããŠãã人ããããæã代衚çãªã®ã¯Skyfeedã ãSkyfeedã®äœè redsolveræ°ã¯BlueSkyã®å šãã¹ããããŒã¿ããŒã¹åããããããçµã蟌ãã§ãã£ãŒãã«ãããããªã·ã¹ãã ãæ§ç¯ããŠãããèããã ãã§æ°ã®é ããªããããªããŒã¿ããŒã¹ã«æãããããããªããšç¡æã§æäŸããŠãããå®éãBlueSkyã®äººå£å¢å ã«äŒŽã£ãŠãµãŒããŒããŠã³ãé »çºããåœåã¯7æ¥åãŸã§é¡ãããã¹ããçŸåšã§ã¯1æ¥2æ¥ããé¡ããªãããã«ãªã£ãã
ç§ã¯ãSkyfeedããé¿é£ããããã«BlueSky Feed Creator(BSFC)ã䜿çšãå§ããããã®ãµãŒãã¹ã¯ãã¥ãŒãžãŒã©ã³ãã®æ¹ãäœã£ãŠããããã ã£ãããªã¢ã«ã¿ã€ã ã«æ¡ä»¶ã«åèŽãããã¹ããååŸããã£ãŒãã«ç»é²ããŠãããããªä»çµã¿ã«ãªã£ãŠãããéå»ã®ãã¹ãã«ã¯é¡ããªãããèšå®ä»¥åŸã®ãã¹ãã¯æ¥µããŠãªã¢ã«ã¿ã€ã ã«æŸã£ãŠãããåªç§ãªãã£ãŒããžã§ãã¬ãŒã¿ãŒã ã£ããåœåã¯3ãã£ãŒããŸã§ç¡æã§äœæå¯èœã§ãã£ããããã¡ãã人å£å¢å ã«åãããŠç¡æçãæ Œäžããããå ·äœçã«ã¯ãç¡æçãã£ãŒãã§ã¯æ¡ä»¶ã«ãããã®ãã©ã³ãã ããã¯ã¢ããããããã«ãªã£ã(æŒããçºçããããã«ãªã£ã)ãéå¶ãšããŠã¯ç Žç¶»ããªãããã«ã¯ãããããããªãã ãããSkyfeedãããå¥å šãªå€æã«æããã
ãã®ä»ã«ããã£ãŒããžã§ãã¬ãŒã¿ãŒã¯äœçš®é¡ããããããããããµãŒããŒãç¶æç®¡çããªããšãããªã以äžãèŠæš¡ãå¢å€§ãããç¡æãç¶æã§ããªãã®ã¯æçœã§ããã
ãã£ãŒããç¡æã§ã»ã«ããã¹ãããã
ãããªããšå®å®ãåãã«ã¯ã»ã«ããã¹ããããããªããç§ã欲ããã®ã¯ããŒã¯ãŒããããã¯ã¢ãããããããªåçŽãªãã£ãŒããªã®ã§ããªããšãç¡æã§ã§ããªãããã§ããªããªãBSFCã«èª²éãããããšæã£ãã
æ€çŽ¢ãããšäžèšã®èšäºãèŠã€ããããã£ãŒãã¯
getFeedSkeleton ã®ãšã³ããã€ã³ãã§ãã¹ãã®jsonãåŒã³åºãã.well-known/did.jsonã®ãšã³ããã€ã³ãã§ãã£ãŒãã®DID(Decentralized Identifier)ãåŒã³åºãã
ãã®2ç¹ã ãããã°åãããããããã¯ããªããšããªããããããªããã
èããä»çµã¿
ããŒãïŒïŒãã£ãŒãæ¬äœ
ãŸãããã£ãŒãæ¬äœã¯Cloudflare Workersã䜿ããšããã ãããCloudflare Workersã¯ãµãŒããŒã¬ã¹ã§ã³ãŒãããããã€ã§ãããµãŒãã¹ã§ã1æ¥10äžãªã¯ãšã¹ããŸã§ç¡æ(ãªã¯ãšã¹ããããã®CPUåŠçæé10msãŸã§)ã§ãããäžèš2ã€ã®ãšã³ããã€ã³ãã ããæèŒãããã°è»œéã§ãããååãããã¯ãã ã
ããŒã2ïŒãã¹ããã©ãååŸããã
Workersã䜿ã£ãæ¢åã®ãã®ããªããChatGPTã«èããš
ãåºãŠãããæ¢ã«ã¢ãŒã«ã€ããããŠããããã®Contrailsã¯Workersã«ä»äºãããããã§è€éã«èŠããã軜éã·ã³ãã«ãã£ãŒããç®æãããšèãããpostã®jsonãã©ããããfetchããã ãã®ä»çµã¿ã«ããã°è»œéã®ãã£ãŒããã§ããã ããã
ããŒã¯ãŒãåãã£ãŒããªã®ã§postã®jsonãååŸããã®ã¯BlueSkyã®æ€çŽ¢APIã䜿çšãããæ€çŽ¢APIã¯BlueSkyã®æ€çŽ¢çµæãšåããã¹ãäžèЧãè¿ãããããfetchã§ããããã«éçã«ãã¹ãã£ã³ã°ãããããã¯GitHub Pagesã§åé¡ãªãã
ããŒã3ïŒèªåå
宿çã«æ€çŽ¢ããŠjsonãæŽæ°ããã®ã¯GitHub Actionã®cronã§ãããããããã«Cloudflare Workersã¯wranglerã§æäœã§ããã®ã§Cloudflare Workersã§åããã³ãŒãã®ãããã€ã¯Actionã§èªååã§ããããäœãªãåé€ãèªååã§ããããããã«1ãªããžããª1ãã£ãŒãã«ããã°ãããã€æã®åœåãdid解決ããªããžããªåããèªåçæã§ããã¯ãã ã
å¿ èŠãªç°å¢å€æ°ã幟ã€ããããã調ã¹ããGitHubã«ã¯Actionå¿ èŠãªç°å¢å€æ°ãç»é²ããæ©èœ(SecretsãšVariables)ã®æ©èœãããã£ãœã(åããŠç¥ã£ã)ã
ä»çµã¿ãŸãšã
flowchart TD BlueSkyæ€çŽ¢API-->|GitHubActionïŒGitHubPages|feed.json feed.json-->|fetch|CloudflareWorkers
é£ãããã«æžãããã宿çã«èªåã§æ€çŽ¢ããŠfeed.jsonãäœæããŠããããåç §ããã³ãŒããCloudflareWorkersã«ãããã€ãããããã ãã®ã·ã³ãã«ãªããã¿ã ããããŸã§æ§æ³ãè©°ããŠããCodexã§äœã£ãŠããã£ãããã»ãŒã»ãŒå®æåãã§ããã®ã§å€å°æçŽãããŠçµäºã
宿å
äžèšã®ãªããžããªã«äœæããã
3ã€ã®èªååã¢ã¯ã·ã§ã³ãããã

READMEã«åŸã£ãŠæ€çŽ¢ã¯ãŒããå¿ èŠãªèšå®å€ãç»é²ããŠãCreate Bluesky Feedã®GitHub Actionã§ãã¿ã³ãæŒãã°ãã£ãŒããã§ãããéåžžã«ç°¡äŸ¿ã§ãããåé¡ç¹ã¯cronã®é å»¶ãšBlueSkyã®æ€çŽ¢APIã®é å»¶ã®å¯èœæ§ã§ããªã¢ã«ã¿ã€ã æ§ã¯å¿ ãããé«ããªãã
ãããã«
æ» è¶èŠè¶åçŽãªä»çµã¿æãã€ãããïŒãšæã£ããREADMEãæžããŠã¿ããçµæ§è€éã«èŠããããã®ãµã€ããäœã£ãŠããQuartzã䜿ãæã«å±¥ä¿®ããä»çµã¿éã®çµã¿åãããªã®ã§å®çŸã§ãããã ãšæã£ãããšã¯ãããå®å®ããããŒã¯ãŒãç³»ãã£ãŒããéç£ã§ããããã«ãªã£ãã®ã¯å€§ããããæŽ»çšããŠãããã