
SEMrushã¯ããã€ãã®çç±ã§ãžã§ãŒã«ãŒã®ã¹ãã³ãµãŒã®äžã§éç«ã£ãŠããŸãã 第äžã«ãäºæ¥éšéïŒå瀟ã¯ããŒã±ãã£ã³ã°æ åœè åãã®ãã©ãããã©ãŒã ãéçºããŠããŸãã 第äºã«ã圌女ã®CTOã®JavaäŒè°ãžã®äŒç€Ÿã®åå ã«ããããªã¬ã°ã»ã¯ã©ã¹ããã¯Cã®æã§ç¥ãããŠããŸãã第äžã«ã圌女ã«ãšã£ãŠããã®ãžã§ãŒã«ãŒãæåã«ãªããŸãã
ããããã¹ãŠã®ãããäŒç€ŸãJavaãã©ã®ããã«äœ¿çšããŠããããéçºã¢ãããŒãå šäœãããã³äŒè°ããã®æåŸ ãå°ããããšã¯ããèå³æ·±ãã ãã§ããã ç§ãã¡ã話ããã®ã¯ä»¥äžã®ãšããã§ãã
- ãšã¬ãã»ããã¬ã³ã³ã人äºãžã§ãã©ãªã¹ã
- Oleg Krasnov ãCTO
- ã¢ãããªãŒããã³ã ãã·ãã¢Javaéçºè
ãšã¬ãã»ããã¬ã³ã³ïŒäººäºãžã§ãã©ãªã¹ãïŒ

-åœç€Ÿã§ã¯ãäœæ¥äžã®åé¡ã®ã»ãšãã©ã¯å人çãªã³ãã¥ãã±ãŒã·ã§ã³ã«ãã£ãŠæ±ºå®ãããŸãã ãããã£ãŠãç§ãã¡ã®ç®æšã®1ã€ã¯ããäºãã«ç¥ãåããèªåèªèº«ã«ã€ããŠè©±ããèå³ã®ãããããã¯ã«ã€ããŠJavaéçºè ãšãã£ããããããšã§ãã ããã«ãJoker Conferenceã®ãããªéèŠãªã€ãã³ãã®ãµããŒãã«åå ã§ããããšã倧å€ããããæããŸãã ç§ãã¡ã¯ããå€ãã®ãããã¯ãŒãã³ã°ã®ããã«ãè¯ããšç°ãªã:)
-æã«ã¯ITå°é家ã¯ãããŒã±ãã£ã³ã°ãã®æŠå¿µãå«ããŸã-ããŒã±ãã£ã³ã°ãã©ãããã©ãŒã ãè¡ã£ãŠãããšããäºå®ãæããŠããŸããïŒ
-ãããŒã±ãã£ã³ã°ãã®æŠå¿µãã®ãã®ãææ¢åã§ããå¯èœæ§ãé«ãã§ããããã®èšèã®èåŸã«ãããã®ãæ確ã§ã¯ãããŸããã ããããç§ãã¡ã¯ããŒã±ãã£ã³ã°äŒç€Ÿã§ã¯ãªããITäŒç€Ÿã§ãã ç§ãã¡èªèº«ã¯ããŒã±ãã£ã³ã°ã«åŸäºããŠããŸãããããã®åéã®å°é家ãŸãã¯åžå Žã§ã®å°äœãç解ããã人ã®ããã®ãã€ãã¯ãªã³ã©ã€ã³ãã©ãããã©ãŒã ã®éçºã«åãçµãã§ããŸãã
ãããŠç§ãã¡ã«ãšã£ãŠéèŠãªããšã¯ãæœåšçãªååãç§ãã¡ã«æ¥ã補åé åã§ã¯ãªãã圌ãç§ãã¡ã®ä»äºã®ã¢ãããŒãã«åæãããã©ããã§ãã ç§ãã¡ã¯éçºããŒã ã«ææ決å®ã®æ倧éã®èªç±ãäžããããšããŠããŸã-ãããŠã補åãšéçºããã»ã¹ã«å¯ŸããŠå®å šãªè²¬ä»»ãè² ãæºåãã§ããŠãã人ã ãšããŸãååããäž¡æ¹ã®å質ã®æ¹åã«åãçµãã§ããŸãã åè£è ãšã³ãã¥ãã±ãŒã·ã§ã³ããšãéã«ã¯ããã®ç«å Žãã§ããéãæ確ã«ããããšããŸãã
-SEMrushã«ã¯4ãåœã«ãªãã£ã¹ããããéçºè ã¯ã©ãã«ããŸããïŒäž»ã«Javaã«èå³ããããŸãïŒïŒ
-ç§ãã¡ã¯ããµã³ã¯ãããã«ãã«ã¯ããã©ãïŒãã§ã³å ±ååœïŒããªããœãŒã«ïŒãããã¹ïŒã§éçºãé²ããŠããŸãã ãµã³ã¯ãããã«ãã«ã¯ã§æãå€ãã®Javaã³ãã³ãããããŸããçŸåš7ã€ã®ã³ãã³ãããããŸãã æ¥å¹Žã¯ãã®éé¡ãåã«ããäºå®ã§ãã ãŸããJavaéçºè ã¯ãªããœãŒã«ã®ãªãã£ã¹ã§åããŠããŸãã
ãªã¬ã°ã¯ã©ã¹ããïŒCTOïŒ

