æè²è©äŸ¡ã®ä¿¡é Œæ§ãåŠ¥åœæ§ãã»ãã¥ãªãã£ãåäžãããæ±çšè©äŸ¡ã·ã¹ãã ïŒGASïŒã«ãããåå®å šæ§ã®éèŠãªåœ¹å²ãæ¢æ±ããŸãã
æ±çšè©äŸ¡ã·ã¹ãã ïŒæè²è©äŸ¡ã®åå®å šæ§ã®ç¢ºä¿
æè²ã®çžäºæ¥ç¶æ§ãé«ãŸãçŸä»£ã«ãããŠãå ç¢ã§ä¿¡é Œæ§ãé«ããé©å¿æ§ã®ããè©äŸ¡ã·ã¹ãã ãžã®ããŒãºã¯æåªå äºé ãšãªã£ãŠããŸããæ±çšè©äŸ¡ã·ã¹ãã ïŒGASïŒã¯ããã®ç®æšéæã«åããéèŠãªäžæ©ã§ããGASã¯ã倿§ãªç§ç®ãã¹ãã«ã¬ãã«ãæè²çæèã«ãããè©äŸ¡ãäœæã»å±éããããã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããŸããããããGASã®æè»æ§ãšèšå®å¯èœæ§ã¯ãåå®å šæ§ïŒType SafetyïŒã®ç¢ºä¿ãšããéèŠãªèª²é¡ããããããŸããè©äŸ¡ã®æèã«ãããåå®å šæ§ãšã¯ãäºææ§ã®ãªãããŒã¿åãæäœã«èµ·å ãããšã©ãŒãé²ãã·ã¹ãã ã®èœåãæããããã«ãã£ãŠè©äŸ¡ããã»ã¹ã®æŽåæ§ãšåŠ¥åœæ§ãä¿è·ããŸããæ¬çš¿ã§ã¯ãGASã«ãããåå®å šæ§ã®æŠå¿µãæ¢æ±ãããã®éèŠæ§ãå®è£ æŠç¥ãããã³ã°ããŒãã«æè²ãžã®åœ±é¿ã匷調ããŸãã
æ±çšè©äŸ¡ã·ã¹ãã ïŒGASïŒãšã¯
æ±çšè©äŸ¡ã·ã¹ãã ã¯ãæè²è©äŸ¡ãäœæãé ä¿¡ãåæããããã«èšèšããããœãããŠã§ã¢ãã©ãããã©ãŒã ã§ããç¹å®ã®ç§ç®ãã«ãªãã¥ã©ã ã«åããããªãŒããŒã¡ã€ãã®è©äŸ¡ãœãªã¥ãŒã·ã§ã³ãšã¯ç°ãªããGASã¯åºç¯ãªæè²ãã¡ã€ã³ã«ããã£ãŠé©å¿å¯èœã§åå©çšå¯èœã§ããããšãæå³ããŠããŸããéåžžãæ¬¡ã®ãããªæ©èœãæäŸããŸãã
- é ç®ãã³ã¯ïŒé¢é£ã¡ã¿ããŒã¿ãæã€è©äŸ¡é ç®ïŒè³ªåãã¿ã¹ã¯ãªã©ïŒã®ä¿åãšç®¡çã
 - ãã¹ãã¢ã»ã³ããªïŒå®çŸ©æžã¿ã®åºæºïŒäŸïŒé£æåºŠãå 容ç¯å²ããã«ãŒããªã³ã仿§ïŒã«åºã¥ããŠãã¹ããèªåãŸãã¯åèªåã§äœæã
 - ãã¹ãé ä¿¡ïŒåŠçãžã®è©äŸ¡ã®å®å šãªãªã³ã©ã€ã³ãŸãã¯ãªãã©ã€ã³é ä¿¡ã
 - æ¡ç¹ãšã¬ããŒãïŒåçã®èªåæ¡ç¹ãšåŠçã®æçžŸã«é¢ããã¬ããŒãçæã
 - é©å¿åãã¹ãïŒåŠçã®åçã«åºã¥ããŠåé¡ã®é£æåºŠãåçã«èª¿æŽã
 - ã¢ã¯ã»ã·ããªãã£æ©èœïŒã¹ã¯ãªãŒã³ãªãŒããŒãããŒããŒãããã²ãŒã·ã§ã³ãç»åã®ä»£æ¿ããã¹ããªã©ãé害ã®ããåŠçãžã®ãµããŒãã
 - çžäºéçšæ§ïŒQTIïŒQuestion and Test InteroperabilityïŒãªã©ã®æšæºãä»ããŠãä»ã®æè²ã·ã¹ãã ïŒäŸïŒåŠç¿ç®¡çã·ã¹ãã ãåŠçæ å ±ã·ã¹ãã ïŒãšçµ±åããèœåã
 
