ã¯ããã« ããã«ã¡ã¯ã2幎ç®ã«ãªã£ãyk_itgã§ãã ä»å㯠postgreSQL ã§indexãå©çšããæãã©ãã ãæ€çŽ¢é床ãäžããã®ã調ã¹ãŠã¿ããâŠãšããã®ã§ãããããŸãindexã䜿ã£ãŠããããŸããã§ãããä»åã¯ãã®æã®ããšãèšäºã«ããããšæããŸãã ãªãããã®èšäºã§ã¯ postgreSQL ã§indexãäœæããæã®ããã©ã«ãã§ããB-tree indexã䜿çšããŠããããšãåæãšããŠããŸãã ã¯ããã« æ€èšŒããŒãžã§ã³ ãã£ããindexãäœã£ãŠã¿ã ããå®è¡ 䜿ãããªãçç± äžã€ç®ã®çç± äºã€ç®ã®çç± ææ³ åè æ€èšŒããŒãžã§ã³ postgreSQL 11.4 ãã£ããindexãäœã£ãŠã¿ã ãšãããããindexã貌ãããŒãã«ãå¿
èŠã§ãã 倧éããŒã¿ããªããšå¹æãããããªããšæã£ãã®ã§ããã¡ãã®èšäºãåèã«100äžä»¶ã®ã¬ã³ãŒããæã€ããŒãã«ãäœã£ãŠã¿ãŸããã tech-blog.rakus.co.jp CREATE TABLE indexTest ( id integer PRIMARY KEY, name text ) INSERT INTO indexTest (id,name) SELECT i, format('text%s', i) FROM generate_series(1,10000000) as i ; ãã®ããŒãã«ã«CREATE INDEXããŠindexãäœã£ãŠã¿ãŸãã CREATE INDEX ON indexTest (id); CREATE INDEX ON indexTest (name); explain_test=# \di List of relations Schema | Name | Type | Owner | Table --------+--------------------+-------+----------+----------- test1 | indextest_id_idx | index | postgres | indextest test1 | indextest_name_idx | index | postgres | indextest (2 rows) ããå®è¡ ã§ã¯å®éã«indexã貌ã£ãããŒãã«ã«å¯ŸããŠæ€çŽ¢ããããŠã¿ãŸãã ãã ãæ€çŽ¢ãéããªããšãã£ãŠãç®èŠã§ã¯ãã£ã±ãéããããããªãã®ã§EXPLAINã䜿ããŸãã EXPLAINã䜿ããšã³ã¹ããšã©ããªæ¹æ³ã䜿ã£ãŠæ€çŽ¢ããããšããŠããã®ã調ã¹ãããšãã§ããŸãã Indexãå©çšãããŠããå Žåã«ã¯ãIndex ScanãIndex Only Scanãªã©ã®indexã䜿ã£ãŠããããšã瀺ãEXPLAIN æŒç®å ãå®è¡èšç»ã«è¡šç€ºãããã¯ãã§ãã æ©éå
ã»ã©indexã匵ã£ãnameã®ã«ã©ã ãæ€çŽ¢æ¡ä»¶ã«å
¥ããŠæ€çŽ¢ããŠã¿ãŸãã explain_test=# EXPLAIN SELECT COUNT(name) FROM indexTest WHERE name LIKE '%text10001%'; QUERY PLAN -------------------------------------------------------------------------------------------- Finalize Aggregate (cost=107139.59..107139.60 rows=1 width=8) -> Gather (cost=107139.38..107139.59 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=106139.38..106139.39 rows=1 width=8) -> Parallel Seq Scan on indextest (cost=0.00..106138.33 rows=417 width=11) Filter: (name ~~ '%text10001%'::text) (6 rows) ããïŒindexã䜿ãããŠããªãããã§ããã Index Scanã§ã¯ãªããããŒãã«ãé çªã«èŠãŠããSeq Scanã衚瀺ãããŠããŸãã 詊ãã«æ€çŽ¢æ¡ä»¶ãidã«å€æŽããŠã¿ãŸãã explain_test=# EXPLAIN SELECT COUNT(*) FROM indexTest WHERE id <= 5000000; QUERY PLAN ----------------------------------------------------------------------------------------------- Finalize Aggregate (cost=112375.23..112375.24 rows=1 width=8) -> Gather (cost=112375.01..112375.22 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=111375.01..111375.02 rows=1 width=8) -> Parallel Seq Scan on indextest (cost=0.00..106138.33 rows=2094672 width=0) Filter: (id <= 5000000) (6 rows) ãããã¯ãindexã¯äœ¿ãããªãããã§ãã 䜿ãããªãçç± äžã€ç®ã®çç± äžã€ç®ã®çç±ã¯åæ¹äžèŽä»¥å€ã®LIKEã䜿ã£ãŠæ€çŽ¢ããŠããããã§ãã B-treeã®indexã䜿çšããå Žåã¯ãæååã®ååã«ã€ããŠããæ€çŽ¢ãè¡ããŸããã ãªã®ã§ãååãæ€çŽ¢æ¡ä»¶ã§ããåæ¹äžèŽã®æ€çŽ¢ã§ã¯indexã䜿çšããŠãããŸãã explain_test=# EXPLAIN SELECT COUNT(name) FROM indexTest WHERE name LIKE 'text10001%'; QUERY PLAN --------------------------------------------------------------------------------------------------- Aggregate (cost=12.27..12.28 rows=1 width=8) -> Index Only Scan using indextest_name_idx on indextest (cost=0.43..9.77 rows=1000 width=11) Index Cond: ((name >= 'text10001'::text) AND (name < 'text10002'::text)) Filter: (name ~~ 'text10001%'::text) (4 rows) å®è¡èšç»ãèŠãŠããã£ãã Index Only Scanã衚瀺ãããŠããŸãã äºã€ç®ã®çç± äºã€ç®ã®çç±ã¯æ€çŽ¢æ¡ä»¶ã«åœãŠã¯ãŸãè¡æ°ãå€ãããããã§ãã åœãŠã¯ãŸãè¡æ°ãå€ãããå Žåã«ã¯ãindexã䜿ã£ãŠæ€çŽ¢ãããããããŒãã«ãé çªã«ã¿ãŠããã»ããéããªããŸãã explain_test=# EXPLAIN SELECT COUNT(*) FROM indexTest WHERE id <= 3700000; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=110081.60..110081.61 rows=1 width=8) -> Gather (cost=110081.38..110081.59 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=109081.38..109081.39 rows=1 width=8) -> Parallel Index Only Scan using indextest_pkey on indextest (cost=0.43..105174.50 rows=1562752 width=0) Index Cond: (id <= 3700000) (6 rows) ãã®ããã«æ€çŽ¢æ¡ä»¶ã«å¿ããŠé©åãªãã©ã³ãããŒã¿ããŒã¹ã¯çµã蟌ãã§ãããŸãã ææ³ indexã䜿ãã°ã©ããããéããªãã®ãã¯æ€èšŒããããšãã§ããŸããã§ããããindexã®ä»çµã¿ãå®è¡èšç»ã«ã€ããŠè§Šããããšãåºæ¥ãŸããã ã©ãã©ãè§Šããæ©äŒãå¢ããŠãããšæãã®ã§ãä»åŸãããŒã¿ããŒã¹ã®ä»çµã¿ãåŠãã§ãããããšæããŸãã åè [MySQL]WHERE句でLIKEを使っている場合のINDEX | DayByDay PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ 【SQL】インデックスの基本知識まとめ - Qiita B木 - Wikipedia ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
id:radiocat ã§ãã é
é
ã¡ãŒã« ïŒ ã¯ã«ã¡ã« ã®éçºããŒã ã§ã¯ãæã
ã®åãçµã¿ãå€ãã®æ¹ã
ã«ç¥ã£ãŠãããããã ããã°é£ èŒãããžã§ã¯ããçºè¶³ãããŸãããåçã¯ããã¯ãªãã®æ§åã§ãããŸãã¯ã¡ã³ããŒåå£«ã§æåŸ
å€ãããåãããããã« ãã©ãã«ãŒ 颚ãšã¯ãµãµã€ãºãªã©ãè¡ãããã®åŸã¿ããªã§æçš¿ããŒãã®ã¢ ã€ã㢠ãåºããŸããã ããã¯ãªãã®æ§å ã¡ãŒã«é
ä¿¡ãæ¯ããæè¡ãšããŠããŠãã¢ãŠããããããã ã¡ãŒã«é
ä¿¡ãåãå·»ã ITæè¡ ãã客æ§ã®ããžãã¹ã¯ããŸã ã«æ¥ã
é²åãç¶ããŠããŸãã è¿·æã¡ãŒã«ãªã©ã§ãã¬ãã£ããªã€ã¡ãŒãžãããå©çšã«æ¶æ¥µçãªå£°ãèãããã¡ãŒã«é
ä¿¡ã§ãããçŸåšã§ãå€ãã®äººãã¡ãŒã«ãèŠãŠã·ã§ããã³ã°ãããªã©ã®åœ¢ã§çæŽ»ãžæŽ»çšããŠãããããžãã¹ã«ãå©çšãããŠããŸãããŸããã¡ãŒã«é
ä¿¡ã®ä»çµã¿ã¯è€æ°ã®éä¿¡ãã£ãªã¢ããã©ãããã©ãŒã ãè·šãè€éãªã·ã¹ãã åºç€äžã«æ§ç¯ãããŠãããæ§ã
ãªã¡ãŒã«ã®çš®é¡ãšé
ä¿¡æ¹æ³ã§æãç«ã£ãŠããŸãã ãããªäžã§ãç§ãã¡ã¯ã客æ§ã®ããžãã¹ãæåãžå°ãããã«ã1éã§ãå€ãã®ã¡ãŒã«ããå±ãã§ããããæ¥ã
åªåãç¶ããŠããŸãã瀟å
ã§ãæ®æ®µã¯ããŸãèªãããããšã®ãªãã¡ãŒã«é
ä¿¡ã®è£åŽã€ããŠé
é
ã¡ãŒã«ïŒã¯ã«ã¡ã«ã®éçºãæ
åœããŠãããšã³ãžãã¢ãçŸå Žããçºä¿¡ããããšã§ãã¡ãŒã«é
ä¿¡ã«èå³ã®ããäººãæ®æ®µãã®ããã°ãã芧é ããŠãããšã³ãžãã¢ã®ã¿ãªããã«å°ãã§ãèå³ããã£ãŠé ããã°ãšæãããããžã§ã¯ããçºè¶³ãããŸããã ãŸãã¯ç¬¬äžåŒŸãšããŠã4人ã®ã¡ã³ããŒã以äžã®ããŒãã1ã€ãã€æ
åœããæçš¿èšäºãæ€èšäžã§ãã ã¡ãŒã«ãå°éããã ã«ã€ãŒã³ æ¥åã®åãçµã¿ 6/26ã®ãRAKUS Meetup Osaka ã«ã€ãŒã³ Nightãã«ç»å£ãããŠããã ããä¹
å±±ã§ãã ã¡ã«ãã¬é
ä¿¡ãµãŒãã¹ã«ãããŠãã¡ãŒã«ãé
ä¿¡ã§ãããã©ããã¯éåžžã«éèŠã§ãããã®ãããé
é
ã¡ãŒã«ã«ãããŠãã¡ãŒã«å°éçãåäžãããããã«ãããã€ãã®æœçãè¡ã£ãŠããŸããããããéçºè
ãæ³å®ããŠããã¡ãŒã«å°éçã¯ãã客æ§ãæåŸ
ããŠããå°éçãšã®ã£ãããããããšã«æ°ã¥ããŸããã ç§ãæ
åœããèšäºã§ã¯ãå
æ¥çºè¡šãããRAKUS Meetup Osaka ã«ã€ãŒã³ Nightãã®è³æãããŒã¹ã«ã ã·ã¹ãã éçº è
ã®ç«å Žã§ã¯æ°ã¥ãã«ããå°éçã®æ¬è³ªçãªåŽé¢ã«ã€ããŠã話ã§ããã°ãšæããŸãã å€çš®å€æ§ãªãã©ãããã©ãŒã ã«å¯Ÿå¿ããããã®ã¡ãŒã«ã®çš®é¡ äžéã§ããç§ããå±ãããããŒãã¯ãã¡ãŒã«ã®çš®é¡ã«ã€ããŠãã§ãã ã¡ãŒã«é
ä¿¡ã«ã¯ãHTMLã¡ãŒã«ãããã¹ãã¡ãŒã«ãå€èšèªã¡ãŒã«ãªã©ã®ãæ§ã
ãªçš®é¡ã®ã¡ãŒã«ããããŸãããµã ãçããŸã®ãæå
ã«å±ããŠããã¡ãŒã«ã®çš®é¡ãšãã®ã¡ãŒã«ãéãããŠããä»çµã¿ãç¥ã£ãŠé ããããã«ããããããããŠã©ã€ããªèšäºãå·çããŠãããŸãã çããŸã«ãšã£ãŠæçãªæ
å ±ããå±ãã§ããããããã°ããŸãã®ã§ããæåŸ
ãã ããïŒ ã¡ãŒã« ããŒã±ãã£ã³ã° ãæ¯ããé
ä¿¡æ¹æ³ ãã£ã³ã§ãã2014幎㫠ã©ã¯ ã¹ ãããã ãžå
¥ç€ŸããŸããã å»å¹Žã®8æã«æ¥æ¬ã«æ¥ãŠé
é
ã¡ãŒã«ã®ã¡ã³ããŒãšäžç·ã«ä»äºãããŠããŸãã ã客æ§ã«ãšã£ãŠã ããŒã±ãã£ã³ã° ã®æ¹æ³ããããããã£ãŠãããã«åãããé
ä¿¡æ¹æ³ãéžã³ãŸããç§ã®æçš¿ã§ã¯ãé
é
ã¡ãŒã«ã§ã客æ§ãéžã¹ã ããŒã±ãã£ã³ã° ã®æ¹æ³ãšã¡ãŒã«ã®é
ä¿¡æ¹æ³ãã玹ä»ããŸããã©ããæ¥œãã¿ã«ãåŸ
ã¡ãã ããã ãã£ãªã¢ã¡ãŒã«ã®ä»ãŸã§ãšä»åŸ å°æã§ãããã£ãºããŒãšãã¥ã®ã¢ããããªãæããã¢ã©ãã£ãç®åã®éçºãªãŒããŒã§ããæšä»ãæºåž¯é»è©±ã¯ãã¥ãŒãã£ãŒãã©ã³ãã ã¹ããŒããã©ã³ ã«å€åãããã£ãªã¢ã¡ãŒã«ã«ã€ããŠãå€åããŠããŸããã ãã³ã¡ãŒã« ã» ã¹ããŒããã©ã³ ã®HTMLã¡ãŒã«ãªã©ãä»åŸã¡ãŒã«ã®ä»æ§ãã©ãå€ãã£ãŠããã®ããæžããããšèããŠããŸãã è¿æ¥äžã«é 次æçš¿äºå® ã¡ãŒã«é
ä¿¡ã«é¢ãã人ããããã§ãªã人ããæ¥œããã§é ãããšå¹žãã§ãã第1åã®èšäºãŸã§ããããã°ãããåŸ
ã¡ãã ããã
ã¯ããã« ããã«ã¡ã¯ãæ°å2幎ç®ã®y_kwmtã§ãã æè¿WebStorageã«è§Šããæ©äŒããã£ãã®ã§ã JavaScript ã§WebStorageã®ããŒã¿ãä¿åãäžæžããåé€ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ã¯ããã« WebStorageãšã¯ SessionStorageãšã¯ LocalStorageãšã¯ ããŒã«ã«ç°å¢ã§å®è£
æåŸã« åèã«ãããµã€ã WebStorageãšã¯ WebStorageãšã¯ããŠãŒã¶ã®ããŒã«ã«ãã©ãŠã¶ã«ããŒã¿ãä¿åããä»çµã¿ã®ããšãèšããŸãã WebStorageã¯SessionStorageãšLocalStorageã®2çš®é¡ã«åãããŸãã SessionStorageãšã¯ SessionStorageãžæã£ãŠããå€ã¯ãŠã£ã³ããŠãéãããŸã§æå¹ãšãªããŸãã å¥ã¿ããå¥ãŠã£ã³ããŠãžã®å
±æã¯ã§ããŸããã LocalStorageãšã¯ LocalStorageãžæã£ãŠããå€ã¯ãŠã£ã³ããŠãéããããšã§ãæå¹ãšãªã£ãŠããŸãã å¥ã¿ããå¥ãŠã£ã³ããŠãžã®å
±æãã§ããŸãã ããŒã«ã«ç°å¢ã§å®è£
ä»åã¯SessionStorageãçšããŠãã¿ã³ãæŒããåæ°ãä¿åãåé€ããŸãã ãã«ãŠã³ãããã¿ã³ãæŒããŠã«ãŠã³ããå¢ããããã¯ãªã¢ããã¿ã³ãæŒããŠãã«ãŠã³ããã¯ãªã¢ããŸãã <!DOCTYPE html> < html > < head > < meta charset = "utf-8" > </ head > < body > < button id = "count" > ã«ãŠã³ã </ button > < button id = "clear" > ã¯ãªã¢ </ button > < script > document .getElementById ( "count" ) .onclick = function () { sessionStorage.setItem ( 'count' , eval ( Number ( sessionStorage.getItem ( 'count' )) + 1)) ; } ; document .getElementById ( "clear" ) .onclick = function () { sessionStorage.removeItem ( 'count' ) ; } ; </ script > </ body > </ html > sessionStorage(localStorage).getItemã§ããŒã¿ã®ååŸãè¡ããŸãã ãsessionStorage.getItem('count')ãã§ãcountããšããkeyãæã€sessionStorageã® value ãååŸããããšãã§ããŸãã sessionStorage(localStorage).setItemã§ããŒã¿ã®è¿œå ãäžæžããè¡ããŸãã ãsessionStorage.setItem('count', eval(Number(sessionStorage.getItem('count')) + 1));ãã§ããcountããšããkeyãæã€sessionStorageã® value ã1ãã€å¢ãããå€ãäžæžãããŠããŸãã sessionStorage(localStorage).removeItemã§ããŒã¿ã®åé€ãè¡ããŸãã ãsessionStorage.removeItem('count');ãã§ããcountããšããkeyãæã€sessionStorageã®ããŒã¿ãåé€ããŸãã ãã©ãŠã¶ã§ã®å®è¡ã®æ§åããã¡ãã§ãã æåŸã« ä»å㯠JavaScript ãçšããŠWebStorageã®ç®¡çãè¡ããŸããã ç°¡æçãªå®è£
ããã§ããŸããã§ããããæ¬¡ã¯æéãããã JavaScript ã®å®è£
ãè¡ãã JavaScript ã®çè§£ãæ·±ããããšæããŸãã åèã«ãããµã€ã
ã¯ããã« ããã«ã¡ã¯ãæ°åïŒå¹Žç®ã®aa_cryingã§ãã æè¿è峿¬äœã§Vue.jsã«ã€ããŠåŠç¿ãå§ããŸããã®ã§ãä»åã¯Vue.jsã®åºç€çãªéšåã«ã€ããŠç޹ä»ããããšæããŸãã ã¯ããã« Vue.jsãšã¯ ããã°ã¬ãã·ããã¬ãŒã ã¯ãŒã¯ãšã¯ Vue.jsã®ä»£è¡šçãªæ©èœ ãªã¢ã¯ãã£ããªããŒã¿ãã€ã³ãã£ã³ã° ã³ã³ããŒãã³ã é«éãªã¬ã³ããªã³ã° ãããã« åèã«ããèšäº Vue.jsãšã¯ Vue.jsãšã¯ã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ (UI)ãæ§ç¯ããããã® JavaScript ã® ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ã§ãã ããã§ããŸã㯠ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ãšã¯äœãã«ã€ããŠèª¬æããããšæããŸãã ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ãšã¯ ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ( Progressive Framework ) ãšã¯ãVue.jsäœè
ã®Evan Youæ°ãæå±ããæŠå¿µã§ãã JavaScript ã«ã¯Vue.jsã®ä»ã« jQuery ãReact.jsãAngular.jsãªã©æ§ã
㪠ãã¬ãŒã ã¯ãŒã¯ ãååšããŸãã å®éã®ãããžã§ã¯ãã§ã¯ã¹ã¿ãŒãæã«ãããã®äžãã ãã¬ãŒã ã¯ãŒã¯ ãéžæããéçºãé²ããããšã«ãªããŸãã ããããã¢ããªã±ãŒã·ã§ã³ã®éçºãé²ããŠãããšãæ§ã
ãªèŠä»¶ã«å¯Ÿå¿ããããã«ã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ã倧ãããªã£ãŠãããŸãã ãããããšãæåã«å°å
¥ãã ãã¬ãŒã ã¯ãŒã¯ ãåããªããªããä¹ãæããããã«æ°ãã ãã¬ãŒã ã¯ãŒã¯ ãæš¡çŽ¢ããªããã°ãªããŸããã ãšãããVue.jsã¯ããµããŒãããããŒã«ãã©ã€ãã©ãªãšãã£ããšã³ã·ã¹ãã ã®ååšã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ã«æè»ã«å¯Ÿå¿ããããšãã§ããŸãã ãã®ããã«ã ã©ã®ãããªèŠæš¡ã段éã®ã¢ããªã±ãŒã·ã§ã³ã«ã察å¿ã§ãã ãšããã®ã ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ã®æŠå¿µã«ãªããŸãã Vue.jsã®ä»£è¡šçãªæ©èœ ããã§ã¯Vue.jsã®ä»£è¡šçãªæ©èœã§ãã以äž3ã€ã®æ©èœã«ã€ããŠèª¬æããŠãããŸãã ãªã¢ã¯ãã£ããªããŒã¿ ãã€ã³ãã£ã³ã° ã³ã³ããŒãã³ã å é«é㪠ã¬ã³ããªã³ã° ãŸãã¯ç°¡åãªã³ãŒãã®äŸãèŠãŠããã ããã°ãšæããŸãã <!DOCTYPE html> <!DOCTYPE html> <html> <head> <meta charset= "utf-8" > </head> <body> <div id= "binding" ></div> <div id= "components-button" > <p><count-button></count-button></p> <p><count-button></count-button></p> <p><count-button></count-button></p> </div> <script src= "https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js" ></script> <script> //ããŒã¿ãã€ã³ãã£ã³ã°ã®äŸ new Vue( { el: '#binding' , template: ` <div> <p><input v-model= "message" ></p> <p> {{ message }} </p> </div> `, data: { message: 'Hello World!' } } ) //componentã®äŸ Vue.component( 'count-button' , { template: '<button v-on:click="increase">{{ count }} åæŒããŸãã</button>' , data: function () { return { count: 0 } } , methods: { increase: function () { this .count++; } } } ) new Vue( { el: '#components-button' } ) </script> </body> </html> ãã©ãŠã¶ã§è¡šç€ºãããšä»¥äžã®ããã«ãªããŸãã ãã©ãŠã¶ã§ã®å®è¡ Vue.jsãç°¡åã«å°å
¥ããã«ã¯ cdn.jsdelivr.net ãããœãŒã¹ãåç
§ããæ¹æ³ããããŸãã ãã®éã¯ä»¥äžã®ããã«èšè¿°ããŸãã < script src = "https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js" ></ script > vue@2.6.10 ãšèšèŒãããšããŒãžã§ã³ãæå®ããŠäœ¿çšããããšãåºæ¥ãŸãã ãŸããVue.jsã§ã¯ã以äžã®ããã«èšè¿°ããããšã§ãVue ã€ã³ã¹ã¿ã³ã¹ ãšHTMLèŠçŽ ãšã®çŽã¥ããå¯èœã§ãã new Vue( { //<div id="binding"></div>ãšçŽã¥ã el: '#binding' , // ...ç¥... } ) ãªã¢ã¯ãã£ããªããŒã¿ ãã€ã³ãã£ã³ã° el: '#binding' ã®éšåã§ã¯ããŒã¿ã®æŽæ°ãšDOMã®æŽæ°ãåæçã«è¡ã£ãŠããŸãã inputèŠçŽ ã« v-model ãšãããã£ã¬ã¯ãã£ãã䜿çšããŠããŸãããããã«ãããªã¢ã¯ãã£ããªå
¥åããŒã¿ã®åæãå¯èœã«ããŠããŸãã v-model ã¯ãå
éšçã«ã¯ input èŠçŽ ã«å¿ããŠç°ãªãããããã£ã䜿çšããç°ãªãã€ãã³ããéãåºããšããåããããŠããŸãã ãã®ãããv-modelã§ã¯formèŠçŽ ã«ãã value çã®åæå€ãç¡èŠããŠããŸãã®ã§ã JavaScript åŽã® data ãªãã·ã§ã³ã®äžã§åæå€ãæå®ããå¿
èŠããããŸãã data: { message: 'Hello World!' } ä»å㯠Hello World! ãåæå€ãšããŠãããããåæè¡šç€ºã§ã¯ãã®ããã«åºåãããŠããŸãã ã³ã³ããŒãã³ã Vue.componentã®éšåã§ã¯ã<count-button>ãšãã ã³ã³ããŒãã³ã ãå®çŸ©ããŠããŸãã ã³ã³ããŒãã³ã ãšã¯ãååä»ãã®åå©çšå¯èœãªVue ã€ã³ã¹ã¿ã³ã¹ ã«ãªããŸãã new Vue ã§äœæãããã«ãŒãVue ã€ã³ã¹ã¿ã³ã¹ å
(ä»åã¯component-button) ã§ã«ã¹ã¿ã èŠçŽ ãšããŠäœ¿çšã§ããŸãã ãã®ããã«åå©çšã§ããã®ã¯ãšãŠã䟿å©ã§ãã count-buttonã®äžã§ã v-on:click ãšããèšè¿°ããããšæããŸãã <button v-on:click= "increase" > {{ count }} åæŒããŸãã</button> ãã¡ãã¯Vue.jsç¹æã® v-on ãšãããã£ã¬ã¯ãã£ãã§ãDOMã€ãã³ãçºç«æã® JavaScript ã®å®è¡ãå¯èœã«ãªããŸãã ä»åã®å Žåã¯ããã¿ã³ãclickããããšã§ increase ãšãã颿°ãåŒãã§ããŸãã increase ãšãã颿°ã¯countãã€ã³ã¯ãªã¡ã³ããããšããå
容ã«ãªã£ãŠããã ã¯ãªãã¯ãããš âåæŒããŸãã ã®æ°åãã€ã³ã¯ãªã¡ã³ããããŠãããŸãã ãŸããVue.jsã§ã¯ã€ãã³ã修食åãšãããã®ãæäŸããŠããããããçšããŠã€ãã³ããå¶éããããšãã§ããŸãã äŸãã°ã以äžã®ããã«èšèŒãããšãã¿ã³ã1åããæŒããªããªããŸãã <button v-on:click.once= "increase" > {{ count }} åæŒããŸãã</button> .onceãä»ããçµæ ä»ã«ãæ§ã
ãªã€ãã³ã修食åããããŸãã®ã§ã詳现ã¯äžèšãªã³ã¯ãåç
§ããŠãã ããã Vue.jså
¬åŒ - ã€ãã³ããã³ããªã³ã° é«é㪠ã¬ã³ããªã³ã° Vue.jsã§ã¯ Virtual DOM ãæ¡çšããŠãããããé«é㪠ã¬ã³ããªã³ã° (衚瀺åŠç) ãå¯èœãšããŠããŸãã Virtual DOMãšã¯ããã®åã®éãä»®æ³ã®DOMã«ãªããŸãã å®éã®DOMãšåãæ§é ã®ä»®æ³DOMãçšæããä»®æ³DOMã«å¯ŸããŠåŠçãè¡ããŸãããããŠããã®çµæçãŸããå·®åã ããå®éã®DOMã«åæ ããŸãã ãã®ä»çµã¿ãçšããããšã§ãé«é㪠ã¬ã³ããªã³ã° ãå¯èœã«ããŠããŸãã ãããã« ä»åã¯Vue.jsã®åºç€çãªéšåã«ã€ããŠç޹ä»ãããŠããã ããŸããã Vue.jsã«ã¯ä»å玹ä»ã§ããªãã£ã䟿å©ãªæ©èœã沢山ãããŸãã®ã§ã 次åã¯ãã£ãšæãäžããŠç޹ä»ããŠãããã°ãšæããŸãã åèã«ããèšäº Vue.jså
¬åŒã¬ã€ã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ãæ°åïŒå¹Žç®ã®taku_76ã§ãã ä»å㯠Ajax ã«ã€ããŠãã£ããããããšããåãã£ãŠããªãã£ãã®ã§å°ãæéã確ä¿ããŠã³ãŒãããåŠç¿ããããšã«ããŸããã ã¯ããã« Ajaxãšã¯ ããŒã«ã«ç°å¢ã§å®è£
ããŠã¿ã Ajaxã§å€éšAPIãžéä¿¡ãã ãããã« åèã«ããèšäº Ajax ãšã¯ 以äžã¯ Wikipedia ã®åŒçšã§ãã Ajax ïŒãšã€ãžã£ãã¯ã¹[1][2]ã ã¢ãžã£ãã¯ã¹ [3]ïŒã¯ããŠã§ããã©ãŠã¶å
ã§éåæéä¿¡ãè¡ããªãã ã€ã³ã¿ãŒãã§ã€ã¹ ã®æ§ç¯ãè¡ãããã°ã©ãã³ã°ææ³ã§ãã[4]ã XMLHttpRequest ïŒHTTPéä¿¡ãè¡ãããã® JavaScript çµã¿èŸŒã¿ã¯ã©ã¹ïŒã«ããéåæéä¿¡ãå©çšããéä¿¡çµæã«å¿ããŠãã€ãããã¯HTML (DHTML) ã§åçã«ããŒãžã®äžéšãæžãæãããšããã¢ãããŒããåã[5]ã Ajax ã¯Asynchronous JavaScript + XML ã®ç¥ã§ã2005幎2æ18æ¥ã«ç±³åœã®ã€ã³ãã©ã¡ãŒã·ã§ã³ã¢ãŒããã¯ãã§ããJesse James Garrettã«ããåä»ãããã[5][6][7]ã ä»ã®ãµã€ããèŠãŠã¿ãŸããããç°¡åã«è¡šããš JavaScript ãçšããŠãµãŒããšéåæéä¿¡ãè¡ãææ³ã§ã Ajax ãçšããããšã§WebããŒãžã®å
容ããªããŒããªãã§å€æŽããããšãã§ããŸãã ããŒã«ã«ç°å¢ã§å®è£
ããŠã¿ã ãŸãã¯ãããžãã¯çè§£ã®ããã«éä¿¡å
ãããŒã«ã«ãã¡ã€ã«ã«ããŠå®è£
ããŠã¿ãŸãã index3.html <!doctype html> <head> <meta charset="utf-8"> <title>Ajaxãå©çšããŠããŒã«ã«ã®å€éšãã¡ã€ã«ãèªã¿èŸŒã</title> <link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript" ></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js" type="text/javascript"></script> <script type="text/javascript"> $( function() { $( '#ajax-button' ) .click( function() { $.ajax( { //URLæå® url: 'sample.json', //ããŒã¿åœ¢åŒæå® dataType : 'json', //éä¿¡ã«æåããå Žåã®åŠç success: function( data ) { var message = jsonParser(data); $( '#sample-text' ).html( message ); $( '#sample-text' ).html( obj.code ); $( '#sample-result' ).html( '<hr/><font color="blue">èªã¿èŸŒã¿æå</font><hr/>' ); }, //éä¿¡ã«å€±æããå Žåã®åŠç error: function( data ) { $( '#sample-result' ).html( '<font color="red">èªã¿èŸŒã¿NG</font>' ); } } ); } ); $('#clear').click(function(){ $( '#sample-text' ).html(''); $( '#sample-result' ).html(''); }); } ); function jsonParser(data) { var message = data.code; message = message + '<br/>'; message = message + data.message; return message; } </script> </head> <body> <h3>Ajaxãå©çšããŠjson圢åŒã®ãã¡ã€ã«ãèªã¿èŸŒã¿ããŒã¹ãã</h3> <p> <input type="button" id="ajax-button" value="èªã¿èŸŒã"/> <input type="button" id="clear" value="clear" onclick="OnButtonClick"/> <br/> </p> <div id="sample-result"></div> <div id="sample-text"></div> </body> </html> 以äžãä»åèªã¿èŸŒã sample.json ã§ãã { "code" : "100", "message" : "ã¡ãã»ãŒãž" } Webãã©ãŠã¶ ã§è¡šç€ºããã®ã¡ã èªã¿èŸŒã ãã¿ã³ãæŒãããšã«ãã£ãŠ json ãã¡ã€ã«ã®äžèº«ã衚瀺ãããŸããã index3.html Ajax ã§å€éš API ãžéä¿¡ãã 以äžã®ã³ãŒãã§å€éšã® API ãžã¢ã¯ã»ã¹ããããšãã§ããŸãã ä»å䜿çšããŠãã API ã¯ãå°åæ¯ã®å€©æ°äºå ±ã Json 圢åŒã§è¿ã API ã§ãã ç¡æã§äŒå¡ç»é²ç¡ãã§äœ¿ãããšãã§ããŸãã $( function() { $( '#ajax-button' ) .click( function() { $.ajax( { //倩æ°äºå ±ãJson圢åŒã§è¿ãAPI url: 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400040', ããããã //éä¿¡æ¹æ³ type:'GET', ãããããã//ããŒã¿åœ¢åŒãæå® dataType : 'json', //éä¿¡ã«æåããå Žåã®åŠç }).done(function(data){ alert("æå!"); $( '#sample-text' ).html( data.link ); //éä¿¡ãšã©ãŒã«ãªã£ãå Žåã®åŠç }).fail(function(data){ alert("倱æ!"); }); }); }); idã sample-text ã« Json ãã¡ã€ã«ã® link ã衚瀺ããŠããŸãã ãããã« ä»å㯠Ajax ã«ã€ããŠåºç€çãªåŠç¿ãè¡ããŸããã å®è·µã§äœ¿ãããšã«ãã£ãŠããçè§£ãæ·±ãŸããŸãã®ã§ãä»åã¯æéãçãããã«äŒå¡ç»é²ã®å¿
èŠã®ãªã倩æ°äºå ±ã® API ãå©çšããŸãããã æ¬¡ã¯äœ¿ã£ãŠã¿ããå€éšã® API ãæ¢ãäœãäœã£ãŠã¿ãããšæããŸãã åèã«ããèšäº http://javatechnology.net/ajax/biginer-start-up/ javatechnology.net ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ïŒä»åã¯å€§éªãªãã£ã¹ã§éå¬ããã5æãã¢ããã·ã¥ã®ã玹ä»ã§ãã 什åäžçºç®ã®ãã¢ããã·ã¥ã¯ãããŒããªããã«ããŠãåã
ãèªç±ã«çºè¡šã§ãã圢åŒã«ããŸããã ããã§ã¯çºè¡šå
容ã®äžéšããã€ãžã§ã¹ãã§ãéãããããŸãã ã¯ããã« ãã¢ããã·ã¥å°çšã¹ããã¢ã㪠ITãšã³ãžãã¢ã¯åŠç¿ããªããšæ»ãã§ããŸãçãç© PHPerKaigi2019äžæ äŒæ¯ãè¿ã å°ããããšããå§ããæ¹å ãããã« ãã¢ããã·ã¥å°çš ã¹ãã ã¢ã㪠倧éªã§ã¯ãã¢ããã·ã¥ã®ãã³ããªåã«ãããåå è
ãçºè¡šè
ãåºå®åãããªã©ã®èª²é¡ãæ±ããŠããŸãã ãã¢ããã·ã¥ããã£ãšæ¥œããããã®æœçãšããŠããªã¢ã«ã¿ã€ã ã«çºè¡šã«ãã£ãŒãããã¯ã§ããã¢ããªãç»å ŽããŸããïŒ ã¢ããªã«ãçºè¡šå
容ããç»é²ããŠãããšãåå è
ã¯ã¢ããªãéããŠçºè¡šå
容ã«ã³ã¡ã³ããã¹ã¿ã³ããéä¿¡ã§ããŸãã ãã®ã¢ããªãéããŠãããã©ã³ãšã³ãžãã¢ã ãã§ãªãæ°äººãããæ°è»œã«ãã¢ããã·ã¥ã«åå ã§ããããã«ãªãã°ããã§ããïœ ITãšã³ãžãã¢ã¯åŠç¿ããªããšæ»ãã§ããŸãçãç© åŒç€Ÿãšã³ãžãã¢ã®"æè¡ååäž"æœçã®ã話ã§ãã æã
ã®æ¥çã§ã¯ãšã³ãžãã¢ã¯åžžã«æè¡åã磚ããªããã°ãããŸããããšã¯èšãããã¯ãã¢ãããŒã·ã§ã³ç¶æã倧å€ã§ããã ãããªäžã ã©ã¯ ã¹ã§ã¯ãåŠã³ãã¢ãŠããããããå Žã®æäŸãã«åãå
¥ããŠããŸãïŒ ç¹ã«æè¿ã§ã¯ã瀟å€åãã«èªç€Ÿã§ Meetup ãéå¬ãããå€éšã€ãã³ããž åå ïŒç»å£ ãããªã©ã®æŽ»åã粟åçã«è¡ã£ãŠããŸãã ãšã³ãžãã¢ãããæé·ããããã«ããä»åŸãæ§ã
ãªæœçã宿œããŠããããã§ããïœ PHPerKaigi2019äžæ äŒæ¯ãè¿ã PHPerã®æ¹ã«ã¯ã銎æã¿ãPHPerKaigiãã®äžæ äŒã宿œããã話ã§ãã æ¬å®¶PHPerKaigiã®æ§å㯠fortee ã«åç»ã³ã³ãã³ãããŸãšãŸã£ãŠããã®ã§äžæ ããããã§ããïœã äžæ äŒåŸã«çºè¡šå
容ã«ã€ããŠã¿ããªã§è°è«ããããšã§æ°ããªçè§£ãé¢é£ç¥èãåŸãããšãã§ããŸãã "è¯ã"æè¡ã€ãã³ãã¯ã¿ããªã§ã·ã§ã¢ã§ãããšããã§ããã å°ããããšããå§ããæ¹å åŒç€Ÿãšã³ãžãã¢ã«ãã"æ¹åã®ããã"ã®ã話ã§ãã åŒç€Ÿã«éãããã©ã®æ¥çã§ããæ¹åãã¯å€§äºã§ããäžèšã«ãæ¹åããšèšã£ãŠãæ¥åãããŒã®èŠçŽããç¹å®äœæ¥ã®èªååãªã©ãæããã°ããããããããã§ãã ãããããŸãã¯ãèšé²ãããããšãæ¹åã®ç¬¬1æ©ãèšé²ããããšã§çŸç¶ãææ¡ããããŒã ã§çžè«ãåããªããããè¯ãããæ¹æ³ãæ¢ãããšãã§ããŸãã ä»ãŸã§è¡ã£ãŠããã¿ã¹ã¯ãèšé²ãã ECRSã®æ³å ã䜿ã£ãŠäžèŠãªã¿ã¹ã¯ã®æé€ãé¡äŒŒã¿ã¹ã¯ã¯çµåããŠãããšãããªãããšã«é ã䜿ããªããŠãããªããŸãb çè
㯠ECRSã®æ³å ã¯ç¥ããªãã£ãã®ã§ãããæ©ã«å匷ããŠã¿ããã§ã"Ï(ïŸâ¡ïŸ (ïŸâ¡ïŸ )Ï" ïŸïŸïŸïŸ ãããã« ãã¢ããã·ã¥ãæ¯åããããªçºè¡šãèããŠæ¥œããã§ãã åå ããŠã¿ãŠããªãã»ã©ããšæãããšãå€ãã®ã§ãå人çãªå匷ãã¿ãå¢ããŠãããŸãïŒãã ããæ¶åããã®ã倧å€ã§ãããïŒ ãã²æ¥æãæåŸ
ããŠåå ããŸãïœ
id:radiocat ã§ããæ¯æã楜ãã¿ã®ãšã³ãžãã¢ããããå匷äŒã®ãç¥ããã§ããä»åã¯6/13ïŒæšïŒã«éå¬äºå®ã§ãã rakus.connpass.com 5æã®ã¬ããŒã ååãæ§ã
ãªæè¡åéã«åãçµãã§ããæ¹ã
ãåå ãããŸããã PHP ã Python ãDockerãVue.jsãšãã£ãããŒã¯ãŒããè€æ°ç»å ŽããŠããŸãã ããã°ãæžããŠãã人ãå€ããåå ãããçããã®æŽ»åã®äžç«¯ãç¥ãããšãã§ããŠãšã³ãžãã¢ãšããŠåèã«ãªããŸãããŸããããã°ã©ãã³ã°ãªã©ã®äœæ¥ã®åãã§æè¡æžç±ãèªãã§åèã«ããŠãã人ãå€ãããã£ããããŸããã瀟å
ã§å®æè³ŒèªããŠããæè¡éèªãããã€ãããã®ã§ã次åã¯äŒå Žå
ã«çœ®ããŠãèªã¿é ããããã«ããããšèããŠããŸããå¿
èŠã«å¿ããŠåŠç¿ã®åèã«ããŠé ããã°ãšæããŸãã äŒå Žã®çãäžã«çœ®ããŠãããèåã奜è©ãªã®ã§åŒãç¶ããæäŸããŠããŸããåž°å®
åã«è»œããèåãã€ãŸã¿ãªãããããããããŠé ããã°ãšæããŸãã 仿ãçæ§ã®ãåå ããåŸ
ã¡ããŠãããŸãã 6/26ïŒæ°ŽïŒã«ã¯Meetupãéå¬äºå®ã§ãã rakus.connpass.com ãã¡ãã¯åå ã ãã§ãªãLTãåéããŠããŸããæ®ã1æ ãšãªã£ãŠããŸãã®ã§çºè¡šããŠã¿ãããšããæ¹ã¯ãæ¥ããã ãããäžè¬åå æ ãåééå§2æ¥ç®ã§50%ãè¶
ããŠããç¶æ³ã§ãããèå³ã®ããæ¹ã¯ãæ©ãã«ãç»é²ãã ãããããããå匷äŒãšåãããŠãšã³ãžãã¢ã®çæ§ã®ãåå ããåŸ
ã¡ããŠãããŸãã
æè¿ RAKUS Meetup é¢é£ã®å®£äŒã°ããããŠããéŽæš( @moomooya )ã§ããä»å㯠ã©ã¯ ã¹éçºéšã§å®æœããŠããåãçµã¿ã«ã€ããŠè€æ°åã«ããã£ãŠç޹ä»ããŠãããã°ãšæããŸãã ã©ã¯ ã¹ã®éçºéšã§ã¯ãããŸã§ç€Ÿå
ã§å©çšããŠããªãã£ãæè¡èŠçŽ ãèªç€Ÿã®éçºã«é©åãããæ€èšŒããããžãã¹èŠæ±ã«å¯ŸããŠè¿
éã«å¿ããããããã«ããªãã ã é ïŒ ã ïŒ çºã® æª ïŒ ã¿ ïŒ æ¥ã« å
ïŒ ãã ïŒ æããã€ãããžã§ã¯ãïŒéç§°ïŒãã¿ãããããžã§ã¯ãïŒã ãšãããããžã§ã¯ãããããŸãããã¡ãã®ãããžã§ã¯ãã®ææã«ã€ããŠå®æçã«ç޹ä»ããŠãããããšæããŸãã é£èŒç®æ¬¡ ä»åŸæçš¿ãããèšäºã«ãªã³ã¯ã貌ã£ãŠãããŸãã ãå
šææ€çŽ¢ ã ElasticsearchãšããŒã¿å¿ååææ³ã âä»èªãã§ããèšäº ãå
šææ€çŽ¢ã®æ¢æ± Elasticsearch(1) ã: ãããžã§ã¯ãæ¹éããã³ElasticsearchæŠèР倧éããŒã¿ãæ€çŽ¢ãããµãŒãã¹ã§Elasticsearchã¯RDBã®ä»£æ¿åè£ã«ãªããããïŒ(Elasticsearch vs pg_bigm)ã ããŒã¿å¿åå 第1åïŒå¿ååãããå人æ
å ±ãšã¯äœãªã®ã ããŒã¿å¿åå 第2åïŒå人æ
å ±ã¯å¿ååããŠãæå³ããªãã®ã§ã¯ãªããïŒ ããŒã¿å¿åå 第3åïŒå人æ
å ±ãå¿ååããããã»ã¹ ããŒã¿å¿åå 第4åïŒå¿ååã®ããã«è¡ãããŒã¿é
ç®ã®äžè¬åãšã¯ ããŒã¿å¿åå 第5åïŒããŒã¿å¿ååã®ææš ããŒã¿å¿åå 第6åïŒå®éã®å¿åå ãã¿ãããããžã§ã¯ãã§ã¯åããŒã ããæå¿ãåããå
è¿°ã®èª²é¡è§£æ±ºãè¡ãéçºéšæšªæãããžã§ã¯ããšããŠ2017幎ããéå¶ãããŠããŸãããã¡ããæ¥åæéå€ã§ã®åãçµã¿ ã§ã¯ãªã ãæ¥åæéå
ã§ã®åãçµã¿ã§ãïŒéçºéšã®äºæ¥èšç»ã«ãã¡ãããšèšèŒãããŠããŸãïŒã ãããžã§ã¯ãçºè¶³ã®çç± åŒç€Ÿãé·ããµãŒãã¹ãæäŸããŠããŸãããé·ãç¶ããµãŒãã¹ã«ãããã¡ãªã®ãæè¡çãªé³è
åããããããããšã«åæ¥çã«æåãåããŠããŸãããããããã«ãªããã倧ããªå€åãå ãã«ããç¶æ³ã«ãªãã€ã€ãããŸãã ãšã¯ãã幎ã
çç£æ§ã®é«ã ãã¬ãŒã ã¯ãŒã¯ ãã©ã€ãã©ãªãåºãŠããäžã§ãå€åãé¿ãç¶ããŠãããšç«¶åä»ç€Ÿããã®è¿œãäžãã«è² ããŠããŸããããŸããã5幎åŸã10幎åŸã«ãåªäœæ§ãä¿ã€ããã«ã¯ä»åŸã©ããã£ããã®ãåãå
¥ããã¹ããªã®ããæš¡çŽ¢ããå¿
èŠããããšãã倿ã«ããããã¿ãããããžã§ã¯ããçºè¶³ããããšã«ãªããŸããã ãªãããã¿ãããããžã§ã¯ãã«ã€ããŠã¯ä»¥åã«åæããããã¡ãã®èšäºããåç
§ãã ããã ãã€ã¯ããµãŒãã¹ãžã®ææŠãã©ã¯ã¹ãèããæè¡çè² åµãè¿æžããæé©ãªã¿ã€ãã³ã° - Qiita:Zine 仿ã®åãçµã¿ ãã¿ãããããžã§ã¯ãã§ã¯äžå®æéããšã«ããŒããå€ããŠæ€èšŒãé²ããŠããŸããã仿2019å¹ŽåºŠäžæã¯ã æ€çŽ¢ãšã³ãžã³ ãçšãã å
šææ€çŽ¢ ããããŒãã«é²ããŠããŸãã æ€çŽ¢ãšã³ãžã³ ãšããŠã¯Elasticsearchãã¿ãŒã²ããã«æ€èšŒãé²ããŠããŸããElasticsearchèªäœã¯2014幎ããããæ®åãé²ãã§ããŸããããåŒç€Ÿã§ã¯æŽ»çšããŠããŠã貯ããããšãã§ããŠããŸããã§ããã ã¹ã±ãŒã©ãã«ãªæ€çŽ¢ã®ä»çµã¿ã¯ä»åŸããŒã¿åãããèŠçŽ ãå¢ããŠæ€çŽ¢å¯Ÿè±¡ãå€§èŠæš¡åããŠãã£ãéã«å¿
èŠã«ãªããã®ãšããŠé·æçãªèª²é¡ãšãªã£ãŠããŸãããªã®ã§ãŸãã¯åŒç€Ÿã§æŽ»çšã§ããããªçšéã®æ€èšŒãåªå
ã§ãããã³ã³ããããŒã¹ã® ã¯ã©ã¹ã¿ ã§ã¹ã±ãŒã«ãå¿
èŠã«ãªã£ãæã®éçšããŠããŠèç©ãè¡ãªã£ãŠããããšèããŠããŸãã Elasticsearch㯠å
šææ€çŽ¢ 以å€ã«ããElastic StackïŒä»¥åã¯ELK StackãšåŒã°ããŠããŸããïŒã§ç¥ãããããã«åæ£ã·ã¹ãã ã®ãã°åéãåæãå¯èŠååºç€ãšããŠå©çšã§ããããšãããããã³ã°åºŠåããã¿ãããšãã§ããç¹åŸŽããä»åŸã®ãµãŒãã¹å±éã«ãããŠå¿çšã§ããç¯å²ã¯åºãã ãããšèããŠããŸãã 䜵ããŠæ€çŽ¢ã®éã«å¿
èŠããªãããŒã¿ãåæã«å¿
èŠãªãæ©åŸ®æ
å ±ãæé€ããç¡çšãªãªã¹ã¯ãäœæžããããã«ããŒã¿ãå¿ååããææ³ã坿¬¡çãªããŒããšããŠä»æã®åãçµã¿ã«å«ããŠããŸãã ããŒã¿ãã©ã®çšåºŠå¿ååãããŠããããæ°å€åããææ³ããããŒã¿ãå¿ååããããã®äžè¬åææ³ã®ããŠããŠãèç©ããä»åŸ ããã°ããŒã¿ ã婿޻çšããéã«ãããŒã¿ãé©åã«æ±ããããã«ãªãããšãæåŸ
ããŠããŸãã ä»åŸã宿çã«èšäºãæçš¿ããŠãããŸãã®ã§ãããããé¡ãããŸãã é£èŒç®æ¬¡ ä»åŸæçš¿ãããèšäºã«ãªã³ã¯ã貌ã£ãŠãããŸãã ãå
šææ€çŽ¢ ã ElasticsearchãšããŒã¿å¿ååææ³ã âä»èªãã§ããèšäº ãå
šææ€çŽ¢ã®æ¢æ± Elasticsearch(1) ã: ãããžã§ã¯ãæ¹éããã³ElasticsearchæŠèР倧éããŒã¿ãæ€çŽ¢ãããµãŒãã¹ã§Elasticsearchã¯RDBã®ä»£æ¿åè£ã«ãªããããïŒ(Elasticsearch vs pg_bigm)ã ããŒã¿å¿åå 第1åïŒå¿ååãããå人æ
å ±ãšã¯äœãªã®ã ããŒã¿å¿åå 第2åïŒå人æ
å ±ã¯å¿ååããŠãæå³ããªãã®ã§ã¯ãªããïŒ ããŒã¿å¿åå 第3åïŒå人æ
å ±ãå¿ååããããã»ã¹ ããŒã¿å¿åå 第4åïŒå¿ååã®ããã«è¡ãããŒã¿é
ç®ã®äžè¬åãšã¯ ããŒã¿å¿åå 第5åïŒããŒã¿å¿ååã®ææš ããŒã¿å¿åå 第6åïŒå®éã®å¿åå
ã¯ããã« ããã«ã¡ã¯ å
¥ç€ŸïŒå¹Žç®ã®Engawaã§ããã¿ã€ãã«ã«èšèŒã®éã5/18(å)ã«éå¬ããã JJUG CCC 2019 Springã«åå ããŠããŸããã æ§ã
ãªã»ãã·ã§ã³ãèŠãŠããŸããããã®äžã§ãç¹ã«å°è±¡ã«æ®ã£ããã®ã玹ä»ããããšæããŸãã http://www.java-users.jp/ccc2019spring/#/ www.java-users.jp ã¡ãªã¿ã«ä»åã® JJUG ã«ã¯ ã©ã¯ ã¹ç€Ÿå¡ãç»å£ããŸããïŒïŒ çºè¡šè³æã¯äžèšããã確èªãã ããã tech-blog.rakus.co.jp tech-blog.rakus.co.jp å°è±¡ã«æ®ã£ãã»ãã·ã§ã³ ãã¹ããšã³ãžãã¢ãæããã JUnit ãæžãå§ããåã«èããã¹ããã¹ã JUnit ã®æžãæ¹ã«ã€ããŠã§ã¯ãªããã¹ãã®ç®çã¯äœãããªãæ©æã®ãã¹ããããã®ããªã©ã®ãã¹ãã³ãŒãäœæã®åã«èããããšã«ã€ããŠã®ã»ãã·ã§ã³ã§ããã æç€ºãããäŸé¡ããã©ã®ãããªãã¹ããè¡ãã®ãå®éã«èãããããã»ãã®æ¹ãšå
±æããããšãè¡ããŸããã倧äœäŒŒããå¯ã£ãããªéšåã¯ãã£ãã®ã§ããã现ããªéšåã§ç®ã®ä»ãæãéããèªåã§ã¯æãã€ããªããããªãã¹ãã±ãŒã¹ããããŸããã ãã¹ãã±ãŒã¹ãèããéã¯ã©ãã®ãã¹ããè¡ãã®ãããªãè¡ãã®ããèããã®ã¯åœç¶ã ãšæã£ãŠããã®ã§ããããããã©ããããéèŠãªããšãªã®ããæ¹ããŠå®æããŸããã 仿¥ããå§ããã«ãžã¥ã¢ã«ãª ãœãŒã¹ã³ãŒã è§£æ JavaParserãšãã Java ã® æ§æè§£æ ããŒã«ã䜿ã£ãŠã ãœãŒã¹ã³ãŒã è§£æã®å
¥éçãªå
容ãããç°¡åãªå®çšäŸãŸã§ã玹ä»ããŠããã»ãã·ã§ã³ã§ããã æ§æè§£æ ã¯ããŸãŸã§è¡ã£ãããšããªãããªããšãªãæ·å±
ãé«ããã ãªãããã®èªèã§ãããããããŸã§é£ãããªãã®ã§ã¯ãªãããšå°è±¡ãåããã®ã§æãåºããŠã¿ãããæ©äŒã«ãªã£ããããããŸããã çµããã« ä»ååã㊠JJUG ã«åå ããŸãããæã
çè§£ã§ããªãã£ãããšããããèªèº«ã®ç¥èã®ä¹ãããçæãããããŸããã ãããæ©ã«ã©ã®ãããªæè¡ãæµè¡ã£ãŠããã®ããææ¡ããä»åŸã®ããã«åŠç¿ãè¡ã£ãŠããããšæããŸãã
RAKUS Meetup ã®ã㎠ããã«ã¡ã¯ãéŽæšã§ããå
æ¥ RAKUS Meetup Tokyo #3 ãéå¬ããããŸããã®ã§ããã¡ãã®ã€ãã³ãã¬ããŒããæçš¿ããŸãã åœæ¥ã®æ§å çºè¡šã®çŽ¹ä» ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãããããããã¯ãŒã¯ãšã³ãžãã¢èгç¹ã§å·¥å€«ããäºãèŠåŽããäºã 売ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話 æèŠªäŒ æ¬¡åéå¬ã«ã€ããŠ åœæ¥ã®æ§å RAKUS Meetup Tokyo #3 äŒå Žã®æ§å ä»åã¯åŒç€Ÿæ¬ç€Ÿãªãã£ã¹ã® ã»ã ããŒã«ãŒã ã§ã®éå¬ã§ããã åœæ¥ã¯éšãéã æªå€©å ã®äžãåå ããã ãããããšãããããŸãããRAKUS Meetup Tokyoã¯æ¯åéšãéã£ãŠããæ°ãããŸããæ¬¡åã¯æŽããŠæ¬²ããã§ããã çºè¡šã®çŽ¹ä» ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãããããããã¯ãŒã¯ãšã³ãžãã¢èгç¹ã§å·¥å€«ããäºãèŠåŽããäºã åŒç€Ÿã€ã³ãã©ãšã³ãžãã¢ã®æ°žæã®çºè¡šã§ãã æ¥œæ¥œç²Ÿç® ã«ãªããžã§ã¯ãã¹ãã¬ãŒãžãå°å
¥ããã«ãããèæ
®ããå
容ããæ
å ±ã»ãã¥ãªãã£ã®3èŠçŽ ïŒæ©å¯æ§ãå®å
šæ§ãå¯çšæ§ïŒã«æ²¿ã£ãŠçºè¡šããŸããã ãããã¯ãéžå® ããŒããŠã§ã¢æ§æ ã¬ããªã±ãŒã·ã§ã³ èšå® ããŒãžã§ãã³ã°èšå® ãšãã£ã芳ç¹ã«ã€ããŠçºè¡šããŸããã 売ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話 åŒç€Ÿãšã³ãžãã¢ã®è¥¿è§ã®çºè¡šã§ãã ãªããžã§ã¯ãã¹ãã¬ãŒãžã®å°å
¥ç§»è¡æã«æ³šæããããšããçºçãããã©ãã«ã«ã€ããŠçºè¡šããŸããããã®çºè¡šã¯ å
æ¥ã®JJUG ã§çºè¡šããå
容ã®åæŒïŒÎ±ã«ãªã£ãŠããŸãã ãã¡ã€ã«ã¹ãã¬ãŒãžããªããžã§ã¯ãã¹ãã¬ãŒãžã«ããéã®å®è£
äžã®åœ±é¿ç¯å² 20æ¥ ãããŠããŒã¿ç§»è¡ ç§»è¡åŸã«çºçãããã©ãã« ã¡ã³ããã³ã¹æéãçŽ90%åæž ãšãã£ã芳ç¹ã«ã€ããŠçºè¡šããŸããã æèŠªäŒ ãçŽæã® Sushi ãš Pizza ãš Beer ã«å ã㊠RED BULL ãçšæããŸãã æ¬¡åéå¬ã«ã€ã㊠次åã®æ±äº¬ã§ã®éå¬ã¯8æã« ãçŽæ¶Œè詊ãïŒ WEBãµãŒãã¹ éçšã®æã話ã ãããŒãã«éå¬äºå®ã§ãã 仿6æã®åŸåã«ã¯åéãéå§ã§ãããšæããŸãã Connpassã®ã°ã«ãŒã ã«å
¥ã£ãŠããã ãããšéç¥ãé£ã³ãŸãã®ã§ãã¡ããããããããããããŸãã
ã¯ããã« ããã«ã¡ã¯ãæ°å3幎ç®ãšã³ãžãã¢ã®kasuke18ã§ãã ç§ã¯æšå¹ŽåºŠã®1幎éããã¢ããã·ã¥éå¶å§å¡ã®äžå¡ãšããŠææ¢ãããæŽ»åããŠããŸããã éå¶ããäžã§èŠã€ãã£ããšãã課é¡ã«å¯ŸããŠãWebã¢ããªãå°å
¥ããããšã§ ã«ã€ãŒã³ ã§ãããã ãšããããšã«ãªãããã£ãããªã®ã§ãã¢ããã·ã¥éå¶å§å¡ã§Webã¢ããªãäœãããšã«ãªããŸããã çŸåšãã®éçºã®çã£æäžã§ãããæ¯ãè¿ã£ãŠã¿ãŠåŸãããæ°ä»ããã玹ä»ããããšæããŸãã ã¯ããã« ãã£ãŠã¿ãŠã®æ°ã¥ã äžäººã§åŠç¿ãããããå¹çããã ããããªãããšã¯å
šå¡ã§èãã äœæ¥æéãäœãã®ãå€§å€ ãŸãšã ãã£ãŠã¿ãŠã®æ°ã¥ã äžäººã§åŠç¿ãããããå¹çããã ãšã³ãžãã¢ãšããŠèªå·±åŠç¿ã¯å€§åã§ãããšã¯ããã¢ãããŒã·ã§ã³ç¶æãé£ãããç¹ã«æ°ããæè¡ãåŠã¶å Žåã¯ãäžäººã§ã¯è³æãèŠãŠæãåããã®ãéçã§ãã³ããªåããŠããŸãããšãå€ãã§ãããã®ç¹ãããŒã ã§éçºããããšã«ãã£ãŠçžäºã«ã¬ãã¥ãŒã§ããã®ã§ããã£ãŒãããã¯ããããããããã§ãäžäººã§ãã£ãŠããŠã¯æ°ã¥ããªãããšã«ãæ°ã¥ããŸããããããããã«å人çã«æ°ã«ãªã£ããšããã远å ã§åŠç¿ããããšããããŸãã ã ããããªãããšã¯å
šå¡ã§èãã ããŒã ã¡ã³ããŒå
ã«è©³ãã人ãããããè¥æã¡ã³ããŒã®ã¿ã§éçºããŠãããããããããªãããšãçžè«ãããã«ãå
šå¡ããããªããšããå Žé¢ããããŸãããã®ãããªãšãã¯å
šå¡ã§ ãã¹ããã©ã¯ãã£ã¹ã¯äœã ããïŒ ãªã©ãšèããªããé²ããŠããŸããäžäººå¯ãã° ææ® ã®ç¥æµããšããã»ã©ããŸããããªããšãå
šå¡ã§èããçµæãªã®ã§çŽåŸæãæã£ãŠé²ããããŸãã äœæ¥æéãäœãã®ãå€§å€ æå
ã«éçºç°å¢ããªããã°ç¢ºèªã§ããªãã®ã§ããŸãšãŸã£ãæéãäœã£ãŠèªå®
ã§äœæ¥ïŒå®è£
ã»ã¬ãã¥ãŒïŒããããšãå€ããªããŸãããšã¯ãããä»ã«ãããããããšãããã®ã§ãåºæ¬çã«ã¯é±æ«ä»¥å€ã§ã¯ãŸãšãŸã£ãæéãåããŸããããã®èª²é¡ã¯ããŒã ã¡ã³ããŒå
ã§ãèªèããŠããã ããããååŒ·äŒ ãªã©ã®éãŸããæéãäœã£ãŠã¢ãããçã«éçºãããããšã§ãå·®ãæ»ãã®æéãæžãããå¹ççã«é²ããããããã«å¯ŸçããŠããŸãã ãŸããå人ã§ãé倿éäžã«ã³ãŒããèŠãã ããªã ã¹ããŒããã©ã³ ã§ãã§ããã®ã§ãã³ãŒãã¬ãã¥ãŒã ãããããšã«ããŠããŸããå
ã«ã§ããããšã¯ãã£ãŠãããŠã鱿«ã¯åäœç¢ºèªãšèªåã®å®è£
ã«éäžããŠåãçµããšããããã«ããŠããŸãã ãŸãšã ãã®èšäºãæžãã«ããã£ãŠãå人çã«æ¯ãè¿ã£ãŠã¿ãŸããã ä»åã®éçºã§æ¡çšããæ°ããæè¡ã¯ãå人çã«ã¯äžäººã§åŠç¿ããã«ã¯ããŒãã«ãé«ããããããäžéå端ã«åŠç¿ããã ãã§çµãã£ãŠããŸãããšã«ãªã£ãŠããŸãããã§ãããããŒã ã§éçºããããšã§ãã®ãããªç¶æ³ãåé¿ã§ããŸããã æ¯åãã®ãããªæ©äŒãããããã§ã¯ãªãã®ã§ãæ¬¡ã«æªçµéšã®æè¡ãåŠç¿ããé㯠ååŒ·äŒ ã«åå ãããªã©ããŠãæèŠäº€æãã§ããå Žã«èº«ã眮ãããšãéžæè¢ãšããŠèããããšæããŸãã
ããã«ã¡ã @kawanamiyuu ã§ããå
æ¥ ããã°ã§ãç¥ãã ããŸããéãã5/18 (å) ã«éå¬ããã JJUG CCC 2019 Spring ã§ç»å£ããŠããŸããã ããã²ãšãã®ç»å£è
ã§ãã西è§ããã®ç»å£ã¬ããŒãã¯ãã¡ãâ tech-blog.rakus.co.jp ç»å£è³æ speakerdeck.com ç»å£ã«å¯Ÿããåå¿ #ccc_i2b hashtag on Twitter ãããããããšã«æºåžã§ããïŒ ç«ã¡èŠåºãŠãŸãïŒïŒ #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5æ18æ¥ äººãå€ãããŠã³ã£ãã #ccc_i2b — tea (@tethon) 2019幎5æ18æ¥ ã»ãã·ã§ã³ã®åé ã§ ArchUnit ãç¥ã£ãŠãããåããããŠã¿ããšãããã»ãŒå
šå¡ã®æ¹ã ArchUnit ãç¥ããªãã£ãããã§ããã ArchUnitã åããŠèããã — ãããã (@sumeragizzz) 2019幎5æ18æ¥ ã¢ãŒããã¯ã㣠ã®åè³ªç¶æé¢ããæ©ã¿ãArchUnit ã®é
åããã¹ãã³ãŒãã®ã¢ ã€ã㢠ãäºäŸãå
±æã§ããçµ¶å¥œã®æ©äŒãšãªããŸããã ã¢ãŒããã¯ãã®æ©ã¿ ãã£ã¡ãããã åæã®èšèšããã€ã®éã«ãå®ãããªããªã æ°èŠã¡ã³ããŒãžã®åšç¥ãã§ããŠããªã ã¬ãã¥ãŒè² æ
#ccc_i2b — hituzi3939 (@hituzi3939) 2019幎5æ18æ¥ commonããã€ã®éã«ãcommonã§ãªããªãã®ã¯ãããããéãã #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5æ18æ¥ ArchUnitã ã¢ãŒããã¯ã㣠ã ããããªããŠã¢ããªã±ãŒã·ã§ã³ã»ããŒã åºæã®ã«ãŒã«ãé©å¿åºŠé¢æ°åã§ããŠã ãã¶ãããã #ccc_i2b — enk (@enk_enk) 2019幎5æ18æ¥ æ®æ®µãããã¥ã¡ã³ãã«æžããŠããããªéçºæšæºããã¹ãã³ãŒãã§è¡šçŸããŠèªåãã§ãã¯ã§ããæãã£ãœããŠãããã > ArchUnit #jjuc_ccc #ccc_i2b — kntmr (@knt_mr) 2019幎5æ18æ¥ ArchUnit ããã²ãããã¯ãã§æŽ»çšããŠããã ãããïŒ ArchUnit ããã¯äœ¿ãããã — ããã¬ã (@chronos2074) 2019幎5æ18æ¥ ã»ãã·ã§ã³ã¯èããŠãªããã ãã©ãArchUnit ãè¯ãããã ã£ããªãŒãäžåºŠã¯è©äŸ¡ããŠã¿ããã — Hirotaka Ikoma (@hikoma) 2019幎5æ18æ¥ ãããã« ïŒç»å£è³æã®çµã³ã®èšèããïŒ èªåãã¹ãã§ ã¢ãŒããã¯ã㣠ã®å質ãæ
ä¿ãã€ã€ããããã¯ãéçºãéããŠç¶ç¶çã« ã¢ãŒããã¯ã㣠ã磚ããŠããããšãã§ãããšããã... ã©ãã§ãããããããããããªãã§ããããïŒ ð
ããã«ã¡ã¯ã西è§ïŒwest-cïŒã§ãã å
æ¥åç¥ããããŸããéã ã5æ18æ¥ïŒåïŒã«éå¬ããã JJUG CCC 2019 Spring ã«ãŠã売ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話ããšããã¿ã€ãã«ã§ç»å£ããŸããã åœæ¥çºè¡šãèŠã«æ¥ãŠãã ãã£ãçæ§ãããããšãããããŸããã çºè¡šè³æ ç»å£ã¬ããŒã ä»å¹Žã§ãµãŒãã¹éå§10åšå¹Žãè¿ããã æ¥œæ¥œç²Ÿç® ãã«ãªããžã§ã¯ãã¹ãã¬ãŒãžãå°å
¥ãããããžã§ã¯ãã§ã®äžéšå§çµãšããŠã以äžã®ãããªã話ãããŸããã ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã®èŠå ãšãªã£ã楜楜粟ç®ãæ±ããŠããèª²é¡ ã¯ã©ãŠã ãµãŒãã¹ïŒ Amazon S3 ãªã©ïŒã§ã¯ãªããªã³ãã¬ãã¹ã®ã¹ãã¬ãŒãžãéžæããçç± å°å
¥æã«ã¢ããªã±ãŒã·ã§ã³ã®èšèšé¢ã§æèããç¹ å°å
¥åŸã«çºçãããã©ãã«ããæèãã¹ãã ã£ãç¹ ã¢ããªã±ãŒã·ã§ã³ã®èšèšã«çæããã®ã¯ã¡ããã©å»å¹Žã®ä»é ã§ããããä»åã®ç§éã®ããã«ãªããžã§ã¯ãã¹ãã¬ãŒãžãžãã¡ã€ã«ããŒã¿ç§»è¡ãè¡ã£ãäºäŸã¯ããŸãèŠåœããããææ¢ãç¶æ
ã§èšèšãé²ããŠãããšèšæ¶ããŠããŸãã ä»åã®ç»å£ã決ãŸã£ãŠãããåããããªèª²é¡ã»æ©ã¿ãæ±ããïŒãŸãã¯ä»åŸæ±ããããããããªãïŒæ¹åãã«ã§ããéãçèº«ã®æ
å ±ããå±ãããããšèããæºåãé²ããŸããã æãçºè¡šã§ã¯ãããŸããããçºè¡šãèããŠãã ãã£ããè³æãèŠãŠãã ãã£ãçæ§ã«ãšã£ãŠäœãããã®ç¥èŠãåŸãããå
容ã«ãªãã°å¹žãã§ãã ãŸãããã¡ãã¯å人çãªè©±ã§ãããç§ã«ãšã£ãŠä»åãåããŠã®å€éšæè¡ã€ãã³ãã§ã®ç»å£ã§ããã ç·åŒµããããŸãããã倧ããªåé¡ãèµ·ããçºè¡šãçµããããšãã§ããŠè¯ãã£ãã§ãã ãããè³æäœæãçºè¡šç·Žç¿ã«ä»ãåã£ãŠããã ãããåœæ¥å¿æŽã«æ¥ãŠãããåŒç€Ÿã¡ã³ããŒã®ååã®ãããã§ã ð äžæ¹ã§ãç»å£ã®å Žã«æ
£ããŠããªãããšã«ããåçç¹ãå€ã
æããŸããã®ã§ãä»åŸããããã£ãå Žã«åå ããããšã§è
ã磚ããŠãããããšæããŸããïŒ
ããã«ã¡ã¯ãMasaKuã§ãã å
æ¥ã PostgreSQL ã®éçšç¥èåŠç¿ãšããŠä»¥äžã®æžç±ãèªã¿ãŸããã gihyo.jp æžç±å
ã§ç޹ä»ãããŠããã ããŒãã£ã·ã§ãã³ã° ãã«ã€ããŠãå
¬åŒããã¥ã¡ã³ãã«èšèŒãããŠããå
容ãšç
§ããåãããŠãã©ã®ãããªã±ãŒã¹ã§ããã°ããã©ãŒãã³ã¹ã®åäžãèŠèŸŒããã®ãã確èªããŠã¿ãããšæããŸããã ãªããPostgreSQL11ã®ããŒãã£ã·ã§ãã³ã°ã«ã€ããŠã¯ãåŒç€Ÿã® ã¢ããã³ãã«ã¬ã³ã㌠ã«ãæ²èŒãããŠãããŸãã®ã§ãããããŠã確èªããã ãããšå¹žãã§ãã qiita.com ããŒãã«ã®ããŒãã£ã·ã§ãã³ã°ãšã¯ ããŒãã£ã·ã§ãã³ã°ã®ã¡ãªãã ããŒã¿ã®æºå å®è·µ ããŒãã£ã·ã§ã³ã®ããŒãçšããæ€çŽ¢ã®å Žå å
šäœæ€çŽ¢ã®å Žå ããŒãã£ã·ã§ã³åå²ã®ããŒä»¥å€ã®æ€çŽ¢ã®å Žå ãããã« åèãµã€ã ããŒãã«ã®ããŒãã£ã·ã§ãã³ã°ãšã¯ ïŒã€ã®ããŒãã«ãè€æ°ã®ããŒãã«ã«åå²ããŠç®¡çããããšãããŒãã«ã®ããŒãã£ã·ã§ãã³ã°ãšãããŸãã ããŒãã£ã·ã§ãã³ã°ã«ã¯ä»¥äžã®çš®é¡ããããŸãã ã·ã§ããã³ã°ãµã€ãã®è³Œå
¥å±¥æŽã«é¢ããããŒã¿ç®¡çæ¹æ³ãäŸã«èª¬æããããšæããŸãã ã¬ã³ãžã»ããŒãã£ã·ã§ãã³ã° æå®ãããç¯å²ã®å€ãåºã«ããŒã¿ã忣ããŠé
眮ããã ïŒäŸ: 賌å
¥å±¥æŽããŒãã«ãïŒã¶æåäœã§åå²ïŒ ã¬ã³ãžã»ããŒãã£ã·ã§ãã³ã° ãªã¹ãã»ããŒãã£ã·ã§ãã³ã° ããŒãã«ã®ããŒã®å€ãåºã«ããŒã¿ã忣ããŠé
眮ãã ïŒäŸ: ååã«ããŽãªIDã«ããåå²ïŒ ãªã¹ãã»ããŒãã£ã·ã§ãã³ã° ããã·ã¥ã»ããŒãã£ã·ã§ãã³ã°ïŒ PostgreSQL 11 ããïŒ ããŒã¿ã®æ¿å
¥æã«ã«ã©ã ã® ããã·ã¥å€ ãå
ã«ç¹å®ã® ããŒãã£ã·ã§ã³ ã«ããŒã¿ãåããªãããã«åæ£ããŠé
眮ãã ïŒäŸ: ã¬ã³ãŒãIDã«ããåæ£ïŒ ããã·ã¥ã»ããŒãã£ã·ã§ãã³ã° ããŒãã£ã·ã§ãã³ã°ã®ã¡ãªãã PostgreSQLã®å
¬åŒããã¥ã¡ã³ã ã§ã¯ããŒãã£ã·ã§ãã³ã°ã®ã¡ãªããã以äžã®ããã«èª¬æãããŠããŸã ç¹å®ã®æ¡ä»¶äžã§åãåããã®ããã©ãŒãã³ã¹ãåçã«åäžããããšããããŸãã ç¹ã«ããŒãã«å
ã®ã¢ã¯ã»ã¹ãéäžããè¡ã®æ®ã©ãåäžãŸãã¯å°æ°ã® ããŒãã£ã·ã§ã³ ã«ååšããŠããå Žåãããã§ãã ããŒãã£ã·ã§ãã³ã°ã¯ã€ã³ããã¯ã¹ã®å
é ã«ããåã®ä»£ããã«ãªããã€ã³ããã¯ã¹ã®å€§ãããå°ããããŠãã€ã³ããã¯ã¹ã®é »ç¹ã«äœ¿ãããéšåãã¡ã¢ãªã«åãŸãããããªãããã«ããŸãã åãåãããæŽæ°ãäžã€ã® ããŒãã£ã·ã§ã³ ã®å€§éšåã«ã¢ã¯ã»ã¹ããå Žåãã€ã³ããã¯ã¹ãã©ã³ãã ã¢ã¯ã»ã¹ã䜿çšããŠããŒãã«å
šäœã«ãŸãããèªã¿åãããã代ããã«ããã® ããŒãã£ã·ã§ã³ ãžã®é 次ã¢ã¯ã»ã¹ãããããšã§ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã äžæ¬æ¿å
¥ãåé€ã«ã€ããŠããã®èŠä»¶ã ããŒãã£ã·ã§ã³ ã®èšèšã«çµã¿èŸŒãã§ããã°ãããã ããŒãã£ã·ã§ã³ ã®è¿œå ãåé€ã§å®çŸããããšãå¯èœã§ãã ALTER TABLE DETACH PARTITIONãå®è¡ããããããã¯åã
ã® ããŒãã£ã·ã§ã³ ã DROP TABLEã§åé€ããã®ã¯ãäžæ¬ã®æäœããããããé¥ãã«é«éã§ãã ãããã®ã³ãã³ãã¯ãŸããäžæ¬ã®DELETEã§åŒãèµ·ããããVACUUMã®ãªãŒããŒããããå®å
šã«åé¿ã§ããŸãã æ»
å€ã«äœ¿çšãããªãããŒã¿ãå®äŸ¡ã§äœéãªã¹ãã¬ãŒãžã¡ãã£ã¢ã«ç§»è¡ããããšãã§ããŸãã ä»åã¯ã1ã€ç®ã®å©ç¹ã«çç®ããŠåäœã確èªããŠã¿ãããšæããŸãã ããŒã¿ã®æºå æ€èšŒã®ããã«ä»¥äžã®ããŒãã«ãäœæããŠãããŸãã -- ååã«ããŽãªããŒãã« CREATE TABLE categories( id SERIAL PRIMARY KEY, name TEXT UNIQUE ); -- ååã«ããŽãªããŒãã«ã®ãµã³ãã«ããŒã¿ INSERT INTO categories (name) VALUES ( ' é£å ' ); INSERT INTO categories (name) VALUES ( ' è¡£é¡ ' ); INSERT INTO categories (name) VALUES ( ' æ¬ ' ); INSERT INTO categories (name) VALUES ( ' ã³ã³ãã¥ãŒã¿ ' ); -- 賌å
¥äœå±¥æŽããŒãã« CREATE TABLE purchase( id SERIAL PRIMARY KEY, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW()), FOREIGN KEY (category_id) REFERENCES categories(id) ); 賌å
¥å±¥æŽããŒãã«ã®ãã¹ãããŒã¿ã¯éå»ïŒå¹Žåã§åèš50äžä»¶ãšããŸãã -- 賌å
¥å±¥æŽããŒãã«ã®ãµã³ãã«ããŒã¿ INSERT INTO purchase (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 , ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; ããŒãã£ã·ã§ãã³ã°ã§äœæããããŒãã«ã«ã€ããŠã¯åŸè¿°ããŸãã å®è·µ æç« å
ã«ããããŸããšãããç¹å®æ¡ä»¶äžãšã¯ãç¹ã«ããŒãã«å
ã®ã¢ã¯ã»ã¹ãéäžããè¡ã®æ®ã©ãåäžãŸãã¯å°æ°ã® ããŒãã£ã·ã§ã³ ã«ååšããŠããå Žåãã§ãã 賌å
¥å±¥æŽãäŸã«ããŠèããŠã¿ãããšæããŸãã ãããµãŒãã¹ã§ã¯ã5幎åã®è³Œå
¥å±¥æŽãä¿ç®¡ããŠãããšããŸãã ãã®ãã¡ãçŽè¿ïŒå¹Žã®è³Œå
¥å±¥æŽãããªã¹ã¹ã¡ååãæç€ºããæ©èœãå®è£
ããå Žåã賌å
¥å±¥æŽãäžã€ã®ããŒãã«ã§ç®¡çãããããã幎åäœã§åå²ãããããŒãã«ã§ç®¡çããŠããã»ããããã©ãŒãã³ã¹ã¯åäžããããã§ãã ä»åã®ã±ãŒã¹ã§ã¯ date ã«ã©ã ãããŒãšããã¬ã³ãžã» ããŒãã£ã·ã§ã³ ãè¡ããŸãã CREATE TABLE purchase_range( id SERIAL, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW(), FOREIGN KEY (category_id) REFERENCES categories(id) ) PARTITION BY RANGE ( date ); CREATE TABLE purchase_range_y2014 PARTITION OF purchase_range FOR VALUES FROM ( ' 2014-01-01 00:00:00 ' ) TO ( ' 2014-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2015 PARTITION OF purchase_range FOR VALUES FROM ( ' 2015-01-01 00:00:00 ' ) TO ( ' 2015-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2016 PARTITION OF purchase_range FOR VALUES FROM ( ' 2016-01-01 00:00:00 ' ) TO ( ' 2016-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2017 PARTITION OF purchase_range FOR VALUES FROM ( ' 2017-01-01 00:00:00 ' ) TO ( ' 2017-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2018 PARTITION OF purchase_range FOR VALUES FROM ( ' 2018-01-01 00:00:00 ' ) TO ( ' 2018-12-31 23:59:59 ' ); -- 賌å
¥å±¥æŽããŒãã«ãµã³ãã«ããŒã¿ïŒããŒãã£ã·ã§ã³ïŒ INSERT INTO purchase_range (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 AS category_id, ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; ããŒãã£ã·ã§ã³ ã®ããŒãçšããæ€çŽ¢ã®å Žå ãŸãã¯ã2017幎12æã®è³Œå
¥å±¥æŽã®ä»¶æ°ãååŸãã SQL ãå®è¡ããçµæãèŠãŠã¿ãŸãããã -- åäžããŒãã«ã§ç®¡çãããŠããå Žå explain analyze select count (*) from purchase where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6114 . 90 .. 6114 . 91 rows = 1 width= 8 ) (actual time= 125 . 218 .. 125 . 218 rows = 1 loops= 1 ) -> Gather (cost= 6114 . 69 .. 6114 . 90 rows = 2 width= 8 ) (actual time= 120 . 538 .. 125 . 274 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5114 . 69 .. 5114 . 70 rows = 1 width= 8 ) (actual time= 96 . 651 .. 96 . 652 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5108 . 41 rows = 2513 width= 0 ) (actual time= 0 . 036 .. 96 . 162 rows = 2053 loops= 3 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timestamp without time zone)) Rows Removed by Filter: 100529 Planning Time: 0 . 215 ms Execution Time: 125 . 323 ms -- ããŒãã£ã·ã§ã³ã§åå²ããŠããããŒãã«ã®å Žå explain analyze select count (*) from purchase_range where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------- Aggregate (cost= 26 . 09 .. 26 . 10 rows = 1 width= 8 ) (actual time= 0 . 007 .. 0 . 007 rows = 1 loops= 1 ) -> Append (cost= 0 . 00 .. 26 . 07 rows = 5 width= 0 ) (actual time= 0 . 004 .. 0 . 004 rows = 0 loops= 1 ) -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 26 . 05 rows = 5 width= 0 ) (actual time= 0 . 003 .. 0 . 003 rows = 0 loops= 1 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timest amp without time zone)) Planning Time: 0 . 667 ms Execution Time: 0 . 034 ms å®è¡æé㯠ããŒãã£ã·ã§ã³ ã§åå²ããŠããããŒãã«ã®æ¹ãçããªããšããçµæã«ãªããŸããã æ¥æã§ ããŒãã£ã·ã§ã³ ãåå²ããŠããããã察象å€ã®æéã®ã¬ã³ãŒãã«ã¯ã¢ã¯ã»ã¹ãããªãããããã©ãŒãã³ã¹ãåäžããŸããã å
šäœæ€çŽ¢ã®å Žå ä»åºŠã¯ãå
šããŒã¿ã®ä»¶æ°ãååŸããå Žåãèæ
®ããŠã¿ãŸããã -- åäžããŒãã«ã§ç®¡çãããŠããå Žå explain analyze select count (*) from purchase; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6789 . 38 .. 6789 . 39 rows = 1 width= 8 ) (actual time= 274 . 970 .. 274 . 970 rows = 1 loops= 1 ) -> Gather (cost= 6789 . 17 .. 6789 . 38 rows = 2 width= 8 ) (actual time= 273 . 169 .. 275 . 097 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5789 . 17 .. 5789 . 18 rows = 1 width= 8 ) (actual time= 252 . 091 .. 252 . 092 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5268 . 33 rows = 208333 width= 0 ) (actual time= 0 . 016 .. 105 . 048 rows = 166667 loops= 3 ) Planning Time: 0 . 135 ms Execution Time: 275 . 149 ms -- ããŒãã£ã·ã§ã³ã§åå²ããŠããããŒãã«ã®å Žå explain analyze select count (*) from purchase_parent; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 8690 . 90 .. 8690 . 91 rows = 1 width= 8 ) (actual time= 429 . 425 .. 429 . 425 rows = 1 loops= 1 ) -> Gather (cost= 8690 . 68 .. 8690 . 89 rows = 2 width= 8 ) (actual time= 429 . 415 .. 429 . 608 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 7690 . 68 .. 7690 . 69 rows = 1 width= 8 ) (actual time= 406 . 901 .. 406 . 901 rows = 1 loops= 3 ) -> Parallel Append (cost= 0 . 00 .. 7169 . 85 rows = 208334 width= 0 ) (actual time= 0 . 018 .. 269 . 589 rows = 166667 loops= 3 ) -> Parallel Seq Scan on purchase_y2017 (cost= 0 . 00 .. 1259 . 81 rows = 60481 width= 0 ) (actual time= 0 . 015 .. 90 . 205 rows = 102817 loops= 1 ) -> Parallel Seq Scan on purchase_y2015 (cost= 0 . 00 .. 1259 . 19 rows = 60419 width= 0 ) (actual time= 0 . 017 .. 112 . 477 rows = 102713 loops= 1 ) -> Parallel Seq Scan on purchase_y2016 (cost= 0 . 00 .. 1257 . 65 rows = 60365 width= 0 ) (actual time= 0 . 016 .. 18 . 776 rows = 34207 loops= 3 ) -> Parallel Seq Scan on purchase_y2014 (cost= 0 . 00 .. 1255 . 53 rows = 60253 width= 0 ) (actual time= 0 . 014 .. 61 . 613 rows = 51215 loops= 2 ) -> Parallel Seq Scan on purchase_y2018 (cost= 0 . 00 .. 1096 . 00 rows = 52600 width= 0 ) (actual time= 0 . 019 .. 76 . 853 rows = 89420 loops= 1 ) Planning Time: 0 . 162 ms Execution Time: 429 . 668 ms ããæå³äºæ³éãã§ããããå®è¡æéã¯ããŒãã£ã·ã§ãã³ã°ããŠããããŒãã«ã®ã»ããé·ããªããŸããã ããŒãã«ãåå²ããŠããããã«ãæ¬æ¥äžåºŠã§å®äºããã·ãŒã±ã³ã·ã£ã«ã¹ãã£ã³ã ããŒãã£ã·ã§ã³ ã®æ°ã ãå®è¡ããããããããã©ãŒãã³ã¹ãå£åãããšæãããŸãã 賌å
¥å±¥æŽãæ€çŽ¢ããããšããããšã«äž»çŒã眮ãå Žåã¯ãéçšæ¹æ³æ¬¡ç¬¬ã§ã¯ããŒãã£ã·ã§ãã³ã°ãå¿
ãããé©åã§ã¯ãªãå Žåãããã®ã§æ³šæãå¿
èŠã§ãã ããŒãã£ã·ã§ã³ åå²ã®ããŒä»¥å€ã®æ€çŽ¢ã®å Žå æåŸã«ã ããŒãã£ã·ã§ã³ åå²ã«å©çšããããŒä»¥å€ã®ã«ã©ã ãçµèŸŒã¿æ¡ä»¶ã«ããå Žåã®ããã©ãŒãã³ã¹ã確èªããŠã¿ãŸãã ä»åã¯ã«ããŽãªIDã察象ã«ããæ€çŽ¢ãè¡ã£ãŠã¿ãããšæããŸãã -- åäžããŒãã«ã§ç®¡çãããŠããå Žå explain analyze delete from purchase where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------- Delete on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 803 .. 87 . 803 rows = 0 loops= 1 ) -> Seq Scan on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 801 .. 87 . 801 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 307745 Planning Time: 0 . 062 ms Execution Time: 87 . 829 ms -- ããŒãã£ã·ã§ã³ã§åå²ããŠããããŒãã«ã®å Žå explain analyze delete from purchase_range where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- Delete on purchase_range (cost= 0 . 00 .. 7869 . 12 rows = 5 width= 6 ) (actual time= 103 . 825 .. 103 . 826 rows = 0 loops= 1 ) Delete on purchase_range_y2014 Delete on purchase_range_y2015 Delete on purchase_range_y2016 Delete on purchase_range_y2017 Delete on purchase_range_y2018 -> Seq Scan on purchase_range_y2014 (cost= 0 . 00 .. 1614 . 14 rows = 1 width= 6 ) (actual time= 22 . 576 .. 22 . 576 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76811 -> Seq Scan on purchase_range_y2015 (cost= 0 . 00 .. 1612 . 55 rows = 1 width= 6 ) (actual time= 21 . 112 .. 21 . 112 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76844 -> Seq Scan on purchase_range_y2016 (cost= 0 . 00 .. 1627 . 21 rows = 1 width= 6 ) (actual time= 20 . 850 .. 20 . 850 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 77537 -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 1603 . 49 rows = 1 width= 6 ) (actual time= 21 . 146 .. 21 . 146 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76279 -> Seq Scan on purchase_range_y2018 (cost= 0 . 00 .. 1411 . 74 rows = 1 width= 6 ) (actual time= 18 . 105 .. 18 . 106 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 67099 Planning Time: 0 . 376 ms Execution Time: 103 . 901 ms å€å°ã®å·®ããããã®ã®ãããŸã§å€§ããªå·®ããªããšãããå°ãæå€ãªçµæãšãªããŸããã ãšããã®ããä»åäœæãããµã³ãã«ããŒã¿ã¯æ¥ä»ã§ããŒãã£ã·ã§ãã³ã°ããŠãããããã«ããŽãªIDã§çµã蟌ãã å Žåã¯åæ£é
眮ããŠããããŒãã«ãã¹ãŠããã§ãã¯ããªããã°ãªããªããªããŸãã ãã®ãããå
ã»ã©ã®å
šäœæ€çŽ¢ãšåçšåºŠã®ããã©ãŒãã³ã¹ã«ãªããšæã£ãŠããŸããã ããŒãã£ã·ã§ã³ ã§åå²ãããŠããããŒãã«ã®æ°ããïŒããŒãã«ã«æ ŒçŽãããŠããã¬ã³ãŒãã®éã«ãã£ãŠå·®ãåºãã®ã§ã¯ãªãã§ããããã ãããã« ããŒãã£ã·ã§ãã³ã°ãšãã£ãŠããããŒã¿ç®¡çã® éã®åŒŸäžž ãšãããã®ã§ã¯ãªããå Žåã«ãã£ãŠã¯ããã©ãŒãã³ã¹ãå£åããå ŽåãããããšãããããŸããã ä»åã¯ã¬ã³ãž ããŒãã£ã·ã§ã³ ãäŸã«ããŸããããå®éã®ãµãŒãã¹ãã©ã®ããã«éçšãããŠããããèæ
®ããããšã§ãã©ã®ããã« ããŒãã£ã·ã§ã³ ãåå²ãã¹ãããèŠããŠããã®ã§ã¯ãªãã§ããããã ïŒãããã¯ã ããŒãã£ã·ã§ã³ åå²ããå¿
èŠãç¡ãããšãïŒ ãã®ä»ã«ããç¶æ¿ããŒãã£ã·ã§ãã³ã°ã®æ€èšŒããé«è² è·ç¶æ
ã§ã®ããã©ãŒãã³ã¹ãªã©ãæ€èšŒããŠã¿ããããšããããŸãããããã®èŸºã¯ãŸãå¥ã®æ©äŒã«ããããšæããŸãã åèãµã€ã [改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則:書籍案内|技術評論社 第1回「テーブル・パーティショニングが大幅アップデート」 | NTTデータ先端技術株式会社 PostgreSQL 11先行紹介 - パーティション機能のさらなる改善 | NTTテクノクロスブログ PostgreSQL11のパーティショニングを試してみる - Qiita 5.10. テーブルのパーティショニング ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« æè¿ã ãªã©ã€ãªãŒ ããåºçãããŠããããã«ã·ãŒ ããã°ã©ã ããšããæžç±ãèªã¿ãŸããã ãšã³ãžãã¢ç®ç·ã§å¥åº·ã«ã€ããŠæžãããŠããã®ã§ãããé¢çœãå
容ã ã£ãã®ã§ç޹ä»ããŠã¿ãããšæããŸãã www.oreilly.co.jp ã¯ããã« æŠèŠ ãªãèªãããšæã£ãã®ãïŒ é¢çœããšæã£ããã€ã³ã ãŸãšã æŠèŠ é·æé座ã£ããŸãŸä»äºãç¶ãã ããã°ã©ã ã®æ©ã¿ã§ãããè
°çãæéŠã®çã¿ãç®ã®çã¿ãé çãšãã£ãå¥åº·åé¡ã«å¯ŸããŠãé£ç掻ãçæŽ»ç¿æ
£ãæ¹åããæ¹æ³ãç°¡åãªãšã¯ãµãµã€ãºã玹ä»ããŠãããšã³ãžãã¢åãã®æžç±ã«ãªããŸãã ãªãèªãããšæã£ãã®ãïŒ é£äŒã®éã«æè¡æžã1åã¯èªãããšæã£ãŠãã æ¬å±ãžæ¢ãã«è¡ã£ããšãã«æè¡æžã®ã³ãŒããŒã§ããŸããŸèŠã€ããããã§ãã é¢çœããã ãšæã£ãã®ã§è³Œå
¥ããŠã¿ãŸããã æè¿ãå¥åº·æèãé«ããªã®ã§å°ãèªãã§ã¿ãŠé¢çœãã£ãã èªçããå§ããŠ3幎ç®ã«çªå
¥ããæ®æ®µããé£ç¿æ
£ã«ã¯æ°ãã€ãã£ãŠããŸãã åºãæµ
ã調ã¹ããããŠããŸãããããå°ãç¥èãæ¬²ãããšæã£ãŠããŸããã å¥åº·ãæ é€åŠã«èå³ãããããšã倧ããçç±ã§ãã é¢çœããšæã£ããã€ã³ã ãšã³ãžãã¢ã«ãŠã±ãããªè¡šçŸãå€ããŠãããããã å¥åº·ç¶æ
ãæ¹åããããšã ãªãã¡ã¯ã¿ãªã³ã° ãšè¡šçŸãããŠãã ã¢ãžã£ã€ã« ãªæ¹æ³è«ã§æžãããŠãã ãäœéèšã¯ãµãŒãã®ã¡ã¢ãªãã¢ãã¿ãªã³ã°ããã®ãšåãããã«ãå¥åº·ãã¢ãã¿ãªã³ã°ããããã®ããŒã«ã 説æãç§åŠçã§ããããš åŠäŒèªããåŒçšãããŠããããæ°å€ãªã©ã«ããç§åŠçãªè£ä»ãã®ãã説æã«ãªã£ãŠããã®ã§èª¬åŸåããããŸããã ããã°ã©ã èŠç¹ã§æžãããŠããããšããããããžã«ã«ãªå
容ã§ããã é çãçŒç²Ÿ ç²åŽ ãè
°çãæéŠçãžã®å¯Ÿç ããããããã¹ã¯ã¯ãŒã¯ã«ãã£ãŠåŒãèµ·ããããåå ãç§åŠçã«æžãããŠããŠããã®å¯Ÿçãããšã¯ãµãµã€ãºã«ã€ããŠæžãããŠããŸãã çŒç²Ÿ ç²åŽ ãããã«ããé çã¯ç¹ã«æ©ã¿ãªã®ã§ã以äžã®ãããªå¯ŸçãæèããŠãã£ãŠã¿ããããªãšæããŸããã ãé çã¯ç掻ãè
ããã»ã©ã®ãã®ã§ãªããŠããçç£æ§ãäžããŠããŸãããšæžãããŠããŸãããããã®ãšããã ãšæããŸãã ããŸãã«ç¬ããã ç®ã®éåããã(20åã«1åã6ã¡ãŒãã«å
ã20ç§èŠã€ãã) äŒæ©ãé »ç¹ã«åã(ç®ãäŒããããäŒæ©ãå¢ãã) ã¡ã¬ããå€ã(æå€ãšå€§äºïŒ) ã«ãã§ã€ã³ã¯æããããªã(é çãèªçºãããäžæçã«è§£æ¶ãã广ãããã®ã§æ³šæ) æ°Žã飲ã(1æ¥ïŒãªããã«) ãŸãšã å¥åº·ã«ã¯æ°ãã€ããããã©ãäœããããè¯ããããããªããšã³ãžãã¢ã«ã¯è¯ãæžç±ãªã®ã§ã¯ãªãããšæããŸããã æ°å3幎ç®ã«ãªããå¥åº·ã§ããããšã¯èªåã®ããã©ãŒãã³ã¹ã«ç¹ãã£ãŠãããªãšæ¥ã
æããŠããŸãã éåããªããšãããªããªãŒãšããæ°æã¡ã«ãªããçæŽ»ç¿æ
£ãæ¹åããããšãããã£ããã«ã¯ãªã£ããšæããŸãã ã¡ããã©å¥åº·èšºæã®ã·ãŒãºã³ã§ãããã®ã§ã ãªãã¡ã¯ã¿ãªã³ã° ãå§ãããã£ããã®åèã«ãªãã°å¹žãã§ãã
ã¯ããã« GAS(Google Apps Script)ãšã¯ ä»åããããš GASã®å®è¡çµæãæžã蟌ãSpreadSheetã®äœæ GASã®äœæ POSTããèšå® è£è¶³ïŒæ¿èªãæ±ããããã curlããPOSTãã ãããã« ã¯ããã« kuwa_38ã§ãããã®èšäºã§ã¯ Google Apple ScriptãšããŠäœæãã ã¹ã¯ãªãã ã curl ã³ãã³ãããå®è¡ããæ¹æ³ã玹ä»ããŸãã GAS( Google Apps Script)ãšã¯ 以åãã®ããã°ã§æžãããŠããèšäºã®äžã«åããããã説æããã£ãã®ã§åŒçšããŸãã ã Google ã®åçš®ã¢ããª( Google ã¹ãã¬ããã·ãŒã / Google ããã¥ã¡ã³ããªã©)ãã¢ããªå
ã§ã¯ãªãå€ããæäœã§ããJSã©ã€ã¯ãª ããã°ã©ãã³ã°èšèª ãã§ãã ãšã¯ã»ã«ã«å¯Ÿãã VBA ã®é¢ä¿ãšäžç·ã§ãã tech-blog.rakus.co.jp äžã®èšäºã¯å
¥éãšã㊠ã¹ã¯ãªãã ãšãã£ã¿äžããäœæãã ã¹ã¯ãªãã ãå®è¡ããŠããŸããæ¬èšäºã§ã¯ ã¹ã¯ãªãã ãšãã£ã¿äžããã§ãªããå€éš( curl ã³ãã³ã)ããå®è¡ããæ¹æ³ã®ç޹ä»ãšãªããŸãã ä»åããããš curl ã³ãã³ãããGASãå®è¡ããããã®å€§ãŸããªæé ã¯ä»¥äžã§ãã GASã®å®è¡çµæãæžã蟌ãSpreadSheetã®äœæ GASã®äœæ POSTããèšå® curl ããPOSTãã GASã®å®è¡çµæãæžã蟌ãSpreadSheetã®äœæ ä»åã¯ä»¥äžã®ãããªã·ãŒããäœæããæç©(fruit)ãšå€æ®µ(price)ãæ«å°Ÿã«è¿œèšããŸãã æžã蟌ãSpreadSheet GASã®äœæ 以äžã ã¹ã¯ãªãã ãšãã£ã¿ã«èšèŒããŸãã /** * POSTãããæã«å®è¡ãããã¡ãœãã. * è¡ã®æåŸã«åãåã£ãå€ãæ¿å
¥ãã * @param e äžèšã®JSONãæ³å® * fruit:ãã«ãŒãå * price:äŸ¡æ Œ * @return ãªã */ function doPost(e) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName( 'ã·ãŒãå' ); var PostData = JSON.parse(e.postData.contents); // è¡ã®æåŸã«å€ã远å sheet.appendRow( [ PostData.fruit, PostData.price ] ); } åèïŒ qiita.com POSTããèšå® POSTããåã«äœæãã ã¹ã¯ãªãã ã«ã¢ã¯ã»ã¹ã§ããããã«èšå®ããŸãã å
¬é > ãŠã§ãã¢ããªã±ãŒã·ã§ã³ ãšããŠå°å
¥ ã¹ã¯ãªãã èš±å¯1 次ã®ãŠãŒã¶ãšããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ïŒèªå ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ãããŠãŒã¶ïŒå
šå¡(å¿åãŠãŒã¶ãå«ã) ã¹ã¯ãªãã èš±å¯2 æŽæ°ãã¿ã³ãæŒããšãæ¥ç¶ããããã®URLãäœæãããŸã curl ã§æ¥ç¶ããéã«äœ¿çšããã®ã§ã³ããŒããŠãããšè¯ãã§ã ã¹ã¯ãªãã èš±å¯3 åèïŒ yamap55.hatenablog.com è£è¶³ïŒæ¿èªãæ±ããããã æ¿èªãæ±ããããå Žåã¯äžèšãåèã«æ¿èªããŠãã ããã tonari-it.com curl ããPOSTãã 以äžã® curl ãå®è¡ããPOSTããŸãã curl -X POST -H "Content-Type: application/json" -d '{"fruit":"peach", "price":"650" }' -L https://script.google.com/macros/s/xxxx/exec ã¹ã¯ãªãã å®è¡çµæ ãããã« ãã®èšäºã§ã¯ curl ã³ãã³ãã䜿ã£ãŠPOSTããGAS( Google Apple Script)ãå®è¡ããæ¹æ³ã玹ä»ããŸãããä»å㯠curl ã³ãã³ããçŽæã¡ã§ããããèªäœã¢ããªãªã©ããPOSTããä»çµã¿ã«ããŠããã°ãSpreadSheetãžã®æäœãããæè»œã«ã§ããããã«ãªãããšæããŸãïŒäœãäœããããªãšææ¡äžïŒã æ°ã«ãªã£ãæ¹ã¯ãã²è©ŠããŠã¿ãŠãã ããã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
ããã«ã¡ã @kawanamiyuu ã§ããæ¥é±æ«ã«éå¬ããããæ¥æ¬æå€§ã® Java ã³ãã¥ããã£ã€ãã³ã JJUG CCC 2019 Spring ã« ã©ã¯ ã¹ã®ãšã³ãžãã¢ã 2 åç»å£ããŸãã®ã§ãç¥ããããŸãã ã€ãã³ãæŠèŠ æ¥æïŒ2019 幎 5 æ 18 æ¥ (å) äŒå ŽïŒ ãã«ãµãŒã« æ°å®¿ã°ã©ã³ãã³ã³ãã¡ã¬ã³ã¹ã»ã³ã¿ãŒ å
¬åŒ HPïŒ http://www.java-users.jp/ccc2019spring/ ããã·ã¥ã¿ã° ïŒ #jjug_ccc www.java-users.jp goo.gl ç»å£ã»ãã·ã§ã³ ã»ãã·ã§ã³äžèЧã¯ã³ãã©ãâã http://www.java-users.jp/ccc2019spring/#/sessions ïŒïŒå£²ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話 ç»å£è
ïŒè¥¿è§ç¥äœ³ïŒæ±äº¬æ ç¹ãšã³ãžãã¢ïŒ ã»ãã·ã§ã³è©³çް ïŒæŠèŠïŒ ãæ¥œæ¥œç²Ÿç®ã ã¯æ ªåŒäŒç€Ÿ ã©ã¯ ã¹ãæäŸããçµè²»ç²Ÿç® ã¯ã©ãŠã ãµãŒãã¹ã§ããåžå Žã®æé·ã åãæ¹æ¹é© ãšãã£ãç€ŸäŒæ
å¢ãšãšãã«ãµãŒãã¹ãæé·ãç¶ããŠããŸãããã®äžæ¹ã§ã売ããŠãããµãŒãã¹ã§ãããããã«èç©ããæè¡çè² åµãããžãã¹ã®ã¹ã±ãŒã«ã«äŒŽãéçšèª²é¡ããŸãæ±ããŠããŸãã ãã®èª²é¡ã®ïŒã€ãšããŠãå¢ãç¶ãã顧客ããŒã¿ã®ããã¯ã¢ããè¥å€§åããã³ããã¯ã¢ããæéå¢å€§ãšãã課é¡ãæ·±å»åããŠããŸããããªãªãŒã¹ã¡ã³ããã³ã¹æéãžã®åœ±é¿ãç¡èŠã§ããªããªã£ãŠããããšããã Amazon S3 ...ã§ã¯ãªãã Amazon S3 äºæã®ãã©ã€ããŒããªããžã§ã¯ãã¹ãã¬ãŒãžãžã®ããŒã¿ç§»è¡ã«èžã¿åããŸããã ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãããã©ã®ããã«æè¡éžæãããã©ã®ããã«å€§åãªé¡§å®¢ããŒã¿ãå®å
šç¢ºå®ã«ç§»è¡ããã®ãããŸãããªãªãŒã¹åŸã«çºçããåé¡ã«ã©ã®ããã«å¯ŸåŠããã®ãããµãŒãã¹ããŒã³ããã10幎ãçµéãããªã³ãã¬ãã¹ãæ Java ãã¬ãŒã ã¯ãŒã¯ ãšæ±ºããŠä»ããšãããæè¡ã¹ã¿ãã¯ã§æ§æããããµãŒãã¹ã§ã¯ãªã楜楜粟ç®ã«ãšã£ãŠã®æè¡çãªãã£ã¬ã³ãžã«ã€ããŠãæé·ãç¶ãããµãŒãã¹ãå¿
ãéãããã§ãããçŸå®çã§æ³¥èãã話ãå
·äœçã«çºè¡šããŸãã ç¿é±ã«éå¬äºå®ã® RAKUS Meetup Tokyo #3 ã®ãªãŒãã»ãã·ã§ã³ã JJUG CCC 2019 Spring ãšããç¹å¥ãªå Žæããã²ãšè¶³æ©ããå±ãããŸãã ïŒïŒArchUnit ã§ Java / Kotlin ã¢ããªã±ãŒã·ã§ã³ã® ã¢ãŒããã¯ã㣠ã CI ãã ç»å£è
ïŒãããªã¿ããïŒå€§éªæ ç¹ãšã³ãžãã¢ïŒ ã»ãã·ã§ã³è©³çް ïŒæŠèŠïŒ ArchUnit ãšã¯äžèšã§ãããšã Java / Kotlin ã¢ããªã±ãŒã·ã§ã³ã®ããã±ãŒãžãã¯ã©ã¹ã®äŸåé¢ä¿ããã¢ããªã±ãŒã·ã§ã³åºæã®å®è£
ã«ãŒã«ã JUnit ã®ãã¹ãã³ãŒãããŠè¡šçŸããã¹ãã§ãããã¹ã ãã¬ãŒã ã¯ãŒã¯ ã§ãã æã
ã«ãšã£ãŠ ArchUnit ã¯ãªã«ãå¬ããã®ããArchUnit ã§ã§ããããšã¯äººéã«ããã³ãŒãã¬ãã¥ãŒãéçè§£æã«ãã£ãŠããã§ãã¯ã§ãããã«æããŸãã ãã®çºè¡šã§ã¯ãå®éã«ç§ãã¡ã®ãããã¯ãã® CI ã«çµã¿èŸŒãŸããŠãããã¹ãã³ãŒãã®å®äŸãšåãããŠãã¢ãŒããã¯ãã®èгç¹ãéçºããŒã ã®èгç¹ãã ArchUnit ã®ãŠã¬ã·ã¿ã«ã€ããŠã話ããŸãã æåŸã« ä»åã ã©ã¯ ã¹ãšããŠåã㊠Java ã®ã€ãã³ããžã®ç»å£ã§ãããããŠãæ±äº¬æ ç¹ãšã³ãžãã¢ããã®ç€Ÿå€ã€ãã³ãç»å£ãåã§ããä»å¹ŽåºŠã ã©ã¯ ã¹ã¯ã€ãã³ãç»å£ãžã®åãçµã¿ãæŽã«å éãããŠãããŸãã æåŸã«ãªããŸããããåœæ¥ãã»ãã·ã§ã³ã§ãäŒãã§ããã®ã楜ãã¿ã«ããŠããŸãïŒ
id:radiocat ã§ãã倧éªã§ãšã³ãžãã¢ããããå匷äŒã®éå¶ãããŠããŸãã什åãç¶ç¶ããŠéå¬ããŸãã®ã§ãã²ãåå ãã ããã rakus.connpass.com åéå¬ããäºæ³ããå€ãã®æ¹ã
ã«åå ããŠé ããä»åã¯ãããããããšã«æ©ããå®å¡ã«éããŠããŸããŸããã®ã§å¢æ ããŠããŸããæ§ã
ãªãšã³ãžãã¢ã®æ¹ã«ãäŒãã§ããŠãäžç·ã«åå ããåŒç€Ÿã®ç€Ÿå¡ã楜ããŸããŠé ããŠããŸãã 4æã®ã¬ããŒã å¹³ææåŸã®ãšã³ãžãã¢ããããå匷äŒã®æ§åãå°ãã ãã玹ä»ããŸãã åå é ããæ¹ã
ã¯ã芧ã®ãããªããŒãã§èªç¿ãããŠããããã§ãã ä»ç®ã®å
容ã¯èªå·±ç޹ä»ãå
ŒããŠç°¡åã«å
±æããŠé ãããã«ããŠããŸãã PHP é¢ä¿ã®ããŒããæ¯èŒçå€ãã£ãå°è±¡ã§ãåå è
åå£«ã®æ
å ±äº€æãªã©ãè¡ãããŠããŸãããä»ã«ã Rails ãJSã Java ãæ±ãå
容ããã£ãŠãèªåã®å¥œããªããŒãã§èªç±ã«åãçµãã§é ãããšãã§ããŸãã ãšã³ãžãã¢çµæŽãããèãããéãæ§ã
ã§ãè¥æããããã©ã³ããããŠåŠçã®ãããåå ãããŠããŸããåŒç€Ÿã®éå¶ã次åããè¥æã¡ã³ããŒã«ãæäŒã£ãŠãããäºå®ã§ãå¹
åºããµããŒãããŠãããã°ãšæããŸãã çµæ¥åŸã®å°è
¹ã空ãæé垯ã§ãã®ã§ãçãäžã®ããŒãã«ã§ãèåããèªç±ã«ãåãé ããããã«ãªã£ãŠããŸããæ°è»œã«ç«ã¡å¯ããŠããšã³ãžãã¢ã楜ãããå Žã¥ãããç®æããŠããŸããäžç·ã«æ¥œããã§é ãããšã³ãžãã¢ã®çæ§ã®ãåå ããåŸ
ã¡ããŠãããŸãã
ã¯ããã« ããã«ã¡ã¯ã什åæåã®èšäºã¯ sts -250rrãããå±ãããŸãã ç§ããšã§ããããããžã§ã¯ããå€ãã5æãã ã¢ãžã£ã€ã« éçºãè¡ãããšã«ãªããŸããã ã¢ãžã£ã€ã« éçºã®äžã§ã ã¹ã¯ã©ã ããããšã®ããšã ã£ãã®ã§ãGWã®æéãå©çšããŠãSCRUM BOOT CAMP ã®æ¬ãèªãã§ã¿ãŸããã ä»åã¯èªèº«ã®é ã®äžã®æŽçãèšäºã«æ®ããŠããããšæããŸãã å®éã«ãã£ãŠã¿ãã®ã¯ããããã«ãªããŸãã®ã§ãééããããããšæããŸããã容赊ãã ããã ã¯ããã« ã¢ãžã£ã€ã«éçºãšã¯ ã¹ã¯ã©ã ãšã¯ïŒ ã¹ã¯ã©ã ã®ç¹åŸŽ ã¹ã¯ã©ã ã®å
šäœå ã¹ã¯ã©ã ã§ã®éçºããŒã ã®åœ¹å² éçºããŒã ã®é²ãæ¹ ã¹ããªã³ãã®é²ãæ¹ ãªãªãŒã¹å€æå¯èœ ã¹ããªã³ãã¬ãã¥ãŒ ã¹ããªã³ãã¬ããã¹ãã¯ãã£ãïŒæ¯ãè¿ãïŒ çµããã« åè ã¢ãžã£ã€ã« éçºãšã¯ ã¢ãžã£ã€ã« éçºã§ã¯ããäºåã«ãã¹ãŠãæ£ç¢ºã«äºæž¬ããèšç»ããããšã¯ã§ããªãããšããåæã®ããšä»¥äžã®ãããªé²ãæ¹ãè¡ããŸãã é¢ä¿è
ã¯ç®çéæã®ããã«ãäºãã«ååããããªããé²ãã å©çšè
ã®åå¿ãé¢ä¿è
ããã®ãã£ãŒãããã¯ãç¶ç¶çã«åŸãªãããèšç»ã調æŽããã äžåºŠã«ãŸãšããŠã§ã¯ãªããå°ããã€ãããããããŠå®éã«åºæ¥äžãã£ããã®ãæ±ããŠãããã®ã§ããããé »ç¹ã«ç¢ºèªããã ã¢ãžã£ã€ã« ã§ã¯ããããã®å
šäœåã¯æããã«ããäžã§ãéèŠãªãã®ããªã¹ã¯ã®é«ããã®ãåªå
ããéèŠåºŠã®äœããã®ã¯åŸã«åãããšã§ãèŠæ±ã®åæãèšèšã«å¯ŸããŠå¿
èŠä»¥äžã®æéããããªãããšã§éçºã¹ããŒããäžããŠããææ³ã§ãã ãŠãŒã¶ãæ±ããŠãããã®ãçŽ æ©ãæäŸãããããªãµãŒãã¹ã«åããŠããææ³ããšæããŸãã ã¹ã¯ã©ã ãšã¯ïŒ ã¹ã¯ã©ã 㯠ã¢ãžã£ã€ã« éçºã®äžã®ææ³ã®1ã€ã§ãé¢ä¿è
ã®é²ãæ¹åãåžžã«èª¿æŽããªããç®çãéæããããã äœæ¥ãäŒè°ãææç©ãå®ãã ææ³ã§ãã ãããŸã§ä»äºã®é²ãæ¹ã«ãã©ãŒã«ã¹ããããã®ã§ããããã现ããªã«ãŒã«ïŒã³ãŒãã£ã³ã°èŠçŽããã¹ãã®æ¹æ³ãªã©ïŒã¯èªåãã¡ã§æ±ºããå¿
èŠããããŸãã æžç±ã«èšèŒã® ã¹ã¯ã©ã ã®ç¹åŸŽãèšèŒããŸãã ã¹ã¯ã©ã ã®ç¹åŸŽ èŠæ±ãåžžã«é çªã«äžŠã³æ¿ãããã®é ã«ãããã¯ããäœãããšã§ææãæå€§åãã å®çŸãããããšã®äŸ¡å€ããªã¹ã¯ãå¿
èŠæ§ãåºæºã«ãã åºå®ã®çãæéã«åºåã£ãŠäœæ¥ãé²ãã çŸæç¹ã®é²æãåé¡ç¹ãåžžã«æããã«ãã 宿çã«ä»é²ããŠãããã®ãæ£ããã®ããé²ãæ¹ã«èª€ãã¯ãªãã®ãã®ç¢ºèªãè¡ã é²ãæ¹ã«åé¡ããã£ããããã£ãšè¯ãæ¹æ³ããã£ãå Žåã«ã¯ããæ¹ã倿Žãã ã¹ã¯ã©ã ã®å
šäœå SCRUM BOOT CAMP ã®èè
ã§ããã @ryuzee ããã®å³ãèŠãŠããã ãã®ãè¯ãããšæããŸãã www.ryuzee.com ãã®å³ãèŠãŠæããããšã¯ã1ã¹ããªã³ãã§ãããã¯ããªãŒããŒã®ã¬ãã¥ãŒãåããå¿
èŠããããããã©ã®çšåºŠã®äœæ¥ãã§ããã®ããããææ¡ããŠãããªããã°ãªããªããšããç¹ã§ãã ãããªã£ãŠãããšã1ã¹ããªã³ãã®ãªãã§ã©ããŸã§ã®ããšãã§ããããæ±ºããã¹ããªã³ããã©ã³ãã³ã°ããä»ã©ããŸã§ã§ããŠãããã確èªãããã€ãªãŒ ã¹ã¯ã©ã ãéèŠã«ãªã£ãŠããããšãããªãããŸãã ã¹ã¯ã©ã ã§ã®éçºããŒã ã®åœ¹å² ç§ã¯éçºããŒã ãšã㊠ã¹ã¯ã©ã ã«é¢ããããšã«ãªãã®ã§ãéçºããŒã ã®åœ¹å²ãæãäžããŠãããŸãã éçºããŒã ã®åœ¹å²ã¯ä»¥äžã®ç¹ã§ãã ãªãªãŒã¹å€æãã§ãããããã¯ããäœã 6åïŒÂ±3åïŒã§æ§æãã å
šå¡æãã°ãããã¯ããäœãã äžäžé¢ä¿ã¯ãªã ãŸããéçºããŒã ã¯èŠæ±ã®åæã»èšèšã»ã³ãŒãã£ã³ã°ã»ãµãŒãã®æ§ç¯ã»ããã¥ã¡ã³ãã®äœæãšãã£ã ã·ã¹ãã éçº ã«å¿
èŠãªããšãå
šãŠã§ããå¿
èŠããããŸãã ããã¯åäœæ¥ã«å人ãå²ãåœãŠããšãããã®ã§ã¯ãªããå人ãè€æ°ã®ããšãã§ããããã«ãªããšããããšã§ãã éçºããŒã ã®é²ãæ¹ éçºããŒã ã¯ãããã¯ãã®äœã£ãŠããããã«ã¹ããªã³ããé²ããŠããããã§ããã1ã¹ããªã³ãã§ã©ããŸã§äœæ¥ãè¡ãã®ããæ±ºãã ã¹ããªã³ããã©ã³ãã³ã° ã宿œããŸãã ã¹ããªã³ããã©ã³ãã³ã°ã¯ããããã¯ããªãŒããŒãå«ããŠäœã欲ããã®ããéçºããŒã ã§ã¯ã©ããŸã§ã§ããã®ããããåããã第ïŒéšã 第ïŒéšã§æ±ºãŸã£ãããšãã©ã®ããã«å®çŸããã®ããéçºããŒã å
ã§ããåããã第ïŒéšã§æ§æãããŠããŸãã ããã§æ±ºå®ããããšã ã¹ããªã³ã ããã¯ãã° ãšãã圢ã§ã¿ã¹ã¯ã®äžèЧãçšæããã¹ããªã³ãã®äžã§å®æœããŠãããŸãã ã¹ããªã³ãã®é²ãæ¹ ã¹ããªã³ããè¡ãªã£ãŠããäžã§ã®ãã€ã³ãã§ãããéçºããŒã ã¯ã¹ããªã³ããã©ã³ãã³ã°ã®äžã§åæããå
容ãéæããããšã«å
šåãå°œããå¿
èŠããããŸãããå
šãŠãå®äºããããšãçŽæãããã®ã§ã¯ãªããšããããšã§ãã å
šãŠãå®äºããããšãç®çã«äœæ¥ãããŠããŸããšãäžæž¬ã®äºæ
ãçºçããããå¿
èŠãªäœæ¥ãé£ã°ããŠããŸã£ãããšãã£ãåé¡ãçºçãããæ¬åœã«æ¬²ãããã®ããäœããªãå¯èœæ§ãããããã§ãã ãã®å Žåã¯ãããã¯ããªãŒããŒãšçžè«ãããããã¯ã ããã¯ãã° ã®ãªã¹ããèŠçŽãããããããšã§èšç»ã調æŽããŸãã ãªãªãŒã¹å€æå¯èœ ã¹ããªã³ããçµãã£ãåŸã«ã¯ ãªãªãŒã¹å€æå¯èœãªãããã¯ã ãã§ããŠããããšãæ±ããããŸãã ãªãªãŒã¹å€æå¯èœãšãããã®ãã©ã®ãããªç¶æ
ãæããã®ã§ãããã瀺ãããã« å®äºã®å®çŸ© ãæç¢ºã«ããŠãããŸãã ã¹ããªã³ãã¬ãã¥ãŒ ã¹ããªã³ãã®æåŸã«ãããã¯ããªãŒããŒãã¹ããªã³ãã®ææç©ã確èªããæ©äŒã§ãã ããã§ å®éã«åããã® ããããã¯ããªãŒããŒã確èªãããããã¯ã ããã¯ãã° ã§ãããŠããé
ç®éãã®ãã®ã§ããã°äœæ¥å®äºãšãªããŸãã æ³å®éãã®ãã®ã§ãªãã£ãå Žåã«ã¯ã次åã®ã¹ããªã³ãã«å«ããªã©ã®åœ¢ã§ãããã¯ã ããã¯ãã° ã«æ»ããŸãã ã¹ããªã³ãã¬ããã¹ãã¯ãã£ãïŒæ¯ãè¿ãïŒ ã¹ããªã³ãã¬ãã¥ãŒãçµãããšãä»åã®ã¹ããªã³ãã®æ¯ãè¿ããè¡ããŸããããŸããã£ãããšããããªãã£ãç¹ãæŽãåºããŠä»åŸã®ã¹ããªã³ãã«çãããŠãããŸãã ã¹ããªã³ãã¬ããã¹ãã¯ãã£ããŸã§å®äºããŠ1ã¹ããªã³ããšãªãããããã¯ãã®å®æãŸã§ç¹°ãè¿ããŠããããšã«ãªããŸãã çµããã« ãããŸã§æ·¡ã
ãš ã¹ã¯ã©ã ã«ã€ããŠæžããŠããŸããããæåŸã«ææãè¿°ã¹ãŠçµãããããšæããŸãã éçºããŒã ã®åœ¹å²ã§ãå
šå¡æãã°ãããã¯ããäœããããšãããã®ããããŸããããå®é å
šå¡ãæã ããšã¯ä¿èšŒã§ããªãã§ããã ããããŒããŒãœã³ãããªããšäœæ¥ãé²ãŸãªããããªç¶æ³ã¯ãå±äººåãã®å
žåã§ãããæãŸãããã®ã§ã¯ãªãã§ãã ãã®ãããªç¶æ³ãæ¹åããŠããããã« å人ãè€æ°ã®ããšãã§ããããã«ãªã å¿
èŠããããšèšããŸãã ãã®éã®ãããã§ãã·ã§ãã«ã§ããããšããã¡ããéèŠãªããšã§ããã ã¹ã¯ã©ã ã§ã¯å¹
åºãç¥èãæã£ãäžã§åå ããå¿
èŠãããããã§ãã ãŸããä»åŠç¿ããéšåã§ã¯ ã¹ã¯ã©ã ã®äžã«ã¯ãéçšã»ä¿å®ããšãã£ã芳ç¹ã¯é€ãããŠããããã«æããŸããã ã çæéã§ãªãªãŒã¹ãããå¯èœæ§ã®ãã ã¢ãžã£ã€ã« éçºã«ãããŠãéçšã»ä¿å®ãã«äžãã圱é¿ã¯å°ãããã®ã§ã¯ãªããšèããŸãã ãã®ãããªç¹ã解決ããèãæ¹ãšã㊠DevOps ãçãŸããŠããŠãããããªã®ã§ãDevOpsã®èŠç¹ãèæ
®ããŠéçºãé²ããŠããå¿
èŠãããããã§ãã ãã ãããŸã ç§ã¯ ã¹ã¯ã©ã ãäœéšããŠããŸããã®ã§ééã£ãããšãå€ã
èšèŒããŠããããšæããŸãã å®éã® ã¹ã¯ã©ã ã¯ãããããã£ãŠããããšã«ãªããŸãã®ã§ã次åã¯å®äœéšããåŸããããã®ãã玹ä»ããããšæããŸãã åè SCRUM BOOT CAMP THE BOOK スクラムの概要を1分で理解できるイラスト【2018版】 | Ryuzee.com
ã¯ããã« ããã«ã¡ã¯ãæè¿ iPhoneã¢ã㪠éçºã®ãã Mac ã«æãåºãå§ãã @rs_tukki ã§ãã ååã®èšäºã§ãæžããŸãããããšã³ãžãã¢ã¯åŠã³ç¶ããããšã倧åã§ãã ã©ã¯ ã¹ã§ãTechããã°ãéããã¢ãŠãããããæšå¥šããŠããã å¹Žéœ¢ãæ ç¹ã«é¢ä¿ãªãã ã©ã¯ ã¹ã«æå±ããå
šãŠã®ãšã³ãžãã¢ã®æ¹ã«èšäºãæžããŠããã£ãŠããŸãã tech-blog.rakus.co.jp ãããŠãã¢ãŠãããããæšå¥šãããã£ã³ããŒã³ã®äžç°ãšããŠå
æ¥ãããã°ã®å¹Žé衚地åŒã宿œããŸããïŒ è¡šåœ°åŒã®æ§å 2018幎4æ1æ¥ãã2019幎3æ31æ¥ãŸã§ã«èšäºãæçš¿ãããå
šãŠã®æ¹ã察象ã«ã å€ãã®èšäºãæçš¿ããæ¹ æçš¿ããèšäºã®ã¢ã¯ã»ã¹ç·æ°ãå€ãæ¹ èšäºã®æçš¿ããäžé±éã®ãã¡ã«å€ãã®ã¢ã¯ã»ã¹ãç²åŸããæ¹ ãã®ä»ãããã°ã®æŽ»åã«è²¢ç®ãããæ¹ ã衚地ããŸãã åè³è
ã«ã¯è¡šåœ°çŸã®ã»ãã Kindle ãªã©è±ªè¯å¯è³ãéãããŸããã æè³ããèšäºãã«ããŽãªã¯ãã¡ãã 終わらないスクラム カテゴリーの記事一覧 - RAKUS Developers Blog | ラクス エンジニアブログ 5分で理解する!Google Apps Script超入門 - RAKUS Developers Blog | ラクス エンジニアブログ マイクロサービスアーキテクチャにおけるサービス分割の難しさ - RAKUS Developers Blog | ラクス エンジニアブログ 【図多め】APIを使ってGoogleサービスを操る - RAKUS Developers Blog | ラクス エンジニアブログ Android Studioで天気情報を表示するアプリを作ってみた - RAKUS Developers Blog | ラクス エンジニアブログ ã©ã¯ ã¹ã§ã¯ä»åŸããšã³ãžãã¢å
šäœã§åŠã³ãçºä¿¡ããŠãããŸãã®ã§ãä»åŸãšããããããé¡ãããããŸãïŒ ããŸã 衚地åŒã«åå ãããæ¹ã«ã¯ããã®ãããªåå è³ããé
ãããããŸãã(ç¬)