-SEMrushã®ç¹ç°æ§ã¯ãã®èšèªãŸãã¯ãã®èšèªã§ã¯ãªãã次ã®ãšããã§ããéçºããŒã ã¯èªçµŠèªè¶³ã®éçºçç©ã§ãããšèããŠããŸãã ãŸããéçºèšèªãå«ããããŒã èªäœãäœã䜿çšããããéžæã§ããŸãã
ããã¯ãèªç±ãè¿œå ãã責任ãè¿œå ããŸãããç¶æ³ã管çããããã»ã¹ãããå°é£ã«ããŸãã ã¬ããŒãã®åéãšãã¹ãã£ãã¯ãã®äœ¿çšããã®ç®¡çã¯ã説åŸãšåæ©ä»ãã«å€ãããŸãã å¹³çã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯ç§ã®å¥œã¿ã§ãã
ç§ãã¡ã¯ãJavaã倧èŠæš¡ãªã³ãã¥ããã£ãšéçºäžã®ãšã³ã·ã¹ãã ãåããåªããããã°ã©ãã³ã°èšèªãšèŠãªããŠããããšãä»ãå ããŸãã Javaã§æžããããããžã§ã¯ãã¯ãç§ãã¡ã¯çŽ æŽãããååšæãšçºå±ãéããŠããããã®æ°ãå¢ãããããšããèªä¿¡ãäžããŠããŸãã
-2014幎ã«ããããŒã¿ããŒã¹ãäœæããã¿ã€ãã³ã° ããšãããã¬ãŒã³ããŒã·ã§ã³ãè¡ããŸããã ããã«é¢é£ããŠèå³æ·±ãã®ã¯ãSEMrushããæºåãããèªåã§è¡ãããšãã質åã«å¯Ÿããã¢ãããŒãã§ãã
èšèªã®éžæã®å Žåãšåãã§ããç·ã¯èªåãã¡ã§ã©ã®æ¹æ³ã«åŸãããèªåã§äœããããããæšæºçãªãœãªã¥ãŒã·ã§ã³ã䜿çšãããã決å®ããŸãã æŽå²çã«èšãã°ãå€ãã®è£œåã§æšæºãœãªã¥ãŒã·ã§ã³ããèªå·±èšè¿°åãžã®ç§»è¡ããããŸããããåãã®ããã«ãé©åã«èšè¿°ããããã©ã€ããŒããœãªã¥ãŒã·ã§ã³ã¯æšæºãœãªã¥ãŒã·ã§ã³ãããåªããŠããããã§ãã
ã¬ããŒãã§æ瀺ãããç§ã®å人çãªçµéšã«ã€ããŠè©±ããšãéçºæã«ã¯å®å®ããHadoopãMongoããªãã£ãã®ã§ãç¶æ³ã«å¿ããŠè¡åããŸãã:)
-Java vs C ++ã«é¢ããæè¿ã®èšäºã§ ã150ãè¶ ãããµãŒããŒãæèŒãã補åã«ã€ããŠèšåããŸããããç解ãããã®ã¯ãSEMrushã®èŠæš¡ãšã¯äœã§ããïŒ ä»ã«ã©ã®ãããªå€§ããªè£œåããããŸãããåèšã§ããã€ã®ãµãŒããŒããããŸããïŒ
-ããŒããŠã§ã¢ããå§ããŸãããã çŸåšãçŽ440å°ã®å®ãµãŒããŒãšçŽ250å°ã®ä»®æ³ãã·ã³ããããŸãã èšèªã«é¢ããæè¡éçºã¹ã¿ãã¯-ANSI CããNode.jsããããŠãã¡ããJavaãŸã§ã
ç§ãã¡ã®æ倧ã®ãããžã§ã¯ãã¯ãããã¯ãªã³ã¯ããã¡ã€ã³ãšãã¬ãŒãºåæã远跡ã§ãã ãããã¯ãªã³ã¯ã-æ倧ã§æãéã150å°ãè¶ ããããã·ã³ãããã®æå³ã¯ãGoogleã®ãããªãã¹ãŠã®ã€ã³ã¿ãŒãããããŒãžã®ããã¯ãªã³ã¯ã®ããŒã¿ããŒã¹ãæ§ç¯ããããšã§ãã ãDomainïŒPhrase Analyticsãã¯ã30ãè¶ ããããŒã«ã«ããŒã¿ããŒã¹ã§ã®æ€çŽ¢çµæã®åæã60ãè¶ ãããµãŒããŒãäŒç€Ÿã®æãå€ã補åã§ãã ããã©ããã³ã°ãã¯ãæãåçã«éçºãããŠãã補åã®1ã€ã§ããã28ãµãŒããŒãæ€çŽ¢çµæã«ããããµã€ãã®äœçœ®ã®ãã€ããã¯ã¹ã§ãã
ããã¯ãšã³ãããã®ããã3ã€ã®è£œåã¯C / C ++ã§èšè¿°ãããŠããŸããããSEO IdeasãããSite Auditããªã©ãååãªæåãåããJava補åããããŸãããããã«ã€ããŠã¯ãåœç€Ÿã®Webãµã€ãã§è©³çŽ°ãã芧ãã ãã ã
ã¢ãããªãŒã»ããã³ãïŒã·ãã¢éçºè ïŒ