GASã®çŽæã¯ãéçºã³ã¹ãã®åæžãè©äŸ¡å質ã®åäžãããŒã¿äž»å°ã®æææ±ºå®ã®ä¿é²ã®å¯èœæ§ã«ãããŸããäŸãã°ã倧åŠãç©çåŠãæåŠãå·¥åŠã®è©äŸ¡ã宿œããããã«åãGASãã©ãããã©ãŒã ã䜿çšããäžè²«ããæšæºãšåçåãããã¯ãŒã¯ãããŒãä¿èšŒãããšæ³åããŠã¿ãŠãã ããããŸãã¯ãå€åœç±äŒæ¥ãGASã䜿çšããŠããŸããŸãªåœã®åŸæ¥å¡ã®ã¹ãã«ãè©äŸ¡ãããã¬ãŒãã³ã°ããŒãºãç¹å®ããé²æç¶æ³ãäžè²«ããŠè¿œè·¡ã§ãããšããŸãã
GASã«ãããåå®å šæ§ã®éèŠæ§
GASã«ãããåå®å šæ§ã¯ãè©äŸ¡ã®æŽåæ§ãšåŠ¥åœæ§ãç¶æããããã«äžå¯æ¬ ã§ããã·ã¹ãã ãåå®å šã§ãªãå Žåãè©äŸ¡ããã»ã¹ãæãªããäžæ£ç¢ºãªçµæã«ã€ãªããå¯èœæ§ã®ãããšã©ãŒã«å¯ŸããŠè匱ã«ãªããŸããåå®å šæ§ã¯ä»¥äžã®ãããªçç±ã§éèŠã§ãã
1. ããŒã¿ç Žæã®é²æ¢
è©äŸ¡ã«ã¯ãæ°å€ïŒã¹ã³ã¢çšïŒãããã¹ãïŒåççšïŒãããŒã«å€ïŒçåœè³ªåçšïŒããã«ãã¡ãã£ã¢ã³ã³ãã³ãïŒç»åããããªïŒãªã©ãããŸããŸãªããŒã¿åãå«ãŸããããšããããããŸããåå®å šã§ãªãã·ã¹ãã ã¯ããããã®ããŒã¿åã誀ã£ãŠæ··åããããŒã¿ç Žæã«ã€ãªããå¯èœæ§ããããŸããããšãã°ãã·ã¹ãã ãæ°å€ã¹ã³ã¢ã«ããã¹ãæååã远å ããããšãããšããšã©ãŒãçºçããããããã«æªãããšã«ãäžæ£ãªã¹ã³ã¢ã«ãªããŸããããã¯è©äŸ¡çµæã®ä¿¡é Œæ§ã«å€§ãã圱é¿ããå¯èœæ§ããããŸãã
2. æ¡ç¹ã®æ£ç¢ºæ§ã®ç¢ºä¿
æ¡ç¹ã¢ã«ãŽãªãºã ã¯ãèšç®ãæ£ããå®è¡ããããã«ç¹å®ã®ããŒã¿åã«äŸåããŠããŸããã·ã¹ãã ããããã®èšç®ã§äºææ§ã®ãªãããŒã¿åã䜿çšããããšãèš±å¯ãããšãæ¡ç¹ã¯äžæ£ç¢ºã«ãªããŸããããšãã°ãæ¡ç¹ã¢ã«ãŽãªãºã ããšãã»ã€ã®é·ãã«æ°å€å€ãæåŸ ããŠããã®ã«ããã¹ãæååãåãåã£ãå Žåãé·ãã®èšç®ã¯æå³ããªããªãããšãã»ã€ã®å šäœçãªã¹ã³ã¢ã«åœ±é¿ããŸããããã¯ãæžé¢ã«ããåçã®è³ªãè©äŸ¡ããããã«è€éãªã¢ã«ãŽãªãºã ã䜿çšãããèªåãšãã»ã€æ¡ç¹ïŒAESïŒã·ã¹ãã ã§ç¹ã«åé¡ãšãªããŸããããŒã¿åã®ããããªéãã§ããçµæãæªã¿ãåŠçã«äžåœãªããã«ãã£ã課ãããå¯èœæ§ããããŸãã
3. ãã¹ãã»ãã¥ãªãã£ã®ç¶æ
åå®å šæ§ã¯ããã¹ãã»ãã¥ãªãã£ã®ç¶æã«åœ¹å²ãæãããŸããåé¢é£ã®ãšã©ãŒã«èµ·å ããè匱æ§ã¯ãæªæã®ããæ»æè ã«ãã£ãŠã»ãã¥ãªãã£å¯Ÿçãåé¿ããããè©äŸ¡ããŒã¿ãžã®äžæ£ã¢ã¯ã»ã¹ãååŸãããããããã«æªçšãããå¯èœæ§ããããŸããããšãã°ãåå®å šã§ãªãã·ã¹ãã ã¯ããŠãŒã¶ãŒãæªæã®ããã³ãŒããããã¹ããã£ãŒã«ãã«æ¿å ¥ããããšãèš±å¯ãããããããŒã¿ããŒã¹ã¯ãšãªã§äœ¿çšãããå¯èœæ§ããããã·ã¹ãã å šäœã䟵害ããå¯èœæ§ããããŸããåå®å šæ§ã¯ãããŒã¿ãäºæž¬å¯èœãã€å¶åŸ¡ãããæ¹æ³ã§åŠçããããšãä¿èšŒããããšã«ããããããã®è匱æ§ãé²ããã»ãã¥ãªãã£äŸµå®³ã®ãªã¹ã¯ã軜æžããŸãã
4. ã·ã¹ãã ä¿¡é Œæ§ã®åäž
åé¢é£ã®ãšã©ãŒã¯ãã·ã¹ãã ã¯ã©ãã·ã¥ãäºæããªãåäœãåŒãèµ·ãããè©äŸ¡ããã»ã¹ãäžæããããŠãŒã¶ãŒãã€ã©ã€ã©ãããå¯èœæ§ããããŸããåå®å šæ§ã匷å¶ããããšã«ãããGASã¯ããä¿¡é Œæ§ãé«ãäºæž¬å¯èœã«ãªãããšã©ãŒã®ãªã¹ã¯ãæå°éã«æããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸããããã¯ãã·ã¹ãã é害ãåŠçãæ©é¢ã«é倧ãªåœ±é¿ãäžããå¯èœæ§ã®ããé«ãªã¹ã¯è©äŸ¡ã§ç¹ã«éèŠã§ããä¿¡é Œæ§ã®é«ãã·ã¹ãã ã¯ãè©äŸ¡çµæãžã®ä¿¡é Œãšèªä¿¡ãè²ã¿ãŸãã
5. çžäºéçšæ§ã®ä¿é²
GASãä»ã®æè²ã·ã¹ãã ãšã®çµ±åãå¢ããã«ã€ããŠãåå®å šæ§ã¯çžäºéçšæ§ã確ä¿ããããã«äžå¯æ¬ ã«ãªããŸããç°ãªãã·ã¹ãã ã¯ç°ãªãããŒã¿åãŸãã¯åœ¢åŒã䜿çšããå¯èœæ§ããããåå®å šã§ãªãGASã¯ãããã®ã·ã¹ãã ãšã®ã·ãŒã ã¬ã¹ãªããŒã¿äº€æã«èŠåŽããå¯èœæ§ããããŸããããã¯ãçµ±åã®åé¡ãããŒã¿ã®äžæŽåã«ã€ãªããå¯èœæ§ããããŸããåå®å šæ§ã匷å¶ããããšã«ãããGASã¯ããŒã¿ãäžè²«ããäºæž¬å¯èœãªæ¹æ³ã§äº€æãããããšãä¿èšŒããçžäºéçšæ§ãä¿é²ããããŸããŸãªã·ã¹ãã å šäœã§ã¯ãŒã¯ãããŒãåçåã§ããŸãã
GASã«ãããåé¢é£ãšã©ãŒã®äŸ
åå®å šæ§ã®éèŠæ§ã説æããããã«ãGASã§çºçããå¯èœæ§ã®ããåé¢é£ãšã©ãŒã®äŸã以äžã«ç€ºããŸãã
- äžæ£ãªããŒã¿å ¥åïŒåŠçãæ°å€ãã£ãŒã«ãã«æ°ã§ã¯ãªãããã¹ãæååãå ¥åããŸããã·ã¹ãã ã¯å ¥åãæ€èšŒã§ãããããã¹ãæååã®èšç®ãå®è¡ããããšãããšã©ãŒã«ã€ãªãããŸãã
 - ããŒã¿å€æãšã©ãŒïŒã·ã¹ãã ã¯ãããããŒã¿åããå¥ã®ããŒã¿åãžã®å€ã®å€æïŒäŸïŒæååããæŽæ°ãžã®å€æïŒã詊ã¿ãŸãããæœåšçãªå€æãšã©ãŒãåŠçã§ããŸãããããã¯ãäžæ£ç¢ºãªå€ãã·ã¹ãã ã¯ã©ãã·ã¥ã«ã€ãªããå¯èœæ§ããããŸããããšãã°ã質åã§1ãã10ã®éã®æ°å€å¿çãå¿ èŠãªå ŽåããããŸããåŠçããelevenããšå ¥åããã·ã¹ãã ããããæ°å€ã«èªå倿ããããšãããšãäºæããªãåäœãã¯ã©ãã·ã¥ã«ã€ãªããå¯èœæ§ããããŸãã
 - é åã€ã³ããã¯ã¹ç¯å²å€ïŒã·ã¹ãã ã¯ãç¡å¹ãªã€ã³ããã¯ã¹ïŒäŸïŒè² ã®ã€ã³ããã¯ã¹ãŸãã¯é åãµã€ãºãã倧ããã€ã³ããã¯ã¹ïŒã䜿çšããŠé åã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããšããŸããããã¯ãã¯ã©ãã·ã¥ãŸãã¯äºæž¬äžå¯èœãªåäœãåŒãèµ·ããå¯èœæ§ããããŸããé©å¿åãã¹ãã§ã¯ã誀ã£ãŠèšç®ãããã€ã³ããã¯ã¹ã«ãããéèŠãªè³ªåãã¹ãããããããç¹°ãè¿ããããããå¯èœæ§ããããŸãã
 - Nullãã€ã³ã¿äŸå€ïŒã·ã¹ãã ã¯ãnullïŒã€ãŸããååšããªãïŒãªããžã§ã¯ãã®ã¡ã³ããŒã«ã¢ã¯ã»ã¹ããããšããŸããããã¯ãã¯ã©ãã·ã¥ãŸãã¯äºæããªãåäœãåŒãèµ·ããå¯èœæ§ããããŸããããšãã°ãå¿ é ã®è³ªåãæ£ããããŒããããã«nullã«ãªã£ãå Žåãã·ã¹ãã ã¯ããã衚瀺ããããšãããšãã«ã¯ã©ãã·ã¥ããå¯èœæ§ããããŸãã
 - SQLã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ïŒæªæã®ãããŠãŒã¶ãŒããåŸã§ããŒã¿ããŒã¹ã¯ãšãªã§äœ¿çšãããããã¹ããã£ãŒã«ãã«SQLã³ãŒããæ¿å ¥ããŸããã·ã¹ãã ã¯å ¥åããµãã¿ã€ãºã§ãããæªæã®ããã³ãŒãã®å®è¡ãèš±å¯ããããŒã¿ããŒã¹ã䟵害ããå¯èœæ§ããããŸããããšãã°ãåŠçãã³ãŒã¹ã¢ãžã¥ãŒã«ã®ã¬ãã¬ã¯ã·ã§ã³ãä¿åããããã«èšèšãããããªãŒããã¹ãåçããã¯ã¹ã«SQLã³ãŒããå ¥åã§ããŸãã
 
