
Gerrit Rietveldã«ããèµ€ãšéã®æ€ åïŒ1918ïŒ
Badooã«ã¯C / C ++ããã°ã©ããŒéšéããããŸãã éšéã¯éåžžã«å°èŠæš¡ã§ããããããã®åŸæ¥å¡ã¯éåžžãç°ãªããããžã§ã¯ãã«åŸäºããŸãããäŸå€çãªå Žåã«ã®ã¿äº€å·®ããŸãã
ãã®ç¶æ³ã®ãã€ãã¹ã®çµæã®1ã€ã¯ã ãã¹ãã¡ã¯ã¿ãŒã§ãã ãã®åé¡ããã®ä»ã®åé¡ã解決ããããã«ãã³ãŒãã¬ãã¥ãŒã·ã¹ãã ïŒEngãCode reviewïŒãå®éšçã«å°å ¥ããããšã決å®ãããŸããã
ã³ãŒãæ¹èšã·ã¹ãã ã®åºæ¬çãªèŠä»¶ã¯æ¬¡ã®ãšããã§ãã
- ããŒã«ã«ã€ã³ã¹ããŒã«ã
- ã€ã³ã¹ããŒã«ãšç®¡çã®æå°éã®åŽå;
- æ倧ã®äœ¿ãããã;
- ãããžã§ã¯ããžã®ã¢ã¯ã»ã¹ã®å·®å¥åã
- GitãµããŒã
- ç¡æïŒãã®ãããžã§ã¯ãã®å®éšã¹ããŒã¿ã¹ã«ããïŒã
ããã€ãã®ãªãã·ã§ã³ïŒ Rietveld ã ReviewBoard ã Gerrit ïŒãæ€èšããçµæ ã Gerritãã€ã³ã¹ããŒã«ããŠäœæ¥ã®æºåãããã®ãæãç°¡åã§ããããã«æãããŸããã ãã®ããããã®ã·ã¹ãã ã®äœ¿çšã«é¢ããå°ããªã¬ã€ããäœæããããšã«ããŸããã
æŽå²ãã¢ãŒ
ãªãŒãã³ãœãŒã¹ã®äžçã§ã¯ããããããšã§ãããGerritã¯å¥ã®ãããžã§ã¯ãã®ãããã»ãããšããŠç»å ŽããŸããã å ã ã®ç®æšã¯ãPythonã®èè ã§ããGuido van RossumïŒãªã©ã³ãèªïŒ Guido van Rossum ïŒã«ãã£ãŠPythonã§èšè¿°ãããã³ãŒããªããžã§ã³ã·ã¹ãã ã§ããRietveldã«ACLãµããŒããè¿œå ããããšã§ããã Guidoã¯Rietveldã³ãŒããè€éã«ããããªããšããäºå®ã®ãããåŸè ã®ãã©ãŒã¯ã¯Gerritãšããååã§ç»å ŽããŸããã
Gerritã¯åŸã«PythonããJavaã«æžãçŽãããå®å šã«ç¬ç«ãããããžã§ã¯ãã«ãªããŸããã çŸåšãGerritã¯eBayãSonyãCouchbaseãMediaWikiãRockboxãQtãªã©ã®äŒæ¥ãšãããžã§ã¯ãã䜿çšããŠããŸãããæãæåãªGerritãŠãŒã¶ãŒã¯ããããAndroidéçºãããžã§ã¯ãã§ãGerritãšæžãããŸããã
ãšããã§ãããã§ãããžã§ã¯ãåã®èª¬æãèŠã€ããããšãã§ããŸãïŒ http : //en.wikipedia.org/wiki/Gerrit_Rietveld
åäœåç
Gerritã®éçºã¯æ¬¡ã®ãšããã§ãã
- ãªããžããªã¯Gerritã§äœæãããŸãã
- éçºè ã¯ãGerritãããªããžããªãè€è£œããŸãïŒãŸãã¯git remoteãæ¢åã®ãããžã§ã¯ãã«è¿œå ããŸãïŒã
- git pushã䜿çšããŠãéçºè ã¯å€æŽãéä¿¡ããŠããªããžããªã®ç¹å¥ãªãã©ã³ãã®ã³ãŒããä¿®æ£ããŸãã
- Gerritã¯ãå€æŽã¬ã³ãŒãããšã«åå¥ã®ããã±ããããäœæããç£æ»äººã¯ãããã³ã¡ã³ããé©çšããŸãã¯æåŠã§ããŸãã
Gerritã§ã¢ã¯ã»ã¹ã·ã¹ãã ãèšå®ããããšã«ãããéçºè ãã³ãŒããªããžã§ã³ããã€ãã¹ããŠå€æŽãéä¿¡ããããšãé²ãããããç£æ»äººã®ã¿ã«ä»»ããããšãã§ããŸããããã¯ç§ãã¡ã«ãšã£ãŠéåžžã«é©ããŠããŸãã
ã€ã³ã¹ããŒã«ãšã»ããã¢ãã
Gerritãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯WARã¢ãŒã«ã€ãã®åœ¢ã§é åžãããŠãããããã€ã³ã¹ããŒã«ã¯éåžžã«ç°¡åã§ãïŒããŒã¿ããŒã¹ã®äœæïŒMySQLãPostgreSQLãçµã¿èŸŒã¿H2ããµããŒããããŠããŸãïŒããŠãŒã¶ãŒã®ã·ã¹ãã ãžã®è¿œå ããµã€ãã®åæåãWebãµãŒããŒã®èšå®ã Badooã¯äŒçµ±çã«nginxã䜿çšãããããèšå®ããŸããã nginx.confã§ã¯ã次ã®ããã«ãªããŸãã
server { listen 80; server_name gerrit; rewrite ^(.*) https://$server_name$1 permanent; } server { listen 443; server_name gerrit; add_header Strict-Transport-Security max-age=15768000; ssl on; ssl_certificate /local/nginx/conf/cert/gerrit.crt; ssl_certificate_key /local/nginx/conf/cert/gerrit.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:1m; ssl_protocols TLSv1; ssl_ciphers HIGH:!ADH; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; auth_basic "Restricted"; auth_basic_user_file htpasswd; } }
ã€ã³ã¹ããŒã«ã®è©³çŽ°ã¯ããã¥ã¡ã³ãã«èšèŒãããŠããããã詳现ã«ã¯è§Šããã代ããã«GerritãŠã§ãã€ã³ã¿ãŒãã§ãŒã¹ã®èª¬æã«çŽæ¥é²ã¿ãŸãã
ããã¯ãæåã®ã€ã³ã¹ããŒã«çŽåŸã®æåã®GerritããŒãžã®å€èŠ³ã§ãã

çŸåšãGerritã¯ããŒã«ã«èªèšŒããµããŒãããŠããŸããã OpenIDãHTTP Basic / DigestèªèšŒ ãããã³Computer Associates Siteminder ïŒåçšã®ãã·ã³ã°ã«ãµã€ã³ãªã³ããœãªã¥ãŒã·ã§ã³ïŒã®ãµããŒãããããããã ãã§ãã å€éšæ¿èªã䜿çšãããšãã決å®ã¯ããªãŒãã³åå ã®ãããžã§ã¯ãã§ã¯éåžžã«è«ççã§ããããã®å Žåããã®çãããå©äŸ¿æ§ã«ãããããããHTTPèªèšŒãå¯äžã®å¯èœãªãªãã·ã§ã³ã§ãã
Gerritãå§ããã
é»åã¡ãŒã«ãšSSHã®å ¬éããŒãè¿œå ããŠã·ã¹ãã ã«ç»é²ãããšãäœæ¥ãéå§ã§ããŸãã
ãŸããGerritã§æ°ãããããžã§ã¯ããäœæããå¿ èŠããããŸãã

ãããžã§ã¯ãäœæãã©ãŒã ã§ãç¶æ¿ããæš©éãããã«éžæã§ããŸããããã¯ãäžè¬çãªæš©éãæã€ãããžã§ã¯ããäœæãããšãã«åœ¹ç«ã¡ãŸãã ããã©ã«ãã§ã¯ãå ±éã®æš©å©ïŒ All-Projects ïŒãç¶æ¿ãããŸãã
è¿œå ã®ãããžã§ã¯ãèšå®ãæå®ããããšãã§ããŸãã

ã³ã³ãœãŒã«ã«ç§»åããGitãçŽæ¥æäœããŸãã
$ git clone ssh://gerrit:29418/test_project.git Cloning into test_project... warning: remote HEAD refers to nonexistent ref, unable to checkout.
èŠåã¯ç¡èŠã§ããŸãããããªãæ£åœåãããŠããŸãïŒãªããžããªã«ã¯ãªããžã§ã³ãå«ãŸããŠããŸããïŒããç§ãã¡ã«ãšã£ãŠã¯ãŸã£ãã圹ã«ç«ã¡ãŸããã å¥åŠãªããŒã29418ã«é©ããªãã§ãã ãã-Gerritã¯ç¬èªã®SSHãµãŒããŒãšGitïŒJavaã®JGitïŒãå®è£ ããŠããŸãã
ã³ãŒãã®æåã®ãã¡ã€ã«ãšæåã®ãªããžã§ã³ãäœæããŸãã
$ cd test_project $ echo âtestâ > README $ git add README $ git commit README -m âfirst commitâ [master (root-commit) b1f69cf] first commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README
ãã¹ãŠã®ãããžã§ã¯ãã®ããã©ã«ãã®æš©éã¯ãã³ãŒããªããžã§ã³ã·ã¹ãã ããã€ãã¹ããŠãµãŒããŒã«å€æŽãéä¿¡ããããšãèš±å¯ããªãããããã®æ®µéã§ã³ãã³ã `git push origin master`ã¯æ¬¡ã®ãšã©ãŒã§çµäºããŸãã
$ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 224 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://gerrit:29418/test_project.git ! [remote rejected] master -> master (can not create new references) error: failed to push some refs to 'ssh://gerrit:29418/test_project.git'
ç§ãã¡ã®ç®æšã¯ãç£æ»äººãåžžã«ã³ãŒããã¬ãã¥ãŒããŠæ¿èªããããšã確èªããããšã§ãããã ãããã£ãŠã次ã®ããã«ãµãŒããŒã«å€æŽãéä¿¡ããå¿ èŠããããŸãã
$ git push origin HEAD:refs/for/master Counting objects: 3, done. Writing objects: 100% (3/3), 224 bytes, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: New Changes: remote: https://gerrit/337 remote: To ssh://gerrit:29418/test_project.git * [new branch] HEAD -> refs/for/master
æ§ããã«èšã£ãŠããã³ãã³ãæ§æã¯æã䟿å©ã§ã¯ãªãããšã«æ³šæããŠãã ããã ãã ããããã¯æ¬¡ã®èšå®ã§ç°¡åã«ä¿®æ£ã§ããŸãã
$ git config branch.master.merge refs/for/master
ããã§ãå€æŽã¯ãµãŒããŒã«æ£åžžã«éä¿¡ãããŸããããããã«ã¯ãªããžããªã«å±ããŸããã§ããã 代ããã«ããµãŒããŒäžã®èå¥å337ã䜿çšããŠå€æŽãäœæãããŸãããããã¯ãGerrit Webã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠè¡šç€ºããã³æ¿èªã§ããŸãïŒGerritåºåã®ãªã³ã¯ã«æ³šæããŠãã ããïŒã

ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ãç¹å®ã®å€æŽã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãšã¢ã¯ã·ã§ã³ã確èªã§ããŸãã å¿ èŠã«å¿ããŠãè¿œå ã®ç£æ»äººïŒãã®å Žåã¯éç¥ãåããïŒãè¿œå ãããã確èªïŒ ã¬ãã¥ãŒ ïŒããããå€æŽãæåŠïŒ å€æŽãç Žæ£ ïŒãããã§ããŸãã ãŸãããããžã§ã¯ãã®ãã§ãã¯ã¢ãŠã ã ãã«ããã§ãªãŒããã¯ããŸãã¯ãã®å€æŽã®ãããã®åä¿¡ãªã©ãç°¡åãªãã³ããŒ/貌ãä»ããçšã®æ¢è£œã®ã³ãã³ãããã¹ãããããŸãã
åœç¶ãåå€æŽã«ã³ã¡ã³ããè¿œå ã§ããŸããããã¯[ ã¬ãã¥ãŒ]ããŒãžã§è¡ãããŸããå ã«é²ã¿ãŸãããã

ããã§ã¯ãå€æŽè©äŸ¡ãã©ãŒã ãçŽæ¥èŠãããšãã§ããŸãã ãã®åçã§ã¯ã5ïŒ-2 / -1 / 0 / + 1 / + 2ïŒã®ãã¡3ïŒ-1 / 0 / + 1ïŒã®è©äŸ¡ãããããŸããã ããã¯ããã¹ããŠãŒã¶ãŒã®Philip J. Fryããã®ãããžã§ã¯ãã«å¯Ÿããæ祚暩ãæããªãããã«çºçããŸããã
è©äŸ¡-1 / + 1ã«ã¯æšå¥šã¹ããŒã¿ã¹ããããå€æŽã®åãå ¥ããŸãã¯æåŠã«ã¯åœ±é¿ããŸããããããã£ãŠãããã©ã«ãã§ã¯ããã¹ãŠã®ç»é²ãŠãŒã¶ãŒã«ãããã眮ãæš©å©ããããŸãã 決å®çãªã®ã¯ã -2ãš+2ã®è©äŸ¡ã§ãïŒãããã-1 / + 1ã¯èŠçŽãããŸããããããã¯èªåã¹ã¯ãªããã䜿çšããŠå®è¡ã§ããŸãïŒ- +2ã®è©äŸ¡ã¯å€æŽãé©çšã§ãã -2ã®è©äŸ¡ã¯å€æŽããããã¯ããå€æŽãé©çšããããŸã§é©çšã§ããŸãããã®åé€ïŒä»»æã®æ°+2ã®ååšã«ããããããïŒã æ祚ã·ã¹ãã ã®è©³çŽ°ãªèª¬æã¯ãããã¥ã¡ã³ãã«ãããŸã ã
ãŠãŒã¶ãŒã«æ±ºå®çãªæš©å©ãäžãããšåæã«ãGerritã®æš©å©ã·ã¹ãã ã説æããŸãã ãŸããã°ã«ãŒããäœæããå¿ èŠããããŸããã°ã«ãŒããäœæãããšããããžã§ã¯ãã®å€æŽãè©äŸ¡ã§ããŸãã ãããè¡ãã«ã¯ã[ã°ã«ãŒã]ã¿ãã«ç§»åããŸããäžçªäžã«ã¯ãæ°ããã°ã«ãŒããäœæããããã®ãã©ãŒã ããããŸãã ãã¹ããŠãŒã¶ãŒã¯ãã®ã°ã«ãŒãã®ã¡ã³ããŒã«èªåçã«è¿œå ãããŸãããä»ã®ãŠãŒã¶ãŒãè¿œå ããå¿ èŠãããå Žåã¯ãååãå ¥åããã ãã§ãGerritãããã³ãã衚瀺ãããŸãã

ãã®åŸãæ°ãããã¹ãã¬ãã¥ãŒã¢ã°ã«ãŒãã«ã¯ããã®ãããžã§ã¯ããžã®å€æŽãæ¿èªãŸãã¯æåŠããæš©å©ãäžããå¿ èŠããããŸãã [ ãããžã§ã¯ã ]ã¿ãã§ã ãããžã§ã¯ã ã[ ã¢ã¯ã»ã¹ ]ã¿ããéžæãã[ ç·šé ]ãã¿ã³ãã¯ãªãã¯ããŸãã

ãã®ããŒãžã§ã¯ãæš©éãšãã®ãã©ã¡ãŒã¿ãŒãå€æŽã§ããŸãã ãã®å Žåã ãã¹ãã¬ãã¥ãŒã¢ãŒã« -2ãã+2ãŸã§ã®è©äŸ¡ïŒ Label Code-Review ïŒãäžããæš©å©ãäžããŸãããã®æš©å©ã¯ãããžã§ã¯ãã®ãã¹ãŠã®ãã©ã³ãã«æ¡åŒµãããŸãã åæã«ãåãã°ã«ãŒãã«å€æŽãé©çšããæš©å©ïŒ Submit ïŒãä»äžããŸãã æ°ããç¹æš©ãè¿œå ããåŸãå€æŽããŒãžã«æ»ããŸãã ããã«å€ãã®ãªãã·ã§ã³ã衚瀺ãããããã«ãªããŸããã

ã芧ã®ãšããããŸãã決å®çãª+2ããã³-2ãå«ããå€æŽã®è©äŸ¡ããŠãŒã¶ãŒã«æäŸããæ©äŒããããŸãã 次ã«ã çºè¡ãšéä¿¡ãã¿ã³ã衚瀺ããããŠãŒã¶ãŒãå€æŽãé©çšã§ããŸãã
ç¹æš©ã·ã¹ãã
Gerritã«ã¯è€éãªç¹æš©ã·ã¹ãã ããããŸãã åç¹æš©ã¯ãŠãŒã¶ãŒã®ã°ã«ãŒãã«ä»äžã§ããåæã«ãã®ã¢ã¯ã·ã§ã³ã®ç¯å²ããªããžããªã®ç¹å®ã®ãã©ã³ãã®ãã¬ãŒã ã¯ãŒã¯ã«å¶éã§ããŸãã åæã«ã管çè ã¯æ°ããç¹æš©ãäœæã§ããŸãïŒ ããã¥ã¡ã³ãã«ã¯ãèäœæš©ããã§ãã¯ããäŸã瀺ããŠããŸãïŒã
ããã©ã«ãã§äœ¿çšå¯èœãªç¹æš©ã®ãªã¹ãïŒ
*ã©ãã«ç¢ºèªæžã¿ -å€æŽããã§ãã¯æžã¿ãšããŠããŒã¯ããæ©èœã
ãã®ã«ããŽãªã¯ãAndroidãããžã§ã¯ãå°çšã«è¿œå ããããã®ã§ãããå€æŽã«ãã£ãŠãããžã§ã¯ãã®ã¢ã»ã³ããªãäžæãããããšã¯ãªãããã¹ãã«åæ Œããããšãæå³ããŸãã ãã®ã«ããŽãªã¯åœ¹ã«ç«ããªãã£ããããåé€æ¹æ³ã«ã€ããŠã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã
*ã©ãã«ã³ãŒãã¬ãã¥ãŒ -å©çšå¯èœãªè©äŸ¡ã®ç¯å²ïŒ-2ãã+2ïŒãæå®ããæ©èœãåããã³ãŒãã®çŽæ¥æ¹èšã
*åç §ã®äœæ -ãªããžããªã«ãªã³ã¯ããã©ã³ããã¿ã°ãäœæããæ©èœã
* Forgeäœæè / Forgeã³ããã¿ãŒ/ ForgeãµãŒã㌠-ä»ã®äººããã®å€æŽããåœé ãããæ©èœã Gerritã¯éåžžãäœæè ã®ã¡ãŒã«ã¢ãã¬ã¹ãç»é²æžã¿ã¢ãã¬ã¹ã®1ã€ãšäžèŽããããšãèŠæ±ããŸãããããã¯ãã®ç¹æš©ã§åé¿ã§ããŸãã éåžžãæ¢åã®ãªããžããªãGerritã«ã€ã³ããŒããããšãã«ã®ã¿å¿ èŠã§ãã
*ææè -ãã®ãããžã§ã¯ãã®æš©éãçºè¡/å€æŽããæš©éããããžã§ã¯ãã®èª¬æãå€æŽããæš©éããªããžããªå ã®ãã©ã³ããåé€ããã³äœæããæš©éãäžããŸãïŒWebã€ã³ã¿ãŒãã§ã€ã¹ã®ã¿ã䜿çšïŒã
*ããã·ã¥ -å€æŽïŒEngãCommitïŒããªããžããªã«æžã蟌ãæš©å©ã refs / *ã§ã®ã³ãããã®ç¹æš©ã¯ãã³ãŒããªããžã§ã³ã·ã¹ãã ããã€ãã¹ããŠããªããžããªã«å€æŽãçŽæ¥è¿œå ããæš©å©ãäžããŸãã
*ããã·ã¥ããŒãžã³ããã -ãŠãŒã¶ãŒããã©ã³ããããŒãžã§ããããã·ã¥ãžã®è¿œå ã
*泚éä»ãã¿ã°ã®ããã·ã¥ -ããã·ã¥ãžã®è¿œå ãä»åã¯ããªããžããªã«ã¿ã°ãè¿œå ã§ããŸãã
*èªã¿åã -ãªããžããªå ã®ã³ãŒããã·ã¹ãã ã®å€æŽãããã³ãããã«å¯Ÿããã³ã¡ã³ããèªã¿åãæš©å©ã ããã©ã«ãã§ã¯ãã·ã¹ãã ã«ç»é²ãããŠãããã¹ãŠã®ãŠãŒã¶ãŒã«èš±å¯ãããŠããŸãã
*éä¿¡ -ãªããžããªã«å€æŽãé©çšããæš©å©ã
ç®æšã«åºã¥ããŠããããžã§ã¯ãã«æ¬¡ã®æé©ãªæ§æãéžæããŸããã

ãããã£ãŠããã³ããã¿ãŒãã¯ãã³ãŒããªããžã§ã³ãç®çãšãããªããžããªã®éšåã«ãã©ã³ãããŒãžãè¿œå ãïŒãªããžããªã«çŽæ¥ã§ã¯ãªãïŒãã¿ã°ãšå€æŽèªäœãäœæããŠããã«æ€èšããããšãã§ããŸãã ãŸããç£æ»äººã¯å€æŽã確èªããŠé©çšã§ããŸãã
çµè«ã®ä»£ããã«
Gerritã¯ããã®èšäºã®èè ã«ããªãè€éãªå°è±¡ãæ®ããŸããã
äžæ¹ã§ããã®æ©èœã®ããã€ãã¯ãæçœã§ã¯ãªããäžäŸ¿ã§ãããããŸã£ããååšããŸãããããã¯äžè¬ã«ãèšäºã®ã¿ã€ãã«ã«æãããŠããå¥åŠãªæ€ åã«éåžžã«ãã䌌ãŠããŸãã ããšãã°ãã€ã³ã¿ãŒãã§ã€ã¹ããã°ã«ãŒããåé€ããããšã¯ã§ããŸããããããžã§ã¯ãã³ãŒãã衚瀺ããæ¹æ³ã¯ãããŸãããæè¿ãŸã§ãSSHãä»ããŠã®ã¿ãã©ãŠã¶ããæ°ãããããžã§ã¯ããäœæããããšããäžå¯èœã§ããã ãŸããå€ãã®ç®¡çæ©èœã¯ããŒã¿ããŒã¹ã§çŽæ¥å®è¡ããå¿ èŠããããããã«ã¯åé¡ã䌎ããŸãã Gerritèªäœã«ãŠãŒã¶ãŒç®¡çããªãããšãè¯ããããŸããã äžè¬ã«ã ãã®ãªã¹ãã確èªããå€ãã®æ¬ ç¹ããããŸã ã
äžæ¹ãGerritã¯çŽæ¥çãªæ©èœãæ£åžžã«æãããæåã®ç¥äººãšã»ããã¢ããã«ãã°ããæéãè²»ãããåŸãéçºè ããã®æ³šæãå¿ èŠãšããŸããã
çµè«ãšããŠãç§ãã¡ã¯Gerritãå®è£ ããåœåã®ç®æšã決ããŠéæãããªãã£ãããšãèªããªããã°ãªããŸãã-ãããèŠãã ãã§ãããžã§ã¯ãã®è°è«ã«åå ãããã³ãŒãããªããããªã®ãç解ããŠããªãéçºè ã³ãŒããã玹ä»ãããããšããã®ã¯ç¡æå³ã§ã圌ã¯ãã®ãŸãŸã§ãã ããããã³ãŒããªããžã§ã³ã·ã¹ãã ã¯ãéçºè ããããžã§ã¯ãå šäœã«è²¬ä»»ãæã¡ãä»ã®äººã®å€æŽãæ€èšãããææè ããšãå€æŽãçŽæ¥é©çšããããšãªããããžã§ã¯ãã«å€æŽãéä¿¡ã§ãããåå è ãã«åå²ã§ããæ¢åã®ãããžã§ã¯ãã®å Žåã«éåžžã«æ©èœããŸãã ãããã£ãŠããã¹ãŠã®æ¬ ç¹ã«ãããããããç§ãã¡ã®éšéã¯Gerritãæ¡çšããçŸåšé²è¡äžã®ãã¹ãŠã®ãããžã§ã¯ãã«Gerritã䜿çšããŠããŸãã
ã¢ã³ãã³ã»ããŽã¬ã«ãéçºè
ããã¥ãŒäŒç€Ÿ