-æå°éã®æéã§ãŠãŒã¶ãŒãžã®äŸ¡å€ã®æäŸãä¿é²ãããã¹ãŠã®ãã®ãæè¿ããŸãã ãŸããåžžã«ææ°ã®ç¶æ ã«ä¿ã¡ãèšèªãšã©ã€ãã©ãªã®ææ°ã®å®å®ããŒãžã§ã³ã䜿çšããããåªããŠããŸãã
ç§ãé¢ãã£ããããžã§ã¯ãã«ã€ããŠè©±ããããšããã¡ããJavaãã¬ãŒã ã¯ãŒã¯ã®å Žåãããã¯SpringïŒBootãWebãDataãAMQPïŒã§ãã ããã¹ãåæã«ã¯Luceneã䜿çšããŸãã æ¥åžžç掻ã§ã¯ãLombokãGuavaãããã³Java 8ã¹ããªãŒã ãåºã䜿çšããŠããŸãããå€éšã¹ãã¬ãŒãžã¡ãã£ã¢ã«é¢ããŠã¯ãMongoDBãRedisãããã³RabbitMQã§ãã
ä»ã®Javaã³ãã³ãã§ã¯ãã¿ã¹ã¯ã«ãã£ãŠãã¯ãããžãç°ãªãå ŽåããããŸãããå€ãã®å Žåãã³ã¢ã¯SpringãšJava 8ã§ãã誰ãã倧éã®æ å ±ãHDFSã«ä¿åããåŠçã«Hadoopã䜿çšããŸãã 誰ããè€éãªã¯ãšãªãšãã©ã³ã¶ã¯ã·ã§ã³ãæ°ã«ããŠãã-圌ãã®éžæã¯PostgreSQLã§ãã æ¿å ¥é床ãšã¯ãšãªã®è€éãã®éã®ãã¬ãŒããªãã®ããã«ãç§ãã¡ã®ããã«MongoDBã䜿çšããããŒã ããããŸãã
ãã«ããšãããã€-MavenãGradleãFabricãAnsibleã å€ãã®ããŒã ãæ¬çªç°å¢ã§Dockerã䜿çšããŠããŸãã
ããŒã«-Intellij IDEAãTeamCityãYouTrackãGitLabã èå³æ·±ãããšã«ãç§ãã¡ã®ããŒã ã¯XRebelãéåžžã«ããŸã䜿çšããŠããŸãã ãŸããäŒæ¥ã¬ãã«ã§ã¯ãã³ãã³ãéã¬ãã¥ãŒã³ãŒããå°å ¥ããŠããŸããUpsourceãè©ŠããŠããŸãã
-æè¿è©±ããã倧èŠæš¡ãªã¿ã¹ã¯ã¯ãããŸããïŒ
-ç§ã¯ãSEOã®ã¢ã€ãã¢ããšåŒã¹ããããªå€§èŠæš¡ãªã¿ã¹ã¯ã ãšæããŸããç§ãã¡ã®ããŒã ãå§ããŠã1幎ã¡ãã£ãšã®éæžããŠãããããžã§ã¯ãã§ãã ãã®ç®æšã¯ãéåžžã®ããŒã±ãã£ã³ã°æ åœè ã«ã¯ç解ã§ããªãäžé£ã®ã¡ããªãã¯ãšç«¶åä»ç€Ÿã®ããŒã¿ããã¢ã¯ã·ã§ã³ã«é¢ããç¹å®ã®æšå¥šäºé ã«å€ããããšã§ãã 人ã ã¯ã·ã³ãã«ãã倧奜ããªã®ã§ãä»ã®ãšããçå®ã«æé·ããŠããŸãã
ããã¯ãã¹ããªãŒãã³ã°ããŒã¿åŠççšã®åæ£ã·ã¹ãã ã§ãã 䞊è¡åŠçãã¯ãŒãããã»ãã·ã³ã°ã¿ã¹ã¯ãå€éšAPIã®æäœããããã®è² è·åæ£ããããŸãã ãµãŒããŒããžãã¹ããžãã¯ã¯å®å šã«Javaã§ãããã¯ã©ã€ã¢ã³ãéšåã¯JavaScriptã§èšè¿°ãããŠããŸãã ç§ã®æèŠã§ã¯ãJavaã¯èšèªãšããŠããã©ãããã©ãŒã ãšããŠããããã©ãŒãã³ã¹ãšäœ¿ããããã®äž¡é¢ã§ãæ°ããèªå€§åºåãã¯ãããžãŒïŒNodeJSãGoãªã©ïŒã®èªä¿¡ãæã£ãŠããŸãã ãããå€æŽããèªæãå¿ èŠã¯çããŸããã§ããã
-SEMrushã§ã¯ãC / C ++ã§å€ãã®ããšãè¡ãããŸããããããŠãJavaéçºè ãšããŠããJavaã®æ¹ãè¯ãããšããæ°æã¡ããããŸãããïŒ :)
-C / C ++ã®äœ¿çšã¯ããããã®ããŒã ãéåžžã«ãªãœãŒã¹ãæ¶è²»ããã¿ã¹ã¯ã«çŽé¢ãããããäžéšã®ãããžã§ã¯ãã§ã¯å¿ èŠã§ãã æãé¡èãªäŸã®1ã€ã¯ãã€ã³ã¿ãŒãããå šäœã®ãªã³ã¯ã°ã©ããšãã¡ã€ã³ã©ã³ãã³ã°ã§ãã Javaã䜿çšãããšãããã§å€å€§ãªã³ã¹ããããããCã䜿çšãããšãã決å®ã«ãããä»ã®ãããã»ã©å¿ èŠã§ã¯ãªã補åã®ããã«ããå€ãã®ãªãœãŒã¹ã解æŸãããŸããã
-Javaã¯ãèªå·±çµç¹åããŒã ãã¢ãããŒãã§ããŸãæ©èœããŸããïŒ
-ã¯ããçµæ§ã§ãã ç§ãã¡ã®å ŽåãããŒã ã¯å®éšãšè£œåã®å®å®æ§ã«ã€ããŠå šè²¬ä»»ãè² ããŸããããã§ã¯ãJavaãšãã®æçããã©ã€ãã©ãªãæè¯ã®åŽé¢ã瀺ããŠããŸãã
ãŸããå¯èœãªéããã·ã³ãã«ã§æ確ãªãã©ããã¢ãžã¥ãŒã«ãäœæããããšããŸããæ°Žå¹³æ¥ç¶ãšå€æŽã«å¯Ÿããäžå®ã®æºåãåªå ãããŸãã ãããŠãããã§ããJavaã¯éåžžãç§ãã¡ã倱æãããŸãããåªãããªãã¡ã¯ã¿ãªã³ã°ããŒã«ãšäŸåé¢ä¿è§£æ±ºããŒã«ãåããŠããŸãã
-èšèªãšãã¯ãããžãŒãç¬èªã«éžæããããŒã ã®ãç°è³ªæ§ãã«ãããçžäºéçšæ§ã«åé¡ã¯ãããŸããïŒ
-ããããåé¡ã¯ãããŸããã ãã¹ãŠã®SEMrushã¯åºæ¬çã«ãã€ã¯ããµãŒãã¹ã®ã»ããã§ãããJSONãšRESTããããã®éã®ãå ±éèªããšããŠäœ¿çšããŸãã å Žåã«ãã£ãŠã¯ã倧éã®ããŒã¿ãŸãã¯ã¯ãšãªã«é¢ããŠã¯ããã€ããªãœãªã¥ãŒã·ã§ã³ãå¯èœã§ããããããã¯ã«ãŒã«ãããäŸå€ã§ããå¯èœæ§ãé«ããªããŸãã
-ããªãã¯GroovyãšScalaã§ããçšåºŠã®çµéšããããŸããããã®çµéšã¯SEMrushã§ã®äœæ¥ã«é¢é£ããŠãããæ¬çªç°å¢ã§ãããã®èšèªã䜿çšããŠããŸããïŒ
-ç§èªèº«ã¯ããããã®èšèªã§SEMrushã§ã»ãšãã©æžããŸããã§ããã ããããäžè¬çã«ãGroovyã¯ãããŸãç©æ¥µçã§ã¯ãããŸããããå€ãã䜿çšããŠããŸãã ç§ã®ç¥ãéããäž»ã«QAã¯åœŒãæããSpockã«çŸãããã¹ããæžããŠããŸãã ç§èªèº«ã¯ã¹ã¯ãªããèšèªãšããŠGroovyã«èå³ããããŸããã äžè¬çã«ãããã¯å¿«é©ã§ç°¡æœã§ããã人ã ã圌ãæããŠããçç±ãç解ããŠããŸãã ããã§ããç§ãæžããã¹ã¯ãªããã¯äž»ã«Pythonã§æžãããŠãããéçšã®åãããããšãã¯æé«ã®ããŒã«ã ãšæããŸãã
ãããŠãç§ãç¥ãéããScalaã¯ãŸã ç§ãã¡ãšå®çããŠããŸããã ãã°ããåãç§èªèº«ããã®èšèªã綿å¯ã«ç 究ããŸãããããã£ã©ã¯ã¿ãŒã«åæãããšã¯èšããŸããã ãã®èšèªã¯åçŽã§ã¯ãªããåŠã¶ã®ã«å€ãã®æéãããããåããã°ã©ããŒã¯éåžžã«ç°ãªãæ¹æ³ã§èšè¿°ããŸãã ScalaããŒãã§GitHubãé²èŠ§ãããšãå°çå€ã®ç¥æ§ã®ååšãæããããšããããŸãã ç§ã®æèŠã§ã¯ãæ¥éã«å€åããèŠä»¶ãšã¯ã³ãã¿ã³ã€ã³ã¿ãŒãã§ãŒã¹ã®æ代ã§ã¯ããããã¯ãã€ãã¹ã®å¯èœæ§ãé«ãã§ãã
ç§èªèº«ãKotlinã«èå³ãæã¡ãJavaã§è£œåãç©æ¥µçã«æžãç¶ããŠããŸãã èšèªãåçŽã§ç°¡æœã§å®å šã§ããããã©ã°ããã£ã¹ãããã©ã°ããã£ã¹ãã®ããã«äœæããããšãé äºããŸãã åœç€Ÿã¯ãã®ãããªããŒã«ãæããŠããŸãã è©ŠããŠã¿ãããšæã人ã ã®éåžžã«å€ãã圢æãããå Žåãç§ãã¡ã¯ããã«ãããžã§ã¯ããããããšãé€å€ããŸããã
-çããŠãããŠããããšãããžã§ãŒã«ãŒã§ããªããåŸ ã£ãŠããŸãïŒ