GASã§åå®å šæ§ã確ä¿ããããã®æŠç¥
GASã«åå®å šæ§ãå®è£ ããã«ã¯ãã·ã¹ãã ã®èšèšãšå®è£ ã®äž¡æ¹ã«å¯Ÿå¿ããå€è§çãªã¢ãããŒããå¿ èŠã§ãã以äžã«äž»èŠãªæŠç¥ãããã€ã瀺ããŸãã
1. éçåä»ã
éçåä»ããšã¯ãããã°ã©ã ãå®è¡ãããåã«ïŒã³ã³ãã€ã«æã«ïŒå€æ°ãšåŒã®ããŒã¿åãå®çŸ©ããããšãå«ã¿ãŸããããã«ãããã³ã³ãã€ã©ã¯éçºããã»ã¹ã®æ©ã段éã§åãšã©ãŒãæ€åºããæ¬çªç°å¢ã«å°éããã®ãé²ãããšãã§ããŸããJavaãC++ãTypeScriptãªã©ã®èšèªã¯åŒ·åãªéçåä»ãæ©èœãæäŸããŠãããåå®å šãªGASã®æ§ç¯ã«æŽ»çšã§ããŸããéçåãã§ãã«ãŒã®äœ¿çšã¯äžå¯æ¬ ã§ããããšãã°ãTypeScriptã¯ãGASã§äœ¿çšããããã¹ãŠã®ãªããžã§ã¯ããšããŒã¿æ§é ã®ã€ã³ã¿ãŒãã§ãŒã¹ãšåãå®çŸ©ã§ããŸããããã«ãããéçºãã§ãŒãºäžã«åãã¹ããããšã©ãŒãã¯ããã«æ©æã«æ€åºã§ããŸãã
2. æ€èšŒã䌎ãåçåä»ã
åçåä»ãã¯ãéçåä»ããšã¯å¯Ÿç §çã«ãå®è¡æïŒããã°ã©ã å®è¡äžïŒã«ããŒã¿åããã§ãã¯ããããšãå«ã¿ãŸããåçåä»ãã¯ãã倧ããªæè»æ§ãæäŸããŸãããåé¢é£ã®ãšã©ãŒã®ãªã¹ã¯ãé«ãŸããŸãããã®ãªã¹ã¯ã軜æžããããã«ãåçåä»ãã¯ãå®è¡æã«å ¥åãšåºåã®ããŒã¿åãæ€èšŒããå ç¢ãªæ€èšŒã¡ã«ããºã ãšçµã¿åãããå¿ èŠããããŸããPythonãJavaScriptãªã©ã®èšèªã¯åçã«åä»ããããŠããŸããããšãã°JavaScriptã䜿çšããå Žåãåãã§ãã¯ã©ã€ãã©ãªã¯å®å šæ§ã®å±€ã远å ã§ããŸãã
3. ããŒã¿æ€èšŒãšãµãã¿ã€ãŒãŒã·ã§ã³
ããŒã¿æ€èšŒãšã¯ãããŒã¿ãç¹å®ã®å¶çŽãŸãã¯ã«ãŒã«ã«æºæ ããŠããããšã確èªããããšãå«ã¿ãŸããããã«ã¯ãæ°å€ãç¹å®ã®ç¯å²å ã«ããããšãããã¹ãæååãç¹å®ã®é·ãã§ããããšãæ¥ä»ãæå¹ãªåœ¢åŒã§ããããšã確èªããããšãå«ãŸããŸããããŒã¿ãµãã¿ã€ãŒãŒã·ã§ã³ãšã¯ãæœåšçã«æå®³ãªæåãã³ãŒããåé€ããããã«ããŒã¿ãã¯ãªãŒãã³ã°ããããšãå«ã¿ãŸããããã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãé²ãããã«ç¹ã«éèŠã§ããå ¥åæ€èšŒã¯ãã¯ã©ã€ã¢ã³ããµã€ãïŒäŸïŒãã©ãŠã¶ã§ã®JavaScriptã䜿çšïŒãšãµãŒããŒãµã€ãïŒäŸïŒãµãŒããŒã§ã®JavaãŸãã¯Pythonã䜿çšïŒã®äž¡æ¹ã§å®è£ ããå¿ èŠããããŸããäŸïŒããŒã¿ããŒã¹ãšããåããããšãã¯ãåžžã«ãã©ã¡ãŒã¿åã¯ãšãªãŸãã¯ããªãã¢ãã¹ããŒãã¡ã³ãã䜿çšããŠãã ãããããã«ãããSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æãé²ãããšãã§ããŸãããŠãŒã¶ãŒå ¥åãåŠçãããšãã¯ãæœåšçã«æå®³ãªæåãã³ãŒããåé€ããããã«åžžã«ãµãã¿ã€ãºããŠãã ãããããšãã°ãOWASP Java HTML Sanitizerãªã©ã®ã©ã€ãã©ãªã䜿çšããŠHTMLå ¥åããµãã¿ã€ãºã§ããŸãã
4. äŸå€åŠç
äŸå€åŠçãšã¯ãããã°ã©ã å®è¡äžã«çºçãããšã©ãŒãé©åã«åŠçããããšãå«ã¿ãŸããããã«ã¯ãåé¢é£ã®ãšã©ãŒããã£ãããããŠãŒã¶ãŒã«ãããããããšã©ãŒã¡ãã»ãŒãžãæäŸããããšãå«ãŸããŸããé©åãªäŸå€åŠçã¯ãã·ã¹ãã ã¯ã©ãã·ã¥ãé²ããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸããé©åã«èšèšãããäŸå€åŠçæŠç¥ã¯ãã¯ã©ãã·ã¥ãé²ããæçšãªãããã°æ å ±ãæäŸã§ããŸããããšãã°ããŠãŒã¶ãŒå ¥åãæ°å€ã«å€æããéã«æœåšçãª`NumberFormatException`ãåŠçããããã«`try-catch`ãããã¯ã䜿çšããŸãã
5. åäœãã¹ããšçµ±åãã¹ã
åäœãã¹ããšã¯ãã·ã¹ãã ã®åã ã®ã³ã³ããŒãã³ããåå¥ã«ãã¹ãããããšãå«ã¿ãŸããçµ±åãã¹ããšã¯ãç°ãªãã³ã³ããŒãã³ãéã®çžäºäœçšããã¹ãããããšãå«ã¿ãŸããã©ã¡ãã®ã¿ã€ãã®ãã¹ãããåé¢é£ã®ãšã©ãŒãç¹å®ããã³ä¿®æ£ããããã«äžå¯æ¬ ã§ããèªåãã¹ããã¬ãŒã ã¯ãŒã¯ã¯ããã¹ãããã»ã¹ãåçåããã®ã«åœ¹ç«ã¡ãŸããå颿°ãŸãã¯ã¡ãœãããããŸããŸãªããŒã¿åãæ£ããåŠçããããšã確èªããããã«åäœãã¹ããèšè¿°ããŸããããŸããŸãªããŒã¿åãåŠçããå Žåã§ããã·ã¹ãã ã®ããŸããŸãªã³ã³ããŒãã³ããã·ãŒã ã¬ã¹ã«é£æºããããšã確èªããããã«çµ±åãã¹ãã䜿çšããŸãã倧éã®æœåšçã«ç¡å¹ãªå ¥åã§ã·ã¹ãã ããã¹ãããããã«ãã¡ãžã³ã°ææ³ã䜿çšããŸããããã¯ãäºæããªãè匱æ§ãæããã«ããã®ã«åœ¹ç«ã¡ãŸãã
6. ã³ãŒãã¬ãã¥ãŒ
ã³ãŒãã¬ãã¥ãŒãšã¯ãä»ã®éçºè ã«ã³ãŒããã¬ãã¥ãŒããŠããããæœåšçãªãšã©ãŒãç¹å®ããããšãå«ã¿ãŸããããã¯ãèŠèœãšããå¯èœæ§ã®ããåé¢é£ã®ãšã©ãŒãæ€åºããããã®å¹æçãªæ¹æ³ã§ãããã¢ã¬ãã¥ãŒã¯ãèŠèœãšããå¯èœæ§ã®ããæœåšçãªåé¢é£ãšã©ãŒãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããããšãã°ãã³ãŒãã¬ãã¥ãŒäžã«ãããŒã¿åãæé»çã«å€æãããå Žåãã倿°ã®åã«é¢ããä»®å®ãè¡ãããå Žåãæ¢ããŸãã
7. åå®å šãªã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã®äœ¿çš
åå®å šæ§ã念é ã«çœ®ããŠèšèšãããã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ãå©çšãããšãåé¢é£ãšã©ãŒã®ãªã¹ã¯ãå€§å¹ ã«è»œæžã§ããŸãããããã®ã©ã€ãã©ãªã¯ãçµã¿èŸŒã¿ã®æ€èšŒã¡ã«ããºã ãšäŸå€åŠçãæäŸããããšãå€ããåå®å šãªGASã®éçºã容æã«ããŸããããšãã°ãORMïŒObject-Relational MappingïŒã©ã€ãã©ãªã䜿çšããŠããŒã¿ããŒã¹ãšããåãããŸãããããã®ã©ã€ãã©ãªã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãé²ãã®ã«åœ¹ç«ã€åå®å šæ§æ©èœãæäŸããããšããããããŸããJSONããŒã¿ãæ±ããšãã¯ãã¹ããŒãæ€èšŒæ©èœãæäŸããã©ã€ãã©ãªã䜿çšããŠãã ãããããã«ãããJSONããŒã¿ãå®çŸ©æžã¿ã®æ§é ãšããŒã¿åã«æºæ ããŠããããšãä¿èšŒãããŸãã
8. åœ¢åŒæ€èšŒ
åœ¢åŒæ€èšŒãšã¯ãæ°åŠçææ³ã䜿çšããŠãœãããŠã§ã¢ã®æ£ç¢ºæ§ã蚌æããããšãå«ã¿ãŸããåœ¢åŒæ€èšŒã¯è€éã§æéããããå ŽåããããŸãããã·ã¹ãã ãåå®å šã§ããããšã®æé«ã¬ãã«ã®ä¿èšŒãæäŸããŸããGASã®éèŠãªã³ã³ããŒãã³ãã«åœ¢åŒææ³ãé©çšããããšã§ããã®ä¿¡é Œæ§ã«å¯Ÿããé«ãã¬ãã«ã®èªä¿¡ãåŸãããšãã§ããŸããããšãã°ãã¢ãã«ãã§ãã¯ã䜿çšããŠãã·ã¹ãã ã®ã¹ããŒãé·ç§»ãäžè²«ããŠãããåé¢é£ã®ãšã©ãŒãçºçããªãããšãæ€èšŒããŸããå®ç蚌æã䜿çšããŠãã·ã¹ãã ãç¹å®ã®åå®å šæ§ããããã£ãæºããããšã圢åŒçã«èšŒæããŸãã
åœéæšæºãšã¬ã€ãã©ã€ã³
åœéæšæºãšã¬ã€ãã©ã€ã³ãéµå®ããããšã¯ãGASãäžè²«ããä¿¡é Œæ§ã®é«ãæ¹æ³ã§éçºããã³å±éãããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸããé¢é£ããæšæºãšã¬ã€ãã©ã€ã³ã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- QTIïŒQuestion and Test InteroperabilityïŒïŒè©äŸ¡é ç®ãšãã¹ãçµæãæ©æ¢°å¯èªåœ¢åŒã§è¡šçŸããããã®æšæºã
 - IMS Global Learning ConsortiumïŒæè²ãã¯ãããžãŒã®ãªãŒãã³æšæºãéçºããã³æšé²ããçµç¹ã
 - WCAGïŒWeb Content Accessibility GuidelinesïŒïŒé害ã®ãã人ã ããŠã§ãã³ã³ãã³ãã«ã¢ã¯ã»ã¹ã§ããããã«ããããã®ã¬ã€ãã©ã€ã³ã®ã»ããã
 - ISO/IEC 27001ïŒæ å ±ã»ãã¥ãªãã£ç®¡çã·ã¹ãã ã®åœéæšæºã
 
