ã¯ããã« ã¯ãããŸããŠã®æ¹ã¯ã¯ãããŸããŠããããã¯ãã§ãŒã³ããŒã ã® id:Nanamachi ã§ããå€é ãŸã§ã¯ãšã³ãžãã¢ãšããŠé¢ãã£ãŠããŸããããæ
ãã£ãŠçŸåšã¯ãããã¯ããããŒãžã£ãšããŠã®éãé²ãã§ããŸãã仿¥ã¯ãããªæ°ç±³ãããã¯ããããŒãžã£ããèšãäžãããããã¯ãããã¯ãã°ãç¹ã«ãã®äžã§çºçãããã±ããã®äŸåé¢ä¿ãå¯èŠåããããã«ããã¯ã€ãããŒãããŒã«ã§ããmiroãå°å
¥ããè©±ãæžããŠãããŸãã æ±ããŠããåé¡ çŸåšåŒç€Ÿã§ã¯ã backlog ãã¿ã¹ã¯ç®¡çããŒã«ãšããŠçšããŠããŸããã«ã¹ã¿ã é
ç®ã䜿ããããšãã¬ã³ããã£ãŒããèªåçã«åŒããããšãªã©ã¯äŸ¿å©ãªã®ã§ãããã¿ã¹ã¯éã®äŸåé¢ä¿ãèŠãã«ããåé¡ãæ±ããŠããŸããã äžèŠãµã€ãã®ãããã¯ãããã¯ãã° äŸãã°äžã®ããã¯ãã°ã1191ã®ãã±ããã¯1137ã®èª¿æ»ã¿ã¹ã¯ã§ãããããå
ã«1191ãçµããããå¿
èŠããããŸãããŸãã998ã999ã®ä¿®æ£ãçµåããã®ã1000ã§ããããã998ã999ã®äž¡æ¹ãçµãããªããš1000ã«åãããããŸããããããããã®é¢ä¿æ§ã¯backlogã ãã§çŽæçã«è¡šçŸã§ããªãâŠâŠãã®ããã«ãæ¬æ¥å
ã«é²ããŠããªããã°ãããªããã®ãçµãã£ãŠããªããªã©ãèšç»ã©ããã«é²è¡ã§ããªãããšããããŸããã å®éã¯ãã®é çªã§å®è£
ããªããã°ãããªã! ãã®åé¡ããã¯ã€ãããŒãã¢ããªã±ãŒã·ã§ã³ã®miroã䜿ã£ãŠè§£æ±ºããŠãããŸãã miroã«ã€ããŠè©³ããç¥ãããæ¹ã¯äžèšã®èšäºãªã©ãããããããããšæããŸãã®ã§è¯ããã°ã芧ãã ããã jaco.udcp.info ãããã¯ãããã¯ãã°ãmiroã§å¯èŠåãã miroäžã§æŽçããããã±ããã®äŸ ãã±ããã®äŸåé¢ä¿ãšåªå
é äœãå¯èŠåããããã«æ¬²ãããã®ã¯ãã±ããåããã€ã«ã¹ããŒã³ãé²è¡ç¶æ³ãã¹ããŒãªãŒãã€ã³ããªã©ã§ããããã空ãæéã§æžããã¹ã¯ãªããã§è»¢èšã§ããããã«ããŸãããããšã¯ãããå
ã«miroäžã§ãã±ããéã«ç¢å°ãåŒããŠãããŸãã å®éã«äœ¿ãå§ãããšãåœåã®ç®è«èŠã§ãã£ããã±ããã®äŸåé¢ä¿ãåªå
é äœãæŽçãããã®ã¯ãã¡ããã§ããããã以äžã«æ©æµããããŸãããäŸãã°æ©èœããšã®ã°ã«ãŒããããŒããããã®ç®¡çãªã©ãããã¯ãæŠç¥ã«é¢ããããšããŸãçŸåšã®ãã€ã«ã¹ããŒã³ã®é²æç¶æ³ãªã©ããããã¯ãã»ãããžã§ã¯ãã«é¢ããæ§ã
ãªããšãã²ãšç®ã§èªèã§ããããã«ãªããŸãããããŒã ã転ã°ãªãããã«ããããã®èŠéããç«ãŠããããªããéåžžã«äŸ¿å©ã§ãã ãããã« ãã±ãããmiroã§å¯èŠåããããšã§ããŒã ã®ç¶æ
ãæŽçãããŸãããããŒã ã¡ã³ããŒãã¹ããªã³ããã©ã³ãã³ã°ãããéã«ã圹ã«ç«ã€ããããã²ãã£ãŠã¿ãŠã¯ãããã§ããããã
ã¯ããã« offsetWidth ã offsetHeight ãªã©ã®å¹
ãé«ããååŸãã颿°ãã¡ã¯ã display: none ã«ãªã£ãŠããå Žåã0ãè¿ããŸãã Vue.jsã§èŠçŽ ã®è¡šç€ºé衚瀺㫠v-show ãçšããŠããå Žåã v-show ã¯ãã®èŠçŽ ã« display: none ãä»äžããŠå¶åŸ¡ãè¡ãã®ã§ãé衚瀺äžã® offsetWidth ã¯0ãšããŠè¿ã£ãŠããããšã«ãªããŸãã < template > < div > < p v-show= "false" > ããã®offsetWidthã¯0pxã§ãïŒ </ p > </ div > </ template > ãããããããã€ã³ã offsetWidth ãªã©ã¯ãèªåã®èŠçŽ ã ãã§ãªãã芪èŠçŽ ã« display: none ãä»äžãããŠããŠã0ãè¿ããŸãã æ³šæãããã®ã¯ã芪ã³ã³ããŒãã³ãã§ v-show ãçšããŠãã(ã³ã³ããŒãã³ãã®è¡šç€ºå¶åŸ¡ãè¡ã£ãŠãããªã©)å Žåã§ãã Parent.vue < template > < div > < div v-show= "flag" > < Child /> </ div > </ div > </ template > < script > import Child from "./Child" ; export default { name: "Parent" , components: { Child, } , data () { return { flag: false , } ; } , mounted () { setTimeout (() => { this .flag = true ; } , 1000) ; // æç»ãããŠ1ç§åŸã«trueã«ãªã } , } ; </ script > Child.vue < template > < p ref= "target" > hello, world! </ p > </ template > < script > export default { name: "Child" , mounted () { console.log ( `pã¿ã°ã®offsetWidth㯠${ this .$refs.target.offsetWidth} px ã§ãïŒ` ) ; // pã¿ã°ã®offsetWidth㯠0px ã§ãïŒ } , } ; </ script > ãã®å Žåã v-show ã§ã¯è¡šç€ºé衚瀺ã«é¢ãããæç»ãè¡ããããã®åŸ display: none ã§å¶åŸ¡ãè¡ããŸãããã®ããåã³ã³ããŒãã³ãã® mounted ã®ã¿ã€ãã³ã°ã§ã¯ v-show ã false ãªã®ã§ãçµæã¯0pxã«ãªã£ãŠããŸããŸãã 2ã€ã®è§£æ±ºæ¹æ³ offsetWidth ãååŸã§ããããã«ããæ¹æ³ã2çš®é¡ç޹ä»ããŸãã ãã©ã°ãåãåã v-show ã true ã«ãªã£ãçŽåŸã«ååŸãã 芪ã§çšããŠãããã©ã°ãåãåã£ãŠ watch ããããšã§ã true ã«ãªã£ãç¬éã« offsetWidth ãååŸããŸãã mounted ã®ã¿ã€ãã³ã°ã§ã¯ååŸã§ããŸãããã watch ãšçµã¿åãããã°ä»»æã®ã¿ã€ãã³ã°ã§å©çšã§ããããã«ãªããŸãã Parent.vue < template > < div > < div v-show= "flag" > < Child :flag= "flag" /> <!-- flagãåã³ã³ããŒãã³ãã«æž¡ã --> </ div > </ div > </ template > < script > // çç¥ </ script > Child.vue < template > < p ref= "target" > hello, world! </ p > </ template > < script > export default { name: "Child" , props: { flag: Boolean , } , watch: { flag ( newFlag ) { if ( newFlag ) { console.log ( `pã¿ã°ã®offsetWidth㯠${ this .$refs.target.offsetWidth} px ã§ãïŒ` ) ; // ååŸã§ããïŒ } } , } , } ; </ script > v-if ã«å€ããŠé
å»¶æç»ã«ãã åãæ¿ãã³ã¹ããäžãã£ãŠããŸããŸããã v-if ã®é
å»¶æç»ã掻çšããããšã§ã mounted ããã¯ã§ååŸã§ããããã«ãªããŸãã Parent.vue < template > < div > < div v-if= "flag" > <!-- v-ifã«å€æŽãã --> < Child /> </ div > </ div > </ template > < script > // çç¥ </ script > Child.vue < template > < p ref= "target" > hello, world! </ p > </ template > < script > export default { name: "Child" , mounted () { console.log ( `pã¿ã°ã®offsetWidth㯠${ this .$refs.target.offsetWidth} px ã§ãïŒ` ) ; // ååŸã§ããïŒ } , } ; </ script > ãŸãšã offsetWidth ãååŸã§ããªãå Žåã®è§£èª¬ãšè§£æ±ºæ¹æ³ã®ç޹ä»ã§ããã芪ã³ã³ããŒãã³ããæ¢ãã«è¡ããªããšãããªãç¹ã¯ç²ç¹ã ã£ãã®ã§ãåãåé¡ã«ããããªãããã«æ°ãã€ãããã§ããïŒ
ããŒã éçºã§ãææšãããŸã䜿ãããšäŸ¿å©ã§ããããã®ãããŸã䜿ãããšããã®ã¯ãªããªãé£ãããçœ ã¯ãããšæã£ãŠããŸãã ä»åã¯ããã®çœ ããä¿¡å·æ©ã«äŸããŠã説æããŠã¿ãããšæããŸããä»ã«ããçœ ãããã°ãã²æããŠãã ããïŒ å£ããä¿¡å· å£ããä¿¡å· ããŒã¿ãå£ããŠããŠãä¿¡çšã§ããªã ãã®ãŸãŸæŸçœ®ãããŠãã ä¿¡å·ç¡èŠ ä¿¡å·ç¡èŠ äººã«ãã£ãŠãè¯ãæªãã®å€æåºæºãç°ãªã åºæºãçšæããŠãç¡èŠããã ä¿¡å·ã ãã ä¿¡å·ã ãã ææšããããããŠãã©ããèŠãã°è¯ããããããªã åãã人ã«ããåãããªãç¶æ
å·¥äºã®ããä¿¡å· å·¥äºã®ããä¿¡å· ä¿¡å·ãèŠãã®ã«ãå·¥äºæ¥è
ã«äŸé Œãããªããã°ãªããªã ã€ãŸããããŒã¿ãèŠãã®ã«æéãããã ãããã« ããã§ã¯è¡åã劚ããçœ ã玹ä»ããŸããã è£ãè¿ãã°ãè¯ãè¡åãåŒãåºãä¿¡å·ãäœã£ãŠããããã§ããã»ã»ïŒïŒçŸå Žããã¯ä»¥äžã§ãã
ããã«ã¡ã¯ãæ°åãšã³ãžãã¢ã® id:kaoru-k_0106 ã§ã äœãããã ç§ã®ããŒã ã§ã¯ãã³ãããã¡ãã»ãŒãžã®å
é ã«ãã±ããçªå·ãå
¥ããã«ãŒã«ããããŸãã äŸãã°ã PROJECTNAME-123 ããã®åŠçã倿Žãã ã ãšã PROJECTNAME-123 ã®éšåããã±ããçªå·ã§ãã æåã¯ãããæåã§å
¥åããŠããã®ã§ãããæã
å
¥åãå¿ããããšãããèªåæ¿å
¥ããããšæããŸããã ã¡ããã©ããããã¯ãã©ã³ãåããã±ããçªå·ã ã£ãã®ã§ããã©ã³ãåãäœ¿ãæ¹éã§å®è£
ãããŸããã å°å
¥æé ãã®1 Gitã®ã³ããããã³ãã¬ãŒããèšå®ãã Gitã®ã³ããããã³ãã¬ãŒããšã¯ãã³ãããã¡ãã»ãŒãžãšãã£ã¿ãéãããšãã«ããã©ã«ãã§èšå®ãããŠããæååã§ãã ãã®èšå®ã¯ã次ã®ããã«ãã³ãã¬ãŒããã¡ã€ã«ãäœæãã git config ã§èšå®ã§ããŸãã % echo ' [branch-name] ' > ~/.commit_template % git config commit.template ~/.commit_template ãã®2 Git Hooksã§ã³ããããã³ãã¬ãŒãããã©ã³ãåã«çœ®ãæãã æ¬¡ã«ããã®ã³ããããã³ãã¬ãŒãå
ã® [branch-name] ããã©ã³ãåã«çœ®ãæããããã«Git Hooksã䜿çšããŸãã å
·äœçã«ã¯ã .git/hooks/prepare-commit-msg ãå®è¡æš©éãã€ããŠçœ®ããŸãã #!/bin/sh current_branch = $( git rev-parse --abbrev-ref HEAD ) sed -i " s/ \[ branch-name \] / $current_branch / " $1 # Macã ãšä»¥äžã®ããã«ãã # sed -i "" "s/\[branch-name\]/$current_branch/" $1 ããã§ããã©ã³ãåãèªåã§æ¿å
¥ãããããã«ãªããŸããã å®éã«æ¿å
¥ãããã確ãããŠã¿ãŸãã åäœç¢ºèª git commit ãå©ããšã [branch-name] ããã©ã³ãã«çœ®ãæãã£ãç¶æ
ã§ã³ãããã¡ãã»ãŒãžãšãã£ã¿ãéããŸãã ã¡ãªã¿ã«ãVisual Studio Code (VSCode)ã®ãœãŒã¹ç®¡çæ©èœã§ã³ãããããå Žåããã©ã³ãåã«çœ®ãæãããŸãã å
¥åæ¬ã§ã¯ãã³ãã¬ãŒãã® [branch-name] ããã®ãŸãŸè¡šç€ºãããŠããŸãããã³ããããããšãã©ã³ãåã«çœ®ãæãããŸãã ãããã« ããã ãã§ã³ãããæã«ãã©ã³ãåãèªåæ¿å
¥ããããšãã§ããŸããã ãã¹ãæžããããšãã§ããããŒã ã®éçºå¹çã«ãè²¢ç®ã§ãããšæããŸãïŒ
ã¯ãŠãªããã®ã³ã³ããã¹ãã¯ã€ãºã«æäœã® Contextual-Diag ã§çããŠã¿ãŸãããããã§ã³ã³ããã¹ããã¹ã¿ãŒã§ããïŒïŒ github.com use Test2::V0; use CDD; like( warnings { length ( cdd ) }, [ qr/wanted SCALAR context/ , qr/evaluated as STR/ ], 'length <ãã> ... STR in SCALAR' ); like( warnings { if ( cdd ) {} }, [ qr/wanted SCALAR context/ , qr/evaluated as BOOL/ ], 'if (<ãã>) ... BOOL in SCALAR' ); like( warnings { for my $i ( cdd ) {} }, [ qr/wanted LIST context/ ], 'for my $i (<ãã>) ... LIST' ); like( warnings { package Hoge { sub new { bless {}, $_[ 0 ] } sub hello {} } my $obj = Hoge->new; $obj->hello ( cdd ) }, [ qr/wanted LIST context/ ], '$obj->method(<ãã>) ... LIST' ); like( warnings { my $x = cdd }, [ qr/wanted SCALAR context/ ], 'my $x = <ãã> ... SCALAR' ); like( warnings { my ( $x ) = cdd }, [ qr/wanted LIST context/ ], 'my ($x) = <ãã> ... LIST' ); like( warnings { my @y = cdd }, [ qr/wanted LIST context/ ], 'my @y = <ãã> ... LIST' ); like( warnings { my %hash = ( key0 => 'hoge' , key1 => cdd, ) }, [ qr/wanted LIST context/ ], q!my %hash = ( key0 => 'hoge', key1 => <ãã> ); ... LIST! ); like( warnings { scalar ( cdd ) }, [ qr/wanted SCALAR context/ ], 'scalar(<ãã>) ... SCALAR' ); like( warnings { cdd }, [ qr/wanted VOID context/ ], '<ãã>; ... VOID' ); # 泚: sortã®å¹Ÿéããã®äœ¿ãæ¹ãç¥ã£ãŠããåæã§ããã¹ãããŠãã subtest 'sort <ãã>' => sub { # sort BLOCK LIST like( warnings { my @a = sort { cdd } ( 'a' , 'b' ) }, [ qr/wanted SCALAR context/ ], 'sort <ãã> / CASE: sort BLOCK LIST ... BLOCK context is SCALAR' ); # sort SUBNAME LIST like( warnings { my @a = sort cdd ( 'a' , 'b' ) }, [ qr/wanted SCALAR context/ ], 'sort <ãã> / CASE: sort SUBNAME LIST ... SUBNAME context is SCALAR' ); # sort LIST like( warnings { my @a = sort (cdd( 'a' , 'b' )) }, [ qr/wanted LIST context/ ], 'sort <ãã> / CASE: sort LIST ... LIST' ); }; done_testing;
TSã®åè¿·å®®ã«è¿·ã蟌ãã ãšã³ãžãã¢ã® id:dorapon2000 ã§ãã ãã£ã¬ã¯ããªã®ããŒããã·ã§ã³ã調ã¹ããšããçããã©ãããŠããŸãããäŸãã° /etc ã®ããŒããã·ã§ã³ã確èªããããšãã以åã®åã¯ããã§ãã ⯠ls -l / total 104 drwxr-xr-x 2 root root 4096 6 æ 28 18:34 bin drwxr-xr-x 3 root root 4096 6 æ 28 18:35 boot drwxr-xr-x 15 root root 3640 11 æ 16 10:02 dev drwxr-xr-x 128 root root 12288 11 æ 2 10:55 etc drwxr-xr-x 4 root root 4096 4 æ 6 2021 home drwxr-xr-x 22 root root 4096 6 æ 15 2020 lib drwxr-xr-x 2 root root 4096 6 æ 28 18:33 lib64 drwx------ 2 root root 16384 4 æ 7 2020 lost+found drwxr-xr-x 2 root root 4096 4 æ 7 2020 media drwxr-xr-x 2 root root 4096 4 æ 7 2020 mnt drwxr-xr-x 4 root root 4096 6 æ 1 16:33 opt dr-xr-xr-x 173 root root 0 11 æ 16 10:02 proc drwx------ 9 root root 4096 10 æ 6 19:26 root drwxr-xr-x 30 root root 1120 11 æ 16 10:03 run drwxr-xr-x 2 root root 12288 6 æ 28 18:34 sbin drwxr-xr-x 6 root root 4096 3 æ 9 2021 snap drwxr-xr-x 2 root root 4096 4 æ 7 2020 srv dr-xr-xr-x 13 root root 0 11 æ 16 10:24 sys drwxrwxrwt 10 root root 12288 11 æ 16 10:25 tmp drwxr-xr-x 11 root root 4096 6 æ 1 16:33 usr drwxr-xr-x 14 root root 4096 3 æ 11 2021 var ãã£ãæ°ãå€ããŠããæ¯ãåºãŠããŸããŸã... -d ãªãã·ã§ã³ã䜿ããšæ¬¡ã®ããã«ãªããŸãã ⯠ls -ld /etc drwxr-xr-x 128 root root 12288 11 æ 2 10:55 /etc ãã£ãšæ©ãç¥ãããã£ã...
ãæ¬¡ã®ã³ãŒãã®éãã DBIx::Sunny ãå©çšããéã $dbh->select_one ãåŒã³åºããã«ãé¢ãããã $dbh->can('select_one') ã false ãšãªããŸãã ã can ã®æåããããã©ã«ããšç°ãªããäžèŠãããšå°æããŸãã use Test2::V0; use DBIx::Sunny; use Types::Standard qw(HasMethods) ; my $dsn = "dbi:SQLite:dbname=test.db" ; my $dbh = DBIx::Sunny-> connect ( $dsn , 'root' , '' ); ok ! $dbh->can ( 'select_one' ), 'äžæè°ãªæå' ; ok $dbh->select_one ( 'SELECT 1' ); ok $dbh->UNIVERSAL ::can( 'select_one' ); done_testing; ãããã¯ãDBIã can ãäžæžãããDriverã§å®è£
ãããŠãããããããã¯DBIã§ããã©ã«ãã§æäŸãããŠããã¡ãœãããã©ããå€å®ããããã§ããããã©ã«ãã®æåã§åããããã®ã§ããã°ã UNIVERSAL::can ã§ç¢ºãããããŸãã metacpan.org
VSCode ã§ãããŒããŠåæ
å ±ãèŠãããšãããšã亀差åã¯ããããã£ãå±éãããŸãã ããããã£ã®åãå±éãã Mapped Types ãéãããšã§çç¥ããã«ããããã£ãèŠãããšãã§ããŸããããããã£ã亀差åã«ãªã£ãŠããããšãããã®ã§ãååž°çã«ããããã£ã Mapped Types ã«éããããªåãå®çŸ©ããŠãããŠãéãããšã§ããããã£ãå
šãŠç¢ºèªã§ããŸã type Expand < T > = T extends object ? T extends infer O ? { [ K in keyof O ] : Expand < O [ K ] > } : never : T type Temp = Expand < `確èªãããå` > å³å¯ã§ãªããšãç°¡åã«ã©ããªããããã£ããããææ¡ãããã ããªãçµã¿èŸŒã¿ã® Required ã Partial ã䜿ãã®ãæè»œã§ãããã ãããããŸã§ãããã°çšéã§ããããçç¥å¯èœããããã£ã«ãªã/ã§ãªããªãã®ã§æ³šæãå¿
èŠã§ã ããããã£ãå€ãæã«çç¥ããªã ããã§å±éããåãèŠãããããã«ãªããŸããããå±éããåã衚瀺ãããšããããã£ã®æ°ãå€ãæã«çç¥ãããŠããŸããŸã noErrorTruncation ãªãã·ã§ã³ãæå¹ã«ããããšã§ããããã£æ°ãå€ããšãã§ãå
šãŠã®åæ
å ±ã確èªã§ããŸã // tsconfig.json { compilerOptions: { + "noErrorTruncation": true, } } æ¡åŒµæ©èœã§ç¢ºèªãã äžåºŠå倿°ã«çœ®ãã®ãããã©ããããã°ãå±éãããåã衚瀺ã§ãã VSCode æ¡åŒµæ©èœãäœã£ãã®ã§ãããã䜿ãããšã§æè»œã«ç¢ºèªããããšãã§ããŸã ts-type-expand - Visual Studio Marketplace ããã€ã³ã¹ããŒã«ã§ããŸã ç»åã®ããã«ãVSCode ã® UI äžããå±éãããããããã£ã確èªããããšãã§ããŸã
ããã«ã¡ã¯ããããã¯ãã§ãŒã³ããŒã ã®ãœãããŠã§ã¢ãšã³ãžãã¢ã® id:odan3240 ã§ãã ãããã¯ãã§ãŒã³ããŒã ã§ã¯ NFT ã販売ããããã® UniqysããŒã±ãããã¬ã€ã¹ (以äžããŠãã)ãšããã® NFT ã販売ããããã®ç®¡çç»é¢(以äžã管çç»é¢)ãéçºããŠããŸãããŠããã¯ãããã¯ãã§ãŒã³äžã® NFT ãæ¥æ¬åã§å£²è²·å¯èœãªããŒã±ãããã¬ã€ã¹ã§ãã ãŠããã®éçºã¯ãããã¯ãã§ãŒã³ã«é¢ãããµãŒãã¹ãªã®ã§ããããã¯ãã§ãŒã³ã«é¢ããæè¡ããŽãªãŽãªã«äœ¿ã£ãŠéçºããŠããã®ã§ã¯ïŒãšèããæ¹ããããããããŸããããããå®éã¯ããã§ã¯ãªã Web ã¢ããªã±ãŒã·ã§ã³ã«é¢ããéçºã¯æ®éã®æè¡ã¹ã¿ãã¯ã§éçºããŠããŸãããã¡ããå®è£
ããããžãã¯ã«ãã£ãŠã¯ãããã¯ãã§ãŒã³ã«é¢ããç¥èãå¿
èŠãšãªãå ŽåããããŸããããããŒãžããµãŒãã¹ããã¬ãŒã ã¯ãŒã¯ãããŒã«ã掻çšããŠã³ã¢æ©èœã®å®è£
ã«éäžã§ããããã«æè¡ã¹ã¿ãã¯ãéžæããŠããŸãã ãã®èšäºã§ã¯ãŠãããšç®¡çç»é¢ã®äž»ã« Web ã¢ããªã±ãŒã·ã§ã³ã«é¢ããæè¡ã¹ã¿ãã¯ãšããã®æ¡çšçç±ã«ã€ããŠç޹ä»ããŸãã æè¡ã¹ã¿ã㯠TypeScript ãŠãããšç®¡çç»é¢ã®ããã³ããšã³ããšããã¯ãšã³ãã®å
šãŠã§ TypeScript ã䜿çšããŠããŸããã¢ããã¡ã¯ã¯ãããã¯ãã®ããã¯ãšã³ãã«ã¯ Perl ãæ¡çšãããããšãå€ãäŒæ¥ã§ããããéçºã®å¹çåã®ããã«éçãªåãã»ããã®ãšææ³ã JavaScript ãšããªãè¿ãã¡ã³ããŒã®åŠç¿ã³ã¹ããäœããšããç¹ããã2018幎ã«ç«ã¡äžãã£ããããã¯ãã§ãŒã³ããŒã ã§ã¯ç«ã¡äžãåœåããåãããã¯ãã« TypeScript ãæ¡çšãããããšãå€ãã§ãã ãŠãããšç®¡çç»é¢ããã®æµããããã§ TypeScript ãæ¡çšããŸããã NuxtJS ãŠãããšç®¡çç»é¢ã®ããã³ããšã³ãã®å®è£
ã« NuxtJS ã䜿çšããŠããŸããVue.js ã¯ä»ã®ããŒã ã§ã®æ¡çšå®çžŸããã瀟å
ã®ããŠããŠããªãœãŒã¹ãæµçšã§ããããªç¹ãšããããã¯ãã®ç«ã¡äžãåœåã¯ãšã³ãžãã¢ã«æ¯ã¹ããšãã¶ã€ãã®ãªãœãŒã¹ãæµ®ãããšãããŸã«ããããããšãªãã°ãã¶ã€ããããã³ããšã³ãã®å®è£
ã«åå ã§ããããã«æžãæ¹ã HTML/CSS ã«è¿ãç¹ãæ¡çšçç±ã§ãã TypeScript ãšã®çžæ§ãå°ãã§ãããããããã« Vue.extend ã䜿çšããŠã³ã³ããŒãã³ããå®çŸ©ããŠãVSCode ã®æ¡åŒµæ©èœã« Vetur ã䜿çšããŠããŸããVue.js 㯠TypeScript ãšçžæ§ãæªããšèšãããŸããæ¡åŒµæ©èœã« Volar ãå©çšããããšã§ãSFC ã® template ã®åæšè«ãã³ã³ããŒãã³ãã® props ã®æå®ã®æç¡ãéçã«ãã§ãã¯ããŠãããŸãããŸããVue.js ã® v2 ã§ã Composition API ã® defineComponent ã䜿çšããã° v3 ãšåæ§ã®éçºäœéšãåŸãããšãã§ãããã§ãVetur ããã®çœ®ãæããæ€èšäžã§ãã ãŠãã㯠SNS ããã®æµå
¥ãæ³å®ãããŠããã®ã§OGP ã®ããã« NuxtJS ã䜿ã£ãŠ Lambda ã§ SSR ããŠããŸãã äžæ¹ã§ã管çç»é¢ã¯ã©ã®ç»é¢ããã°ã€ã³ããŠäœ¿çšããããŒãžã§ãããSNS ããã®æµå
¥ãæ³å®ãããŠããªããããSPA ãšã㊠S3 ã«éçãã¡ã€ã«ããã¹ãã£ã³ã°ããŠããŸããSPA ã§ããŠãããšã®éçºäœéšãæããããã«ãåšãã®ã·ã¹ãã ãé èœãããªã©ã®çç±ã§ NuxtJS ãéžæããŠããŸãã Vuetify 管çç»é¢ã®ããã³ããšã³ãã®å®è£
ã« UI ã©ã€ãã©ãªã® Vuetify ã䜿çšããŠããŸãããŠããã®ããã³ããšã³ãã¯èªç±åºŠã®é«ããã¶ã€ã³ãå®çŸããããã« Atomic Design ãããŒã¹ã«ãã«ã¹ã¯ã©ããã§ UI ã³ã³ããŒãã³ããå®è£
ããŠããŸããäžæ¹ã§ã管çç»é¢ã«æ±ããããã®ã¯ç®¡çç»é¢ç㪠UI ãªã®ã§ãVuetify ãæ¡çšããŠããã³ããšã³ãã®å®è£
ã³ã¹ããåæžããããšãç®çãšããŠããŸãã NestJS ãŠãããšç®¡çç»é¢ã®ããã¯ãšã³ãã¯åããµãŒããåç
§ããŠããŠã NestJS ã䜿çšããŠå®è£
ããŠããŸãã NestJS ã¯çã® Express ãæ¡çšããããããèŠçŽã®åŸã£ãŠéçºãå¯èœãªããšãDI ã®ä»çµã¿ã«ãã£ãŠäŸåé¢ä¿ãã¢ãã¯ãããããã¹ããæžããããããšãåšèŸºã®ã¢ãžã¥ãŒã«ãæŽã£ãŠããŠã³ã¢ã®éçºã«éäžã§ããããªããšããªã©ãæ¡çšçç±ã§ãã OpenAPI ããã³ããšã³ãåãã« REST API ãæäŸããŠããŸããNestJS ã«ã¯ããã¯ãšã³ãã®ã³ã³ãããŒã©ãŒãã OpenAPI ã®å®çŸ©æžãèªåçæããã¢ãžã¥ãŒã«ããããŸã 1 ãèªåçæãããå®çŸ©æžã¯ openapitools/openapi-generator-cli ã䜿çšããŠããã³ããšã³ãåãã® TypeScript ã®ã³ãŒããããã«èªåçæããŠããŸããã€ãŸããããã¯ãšã³ãã§ã³ã³ãããŒã©ãŒãå®çŸ©ãããšããããåŒã³åºãããã³ããšã³ãã®ã³ãŒããèªåçæãããä»çµã¿ãçšæããŠããŸããGraphQL ãæ¡çšããªãã£ãçç±ã¯ãããã¯ãšã³ãã® API ã SaaS çšã® API ãšããŠå
¬éããèšç»ããããžã§ã¯ãã®ç«ã¡äžãåœåãããã£ãããã§ããå
¬éçšã® REST API ãšããã³ããšã³ãã§äœ¿çšãã GraphQL ã®äž¡æ¹ãå®è£
ã管çãããããå
¬éçšã® REST API ã䜿çšããŠããã³ããšã³ããå®è£
ããã»ããäœæããã¹ã API ã1ã€ã ãã«ãªãã®ã§ãã¡ã³ããã³ã¹ã®ã³ã¹ããäžãããšå€æããŸãã 2 ã TypeORM ORM ã«ã¯ TypeORM ã䜿çšããŠããŸããéå»ã®ãããžã§ã¯ãã§æ¡çšå®çžŸããã£ãã®ãšãNestJS ã« TypeORM ã®ã¢ãžã¥ãŒã« 3 ããã£ãã®ã§æ¡çšããŸãããTypeORM ãæ¡çšããææ³ã¯ããã€ã°ã¬ãŒã·ã§ã³ã®ä»çµã¿ãçšæãããŠããããšäŸ¿å©ã§ãããã¬ã³ãŒãã select ããŠãããšãã®åå®å
šæ§ããªãããšããããŒãã«ã倿° join ãããš SQL ã®å®è¡é床ãšã¯å¥ã§ããã©ãŒãã³ã¹ãå£åãããªã©ã®åé¡ 4 ãç¥ãããŠããŠäžé·äžçã ãªãšæããŸãããç¹ã« select æã®åå®å
šæ§ããªãã®ã¯ãTypeScript ãæ¡çšããŠããã¡ãªãããäžããããšã«ã€ãªããã®ã§ãæ¬¡ã«æ°ãããããžã§ã¯ããç«ã¡äžãããªãä»ã®ã©ã€ãã©ãªãæ€èšãããšæããŸãã Terraform AWS ã®ãªãœãŒã¹ã® IaC åã« Terraform ã䜿çšããŠããŸããIaC åã®ææ®µãšããŠãããã³ããšã³ããšããã¯ãšã³ããšèšèªãæããããã« AWS CDK ãåè£ã«ãããŸãããããããTerraform ãäŒç€Ÿã®æšªæçã«ã€ã³ãã©ãæ
åœããŠããããŒã ã«ãã£ãŠå
šç€Ÿçã«å°å
¥ãããããªé°å²æ°ããã£ãããšãšã terraform import ã³ãã³ãã®ååšãã Terraform ãæ¡çšããŸããã terraform import 㯠AWS ã«ããæ¢åã®ãªãœãŒã¹ã Terraform 管çäžã«ããããã®ã³ãã³ãã§ãããŠããã®éçºã«ããããªãªãŒã¹ã®æµãã¯ãã¹ããŒãžã³ã°ç°å¢ã§åäœç¢ºèªãè¡ã£ãåŸã«æ¬çªç°å¢ã«ãããã€ãè¡ãæµãã§ããæ°ããã€ã³ãã©ã®ãªãœãŒã¹ãäœæãããšãã¯ãAWS ã®ãããŒãžãã³ã³ãœãŒã«ã§ã¹ããŒãžã³ã°ç°å¢ã«ãªãœãŒã¹ãäœæã㊠terraform import ã§ Terraform åããåŸã«ããã® Terraform ãããŒã¹ã«æ¬çªç°å¢ã«ãªãœãŒã¹ãäœæããŸãããã® terraform import ã䜿çšããäžé£ã®æµãã§äœæ¥ãè¡ãããšã§ãã¹ããŒãžã³ã°ç°å¢ãšæ¬çªç°å¢ãéããªãäžèŽããããããŒãžãã³ã³ãœãŒã«ããçŽæçã«ãªãœãŒã¹ãäœæã§ããããšãã£ãå©ç¹ããããŸãã MySQL ããŒã¿ã¹ãã¢ã«ã¯ MySQL (Amazon Aurora) ã䜿çšããŠããŸãããŸãæåã«ãEthereum äžã®äžéšããŒã¿ãããŒã¿ã¹ãã¢ã«åã蟌ã¿ãéèšåŠçãè¡ãããšããçšéãã¡ã€ã³ã«ãªããšèã㊠RDB ãéžæããŸããããããŠç€Ÿå
ã®ä»ã®ããŒã ã§ã®æ¡çšå®çžŸããããMySQL ã®èšå®ãéçšã®ããŠããŠãåèã«ã§ãããšèã㊠MySQL ãéžæããŸããã ããã¯ãšã³ãã«ãã«ãããã³ãæ©èœãå®è£
ãããšãã«ãªã£ãŠ PostgreSQL ã® Row Level Security æ©èœãç¥ã£ãŠãPostgreSQL ã®æ¹ãè¯ãã£ãã®ã§ã¯ïŒããšåŸæããŸãããæ¬¡ããŒã¿ã¹ãã¢ãéžã¶ãšã㯠PostgreSQL ã®æ©èœãå«ããŠæ€èšãããã§ãã Truffle/TypeChain ãããã¯ã©ã¡ãã Ethereum äžã§åãã¹ããŒãã³ã³ãã©ã¯ãã®å®è£
ãè£å©ããããŒã«ã§ããTruffle ã¯ã³ã³ãã©ã¯ãã®ãããã€ããã€ã°ã¬ãŒã·ã§ã³ã®ç®¡çãè¡ããTypeChain ã¯ã¹ããŒãã³ã³ãã©ã¯ãã®ã¡ãœããã TypeScript ããåŒã³åºããšãã«ãåãèªåçæããããã®ããŒã«ã§ãã Truffle ã¯åœæã¯ã³ã³ãã©ã¯ãã®ç®¡çãè¡ãããŒã«ã®ããã¡ã¯ãã¹ã¿ã³ããŒãã§ããããæè¿ã¯ Hardhat ããã®åº§ã奪ãã€ã€ãããšããå°è±¡ã§ããHardhat ã¯ãããã°ã®å®¹æãã倿°ã®ãã©ã°ã€ã³ãã³ãã¥ããã£ã«ãã£ãŠéçºãããŠãããã³ã³ãã©ã¯ãå®è£
æã®éçºäœéšã®æ¹åãæåŸ
ã§ããŸããæ©äŒãèŠãŠ Truffle ã Hardhat ã«çœ®ãæããããæ°èŠãããžã§ã¯ãã§ã¯ Hardhat ãæ¡çšããããšèããŠããŸãã TypeChain ã«é¢ããŠã¯ä»¥åã«ç޹ä»èšäºãæžããã®ã§ãã¡ãã埡芧ãã ããã tech.mobilefactory.jp Infura/IPFS/Torus ãããã¯ãŠããã§äœ¿çšããŠãããããã¯ãã§ãŒã³é¢ä¿ã® SaaS ããããã³ã«ã§ãã Infura ã¯ãããŒãžã㪠Ethereum API ãæäŸãã SaaS IPFS ã¯åæ£ããŠãã¡ã€ã«ã管çã§ãããããã³ã« Torus ã¯éã«ã¹ããã£ã«ç§å¯éµã管çãã SaaS ãããã¯ãã§ãŒã³é¢ä¿ã®æè¡ã¹ã¿ãã¯ã«ã€ããŠåŸæ¥å¥ã®èšäºã§è©³çްã玹ä»ã§ããã°ãšèããŠããŸãã çµããã« ãŠãããšç®¡çç»é¢ã®æè¡ã¹ã¿ãã¯ã®ç޹ä»ãããŸããã ãããã®ã¹ã¿ãã¯ã«èå³ãæã£ãæ¹ããã£ãšè©³ãã話ãèããŠã¿ããæ¹ã¯ã«ãžã¥ã¢ã«é¢è«ãããŠã¿ãŸãããïŒä»¥äžãããšã³ããªãŒããŠããªãŒã³ã¡ã³ãæ¬ã«ãã¢ããã³ãã«ã¬ã³ããŒãèŠãããšèšèŒããŠãšã³ããªãŒããŠãã ããã open.talentio.com OpenAPI (Swagger) | NestJS - A progressive Node.js framework ↩ Auth0 ã® API ããã¥ã¡ã³ã ã® anything that can be done through the Auth0 dashboard (and more) can also be done through this API ãšããç¶æ
ãçæ³ã§ã ↩ Database | NestJS - A progressive Node.js framework ↩ Performance of query with many relations · Issue #3857 · typeorm/typeorm ↩
ããã«ã¡ã¯ïŒãšã³ãžãã¢çµç¹éçºè²¬ä»»è
ã® id:kfly8 ã§ãã ä»å¹Žãã¢ãã€ã«ãã¡ã¯ããªãŒã®Advent CalendarããéãããŸãð ä»å¹Žã®ã¢ããã³ãã«ã¬ã³ããŒã¯ã 仿¥ãã䜿ããæè¡ ããããŒãã«ã³ã³ãã¯ãã«ãå±ãããŠãããŸãïŒ *1 ä»äºå®ããŠããããŒã¯ãŒããèŠããšã»ã»ãTypeScriptããVue.jsããPerlããCLIããMySQLããAWSããå°å³ãããããã¯ããããžã¡ã³ãããªã©ããããŸãããã²ã楜ãã¿ãã ããïŒ äžèЧ 12/1 tech.mobilefactory.jp 12/2 tech.mobilefactory.jp 12/3 tech.mobilefactory.jp 12/4 tech.mobilefactory.jp 12/5 tech.mobilefactory.jp 12/6 tech.mobilefactory.jp 12/7 tech.mobilefactory.jp 12/8 tech.mobilefactory.jp 12/9 tech.mobilefactory.jp 12/10 tech.mobilefactory.jp 12/11 tech.mobilefactory.jp 12/12 tech.mobilefactory.jp 12/13 tech.mobilefactory.jp 12/14 tech.mobilefactory.jp 12/15 tech.mobilefactory.jp 12/16 tech.mobilefactory.jp 12/17 tech.mobilefactory.jp 12/18 tech.mobilefactory.jp 12/19 tech.mobilefactory.jp 12/20 tech.mobilefactory.jp 12/21 tech.mobilefactory.jp 12/22 tech.mobilefactory.jp 12/23 tech.mobilefactory.jp 12/24 tech.mobilefactory.jp 12/25 tech.mobilefactory.jp éå»ã®ã¢ããã³ãã«ã¬ã³ã㌠qiita.com qiita.com qiita.com qiita.com qiita.com *1 : 140åãããã®èšäºã§ãOKãšããã«ãŒã«ãä»å¹Žã¯èšå®ããŠããŸãã
ããã«ã¡ã¯ã21åãšã³ãžãã¢ã® id:d-kimuson ã§ãã å
æ¥ããããã¯ãã§äœ¿çšããŠãã lodash ã lodash-es ã«çœ®ãæããããšã§ããã³ãã«ãµã€ãºã®åæžãããŸããã lodash ã lodash-es ã«çœ®ãæãã話ã¯ãããããŸãããä»åã®ãããã¯ãã¯éçšæŽãé·ã CommonJS ãš ESModules ãæ··åšããŠããå°ãç¹æ®ãªç°å¢ã§ã®è©Šã¿ã ã£ãã®ã§ãç¥èŠãå
±æããããšæããŸãã å©çšãããŠããªãã³ãŒããæ¶ãããã³ãã«ãµã€ãºãæžãã lodash ã¯ãã³ãã«ãµã€ãºã®å€§ããªã©ã€ãã©ãªã§ããminified ãªç¶æ
ã§ 69.9KB ã®ãµã€ãºã«ãªããŸãã åè: lodash v4.17.21 â Bundlephobia webpack ã«ã¯ãããã³ãŒããåé€ãã TreeShaking ãšããæ©èœããããã©ã€ãã©ãªã®ãããã³ãŒããåé€ããããšãã§ããã®ã§ãã³ãã«ãµã€ãºã®åæžã«å¹æçã§ãã ããããlodash 㯠CommonJS ã§èšè¿°ãããŠããŠãTreeShaking ã®å¹æãåŸã«ããã®ã§ ESModules ã§æžãããŠãã lodash-es ã䜿çšããããšã§ã广çã«ãã³ãã«ãµã€ãºã®åæžãããããšãã§ããŸãã é·ãã®ã§ä»¥é CommonJS 㯠CJS, ESModules 㯠ESM ãšèšããŸãã lodash ãã lodash-esã« TreeShaking ãå¹ãããã«çœ®ãæãã ãã®ãããã¯ãã§ã¯ãCJS ã§èšè¿°ãããã¢ãžã¥ãŒã«ãš ESM ã§èšè¿°ãããŠããã¢ãžã¥ãŒã«ãæ··åšããŠããã®ã§ãåå¥ã«çœ®ãæããŠãããŸãã ESModules ã§èšè¿°ãããŠããã¢ãžã¥ãŒã«ã眮ãæãã ESM ã®çœ®ãæãã¯ã·ã³ãã«ã§ãã lodash-es ã䜿ãããã«ãã å
šäœã§ã¯ãªãã䜿ã颿°ã®ã¿åå¥ã§ã€ã³ããŒããã 圢ã«å€æŽããŸãã -import _ from 'lodash'; +import { defaults } from 'lodash-es'; // ... -const obj = _.defaults(obj1, obj2); +const obj = defaults(obj1, obj2); ããšã¯ webpack ãèªåçã«ãããã³ãŒã( defaults 以å€) ãåé€ããŠãããŸãã CommonJSã§èšè¿°ãããŠããã¢ãžã¥ãŒã«ã¯ãCommonJS ã®ãŸãŸ TreeShaking ãå¹ãããã«çœ®ãæãã TreeShaking ãå¹ãæ¡ä»¶ã¯ webpack ã TreeShaking ã«å¯Ÿå¿ããŠããããš webpack4: ESM ã®ã¿ webpack5: ESM, CJS äž¡å¯Ÿå¿ (å¹æã¯ ESM ã®ã»ãã倧ãã) 䜿çšããå€ã®ã¿ import ããŠããããš ã§ãã ãã®ãããã¯ãã§ã¯ CJS ã®ã³ãŒããå€ãæ®ã£ãŠããŸãããwebpack5 ãå©çšããŠããã®ã§ãCJS ã®ãŸãŸã§ã TreeShaking ã®å¹æãåŸãããããESM ã«ããŠãã眮ãæãããšãã广ã倧ããããšããç¶æ
ã§ããã ã§ãã®ã§ CommonJS ã®ãŸãŸçœ®ãæãã (楜ã ãã©å¹æã¯å°ãã) ESM ã«çœ®ãæãã€ã€ãlodash-es ã«çœ®ãæãã (倧å€ã ãã©å¹æã倧ãã) ã®éžæè¢ããããŸãã 詳ããã¯è§ŠããŸããããwebpack ç°å¢ã§ ESM ã«çœ®ãæãããšãã«ã¯ãdefault export ã®å Žåãåæã«ãã®ã¢ãžã¥ãŒã«ãåç
§ããŠããä»ã®ã¢ãžã¥ãŒã«ã ESM ã«çœ®ãæãããããã㯠require æãæžãæããªããŠã¯ãããªããšããå¶çŽãããã2ã®å
容ã§ä¿®æ£ãããšå€æŽç¯å²ã倧ãããªã£ãŠããŸããšããæžå¿µç¹ããããŸããã ãããã£ãŠãCJS ã§èšè¿°ãããŠããå Žåã«ã¯ 眮ãæããã¡ã€ã«ãåç
§ããŠãããã¡ã€ã«ã« CJS ã§èšè¿°ãããŠãããã®ãååšããã default export ã«çœ®ãæããå¿
èŠãããã ã確èªããŠã倿Žç¯å²ããã®ãã¡ã€ã«ã®ã¿ã«éããŠããäžéšã®ãã®ã¯ ESM ã«çœ®ãæããŸããããã以å€ã®å€§éšåã®ãœãŒã¹ã³ãŒãã§ã¯ CJS ã®ãŸãŸçœ®ãéããæ¹éãåãããšã«ããŸããã 倿Žç¯å²ããã¡ã€ã«å
ã«éããŠãããã®ã¯ä»¥äžã®ããã« ESModules ã«ãã€ã€çœ®ãæããŸãã // åç
§å
ãCJSã§ãã€default_export -const _ = require('lodash'); +const { map } = require('lodash-es'); -const obj = _.defaults(obj1, obj2); +const obj = defaults(obj1, obj2); 倿Žç¯å²ããã¡ã€ã«å€ã«åã¶ãã®ã¯ãESModules ã«ã¯çœ®ãæãããCJS ã®ãŸãŸ TreeShaking ã ãå¹ãããã«åå¥ã®å€ãã€ã³ããŒãããŸããïŒâ»åŸè¿°ããŸããããã®æ¹æ³ã§ã¯TreeShakingãå¹ããªãã®ã§ãå¥ã®æ¹æ³ãåãå¿
èŠããããŸãïŒ // ããä»¥å€ -const _ = require('lodash'); +import { map } from 'lodash-es'; -const obj = _.defaults(obj1, obj2); +const obj = defaults(obj1, obj2); ããã§ CJS ã§ã眮ãæããå®äºããŸããã CJS ãã lodash-es ãèªããšããããã³ãã«ãµã€ãºãå¢ããåé¡ã«éé äžèšã®æéã§çœ®ãæããå®äºããã®ã§ããããããã³ãã«ãµã€ãºãèšæž¬ããŠã¿ããšããããã³ãã«ãµã€ãºãå¢ããŠããããšãããããŸããã ãšã³ã㪠å
ãµã€ãº 眮ãæãåŸã®ãµã€ãº entry1 493.95KB 534KB entry2 369.18KB 408.39KB entry3 362.57KB 401.97KB ãã³ãã«ãµã€ãºãå¢ããŠããŸã£ãŠã¯çœ®ãæããæå³ããªãã®ã§ãåå ã調æ»ããŸãã åå â : ESModules ã CommonJS ã§å©çšããããã®å€æã³ãŒããå¢ããŠããŸã£ã ãã³ãã«ãµã€ãºãåå¥ã«èŠãŠã¿ããšãlodash ã®ãµã€ãºãå¢ããŠããŸã£ãŠããããšãåãã£ãã®ã§ã詳现ãªåå ãæ¢ãããã«ã以äžã®ãã¿ãŒã³ã§ãããã lodash é¢ä¿ã®ãã³ãã«ãµã€ãºãèšæž¬ããŠã¿ãŸããã lodash ã CJS ã§å
šäœ/åå¥ ã«èªã lodash ã ESM ã§å
šäœ/åå¥ ã«èªã lodash-es ã ESM ã§å
šäœ/åå¥ãèªã lodash-es ã ESM ã§å
šäœ/åå¥ã«èªã 以äžã調æ»çµæã§ãã ã©ã€ãã©ãª åŒã³åºã å
šäœãµã€ãº tree-shaking lodash CJS 69.2 KiB X lodash ESM 69.4 KiB X lodash-es CJS 148 KiB O (24.2 KiB) lodash-es ESM 81.1 KiB O (7.19 KiB) ãã®çµæãããlodash-es ã CJS ã§äŸå解決ããŠã TreeShaking ã§ãããã³ãŒããåé€ããããšãã§ããããç·ãã³ãã«ãµã€ãºãå¢ããŠããŸãã®ã§äžå®æ°èªãã æç¹ã§ lodash æãããã³ãã«ãµã€ãºãå¢ããŠããŸãããšããããšãããããŸããã ãã ãlodash-es ã CJS ã§äŸå解決ãããšç·ãã³ãã«ãµã€ãºãå¢ããåå ã¯ããåãããªãã£ãã®ã§ãå®éã« ESM, CJS ã§èšè¿°ãããã¢ãžã¥ãŒã«ããããã ESM, CJS ã§äŸå解決ãããšãã® webpack ã®ãã³ãã«ãã©ããã圢ã«ãªãã®ãã確èªããŠã¿ãŸããã webpack ã§ã¯æŠã以äžã®ãããªã³ãŒãã«ãã³ãã«ãããŠããŸãã â»ãã®ãŸãŸã§ã¯èªã¿ã«ããã®ã§ãèªã¿ãããããã«ããªãç°¡çŽ åã»æ¹å€ããŠããŸãã ;(() => { var moduleMap = { 100: (initilizedModule) => { initilizedModule.exports = "export text" } } , moduleCache = {} function require(id) { if (id in moduleCachle) return moduelCache [ id ] ; const mod = moduelCache [ id ] = { exports: {} } moduleMap [ id ] (mod) return mod } (() => { // ãšã³ããªãŒãã€ã³ã const resolved = require(100) } )() } )() ESM ã ãšãšã³ããªãŒãã€ã³ãç®æã«çŽæ¥å±éãããŸãããCJS ããCJS ã®ã¢ãžã¥ãŒã«ã ESM ããèªãã ããESM ã®ã¢ãžã¥ãŒã«ã CJS ããèªããšãã«ã¯ moduleMap ã«ã¢ãžã¥ãŒã«å®çŸ©ãæžãããããããšã³ããªãŒãã€ã³ããã require ã䜿ã£ãŠè§£æ±ºããããã§ãããããã£ãŠãrequire ã moduleMap éšåã ESM ã®ã¿ã®å Žåãšæ¯ã¹ãŠäœåãªã³ãŒãã«ãªããŸãã ãŸããESM ã§æžãããã¢ãžã¥ãŒã«ã CJS ã§èªããšãã«ã¯ãã¢ãžã¥ãŒã«å®çŸ©ç®æã§ default export ã«æ¹å€ãããããªåŠçã远å ã§å¿
èŠã«ãªãããã以äžã®ããã«ã³ãŒãéãå¢ããŸãã var moduleMap = { - 100: (initilizedModule) => { + 100: (initilizedModule, _exports, require) => { + "use strict" - initializedModule.exports = "export text" + require.r(_exports), require.merge(_exports, { default: () => t }) + const t = "export text" }, }, ãã®èŸºãããµã€ãºå¢å ã®åå ã«ãªã£ãŠå¢ããŠããããã§ããå®éã®ãã³ãã«ã§ã¯å€æ°åã¯1æåãªã®ã§ use strict ãæ¯èŒçã³ãŒãéãå¢ããéšåã§ããç¹ã« lodash-es ã®å Žåã¯ã颿°ããšã«ãã¡ã€ã«ãåãããŠããã®ã§ã颿°ããšã«äžèšã®äœåãªã³ãŒããçæããããã圱é¿ã倧ãããªã£ãŠãããšæãããŸãã å
šäœã®ãã³ãã«ãµã€ãºãå¢ããåé¡ã«ã€ããŠã¯ãCJS ããäŸå解決ãã以äžå¿
èŠãªã³ãŒããå¢ããŠããã ããªã®ã§ãCJS ã䜿ãã®ã§ããã°é¿ãããããªããµã€ãºã®å¢å ã§ããããšãåãããŸãã åå â¡: ãããã TreeShaking ãå¹ããŠããªãã£ã ãŸããåå â ã®èª¿æ»ãããŠããŠåãã£ãã®ã§ãããããããä»åã®æžãæãã®ããã« const { findIndex } = require( 'lodash-es' ) ã®æžãæ¹ã ãšãTreeShaking ãåããªãããšãåãããŸããã webpack ã§ã¯äžèšã®ã³ãŒãã以äžã®ããã«å±éããŸãã ;(() => { var moduleMap = { 100: (initilizedModule) => { // lodash-es // ããã«å
š lodash-es ã®ãã³ãã«ãæžãåºããã } } , // ... çç¥ (() => { // ãšã³ããªãŒãã€ã³ã const { findIndex } = require(100) } )() } )() èŠãŠãããããã«å
šãŠãœãŒã¹ã³ãŒãããã³ãã«ã«å«ãŸããŠããŸã£ãŠããŸãã TreeShaking ãå¹ãæžãæ¹ã«çŽããŠããã³ãã«ãµã€ãºãæžãã åå â ã«ã€ããŠã¯ãå°æ¥çã« ESM ãžã®çœ®ãæããçµããã°è§£æ¶ããŸãããCJS ã®ç¶æ
ã§ã¯äŸå解決ã®ããã®å¿
èŠãªã³ãŒããå¢ããŠããã ããªã®ã§èš±å®¹ãããããããŸããã äžæ¹ãåå â¡ã«ã€ããŠã¯ä»¥äžã®ãããªæžãæ¹ãªããã¡ããš TreeShaking ãåããŠäœ¿ãããŠããç®æã ããã³ãã«ããŠãããŸãã // ãã®1: require ããã¡ãœãããã§ãŒã³ã§é¢æ°ãåŒã¶ require( 'lodash-es' ).findIndex() ãŸããTreeShaking ã§ã¯ãããŸãããåå¥ã®ã¢ãžã¥ãŒã«ãæå®ããŠäŸå解決ããããšã§äœ¿çšãã颿°ã®ã¿ãã³ãã«ã«å«ããããšãã§ããŸãã ãããã³ãŒãããåé€ã§ããã°è¯ãã®ã§ããã¡ãã®æ¹æ³ã§ãåå â¡ã¯è§£æ¶ã§ããŸãã // ãã®2: 䜿çšãã颿°ãæå®ã㊠import ãã const { default : findIndex } = require( 'lodash-es/findIndex' ); findIndex() ãã®1ã®æžãæ¹ã§ã¯ã䜿çšç®æã« require ãæžãå¿
èŠãããããšã«å¯ŸããŠãESModules ã¯åºæ¬çã«ã¢ãžã¥ãŒã«ã®å
é ã§ãŸãšããŠäŸåè§£æ±ºãæžãã®ã§ãå°æ¥çã« ESM ã眮ãæããããšãèããŠããè¿ããã®2ã®æžãæ¹ã§çœ®ãæããããšã«ããŸããã ãã³ãã«ãµã€ãºãåæžããããšãã§ãã CJS ã§åå¥ã« import ããããã«ããããšã§ããå¯èªæ§ãæªããªããŸããããããã§ãããžã§ã¯ãã® lodash ãå
šãŠçœ®ãæããããšãã§ããŸããã®ã§ãåã³ãã³ãã«ãµã€ãºãèšæž¬ããŸããã ãšã³ã㪠å
ãµã€ãº 眮ãæãåŸã®ãµã€ãº å²å entry1 493.95KB 459.74KB -6.9% entry2 369.18KB 327.9KB -11.2% entry3 362.57KB 325.01KB -10.4% ãã³ãã«ãµã€ãºã 6-11% çšåºŠåæžã§ããŠããããšãåãããŸãã ä»åã®ãããžã§ã¯ãã§ã¯ç¡äºåæžããããšãã§ããŸããããlodash-es ã®ç·ãã³ãã«ãµã€ãºãå¢ããåå â ã«ã€ããŠã¯è§£æ¶ããŠããªãã®ã§ãlodash-es ã®é¢æ°ã®äœ¿çšéãäžå®éãè¶
ãããšããããã³ãã«ãµã€ãºãå¢ããŠããŸããšæšæž¬ãããŸããå®éã«ãã³ãã«ãµã€ãºãã©ããªã£ããèšæž¬ããããšãããããããŸãã ãŸãããã®ãããžã§ã¯ãã§ã¯ããã³ããšã³ããšã³ã·ã¹ãã ã®ã¢ããããŒãã«åãçµãã§ããŠããã®äžã§ CommonJS ã§èšè¿°ãããã¢ãžã¥ãŒã«ã ESM ã«çœ®ãæããããšããŠããŸãã眮ãæããå®äºããã° lodash-es ã®ç·ãã³ãã«ãµã€ãºãå¢ããåé¡ãè§£æ¶ãããã®ã§ãããã«ãã³ãã«ãµã€ãºã®åæžãæåŸ
ã§ããŸãã ããŸã åºæ¬çã«ã¯ããã®èšäºã§æžãã圢ã§çœ®ãæããŠããã°è¯ãã£ãã®ã§ããäžéšç¹æ®å¯Ÿå¿ãå¿
èŠã ã£ãã®ã§ç޹ä»ããŸãã wrapper èšæ³ã眮ãæãã lodash ã«ã¯ wrapper èšæ³ãšãã颿°ãã¡ãœãããã§ãŒã³ã§åŒã¶ããšãã§ããæžãæ¹ããããäžéšã§ãã®èšæ³ã䜿ãããŠããŸããã import _ from 'lodash' const arr1 = _.map( [ 1, 2, 3, 4, 5 ] ) // åºæ¬çãªæžãæ¹ const arr2 = _( [ 1, 2, 3, 4, 5 ] ).map((num) => num * 2) // wrapper èšæ³ ã¡ãœãããã§ãŒã³ã§æžãããŠããã®ã§ãäžæãªçœ®ãæããã§ããŸããã§ãããæ°ãå€ããªãã£ãã®ã§æåã§æžãçŽãããšã«ããŸããã chain ãå©çšããªã lodash ã«ååšãã chain 颿°ã lodash-es ã«ã¯ååšããŸããã§ããã How to use chain with lodash-es while supports tree shaking? · Issue #3298 · lodash/lodash · GitHub äžèšã® Issue ã«æžãããŠããããã« TreeShaking ããµããŒãã§ããªããã远å ããŠãªãæ§ã§ããã ãã¡ãã1ç®æãã䜿ãããŠããªãã£ãã®ãšãç¡é§ãªåŠçãå€ãæžãããŠããããšãããlodash ã䜿ããã«æžãæãã圢ã«ãªããŸããã ãŸãšã ä»å㯠ESM ãš CJS ãå
±åããç°å¢äžã§ lodash-es ã眮ãæããããšã§ãã³ãã«ãµã€ãºãåæžããç¥èŠãå
±æããŸããã ãã³ãã«ãµã€ãºã倧ããã®ã§ lodash-es 䜿ãããã«ããŠãµã¯ããšãµã€ãºãæžãããããããã®æž©åºŠæã ã£ãã®ã§ãããå®éãã£ãŠã¿ããš CJS ãš ESM åšãã§è©°ãŸãããšããããwebpack ã§ CJS ãš ESM åšããã©ãäŸå解決ããã®ããwebpack ãã©ããã圢ã§ã³ãŒãããã³ãã«ããã®ãçåŠã³ãå€ãã£ãã§ãã CJS ç°å¢äžã§ã¯ webpack5 ãå©çšããŠãã lodash ãã䜿çšããŠãã颿°ã®éãäžå®ä»¥äž ãšããæ¡ä»¶ä»ãã§ã¯ãããŸãããlodash-es ã«çœ®ãæããTreeShaking ã䜿ããããã«ããããšã§ãã³ãã«ãµã€ãºãåæžã§ããããšãåãããŸããã
ããã«ã¡ã¯ããšã³ãžãã¢ã® id:mp0liiu ã§ãã 8æ28æ¥(å)ã® Learn Languages 2021 ãšããã€ãã³ãã® Language Update ãšããã»ãã·ã§ã³ã§ @charsbar ãããšäžç·ã«2018幎以éã®Perl5ãPerlã³ãã¥ããã£ã®ææ°ååã«ã€ããŠè©±ããŠããã®ã§ããã®ãšã話ããå
容ã«è£è¶³ãªã©ãã€ã€èšäºã«ããŠãããããšæããŸãã é
ä¿¡ã¢ãŒã«ã€ã㯠ãã¡ã ããèŠããŸãã æç³»å 2019/5/22 Perl5.30 ãªãªãŒã¹ 2020/6/20 Perl5.32 ãªãªãŒã¹ 2020/6/24 Perl7ã®çºè¡š 2021/5/21 Perl5.34 ãªãªãŒã¹ Perl5.30 ã®å€æŽç¹ æ£èŠè¡šçŸãæååšãã®çްããæ¹åãªã©ã¯ãããŸãããæ£çŽããŒãã倿Žç¹ãèŠãããªãã§ãã Perl5.32 ã®å€æŽç¹ isa æŒç®åã®å®è£
å€ãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãããã¯ãã®ãµãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãã調ã¹ãæŒç®åã§ãã use feature qw( isa ) ; package A { use Moo } my $obj = A->new; print '$obj is instance of A.' if $obj isa A; ä»ãŸã§ã§ã isa ã¡ãœããã§å€å®ã§ããŸããããã¡ãœããã®å Žåã¯ã©ã¹åããã§ãåŒã³åºããŠããŸãã®ã§ãã€ã³ã¹ã¿ã³ã¹ã®å Žåã®ã¿å€å®ãããå Žåã¯é·ãæ¡ä»¶ãçµéšè
ã§ãªããšããããªããã㪠workaround ãæžãå¿
èŠããããŸããã ããã䜿ãã°ãã®å¿
èŠããªããªããŸãã é£éæ¯èŒæ©èœ äŸãã° $x < $y && $y <= $z ã $x < $y <= $z ãšãã£ããµãã«ãåãå€ãæ¯èŒããæ¡ä»¶åŒãç°¡æœã«æžããããã«ãªããŸããã 鿥ãªããžã§ã¯ãèšæ³ãç¡å¹åã§ããããã« éæ¥ãªããžã§ã¯ãèšæ³ã¯ method $object @args ãšãããµãã«ã¡ãœãããåŒã³åºããèšæ³ã§ãã Perl ã¯å²ãšè±èªãšããŠèªã¿äžããããšãéèŠããæåããã£ã *1 ã®ã§ãæã¯ãã®ãããªæžãæ¹ãããã®ãäž»æµã§ããã æ¬¡ã®ãããªã³ãŒããåãããŠã¿ããšç¡å¹ã«ã§ããã®ã確èªã§ããŸãã no feature 'indirect' ; new Foo; # Bareword found where operator expected, near "new Foo" ç¡å¹ã«ããŠããªãå Žåãæ¬¡ã®ãããªãããã«ãããšã©ãŒã¡ãã»ãŒãžãã§ãŸãã new Foo; # Can't locate object method "new" via package "Foo" (perhaps you forgot to load "Foo"?) 鿥ãªããžã§ã¯ãèšæ³ã¯é¢æ°ã®æ¬åŒ§ãçç¥ãåŒã³åºããå Žåã®ææ³ãšäŒŒãŠããŠã颿°ãã€ã³ããŒããããŠãããã©ããã§éæ¥ãªããžã§ã¯ãèšæ³åŒã³åºããšããŠè§£éããã颿°åŒã³åºããšããŠè§£éãããããå€ããããããã«ãããšã©ãŒã¡ãã»ãŒãžãã§ãå ŽåããããŸãã ãããããéçºè
ãæ··ä¹±ãããŠããã®ã§ç¡å¹ã«ã§ããããã«ããããã§ãã Perl7ã®çºè¡š Perl5.32 ã®ãªãªãŒã¹ã®å°ãåŸãConference in the Cloud ã«ãŠåœæã®Perl5ã®ãªãªãŒã¹ãããŒãžã£ãŒ(Pumpking)ã§ããSawyer Xæ°ã«ãã£ãŠPerl7ãçºè¡šãããŸããã *2 Perl7ã®å
容ã¯ã以äžã®ãããªãã®ã§ããã æ©èœçã«ã¯5.32ãšåã ããã©ã«ãã§ strict, warnings ãªã©ã®ãã䜿ããããã©ã°ããæè¿è¿œå ãããæ°æ©èœãONã«ããPerl5.0以åããããPerlã®ææ³ãè€éã«ããŠããæ§æãç¡å¹ã«ãã ç®ç åå¿è
ãããããªãã©ã°ããèŠããªããŠãããã«Perlã³ãŒããæžãå§ããããããã«ããããš 20äžçŽã«æžãããã³ãŒãã®äºææ§ãæ®ãããšã倧äºã«ããããªã Perl6ãRakuã«æ¹åããååçã«ãå®å
šã«å¥ã®èšèªãšãªã£ãããšã§ãã¡ãããšPerl5ã®åŸç¶ããŒãžã§ã³ãã ããããšããã¢ãããŒã·ã§ã³ããã£ã æåã«æžããªããã°ãªããªããã€ã©ãŒãã¬ãŒãããªããªããšã³ãŒããæžãããããªããŸãããåå¿è
ããšã£ã€ãããããªãã®ã§ããªãè¯ãããã«èŠããŸããã å°ãªããšãçºè¡šåŸãæ¥æ¬ã®Perlçéã§ã¯ããªã奜åå¿ã ã£ãå°è±¡ããããŸãã ããããPerl7ãPerl7ã®çºè¡šã«ã¯æ§ã
ãªåé¡ããããŸããã éå»ã®Perl5ã§æžãããã³ãŒããæžãæããªããšåããªããªã ãã¯ãäžçªç®ç«ã€åé¡ãšããŠéå»ã®Perl5ã§æžãããã³ãŒããæžãæããªããšåããªããªãããšããããããŸãã Perlã«ã¯åŸæ¹äºææ§ãéèŠããæåããããããã¯Perlã³ã¢ã«ãŸã€ããããŸããŸãªæ¹éãææžåãã perlpolicy ã«ãèšè¿°ãããŠããŸãã çºè¡šãããå
容ã®ãšããã«Perl7ãå®è£
ãããŠããŸããš perlpolicy ã«åããããã§ãã ä»ã«ãåŸæ¹äºææ§ããªããªãããšã§ã次ã®ãããªåé¡ãçºçããããšãèããããŸãã /usr/bin/perl ã¯åžžã«Perl5äºæã ãšããã£ãŠããããOSãã£ã¹ããªãã¥ãŒã¿ã®éœåã§ä»»æã®ã¿ã€ãã³ã°ã§Perl7ã«åãæ¿ããéå»ã®è³ç£ãå£ããŠããŸã ïŒ!/usr/bin/perl ã§ã©ã®ããŒãžã§ã³ã®Perlã§å®è¡ããŠããã®ããæç¢ºã§ãªããªã£ãŠã7ã§æžããŠããã€ããã®ã³ãŒãã5ã§å®è¡ããŠããŸãONã«ãªã£ãŠããã€ããã®æ©èœãå®ã¯OFFã«ãªã£ãŠããŸã Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ããã±ãŒãžç®¡çã倧å€ã«ãªã£ãŠããŸã ã³ãã¥ããã£å
ã§ååã«è°è«ããã«çªç¶çºè¡šããã ã³ãã¥ããã£å
ã§ååã«è°è«ããã« Pumpking ãçªç¶çºè¡šããããšãåé¡ã«ãªããŸããã åŸæ¥ãªããã®ãããªPerlã³ã¢ã®æ¹éã®éèŠãªå€æŽãè¡ãå Žå㯠Perl5 Porters(Perl5éçºè
åãã®ã¡ãŒãªã³ã°ãªã¹ãã«åå ããŠããPerlã®éçºã«èå³ã®ãã人ãã¡)ã«çºè¡šããŠããå
¬ã«ãããã®ã§ãããããã«ãã£ãŠã³ãã¥ããã£ã®äžéšããã¯Perl7ãåãå
¥ãããã«ããé°å²æ°ã«ãªã£ãŠããŸããŸããã ããæ£ç¢ºã«èšããšãã³ãã¥ããã£å
ã§ååã«è°è«ããã«çªç¶çºè¡šããããšããããã¯ãPumpking 㯠perlpolicy ã«ãã£ãŠå®çŸ©ããã Perl Porter ã®äžäººã«éãã perlpolicy ãè¶
è¶ããç«å Žã§ã¯ãªãã¯ããªã®ã« perlpolicy ã«æç¢ºã«åããæ¹éãæã¡åºããããšãåé¡èŠãããŸããã Pumpking = è¡æ¿æ©é¢ãPerl Porters = ç«æ³æ©é¢ ãšèããŠããããšããããããããšæããŸãã èŠã¯è¡æ¿ãæ
åœããäººãæ³åŸãã®ãã®ãå€ãããããªè¡åãããŠããŸã£ããšããããã§ãããããã«ãã£ãŠã³ã¢ããŒã ãã³ãã¥ããã£å
ã§æ··ä¹±ãçºçããŠããŸããPerl5ã®æ£åŒãªã¬ããã³ã¹å¶å®ãå¿
èŠã ãšããæµãã«ãªããŸããã Perlã³ãã¥ããã£ã®ã¬ããã³ã¹å¶å® ãããã£ãæµãã§ã¬ããã³ã¹å¶å®ã«ã€ããŠãããã話ãåããè¡ããã2020幎12æé ã¬ããã³ã¹ãå¶å®ãããŸããã ãã®å
容㯠perlgov ã«ææžåãããŠããŸãã ãã£ããå
容ã玹ä»ãããšãã³ã¢ããŒã ãšPSC(Perl Steering Council)ãšåŒã°ããéå¶è©è°äŒã«ã€ããŠæç¢ºã«å®çŸ©ãããããã«ãªããŸããã ã³ã¢ããŒã ã¯Perlã®ç¶ç¶çãªéçºã«æºããã°ã«ãŒãã§ãã åºæ¬çã«ã¯ã³ã¢ã®ã³ããã¿ãŒã§ãéå¶è©è°äŒã®ã¡ã³ããŒãéžåºããã³ã¢ããŒã ã®ã¡ã³ããŒã管çããæš©éãæã¡ãŸãã PSCã¯Perl5ã®æ°ããããŒãžã§ã³ã®ãªãªãŒã¹ã¹ã±ãžã¥ãŒã«ãããã»ã¹ã®ç®¡çãªã©æçµçãªæ±ºå®ããã人ãã¡ã®ããšã§ãã³ã¢ããŒã ããéžã°ãã3人ã®ã¡ã³ããŒããæ§æãããŸãã åŸæ¥ã® pumpking ã眮ãæãããã®ã§ãã ãã§ã«PSCã®ã¡ã³ããŒã¯ããããå
¥ãæ¿ãã£ãŠããŸãããçŸåšã®ã¡ã³ããŒã¯ Paul Evans æ°, Ricardo Signes æ°, Neil Bowers æ°ã®3人ã®ããã§ãã Perl5ãš7ã®ä»åŸ ä»åŸã®æ¹éã«ã€ããŠæ··ä¹±ããŠããPerl5ãš7ã§ããã2021/4/11 ã«PSCã®ããŒãã£ã³ã° *3 ãè¡ãããããã§ä»¥äžã®ãããªæ¹éãæ±ºãŸããŸããã 以åçºè¡šããã Perl7 ã®å
容ã¯åãäžããŠãåŸæ¥ã®ããŒãžã§ã³ã«ããæ©èœã¬ãŒããç¶ããŠãã( use feature version ã®åœ¢ã§æ°æ©èœãæå¹ã«) Perl7ã¯ãã®ãã¡ãªãªãŒã¹ããããå°ãªããšãæ¥å¹ŽãªãªãŒã¹ãããããšã¯ãªããŠãåœåã¯ãããŸã§ãšåãããã«æ¯å¹Žå®å®çã®ãªãªãŒã¹ãç¶ããŠãã ååãªæ©èœãæã£ãã Perl7 ãšåŒã¶ããšã«ãªããããããªã Perl5.34 ã®å€æŽç¹ ã³ãã¥ããã£ã®ãŽã¿ãŽã¿ããã£ãã®ã§ããŸã倧ããªå€æŽç¹ã¯ãªãã§ããã倧ããªå€æŽç¹ãšããŠã¯æ¬¡ã®ãããªãã®ããããããŸãã try-catch æ§æ 次ã®ããã« try-catch ã§äŸå€åŠçãèšè¿°ã§ããããã«ãªããŸããã use feature qw( try ) ; try { die 'hogehoge' ; } catch ( $e ) { print $e ; } ããã«ããä»ãŸã§ eval-if ã§æžããŠããäŸå€åŠçããããããããããããã«ãªããŸãã ãŸããTry::Tiny ãªã©ãšéã£ãŠ ; å¿ãããªããªã£ãããäŸå€åŠçã®ã¢ãžã¥ãŒã«ãä¹±ç«ããã¡ã ã£ãã®ã§ã©ãã䜿ãã°ããã®ãããŸãæ©ãŸãªããŠè¯ããªããŸãã æŽã«èªåã§ã³ãŒããåãããŠã¿ãéãã ãš Try::Tiny ãªã©ã®å€éšã¢ãžã¥ãŒã«ãšã³ã³ããªã¯ãããªãã®ã§ãæ¢åã®ãããžã§ã¯ãã«ãåãå
¥ãããããã§ãã 8鲿°æ°å€ãªãã©ã«ã®æ°æ§æ 2鲿°ã 0b1111 ã 16鲿°ã 0xFF ãšãã£ãããã«èšè¿°ã§ããŠããæãã§ã 8鲿°ã 0o777 ãšãããµãã«èšè¿°ã§ããããã«ãªããŸããã ä»ãŸã§ã¯8鲿°ãèšè¿°ããå Žåå
é ã«0ãã€ã㊠0777 ãšãããµãã«æžããŠããã®ã§ã以åãã8鲿°ã®èšè¿°ãèŠããããªã£ãããªãšæããŸãã barewordãã¡ã€ã«ãã³ãã«ãç¡å¹åã§ããããã« barewordãã¡ã€ã«ãã³ãã«ãšã¯åã°ããã«æ ŒçŽããããã¡ã€ã«ãã³ãã«ã®ããšã§ãã æã¯ãã¡ã€ã«ãã³ãã«ã¯åã°ããã«æ ŒçŽããã®ãäžè¬çã§ããããä»ã¯å€æ°ã«æ ŒçŽããã®ãäžè¬çãªã®ã§ããã匷å¶ãããããªæ©èœã§ããã æ¬¡ã®ãããªã³ãŒããåãããŠã¿ããšç¡å¹ã«ã§ããã®ã確èªã§ããŸãã no feature 'bareword_filehandles' ; open FH , '<' , 'tmp.txt' ; my @lines = <FH> ; close FH ; æ¬äŒŒçãªå€æ¬¡å
é
å(multidimensional)ãç¡å¹åã§ããããã« æ¬äŒŒçãªå€æ¬¡å
é
åãšããã®ã¯ãããã·ã¥ã®èŠçŽ ã $foo{$a , $b , $c} ãšãããµãã«ã¢ã¯ã»ã¹ãããš $foo{ join ( $; , $a , $b , $c ) } ãšãããµãã«åäœããããšã§æ¬äŒŒçã«å€æ¬¡å
é
åããšãã¥ã¬ãŒãããæ©èœã®ããšã§ãã æã®Perlã§ã¯å€æ¬¡å
é
åã䜿ããªãã£ãããã«å®è£
ãããæ©èœã§ãä»ã¯äœ¿ãããšãç®ã«ããããšããªããšæããŸãããããã·ã¥ã¹ã©ã€ã¹ã®æ§æ @foo{$a, $b, $c} ãšäŒŒãŠããŠæ··ä¹±ãæãã®ã§ç¡å¹åã§ããããã«ããã®ã ãšæããŸãã æ¬¡ã®ãããªã³ãŒããåãããŠã¿ããšç¡å¹ã«ã§ããã®ã確èªã§ããŸãã no feature 'multidimensional' ; my %foo ; $foo{ qw( a b ) } ; #Multidimensional hash lookup is disabled Perl5.36以éã¯ã©ããªãã Perl5.35 ã§ã®å€æŽ éçºçã® Perl5.35 ã§ãã§ã«æ°æ©èœã®è¿œå ãèšèªæ©èœã®æ¹åãè¡ãããŠããŸãã ãããã¯ãã®ãŸãŸç¹ã«åé¡ããªããã° Perl5.36 ã«ãåã蟌ãŸãããšæããŸãã deferæ§æã®è¿œå Goãªã©ä»ã®èšèªãªã©ã§ãèŠãããæ§æãšåããããªæãã§ãã¹ã³ãŒããæãããšãã«å®è¡ãããåŠçã defer { ... } å
ã«èšè¿°ããããšãã§ããããã«ãªããŸãã ãã®æ§æã¯ perl5.35.4 ã§è¿œå ãããŸããã *4 çåœå€ã®æ±ãã®æ¹å æ¡ä»¶åŒãªã©ããè¿ãããå€ãã !!0 ã !!1 ãªã©ã®çåœå€ã倿°ã«ä»£å
¥ããŠãçåœå€ãšããŠã®æ§è³ªãä¿ã€ããã«ãªããŸããã ããã«ãã£ãŠä»ã®èšèªãšã®çžäºéçšãJSONã®ãšã³ã³ãŒããªã©ããŒã¿ã®ã·ãªã¢ã©ã€ãºãªã©ã楜ã«ãªããŸãã ãã®æ¹å㯠perl5.35.4 ã§è¡ãããŸããã *5 RFCãšããŠææ¡ãããŠãããã® Perlã®å€æŽã®ææ¡ã¯ ãã¡ãã®ãªããžã㪠ãèŠãã°ãããã®ã§ããããããã®ãã¡ããããã€ãåãäžããŸãã forã«ãŒãã®ç¹°ãè¿ãããšã«è€æ°ã®èŠçŽ ãåç
§ããæ§æã®è¿œå çŸåšã®foræã ãšç¹°ãè¿ãããšã«ãªã¹ãã®å
é ãã1èŠçŽ ãã€ããåç
§ã§ããŸãããã for my ($foo, $bar, $baz) (@array) { ... ãšããããã«è€æ°ã®èŠçŽ ãé çªã«åç
§ã§ããããã«ãªããŸãã ãã®æ§æãå®è£
ããããšããã·ã¥å
ã®å
škey, valueã®ãã¢ã for my ($key, $value) (%hash) { ... } ã§åç
§ã§ããããã«ãªããŸãã *6 Everything Slices ããã·ã¥ãé
åã«å«ãŸããå€ãããŒ/å€ã®å®å
šãªã»ãããå«ãã¹ã©ã€ã¹ãååŸããæ§æã远å ããããšããææ¡ã§ãã å
·äœäŸãããããš %hash{ * } ; # %hash{ keys %hash } ãšåã %array[ * ] ; # %array[ 0 .. $#array ] ãšåã @hash{ * } ; # @hash{ keys %hash } ãšåã @array[ * ] ; # @array[ 0 .. $#array ] ãšåã ãšãã£ãæãã«ãªããŸãã {} , [] ã®äžã¯ã³ãŒããæžããããã§ãäŸãã° %array[ grep {; $_ > 5 } * ] ãšãã£ãã³ãŒããæžããŸãã forã«ãŒãã®ç¹°ãè¿ãããšã«è€æ°ã®èŠçŽ ãåç
§ããæ§æã®è¿œå ãšäžç·ã«è¿œå ããããšäŸ¿å©ã«ãªãããã§ãçµã¿åãããŠäœ¿ããš for my ($i, $v) (%array[ *]) { ... } ãšæžããšé
åã®indexãšèŠçŽ ãã€ãã¬ãŒã·ã§ã³ããããšãã§ããããã«ãªããŸãã ãã®ä» æ¢ã«ã«ã³ãã¡ã¬ã³ã¹ã§PSCã®ã¡ã³ããŒã5.36以éã©ããããããªã©ãšãã£ãããšã話ããŠããã®ã§ãããã€ãåãäžããŸãã FOSDOM2021 ã§ã® Paul Evansæ° ã®ããŒã¯ 2021/02/06~07 ã® FOSDOM2021 ã§PSCã®ã¡ã³ããŒã§ãã Paul Evans æ°ããPerl's Amazing Time Machineã *7 ãšããã¿ã€ãã«ã§ããŒã¯ããŠããããã®äžã§2025幎ã«ã¯æ¬¡ã®ãããªæ©èœãå®è£
ããããšãã話ãããŠããŸããã match-caseæ§æ ã®è¿œå ãçŸç¶ã®å£ãã given-when ã眮ãæãã å³å¯æ¯èŒæŒç®åã®è¿œå ãæé»çãªå倿ãããã«å€ãæ¯èŒããæŒç®å éç/åçã«åãã§ãã¯ããæ§æã®è¿œå ãµãã«ãŒãã³ã®ãã«ããã£ã¹ããããå¯èœã«ãååã§ã·ã°ããã£ãéããµãã«ãŒãã³ãæžããããã«ãã Paul Evans æ°ã¯XS(perlåŠçç³»ã®èšè¿°ã«äœ¿ãããŠããCã®ãã¯ãèšèª)ãããªããªæžããéçºè
ã§ãã 5.34 ã® try-catch æ§æã 5.32 ã®isaæŒç®åããã®æ¹ãå®è£
ããŠããŸãã Perléçºã®æææ±ºå®è
ã«ããªããªã³ãŒãæžãã人ãå
¥ãã®ã¯ä¹
ãã¶ãã®ããšã§ãããã«ããPerlã³ã¢ã®éçºã掻çºåãããã ãšããæåŸ
ããããŸãã Conference in the Cloud! A Perl and Raku Conf ã§ã® Ricardo Signes æ° ã®ããŒã¯ 2021/06/10 ã® Conference in the Cloud! A Perl and Raku Conf ã§ PSCã®ã¡ã³ããŒã§ãã Ricardo Signes æ°ããWhat's new in Perl? ã *8 ãšããã¿ã€ãã«ã§ããŒã¯ããŠããããã®äžã§5.36ã§ã¯æ¬¡ã®ãããªããšãããããšè©±ããŠããŸããã use version ã§ãã¹ããªã³ãŒããæžããããã«ããã warnings, utf8 ã®æå¹å barewordãã¡ã€ã«ãã³ãã«, 鿥ãªããžã§ã¯ãèšæ³ãªã©ã®æ··ä¹±ãæããããæ©èœã®ç¡å¹å çŸåš20è¿ãããå®éšçæ©èœã®æŽçãexperimental ãå€ãããã®ã¯å€ããPerlã«è¿œå ãã¹ãã§ãªãæ©èœã¯åé€ãã Perlã³ã¢ä»¥å€ã®åå Perlã³ã¢ä»¥å€ã«ãé¢çœãåããããã®ã§ããã€ããšããããŸãã Corinna Ovidæ° ã«ãããªããžã§ã¯ãæåæ§æãPerlã³ã¢ã«å
¥ããããšããææ¡ã§ãã github ã«ææ¡ãå®éšçå®è£
ããŸãšããããŠããŸãã Perlã³ã¢ã«çŸç¶ãããªããžã§ã¯ãæåããã°ã©ãã³ã°é¢é£ã®æ©èœã¯è²§åŒ±ã ã£ãããCPANã«ã¯ãããè£ããããªã¢ãžã¥ãŒã«ãä¹±ç«ããŠããã®ã§ããã®ãããªåãã¯åŠç¿ã³ã¹ããäžãã£ããã³ãŒããæžãããããªã£ãŠå¬ããã§ãã Perlã³ã¢ã«ãªããžã§ã¯ãæåæ§æãå
¥ããããšããææŠã¯éå»ã«ãäœåºŠããããŸããã æåãªãã®ã§ã¯ Stevan Little æ°ã Moose ãPerlã³ã¢ã«å
¥ããããšé 匵ã£ãŠããããŠããŸããããMoose ã倧ãããããªã©ã§ããŸãè¡ããŸããã§ããã 仿§çã«ã¯ Moose ã Raku ã®åœ±é¿ã倧ããåããŠããŸãã MooseãMoo ãªã©ã®OOPãã¬ãŒã ã¯ãŒã¯ã¢ãžã¥ãŒã«ãšã¯éã£ãŠ keyword plugin ã®ä»çµã¿ãäœ¿ãæ°ããæ§æã远å ããŸãã ãªã®ã§ ; å¿ãããªããªããèšè¿°éãæžãã $self ãä»ãã倿°ããçŽæ¥ã€ã³ã¹ã¿ã³ã¹å€æ°ã«ã¢ã¯ã»ã¹ã§ããŠã€ã³ã¹ã¿ã³ã¹å€æ°ã®å®£èšããªããã°ã³ã³ãã€ã«æãšã©ãŒã«ãªãã®ã§typoã«æ°ã¥ããããããªã©ãšãã£ãã¡ãªããããããŸãã Paul evans æ°ã Object::Pad ãšããå®éšçå®è£
ã¢ãžã¥ãŒã«ãäœã£ãŠãããæ¢ã«CPANã«ããã£ãŠããŸãã 圌ã®äŒç€Ÿã§ã¯äœ¿ãå§ããããããŠããããã§ãã UV2.0 ã®ãªãªãŒã¹ libuv ã®Perlã€ã³ã¿ãŒãã§ãŒã¹ãæäŸãã UV ã Perl foundation ã®å©æãåããŠéçºãé²ã¿ãããŒãžã§ã³2.0ããªãªãŒã¹ãããŸããã ãŸãšã ããæè¿ã¯Perlã³ãã¥ããã£ã§ãããããŽã¿ãŽã¿ããããŸãããããããããããèœã¡çããŠããŠããŠä»åŸéçºã掻çºã«ãªã£ãŠããããã ãšããæãã§ãã ããããã®Perlã«æåŸ
ã§ããïŒ *1 : ãå®çš Perl ããã°ã©ãã³ã°ãã«ã¯Perlã§è©©ãæžã話ãã§ãŠããŸããããã®ããšãèãããšåœæã®é°å²æ°ãå°ãããããšæããŸã *2 : https://www.perl.com/article/announcing-perl-7/ *3 : https://www.nntp.perl.org/group/perl.perl5.porters/2021/04/msg259789.html *4 : https://metacpan.org/release/WOLFSAGE/perl-5.35.4/view/pod/perldelta.pod#defer-blocks *5 : https://metacpan.org/release/WOLFSAGE/perl-5.35.4/view/pod/perldelta.pod#Stable-boolean-tracking *6 : çŸç¶ã§ã while (my ($key, $value) = each %hash) { ... } ã§ã§ããŸãããéäžã§ã«ãŒããæ¢ãŸã£ãå Žåãªã©ã§ãããã©ããããã for my $key (keys %hash) { my $value = $hash{$key}; ... ãšãããµãã«æžãããããšãå€ãã§ã *7 : https://www.youtube.com/watch?v=Kc_bP73xNyM *8 : https://www.youtube.com/watch?v=FlGpiS39NMY
ã¢ãã€ã«ãã¡ã¯ããªãŒã®ãšã³ãžãã¢ã¯ãNFTããŒã±ãããã¬ã€ã¹ã®ããŠããããäœçœ®ã²ãŒã ã®ãé§
ã¡ã¢ïŒããªã©æ§ã
ãªäºæ¥ã®éçºãããŠããŸãããããªãšã³ãžãã¢ãã¡ããæ®æ®µãã©ã®ãããªããšãèããŠããã®ãã3人ã®ãšã³ãžãã¢ã«èããŠã¿ãŸããã ãã®èšäºã«åºãŠãã人ãã¡ ããŒã ã«ãã£ãŠæ§è³ªã¯ç°ãªãã®ã ããã課é¡ã«å¿ããŠãéçºã®é²ãæ¹ãå€ãã ã¯ãŒã¯ãã°ãæžãã®ã¯æ¥œãã å¯èŠåããã®ã¯ãçµç¹éçºã«ãããŠããåœç¶ãµãŒãã¹éçºããšã³ãžãã¢ãªã³ã°ã§ãå€§äº å¯èŠåã¯ç®çã§ã¯ãªã 楜ããä»äºãããããã®ããã«æ§ãç ã çæ³ãç¥ããªããšåŠ¥åããŠãããšã«æ°ã¥ããªã èªåãæãã§ããç°å¢ããããªããããå€ããã°ãã äžè
äžæ§ã®ãã£ãªã¢ @kfly8 : 仿¥ã¯ãã¢ããã¡ã¯ã®ãšã³ãžãã¢ãæ®æ®µã©ããªããšãããŠããã®ããèããŠããã®ãã倧åã«ããŠããã®ããã¿ãããªããšãèããŠããããã§ãããããããé¡ãããŸãïŒ ãŸãã¯ãã¿ããªãæ®æ®µã©ããªããšãããŠããã®ããèªå·±ç޹ä»å
ŒããŠæããŠãã ããã @tsukumaru : ãšã³ãžãã¢ãšããŠå
¥ç€ŸããããŸã¯ãããŒãžã£ãŒãããŠããŸããããŒã ãã«ãã£ã³ã°ãããŒãã«ãããžã¡ã³ãã«èå³ãããã®ã§ãä»åã¯ãã®èŸºããäžå¿ã«è©±ããã°ãšã @odanado : ãããã¯ãã§ãŒã³ããŒã ã§ãœãããŠã§ã¢ãšã³ãžãã¢ãããŠããodanã§ããããŒã ã§ã¯ããã¯ãªãŒãã®ããžã·ã§ã³ã§ãããã¯ãã§ãŒã³æè¡ã®ãã£ããã¢ãããæ©èœéçºã®èšèšãªã©ããŠããŸãããããã¯ãã§ãŒã³ã®ä»ã«Web æè¡ãããã°ã©ãã³ã°ã奜ãã§ãã @maeken : éçºãšã¹ã¯ã©ã ãã¹ã¿ãŒãããŠããŠãæ®æ®µã¯ããŒã«ã飲ãã§ããŸãã @kfly8 : ãããŒãžã£ãŒãããã¯ãªãŒããã¹ã¯ã©ã ãã¹ã¿ãŒã ãã é
ããããã©ãèªåãç°¡åã«èªå·±ç޹ä»ãããšã³ãžãã¢çµç¹éçºè²¬ä»»è
ãããŠããŠãå
ãèšãã°ã人æéçºãçµç¹éçºãæ¡çšãæè¡åºå ±ãªã©éçºããã©ãŒãã³ã¹ã«ãããããšäœã§ãã§ããã°ãšæã£ãŠåããŠããŸãã 仿¥ã¯ïŒäººã®ã€ã€è©±ã楜ãã¿ã«ããŠããŸãïŒ @maeken : ãŸãããŠãã ããã ãã®èšäºã«åºãŠãã人ãã¡ @tsukumaru 2016幎æ°åã§ã¢ããã¡ã¯ã«å
¥ç€Ÿãé§
奪åããããã¯ãã§ãŒã³ããŒã ã®ãšã³ãžãã¢ãçµãŠãçŸåšã¯ãããŒãžã£ãŒãšããŠãããŒã ãã«ãã£ã³ã°ãããŒãã«ãããžã¡ã³ããªã©ã«æ³šåããŠããã å»å¹ŽçãŸãããã©ããšéããæéãäžçªã®çãã @odanado 2018幎æ°åã§ã¢ããã¡ã¯ã«å
¥ç€Ÿãå
¥ç€Ÿåœåã«ç«ã¡äžãã£ããããã¯ãã§ãŒã³ããŒã ã«ãœãããŠã§ã¢ãšã³ãžãã¢ãšããŠåšç±ãçŸåšã¯ãããã¯ãã§ãŒã³ããŒã ã®ããã¯ãªãŒãã @maeken æ²çžçåºèº«ãçç倧åŠå€§åŠé¢çå·¥åŠç ç©¶ç§æ
å ±å·¥åŠå°æ»ä¿®äºåŸãã¢ãã€ã«ãã¡ã¯ããªãŒã«ãšã³ãžãã¢ãšããŠ2019幎ã«å
¥ç€Ÿãã¢ã¯ã¡ã¢ïŒã®æ°èŠéçºã»éçšãçµéšããçŸåšã¯ã¹ããŒã·ã§ã³NFTããŒã ã®éçºã»ã¹ã¯ã©ã ãã¹ã¿ãŒãè¡ããããŒã«ã飲ãã®ãåŸæã @kfly8 ã²ãŒã éçºããããã¯ããããŒãžã£ãŒãçµãŠãçŸåšã¯ãšã³ãžãã¢çµç¹éçºè²¬ä»»è
ããšã³ãžãã¢ã®è²æãæ¡çšãçµç¹èª²é¡ãªã©ã«åãçµãããŸããæè¡ã³ãã¥ãã£å¥œãããããããŠãJapan Perl Associationã®çäºãããããŠããã£ãŠããã ããŒã ã«ãã£ãŠæ§è³ªã¯ç°ãªãã®ã ããã課é¡ã«å¿ããŠãéçºã®é²ãæ¹ãå€ãã @kfly8 : ãŸãã¯ãæ®æ®µã®åãæ¹ãéçºç°å¢ã ã£ãããæããŠã»ããã @tsukumaru : ãã«ãªã¢ãŒãã§ãã³ã¢ã¿ã€ã ããã®ãã¬ãã¯ã¹ã§åããŠããŸãããæ±äº¬ã ããããªãããããªæã§åããŠããã @kfly8 : æ¯çµŠãããŠããPCã¯ã©ãã ããïŒ @tsukumaru : äŒç€Ÿæ¯çµŠã®Mac Book Proãã¹ããã¯ã¯äžè¶³ããŠããå°è±¡ã¯ãªããM1 Macãªã©ã䜿ãå§ããŠããã®ã§ãæ°ãããã®ãåæ ãããŠããŠè¯ããªãšã @kfly8 : odanã¯ã©ãïŒ @odanado : ããŒãããã§èšããšè¶³ããŠããªããŠïŒç¬ïŒ tsukumaruããã®ããŒã ã ãšãAWSäžã«éçºç°å¢ããã£ãŠã倧äžå€«ã§ããã©ãèªåã®ããŒã ã¯ããŒã«ã«ã§ããã¯ãšã³ãããããã³ããšã³ããéçºããŠããã ã¡ã¢ãª16Gã®MacBookProã䜿ã£ãŠãããã§ãããã¡ã¢ãªãè¶³ããªãã ããã¯äŒç€Ÿã«ã©ãããã§ãªããAppleã·ãªã³ã³ã§32GBç©ãã ãã€ãAppleã«åºããŠããããã°ãšïŒç¬ïŒ @kfly8 : 2å°PCãããã°ããïŒ @odanado : ããŒãéçºçšãšSlackçšïŒïŒç¬ïŒ äžå : ïŒç¬ïŒ @odanado : ãªã¢ãŒãã¯ãŒã¯åæã ãšããã¹ã¯ããããã·ã³ãæ¯çµŠããã®ã¯ãããããããããããããªãïŒ @kfly8 : ïŒåšåã£ãŠããæãã ãã以åã¯ãã¹ã¯ãããPCã䜿ã£ãŠããŠãäŒè°å®€ãžæã¡èŸŒã¿ããããããããã ã£ãã諞ã
ã®çç±ã§ãããŒãã«ãªã£ãããã«ãªã¢ãŒãç°å¢ã ãšããã¹ã¯ãããã«ååž°ããéžæè¢ãããã®ãããã åã
ã®åšå®
ç°å¢ãããããã ããã tech.mobilefactory.jp @kfly8 : éçºã®é²ãæ¹ã«ã€ããŠãèãããŠã»ããã ãããããŒã ããšã«åæ§ãããããã©ãã¹ã¯ã©ã ãã¹ã¿ãŒã®maekenããèããããªã @maeken : åæãšããŠãéçºã®é²ãæ¹ã¯ãããŒã ã«ä»»ãããŠããããäŒç€ŸãšããŠéçºã®é²ãæ¹ã¯æ±ºãŸã£ãŠãããã§ããïŒããšèãããããšãããããã©ãããã§ã¯ãªããŠãèªåã®ããŒã ãšä»ã®ããŒã ã§ãç°ãªãã @maeken : ããã§ããã¡ã®ããŒã ã¯ã€ãã¬ãŒã·ã§ã³ã1é±éã®ã¹ã¯ã©ã ãé±ã«åçš®ã»ã¬ã¢ããŒããã£ãŠããããç¹°ãè¿ããŠãããäœã£ããã®ãã¬ãã¥ãŒããŠããã£ãŠãéçºã®æ¹åæ§ã決ããŠããã®ã倧åã«ããŠãããã¹ããªã³ãã¬ãã¥ãŒãšãã£ãå®äŸãããã°ãããå°ããŸãšãŸã£ãåäœã§ã¬ãã¥ãŒãè¡ãå ŽãçšæããŠãããããããã ãããŒãã£ã³ã°ã®éã¯ã¹ã¯ã©ã ã®ã»ã¬ã¢ããŒä»¥å€ã¯æžããããã«ããŠãããããã«ã¯å€±æè«ããã£ãŠããªãã¹ãå
šå¡ã§ãå
±æããå ŽãèšããŠããããã©ãããã ãšãããã·ãã£ãäŒžã³æ©ãã§ãããæ¯ãè¿ããããŠããŸãšãŸã£ãäœæ¥æéããšã³ãžãã¢ã¯å¿
èŠã ãšæã£ãã现åãã®æéã ãšéäžãã§ããªããããŒãã£ã³ã°ãã¬ããšãŸãšããŠãäœæ¥æéããŸãšããŠãšãããã«ããŠã¿ãŠãã¹ãŽã€æ¹åããããããªãããŒãã£ã³ã°ãåºããããã«ããã æ®æ®µã®éçºã®é²ãæ¹ãéæããµãããããæ¹åããŠãã£ãŠããŸãã @odanado : äŒè°ã1æ¥ã«éäžãããããšããã®ã¯ãã¡ã®ããŒã ãåãçµãã§ãããã©ã¯ãã£ã¹ã§ãããå®éãã¡ã³ããŒããã奜è©ã®å£°ãã @maeken : odanããã®ããŒã ãšã¹ããªã³ãã®é·ããéããŸãããã @odanado : ããŒãã§ããã1é±éã ã£ãã¹ããªã³ããã2é±éã®ã¹ããªã³ãã«å€æŽãããããã¯ããŒãã£ã³ã°ãæžããããããŸãšãããããæå³ããã£ããã¹ããªã³ãã®ã»ã¬ã¢ããŒããæ¯é±ã«ãããšå®è³ªéçºããæ¥ã4æ¥ãšãªãã®ã§ã @kfly8 : odanã®ããŒã ã¯ã1é±éã ãšåãŸãåããªã倧ãããã±ããããããã¡ã ã£ããããå°åãã«ãããã©ã³ããã£ãããã©ã䟡å€ã®åãå£ãé£ããã£ããçµå±ã2é±éã§èšç»ãç«ãŠã圢ã«ããŠãããŸããã£ãŠãããã @maeken : ããŒã ã«ãã£ãŠæ§è³ªãç°ãªããããããã«ãã£ãŠéçºã®é²ãæ¹ãå€ããè¯ãäŸã§ããã @tsukumaru : éçºããŒã ãšããŠããŒãã£ã³ã°ããŸãšããã®ã¯è¯ãããã§ã¯ããã€ã€ãéãåãå£ã§ãã²ãšã€ãä»ã®èªåã®ãããžã¡ã³ãã®åœ¹å²ã ãšã1on1ãããããšãããããã©ãããã1æ¥ã«ãŸãšãããšãåãã€ããã¡ããïŒç¬ïŒ èªåã®å Žåã¯ãæèçã«ãããããããŠããã @kfly8 : ãããžã¡ã³ãããããã ïŒç¬ïŒ ã¯ãŒã¯ãã°ãæžãã®ã¯æ¥œãã @kfly8 : ãã«ãªã¢ãŒãã«ãªã£ãŠå·¥å€«ããŠããããšã¯ããïŒã³ãã¥ãã±ãŒã·ã§ã³ãªã©ãæ°ãã«åºãŠãã課é¡ãªã©ããã°ãäŸãã°ãæ°ãã人ãå
¥ã£ãŠããæã«å·¥å€«ããŠããããšãšããã³ãã¥ãã±ãŒã·ã§ã³ããããã«äœãããŠããããšãšãã @maeken : ã³ãã¥ãã±ãŒã·ã§ã³ã¯ãæå€ãšãããŸã§å€ãã£ãŠãªãã§ããã ããŒãã£ã³ã°ã¯å
çšã®éãæéããŸãšããããåéã§éè«ãããããããšã¯ãSlackã§ã®ãã£ããã³ãã¥ãã±ãŒã·ã§ã³ãšããªãã©ã€ã³ã®æãšããŸãå€ãã£ãŠããªãã @maeken : ãã±ããã®æŽçãªã©ãç©çãã¯ã€ãããŒãã䜿ããªãã£ãã®ãäžçªå€§ããå€åãã¿ããªã§å³ãæžããŠè°è«ããããä»ç®ãºããºãããŠãµããããããã®ãšããã¥ãããæè¿ã¯ãã¯ã€ãããŒãã®WebãµãŒãã¹ã䜿ã£ãŠããŠããããè¯ãã£ãããµãããããããã±ããå士ã®äŸåé¢ä¿ãããšã¯æäŒã®é£çµ¡äºé
ãªã©ãæ²ç€ºæ¿çãªæãã§äœ¿ã£ãŠãããéã«ãªãã©ã€ã³ã«ãªã£ããšããŠã䜿ããšæããã©ãã§ãèŠããããç¡éã«ã§ãããã¯ã€ãããŒãã§èšé²ãæ®ãã @kfly8 : ã³ãã¥ãã±ãŒã·ã§ã³ã«å€ãããªãã®ã¯è峿·±ãããæå€ã @odanado : maekenããã®ããŒã ã¯ããªã¢ãŒãåãšã¡ã³ããŒãå€ãã£ãŠããªãããšããã®ã¯å€§ããããïŒãªã¢ãŒãåã®é¢ä¿å€ãããç¶æ
ã§ããªã¢ãŒãããã£ãŠããã®ã§ããããªã«å°ããªãã£ãã®ããªããšæã£ããããŒã ãšããŠæçããŠããå°è±¡ã @maeken : ãããã«ã2幎éãããåãã¡ã³ããŒã§ãããŒã ãé¢ä¿å€ãã§ããŠããç¶æ
ãªã®ã§ã以åãæ°è»œã«éè«ã§ããå ŽæãçšæããŠã¿ãããšãã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãå°å
¥ããŠã¿ãããçµå±ã ããå©çšããªãã£ããæ§åãèŠãŠãããšãã³ãã¥ãã±ãŒã·ã§ã³ãæªãæããããªãããã ãããããã¯ããã§ããã®ããªããšã @kfly8 : ããŒã ã¡ã³ããŒãå€ãã£ãŠã課é¡ããã©ã€ããããšãããã°ãã ããæããŠã @maeken : tsukumaruããã®ããŒã ã ãšãæ¯æ¥å®æçã«éè«ããäºå®ãèšå®ããŠããŸãããïŒã©ããªæãïŒ @tsukumaru : ããã¯ã2,3åã§è©±ãããããããããã£ãšæ©èœããŠããã°ãªã¢ãŒãã¯ãŒã¯ã®å·¥å€«ãšããŠè¯ããããããªããã©ããŸã 工倫ãå¿
èŠããã èªåã®ããŒã ã§ãã£ãŠããã®ã¯ããªã³ããŒãã£ã³ã°çšã®ããã¥ã¡ã³ãæŽåãè¡ã£ããé·å¹Žã®ããã¥ã¡ã³ããæºãŸã£ãŠããŠãã©ãããèªãã ãè¯ãã®ããã©ããŸã§èªãã ãè¯ãã®ãå°ã£ãŠãããããããæ°åã¯"ãŸãããã ãèªãã°è¯ã"ãšããæ¡å
ããããããããããããã¯å¥œè©ã§ããã @kfly8 : ã€ã€ããããã¥ã¡ã³ããå€ããšããããã©ãããã¥ã¡ã³ããæžã人ãå€ãïŒ @tsukumaru : ã¿ããªæžããŠãŸãããŒã 仿§ã ãã§ãªããã¯ãŒã¯ãã°ãšãã @kfly8 : ããžã·ã§ã³ããŒã¯ã«ãªã£ãŠããŸãããã©ãããã¥ã¡ã³ããããæžãã®ã¯ãã¢ããã¡ã¯ã®ç¹åŸŽçãªè¯ãæåãšæã£ãŠããã @maeken : ãããã«ãå
¥ç€ŸããŠããããã¥ã¡ã³ãããããªãšæã£ããå
èŒ©ãæžããŠããããèªåã§ãæžãããšæã£ãèšæ¶ããã @odanado : ã¯ãŒã¯ãã°ãšããæŠå¿µã¯ãå
¥ç€ŸããŠåããŠç¥ã£ãããè¯ããªãšæã£ããå人éçºã§ãæžãããã«ãªã£ãããZennãã¹ã¯ã©ããæ©èœãåºããŠãããã«ã¯ãŒã¯ãã°æžããŠãããã©ãããŠæžããèšèªåãé£ãããã©ãã¡ã¢ãæ®ãã®ã¯æ¥œããã å¯èŠåããã®ã¯ãçµç¹éçºã«ãããŠããåœç¶ãµãŒãã¹éçºããšã³ãžãã¢ãªã³ã°ã§ãå€§äº @kfly8 : æè¿ãçŽé¢ãã課é¡ãããã°ãæããŠã»ããã @maeken : ã¹ããŒã·ã§ã³NFTã«é¢é£ãããµãŒãã¹ãæè¿äœã£ãŠããŠãããã®ã¹ã¯ã©ã ãã¹ã¿ãŒãšããŠéçºããŠãããæåã®æ°é±éãæãããã«éçºã䌞ã³ãªãã£ããããã§ãæ°é±éåã¹ããªã³ããåããå
容èžãŸãã倧ããªãŸãšãŸãã®ãµãããããè¡ã£ããäœãéçºã®ããã«ããã¯ã¯ãªããïŒã£ãŠèŠçŽããããã®æã«ããã£ã話ãããããŒãã£ã³ã°ãå€ããŠãéçºã«éäžãããã課é¡ãåºãŠããã @maeken : ããäžã€ããèŠä»¶æ±ºããäœããããã°è¯ããããããªã課é¡ãåºãŠãããã¹ããªã³ãã§ããããšã決ããããã«ã¯ãäœãããã®ã決ãŸã£ãŠããªãã¡ããããªããŠãããã«ãã®åã«ãèŠä»¶ã決ããŠããå¿
èŠããããã§ãåœæãéçºéäžã§å¥ã®èŠä»¶ãçºèŠããããå€ãã£ãããéã«åé€ã«ãªã£ããã§ããããã£ãããšãåå ã§éçºã®ã¹ããŒãã䌞ã³ãªãããšãããã£ãã ããããã©ãã«ãããããã«ãããã€ãå
ã®ã¹ããªã³ããŸã§ããã€äœãããªããšãããªãã®ããäŸåé¢ä¿ã¯ã©ããªã£ãŠããã®ãå¯èŠåãããã¹ã¯ã©ã ã§ãããšããã¯ãã°ã®éææ§ãããããããšãããå¯èŠåããããšã§ãèªããšããã®ã¿ã€ãã³ã°ã§ãããããããããã®åã«ããã®èŠä»¶ã決ããŠãããããšãã£ãäŒè©±ããããããªã£ããããã¯ããã广ããã£ãã ãåé¡ãããŒã ã§èŠããããã«ããããšã§ãåãããããªããããã¯ãéçºã®ããã©ãŒãã³ã¹ã§ãã£ãããéçºã®çå°ã®èŠèŸŒã¿ã§ãã£ãããåãããªã£ãŠæã£ãŠãã @kfly8 : æ®éã«ãã話ãä»åºŠã詳ããããã°ã«æžããŠã»ããã @tsukumaru : å¯èŠåãã«é¢é£ããŠãæè¿ãã£ãŠãããDX Criteriaã®è©±ãããã èªåã®ããŒã ã¯ãããªã倧æåž¯ããšã³ãžãã¢ã¯ãããããããããçžå¿ã«ããããšãå€ãããèŠä»¶ãèãããã£ã¬ã¯ã¿ãŒã®äœè£ããªãç¶æ³ã ãããæ¹åããããã«äœãã§ããããšããã£ãšãµãããã£ãŠã¿ãŠãããŒã ã®èª²é¡ç¹ãæŽãåºããæ¹åã§ãããšãããå¯èŠåããããšããŠãDX Criteriaã䜿ã£ãŠã¿ãããã£ãŠã¿ãæããçŽæçã«ããããŸããã ãããªãããšæããŠãããšããããã¡ãããšå®éã«èµ€ãåé¡ããããšå¯èŠåããããããããæ¹åã®è¡åãåãå¿
èŠãããããã©ãäžæŠå¯èŠåã£ãŠæã¯ã§ãããªãšã @kfly8 : ã€ã€ãã ãããªããšãèšããšãè¯ããªããããããªãããã©ããã§ã«çŽæçã«ãŸããæã¯ãã£ãŠãå¯èŠåãããšãåºæ¥ããšããããé²ããããšæãã人ããããšæããã ããªãããããé åãããã®ãïŒ @tsukumaru : çŽæçã«æããŠãã課é¡ã ããã課é¡ãªã®ãããããªãã£ããå
šäœåãææ¡ãããã£ããå
šäœåãææ¡ããäžã§ãããã€ã課é¡ãããããã©ãä»ã¯ãã®èª²é¡ã«åãçµãã§ããããšãå
šäœåãå
±æããªãããæ¹åããŠãããããšæã£ããå±æè§£ã«ãªããªãããã«ããããšæã£ãã @kfly8 : ã€ã€ããããå°ãèãããŠãããããã®ã ããã©ã倧æåž¯ã®ããŒã ã ããããŒã ã®äººãåããã®ã«èŠåŽã¯ããªãã£ãïŒ @tsukumaru : èšæž¬ãããã®ã¯ãããŒã ã«çžè«ããŠãåçºã¯ãªãã£ããããããããããã®è¯ããšæããã§ãã£ãŠã¿ãŸãããïŒããšãã£ãåå¿ã å€åãåé¡ã«ãªãã®ã¯ãã®å
ããããã課é¡ãããã®ã§ãã£ãŠãããŸãããããšèšã£ããšãã«ã¿ããªãåãçµãã§ããããããããã©ãé²ããŠããããã¯åé¡ã @kfly8 : ä»åŸã«æåŸ
ã ããå¿æŽãããã ããã¯ãªãŒããšããŠå¥ã®åãå£ã§ãodanããæè¿èª²é¡ã«ãªã£ãŠããããšããã°ã @odanado : æè¿ããŒã å
ã§Web APIã®ããã©ãŒãã³ã¹åæã§ãã©ããã£ãŠããã«ããã¯ãæ¢ãããã課é¡ã«ãªã£ããããããããã©ãŒãã³ã¹ã®æèã ãšå Žåã¯ãæšæž¬ãããªãèšæž¬ããããšè¯ãèšãããããã©ãããããã£ãã®å¯èŠåã®è©±ã«ç¹ãããŸãããå¯èŠåããã®ã¯ãçµç¹éçºã«ãããŠã倧äºã ãšæãããåœç¶ãµãŒãã¹éçºããšã³ãžãã¢ãªã³ã°ã§ã倧äºã @odanado : å
ã
ããçšåºŠèšæž¬ããããç¶æ
ã«ã¯ãã£ãããšããã®ããISUCONã®ããããISUCONã§ã®åŠã³ã掻ãããŠããããã¯ãã«äºåã«APIåŒã³åºãããã¬ãŒã¹ã§ãããããªãã®ãããã¯ãšã³ããããã³ããšã³ãã«ä»èŸŒãã§ããããã®ãããã§ãããã«ããã¯ã®å¯èŠåãšããé¢ã§åœ¹ã«ç«ã£ãŠãäœæäœåã«APIã®ãªã¯ãšã¹ããå§ãŸããäœæäœåã«çµãã£ããããšããã®ãå
šéšããŒã¿ã§åããŠããŠãããã«ãã®äžã§äœæäœåã«ã¯ãšãªãå§ãŸã£ãŠãããã ãšããäœæäœåããå€éšAPIãåŒã³åºããŠããããªã©ããçšåºŠèšæž¬ã§ããç¶æ
ã«ãã£ãŠããããå©ãã£ããšããã®ã¯ãã£ãã ããã©ãå
šãŠãèšæž¬ã§ããããã§ã¯ãªããŠãè¶³ããªããªãã¶ãŒãããªãã£ã®æ¹åãããããªãã¶ãŒãããªãã£ã®åäžã¯ããããããã£ãŠããããšæããŠããŸãã @kfly8 : odanãã€ã€ãã å¯èŠåã¯ç®çã§ã¯ãªã @kfly8 : 3人ãšãå¯èŠåãããŠãããŒã ãåãããã·ã¹ãã ãããããŠãã話ã ã£ããã æ¢ããŠèãããã©ãå¯èŠåã«èœãšã穎ããããšæããã ãäŸãã°ã人ã«ãã£ãŠè§£éãéããæ°åã1人æ©ãããŠããŸã£ãããæ°å€ã®äœãã«æ³šç®ãéãŸãæ¬è³ªçãªè©±ãããéžãããã å¯èŠåãããšãã«æ°ãã€ããŠããããšã¯ããïŒ @maeken : èœãšã穎ã¯ãèšããããããšãèšãããšãæ°å€èªäœãç®çã«ãªã£ãŠããŸãã®ã¯è¯ããªããªãšãäŸãã°ãããã·ãã£ã®è©±ã§ããã°ã1人1人ã®ããã·ãã£ã¯èšã£ãŠããªããããŒã ã®ããã·ãã£ã ãèšã£ãŠãããå人å人ã®ããã·ãã£ãèšãããšã§ããã®äººãè©äŸ¡ããŠããããã«ã¿ããããæ¯èŒã«ãªã£ãŠããŸããããã«ãã£ãŠãäœã人ã®ã·ã§ãã¯ã«ç¹ããã ããã·ãã£ãèšã£ãŠããã®ã¯äºæž¬ããããããä»ãããããã®ããŒã¹ã§ã¢ãŠãããããåºããŠãããããæªæ¥ã®ããã§ã¯ãããããã®ããšãåºæ¥ãŠããããšäºæ³ãç«ãŠããããææ®µãšç®çãé転ããªãããã«ãèšæž¬ããéã¯ãç®çãæ·»ããŠäŒããããã«ããŠããã äžå : 倧äºå€§äºã @odanado : ããŒãããªãã ããã èªåã¯å¯Ÿè±¡ãã·ã¹ãã ã ãããããããæžå¿µã¯ããŸãèµ·ããªããªãŒãšã @maeken : APIã®ããã©ãŒãã³ã¹ã§ãæ°å€ã®ãã°ãã®åºæºã¯ã©ããã£ãŠäœã£ãïŒ @odanado : çžå¯Ÿçã«èŠããªããåãã¢ããªã±ãŒã·ã§ã³ã®APIã®å¹³åã忣ãåŒã³åºãããåæ°ãªã©ãã¿ãŠãAPIéã®ã°ã©ããŒã·ã§ã³ãèŠãã ãããããããã©ãŒãã³ã¹ã絶察çã«æªããã©ããã¯ããã£ãŒãªã³ã°ããªããšãå®éã«ãŠãŒã¶ãŒã«ãªã£ãŠãããŠã¹ãåãããããã¹ããã§ãã¿ã³ã¿ãããããŠã¿ããããŠããŸãéã§ããã©ããã£ããæãæãããããšãããã£ãŒãªã³ã°ã«ä»ã¯é Œã£ãŠããŸããã @maeken : å®éã«ããã£ãŠã¿ãŠããã®ãã£ãŒãªã³ã°ã @odanado : ã§ãããŒãããã¯ä»åŸããããã¯ããããŒãžã£ãŒãšè©±ããªããšãããªããšããã§ãäŸãã°ããã®APIã¯äœmsæªæºã«ããããšãããã®ãããã¯ãã®äŸ¡å€æäŸãªãã ãšã決ããŠããããããããã¯ãã«ãã£ãŠãäŸãã°ã100msããæ©ããšåããé
ããšåããã¯ç°ãªãã50ms or dieãšããå Žé¢å Žé¢ãšããããã©ããªãµãŒãã¹ãã£ãŠãããã«å¯ã£ãŠããŸããã @maeken : å€ãã£ãŠãããããããäŸãã°ã100msããé
ããšæ±ºãã€ãããããããèœãšã穎ãªã®ããªãšæã£ãã @odanado : ã§ãããmaekenãããèšã£ãŠãããç®çã®è©±ã«ç¹ããæã£ãŠããŠããããã¯ãã®ãŽãŒã«ãäœéšããŠãããããããšããã£ãŠããã®ããã«ã©ããŸã§ã蚱容ã©ã€ã³ãªã®ã決ãã話ãªã®ã§ã @kfly8 : å¯èŠåããã ãã§ãªããç®çå¿åã§ãããããšã 楜ããä»äºãããããã®ããã«æ§ãç ã @kfly8 : å¯èŠåã«ãã©ãŒã«ã¹ãããŠããããã©ãä»ã«éçºã§å€§åã«ããŠãã䟡å€èгãããã°èãããã @maeken : å
šãŠã²ã£ããããŠãéçºããšããããä»äºã¯æ¥œããã§ããæ¹ãè¯ããšæã£ãŠããŠãåœå€§äºã«ã楜ããéçºããããã«ãé 匵ããä»çµã¿ã¥ãããããŒã äœããé 匵ããäœèšãªããšããããªããçµå±ã楜ãããããããªãã§ãããã©ã¯ãããšããã®ã¯ããµãããšããæå³ãããªãã倧åãªããšã«éäžãããã®ã§ããã®ããã«é 匵ãã @tsukumaru : èªåãæ¥œããããšããã®ã¯ããããã®ããã«ãæ§ãç ãæéã¯å€§äºã«ããããšæã£ãŠãããæšããã®ãžã¬ã³ãã®è©±ã第äžé åã«éäžããã ãã§ãªãããã¡ãã倧äºãªãã§ããã©ãããã ãã§ãªãã第äºé åãããŒã ã®æ¹åãæ¯ãè¿ããªã©ãããããã£ãŠãããªããšããŒã ãè¯ããªã£ãŠãããªããããŒã ããããªã£ãŠãããªããšãåäººãæ¥œãããªã£ãŠãããªããšæãã®ã§ããã®æéã¯å€§äºã«ãããã第äºé åããããããããŒã ãåããã®ãèªåã®ãããžã¡ã³ãã®ä»äºã®äžéšããªãšæã£ãŠããã çæ³ãç¥ããªããšåŠ¥åããŠãããšã«æ°ã¥ããªã @kfly8 : odanã¯å
šç¶éãèŠç¹ã§è©±ããŠãããã¯ãã @odanado : ããæã£ãŠããŸããïŒç¬ïŒ ãœãããŠã§ã¢ãšã³ãžãã¢ã®ãã€ã³ããšããŠãçæ³ãè¿œãæ±ãããããã¯å人çã«å€§äºã«ããŠããææ³ã§ãçæ³ã¯èª°ã«ãèŠã€ãã£ãŠããªããšããŠãã絶察ã«çæ³ã¯ãããšæã£ãŠããŠãèšèšãå®è£
ãããã®ã¯ãããã«åããããã®éã ãšæã£ãŠãããæ¥åãšããã®ã¯ããããèŠã€ããäœæ¥ã ãšä¿¡ããŠãããšãããããã @odanado : åºæ¬çã«100ïŒ
劥åããªãããã«ä»äºãããŠããããšãå€ããäŸãã°ãå€éšã©ã€ãã©ãªã䜿ãå Žé¢ã§ããšããããç®çã¯éæã§ããŠãããããã©ã€ãã©ãªã®æåãããããªããã©okãšããã®ã§ã¯ãªããããã¥ã¡ã³ããèªã¿çè§£ãããäžã§ãã©ã€ãã©ãªãã©ããã£ãŠåäœããã®ãããããè§£éããäžã§ã³ãŒããæžããããšããããããéšåã¯åŒ·ãæã£ãŠããã @odanado : ãã ããã¡ãããããžãã¹çãªèŠæ±ã ã£ããã§ãã·ã¹ãã çãªåŠ¥åãããããšããããããã©ãçæ³ãç¥ããªããšåŠ¥åããŠãããšã«æ°ã¥ããªããããã¯æé·ãšãããããã¯ãã®å質åäžã«ã¯ç¹ãããªããã®ã§ãåžžã«çæ³ãæã¡ãããã远æ±ã§ããã°è¿œæ±ã§ãããããã®æ°æã¡ã§ããã @kfly8 : ãµãã£ãšãã質åã«ãªãããã©ãã·ã¹ãã ã®çæ³ã£ãŠãªãã ãããïŒãã¡ãããããç®ç次第ã ãã©ãã·ã¹ãã ã¯ã©ããªç¹åŸŽãæºãããŠããšè¯ãã®ããç¹ã«æ°ã«ããŠãããšãããããã°èãããããã£ãåºãŠãã話ãªãããªãã¶ãŒãããªãã£ãšãã @odanado : ããŒé£ããã§ãããŒã çæ³ãããã¬ãŒã ã¯ãŒã¯ã«éã蟌ããããšããã®ã¯ïŒã€ãããããä»çµã¿åããããšã«ãã£ãŠãåžžã«äžå
šã®ç¶æ
ã«ããããšããããããŒã ã®ãã¬ãŒã ã¯ãŒã¯ãèŠçŽã«æ²¿ã£ãŠéçºããã°ããã¹ããã©ã¯ãã£ã¹ã«ä¹ã£ãç¶æ
ã§éçºã§ããããã«ãªã£ãŠãããšè¯ããªãšæããäŸãã°ããã®é¢æ°ã§ãWeb APIãåŒã³åºãã°ãããã¯ãšã³ãã«ãã°ãæ®ã芳枬æ§ãæ
ä¿ã§ãããšãã @kfly8 : ãã¬ãŒã ã¯ãŒã¯ã«ä¹ãã°ããã¹ããã©ã¯ãã£ã¹ã«ä¹ããããšããã®ã¯çºæ³ãšããŠã¯ãEasyïŒäžèº«ãããã£ãäžã§ã©ã€ãã©ãªã䜿ããæ¹ãè¯ããšãã話ãšãè¥å¹²çžåããïŒ @odanado : Easyãšãããããéçºè
äœéšãïŒåç®ã¯äžèº«ãèŠãŠçè§£ããŠãïŒåç®ä»¥éã¯Easyã®æ©æµãé ãããŠãéçºè
äœéšãè¯ããªããããã®ã€ã¡ãŒãžã§ãããã èªåãæãã§ããç°å¢ããããªããããå€ããã°ãã @kfly8 : 話ãå€ããããã©ãã©ãããŠã¢ããã¡ã¯ã«å
¥ç€Ÿããã®ãæããŠãããããªïŒ @maeken : 就掻ãããŠããæãèªåãããããããšãããçšåºŠã§ãããšãããè¯ããªãšããã®ããã«é°å²æ°ãèŠãŠãããäŒç€Ÿã®äººæ°ã§100åãè¶
ããŠãããšåãããªã人ãå¢ããŠãããã颚éããâŠãšãã£ã話ãèããããšããããã®ã§ã100人ãããã®èŠæš¡ã§æ¢ããŠããããããªäžã話ãèããŠãé¢çœããã ãšæã£ãã®ãã¢ããã¡ã¯ã @odanado : ããšããšé§
ã¡ã¢ïŒã®ã©ã€ããŠãŒã¶ãŒã§ããã£ããæãæããŠãããç«¶æããã°ã©ãã³ã°ããã£ãŠããã®ã§ãããã©ãŒãã³ã¹æ¹åãæé©åã«èå³ããã£ããèªåãè§Šã£ãããšãããã²ãŒã ã§ããªããã€ãããã©ãŒãã³ã¹æ¹åã§ãããããããªããšãã§ãããã ãªãšæã£ãã ãã å
¥ç€ŸçŽåŸã«ãããã¯ãã§ãŒã³ããŒã ãç«ã¡äžãããæãæãçŸç¶ãããªã£ãŠãããå
¥ç€ŸããŠããå
šãé§
ã¡ã¢ïŒã«é¢ãã£ãŠããªãã§ããïŒç¬ïŒ @tsukumaru : 瀟é·ã®ã¡ãã»ãŒãžãšäœçœ®ã²ãŒã ã«æ¹ãããŸãããã 瀟é·ã®ã¡ãã»ãŒãžã«ãå®¶æãå®ãåãã»ããããšæžããŠãã£ãããããªããšèšã£ãŠããäŒç€Ÿã£ãŠä»ã«ããªãã£ããä»ã ãšãäŒç€Ÿãæé·ããããã瀟äŒã«éå
ãã£ãŠããã®ãå€ãã£ãããã©ãå®¶æã«æ³šç®ããŠãã瀟é·ã¯ããªãã£ããçãããšæã£ããèªåèªèº«ãå®¶æã倧äºã«ãã€ã€åããããšæã£ãŠããã®ã§è¯ãããã ãªããšã ããšäœçœ®ã²ãŒã ã«é¢ããŠã¯ãããšããšèªåãã²ãŒã ãäœãããããã§ã¯ãªãã£ãããµãŒãã¹ãäœãããã£ããäœçœ®ã²ãŒã ã¯ã人ã®ãã§ããããã£ãŠããå®éã®è¡åã«åœ±é¿ãäžããããã²ãŒã ã ãšæã£ãããããçãããªããè¯ããªãããšæã£ãã @kfly8 : å
¥ç€ŸããŠã¿ãŠãæã£ãŠããããšãšéã£ãããšã¯ãã£ãïŒè¯ãæå³ã§ãæªãæå³ã§ãã æªãã®ã£ããããªãã®ãäžèªç¶ã ããããã¯æ¹åããã°è¯ãããšã @tsukumaru : æªãæ¹ã®ã®ã£ããã¯ãªãã£ããããæå³ã§äºæ³éãã 颿¥ã§ãã¿ããªåŒ·ããããã人ãããšããå°è±¡ãå®éå
¥ã£ãŠã¿ããšã¿ããªåŒ·ããŠããã人ãã¡ãäºæ³éãã ããäºæ³ä»¥äžã«ããããäŒç€Ÿãªãã ãªãšããã£ãã å¯äžé©ããã®ã¯æ°ååæã3人ããããªãã£ãããšïŒç¬ïŒ @kfly8 : äŸå¹Žã¯ããå°ããããããã @maeken : è¯ãã£ãã®ã£ããã¯ãæã£ãããããããŠããããããšãå
¥ç€ŸããŠãæ°åã§é
å±ãããã®ãããããªãæ°èŠéçºã«ãªããšæã£ãŠãªãã£ããé
å±èšãããæ¥ã«é©ããããšãèŠããŠããŸãã æªãã®ã£ããã¯ãçŸå Žãšçµå¶å±€ã§æã£ãããè·é¢ããã£ãã100äººèŠæš¡ã®äŒç€Ÿãªã®ã§ã瀟é·ã§ãã£ããçŽæ¥è©±ãæ©äŒã¯å€ããšæã£ãŠããã @odanado : ãŸãè¯ãã®ã£ããã«ã€ããŠã å°±è·æŽ»åã®æãã¢ããã¡ã¯ãåŸæ¥å¡10åãããã®ãã³ãã£ãŒã§æ©ãã§ãããç 究宀ã®å
çãåšãã®å人ã«çžè«ããŠããŠããåæã¯äžçã®ç¹ããã ãããããããšèšãããŠããŠãããã³ããïŒããšæã£ãŠããããä»ã§ããã©ã€ããŒãã§ã²ãŒã ãããããã®ä»²ãããããæãè¯ãã®ã£ããã æªãã®ã£ããã¯ãã·ãã¢ãšã³ãžãã¢ããã£ã𿬲ãããåœåãã·ãã¢ãšã³ãžãã¢ãããŒã ã«ããããå幎ã§éè·ããŠããŸã£ããããŒã ã¡ã³ããŒã®æ³ãå²ãšè¿ããŠãã³ã£ããããã @kfly8 : 確ãã«ãè¥ã人ãå€ããã ïŒã€ã®æªãã®ã£ããã«é¢ããŠåããŠããããšã¯ããïŒ çŸå Žãšçµå¶å±€ã®ã®ã£ããã«é¢ããŠã¯ã©ãã ããïŒ @maeken : ææ¬¡ã®å
šç€Ÿç· ãäŒã§ã瀟é·ã«è³ªåãããŠåçããŠãããã³ãŒããŒãå§ãŸã£ãããã©ã瀟å¡ã®çµå¶ãšè·é¢ãé ãããšãã瀟å¡ã®å£°ãæŸã£ãŠå§ãŸã£ãããã£ãããšããŠã¯è¯ãåãçµã¿ãçŽæ¥è©±ããå Žãããããªããã§å
šç¶éããçµæèžãŸãå€ããŠãããšããã¯ãããšæãããã©ãã©ãã©ãåãçµãã§ã¿ãã®è¯ããšæãã æ°åã³ããã®ãã®ç¶æ³çã«çŽæ¥äŒã£ãŠé£²ãã®ã¯é£ããããã©ãéã«ãªã¢ãŒãã ããããªã³ã©ã€ã³ã§ãããšéãŸã£ãŠãããšèããããªã©ãè¯ããªãšæã£ãã @kfly8 : ã·ãã¢ãšã³ãžãã¢ãããã£ã𿬲ããä»¶ã«é¢ããŠã¯ãã©ãïŒ @odanado : ãšããããèªåãã·ãã¢ãšã³ãžãã¢ã«ãªã£ãïŒç¬ïŒ @kfly8 : ãã£ããã @odanado : å»å¹Žããããã³ããšã³ãã©ã³ãäŒã宿çã«éå¬ããŠãããããã³ããšã³ãæè¡ã®ãã£ããã¢ããããªãããéè«ããå Žãæè²ãšããããäŒç€Ÿå
šäœã®ã¬ãã«æãåŒãäžããããã®åãçµã¿ãè¡ãªã£ãŠããŸããã ãã£ããã¯ãä»ç€Ÿã§ãããã³ããšã³ãã©ã³ãäŒããã£ãŠããã®ãèããŠãããããããäŒãããããšããããã«åå ãã瀟å¡ãããäŒç€ŸããšãŠãé
åçã«æããããŸãã¯èªåãããäŒç€Ÿã«ããããæåãäœãã®ãè¯ãããªãšæã£ããä»ç€Ÿã®ç䌌ãããªãããã¢ããã¡ã¯ã§ããã£ãŠã¿ãããšæã£ãã èªåãæãã§ããç°å¢ããããªããããå€ããã°ããã äžå : ãšã©ã€ïŒ @odanado : ä»å¹Žã®æ°åãããã³ããšã³ãã©ã³ãäŒã«åå ããŠããããŠããã®ã§ãèã
ãšç¶ããããããªãšã äžè
äžæ§ã®ãã£ãªã¢ @kfly8 : æåŸã«ãä»åŸã©ããããã®ããä»åŸã®ãã£ãªã¢ã«ã€ããŠèãããŠããããããã¢ããã¡ã¯ã«ã©ããªãšã³ãžãã¢ãããã®ãäŒããããã«ãã²ã @maeken : ä»ã®ã¹ã¯ã©ã ãã¹ã¿ãŒã¯ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒã®äžã€ã®èŠçŽ ã ãšæã£ãŠããŠãããã«èå³ããããä»ãã€ã¡ãŒãžãããããŠãæåäœéšã楜ãããæããããŠããããã èªåã ããããªããããŒã å
šå¡ã§æ¥œããã§ããããã«ãããã @tsukumaru : ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒã®è©±ãåºãããã©ãå
ã
èªåãEMã«æ§ããŠã¯ããŠãæè¿ç®¡çè·ã«ãªã£ãããšã§ãããã£ãåãããããããªã£ãããã ããã§çµããã§ã¯ãªããçµéšãç¥èãè¶³ããªãã®ã§ããŸãã¯EMãšããŠææãåºããŠããããããèªåãææãåºãããšã§ãmaekenãšãä»ã®ã¡ã³ããŒã«EMã£ãŠãããïŒãšæã£ãŠããããããããã®çµæäŒç€Ÿã«è¯ã圱é¿ãäžãããããšè¯ããªãšæãã EMãåºãã€ã€ãæçµçã«ã¯ãäŒç€Ÿã®äºæ¥ã®å€åãæ¥œããããããªãå€åã«åŒ·ãäŒç€Ÿãã€ããããšã«è²¢ç®ã§ãããå¬ããã§ããã @odanado : ãã£ãªã¢ãã©ã³ã¯ãæåŒ·ã«ãªãããšã§ã @kfly8 : ããã©ããã§èãããªïŒç¬ïŒ @odanado : ïŒç¬ïŒ çç±ã¯ããè¯ã劥åãããã«ã¯ãçæ³ãç¥ã£ãŠããå¿
èŠããã£ãŠãä»äºã®äžã§ããè¯ã劥åãç¹°ãè¿ããŠãéžæããŠããããšã§ãä»»æã®ãã¯ãããžãŒãããã¯ã«ã€ããŠã®çæ³ãç¥ã£ãŠããç¶æ
ãã€ãŸãæåŒ·ã«ãªãããã @maeken : å
šç¥å
šèœã«ã @odanado : å
šç¥å
šèœã«ã @kfly8 : ã¯ãïŒããã§ã¯ä»åã¯ãã®èŸºã§ãããããšãããããŸããïŒ ã¢ãã€ã«ãã¡ã¯ããªãŒã§ã¯ããšã³ãžãã¢çµç¹ããã匷ãããããã«ãæ¡çšãè¡ã£ãŠããŸãã èå³ãæã£ãŠããã ããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ã宿œããŠããŸãã®ã§ãã²ãæ°è»œã«ãé£çµ¡ãã ããã ã«ãžã¥ã¢ã«é¢è«ã®ãç³ã蟌㿠ããããŠããã¡ãã®æ¡çšãµã€ããã芧ãã ããã recruit.mobilefactory.jp
ã¯ããã« ããã«ã¡ã¯ããããã¯ãã§ãŒã³ããŒã ã®ãšã³ãžãã¢ã @nanamachi ã§ãã tech.mobilefactory.jp ååã®èšäºã§ã¯ããããã®æ¹ã«é²èЧ&ã³ã¡ã³ãããã ãããããšãããããŸããããã®èšäºãã1幎ãã¢ãã€ã«ãã¡ã¯ããªãŒã¯æ¥æ¬ã®ã©ãããã§ãåããããã«ãªããæžç±è³Œå
¥ãè³æ ŒååŸãã»ãããŒåå ãæèŠªäŒã®æ¯æŽå¶åºŠãªã©ãã«ãªã¢ãŒãã«é©å¿ã§ããããå€ãã®å€åãããŠããŸãã ( https://recruit.mobilefactory.jp/work-style/ )ããã®äžã§ç€Ÿå¡ã®ç°å¢ãããŸããŸå€ãã£ãããšã§ãããã ãã®å€åãèšäºã«ããã°ã é²èЧæ°ã皌ãã åŒç€Ÿã®é
åãçºä¿¡ã§ããã«éããªã!ãšããç®è«èŠã§ãåããŠããºã£ãèšäºã«ããããšã³ãžãã¢çµç¹éçºè²¬ä»»è
ã® @kfly8 ããæ¬¡ã®ãããªãã£ãããéãããŠããŸããã kfly8: ã€ã³ã¿ãŒãããèè
*1 ã® @nanamachi ãããããã£ããåšå®
éçºç°å¢ã®èšäºã®ïŒåç®æžããŸãããïŒ nanamachi: ã€ã³ã¿ãŒãããæèè
âŠâŠð€ð€ð€ ãšããããšã§ä»åã¯ãªã¢ãŒãã¯ãŒã¯éå§ãã1幎åããããªãé²åãéããåšå®
ç°å¢ãããããã ãã! ååã®èšäºãåãããŠèªããšããã«æ¥œãããŸã⪠01. ãã¶ã€ã㌠@momoyagi ãã åšå®
ç°å¢ã®æ§åãæããŠãã ãã 瀟çšã®ãã£ã¹ãã¬ã€2æ+Mac Book Pro é»åæéãã¹ã¯ ããŒãã³ãã©ãŒã®ãã§ã¢ ç¡ç·ã®ãããã»ãããã€ã¯ Alexa echo dot ãã©ã³ã¹ããŒã æšããããã€ã³ããæ¹åããããã€ã³ã ãªãã£ã¹ãšåããã®ã§ã¯ãªãã§ãããé»åæéãã¹ã¯ãå°å
¥ããŠç«ã¡ä»äºãå¯èœã«ããŸããããã©ã³ã¹ããŒãã§ãŠã©ãŠã©ããªããä»äºããŠãŸãã ã©ããªå€åããã£ããæããŠãã ãã ä»äºç°å¢ã®æ¹åã®ããã«æžæãèšããããåºãã®å®¶ã«åŒã£è¶ããŸãããé»åæéãã¹ã¯ãå°å
¥ãã¢ãã¿ãŒããã§ã¢ãäžæ°ããŠéçºç°å¢ãã°ã¬ãŒãã¢ããããŠããŸããMTGãªã©ãæ¯æ¥ããã®ã§ãé³åšãç°å¢ããå°ãããåºæ¥ãããããªãããªãŒãšæã£ãŠãŸãã ããªãŒã³ã¡ã³ã BGMã¯DJAlexaã§ãã 02. ãšã³ãžã㢠@nanamachi åšå®
éçºç°å¢ã®æ§åãæããŠãã ãã ãã§ã«åšå®
ã§ä»äºãã§ããç°å¢ã«æºè¶³ããŠããŸã£ãã®ã§ã次ã¯ã¢ãã€ã«ã¢ãã¿ãŒãšã³ã³ãã¯ããªããŒããŒãã§ãããç°å¢ãæŽåããŸããã æšããããã€ã³ããæ¹åããããã€ã³ã ã¢ãã¿ãŒ: EVICIV 13.3ã€ã³ã ã¢ãã€ã«ã¢ãã¿ãŒ æã¡éã³å¯èœãªã¢ãã¿ãŒã§ãããµã€ãºãšããŠã¯A4çšçŽãšã»ãŒåãããããããŒã«ãèãããMacãšã·ãŒã ã¬ã¹ã«äœæ¥ã§ãGOODã§ãã ãŸããUSB Type-Cã±ãŒãã«1æ¬ã§çµŠé»ãšæ ååºåã®äž¡æ¹ãã§ããã®ã§ã±ãŒãã«ããã¡ãã€ããªãå©ç¹ããããŸãã ããŒããŒã: VORTEX Core 47ã㌠ã¡ã«ãã«ã«ããŒããŒã ãã³ããŒã¬ã¹ã®ããŒããŒãããæŽã«FunctionããŒãšæ°åããŒãªã©ãé€ããã40%ããŒããŒããšåŒã°ãããžã£ã³ã«ã®ãããµã€ãºããŒããŒãã§ãã ã«ã¹ã¿ãã€ãºæ§ãéåžžã«é«ããèšå®æ¬¡ç¬¬ã§ã¯ãã«ãµã€ãºããŒããŒã以äžã®äœ¿ãåæã«ããããšãå¯èœã§ãã èªåã¯ãªãã¹ããã«ãµã€ãºããŒããŒãã«è¿ãæäœæãä¿ã€ãããäžèšã®é
眮ã«ããŠããŸãã éåã§æžãããããŒã¯å·ŠèŠªæã«å²ãåœãŠãããFnããŒãšåæã«æŒããšå
¥åãããããŒã§ãã æšæºã§ã¯å³Spaceã®äžã€å³ã®ã¿ãªã®ã§ãããFnããŒãå€çšããé
åã«ããããæŒããããäœçœ®ã«ç§»åããŸããã ãã®ä»ãã ããã®ç¹ã¯ãããªæãã ãã«ãµã€ãºããŒããŒãã®æäžæ®µããã®ãŸãŸäžã€äžã«äžããäœçœ®ã«é
眮 ã³ãŒãã£ã³ã°ã§ãæ¥æ¬èªå
¥åã§ããã䜿ããã€ãã³ãåææŒãç¡ãã§æŒããé
眮 ããŒã ããžã·ã§ã³ã§ç¢å°ã㌠*2 ã«ã¢ã¯ã»ã¹ã§ãã ç¹ã«æ°åã»èšå·ã»ç¢å°ãªã©ã®ããŒãçãã¹ãããŒã¯ã§æãŠãç¹ã䟿å©ã§ãæ
£ãããæ»ããªããšããæèŠãçŽåŸã§ãã ãŸããèšå®ãå€ããããšã«ãã£ãŠããŒãã£ããã«å°åãããŠããããŒãšç°ãªãé
眮ã«ãªã£ãããããŒãã£ãããæ¹é ããŸããã ç¡å°ã®ããŒãã£ããã«ãã©ã¢ãã«ãªã©ã«çšããè£
食ã·ãŒã« *3 ãã¡ãŸã¡ãŸè²Œã£ãŠããã°ããªãªãžãã«ããŒãã£ããã®å®æã§ãã ã¢ããã°ãªã¢ãã¥ãããä¹
ãã¶ãã ã£ãããšãããªããªã楜ããã£ãã§ãã æŽåããŠã¿ãŠ å€ã«åºãæ©äŒã¯å°ãªãã®ã§ããèªå®
ã®äžã§å Žæãå€ããŠä»äºããã ãã§ãæ°å転æã«ãªãã®ã¯è¯ãçºèŠã§ãããå±éã«æéãããããªãã®ã§ããããã§ãã 03. äºæ¥éšé· Sãã åšå®
éçºç°å¢ã®æ§åãæããŠãã ãã ãã£ã¹ãã¬ã€: EIZOã®4Kãã£ã¹ãã¬ã€ ããŒããŒã: HHKB HYBRID TYPE-S ç¡å»å° æº: FlexiSpotã®é»ååŒæéãã¹ã¯ã®èã«ã€ã±ã¢ã®150x75ã®å€©æ¿ æ€
å: ã¢ãŒãã³ãã§ã¢ ãªãŒãã£ãªã€ã³ã¿ãŒãã§ã€ã¹: UNIVERSAL AUDIOã®APOLLO TWIN X QUAD ã¹ããŒã«ãŒ: GENELECã®8320 GLM Studio ãŠã§ãã«ã¡ã©: ããžã¯ãŒã«ã®C922n ãã€ã¯: ãªãŒãã£ãªãã¯ãã«ã®AT4040 ç
§æ: Profoto C1 Plusãè€æ°å° æšããããã€ã³ããæ¹åããããã€ã³ã ååèšäºããã®é²åãšããŠã¯ãã¹ã¿ã³ãã£ã³ã°ãã¹ã¯å°å
¥ãšããããªäŒè°æã®é³å£°å質ã®åäžã倧ããªãšããã§ãã ãªã¢ãŒãã¯ãŒã¯ãå§ãŸã£ãåœåã¯ãæ åã®æ¹ã«åãå
¥ããŠããŠããã©ãŒã¬ã¹ã«ã¡ã©ã䜿çšããããBlackmagic Design ATEM Miniãå°å
¥ãããããŸããããçµå±ã倧äºãªã®ã¯æ åããé³å£°ã ãšããçµè«ã«è³ãããã€ã¯ããªãŒãã£ãªã€ã³ã¿ãŒãã§ãŒã¹ãªã©è©Šè¡é¯èª€ãéããŸããã å»å¹Žã®å€é ã«ãªãŒãã£ãªãã¯ãã«ã®AT4040ãšUNIVERSAL AUDIOã®APOLLO TWIN X QUADã®çµã¿åããã«ããŠããã¯éåžžã«æºè¶³ããŠããŸãã APOLLO TWIN Xã§ã¯ãNeve 1084ãTeletronix LA-2AãPULTEC EQP-1Aãšãã£ããã©ã°ã€ã³ããªã¢ã«ã¿ã€ã ã«ãããŠããŠããããªäŒè°ã®çžæã«èããããé³å£°ãšãªããã調æŽãè¡ã£ãŠããŸã *4 ã èªåã§å£ã«åžé³æãåãä»ããŸããã æ åã«ã€ããŠã¯ãããžã¯ãŒã«ã®C922nã§ãããªäŒè°ã«ã¯å
åãªã¯ãªãªãã£ãšå€æããŠãæºã®äžããªãã¹ãåºãããããã«æ åé¢é£ã®æ©æã¯æ€å»ããŸããããElgato MULTI MOUNTãšããã¹ã¿ã³ãã䜿ã£ãŠãã«ã¡ã©ãç
§æãªã©ã¯å¿
èŠã«å¿ããŠãã€ã§ãåãä»ããã§ããããã«ããŠããŸãã ã¹ã¿ã³ãã£ã³ã°ãã¹ã¯ã¯æ°å転æã§æã
å©çšããŸãããŸããäŒç€ŸããããŒãã³ãã©ãŒã®ã»ã€ã«ãã§ã¢ãš32ã€ã³ãã¢ãã¿ãŒãéã£ãŠããã£ãã®ã§ããªãã³ã°ã®é
ã«ãäœæ¥ã¹ããŒã¹ãäœããŸããã MacBook ProãšHHKBã ãæã£ãŠããã°èªå®€ãšã»ãŒåãç°å¢ã§äœæ¥ã§ããããã«ãããŠã¹ããŠã§ãã«ã¡ã©ã®æ©çš®ãæºã®å€©æ¿ã®è²ãªã©ã¯åããã®ã§æããŠããŸãã 04. ãšã³ãžã㢠@the96 ãã åšå®
ç°å¢ã®æ§åãæããŠãã ãã ã¢ãã¯ãŒã¯ã掻çšããŠå®å®¶ããã®åæŠã§ã *5 ã ããããç°èãªã®ã§ãäŒã¿ã®æ¥ã«ã¯5kmãããæ£æ©ããŠç¥ç€Ÿã«è¡ã£ããããŠããŸãã å·Šãã£ã¹ãã¬ã€: LG ULTRAGEAR 27GN800-B (27ã€ã³ãWQHD) å³ãã£ã¹ãã¬ã€: IO-DATA LCD-MQ321XD (32ã€ã³ãWQHD) ãã£ã¹ãã¬ã€ã¢ãŒã : ãšã«ãŽããã³ LXãã¥ã¢ã« ãã¹ã¯ ããŠã³ã ã¢ãŒã ã¹ã¿ããã³ã° MBPã¹ã¿ã³ã: Twelve South BookArc for MacBook ããŒããŒã: Mistel Barocco MD770 ããŒããŒãã®éã«ãããã®: Anker PowerWave 10 Stand (ã¯ã€ã€ã¬ã¹å
é»åš), ã¿ãã¿ TT-580 WH (質枩床èš) æº: å¹
145cm 奥è¡ã60cmã®Låãã¹ã¯ æ€
å: äžå€ã®ããã³ãã§ã¢ ãªãŒãã£ãªã€ã³ã¿ãŒãã§ãŒã¹: UR12 + MG10XU ã¹ããŒã«ãŒ: JBL 104-BT-Y3 ãã€ã¯: sE Electronics X1 æšããããã€ã³ããæ¹åããããã€ã³ã ãããã: åå²ããŒããŒã ããŒããŒããå·Šå³ã«åé¢ããŠããã®ã§ãè©ãéããŠèªç¶ãªå§¿å¢ã§ã¿ã€ãã³ã°ããããšãå¯èœã§ãã æ®æ®µã¯èãããã«èº«ãé ããŠæ¥œãªå§¿å¢ã§ä»äºããŠããŸãã ããšãäœã®æ£é¢ã空ãã®ã§ãè³æã眮ãããæèšã眮ãããã¯ã€ã€ã¬ã¹å
é»åšã眮ãããã§ããŠäŸ¿å©ã§ãïŒ ãæ°ã«å
¥ã: ã¹ããŒã«ãŒãšã€ã€ãã³ã®åææ¥ç¶ ã¹ããŒã«ãŒãšã€ã€ãã³ããåãé³ãæµããŠããŠãã¹ããŒã«ãŒã®é³éã€ãŸã¿ãæäœããã ãã§MTGã«å¯Ÿå¿ã§ããã®ããæ°ã«å
¥ãã§ãïŒ MG10XUã¯Winæ©ãšMBPã§ãã€ã¯ãã¹ããŒã«ãŒãå
±æããããã«äœ¿ã£ãŠããŸãã ããªãŒã³ã¡ã³ã æšãã«å²ãŸããŠä»äºããã®ãã®ããã§ã 05. ãšã³ãžã㢠ãã£ã²ãããã åšå®
ç°å¢ã®æ§åãæããŠãã ãã éçºè
èªèº«ã®çèã®ã¹ã±ãŒã«ã¢ãããäœã®è»œéåãè¡ã£ã *6 ã Before After éç«ã¡ããªããèããŠããæ§å Before é©ç°ã®-8.2kg! æšããããã€ã³ããæ¹åããããã€ã³ã åšå®
éçºç°å¢ã§æšããããã€ã³ããšããŠã¯å§åžœçãšäžè§çã§ããæ¥ã
ã®èªéãã¬ãŒãã³ã°ã«ãã£ãŠãå§åžœçãäžè§çãéãäžããé·æéãã¹ã¯ã¯ãŒã¯ãããŠãè©ããç¥ããã§ãã ãŸããäžè§çãäœå¹¹ãéããã°ã³ãŒãã£ã³ã°ã®ãšãã®å®è£
ã§æ©ãã ãšãã¯éç«ã¡ããªããèããããšãå¯èœã§ã *7 ã åšå®
éçºç°å¢ã§æ¹åããããã€ã³ããšããŠã¯è
žè
°çã§ãããã¹ã¯ã¯ãŒã¯ã®ãšãã®ç æ°èŠãŸãã«Vã·ãããéç«ã¡ããã£ãŠãã®ã§ãããè
žè
°çã匱ãã®ã§å®å®ããªããŠå°ã£ãŠããŸãã 06. ãšã³ãžãã¢çµç¹éçº @kfly8 ãã åšå®
ç°å¢ã®æ§åãæããŠãã ãã 200cmã®æºãDIYããŠäœ¿ã£ãŠããŸãã 倫婊ã§äžŠãã§äœæ¥ããã ãã§ãªããåäŸããçµµæãããããããŠæ°ã«å
¥ã£ãŠããŸãã åäŸã¯æšªäžŠã³ã«ãªã£ãããåããã«åº§ã£ãããšå¥œããªãšããã«åº§ããŸãã 1幎ãçµã¡ã次ã®ç¹ãå€ããŸããã è
°ãçãã£ãã®ã§ãã»ã€ã«ãã§ã¢ã«å€ããããã¶ã€ã³ãçæŽ»ç©ºéã«ãã£ãŠãéåæãªããæé«ãäžèã¯äŒç€Ÿããè²æž¡ããŠããã£ãã æºã®è§ãçãã£ãã®ã§ãåã£ããåšã楜ãããã«ã€ã¹ãªãããããŠããã ãã£ã¹ãã¬ã€èé¢ãã¢ãã¿ãŒã¢ãŒã ãã±ãŒãã«é¡ããã¹ãã¬ãŒã§é»å¡ããããã æè¿ã¯ãã¢ãã€ã«ãããžã§ã¯ã¿ãŒã®Ankerã®Nebula Capsule IIã賌å
¥ããŠãåäŸãåç»ã芳ãã®ã«ã¯ãã©ã£ãŠããŸããå·Šå³ã®å°åœ¢è£æ£ãå
¥ã£ãããå¬ãããªãŒãšæã人çãéãããŠããŸãã ã¿ããã¯ãæåªãŸã©ããªããšããåçš®ã§ãçŸå³ãã å
ã
ã¯çœããã£ã¹ãã¬ã€èé¢ãã¢ã«ãè²ã®ã¢ãã¿ãŒã¢ãŒã ã§ãããå¡ããŸããã ã¢ãã€ã«ãããžã§ã¯ã¿ãŒã§åç»ãéžãã§ããæ§å æšããããã€ã³ããæ¹åããããã€ã³ã æ£çŽãå¡è£
ã¯é
çãªäººããããšæã£ãŠããŸãããã§ãããã¹ãã¬ãŒçŒ¶æ°æ¬ã§ç掻ç°å¢ã«çµ±äžæãåºããã®ã§ãéåžžã«ã³ã¹ããé«ãåççã è²·ãæããã³ã¹ããšæ¯èŒãããããããä»äºãããããšåŠ»ã«è€ããŠããããŸããã â»å¡è£
ã¯èªå·±è²¬ä»»ã§ãé¡ãããŸãã ããªãŒã³ã¡ã³ã å¡è£
颚æ¯ã¯ã³ãã©ã§ããè¶£å³ã掻ãããŠè¯ãã£ãã§ãã https://twitter.com/kfly8/status/1343786958313594880 07. æ¡çšæ
åœ @overallfactory ãã åšå®
ç°å¢ã®æ§åãæããŠãã ãã âãã£ã¹ãã¬ã€ ãã£ã¹ãã¬ã€ã¯ãããšããšæã£ãŠããLGã®ã¢ããšäŒç€Ÿããè²ãåããDELLã®ã¢ãã䜿çšããŠããŸããæ¡çšã®ä»äºæSlackãã¡ãŒã«ãããããšãå€ãããããã£ã¹ãã¬ã€ã®äžã€ã¯çžŠåã«ããŠããŸãã âæº æºã¯ãªã¢ãŒãã¯ãŒã¯ã¹ã¿ãŒãå
±ã«FlexiSpotã®ã¹ã¿ã³ãã£ã³ã°ãã¹ã¯ã«å€æŽããŸãããç ããªã£ããç«ã£ãŠä»äºãããŠããŸãã âããŒããŒã æºã«ã¢ããå¢ãããããªã+æµ
ãã¹ãããŒã¯ã®ããŒããŒãã奜ã¿ãšããããšã§ãMagic Keyboardãå©çšããŠããŸãããã ãããŒããŒãã«åŸæã欲ããã£ãã®ã§ãè£ã«ããŒããŒãã¹ã¿ã³ããåãä»ããŠããŸãã âé
ç· äžæ¥äžå®¶ã«ãããšãæºãåºãæ±ããã¹ããŒãããšãŠãæ©ãã§ãã æ¯æ¥æé€ãããã人ãªã®ã§ãã³ãŒãããã£ãã·ã¥ãææ¿å
·ãªã©ã¯å
šãŠæµ®ãããããã«ããŠããŸããæµ®ããã¯æ£çŸ©ã§ãã âã©ã€ã äŒè°ãé¢è«ã§ãã¬ãé»è©±ãããããšãå€ãã®ã§ããã¹ã¯ã©ã€ããè²·ããŸããã æºã®äžã®ã¢ããå¢ãããããªãã£ãã®ã§ãUSB絊é»ã§ãã£ã¹ãã¬ã€äžã«ã€ããããã©ã€ããéžæã ãŸããå®¶ã§ONïŒOFFãåãæ¿ããã®ãåŸæã§ã¯ãªããããä»äºã®æãšäŒæ©ã®æã§è²ãå€ãããããã®ãéžã³ãŸããã æšããããã€ã³ããæ¹åããããã€ã³ã äºç¹ãããŸãã äžã€ã¯ç
§æãžã®ãã ããã§ãã ã©ã€ãã®è²ã§èªåã¯ONïŒOFFãåãåããŠããŸãã ONã®æã¯æŒçœè²ãOFFæã¯é»çè²ã«ããŠéãããŠããŸãã ããäžã€ã¯éšå±ããè²ãç¡ãããããšã§ãã éäžåãå¢ãããã«ããã¹ã¯åšãã¯ãã¡ãããå®¶ã«ããå®¶å
·ïŒã«ãŒãã³ã絚毯ãå°ç©ïŒãå
šãŠè¶è²ãçœé»ã«å€ããŸããã 08. ãšã³ãžã㢠@odan3240 ãã åšå®
ç°å¢ã®æ§åãæããŠãã ãã éçºã®äœæ¥ã¯MacBook Pro ãš31ã€ã³ãã®ãã£ã¹ãã¬ã€ãã¡ã€ã³ã§ãããã®31ã€ã³ãã®ãã£ã¹ãã¬ã€ã¯äŒç€Ÿã®ç§»è»¢ã«äŒŽããæäŒç€Ÿã§äœ¿ã£ãŠãããã®ãæœéžã§è²ã£ãŠããããŸãããåºæ¬çã«ã¯ MacBook Pro ã§ã³ãŒããæžããŠããã£ã¹ãã¬ã€ã¯ Slack ã®åšåããã©ãŠãžã³ã°ãã³ãŒããªãŒãã£ã³ã°ã«äœ¿çšããŠããŸãã æºã¯ Amazon ã§æšªå¹
120cmã®ãã®ãããã£ãŠäœ¿ã£ãŠããŸããFlexiSpot ãæ€èšããã®ã§ãããæéæ©èœã¯ MUST ã§ã¯ãªããšèããŠãã¡ãã«ããŸããã æ€
åã¯æè¿ã»ã€ã«ãã§ã¢ã賌å
¥ããŸãããããã¯æ€
åã«ã€ããŠè©³ãããªããããäŒç€Ÿã§äœ¿çšããŠããŠåº§ãå¿å°ãè¯ãã£ãã®ã§åãã»ã€ã«ãã§ã¢ã«æ±ºããŸããã Before After æšããããã€ã³ããæ¹åããããã€ã³ã æšããããã€ã³ãã¯31ã€ã³ãã®ã§ãã£ã¹ãã¬ã€ã§ãããµã€ãºã倧ããããå·Šå³ã«åå²ããŠãã©ãŠã¶ãš Slack ãéããŠããããšãå€ãã§ãã1æã®ãã£ã¹ãã¬ã€ã§å®è³ª2æåã®åããããŠãããã®ãè¯ããšããã§ãã æ¹åããããã€ã³ãã¯æºãšé
ç·ã§ãã æºã賌å
¥ããåœæã¯ç«ã£ãŠäœæ¥ããããšã¯ãªãã£ãã®ã§ãæéæ©èœã¯ MUST ã§ã¯ãªããšå€æããŸããããããå®éã«æºã䜿çšããŠãããã¡ã«é«ãã§ã¯ããŒããŒãã®ããžã·ã§ã³ã«éåæãèŠããããã«ãªããŸããããªã®ã§æ¬¡æºã賌å
¥ãããšã㯠FlexiSpot ãªã©ã®æéæ©èœãä»ããŠãããã®ãæ€èšãããã§ãã ãŸãé
ç·ã¯ã¡ãã£ãšãã¡ããã¡ãããŠããã®ããªããšããããã§ããHDMI ã®åé
åšãªã©æºã®äžã«é ãããã®ã¯ããã€ããããã§ãããã²ãŒã ã®ã€ã€ãã³ã®ã³ãŒããªã©ãã©ãããŠãæç·ã§ç¹ãå¿
èŠãããæºã®äžã«é
ç·ã眮ãå¿
èŠããããã®ããããæãã«æŽçãããã§ãã ããªãŒã³ã¡ã³ã å·Šã®äžåãå°ãããã£ã¹ãã¬ã€ã¯ã²ãŒã çšã§ãããæŒäŒã¿ãéå€åŸå³ã²ãŒã ãã§ããç°å¢ãæŽã£ãŠããŸããæ¯æãã倧äºã§ãã Ex. @NortonSam1 ãã ååã®èšäºã§ç°è²ã®ååšæãæŸã£ãŠãã @NortonSam1 ããã¯æãããå
æ¥éè·ãããŸããããç¹å¥ã«åçããŠããã ããŸãã! ä»åã¯ã©ã®ããã«ãªã£ãŠããã®ã§ããããâŠâŠ? åšå®
ç°å¢ã®æ§åãæããŠãã ãã è·ãå€ããèªå®
ã§ã®äœæ¥ãçç¡ãšãªã£ãçŸåšã転å±
å
ã®äœå±
ã¯é£äºç¡ç å
¥æµŽä»¥å€ã®çšéãæãããªããªããŸããããã®çµæè·ã»ã©ããããã«ãããæ®µããŒã«ã¯ãã®ãŸãŸç°¡æããŒãã«ã«æ©å€ãããããã©ååãã¹ã¯ã®åœ¹å²ãæãããŠããã¢ã€ãã³å°ã¯äŸç¶ãšããŠå¥åšã§ãã Before After æšããããã€ã³ããæ¹åããããã€ã³ã æ°ã«å
¥ã£ãŠãããã€ã³ãã¯ç¹ã«ãããŸããããšã¢ã³ã³ãã€ãããšãããã¿ãæ¢ãŸããªããªãã®ã§è»¢å±
å
ãæ¢ããŠããŸãã匷ããŠããããªãã°å±±ãè¿ãããšã§ãããããæè¿ã¯ä»²è¯ããªã£ãå°åäœæ°ã«ç©ºãå®¶ãè²ã£ãŠãããããšé 匵ã£ãŠããŸãã ã©ããªå€åããã£ããæããŠãã ãã è·ãå€ãããŸãããçŸåšã¯æšããèŠç¿ããšããŠæŽ»åããŠããŸããæ€èžæ œå¹ã«ãæãåºããŠããŸããå€ã«ã¯ããªçã®å
èš±ãååŸããŸããæšæ¥ã¯ä¹ã£ãŠãã軜ãã©ãã¯ã®åŸèŒªãèµ°è¡äžã«å€ããŠç°ããŒã«ãã£ãšãã§ãããŸããã ãããã« ãããŸã§èªãã§ããã ãããããšãããããŸãã! ãä»äºãããããããäžæ®µå
ã®ãã ãããèŠããŠããŠã1幎åãããæŽã«åæ§ãåºãŠããããã«æããŸããããããéãæé©ãªç°å¢ãäœãäžããŠãããã®ã¯ãªã¢ãŒãã¯ãŒã¯ãªãã§ã¯ã®ééå³ã§ããã ã¢ãã€ã«ãã¡ã¯ããªãŒã«åãæ¹ã«ã€ããŠããã«è©³ããç¥ãããæ¹ã¯äžèšã®ãµã€ãããã©ããïŒ åšå®
ç°å¢ãã ããæ¹ããã ãããªãæ¹ãåéäžã§ã⪠ãŸãã¯æ°è»œã«ãåãåãããã ããã recruit.mobilefactory.jp *1 : æ¬åœã«ããæžããŠãããŸãããéãã®ã«! *2 : åœç¶HJKLã§ã *3 : ãã«ãŒã«ã·ãŒã«ãšããããã§ã *4 : å®éã«èãããšããéåžžã«é³è³ªãã¯ãªã¢ã§è¯ãã£ãã§ã *5 : ãã2å¹Žã®æ°åã®æ¹ã¯ç¹ã«å®å®¶ãããªã¢ãŒãã¯ãŒã¯ããŠããæ¹ãå€ãããã§ã *6 : ãããåºãæå³ã§ã¯åšå®
ç°å¢ã®æ§åã§ãã!!!!! *7 : ã¿ã€ãã³ã°ãéç«ã¡ããªããããã®ã§ãããã
ããã«ã¡ã¯ããããã¯ãã§ãŒã³ããŒã ã®ãœãããŠã§ã¢ãšã³ãžãã¢ã® id:odan3240 ã§ãã ãã®èšäºã§ã¯æšå¹Žã®9æãã瀟å
ã§åãçµã¿ãç¶ããŠããããã³ããšã³ãã©ã³ãäŒã«ã€ããŠç޹ä»ããŸãã ããã³ããšã³ãã©ã³ãäŒãšã¯ 第2æšæãšç¬¬4æšæã®ã©ã³ãã®æé (13:00-14:00) ã«ããã³ããšã³ãæè¡ã«èå³ãããæå¿ã®ã¡ã³ããŒããªã³ã©ã€ã³ã§éãŸã£ãŠã©ã³ãããäŒã§ãã ãã®äŒã®ç®çã¯ä»¥äžã®éãã§ãã ããã³ããšã³ãã«é¢ããæè¡ã®æ
å ±äº€æ ããã³ããšã³ãã«èå³ããã人ã®èŠªçŠãæ·±ãã ãã®äŒã§å®éã«è¡ã£ãŠããããšã¯ä»¥äžã®éãã§ãã 13æé ã«ã¿ããªãŒã¡ãŒã¡éãŸã£ãŠãã ãã®æ¥ã®ãã¡ã·ãªããŒã¿ãŒã2人決ãã ãã¡ã·ãªããŒã¿ãŒã¯çŽ30åã§äº€ä»£ãã ãã¡ã·ãªããŒã¿ãŒã®ç»é¢ãå
±æããªãã JSer.info ã®æè¿ã®èšäºãéã ãã¡ã·ãªããŒã¿ãŒãèšäºã®å
容ãèªã¿äžãã€ã€ã¿ããªã§æ·±å ãããŠãã ããããªãåèª/æŠå¿µã¯ãªããïŒ å®éã«ä»äºã«æŽ»ãããããïŒ äŒç»ããããšèãããã£ãã ç©çåºç€Ÿæä»£ã®ã©ã³ãã§ã®éè«ã®åçŸ æ±äºåç°ãªãã£ã¹ã«ã¯ããªãã¬ãã·ã¥ã«ãŒã ããšåŒã°ããã©ã³ããé£ã¹ãããã®éšå±ããããŸãããããã§çžåžã«ãªã£ããšã³ãžãã¢åæãšãããããã¯ããŒã¯ãããã®ãåœæã®æ¥œãã¿ã§ããããããæšå¹Žã®2æããã®ãªã¢ãŒãã¯ãŒã¯åã«äŒŽããã®æéã倱ãããŠããŸããŸããã ãªããšããããããã¯ããŒã¯ãäŒç€Ÿã®äººãšãªã³ã©ã€ã³ã§ãããããšããæ°æã¡ãæ±ããŠå幎ãéããŠããŸããã ä»ç€Ÿã®ããã³ããšã³ãã©ã³ãã«ãããã㊠ãããããã¯ããŒã¯ã§æãåºããã®ã¯ãµã€ããŠãºããã®ããã³ããšã³ãã©ã³ã 1 ã§ãããèªåããã®å¬ãç©ãç¥ã£ãã®ã¯ã³ããçŠä»¥åã§ãåå è
ã®æ¹ã Twitter ã§ãã®æ§åã宿³ããŠããã®ãèŠãŠãã矚ãŸãããããã€ãåå ããŠã¿ããããªã©ãšèããŠããŸããããã®çç±ãšããŠã¯ãäºãã®ç¥èŠãåºããããããšãåã«èªåãããã¯ããŒã¯ãããã®ã奜ãã ããã§ãã ãã®ãšãã¯ãã転è·ãããªãããããæåãããäŒç€Ÿãè¯ããªãããã®æ°æã¡ã§ããããããäžèšã®ã©ã³ãã§ã®ããã¯ããŒã¯ããªã³ã©ã€ã³ã§åŸ©æŽ»ãããããšããã¢ãããŒã·ã§ã³ãšæãåããããšãã«ãæåãããäŒç€Ÿã«è¡ãããä»ããäŒç€Ÿã§æåãäœãã»ããé¢çœããšããèãã«è³ããŸããã ãã®æµãããããå»å¹Žã®9æã«ããã³ããšã³ãã©ã³ãäŒãäŒç»ããããšã«ããŸããã å®éã®æ§å 2021-07-08 ã«éå¬ãããããã³ããšã³ãã©ã³ãäŒã®æ§åã玹ä»ããŸãã ãã®æ¥ã¯ 2021-07-06ã®JS: TypeScript 4.4 Betaãimmutable-js 4.0.0-rc.13ãpetite-vue - JSer.info ãã¿ããªã§èªã¿ãŸããããã®ãšãã®ãµããªãŒã玹ä»ããŸãã TypeScript 4.4 beta ã® useUnknownInCatchVariables ã¯é¡§å®¢ãæ±ããŠãããã®ãšèšã話ã«ãªããŸãã imutable-js 㯠OSS ã®éçšåšãã§ãªã«ããã£ãããã 倧å€ãã æè¿ã ãš immer ãããèããã 瀟å
ã§ Vue.js ãæ¡çšããŠãããããã¯ããå€ããã petite-vue ã«é¢å¿ãéãŸã£ã HTML ã®æ§æã«éåããªãããã« v-effect ãæ°ããå°å
¥ãããã®ã§ã¯ ã³ããããã°ãèŠè¿ããš Evan You ãçŽ1é±éã§ petite-vue ããã«ã¹ã¯ã©ããããå®è£
ããŠããŠãã°ã actions/setup-node ã«ãã£ãã·ã¥æ©èœãå
¥ã£ãã®ã¯äŸ¿å©ãã ãã actions/setup-node ã®ååšãš UNIX å²åŠããšãèãããšè«žèª¬ããã®ã§ã¯ The State of WebAssembly 2021 ã«ã€ã㊠The State of Hoge ãèŠããšå¹Žæ«æåºããã©ãŸã 6æïœ ãã£ã± Rust ãå€ããã polyfill ãšã¯å¥ã« ponyfill ãšããæŠå¿µããããã å®éã«ããã³ããšã³ãã©ã³ãäŒãéå¬ããŠã¿ãææ³ 第äžã«äŒç»åœåã®çãéãã宿çã«ããã³ããšã³ãæè¡ã«ã€ããŠãã£ããã¢ãããããšæè¡çãªéè«ãããæéã確ä¿ã§ããã®ãå¬ããç¹ã§ããã äŒç»åœåã«ã¯èããŠãªãã£ãå¬ããç¹ããããŸãããããã¯äŒç€Ÿã«å
¥ã£ãŠããæ°ããã¡ã³ããŒãšã®äº€æµã®å Žã«ããªã£ãç¹ã§ããäŒç€Ÿã®ãã«ãªã¢ãŒãã¯ãŒã¯åã«äŒŽãå¥ã®ããŒã ã®ã¡ã³ããŒãšã®äº€æµã®æ©äŒãæžãäžã§ãããŒã ãè¶
ãã亀æµãä¿é²ãããŸããã éå¶ã§å¿ãããŠããããš ãããç¶ç¶ããŠéå¬ããããšãšãåå è
ã®æèŠãåãå
¥ããŠå
容ããã©ãã·ã¥ã¢ããããããšãå¿ãããŠããŸãã ãããç¶ç¶ããŠéå¬ããããã«ããã¡ã·ãªããŒã¿ãŒã亀代å¶ã«ããããšãšãéå¬é »åºŠãéé±ã«ããŸããããã¡ã·ãªããŒã¿ãŒã亀代å¶ã«ããããšã§äž»å¬è
ã§ããèªåèªèº«ã®è² è·ã軜æžããŠããŸããéå¬é »åºŠã«ã€ããŠã¯ãæ¯é±éå¬ã«ãããšãæšææ¥ã¯ããã³ããšã³ãã©ã³ãäŒããšããåºå®æŠå¿µãšãšãã«åå ã«å¯Ÿãã矩åæãçãŸããŠããŸãã®ã§ã¯ãšããæžå¿µããéé±ã«ããŠããŸãã ãŸãåå è
ã®æèŠãåãå
¥ããããã«ãéå¬åæã¯ 衚æããããã ã䜿ã£ãŠæåŸã«åå è
ã«è¯ãã£ãç¹ãšæ¹åç¹ã®å£°ãåãããã«ããŠããŸããããã®çµæèšäºã«å¯Ÿããæ·±å ãã®æ¹éãšããŠãå®éã«ä»äºã«æŽ»ãããããïŒããšããèŠç¹ã远å ãããŸããã çµããã« ããã³ããšã³ãã©ã³ãäŒã®æŠèŠãäŒç»ã®ãã£ãããå®éã®æ§åã玹ä»ããŸãããããã³ããšã³ãæè¡ã®ãã£ããã¢ããã ãã§ãªãããŒã ãè¶
ãã人ãšã®äº€æµãä¿é²ãããããå人çãªæºè¶³åºŠã¯é«ãããããã®åãçµã¿ã§ãã サイボウズのフロントエンドエキスパートチームの紹介 - Cybozu Inside Out | サイボウズエンジニアのブログ ↩
ããã«ã¡ã¯ããããã¯ãã§ãŒã³ããŒã ã§ãœãããŠã§ã¢ãšã³ãžãã¢ãããŠãã id:odan3240 ã§ãã æ¥æã«äºå®ãããŠãã Ethereum Berlin Upgrade ã®èª¿æ»ãè¡ãäžã§çºèŠãã EIP-2718: Typed Transaction Envelope ããEthereum ã®æªæ¥ãæããããææ¡ã ã£ãã®ã§ç޹ä»ããŸãã EIP-2718 ã®ææ¡å
容 EIP-2718 ã¯æ°ãããã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ããå®çŸ©ããææ¡(以äžããã®ææ¡ããšåŒã³ãŸã)ã§ãã ãã®ææ¡ã§ã®æå¹ãªãã©ã³ã¶ã¯ã·ã§ã³ ( Transaction ) ãšãã©ã³ã¶ã¯ã·ã§ã³ã®ã¬ã·ãŒã ( Receipt ) ã®å®çŸ©ã¯æ¬¡ã®éãã§ãã || ã¯ãã€ãåã®çµåæŒç®åã§ãã Transaction : TransactionType || TransactionPayload ãš LegacyTransaction ã®ã©ã¡ãã Receipt : TransactionType || ReceiptPayload ãš LegacyReceipt ã®ã©ã¡ãã LegacyTransaction / LegacyReceipt ã¯ã©ã¡ããåŸæ¥ã® Ethereum ã®ãã©ã³ã¶ã¯ã·ã§ã³ãšãã©ã³ã¶ã¯ã·ã§ã³ã®ã¬ã·ãŒãã®å®çŸ©ã§ãã TransactionType ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã€ããèå¥ããããã® 0 ãã 127 ãŸã§ã®128éãã®æ°åã§ãã TransactionPayload / ReceiptPayload ã¯ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ãã® payload ã§ãã EIP-2718 ã®ã¢ãããŒã·ã§ã³ ãã®ææ¡ä»¥åã§ã¯ãã©ã³ã¶ã¯ã·ã§ã³ãæ¡åŒµããå Žåã¯åŸæ¹äºææ§ãä¿ã€å¿
èŠããããŸãããäŸãã° EIP-155: Simple replay attack protection ã§ã¯ secp256k1 ã®çœ²åã® v ã®å€ã« chainId ãèæ
®ããå€ãå ç®ããããšã§ãèŠä»¶ãæºããã€ã€åŸæ¹äºææ§ãå®çŸããŸããããã®ææ¡ã§ã¯ TransactionType ã®å€ã§ãã©ã³ã¶ã¯ã·ã§ã³ãå€å¥ãããããåŸæ¹äºææ§ãæ°ã«ããå¿
èŠããªããªããŸãã ãã®ãã以åã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã® data ã®æ§é ãèªç±ã«èšå®ã§ããããšã掻ãã㊠EIP-712: Ethereum typed structured data hashing and signing ã EIP-1613: Gas stations network ãªã©ãææ¡ãããŠããŸãããä»åã®ææ¡ã«ãããã©ã³ã¶ã¯ã·ã§ã³ã®æ§é ã«ã€ããŠãèªç±ã«èšå®ããããšãã§ããããã«ãªãããã©ã³ã¶ã¯ã·ã§ã³ã¬ãã«ã§ã®ãã«ãã·ã°ãã©ã³ã¶ã¯ã·ã§ã³ã®å®è£
ãªã©ãå¯èœã«ãªããŸãã EIP-2718 ãå¿çšããææ¡ ãã®ææ¡ã䜿ã£ãŠæ°ãããã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ããå®çŸ©ããŠããææ¡ã玹ä»ããŸãã EIP-1559: Fee market change for ETH 1.0 chain ã¬ã¹ã®æ¯æãã倿Žããææ¡ã§ãã maxInclusionFeePerGas ã maxFeePerGas ãªã©ã®ãã©ã¡ãŒã¿ããã©ã³ã¶ã¯ã·ã§ã³ã«è¿œå ãããŠããŸãã EIP-2711: Sponsored, expiring and batch transactions. 以äžã®3ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ããææ¡ããŠããŸãã Sponsored Transactions: ãã©ã³ã¶ã¯ã·ã§ã³ã®éä¿¡è
ãšã¬ã¹ãæ¯æã人ãåé¢å¯èœ Batch Transactions: è€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ããŸãšããŠå®è¡å¯èœ Expiring Transactions: ãã©ã³ã¶ã¯ã·ã§ã³ã«æå¹æéãèšå®å¯èœ EIP-2733: Transaction Package ãã©ã³ã¶ã¯ã·ã§ã³ã® success ã gas_used ãªã©ã®å®è¡æ
å ±ãæ¬¡ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«æž¡ããããã«ããææ¡ã§ãã EIP-2930: Optional access lists ãã©ã³ã¶ã¯ã·ã§ã³ãã¢ã¯ã»ã¹ããäºå®ã®ããã¢ãã¬ã¹ãšã¹ãã¬ãŒãžãäºåã«æž¡ããããã«ããææ¡ã§ããäºåç³åãããã¢ãã¬ã¹ä»¥å€ã«ã¢ã¯ã»ã¹ãããšã³ã¹ããå¢å ããŸãã EIP-2938: Account Abstraction ã³ã³ãã©ã¯ãã EOA ãšåæ§ã«æéã®æ¯æãããã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡ãã§ããããã«ããææ¡ã§ãã EIP-2972: Wrapped Legacy Transactions åŸæ¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ãããã®ææ¡ã®åœ¢åŒã§å®çŸ©ãçŽãææ¡ã§ããchainId ãæç€ºçã«ãã©ã³ã¶ã¯ã·ã§ã³ã®ãã©ã¡ãŒã¿ã«å«ãŸããŠããŸãã EIP-2976: Typed Transactions over Gossip devp2p ãæ°ãããã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ããåãå
¥ããããã«ããææ¡ã§ãã çµããã« EIP-2718 ã¯ãããŸã§åºå®ã ã£ããã©ã³ã¶ã¯ã·ã§ã³ã®æ§é ãå¯å€ã«ããææ¡ã§ããã®ç޹ä»ãããŸããããã©ã³ã¶ã¯ã·ã§ã³ã®æ§é ãæè»ã«ãªãããšã«ãã£ãŠãããŸã§ãªãã£ãææ¡ããã Ethereum ã®èªç±åºŠã¯æŽã«é«ãŸã£ãŠããŸããç¹ã« EIP-1559 ããã¯ç®ãé¢ããªãã§ããã
ãããŸããŠããã§ãšãããããŸãããããã¯ãã§ãŒã³ããŒã ã®ãœãããŠã§ã¢ãšã³ãžãã¢ã® id:odan3240 ã§ãã ãã®èšäºã§ã¯ Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°åœ¢åŒã®ç€Ÿå
å匷äŒã1幎éç¶ç¶ã§ããèšå¿µã«ããã®åœ¢åŒã玹ä»ãããŸãã ãšã¯ã¹ããªãŒã ãªãŒãã£ã³ã° ãšã¯ ãšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ãšã¯é»èªãã§ãŒãºãšè°è«ãã§ãŒãºã®2ã€ã®ãã§ãŒãºãç¹°ãè¿ãèªæžäŒã®åœ¢åŒã®1ã€ã§ãã é»èªãã§ãŒãºã§ã¯æ¬¡ã®ããšãè¡ããŸãã 1ç¯ã1ç« ãæ°ããŒãžãªã©ã®ããçšåºŠã®ãŸãšãŸã£ãæç« ãèªãç¯å²ãšããŠæ±ºå® ãã®ç¯å²ãåå è
ã§äžŠè¡ããŠé»èª ãã®æ¬¡ã®è°è«ãã§ãŒãºã§ã¯é»èªããçµæã«ã€ããŠæ¬¡ã®ããšãè¡ããŸãã æç« ã®è§£éãåããã æç« äžã§åãããªããšãããæãåã ãšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ã®å©ç¹ã¯æ¬¡ã®éãã§ãã èªæžäŒãžã®åå ã«å¿
èŠãªäºåæºåãå¿
èŠãªãããåå ã®ããŒãã«ãäœã ãäºãã®ç¥èãè£ãåãã 1ã€ç®ã®å©ç¹ã«é¢ããŠã¯ã茪è¬åœ¢åŒã®èªæžäŒã®æºåã«èŠåŽããããšãããæ¹ã«ãšã£ãŠã¯çè§£ãããããšæããŸãã Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã° ã¢ããã¡ã¯ã§ã¯ Ethereum Layer2 å匷äŒãšãã瀟å
å匷äŒãéå¬ããŠããããã®å匷äŒã§ã¯ Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°åœ¢åŒã®èªæžäŒãæ¡çšããŠããŸãããã®å匷äŒã§ã¯ Ethereum ã® Layer2 æè¡ã«é¢ãã Web äžã®ãµã€ããããã¥ã¡ã³ãã Google Docs ã«è»¢èšããŠã¿ããªã§èªã¿é²ããŠããŸãã ãã® Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ã§ã¯ãäžã§ç޹ä»ããé²ãæ¹ã®é»èªãã§ãŒãºäžã« Google Docs ã®ã³ã¡ã³ãæ©èœã§æäžã®ææ³ãè§£éãåãããªããšãããã³ã¡ã³ãããŸããããã¯åŸæ¥ã®ãšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ãšæ¯ã¹ãŠæ¬¡ã®å©ç¹ããããšèããŠããŸãã æ°è»œã«ã³ã¡ã³ããã§ãã Google Docs ã䜿ãåã¯å¯Ÿè±¡ã®æãåŒçšããŠã³ã¡ã³ããæžããŠãã è°è«ç®æã®ç®å®ã«ãªãè°è«ãã§ãŒãºã掻çºã«ãªã æç« ã®æµãã劚ããªã å®éã« Layer 2 å匷äŒã§ã¯ç»åã®ãããªåœ¢ã§é²è¡ããŠããŸãã Making Sense of Ethereumâs Layer 2 Scaling Solutions: State Channels, Plasma, and Truebit | by Josh Stark | L4 blog | Medium ãèªãã§ããæ§å Optimistic vs. ZK Rollup: Deep Dive | by Alex Gluchowski | Matter Labs | Medium ãèªãã§ããæ§å åå è
ã®å£° Layer 2 å匷äŒã®åå è
ã« Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ã«ã€ããŠææ³ã質åããŠã¿ãŸããã ãªã¢ãŒãç°å¢ã ãšèªæžäŒãããŠãä»ã®ã¡ã³ããŒãã©ããèŠãŠããã®ãåããã«ããè°è«ã«æ¯éãåºãŠããã®ã§ãããGoogle Docsã䜿ããšèª°ãã©ãã«èšåããŠããã®ãã¯ã£ããããŠæããŸãã éäžããŠèªãæéã確ä¿ãã€ã€ãããã®å Žã§çããçåãå¿ããªããã¡ã«ããè°è«ã§ããã®ãããã£ãã§ãã æã®æå³ãçè§£ãã¥ããã£ããšããæè¡ç¹æã®æèãªã©ã§äžæãªãšããããã£ããšãã«ããè°è«ã§ããŠããã£ã èªã¿ãªããçåç¹ãææ³ãæžãã®ã§ãæžãå¿ãããèªãã§ããç®æãèŠå€±ã£ããããã¹ã ãŒãºã«é²ããããŸãã çµããã« Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ã玹ä»ããŸããã 瀟å
ã§ã¯ Layer2 å匷äŒä»¥å€ã«ã Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ã䜿ã£ã瀟å
å匷äŒããã£ãŠããããšãã話ã«ãªãã web.dev ã®èšäºãèªã瀟å
å匷äŒãç«ã¡äžããå§ããŠããŸãã ãã®èšäºãèªãã§ããæ¹ã Web äžã®æç« ã®èªæžäŒã« Google Docs ãçšãããšã¯ã¹ããªãŒã ãªãŒãã£ã³ã°ã¯ãããã§ããããïŒ
ãã®èšäºã¯ ã¢ãã€ã«ãã¡ã¯ããªãŒ Advent Calendar 2020 25æ¥ç®ã®èšäºã§ããé·ãã£ãã¢ããã³ãã«ã¬ã³ããŒããããã©ã¹ãã§ããä»å¹Žã25æ¥ãŸã§æ¯æ¥æè¡èšäºã楜ãã¿ã«éãããŸããã ããã«ã¡ã¯ããããã¯ãã§ãŒã³ããŒã ã®ãœãããŠã§ã¢ãšã³ãžã㢠id:odan3240 ã§ãã ERC721 ã® extension ERC721 㯠Ethereum ã«ããã Non-Fungible Token (ä»¥äž NFT) ã®èŠæ Œã§ããERC721 ã«ã¯æ§ã
㪠extension ãååšããŠããã OpenZeppelin ã§ã¯æ¬¡ã®çš®é¡ã® extension ãå®è£
ãããŠããŸãã Mintable NFT ã mint ã§ãã Burnable NFT ã burn ã§ãã Enumerable NFT ãæ°ãããã Metadata NFT ãšãªããã§ãŒã³ã®ã¡ã¿ããŒã¿ãç¹ãããã Pausable NFT ã®è»¢éã忢ã§ãã ãã®äžã§ã Enumerable 㯠NFT ãæ°ããããããã«ãªãäžæ¹ã§ãgas used (ä»¥äž ã³ã¹ã) å¢å ããããšãç¥ãããŠããŸãã speakerdeck.com ä»å Enumerable 以å€ã® extension ã«å¯ŸããŠã³ã¹ãã®å¢å ã調ã¹ãã®ã§ããããå
±æããŸãã å®éšã®èšå® å®éšã®åãã¿ãŒã³ã¯æ¬¡ã®éãã§ããMintable ãããŒã¹ã«ä»ã® extension ã远å ããŠããŸãã Basic (Mintable) CaseBurnable (Mintable + Burnable) CaseEnumerable (Mintable + Enumerable) CaseMetadata (Mintable + Metadata) CasePausable (Mintable + Pausable) ããŒãžã§ã³ solidity: 0.5.17 Ethereum ã® hardfork: Muir Glacier @openzeppelin/contracts: 2.5.1 1 ãœãŒã¹ã³ãŒã github.com å®éšçµæ deploy/mint/transferFrom ã®åã³ã¹ãã¯æ¬¡ã®éãã§ãã deploy mint transferFrom Basic 2,113,681 67,978 61,602 CaseBurnable 2,259,122 67,978 61,602 CaseEnumerable 2,455,003 153,561 92,696 CaseMetadata 2,538,433 67,978 61,624 CasePausable 2,541,757 67,978 62,497 ãããããã gas price ã 70Gweiãåãš ETH ã®ã¬ãŒãã 62608å/ETH ãšããŠã³ã¹ããæ¥æ¬åã«æç®ãããšæ¬¡ã®ããã«ãªããŸãã deploy mint transferFrom Basic Â¥9,263 Â¥298 Â¥270 CaseBurnable Â¥9,901 Â¥298 Â¥270 CaseEnumerable Â¥10,759 Â¥673 Â¥406 CaseMetadata Â¥11,125 Â¥298 Â¥270 CasePausable Â¥11,139 Â¥298 Â¥274 ãã§ã«ç¥ãããŠããããã« Enumerable ãå®è£
ãããšããŒã¯ã³ã® mint/transferFrom ã®ã³ã¹ããçŽ2åã«å¢å ããããšãããããŸããã ãŸã deploy ã®ã³ã¹ãã«ã€ããŠã¯ãå extension ãå®è£
ãããšå¢å ããPausable ãå®è£
ããã®ãçŽ1.2åãšäžçªå€§ããªå¢å çã«ãªãããšãããããŸããã ãŸãšã ERC721 ã® extension ã®éãã«ããã³ã¹ãã®å¢å ã«ã€ããŠèª¿ã¹ãŸããã deploy ã¯ã©ã® extension ã§ãã³ã¹ããå¢å ããŸãããããŒã¯ã³ã® mint/transferFrom ã«ã€ããŠã¯ Enumerable ãå®è£
ãããšã³ã¹ããå¢å ããŸããã ã©ã® extension ã ERC721 ã«å®è£
ãããã¯äœãããããŒã¯ã³ã®èŠä»¶ã«ããããŸãããå®è£
ãããšäœãããã®ã³ã¹ããå¢å ããå¯èœæ§ãèæ
®ããŠãããšè¯ãããã§ãã ç¡äºã«ã¢ãã€ã«ãã¡ã¯ããªãŒ Advent Calendar 2020ã¯25æ¥å®èµ°ã§ããŸãããããã§ã¯çããè¯ãã幎ãïŒ @openzeppelin/contracts ã®ææ°ç㯠v3 ç³»ã§ãããv3 系㯠Enumerable ãããã©ã«ãã§çµã¿èŸŒãŸããŠããŠå®éšã«é©ããªãã®ã§ v2 ç³» ↩
ãã®èšäºã¯ CTOA Advent Calendar 2020 ãš ã¢ãã€ã«ãã¡ã¯ããªãŒ Advent Calendar 2020 ã®24æ¥ç®ã®èšäºã§ãããŸãå
æ¥ã® Gaiax Technical Meetups ã®ç»å£å
容ãå
ã«ããå
容ã«ãªããŸãã ããã«ã¡ã¯ããšã³ãžãã¢çµç¹éçºè²¬ä»»è
ã®kobaken( @kfly8 )ã§ãã ææ¥ã¯ã¯ãªã¹ãã¹ã§ãããåš4æ³ã¯ãµã³ã¿ããã«ã¬ãŽããªã¯ãšã¹ãããŠããŸãããå±ããšããã§ããð ä»å¹Žã®2æãããã¢ããã¡ã¯ã¯æ°åã³ããã®åœ±é¿ã§ãã«ãªã¢ãŒãã®åãæ¹ã«å€ãããŸããã ãã®åœ±é¿ããããçµç¹éçºèгç¹ã§ã¯ç€Ÿå
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«èª²é¡ãæãã1幎ãšãªããŸããã ãšã³ãžãã¢çµç¹ã«éãããçµç¹å
šäœã«ãããŠã ãä»ã®ããŒã ãã©ããªããšãããŠããã®ãããããªãã ãã©ããªäººãããããªããŠã話ããã¥ããã ããã¿ãã..ïŒã ãªããŠå£°ãèããŸãããç¹ã«ãä»å¹Žå
¥ã£ãã¡ã³ããŒããã¯ããèããŸããã æ°äººã®1人ã«èããšã宿çã«éè«ãã工倫ãããããã§ãã tech.mobilefactory.jp ãããªè©±ãèããšãå人ãããŒã ã®å·¥å€«ããã£ãŠçµç¹ã¯ããŸããã£ãŠããããšãæ¹ããŠæããŸããäžæ¹ãçµç¹éçºã®æ
ãæãšããŠãåæãå€ãã£ãŠããŸã£ãããšã«ããçµç¹èª²é¡ãäžå¯§ã«è§£æ±ºããããšãæ±ããããŸãããäŸãã°ããªã³ããŒãã£ã³ã°ããªã¢ãŒãã¯ãŒã¯ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã1on1ããšã³ã²ãŒãžã¡ã³ãæ¹åã®ããã®ã¬ã€ããæ°äººç ä¿®ãšãã£ãç ä¿®ããã°ã©ã ã®ãªã³ã©ã€ã³åãæ°ããåãæ¹ã«åããã人äºå¶åºŠã»çŠå©åçã®æ¹å€ãªã©ãæããããŸãã å眮ããé·ããªããŸãããããããã£ãçµç¹éçºã®äžç°ãšããŠã瀟å
å匷äŒã®æ¹åäºæ
ã«ã€ããŠæžããããšæããŸãã瀟å
å匷äŒã¯ã¹ãã«ã¢ããã«æ³šç®ãããã¡ã ãšæããŸãããã³ãã¥ãã±ãŒã·ã§ã³ãä¿é²ããã·ããžãŒãçã¿åºã宿ãããããã«ãªã¢ãŒããªãã§ã¯ã®èª²é¡ããããã解決ããæœçã ãšæããŸããã·ããžãŒå¹æã«ããã1人ã§éæã§ããªãããšãçµç¹ã§ååããŠéæãããããªã£ãŠãããšå¬ããã§ãããã 仿¹ã§ã瀟å
å匷äŒã®éçšã¯è¯ãããšã ãã§ãªãåé¡ããããããããŸãããéçšã«æ©ãã§ããæ¹ãããã£ããããšæããŸããã©ãæ¹åããã®ãäžã€ã®äºäŸãšããŠèªãã§ããããã°ãšæããŸãã ã¢ããã¡ã¯ã®ç€Ÿå
å匷äŒã®æŠèŠ ã¢ããã¡ã¯ã®ç€Ÿå
å匷äŒã¯ã1æ¥1æéãã³ã¢ã¿ã€ã å€ã¯ãã€èª°ã§ãå匷äŒããŠè¯ãå¶åºŠã§ããååã¯ãã·ã§ã¢ãã¬ïŒãã§ãã æè¿ã ãšãããªå匷äŒããããŸããã æåŒ·ã®ããç°å¢ãã¬ãŒã³å€§äŒ ãšã©ãŒèšèšã¯ãŒãã³ã°ã°ã«ãŒã ã¹ã¯ã©ã ã¬ã€ã2020èªæžäŒ TCPã«ãã€ãïŒ Certified Jenkins Engineer 2020ã«ãªããŸã§ UXæ¢æ€é å
é±éææ¥ã«éå¬ãããååŒ·äŒ å
é±éææ¥ã«éå¬ãããŠãã"æåŒ·ã®ããç°å¢"ãšé¡ããLTäŒã§ã¯ãæåŒ·ã®ãããç°å¢ãæåŒ·ã®ã€ã³ã¿ãŒãããç°å¢ãæåŒ·ã®è²å
ç°å¢ãšãã£ã話ãããŠããŸãããæè¿ã ãšãã¢ããã³ãã«ã¬ã³ããŒå·çã®ããã®ããããäŒãå€ãéå¬ãããŠãããããŸããããšãšãã¯ä»å¹Ž1幎ããµãããããšã³ãžãã¢ã®LTäŒããããŸããã çŸç¶ã®ã¢ããã¡ã¯ã®ç€Ÿå
å匷äŒã®ç¶æ³ãç°¡åã«ãŸãšãããšã次ã®ãããªå
·åã§çµç¹ã«ããããæµžéããŠãããšæããŸãã çãã«éå¬ãããŠãã 10幎以äžç¶ããŠãã ç¥èãåŸãã ãã§ãªãããäºããç¥ãå Žã«ããªã£ãŠãã åé¡ã¯ãããã çŸç¶ãã»ãŒæ¯æ¥éå¬ãããããããçµç¹ã«æµžéããŠãããšã¯æããŸãããåé¡ã¯ãããããããŸãããäžã«ã¯çŸåšãé²è¡åœ¢ã®åé¡ããããŸããå匷äŒãéå¶ããŠãã人ã«ãšã£ãŠã身ã«èŠãã®ããåé¡ããããšæããŸãã åé¡ã¯è€éã«çµ¡ã¿åã£ãŠãã ãããã£ãçµç¹ã®åé¡ãåæããæãé¢çœãæããäžã€ã®åå ãããããã§ã¯ãªããäºãã«ç¹ãã£ãŠããŠåå ããã©ãããšããŠãããŸããããªããšããã§ããå
žåçãªæªæã¯ã誰ãã®ããã«ããããšã§ããå
šå¡ã«ãšã£ãŠã®100ç¹ã¯ãªãã§ãããã©ããªã£ããå¬ããããå°ããã€æ¹åããŠããããšã解決ã®ç³žå£ã ãšæããŸãã äžå¯§ã«è§£æ±ºãç¶ãã è¡ã£ãããšã®ãã€ã³ãã¯æ¬¡ã®4ã€ã§ã å°ç¶ãã®ã³ãã¥ãã±ãŒã·ã§ã³ 仲éãå·»ã蟌ã ãµãŒãã€ããããŠå¯Ÿè©± èã®æ ¹æŽ»å 1. å°ç¶ãã®ã³ãã¥ãã±ãŒã·ã§ã³ å匷äŒã§è©±ãèãããããã€ïŒãããŸãïŒãã§ãªããå匷äŒã®å§ãŸãåããçµãã£ãåŸãŸã§å°ç¶ãã§ã³ãã¥ãã±ãŒã·ã§ã³ãèšèšãããšè¯ããšæããŸãã äŸãã°ã誰ããããã¢ãŠããããããããªããã€ã€ããšçŽ çŽãªæ°æã¡ã衚æãããããã©ããªããšã¯ç¶ããªãã§ãããã€ã€ããšãã£ãã¡ãã£ãšãããªã¢ã¯ã·ã§ã³ã話ãã人ã®ããæ°ãã瀟å
å匷äŒã®æŽ»æ§åã«è²¢ç®ãããšæããŸãã 瀟å
ããºïŒã¿ãããªããšããã æè¿ã ãšãã¹ã¯ã©ã ã¬ã€ã2020ã§ãŸãããããšèª°ãããã£ããã§è©±ãã°ãäžç·ã«èªã¿ãŸããããšãã£ã話ã«ç¹ãã£ãŠããŸããã å匷äŒã®å Žã ãã§ãªããäŒç€Ÿã®äžã«äŒè©±ã溶ã蟌ãã®ãçæ³ã ãšæããŸãã 2. 仲éãå·»ã蟌ã ããŒãããããããããšäžäººçžæ²ãããŠããåœããåã§ããæåã¯ã§ããªãã§ãã瀟å
å匷äŒã®æåãæ¹åããŠããã«ããããå
¬åã§éå¶ã¡ã³ããŒãåããŸãããã©ã®æœçãããå¹ãããšæããŸããéå¶ã¡ã³ããŒã®çã«ã¯æè¬ã§ãã éå¶ã®ä»²éãå·»ã蟌ãçãã¯2ã€ãããŸããã 1ã€ç®ã®çãã¯ãèªåããšã«ããçŸå Žç®ç·ã§ã®çºä¿¡ã§ãããããŸã§ã¯ç®¡æéšçœ²ã®ãã¥ãŒãã³ãªã¬ãŒã·ã§ã³ãºéšãçºä¿¡ããŠããŸããããã¡ã³ããŒã®è©±ãèããšçºä¿¡ãèªåããšã«ãã«ããã£ãé¢ãæ£çŽãããŸãããäŒç€Ÿã«ã¯ããããªäººãããã®ã§ã誰ãäŒãããã§äŒããæ¹ãå€ãããšæ¹ããŠæããŸãããåãçŸå Žã®äººããäŒç€Ÿãè¯ãããããã«ååãã«åãçµã¿ãããŠããããè¯ãåºæ¿ãåããããããªãããšæããŸãã 2ã€ç®ã®çãã¯ãæåã®æ
ãæã¥ãããçãã§ããçµç¹ãå€ãããã宿ãæã€äººãå¢ããæ¹ããèªåãã¡ã®äŒç€Ÿããã³ãã¡ã€ãããæèŠãæãŠãŠæ¥œããããããªãããšæããŸãããããªå®æãªããå°æ¥ãçµç¹ãè¯ãããŠãã ãããšèšãããŠããã©ãããã©ãããã°ãããå°ããšæããŸããçµç¹éçºããã£ããå®è·µããå Žã«ãªãã°ãšæã£ãŠããŸãã ãããã£ãŠãå°ããã€ä»²éãå·»ã蟌ãã§ããããã§ãã 3. ãµãŒãã€ããããŠå¯Ÿè©± ãããåœããåã§ãããåœãŠãã£ãœãã§æœçãæã€ããã«ã¯ãããŸãããã©ãã ã瀟å
å匷äŒãèŠããããNPSãšããªãŒã³ã¡ã³ããéããŠãéå¶ããŒã ã§â蚺æåçµç¹éçºâãã€ãŸãããŒã¿ã芳å¯ãã察話ããªããè§£éãããŠã仮説ãããŠãæ¹åã®ã¢ã¯ã·ã§ã³ã«ã«ç¹ãããšãã£ãããšãããŠãããŸããã åŸã
ã«è¯ããªã£ãŠããŠãã ãµãŒãã€ã®çµæãèŠãŠãæåå®èŠã«åãåãã®ã§ã¯ãªããã©ãããæå³ãããã®ã察話ãããŠãããŸããäŸãã°ã5ç¹ãå€ãã®ã¯ãªããïŒ8ç¹ã¯å€ãããã©ã9ç¹ãå°ãªãã®ã¯ãªããïŒæšå¥šãšãªããšããããæ°æã¡ãçãŸããããã®ãïŒè§£éã話ããŸãã åæã«ãã©ããªå匷äŒã§ããããããšãã£ãè©±ãæ··ãããŸããäœãšãããçéã«ã·ã¯ãå¯ããŠè©±ãåã£ãŠããå匷äŒã®æ¥œããé°å²æ°ãäœããªããšæããŸããäœã奜ããããããããããããã£ã䟡å€èгã®èŠçŽ ã¯å¶åºŠã»ä»çµã¿ã®èšèšä»¥äžã«è²ãŠã«ãããšãããªã®ã§ã倧åã«æŸã£ãŠãããããšæã£ãŠããŸãã 4. èã®æ ¹æŽ»å ãããŸã§ããããå¶åºŠã»ä»çµã¿ã®æ¹åã§ããããã¯ããèã®æ ¹æŽ»åã¯ãããŸããäŸãã°ãçºè¡šã§ããããªäººãæ¢ãã宿ã€ãã³ããéå¬ãããæ°äººç ä¿®ã«çµã¿èŸŒããšãã£ãããšãããŠããŸãã äŸãã°ãåå ãããããçºè¡šãããããçãã«ã瀟å
ã«ã³ãã¡ã¬ã³ã¹ãéå¬ããŠããŸãã5æã«éå¬ããããæ°äººç ä¿®ã§ã¯èããªããããªè©±ãã§ã¯ããã£ãããŒãã»ãç¥ãæãæŒåºããŠããŸãã ã¡ãã£ãšãããç¥ãæã®ããå匷äŒãéå¬ å
šéšãå
šéšãããªæãã§é 匵ããšå€§å€ã§ããããã«ãªã¢ãŒãã®äžç芳ã«ãªã£ãŠããäºãã®æ°é
ãæãã«ãããªã£ãŠããã®ã§ããç¥ãæã®æŒåºã倧åããªãšæã£ãŠããŸããä»ã¯éšå±ã®ç§»åããªããµã¯ããšå匷äŒã«åå ã§ããŠãããããããªããã§åå ããããšãã§ããã®ã§ç€Ÿå¡ã®åæ°ãåå ããããšããããŸããçã®æ§åãèŠããã®ã¯å®å¿æãçãŸãããšæããŸãã éå¶ãšããŠãæèããŠããããš æœçã®äŸãæããŠããŸããããåœç¶ãç¶æ³æ¬¡ç¬¬ã§æœçãç°ãªããšæããŸãããŸããå¶åºŠã»ä»çµã¿ãšãã£ãããŒãé¢ã§ã®æ¹åå®äŸãäžå¿ã«æããŠããŸããããããããã¡ããšéçšãç¶ããæåã»äŸ¡å€èгãšãã£ããœããé¢ã§æ ¹ä»ãããšãæ¬è³ªçã«å€§äºã ãšæããŸãããã®ããã«ããã©ããã£ãããšãæèããŠããã®ããæžããŠçµããã«ããããšæããŸãã å
ã
ã®æåãæŽ»ãã äœè£ãæã€ äžå¯§ã«ãäžå¯§ã«ã 1. å
ã
ã®æåãæŽ»ãã ã¢ããã¡ã¯ã®ç€Ÿå
å匷äŒã®å Žåã話ããããã話ãããšãã£ãèªäž»æ§ã«æ ¹ãããè²ããããŸãããããã£ãè²ã¯ç°¡åã«ã¯åºæ¥äžãããã貎éãªäŸ¡å€ã ãšæããŸããéå¶ãè¯ãããšæã£ãæ¹åãšããŠããæåãæ®ºããŠããªãããæ§åã®èгå¯ã¯å¿ããªãããã«ãããã§ãã 2. äœè£ãæã€ äŒç€Ÿã§ãã£ãŠããããšãªã®ã§ãå¹æãææãæ±ãããšããã¯ãããŸããå人çã«ãäºæ¥ã€ã³ãã¯ããçã¿åºãäºäŸãçãŸããªãããšæ¥œãã¿ã§ã¯ãããŸããã§ãããæ±ãããäœè£ããªããªããšãçºè¡šã®ããŒãã«ãäžãããåå ãžã®ãã¬ãã·ã£ãŒã倧ãããªããå¶åºŠã®ååšæçŸ©ãäžæçã«ãªããŸãããã«ãªã¢ãŒãã®ä»ãªããããŒã ãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãä¿ãããªãè¯ããšæããããæå³ã§ç¡é§ã楜ããæ¹ãè¯ãã®ããªãšæã£ãŠããŸãã 3. äžå¯§ã«ãäžå¯§ã«ã çµç¹ãå€åãããã«ã¯ãäžå¯§ããå¿
èŠã ãšæããŸããäžå¯§ãšããã®ã¯ã宿
ãèŠãŠè§£æ±ºã®æç«ãŠãèããããšããç¹°ãè¿ãäŒããŠããããšã§ããçµç¹ã«ã¯å€ãã®äººãããŠæãæ¹ã人ãããããªã®ã§ãå
šå¡ãæºç¹ã«ãªãããšã¯ãªãã§ããäŸãã°ãä»å¹Žãã«ãªã¢ãŒãã«èµãåããèŠæãæã£ãŠæè¡ããäŒæ¥ããããšæããŸããäŒç€Ÿã®ããã«è¯ãããšãã£ãŠããããšã ãšæããŸããã ãšããŠããããããã«ããŠè¯ãçç±ã¯ãªããå€åã«é©å¿ããããšã¯è² æ
ã«ãªãã®ã§ãäžå¯§ã«ãäžå¯§ã«è¡ãããšãæèããŠããŸãã ãŸãšã çµç¹éçºã®äžç°ãšããŠã瀟å
å匷äŒã®æ¹åäºäŸããäŒãããŸããã瀟å
å匷äŒã¯ãã¹ãã«ã¢ãããšãã£ãåŽé¢ã ãã§ãªãããäºããç¥ãã·ããžãŒãçã¿åºãã³ãã¥ãã±ãŒã·ã§ã³å¹æããããŸãããŸããä»çµã¿ãããã°ããŸããããã®ã§ã¯ãªãããã®éçšæ¹åã®ãããäžå¯§ã«èªåãã¡ã®æåãšãªããã解決ãé²ããŠããŸãã é¢é£ äžã€äžã€ã®å
·äœçãªæœçãåºå ±ãã€ã³ã¿ãã¥ãŒããŠãããŠããŸãããããã°ãã¡ãããç¬èЧããã ããã°ãšã corpcomn.mobilefactory.jp corpcomn.mobilefactory.jp corpcomn.mobilefactory.jp corpcomn.mobilefactory.jp ææ¥ã¯æçµæ¥ã§ããïŒææ¥ã®èšäºã¯ãCTOAã¢ããã³ãã«ã¬ã³ããŒã¯CTOA代衚çäºã®æŸå²¡åå¿ããã ã¢ããã¡ã¯ã®ã¢ããã³ãã«ã¬ã³ããŒã¯ã id:odan3240 ã§ãããæ¥œãã¿ã«ïŒ
ãã®èšäºã¯ ã¢ãã€ã«ãã¡ã¯ããªãŒ Advent Calendar 2020 23æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ã id:nesh ã§ãã ã¯ããã« ä»åã®èšäºã¯2幎åã®èšäºãšé¢é£ããŠãã¢ãã€ã«ã¢ããªã®ãã¹ããèªååãã話ã§ããéå»ã®èšäº AppiumでAndroidアプリの自動テストをPerlで書いてみた - Mobile Factory Tech Blog ã§ã¯ãPerl + Appium ã䜿ã£ãAndroidã¢ããªã®ãã¹ãã«ã€ããŠæžããŸããã ä»åã®èšäºã«ã¯ãAppium + AWS Device Farm + Jenkins ã䜿ããAndroidã®ã¢ãã€ã«ã¢ããªã®åäœç¢ºèªãè€æ°ç«¯æ«ã«ãããèªååã«ã€ããŠæžããŸãã èæ¯ éçšäžãµãŒãã¹ã®ã¢ããªã«å€æŽãå
¥ããå ŽåãåœãµãŒãã¹ããµããŒããã端æ«ã§ã¢ããªã®åäœç¢ºèªãããã®ãçæ³çã ãšæããŸãã ã³ããçŠåã¯ãäŒç€Ÿã«æ€èšŒçšã®ç«¯æ«ãããããããµããŒããã端æ«ãåé¡ããããããªç«¯æ«ãè€æ°å°ç¢ºä¿ããŠãåäœç¢ºèªãè¡ããããã£ãã§ãã ãããã2æãããã«ãªã¢ãŒãã§åãããã«ãªã£ãŠãããæå
ã«æ€èšŒçšã®ç«¯æ«ã¯ïŒè€æ°å°ïŒãªãç¶æ
ã«ãªã£ãŠããŸãã æè»œã«è€æ°ç«¯æ«ã§ãã¢ãã€ã«ã¢ããªã®ãã¹ãããããã®ã§ãä»åç®ãã€ããã®ã¯ AWS Device Farm ã§ãã AWS Device Farm Device Farm ã¯ãå®éã« Amazon Web Services (AWS) ã«ãããã¹ããããŠããé»è©±ãã¿ãã¬ããã§ãAndroid ã iOSãããã³ãŠã§ãã¢ããªãç©ççã«ãã¹ãããŠããåãã§ããã¢ããªãã¹ããµãŒãã¹ã§ããïŒ AWSå
¬åŒãµã€ã ããåŒçšïŒ ã¢ãã€ã«ã¢ããªã®éçºã«ãããæ§ã
ãªç«¯æ«ã§ã®åäœç¢ºèªã楜ã«ããŠãããAWSã®ãµãŒãã¹ã§ãã ãã®ãµãŒãã¹ã®äœ¿ãæ¹ã¯2ã€ãããŸãã èªåã¢ããªãã¹ã ãªã¢ãŒãã¢ã¯ã»ã¹ã®æäœ ä»åã¯æ§ã
ã®ç«¯æ«ã§ã®åäœç¢ºèªãèªååãããã®ã§ãèªåã¢ããªãã¹ãã䜿ããŸãã èªåã¢ããªãã¹ã äºåæºå Testing mobile apps across hundreds of real devices with Appium, Node.js, and AWS Device Farm | Front-End Web & Mobile ãŸããã£ãŠããããšã¯ãAWS Device Farmäžã®æºåã§ãããäžèšã®ããã°èšäºãåèã«äœæ¥ããŸãã ãã¹ãããã¢ããªãçšæ åäœç¢ºèªãAppium (Node.js) ã®ãã¹ãã§å®è£
AWS Device Farmäžã§èšå®ããèªåãã¹ãã¢ããªãå®è¡ ãã¹ãããã¢ããªãçšæ ãã¹ãããã¢ããªã¯AWS Device FarmãAppiumãçšæããŠããããµã³ãã«ã¢ããªã䜿ãã®ãã§ããŸãããä»åã¯èªåã§äœã£ãHelloWorldã衚瀺ããã¢ããªã䜿ããŸãã GitHub - fadlil/HelloWorld app/outputs âââ app-debug.apk åäœç¢ºèªãAppium (Node.js) ã®ãã¹ãã§å®è£
ãã¹ããããããšã¯ãã¢ããªãèµ·åã§ãããã©ããã ãã«ããŸãã // ãã¹ããã¬ãŒã ã¯ãŒã¯ var expect = require( 'chai' ).expect; // node.js ã§appiumã䜿ã var wd = require( 'wd' ); var driver = wd.promiseChainRemote( { host: 'localhost' , port: 4723 } ); var assert = require( 'assert' ); describe( 'AWSDeviceFarmReferenceAppTest' , function () { before( function () { this .timeout(300 * 1000); return driver.init(); } ); after( function () { console.log( "quitting" ); } ); // ã¢ããªãèµ·åã§ããŠã'Hello World!!' ã衚瀺ããããã¹ã it( 'test_app_is_loaded' , async function () { const element = await driver.elementById( "com.example.nesh.helloworld:id/change" ); expect(element).to.exist; } ); } ); ãã®ãã¹ãããã®ãŸãŸããŒã«ã«ã§å®è¡ãããšå€±æããŸãã driver.init() ã«å¿
èŠãªããã€ã¹ã®æ
å ±ãè¶³ããªãããã§ãã ãã ãAWS Device Farmäžã§å®è¡ãããæããããã®æ
å ±ããããªã«è£å®ãããŸãã ãã®ãã¹ããã¡ã€ã«ãAWS Device Farmã§äœ¿ãããã«ã npm-bundle ãš zipåããå¿
èŠããããŸãã AWS Device Farmäžã§èšå®ããèªåãã¹ãã¢ããªãå®è¡ æ°ãããããžã§ã¯ããäœæ æ°ããrunãäœæããŠãå¿
èŠãªé
ç®ãèšå® ã¢ããªã® *.apk ãã¡ã€ã«ãã¢ããããŒã zipåããããã¹ããã¡ã€ã«ãã¢ããããŒã ããã€ã¹ãéžæ å¿
èŠèšå®ãåããããèªåã¢ããªãã¹ããå®è¡ å¿
èŠãªäœæ¥ã¯å€§äœäžèšã®éãã§ãã ãããŸã§ã®äœæ¥ã§ãã¢ãã€ã«ã¢ããªãè€æ°ç«¯æ«ã§æè»œã«èªåãã¹ãã§ããããã«ãªããŸããã ããããAWS Device Farmäžã®æäœèªäœãæéã«ãªããšæããŸãã ãã®æéãç¡ãããç¶ç¶çã«ãã¹ããåããããšæã£ãŠããã®ã§ãJenkins ã§èªååããããšã«ããŸããã Jenkinsã§èªåå èªååããã®ã¯ã AWS Device Farmäžã§èšå®ããèªåãã¹ãã¢ããªãå®è¡ ã®æäœã§ãã æäœèªäœã¯åçŽã§æéã§ã¯ãªãã®ã§ãããèªåã«ã§ããéšåã¯èªååãããæ°æã¡ã§ãã èªååãããšãã£ãŠããJenkinsã«AWS Device Farmçšã®ãã©ã°ã€ã³ãçšæãããŠãã®ã§ãç°¡åã«èªååã§ããŸãã AWS Device Farm の Jenkins CI プラグイン - AWS Device Farm Jenkinsã§äœ¿ããã©ã°ã€ã³ã¯ aws-device-farm | Jenkins plugin ã§ãã ãã®èšäºã¯äžèšã«çšæãããµã³ãã«ãªããžããªã䜿ã£ãå Žåãèšå®ã®ã¹ã¯ãªãŒã³ã·ã§ãããããã€ã貌ããŸãã Jenkinsã®ãããžã§ã¯ãã®èšå®1 Project ãš Device Pool ã¯AWS Device Farmäžã«èšå®ãããŠããã®ãåç
§ããŸãã Application ã¯ãµã³ãã«ãªããžããªäžã®ã¢ããªãã¡ã€ã«ã®ãã¹ Jenkinsã®ãããžã§ã¯ãã®èšå®2 ä»åã®ãã¹ã㯠Appium (Node.js) ã䜿ãã®ã§ã該åœãã¹ããã¡ã€ã«ã®ãã¹ãå
¥åããŸãã Jenkinsã®ãããžã§ã¯ãã®èšå®3 ãã¹ãç°å¢ã®èšå®ã¯ãAWS Device Farmäžã«æåã§èªåã¢ããªãã¹ããå®è¡ããæã®ãã®ããã®ãŸãŸäœ¿ããŸãã Jenkinsã§ã®èªååãæå ããã§ãJenkinsã§ã®èªååã®ããã®èšå®ãã§ããŠãå®è¡ããŠæåã§ããŸããã 詊ããŠã¿ãææ AWS Device Farm ã®èªåã¢ããªãã¹ãã¯ã¢ããªéçºæã®åäœç¢ºèªã«äŸ¿å© æåã®èšå®ãç°¡åã§ããã¹ãããã¢ããªããããã°ããã«ã§ãã ãã¹ãããã€ã¹ã®èµ·åæéãåèš1,000åãŸã§ç¡æãªã®ã§ãæ°æ¥œã«è©Šãã ã¢ããªéçºæã®ãµããŒã端æ«ã§ã®èµ·å確èªãªã©ã§äœ¿ããã èªååã«é¢ããŠã¯ãã¢ããªã®ãã«ãããã¹ããã¡ã€ã«ã® npm-bundle + zip ãªã©ã®äœæ¥ãèªååããã°çæ³ç æ¥ã
ã®é¢åãªäœæ¥ãèªååããŠãå¿«é©ãªéçºã©ã€ããå
å®ããŸãããã ææ¥ã®èšäºã¯ id:kfly8 ããã§ãïŒ