1. C++ã©ã€ãã©ãªã®åºæ¬æŠå¿µ
æ¬ç« ã§ã¯ãC++èšèªã«ãããã©ã€ãã©ãªã®åºæ¬çãªæŠå¿µãåãäžããã³ã³ãã¥ãŒã¿ããã°ã©ãã³ã°ã«ããããã®éèŠãªæŠå¿µã«ã€ããŠãããããã解説ããŸãã
1.1 ã©ã€ãã©ãªãšã¯äœã
ã©ã€ãã©ãªãšã¯ãç¹å®ã®æ©èœãæã€ã³ãŒãã®ã»ããã§ãä»ã®ããã°ã©ã ããåŒã³åºãããšãã§ããŸããäžåºŠå®çŸ©ããã©ã€ãã©ãªã䜿çšããããšã§ãåãã³ãŒããäœåºŠãæžãå¿ èŠããªããã³ãŒãã®åå©çšæ§ãšçç£æ§ãåäžãããŸãã
C++ã©ã€ãã©ãªã¯ãæšæºã©ã€ãã©ãªãšãµãŒãããŒãã£ãŒæäŸã®ã©ã€ãã©ãªã«å€§å¥ãããŸããæšæºã©ã€ãã©ãªã¯C++ã®æšæºã«å«ãŸããŠããããµãŒãããŒãã£ãŒæäŸã®ã©ã€ãã©ãªã¯å€éšã®éçºè ãçµç¹ãæäŸããŠããŸãã
ãããã®ã©ã€ãã©ãªã¯ããããç¹å®ã®ã¿ã¹ã¯ãå¿«é©ã«å®è¡ããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ãããŒã¿æ§é ã®æäœããããã¯ãŒã¯éä¿¡ãã°ã©ãã£ãã¯ã®æç»ãªã©ã®æ©èœãæäŸããŸãã
1.2 C++ã§ã®ã©ã€ãã©ãªã®äœ¿çšæ¹æ³
C++ã§ã©ã€ãã©ãªã䜿çšããã«ã¯ãŸãã#includeãã£ã¬ã¯ãã£ããå¿ èŠã§ãã#includeãã£ã¬ã¯ãã£ãã䜿çšããŠãã©ã€ãã©ãªã®ããããŒãã¡ã€ã«ãããã°ã©ã ã«å«ããããšãã§ããŸããããã«ãããã©ã€ãã©ãªã§å®çŸ©ãããé¢æ°ãã¯ã©ã¹ã䜿ãããšãã§ããŸãã
ã©ã€ãã©ãªã®ããããŒãã¡ã€ã«ãå«ããããã«ã¯ã次ã®ããã«ããŸãã
#include
ããããŒãã¡ã€ã«åã¯ã< >ã§å²ãŸãã圢ã§ç€ºãããŸãã
1.3 åºæ¬çãªC++ã©ã€ãã©ãªã®äŸ
C++ã®åºæ¬çãªã©ã€ãã©ãªã«ã¯ãiosteamïŒå ¥åºåïŒãstringïŒæååæäœïŒãvectorïŒå¯å€é·é åïŒãšãã£ããã®ããããŸãã
iosteamã©ã€ãã©ãªã¯ãã³ã³ãœãŒã«äžã§ã®å ¥åºåã管çããããã«ããcoutãcinãšãã£ãæ©èœã䜿çšããããšãã§ããŸãã
stringã©ã€ãã©ãªã¯ãæååæäœãæ¯æŽããŸãã
1.4 C++æšæºã©ã€ãã©ãªã®ç¹åŸŽãšå©ç¹
C++æšæºã©ã€ãã©ãªã¯ãC++ã®æšæºã«å®ããããŠããã©ã€ãã©ãªã§ããããããã¯ã³ã³ãã€ã©ã«åã蟌ãŸããŠããŸãããã®ãããç¹å¥ãªç°å¢æ§ç¯ãã€ã³ã¹ããŒã«ãªãã«äœ¿çšããããšãã§ããŸãã
ãããã®ã©ã€ãã©ãªã¯åºç¯ã§ãæ§èœãšæè»æ§ã«åªããŠããŸããããã¯ãæšæºã©ã€ãã©ãªããã³ãã¬ãŒããšãžã§ããªã¯ã¹ã掻çšããŠèšèšãããŠããããã§ãã
ãŸããC++æšæºã©ã€ãã©ãªã¯ãäžè¬çã«ã¯ãšã©ãŒãå°ãªããšããããã®äœ¿çšã¯ã³ãŒãã®ä¿å®æ§ãšå®å®æ§ãåäžãããŸãã
2. C++ã©ã€ãã©ãªã®çš®é¡
C++ã®ã©ã€ãã©ãªã«ã¯å€§ããåããŠãæšæºãšéæšæºã®2ã€ã®çš®é¡ããããŸãããŸãããããã¯ããã«éçã©ã€ãã©ãªãšåçã©ã€ãã©ãªã«åå²ãããŸããããããã®ç¹æ§ãå©çšã·ãŒã³ã«ã€ããŠæ·±ãç解ããããšã§ãããå¹ççãªéçºãå¯èœãšãªããŸãã
2.1 æšæºã©ã€ãã©ãªãšéæšæºã©ã€ãã©ãªã®éã
C++ã®æšæºã©ã€ãã©ãªã¯C++ã®ä»æ§ã«å«ãŸããã³ã³ãã€ã©ã«çµã¿èŸŒãŸããŠããã©ã€ãã©ãªçŸ€ã®ããšãæããŸããåºæ¬çãªããŒã¿æ§é ãããŠãŒãã£ãªãã£ããã«ãã¹ã¬ãã察å¿ã®é¢æ°ãªã©å€å²ã«ãããæ©èœãæäŸãããŸãã
äžæ¹ãéæšæºã©ã€ãã©ãªã¯ãã®åã®éãæšæºã«å«ãŸããªãã©ã€ãã©ãªã§ãç¹å®ã®ã¿ã¹ã¯ãå¹ççã«å®æœããããã«äœããããã®ã§ããéæšæºã©ã€ãã©ãªã¯åŒ·åãªæ©èœãæããŠããŸããããã®äœ¿çšã«ã¯é¢é£ç¥èãå¿ èŠãªå ŽåããããŸãã
ãããã®éããç解ãããããžã§ã¯ãã«æé©ãªã©ã€ãã©ãªãéžæããããšãæ±ããããŸãã
2.2 éçã©ã€ãã©ãªãšåçã©ã€ãã©ãªã«ã€ããŠ
C++ã®ã©ã€ãã©ãªã¯ããªã³ã¯æ¹æ³ã«ããéçã©ã€ãã©ãªãšåçã©ã€ãã©ãªã®2ã€ã«åããããŸããéçã©ã€ãã©ãªã¯ã³ã³ãã€ã«æã«å®è¡ãã¡ã€ã«ã«çµã¿èŸŒãŸããäžæ¹ãåçã©ã€ãã©ãªã¯å®è¡æã«èªã¿èŸŒãŸããŸãã
éçã©ã€ãã©ãªã¯ã䜿çšããã©ã€ãã©ãªã® ã³ãŒãå šãŠãã¢ããªã±ãŒã·ã§ã³ã®ãã€ããªã«çµã¿èŸŒãŸãããããã©ã€ãã©ãªã®ããŒãžã§ã³å€æŽã«åŒ·ããé åžã容æã§ãã
äžæ¹ãåçã©ã€ãã©ãªã¯å®è¡æã«å¿ èŠãªã©ã€ãã©ãªãèªã¿èŸŒããããæŽæ°ãããŒãžã§ã³ã¢ãããæ軜ã§ãã¡ã¢ãªäœ¿çšéãåæžã§ããŸãããã©ã€ãã©ãªã®äºææ§ãé åžã«æ³šæãå¿ èŠã§ãã
2.3 ã©ã€ãã©ãªã®éžæåºæº
C++ã®ã©ã€ãã©ãªã®éžæã¯ããã®ã©ã€ãã©ãªãæäŸããæ©èœãæ§èœãå®å®æ§ããããŠã³ãã¥ããã£ã®æŽ»çºããªã©ãå€ãã®èŠçŽ ã«ãã決å®ãããŸãããããžã§ã¯ãã®èŠæš¡ãç®çãšåã£ãã©ã€ãã©ãªãéžæããŸãããã
ãŸããã©ã€ãã©ãªãéžã¶éã«ã¯ãã®ããã¥ã¡ã³ããŒã·ã§ã³ã®è³ªãæŽæ°é »åºŠãèæ ®ããããšãéèŠã§ãããŸããå¯èœãªéãåºã䜿çšãããŠããã©ã€ãã©ãªãéžæããããšã§ãæ å ±ãåŸãããå Žãå¢ããåé¡è§£æ±ºã容æã«ãªãã§ãããã
ãšã¯èšããå šãŠã®èŠçŽ ãæºããå®ç§ãªã©ã€ãã©ãªã¯ååšããªãã®ã§ãæçµçã«ã¯ãããã®åŒ·åŒ±ãæ¯èŒæ€èšããæãé©åããã©ã€ãã©ãªãéžæããããšãéèŠãšãªããŸãã
2.4 ãã䜿ãããC++ã®ã©ã€ãã©ãªäžèŠ§
éçºè ã®éã§äººæ°ã®ããC++ã®ã©ã€ãã©ãªã¯å€æ°ååšããŸãããããã§ã¯ãã®äžãã代衚çãªãã®ãããã€ã玹ä»ããŸãã
äŸãã°ãBoostã¯éåžžã«åºç¯ãªæ©èœãæäŸããŠãããå€ãã®C++éçºè ã«æçšãããŠããŸããä»ã«ã¯ãGUIéçºåãã®Qtãé«æ§èœãªæ°å€èšç®ã©ã€ãã©ãªã§ããArmadilloãªã©ããããŸãã
ãããã®ã©ã€ãã©ãªã掻çšããããšã§ãéçºå¹çã®åäžãã³ãŒãã®è³ªã®åäžãå®çŸããããšãå¯èœã§ãã
3. C++ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ãšèšå®
ãã®ç« ã§ã¯ãC++ãããžã§ã¯ãã§ã©ã€ãã©ãªã䜿ãå§ããããã®æé ã解説ããŸããã€ã³ã¹ããŒã«ããèšå®ãããã«äŸ¿å©ãªããã±ãŒãžç®¡çããŒã«ãšãã®åé¡è§£æ±ºæ¹æ³ãŸã§ã詳ããèŠãŠãããŸãããã
3.1 ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«æ¹æ³
C++ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããããã®äžè¬çãªæ¹æ³ã¯ããœãŒã¹ã³ãŒããããŠã³ããŒããããã«ãããŠã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããããšã§ããããããã©ã€ãã©ãªã«ãã£ãŠã¯ç°ãªãæé ãå¿ èŠãšããå Žåããããããå ¬åŒããã¥ã¡ã³ããŒã·ã§ã³ãåžžã«ç¢ºèªããããšãéèŠã§ãã
äŸãã°ãGitHubãªã©ã®ãã©ãããã©ãŒã äžã§å ¬éãããŠããã©ã€ãã©ãªã§ã¯ããªããžããªãã¯ããŒã³ããåŸã«ãæäŸãããŠãããã«ãã¹ã¯ãªãããå®è¡ããããšã§ã€ã³ã¹ããŒã«ã§ããŸãããã®å Žåããã«ãããŒã«ïŒgcc, cmakeçïŒãå¿ èŠã«ãªãããšãå€ããããäºåã«æºåããŠãããšè¯ãã§ãããã
ãŸããLinuxã§ã¯ããã±ãŒãžãããŒãžã£ïŒapt, yumçïŒãéããŠã©ã€ãã©ãªãããŠã³ããŒãããã€ã³ã¹ããŒã«ã§ããŸããããã«ãããäŸåé¢ä¿ã®è§£æ±ºãããŒãžã§ã³ç®¡çãªã©ã容æã«ãªããŸããä»ã®OSã§ã䌌ããããªæ©èœãæã£ãããŒã«ãæäŸãããŠããå ŽåããããŸãã
3.2 ãããžã§ã¯ãã§ã©ã€ãã©ãªã䜿çšããããã®èšå®
ã©ã€ãã©ãªããããžã§ã¯ãã§å©çšã§ããããã«ããããã®èšå®ã¯ã䜿çšãããã«ãã·ã¹ãã ãšã©ã€ãã©ãªèªäœã«ãããŸããããããäžè¬çã«ã¯ããããžã§ã¯ãã®ãã«ãèšå®ã§ã©ã€ãã©ãªã®ããããŒãã¡ã€ã«ãžã®ãã¹ãæå®ãããªã³ã«èšå®ã§ã©ã€ãã©ãªããªã³ã¯ããããã«èšå®ããŸãã
ç¹ã«å€ãã®C++ãããžã§ã¯ãã§äœ¿ããããã«ãã·ã¹ãã ã§ããCMakeã§ã¯ãfind_packageã³ãã³ãã䜿çšããŠã©ã€ãã©ãªãèŠã€ããtarget_link_librariesã³ãã³ãã䜿çšããŠã¿ãŒã²ãããšã©ã€ãã©ãªããªã³ã¯ããŸãã
ãããã®èšå®ãé©çšããããšã§ãã©ã€ãã©ãªã®é¢æ°ãã¯ã©ã¹ããããžã§ã¯ãã®ã³ãŒãå ã§ç°¡åã«åç §ããããå©çšãããããããšãå¯èœãšãªããŸãã
3.3 䟿å©ãªããã±ãŒãžç®¡çããŒã«
ããã±ãŒãžç®¡çããŒã«ã¯ã³ãŒãã£ã³ã°ã®äœæ¥å¹çãå€§å¹ ã«åäžãããŸããC++ã§ã¯Conanãvcpkgãªã©ããããŸãããããã®ããŒã«ã¯ã©ã€ãã©ãªã®ãã«ããäŸåé¢ä¿ã®ç®¡çãèªååããã³ã³ãã€ã©ãã¢ãŒããã¯ãã£éã§ã®äºææ§ã確ä¿ãã圹å²ãæãããŸãã
ããããã®ããŒã«ã¯æ§ã ãªã©ã€ãã©ãªã®ããŒãžã§ã³ããµããŒãããç¹ã«vcpkgã¯Windows, macOS, Linuxã§åäœããŸããããããã®ããã±ãŒãžç®¡çããŒã«ãæäŸããã©ã€ãã©ãªã®ãªã¹ãã¯å ¬åŒãŠã§ããµã€ããGitHubã§ç¢ºèªã§ããŸãã
ããã±ãŒãžç®¡çããŒã«ã¯ãã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ããã¢ããã°ã¬ãŒããã¢ã³ã€ã³ã¹ããŒã«ãŸã§ã®ã©ã€ããµã€ã¯ã«å šè¬ã管çããŸãããã®ãããªããŒã«ã䜿çšããããšã§ãéçºã®è€éããå€§å¹ ã«è»œæžãããããžã§ã¯ãã®ç¶æ管çã容æã«ããŸãã
3.4 ã€ã³ã¹ããŒã«ãèšå®ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ãèšå®æã«åé¡ãçºçããå ŽåããŸãã¯ã©ã®æé ã§ãšã©ãŒãçºçããã確èªããŸãããšã©ãŒã¡ãã»ãŒãžã¯åé¡ã®æããããæäŸããŠãããŸããããããäžååãªå Žåãåé¡ã®åçŸãä»ã®ãŠãŒã¶ãŒããã®æ¯æŽãåããããã«ãåé¡ã®è©³çŽ°æ å ±ãèšé²ããŸãã
åé¡ãçºçãããããŸãã¯å ¬åŒã®ããã¥ã¡ã³ããŒã·ã§ã³ãFAQããã§ãã¯ããæ¢ç¥ã®åé¡ãã©ãã確èªããŸããããã§ã解決ããªãå Žåãã©ã€ãã©ãªã®å ¬åŒãã©ãŒã©ã ãStackOverflowãªã©ã®ã³ãã¥ããã£ã«æçš¿ããŠæ¯æŽãæ±ããããšãæå¹ã§ãã
ãŸããåé¡ãããã±ãŒãžç®¡çããŒã«ã«é¢é£ããŠããå Žåã¯ããã®ããŒã«ã®å ¬åŒããã¥ã¡ã³ããŒã·ã§ã³ããµããŒããªãœãŒã¹ã確èªããŸããããå€ãã®å Žåãããã«ã¯äžè¬çãªåé¡ãšãã®è§£æ±ºçãèšèŒãããŠããŸãã
4. C++ã©ã€ãã©ãªã®äœ¿çšäŸ
C++ã®ã©ã€ãã©ãªã¯ãã³ãŒãã£ã³ã°ã®æéãšæéãç¯çŽããããå¹æçãªéçºãå¯èœã«ããŸããC++ã©ã€ãã©ãªã®å ·äœçãªäœ¿çšäŸãéããŠããã®å©äŸ¿æ§ãšå¹çæ§ããäŒãããŸãã
以äžã§èŠãããã«ãã©ã€ãã©ãªã®é©çšç¯å²ã¯åºããã°ã©ãã£ãã¯ã¹ãæ°åŠããããã¯ãŒã¯ããã°ã©ãã³ã°ãGUIéçºãªã©ãæ§ã ãªé åã§æŽ»çšãããŠããŸãã
ããããã®åéã§ä»£è¡šçãªã©ã€ãã©ãªãšããã®äœ¿çšäŸã«ã€ããŠèª¬æããŸãã
4.1 ã°ã©ãã£ãã¯ã¹é¢é£ã®ã©ã€ãã©ãªäœ¿çšäŸ
ã°ã©ãã£ãã¯ã¹é¢é£ã®ã©ã€ãã©ãªã¯ã2Dã3Dã®æç»ãæ軜ã«è¡ãããã«äœ¿çšãããŸããäŸãã°OpenGLã¯ãããŒããŠã§ã¢ã«äŸåããã«é«å質ãªã°ã©ãã£ãã¯ã¹ãæç»ããããã®ã©ã€ãã©ãªã§ãã
OpenGLãçšããã°ã3次å ã®ã¢ããªã³ã°ãã¢ãã¡ãŒã·ã§ã³ã圱ã®æç»ãªã©ãè€éãªã°ã©ãã£ãã¯ã¹è¡šçŸãã·ã³ãã«ãªã³ãŒãã§å®çŸã§ããŸãããã®ãããã²ãŒã ãããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ããŒã«ã®éçºã«é »ç¹ã«çšããããŸãã
å ·äœçã«ã¯ã3Dãªããžã§ã¯ãã®çæãé 眮ã移åãªã©ã®æäœãè¡ãããšãã§ããŸããããã«ãããèŠèŠçãªã¹ããŒãªãŒããªã³ã°ããè€éãªããŒã¿ã®èŠèŠåãå®çŸããŸãã
4.2 æ°åŠé¢é£ã®ã©ã€ãã©ãªäœ¿çšäŸ
次ã«æ°åŠé¢é£ã®ã©ã€ãã©ãªã¯ãåæ§ã«å€ãã®å Žé¢ã§æŽ»çšãããŠãããäŸãã°Boostã©ã€ãã©ãªã®äžã«ããMathã©ã€ãã©ãªã¯ãã®äžäŸã§ãã
Boostã®Mathã©ã€ãã©ãªãçšããã°ãå¹ åºãæ°åŠé¢æ°ãã¢ã«ãŽãªãºã ãå©çšã§ãã確çååžã®èšç®ãåçé¢æ°ãç¹æ®é¢æ°ã®è©äŸ¡ãæ°å€ç©åã埮åãªã©ãæ§ã ãªé«åºŠãªæ°åŠèšç®ãå¯èœã«ãªããŸãã
å ·äœçã«ã¯ãæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ã®å®è£ ãç©çã·ãã¥ã¬ãŒã·ã§ã³ãéèã¢ããªã³ã°ãªã©ã«ã䜿çšãããŠããŸãã
4.3 ãããã¯ãŒã¯ããã°ã©ãã³ã°ã®ã©ã€ãã©ãªäœ¿çšäŸ
ãããã¯ãŒã¯ããã°ã©ãã³ã°ã©ã€ãã©ãªã¯ããããã¯ãŒã¯éä¿¡ãç°¡åã«å®è£ ã§ãããããªé¢æ°ã®éãŸãã§ããäžè¬çã«ã¯Boost.Asioãªã©ããã䜿çšãããŸãã
Boost.Asioã¯éåæI/OåŠçã®ãµããŒãããããã¯ãŒã¯ããã°ã©ãã³ã°ã®äŸ¿å©ãªæ©èœãæäŸããŸãããŸããTCP/UDPãœã±ããã®ç®¡çãã¿ã€ããŒãã·ã°ãã«ã®ãã³ããªã³ã°ãªã©ãè¡ããŸãã
ãµãŒããŒ/ã¯ã©ã€ã¢ã³ãéã§ããŒã¿ãåãæž¡ãã¢ããªã±ãŒã·ã§ã³ã®éçºãããªã¢ã«ã¿ã€ã éä¿¡ãè¡ãWebã¢ããªã±ãŒã·ã§ã³ã®éçºãããŒã¿ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ããŒã«ã®å®è£ ãªã©ããããã¯ãŒã¯éä¿¡ã䌎ããšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®ã¢ããªã±ãŒã·ã§ã³ã容æã«æ§ç¯ããããšãã§ããŸãã
4.4 GUIéçºã®ã©ã€ãã©ãªäœ¿çšäŸ
æåŸã«ãC++ã§ã®GUIéçºã«äŸ¿å©ãªã©ã€ãã©ãªãšããŠã¯QtããããŸãã
Qtã¯ãã¯ãã¹ãã©ãããã©ãŒã ã®GUIã©ã€ãã©ãªã§ãããC++ã§æžãããã¢ããªã±ãŒã·ã§ã³ãæ§ã ãªãã©ãããã©ãŒã ã§åäœãããããšãã§ããŸãããŠã£ã³ããŠããã€ã¢ãã°ããã¿ã³ãªã©ã®ãŠã£ãžã§ãã矀ãšãã£ãåºæ¬çãªGUIéšåããããããã¯ãŒã¯æ¥ç¶ããã«ãã¹ã¬ããåŠçãªã©ã®é«åºŠãªæ©èœãæäŸãããŠããŸãã
ãã®ãããªæ©èœãé§äœ¿ããããšã§ããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ãã¡ãããåã蟌ã¿ã·ã¹ãã ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®éçºã«ã察å¿ããããšãã§ããŸãã
5. C++ã©ã€ãã©ãªã®äœæãšå ¬é
ãã®ç« ã§ã¯ãC++ã§èªåèªèº«ãèšèšã»éçºããã©ã€ãã©ãªãã©ã®ããã«å ¬éããã®ãã«ã€ããŠè©³ãã説æããŸããéçºãããã¹ããå ¬éãŸã§ã®ããã»ã¹ãç解ããããšã§ãèªèº«ã§ã©ã€ãã©ãªãäœæããéã®åèãšãªãã§ãããã
5.1 èªåã ãã®ã©ã€ãã©ãªãäœãæ矩
ãŸãåãã«ãèªåã ãã®ã©ã€ãã©ãªãäœæããæ矩ã«ã€ããŠèª¬æããŸããåå©çšæ§ãä¿å®æ§ããããŠã³ãŒãã®å¯èªæ§ãåäžãããããã«èªäœã©ã€ãã©ãªãäœã䟡å€ããããŸãã
æ©èœãåå©çšããããã®éèŠãªæ段ãšããŠãã©ã€ãã©ãªã®ååšã¯ç¡èŠã§ããŸãããäžåºŠäœæããé¢æ°ãã¯ã©ã¹ãã©ã€ãã©ãªã«ãŸãšããŠããã°ã䌌ããããªåŠçã§ãã®ã³ãŒããåå©çšããããšãå¯èœã«ãªããŸãã
ãŸããåé¡ãçºçãããšãã«ä¿®æ£ããç®æãäžã«æã«éçŽãããŠãããšãå šäœã®ä¿å®æ§ãåäžããŸããåæ§ã«ãã³ãŒãã®å šäœåãã©ã€ãã©ãªã«ãã£ãŠæŽçãããããšã§ããã®ã³ãŒãã®å¯èªæ§åäžã«ãå¯äžããŸãã
5.2 C++ã§èªåã®ã©ã€ãã©ãªãäœãæ¹æ³
ããã§ã¯ãC++ã§èªåèªèº«ãã©ã€ãã©ãªãäœãæ¹æ³ã«ã€ããŠè§£èª¬ããŸããé¢æ°ãã¯ã©ã¹ã®å®çŸ©ãããããŒãã¡ã€ã«ã«ãŸãšãããããã³ã³ãã€ã«ããããšã§ã©ã€ãã©ãªãäœæããããšãã§ããŸãã
å ·äœçãªæé ãšããŠã¯ããŸãã¯ããããŒãã¡ã€ã«(.hãŸãã¯.hpp)ã«é¢æ°ãã¯ã©ã¹ã®å®£èšãè¡ããŸãã次ã«ãœãŒã¹ãã¡ã€ã«(.cpp)ã§å®£èšããé¢æ°ãªã©ã®å®äœãå®çŸ©ããŸãããããŠãããããã³ã³ãã€ã«ããããšã§ã©ã€ãã©ãª(.aã.soãªã©)ãäœæãããŸãã
ãããã®äœæ¥ãéããŠãèªåèªèº«ã®æã§ã©ã€ãã©ãªãäžããäœãäžããããšã®ã§ããŸããç¬ç¹ã®ã³ãŒãããŸãšãããããåå©çšããããšã§å¹çããããã°ã©ãã³ã°ãè¡ãããšãå¯èœã«ãªããŸãã
5.3 ã©ã€ãã©ãªã®ãã¹ãææ³
èªäœããã©ã€ãã©ãªããã¹ãããæ¹æ³ã«ã€ããŠèª¬æããŸãããã¹ãã¯ã©ã€ãã©ãªãæ£ããåäœããããšã確èªããéèŠãªããã»ã¹ã§ãããã¹ããéããŠããšã©ãŒããã°ãæ©æã«çºèŠããä¿®æ£ããããšãã§ããŸãã
代衚çãªãã¹ããšããŠã¯ããŠããããã¹ãããããŸãããŠããããã¹ãã¯ãã³ãŒãã®ãåäœãããšã«ãã¹ããè¡ãæ¹æ³ã§ããããã§èšããåäœããšã¯ãäžã€ã®é¢æ°ãäžã€ã®ã¯ã©ã¹ãªã©ãç¬ç«ããŠãã¹ãå¯èœãªæå°ã®åäœãæããŸãã
ãŸããC++ã§èªäœã©ã€ãã©ãªããã¹ãããããã®ãã¬ãŒã ã¯ãŒã¯ãšããŠã¯ãGoogle Testãæåã§ããGoogle Testãå°å ¥ããŠãŠããããã¹ããè¡ãããšã§ãèªäœã©ã€ãã©ãªã®å質ã確ä¿ããããšãã§ããŸãã
5.4 èªäœã©ã€ãã©ãªã®å ¬éãšã©ã€ã»ã³ã¹
æåŸã«ãèªäœããã©ã€ãã©ãªã®å ¬éãšã©ã€ã»ã³ã¹ã«ã€ããŠèª¬æããŸããèªåã ãã§ãªããå€ãã®äººã«èªäœã©ã€ãã©ãªãå©çšããŠãããããã«ã¯å ¬éããããšãéèŠã§ãã
å ¬éã®å ŽãšããŠã¯ãGitHubãªã©ã®ãªãŒãã³ãœãŒã¹ãã¹ãã£ã³ã°ãµãŒãã¹ãå©çšãããŸãããããã®ãµãŒãã¹ã䜿ãããšã§ãèªäœã©ã€ãã©ãªãäžçäžã®äººã ã«å ¬éããããšãå¯èœã«ãªããŸãã
ãã ããå ¬éããéã«ã¯ã©ã€ã»ã³ã¹ãæèšããããšãéèŠã§ããã©ã€ã»ã³ã¹ã«ãã£ãŠãä»äººãããªãã®ã©ã€ãã©ãªãã©ã®ããã«å©çšã§ããããèŠå®ãããŸããã©ã€ã»ã³ã¹ã®éžã³æ¹ã«ã€ããŠã¯ãèªåã®ã©ã€ãã©ãªãã©ã®ããã«å©çšããŠããããããã«ãããŸãã
ãã®ããã«ãèªåã ãã®C++ã©ã€ãã©ãªãäœãããšã¯å€ãã®é¢ã§å€§ããªæ矩ãæã¡ãŸããæ¯éãšãåãçµãã§ã¿ãŠãã ããã
6. C++ã©ã€ãã©ãªã®æé©åãšããã©ãŒãã³ã¹ãã¥ãŒãã³ã°
C++ã©ã€ãã©ãªã®æé©åãšããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã¯ãããã°ã©ã ã®å®è¡å¹çãé«ããéèŠãªã¹ãããã§ããæé©åã¯ãããã°ã©ã ãããé«éã«åäœããããã«ã³ãŒãã調æŽããããã»ã¹ãæããŸããããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã¯ããœãããŠã§ã¢ã®æ§èœãåäžãããããã®ããã»ã¹ã§ãããŒããŠã§ã¢ã®å¶çŽã«å¯Ÿå¿ããªããã䜿ãããããšå¹çæ§ãä¿ã€ããã®æè¡ãå«ã¿ãŸãã
ããã§ã¯ãC++ã©ã€ãã©ãªã®éžæããã³ãŒãã®æé©åããã³ãããŒãã³ã°ãšãããã¡ã€ãªã³ã°ããããŠããã©ãŒãã³ã¹æ¹åã®ããã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠæãäžããŠãããŸãã
ãããããã¹ã¿ãŒããããšã§ãããªãã®C++ããã°ã©ã ã®ããã©ãŒãã³ã¹ãšå¹çæ§ãå€§å¹ ã«åäžãããããšãå¯èœã«ãªããŸãã
6.1 ã©ã€ãã©ãªéžææã®ããã©ãŒãã³ã¹èæ ®ç¹
ã©ã€ãã©ãªãéžæããéãããã©ãŒãã³ã¹ã¯éèŠãªèæ ®ç¹ã§ããããã©ãŒãã³ã¹ã¯ãã©ã€ãã©ãªãã©ã®ããã«åäœããã©ãã ãã®ãªãœãŒã¹ãæ¶è²»ããããæãèŠçŽ ã§ããç¹ã«ãåŸæ¥ã®ã©ã€ãã©ãªã§ã¯ã容éã®å€§ãããé床ãåé¡ãšãªãå Žé¢ããããŸãã
ãŸããã©ã€ãã©ãªã®éžæã«ãããŠã¯ããã®æ©èœæ§ãç¶æ管çã®å®¹æããææžåã®ç¶æ ãªã©ãéèŠãªèŠçŽ ã§ããå¹ççãªã©ã€ãã©ãªã®éžæã¯æçµçãªã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããŸãã
ããã©ãŒãã³ã¹ãæé©åããããã®é©åãªã©ã€ãã©ãªéžæãããéã«ã¯ãå ·äœçãªèŠä»¶ãšåããããéèŠãªæ§èœææšãç解ããŠããããšãéèŠã§ãã
6.2 ã©ã€ãã©ãªã䜿çšããã³ãŒãã®æé©å
C++ã©ã€ãã©ãªã䜿çšããã³ãŒãã®æé©åã¯ãã³ãŒããå¿ èŠãšãããªãœãŒã¹éãæžãããããã©ãŒãã³ã¹ãåäžãããŸããããã§ã¯ãé©åãªããŒã¿æ§é ã®éžæãã¡ã¢ãªç®¡çã䞊ååŠçã®æŽ»çšãªã©ãé¢ãã£ãŠããŸãã
ããŒã¿æ§é ã®éžæã¯ãããã°ã©ã ã®ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããŸããäžé©åãªããŒã¿æ§é ãéžæãããšãããã©ãŒãã³ã¹ãšã¡ã¢ãªã®äœ¿çšå¹çãå£åããŸãã
ãŸããC++ã©ã€ãã©ãªã䜿çšããã³ãŒãã®æé©åã«ã¯ãã¡ã¢ãªç®¡çãšäžŠååŠçã®æŽ»çšãéèŠã§ããé©åãªã¡ã¢ãªç®¡çã¯ãããã°ã©ã ã®ããã©ãŒãã³ã¹ãæ倧åããããã«äžå¯æ¬ ã§ããã䞊ååŠçã掻çšããããšã§ãè€æ°ã®ã¿ã¹ã¯ãåæã«å®è¡ããå šäœã®ããã©ãŒãã³ã¹ãåçã«åäžãããããšãå¯èœã«ãªããŸãã
6.3 ãã³ãããŒãã³ã°ãšãããã¡ã€ãªã³ã°
ãã³ãããŒãã³ã°ã¯ãããã°ã©ã ã®ããã©ãŒãã³ã¹ãè©äŸ¡ãããã®çµæãåºæºãšããŠæ¹åãå³ãæ¹æ³ã§ãããã®ããã»ã¹ã¯ãæ§èœã®ããªã¢ãæ確ã«ç¹å®ããé åããšã«ããã©ãŒãã³ã¹ãåäžãããæããããæäŸããŸãã
äžæ¹ããããã¡ã€ãªã³ã°ã¯ããã°ã©ã ã®åäœã詳现ã«èª¿æ»ããæ§èœã®ããã«ããã¯ãç¹å®ããããã»ã¹ã§ãããããã¡ã€ã©ã䜿çšããŠãã³ãŒãã®ã©ã®éšåãã©ãã ãã®æéãæ¶è²»ããŠããããå®éçã«ææ¡ããããšãå¯èœã§ãã
ãããã¯ããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã«äžå¯æ¬ ã§ããœãããŠã§ã¢ã®æé©åããµããŒãããŸãããã³ãããŒãã³ã°ãšãããã¡ã€ãªã³ã°ã䜿çšããŠãããã©ãŒãã³ã¹ãå®éåããã³ãŒãã®æé©åãå³ãããšãå¯èœã§ãã
6.4 ããã©ãŒãã³ã¹æ¹åã®ããã®ãã¹ããã©ã¯ãã£ã¹
ãŸããããã©ãŒãã³ã¹æ¹åã®ããã«ã¯ãã³ãŒããç°¡æœã«ä¿ã€ããšãéèŠã§ããç°¡æœãªã³ãŒãã¯ããããã°ã容æã§ãããã©ãŒãã³ã¹æ¹åãè¿œæ±ããããã§ãã
次ã«ãåé·ãªèšç®ãåé¿ããããšãå¿ èŠã§ããåãã£ãŠèšç®çµæãä¿åããŠããããšã§ãåãèšç®ãäœåºŠãç¹°ãè¿ãããšãé¿ããããŸãã
ããã«ãã©ã€ãã©ãªã®æ£ãã䜿çšæ³ãåŠã¶ããšãéèŠã§ããã©ã€ãã©ãªã«ã¯ãããããæé©ãªåäœãåŒãåºãããã®ææ³ããããŸãããã®ãããããã¥ã¡ã³ããŒã·ã§ã³ã確èªããŠãããããã®ã©ã€ãã©ãªã®å¹ççãªäœ¿çšæ³ãåŠã¶ããšãéåžžã«éèŠã§ãã
åèæç®
![](https://engineer-style.jp/img/common/enstyle_OGP.png)