ãããã®æšæºã¯ãGASãçžäºéçšå¯èœã§ãã¢ã¯ã»ã¹å¯èœã§ãå®å šã§ãä¿¡é Œæ§ã®é«ããã®ã§ããããšãä¿èšŒããããã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããŸããããšãã°ãQTIæšæºã«åŸãããšã§ãè©äŸ¡ãç°ãªãã·ã¹ãã éã§ã·ãŒã ã¬ã¹ã«äº€æã§ããŸããWCAGã¬ã€ãã©ã€ã³ãéµå®ããããšã§ãè©äŸ¡ã¯åŠç¿è ã®èœåã«é¢ä¿ãªãããã¹ãŠã®äººã«ã¢ã¯ã»ã¹å¯èœã§ããããšãä¿èšŒãããŸããISO/IEC 27001ãå®è£ ããããšã§ãæ©å¯æ§ã®é«ãè©äŸ¡ããŒã¿ãäžæ£ã¢ã¯ã»ã¹ã誀çšããä¿è·ã§ããŸãã
åå®å šæ§å®è£ ã®å®è·µäŸ
GASã§åå®å šæ§ãå®è£ ããæ¹æ³ã«ã€ããŠãããã€ãã®å®è·µäŸãèããŠã¿ãŸãããã
äŸ1ïŒæ°å€å ¥åã®æ€èšŒ
質åã§ãåŠçã幎霢ãè¡šãæ°å€ãå ¥åããå¿ èŠããããšããŸããã·ã¹ãã ã¯ãå ¥åãå®éã«æ°å€ã§ãããåççãªç¯å²ïŒäŸïŒ5æ³ãã100æ³ïŒå ã«ããããšãæ€èšŒããå¿ èŠããããŸããJavaã§ã®å®è£ æ¹æ³ã以äžã«ç€ºããŸãã
try {
    int age = Integer.parseInt(ageInput);
    if (age < 5 || age > 100) {
        throw new IllegalArgumentException("Age must be between 5 and 100");
    }
    // 幎霢å€ãåŠçãã
} catch (NumberFormatException e) {
    // å
¥åãæ°å€ã§ãªãå Žåã®åŠç
    System.err.println("Invalid age format: " + e.getMessage());
} catch (IllegalArgumentException e) {
    // 幎霢ãç¯å²å€ã®å Žåã®åŠç
    System.err.println(e.getMessage());
}
äŸ2ïŒSQLã€ã³ãžã§ã¯ã·ã§ã³ã®é²æ¢
質åã§ãåŠçãããŒã¿ããŒã¹ã«ä¿åãããããªãŒããã¹ãå¿çãå ¥åã§ãããšããŸããã·ã¹ãã ã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãé²ãããã«å ¥åããµãã¿ã€ãºããå¿ èŠããããŸãããã©ã¡ãŒã¿åã¯ãšãªã䜿çšããPythonã§ã®å®è£ æ¹æ³ã以äžã«ç€ºããŸãã
import sqlite3
conn = sqlite3.connect('assessment.db')
cursor = conn.cursor()
# SQLã¯ãšãªãæ§ç¯ããããã«æååãã©ãŒãããã絶察ã«äœ¿çšããªãã§ãã ãã
# ããã¯SQLã€ã³ãžã§ã¯ã·ã§ã³ã«å¯ŸããŠè匱ã§ã
# response = input("Enter your response: ")
# query = f"SELECT * FROM responses WHERE response = '{response}'"
# cursor.execute(query)
# 代ããã«ãã©ã¡ãŒã¿åã¯ãšãªã䜿çšããŠãã ãã
response = input("Enter your response: ")
query = "SELECT * FROM responses WHERE response = ?"
cursor.execute(query, (response,))
results = cursor.fetchall()
for row in results:
    print(row)
conn.close()
äŸ3ïŒPythonã§ã®åãã³ãã®äœ¿çš
åçã«åä»ããããèšèªã§ããPythonã¯ãåãã³ããã倧ããªã¡ãªãããåŸãããšãã§ããŸããåãã³ãã䜿çšãããšã倿°ã颿°åŒæ°ãæ»ãå€ã®æåŸ ãããããŒã¿åãæå®ã§ããéçåæããŒã«ãå®è¡åã«åãšã©ãŒãæ€åºã§ããããã«ãªããŸãã以äžã«äŸã瀺ããŸãã
def calculate_average(numbers: list[float]) -> float:
    """ãªã¹ãã®æ°å€ã®å¹³åãèšç®ããŸãã"""
    if not numbers:
        return 0.0
    return sum(numbers) / len(numbers)
# 䜿çšäŸ
scores: list[float] = [85.5, 92.0, 78.5]
average_score: float = calculate_average(scores)
print(f"The average score is: {average_score}")
ãã®äŸã§ã¯ãåãã³ã`list[float]`ã¯ã`numbers`åŒæ°ãæµ®åå°æ°ç¹æ°ã®ãªã¹ãã§ããã¹ãããšãæå®ããåãã³ã`-> float`ã¯ã颿°ãæµ®åå°æ°ç¹æ°ãè¿ãããšãæå®ããŸãã`mypy`ãªã©ã®éçåæããŒã«ã¯ããããã®åãã³ãã䜿çšããŠã`calculate_average`颿°ã«æååã®ãªã¹ããæž¡ããªã©ãåãšã©ãŒãæ€åºã§ããŸãã
課é¡ãšä»åŸã®æ¹åæ§
åå®å šæ§ã¯å€§ããªã¡ãªããããããããŸãããGASã§ã®å®è£ ãããã€ãã®èª²é¡ããããããŸãã
- è€éãïŒåå®å šæ§ãå®è£ ãããšãGASã®èšèšãšå®è£ ã«è€éããå ããå¯èœæ§ããããéçºè ã¯åã·ã¹ãã ãšããã°ã©ãã³ã°èšèªãããæ·±ãçè§£ããå¿ èŠããããŸãã
 - ããã©ãŒãã³ã¹ãªãŒããŒãããïŒåãã§ãã¯ã¯ãç¹ã«åçã«åä»ããããèšèªã§ã¯ãããããã®ããã©ãŒãã³ã¹ãªãŒããŒããããå°å ¥ããå¯èœæ§ããããŸãããã ãããã®ãªãŒããŒãããã¯ããšã©ãŒã®é²æ¢ãšããã¡ãªãããšæ¯èŒãããšãã»ãšãã©ç¡èŠã§ããçšåºŠã§ãã
 - ã¬ã¬ã·ãŒã·ã¹ãã ïŒåå®å šæ§ãã¬ã¬ã·ãŒGASã«çµ±åããããšã¯ãã³ãŒãã®å€§å¹ ãªãªãã¡ã¯ã¿ãªã³ã°ãå¿ èŠã«ãªãå Žåãããããã課é¡ãšãªãå¯èœæ§ããããŸãã
 
ãã®åéã®ç ç©¶éçºã®ä»åŸã®æ¹åæ§ã«ã¯ã次ã®ãããªãã®ããããŸãã
- èªååæšè«ïŒæç€ºçãªå泚éã®å¿ èŠæ§ãæžãããããŒã¿åãèªåçã«æšè«ããæè¡ãéçºããŸãã
 - GASã®ããã®åœ¢åŒææ³ïŒåœ¢åŒææ³ãé©çšããŠãGASã®æ£ç¢ºæ§ãšåå®å šæ§ãæ€èšŒããŸãã
 - è©äŸ¡é ç®éçºã®ããã®åå®å šAPIïŒæè²è ãè©äŸ¡é ç®ãäœæããã³ç®¡çããããããåå®å šAPIãäœæããŸãã
 - æ©æ¢°åŠç¿ãšã®çµ±åïŒåé¢é£ãšã©ãŒãèªåçã«æ€åºããã³é²æ¢ããããã®æ©æ¢°åŠç¿æè¡ãçµã¿èŸŒã¿ãŸãã
 
çµè«
åå®å šæ§ã¯ãæ±çšè©äŸ¡ã·ã¹ãã ïŒGASïŒã®èšèšãšå®è£ ã«ãããŠéèŠãªèæ ®äºé ã§ããåé¢é£ã®ãšã©ãŒãé²ãããšã«ãããåå®å šæ§ã¯æè²è©äŸ¡ã®ä¿¡é Œæ§ãåŠ¥åœæ§ãã»ãã¥ãªãã£ãåäžãããåŠçãå ¬å¹³ãã€æ£ç¢ºã«è©äŸ¡ãããããšãä¿èšŒããŸããåå®å šæ§ãå®è£ ããããšã«ã¯ããã€ãã®èª²é¡ããããããããŸããããã¡ãªããã¯ã³ã¹ããã¯ããã«äžåããŸããéçåä»ããæ€èšŒã䌎ãåçåä»ããããŒã¿ãµãã¿ã€ãŒãŒã·ã§ã³ãäŸå€åŠçãããã³å³æ Œãªãã¹ããå«ãå€è§çãªã¢ãããŒããæ¡çšããããšã«ãããéçºè ã¯å ç¢ã§ä¿¡é Œæ§ãé«ããå®å šãªGASãæ§ç¯ã§ããŸããGASãã°ããŒãã«æè²ã®ç¶æ³ã§ãŸããŸãæ®åããã«ã€ããŠãæè²è©äŸ¡ã®åè³ªãšæŽåæ§ã確ä¿ããããã«ãåå®å šæ§ãåªå ããããšãäžå¯æ¬ ã«ãªãã§ãããã