ãã®èšäºã¯ãRevComm Advent Calender 8æ¥ç®ã®èšäºã§ãã ã¯ããã« ããã«ã¡ã¯ãPBX ããŒã ã®å±±åŽã§ãã RevComm ã§ã¯æ¯é± Tech Talk ãšé¡ããŠç€Ÿå
å匷äŒã宿œãããŠããŸãã ãã®äžã§ Docker ã® hello-world ãšããã€ã¡ãŒãžã®ååšãç¥ããæ©é䜿ã£ãŠã¿ãŸããã $ docker run --rm hello-world Hello from Docker! This message shows that your installation appears to be working correctly. ( snip ) Hello World ã衚瀺ãããŸãããããèªäœã¯ç¹ã«é¢çœã¿ã¯ãããŸããã ãšãããæãã®ã»ãã€ã¡ãŒãžãµã€ãºãå°ãããããã¯ã¡ãã£ãšæ°ã«ãªããŸãã $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 3c2df5585507 4 weeks ago 69 .2MB hello-world latest 46331d942d63 8 months ago 9 .14kB ãšããããšã§èª¿ã¹ãŠã¿ãŸããã äžèº«ãèŠãŠã¿ãã æ®æ®µäœ¿ãã€ã¡ãŒãžã¯ Linux ã®ãŠãŒã¶ãŒã©ã³ããã»ãŒãã®ãŸãŸåããŠããã®ã§ããŸãã¯ã·ã§ã«ã«å
¥ã£ãŠã¿ãŸãã $ docker run -it --rm hello-world /bin/sh docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: " /bin/sh " : stat /bin/sh: no such file or directory: unknown. 倱æããŸãããã ãã®ãµã€ãºãªãåœç¶ sh ã¯å
¥ããªãã®ã§å€±æããã®ã¯åŠ¥åœã§ãã ãããäžèº«ãåãããªãã®ã¯å°ã£ããªãšããã¥ã¢ã«ãçºããŠãããšãdocker image save ãšããã³ãã³ãããããŸããããã®ã³ãã³ãã¯ã€ã¡ãŒãžã tar ball ã«ã§ãããšããã®ã§æ©éãã£ãŠã¿ãŸãã $ mkdir docker-work $ cd docker-work/ $ docker image save hello-world | tar xvf - $ tree --noreport . âââ 42e000e434c92e9a1ddac6cccd9219b2043d53ddf81e9abbb285dc58edea4f79 â âââ VERSION â âââ json â âââ layer.tar âââ 46331d942d6350436f64e614d75725f6de3bb5c63e266e236e04389820a234c4.json âââ manifest.json âââ repositories åãåºããŸãããmanifest.json ãäœããã¡ã¿ããŒã¿ã£ãœãé°å²æ°ãåºããŠããã®ã§ç¢ºèªããŠã¿ãŸãã [ { " Config ": " 46331d942d6350436f64e614d75725f6de3bb5c63e266e236e04389820a234c4.json ", " RepoTags ": [ " hello-world:latest " ] , " Layers ": [ " 42e000e434c92e9a1ddac6cccd9219b2043d53ddf81e9abbb285dc58edea4f79/layer.tar " ] } ] ååãããlayer.tar ããã¡ã€ã«ã·ã¹ãã ã®ã¬ã€ã€ãŒããªãšæ³åã§ããŸããè§£åããŠã¿ãŸãããã $ cd 42e000e434c92e9a1ddac6cccd9219b2043d53ddf81e9abbb285dc58edea4f79/ $ tar xvf layer.tar x hello ããã«ããªãã¡ã€ã«ãåºãŠããŸãããã§ã¯ãããå®è¡ããŠã¿ããš... $ docker run -â rm -it -v $( pwd ) :/work -w /work ubuntu root@6cbf4ec43930:/work# ./hello Hello from Docker! This message shows that your installation appears to be working correctly. ( snip ) Hello World ã衚瀺ãããŸãããã ãšãªããšããã® hello ãã¡ã€ã«ãäœã§ãããæ°ã«ãªããŸãã調ã¹ãŠã¿ãŸãããã root@6cbf4ec43930:/work# apt update && apt install -y file binutils less root@6cbf4ec43930:/work# file hello hello: ELF 64-bit LSB executable, ARM aarch64, version 1 ( SYSV ) , statically linked, stripped root@6cbf4ec43930:/work# objdump -D hello | less static link ãªã®ã§ããã£ãš libc ããªã³ã¯ããŠåäžãã€ããªã§åãããã«ããŠããã®ããªãšæãããããã®å²ã«ã¯ã³ãŒããå°ããã§ãããéã¢ã»ã³ãã«ããŠã¿ãããš objdump ãçºããŠã¿ãŠã strip ãããŠããã®ã§ãªããªãã€ãããã®ããããŸãã ãããŸã§èª¿ã¹ããçããèŠãŠãããã§ããããšèšãèš³ããªããçããéããŠã¿ãŸãã https://github.com/docker-library/hello-world/blob/master/hello.c ãªãã»ã©ãã·ã¹ãã ã³ãŒã«ãçŽæ¥å®è¡ããŠããŸããã ããªãã¡ãhello-world ã€ã¡ãŒãžã§ã¯åäœã§åäœãããã€ããªãèµ·åããŠãããšããããšãããããŸããã äžèº«ãå
¥ãæ¿ããŠã¿ãã äžèº«ãçè§£ã§ããããä»åºŠã¯æžãæããŠã¿ãããªããŸãããããšããããšã§éãã¡ãã»ãŒãžã衚瀺ããŠã¿ãŸãããã ãã«ãç°å¢ãæŽããã®ãé¢åãªã®ã§ãå
ã® hello ãã¡ã€ã«ãæžãæããããšã«ããŸãã root@6cbf4ec43930:/work# apt install bsdmainutils root@6cbf4ec43930:/work# hexdump -c hello | less ( snip ) 0000c20 300 003 _ 326 \n H e l l o f r o m 0000c30 D o c k e r ! \n T h i s m e s 0000c40 s a g e s h o w s t h a t ( snip ) 0x0c30 = 3120 ãã€ã以éãæžãæããã°ããããã§ããããã£ãŠã¿ãŸãããã root@6cbf4ec43930:/work# echo -n ' RevComm ' | dd of =hello bs = 1 seek = 3120 count = 7 conv =notrunc root@6cbf4ec43930:/work# ./hello Hello from RevComm ( snip ) ã¡ãã»ãŒãžãå€ãããŸãããåŸçã¥ããããŠãDocker ãã¹ãã«æ»ããŸãã root@6cbf4ec43930:/work# rm layer.tar root@6cbf4ec43930:/work# tar -cf layer.tar hello root@6cbf4ec43930:/work# rm hello ãããŸã§ã§ã以äžã®ãããªãã£ã¬ã¯ããªæ§æã«ãªã£ãŠããŸãã $ tree --noreport . âââ 42e000e434c92e9a1ddac6cccd9219b2043d53ddf81e9abbb285dc58edea4f79 â âââ VERSION â âââ json â âââ layer.tar âââ 46331d942d6350436f64e614d75725f6de3bb5c63e266e236e04389820a234c4.json âââ manifest.json âââ repositories 倿Žãããã¡ã€ã«ã docker image load ã§åã蟌ã¿ãŸãã ããããªããããã®ãŸãŸã§ã¯ããŸããããŸããã§ãã $ docker image rm hello-world $ tar -c . | docker image load efb53921da33: Loading layer [==================================================>] 10.75kB/10.75kB invalid diffID for layer 0: expected "sha256:efb53921da3394806160641b72a2cbd34ca1a9a8345ac670a85a04ad3d0e3507", got "sha256:695cd43dbd538aae8230019f942d69bc53390dd7710063aae6b58cbb469414e1" sha256 ããã·ã¥ãç°ãªããšèšã£ãŠããŸãããããã layer.tar ãæžãæããã®ã§ããã®ããã·ã¥å€ãåæã§æŽæ°ããå¿
èŠãããããã§ãã layer.tar ã® sha256 ã®å€ãšãå
ã® hello-world ã€ã¡ãŒãžå
èšå®ãã¡ã€ã«ãçºããŠãããšäžèŽããç®æããããŸããã詊è¡é¯èª€ãããšããã以äžã®ããã«æžãæãããšåããŸããã sha256sum layer.tar ã®çµæã§ã46331d(çç¥).json ã® "diff_ids" ãæŽæ°ãã 46331d(çç¥).json ã®ãã¡ã€ã«åããèªåèªèº«ã® sha256 ã®å€ã«å€æŽãã manifest.json ã® "Config" ãã2.ã§å€æŽãããã¡ã€ã«åã«ãã ã§ãã£ãŠã¯ã¯ã¯ã¯ããªããå®è¡ããŠã¿ããš... $ tar -c . | docker image load 695cd43dbd53: Loading layer [==================================================>] 10.75kB/10.75kB Loaded image: hello-world:latest $ docker run --rm hello-world Hello from RevComm (snip) åããŸããïŒ ãŸãšã æåã¯ãªãã Hello World ããšæã£ãŠããŸããããæ¢ã£ãŠã¿ããš Docker ã®ä»çµã¿ã«å¯Ÿããçè§£ãæ·±ãŸããŸãããHello World ãšããã©å¥¥ãæ·±ãã§ããã ãããã« RevComm ã«ã¯ããŸããŸãªããã¯ã°ã©ãŠã³ããæã£ããšã³ãžãã¢ãéãŸã£ãŠããŸããTech Talk ã®ä»ã«ãããŸããŸãªå Žé¢ã§ç¥ããªãæè¡ã«è§ŠãããããŠæ¥åã§ææŠããæ©äŒãæ°å€ããããŸãã ããªãã®ãåå ããåŸ
ã¡ããŠãããŸãïŒ hrmos.co
ãã®èšäºã¯ãRevComm Advent Calender 7 æ¥ç®ã®èšäºã§ãã RevComm ã€ã³ãã©ããŒã æå±ã®å¹³å³¶ã§ããäž»ã«ã¯ã©ãŠã (AWS) ãæ
åœããŠããŸãã ä»åã¯ãæè¿ RevComm ã§å°å
¥ãã AWS Support App in Slack ã«ã€ããŠç޹ä»ããããšæããŸãã AWS Support App in Slack ãšã¯ åææ¡ä»¶ å°å
¥æ¹æ³ IAM Role ãäœæãã Slack channel ãäœæ Slack ãš AWS ã飿ºããã Slack Workspace ã®èªèšŒ Slack channel ãç»é²ãã channel ã« AWS Support App ãæåŸ
ãã ïŒè£è¶³ïŒè€æ°ã® AWS ã¢ã«ãŠã³ãã§å©çšããå Žå äœ¿ãæ¹ ã±ãŒã¹ã®èµ·ç¥š åè AWS Support ããã®åçãžã®å¯Ÿå¿ïŒè¿ä¿¡ / è§£æ±ºïŒ ã±ãŒã¹ã®æ€çŽ¢ Service Quota ïŒäžéç·©åïŒç³è« ãŸãšã AWS Support App in Slack ãšã¯ 2022 幎 8 æ 24 æ¥ã«çºè¡šãããæ¯èŒçæ°ãããµãŒãã¹ã§ãïŒ å
¬åŒããã° ïŒã Slack ã®ãã£ãããéã㊠AWS Support ãžã®åãåãããåçãžã®å¯Ÿå¿ãã§ããããã«ãªããŸãã 以åã¯èšèªã®éžæãã§ããè±èªã§ããã±ãŒã¹ã®èµ·ç¥šãã§ããªãã£ããããå°å
¥ãããã®ã®ç€Ÿå
ã§ãªããªã䜿ã£ãŠããããŸããã§ããã ãšãããæè¿ããã€ã®éã«ã æ¥æ¬èªãéžæã§ãã ããã«ãªã£ãŠããŸããïŒ æ¥æ¬èªè©±è
ã®ãšã³ãžãã¢ã䜿ãäžã§ã®éå£ã 1 ã€ãªããªããŸããã ä»åŸç€Ÿå
ã§ã®ãããªã婿޻çšãæåŸ
ã§ãããã§ãã åææ¡ä»¶ Slack ãå©çšããŠããããš AWS Support ã®ãã©ã³ã Business plan 以äžã§ããããš å°å
¥æ¹æ³ IAM Role ãäœæãã Slack ããã® AWS Support ãžã®æ¥ç¶ãèš±å¯ããããã® IAM RoleããŸã role ã«ã¢ã¿ãããã policy ãäœæããŸãã policy 㯠AWS Support アプリへのアクセスの管理 - AWS Support ãåèã«ã«ã¹ã¿ã ã® policy ãäœæããŠãããã§ãããæ¢ã«ä»¥äžã® AWS Managed Policy ãçšæãããŠããã®ã§ RevComm ã§ã¯ãã¡ããæ¡çšããŸããã AWSSupportAppFullAccess AWSSupportAppReadOnlyAccess ã±ãŒã¹ã®é²èЧã ãã§ãªããã±ãŒã¹ã®èµ·ç¥šãè¿ä¿¡ãããå Žå㯠AWSSupportAppFullAccess ãã¢ã¿ããããå¿
èŠããããŸãã role ã® ä¿¡é Œé¢ä¿ã«ã¯ä»¥äžãæå®ããŸãã { " Version ": " 2012-10-17 ", " Statement ": [ { " Sid ": "", " Effect ": " Allow ", " Principal ": { " Service ": " supportapp.amazonaws.com " } , " Action ": " sts:AssumeRole " } ] } Slack channel ãäœæ Slack ã§ AWS Support App ãå©çšãã channel ãäœæããŸãã channel 㯠public/private ã©ã¡ãã§ãå©çšã§ããŸãããã»ãã¥ãªãã£ã®èгç¹ããã private channel ãæ¡çšãé¢ä¿è
ã®ã¿ãæåŸ
ããŠäœ¿ãããšãæšå¥š ãããŠããŸãã Slack ãš AWS ã飿ºããã Slack Workspace ã®èªèšŒ AWS Management Console ïŒä»¥äžãã³ã³ãœãŒã«ïŒãã Support Center ã«ã¢ã¯ã»ã¹ããå·Šã¡ãã¥ãŒãããAWS Support App in SlackããéžæããŸãã ãAuthorize workspaceããã¯ãªãã¯ãããšãèªèšŒç»é¢ã«é·ç§»ããã®ã§ãAllowããã¯ãªãã¯ããŸãã Slack channel ãç»é²ãã å·Šã¡ãã¥ãŒãã Slack Configuration ãéžæããŸãã ããã§ Slack äžã§è¡šç€ºããã¢ã«ãŠã³ãåãå€ããããšãã§ããŸãã ãAdd channelããã¿ã³ãã¯ãªãã¯ã㊠channel ã®ç»é²äœæ¥ãããŸãã Slack workspaceã Slack channelã Permissions (IAM Role) ã¯ããããäºåã«äœæãããã®ãéžæããŸãã private channel ã䜿ãå Žå㯠Channel ID ãå¿
èŠã«ãªããŸãã Channel ID 㯠channel ã®ãªã³ã¯ URL ã®æåŸã®ã¹ã©ãã·ã¥ä»¥éã®æååã§ã C01234A5BCD ã®ãããªåœ¢åŒã®ãã®ã§ãã éç¥èšå®ïŒNotificationsïŒã¯ãµããŒãã®å©çšç¶æ³ã«å¿ããŠéžæããŠãã ããã RevComm ã¯ä»ã®ãšããåãåãããé »çºãããããªç¶æ³ã§ã¯ãªãããããšãããããã¹ãŠã®éç¥ã ON ã«ããŠããŸãã channel ã« AWS Support App ãæåŸ
ãã äœæãã Slack channel ã« AWS Support app ãæåŸ
ããå¿
èŠããããŸãã channel å
ã§ /invite @awssupport ãå
¥åããŸãã ïŒè£è¶³ïŒè€æ°ã® AWS ã¢ã«ãŠã³ãã§å©çšããå Žå è€æ°ã®AWS ã¢ã«ãŠã³ãã§ AWS Support App in Slack ãå©çšããå Žåã ã¢ã«ãŠã³ãããšã« channel ãäœæãã 1ã€ã® channel ã§è€æ°ã¢ã«ãŠã³ãã«å¯Ÿå¿ããã ãšããéžæè¢ãèããããŸãããRevComm ã§ã¯åŸè
ãæ¡çšããŠããŸãã 1 ã€ã® channel ã§è€æ°ã¢ã«ãŠã³ãã«å¯Ÿå¿ãããããã«ã«ã¯ãããããã®ã¢ã«ãŠã³ãã§ IAM Role ã®äœæ Slack WorkSpace ã®èªèšŒ Slack channel ã®ç»é² ãå¿
èŠã«ãªããŸãã è€æ°ã®ã¢ã«ãŠã³ãã§èšå®ããããšãäŸãã°ã±ãŒã¹èµ·ç¥šã®éã«ãã«ããŠã³ã§ã¢ã«ãŠã³ããéžæã§ããããã«ãªããŸãã äœ¿ãæ¹ AWS ãšé£æºããã channel å
ã§ã以äžã®ã³ãã³ãããã£ããæ¬ã«å
¥åããŠæäœããŸãã ã±ãŒã¹èµ·ç¥š: /awssupport create ãŸã㯠/awssupport create-case ã±ãŒã¹æ€çŽ¢: /awssupport search ãŸã㯠/awssupport search-case Service Quota ïŒäžéç·©åïŒç³è«: /awssupport quota ãããã®ã³ãã³ãããã£ããæ¬ã«å
¥åãããšã察å¿ããå
¥åãã©ãŒã ã衚瀺ãããŸãã ã±ãŒã¹ã®èµ·ç¥š /awssupport create ããã£ããæ¬ã«å
¥åãéä¿¡ãããšãã±ãŒã¹èµ·ç¥šçšã®ã¢ãŒãã«ã衚瀺ãããŸãã æç€ºã«ãããã£ãŠ 3 ããŒãžã«ãããå¿
èŠäºé
ãåããŠãããŸãïŒã³ã³ãœãŒã« ã§ã®èµ·ç¥šäœæ¥ã®å Žåãšå
šãåãå
容ã§ãïŒã ã¢ãŒãã«ã® 3 ããŒãžç®ã« ãSelect Languageã ã®ãã«ããŠã³ãããã®ã§ãæ¥æ¬èªã§çšä»¶ãæžããå Žåã¯ãæ¥æ¬èªããéžæããŠãã ããã æåŸãŸã§å
¥åããŠãReviewããã¯ãªãã¯ãããšã以äžã®ããã«å
¥åå
容ãã¡ãã»ãŒãžãšããŠè¡šç€ºãããŸãã ä¿®æ£ããå Žåã¯ãEditããæŒããšå床ã¢ãŒãã«ãéããç·šéããããšãã§ããŸãã 起祚ãåããããå Žåã¯ããã®ã¡ãã»ãŒãžèªäœãåé€ããŠãã ããã ã¹ã¯ãªãŒã³ã·ã§ãããªã©ã®ãã¡ã€ã«ãæ·»ä»ããå Žå㯠ãAttach fileããã¯ãªã㯠ãã£ããæ¬ã§ã+ããã¿ã³ãããã¡ã€ã«ãæ·»ä» @AWS Support ã®ã¡ã³ã·ã§ã³ãã€ããŠéä¿¡ ãããšããã¡ã€ã«ãã¢ããããŒããã Review ã®å
å®¹ãæŽæ°ãããŸãã å
容ã«åé¡ããªããã°ãCreate caseããã¯ãªãã¯ããŸãã ã±ãŒã¹ã®èµ·ç¥šã«æåãããã以äžã®ãããªéç¥ãå±ããŸãã 以éãåœè©²ã±ãŒã¹ã«é¢ãããµããŒããšã®ãããšãã¯ãã®ã¹ã¬ããã«è¿œå ã§éç¥ãããŸãã åè ã³ã³ãœãŒã«ãã起祚ããå Žåã§ã channel ã«éç¥ãå±ããŸãã èšèªã§ English ãéžæããå Žåã¯ãªãã¬ãŒã¿ãŒãšã®ãããšãã« Live Chat ãéžæã§ããSlack äžã§çŽæ¥ãªãã¬ãŒã¿ãšãã£ãããã§ããããã§ãïŒãã¡ãã¯ãŸã 詊ããŠããŸããïŒã AWS Support ããã®åçãžã®å¯Ÿå¿ïŒè¿ä¿¡ / è§£æ±ºïŒ AWS Support ããã®éç¥ã«ã¯ãSee detailsãã®ãã¿ã³ãèšçœ®ãããŠããŸãã ãããã¯ãªãã¯ãããšãã±ãŒã¹ã®è©³çްãã¡ãã»ãŒãžãšããŠè¡šç€ºãããŸãã ã¡ãã»ãŒãžäžéšã«ã¯ä»¥äžã®ããã«ãã¿ã³ãèšçœ®ãããŠããŸãã ãReplyããæŒããšè¿ä¿¡çšã®ã¢ãŒãã«ã衚瀺ãããŸãã ãResolveããŸãã¯ãReopenããæŒããšã±ãŒã¹ã解決ãŸãã¯åéã§ããŸãã ã±ãŒã¹ã®æ€çŽ¢ /awssupport search ããã£ããæ¬ã«å
¥åãéä¿¡ãããšãã±ãŒã¹æ€çŽ¢ã®ãã©ãŒã ã衚瀺ãããŸãã æ€çŽ¢æ¡ä»¶ãå
¥åããSearchããæŒããšçµæã衚瀺ãããŸãã æ€çŽ¢çµæã®åã±ãŒã¹ã®ãSee detailsããæŒããšè©³çްã衚瀺ãããåçãžã®è¿ä¿¡ãã±ãŒã¹ã®è§£æ±ºãŸãã¯åéãã§ããŸãã Service Quota ïŒäžéç·©åïŒç³è« /awssupport quota ããã£ããæ¬ã«å
¥åãéä¿¡ãããšãService Quota ç³è«çšã®ã¢ãŒãã«ã衚瀺ãããŸãã ããã©ã«ãã»çŸåšã®èšå®å€ãäž¡æ¹ãšã衚瀺ãããã®ã䟿å©ã§ãã å¿
èŠäºé
ãèšå
¥ãçµããããSubmitããæŒããŠç³è«å®äºã§ãã ãŸãšã ä»å㯠AWS Support App in Slack ã®å°å
¥æ¹æ³ãšäœ¿ãæ¹ã«ã€ããŠç޹ä»ããŸããã ã³ã³ãœãŒã« ã§ã®æäœãšæ¯èŒããŠæããã¡ãªãããšããŠã¯ ãã°ã€ã³ã®æéãçãã ïŒãã©ãŠã¶ã§çºçããïŒç»é¢é·ç§»æã®ããŒãæéããªã or äœæã§å°ãªã ã±ãŒã¹èµ·ç¥šè
以å€ã®é¢ä¿è
ã§ããµããŒãããã®åçãããããšã«æ°ã¥ãããã ã±ãŒã¹ãæ¢ãéã« Slack æ€çŽ¢ã䜿ã£ãŠããŒã¯ãŒãæ€çŽ¢ãã§ãã /awssupport search ã§ã¯ã§ããªã ãšãã£ããšããã§ããããã äžæ¹ã§ãé害ãäžå
·åã®çºçæã«ãµããŒãã«åãåãããéã¯ãã³ã³ãœãŒã«ã§ãªãœãŒã¹ã® ID ã調ã¹ã€ã€æç« ãæžãããšãå€ãã§ãã ãã®å Žåãçµå±ã³ã³ãœãŒã«ã«ãã°ã€ã³ãããããããã°ã€ã³ã®æéãçããããã¡ãªããã«ãªãç¶æ³ã¯éå®çãããããŸããã å°å
¥ãããŠãªããšããã瀟å
ã§æŽ»çšãããŠããšã¯ãŸã ãŸã èšãé£ãç¶æ³ã§ããããã䟿å©ãªäœ¿ãæ¹ã暡玢ããŠãå€ãã®ç€Ÿå
ã®ãšã³ãžãã¢ã«äœ¿ã£ãŠããããããã«ããŠããããã§ãã
ã¯ããã« ãã®èšäºã¯ 2022 幎㮠RevComm ã¢ããã³ãã«ã¬ã³ã㌠6 æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãæ ªåŒäŒç€ŸRevCommã§ç€Ÿå
åãã·ã¹ãã éçºã»éçšãæ
åœããŠãã Machida Kensuke ã§ãã ã¿ãªãã㯠GCP ãå©çšãããµãŒãã¹ã®éçºããããããšã¯ãããŸããïŒRevComm ã§ã¯åºæ¬çã«ã¯ã©ãŠãåºç€ãšã㊠AWS ãæ¡çšããŠããŸãããäžéšã§ã¯ GCP ãæ¡çšããŠããŸããç§ã¯ããŒã¿åºç€ãšã㊠BigQuery ãå©çšããŠãããµãŒãã¹ã®éçºã«åå ããŸããã BigQuery ã¯ä»ã®ããŒã¿ãŠã§ã¢ããŠã¹ãšæ¯èŒããŠãã³ã¹ãå¹çãè¯ã課é圢æ
ã§ã瀟å
ã·ã¹ãã ã§ãé話æèšç®ãããŒã¿åæçã®çšéã§äœ¿çšããŠããŸãã ç°å¢æ§ç¯ã«å¿
èŠãªãã®ãå€å²ã«ããããããéçºã®å°å
¥éšåã§ãšãŠãæããããŸããã ãã®çµéšãããåã㊠GCP ã BigQuery ãè§Šãæ¹ã§ãããã«çæã§ããããã«ãªã£ãããããªãšæãããã®èšäºãæžãããšã«ããŸããã æé åææ¡ä»¶ æºå ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªãã€ã³ã¹ããŒã« Cloud Platform ãããžã§ã¯ããäœæ èªèšŒèšå® ã¯ã©ã€ã¢ã³ããåæå ããŒã¿ã»ãããäœæ ããŒãã«ãäœæ BigQuery APIã䜿çšããããŒãã«ã® CRUD æäœ ãã£ãŠã¿ã ã§ã¯æ©éãã£ãŠãããŸãããïŒ åææ¡ä»¶ Python ã¯ã€ã³ã¹ããŒã«æžã¿ãšããŸãã æºå BigQuery API ã® Cloud ã¯ã©ã€ã¢ã³ã ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãã å
¬åŒã®ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª ã䜿çšããŸãã â»2022/12/06çŸåšã察å¿ã® Python ããŒãžã§ã³ã¯3.7ïœ3.10 ã§ãã pip install google-cloud-bigquery Cloud Platform ãããžã§ã¯ããäœæ ã ãããžã§ã¯ããäœæ ããããããžã§ã¯ããäœæããŸãã ãããžã§ã¯ãã§ã¯ãAPI ã®ç®¡çã課éã®æå¹åãå
±åç·šéè
ã®è¿œå ãšåé€ãGoogle Cloud ãªãœãŒã¹ã«å¯Ÿããæš©éã®ç®¡çãªã©ãè¡ããŸãã èªèšŒèšå® Python ããäœæãããããžã§ã¯ããž API ã¢ã¯ã»ã¹ã§ããããã«èªèšŒãèšå®ããŸãã API ãžã®ã¢ã¯ã»ã¹ã®æå¹å ããAPI ã¢ã¯ã»ã¹ãæå¹åããŸãã Google Cloud ã®ããŒã ããŒãž ã®æé ã«ãããã£ãŠããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãã Google Cloud ã®ããŒã ããŒãž ã®æé ã«ãããã£ãŠããµãŒãã¹ã¢ã«ãŠã³ãããŒãäœæã㊠service-account-key-file.json ãããŠã³ããŒãããŸãããã® json ãã¡ã€ã«ã GCP ã®èªèšŒã«äœ¿çšããŸãã service-account-key-file.json ã¯ã©ã€ã¢ã³ããåæå èšå®ãå®äºããã®ã§ãå®éã« Python ãã BigQuery ãåãããŠã¿ãŸãããïŒ ãŸãã¯ãäžèšã®ã³ãã³ããå®è¡ããŠãã¡ã€ã«ãäœæããŸãã touch create_dataset.py äœæãã create_dataset.py ã«ã©ã€ãã©ãªã®ã€ã³ããŒããšèªèšŒæ
å ±ã䜿çšã㊠BigQuery ã¯ã©ã€ã¢ã³ããåæåããŸãã from google.cloud import bigquery from google.oauth2 import service_account # åã¹ãããã§ããŠã³ããŒããã service-account-key-file.jsonã®ãã«ãã¹ãæå® key_path = "/path/to/service-account-key-file.json" credentials = service_account.Credentials.from_service_account_file(key_path, scopes=[ "https://www.googleapis.com/auth/cloud-platform" ]) client = bigquery.Client(credentials=credentials, project=credentials.project_id) ä»åã¯ã google.oauth2.service_account.Credentials.from_service_account_file ã䜿çšããŠããµãŒãã¹ã¢ã«ãŠã³ãããŒãã¡ã€ã«ã«ããèªèšŒãè¡ããŸãã ããŒã¿ã»ãããäœæ 次ã«ãããŒã¿ã»ãããäœæããŸãã BigQuery ã«ãããããŒã¿ã»ãããšã¯ãããŒãã«ãäœæããããã«å¿
èŠãªç®±ãã®ãããªãã®ã§ãã åè: ããŒã¿ã»ããã®æŠèŠ | Google Cloud dataset_id = "{}.sample_dataset" .format(client.project) dataset = bigquery.Dataset(dataset_id) dataset.location = "asia-northeast1" client.create_dataset(dataset) åè¿°ããã¯ã©ã€ã¢ã³ãã®åæåãå«ãããœãŒã¹ã³ãŒãå
šäœã¯äžèšã®ãšããã§ãã from google.cloud import bigquery from google.oauth2 import service_account def init_client () -> bigquery.Client: key_path = "/path/to/service-account-key-file.json" credentials = service_account.Credentials.from_service_account_file( key_path, scopes=[ "https://www.googleapis.com/auth/cloud-platform" ] ) return bigquery.Client(credentials=credentials, project=credentials.project_id) def create_dataset (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = bigquery.Dataset(dataset_id) dataset.location = "asia-northeast1" client.create_dataset(dataset) if __name__ == "__main__" : client = init_client() create_dataset(client) Python ã³ãã³ãããäžèšã®ã³ãŒããå®è¡ããŸãã $ python3 create_dataset.py Cloud ã³ã³ãœãŒã« ããäœæããããŒã¿ã»ããã確èªããŠã sample_dataset ãšããããŒã¿ã»ãããäœæãããŠããã° OK ã§ãã ããŒã¿ã»ããæ
å ± ããŒãã«ãäœæ 次ã«ãäœæããããŒã¿ã»ããã®äžã«ããŒãã«ãäœæããŸãã ããŒãã«ã¯ãå
ã»ã©äœæããããŒã¿ã»ãã ID ãšã¹ããŒããå®çŸ©ããããšã§äœæã§ããŸãã from google.cloud import bigquery from google.oauth2 import service_account def create_table (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) schema = [ bigquery.SchemaField( "name" , "STRING" , mode= "REQUIRED" ), bigquery.SchemaField( "age" , "INTEGER" , mode= "NULLABLE" ), ] table = bigquery.Table(table_id, schema=schema) client.create_table(table) if __name__ == "__main__" : # init_client() ã¯åè¿°ã®ãã®ãäœ¿çš client = init_client() create_table(client) äžèšã®ã³ãŒããå®è¡ããŠãCloud ã³ã³ãœãŒã«ãã sample_table_name ãšããååã®ç©ºããŒãã«ãäœæãããŠããã° OK ã§ããå®çŸ©ããã¹ããŒããèšå®ãããŠããŸãã ããŒãã«æ
å ± BigQuery APIã䜿çšããããŒãã«ã® CRUD æäœ 空ã®ããŒãã«ãäœæã§ãããšããã§ãããŒãã«äžã®ã¬ã³ãŒãã CRUD æäœããŠã¿ãŸãã ããŒã¿ã®ç»é²ïŒCreateïŒ ãŸãã¯ããŒã¿ã®ç»é²ããã æ¹æ³ã¯è²ã
ãããŸãããä»å㯠Python ã§ãã䜿çšããã Pandas DataFrame ã®ããŒã¿ãããŒãã«ã«ç»é²ããŸãã åè: ããŒãã«ããŒã¿ã®ç®¡ç | Google Cloud ããŒã¿ã®ç»é²ã¯ãå
ã»ã©äœæããããŒãã«ã®ã¹ããŒãã job_config ã«å®çŸ©ããããšã§è¡ããŸããBigQuery ã®ãžã§ããšã¯ãããŒã¿ã®èªã¿èŸŒã¿ãããŒã¿ã®ãšã¯ã¹ããŒããããŒã¿ã®ã¯ãšãªãããŒã¿ã®ã³ããŒãªã©ãBigQuery ããŠãŒã¶ãŒã«ä»£ãã£ãŠå®è¡ããã¢ã¯ã·ã§ã³ã®ããšã§ãã åè: BigQuery ãžã§ãã®æŠèŠ | Google Cloud from google.cloud import bigquery from google.oauth2 import service_account def create_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) schema = [ bigquery.SchemaField( "name" , bigquery.enums.SqlTypeNames.STRING, mode= "REQUIRED" ), bigquery.SchemaField( "age" , bigquery.enums.SqlTypeNames.INTEGER, mode= "NULLABLE" ), ] job_config = bigquery.LoadJobConfig(schema=schema) dataframe = pd.DataFrame( [ { "name" : "Machida" , "age" : 2 , }, { "name" : "âKensukeâ" , "age" : 5 , }, ] ) job = client.load_table_from_dataframe(dataframe, table_id, job_config=job_config) job.result() if __name__ == "__main__" : client = init_client() create_data(client) äžèšã®ã³ãŒããå®è¡ããŠãCloud ã³ã³ãœãŒã«ããäœæããããŒãã« sample_table_name ã« 2 è¡ 2 åã®ã¬ã³ãŒããäœæãããŠããã° OK ã§ãã ããŒãã«ã®ãã¬ãã¥ãŒ ããŒã¿ã®ååŸïŒReadïŒ ç¶ããŠãããŒã¿ã®ååŸã§ãã BigQuery ã§ã¯æšæº SQL ã«ããã¯ãšãªå®è¡ãå¯èœã§ãã ããŒã¿ã®ååŸã¯ãSELECT å¥ã䜿çšã㊠BigQuery ã¯ã©ã€ã¢ã³ã ã©ã€ãã©ãªã®ã¯ãšãªãžã§ãã§ååŸããŸãã å
ã»ã©äœæãã {"name": "Machida", "age": 2} ãš {"name": "Kensuke", "age": 5} ã® 2 ã¬ã³ãŒããååŸããŸãã pd.to_dataframe() ã¡ãœããã䜿çšãããš Pandas DataFrame ã®ããŒã¿ãšããŠååŸã§ããŸãã from google.cloud import bigquery from google.oauth2 import service_account def read_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) query = f """ SELECT * FROM `{table_id}` LIMIT 2; """ dataframe = ( client.query(query) .result() .to_dataframe( create_bqstorage_client= True , ) ) print (dataframe) if __name__ == "__main__" : client = init_client() read_data(client) äžèšã®ã³ãŒããå®è¡ããŠã {"name": "Machida", "age": 2} ãš {"name": "Kensuke", "age": 5} ã® Pandas DataFrame åããŒã¿ãååŸã§ããŠããã° OK ã§ãã ããŒã¿ã®ååŸ ããŒã¿ã®æŽæ°ïŒUpdateïŒ ç¶ããŠãããŒã¿ã®æŽæ°ã§ããããŒã¿ã®æŽæ°ã¯ UPDATE å¥ã䜿çšããã¯ãšãªãžã§ãã䜿çšããŸãã å
ã»ã©äœæãã "name": "Machida", "age": 2 ã¬ã³ãŒãã® name ã Yamada ã«æŽæ°ããŸãã from google.cloud import bigquery from google.oauth2 import service_account def update_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) query = f """ UPDATE `{table_id}` SET name = "Yamada" WHERE name = "Machida"; """ client.query(query).result() if __name__ == "__main__" : client = init_client() update_data(client) äžèšã®ã³ãŒããå®è¡ããŠãCloud ã³ã³ãœãŒã«ãã sample_table_name ããŒãã«ã® {"name": "Machida", "age": 2} ã¬ã³ãŒãã {"name": "Yamada", "age": 2} ã¬ã³ãŒãã«æŽæ°ãããŠããã° OK ã§ãã ããŒã¿ã®åé€ïŒDeleteïŒ æåŸã¯ãããŒã¿ã®åé€ã§ããããŒã¿ã®åé€ã¯ DELETE å¥ã䜿çšããã¯ãšãªãžã§ãã䜿çšããŸãã å
ã»ã©å€æŽãã "name": "Yamada", "age": 2 ã¬ã³ãŒããåé€ããŸãã from google.cloud import bigquery from google.oauth2 import service_account def delete_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) query = f """ DELETE FROM `{table_id}` WHERE name = "Yamada"; """ client.query(query).result() if __name__ == "__main__" : delete_data(client) äžèšã®ã³ãŒããå®è¡ããŠãCloud ã³ã³ãœãŒã«ãã sample_table_name ããŒãã«ã® "name": "Yamada", "age": 2 ãåé€ãããŠããã° OK ã§ãã æåŸã« ãããã§ãããïŒ æ¬èšäºã§ã¯ã Python ãš BigQuery ã䜿çšããéçºã®å§ãæ¹ãšåºæ¬çãªããŒãã«æäœãèšè¿°ããŸãããæ¬èšäºã Python ãš BigQuery ã䜿çšããéçºãå§ããæ¹ã®äžå©ãšãªãã°å¹žãã§ãã
ãã®èšäºã¯ãRevComm Advent Calender 5æ¥ç®ã®èšäºã§ãã RevComm ã®æžè°·ãšãããŸããMiiTel Phone Mobile ã®ããã¯ãšã³ãã E2E ãã¹ããªã©ãäž»ã«æ
åœããŠããŸãã ãããšã¯å¥ã«ãTechTalk ïŒãšã³ãžãã¢äž»äœã®æè¡å
±æã®å ŽïŒ éå¶ã«ã 2021 幎 8 æé ããåå ããŠããŸãã ä»å㯠TechTalk éå¶äŒç»ãšã㊠RevComm ã®ãšã³ãžãã¢ã¡ã³ããŒããã¢ã³ã±ãŒãã§åéãã VSCode ããããæ¡åŒµæ©èœã®äžãã 10 ä»¶ãéžãããã£ãŠã玹ä»ãããŠããã ããŸãã ã³ãŒãã£ã³ã°è£å© Code Spell Checker - ã¹ãã«ãã§ãã«ãŒ Error Lens - ãšã©ãŒè©²åœè¡ã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺 indent-rainbow - ã€ã³ãã³ãã®è²åã Python postfix completion - Python çåŸçœ®ãã³ãã¬ãŒã ãã¥ãŒã¯ãŒã»ãšãã£ã¿ãŒ audio-preview - é³å£°ãã¡ã€ã«ãã¥ãŒã¯ãŒ Rainbow CSV - CSV ãã¥ãŒã¯ãŒïŒ SQL ã©ã€ã¯å®è¡ç°å¢ Git Graph - Git å±¥æŽãã¥ãŒã¯ãŒ ã¡ã¢ Bookmarks - ã³ãŒãã®æå®è¡ã«ããã¯ããŒã¯ã远å open Junkfile - æå®æ¡åŒµåã®ãã³ãã©ãªãã¡ã€ã«ãã¯ã³ã³ãã³ãã§äœæ çªå€ç·š vscode-pets - VSCode å
ã§é£Œããããã ãããã« ã³ãŒãã£ã³ã°è£å© Code Spell Checker - ã¹ãã«ãã§ãã«ãŒ Code Spell Checker ID: streetsidesoftware.code-spell-checker ã¹ãã«ãã§ãã¯ãè¡ãæ¡åŒµæ©èœã§ããã³ãŒããã³ã¡ã³ãã«ã¿ã€ããã¹ããã£ãå Žåã«äžç·ãåŒãããŸãã PR ãªã©ã§ææãåãããšã¡ãã£ãšæ¥ããããã®ã§ãäºåã«ãã§ãã¯ãå
¥ãã®ã¯å¬ããã§ããã æšèŠè
ããããã¿ã€ãããªããªãïŒããšå匷ãã³ã¡ã³ããããã ããŸããã ãã ãããã§ãã¯å¯Ÿè±¡ã®æååãå¥ã®æå³ããã€å Žåã«ã¯ææãããªãã®ã§ããã¯ã人ã®ç®ãéèŠã«ãªã£ãŠããŸãã Error Lens - ãšã©ãŒè©²åœè¡ã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺 Error Lens ID: usernamehw.errorlens ãšã©ãŒè©²åœè¡ã«ãšã©ãŒã¬ãã«ïŒãšã©ãŒãèŠåãªã©ïŒãšãšã©ãŒã¡ãã»ãŒãžãæç»ããŠãããæ¡åŒµæ©èœã§ãã ãšã©ãŒããšãŠãèŠããã衚瀺ãããŸãã®ã§ãèŠèœãšããåçã«æžããŸãã çºè¡šäžã«ãæ©éå°å
¥ããŠã¿ãã¡ã³ããŒãããããæãããšããã³ã¡ã³ããããã ããŠããŸãã indent-rainbow - ã€ã³ãã³ãã®è²åã indent-rainbow ID: oderwat.indent-rainbow ã€ã³ãã³ãããšã«æ®µãè²åãããŠãããæ¡åŒµæ©èœã§ããPython ã YAML ãªã©ãã€ã³ãã³ããæå³ããã€èšèªã«ã¯éåžžã«ãããããæ©èœã§ãã è²ã®è¡šç€ºã®ä»æ¹ã¯ã©ã€ã³ïŒåŒçšç»åå·ŠåŽïŒãšèæ¯è²ïŒåŒçšç»åå³åŽïŒããéžã¶ããšãã§ããŸãã çºè¡šäžã«ãäœåãã®ã¡ã³ããŒãæ©éå°å
¥ããŠãçŽ æµïŒããšææ³ãããã ããŠããŸãã Python postfix completion - Python çåŸçœ®ãã³ãã¬ãŒã Python postfix completion ID: filwaline.vscode-postfix-python 倿°ã®åŸã«ãããã§åŠçãå
¥åãããšãã³ãã¬ãŒãã«åŸã£ãŠæ§æãè£å®ããŠãããããããããåŸçœ®ãã³ãã¬ãŒããæ©èœæ¡åŒµæ©èœã§ããïŒ åè ïŒ ç°¡åãªåŒãå
¥åããéã«ã«ãŒãœã«ãååŸã«ç§»åãããå¿
èŠããªããªããŸãã ãµãžã§ã¹ãæ©èœããããŸãã®ã§ã該åœãã倿°ã«å¯ŸããŠé©çšã§ãããã³ãã¬ãŒããèŠã€ããããã§ãã ãã¥ãŒã¯ãŒã»ãšãã£ã¿ãŒ audio-preview - é³å£°ãã¡ã€ã«ãã¥ãŒã¯ãŒ audio-preview ID: sukumo28.wav-preview é³å£°ãæ±ãããšã®å€ã RevComm ãããããããæ¡åŒµæ©èœã§ããVSCode äžã§é³å£°ã®æ³¢åœ¢ã確èªããªããåçããããšãã§ããŸãã æšèŠè
ããã¯ããµãŒããŒäžã®é³å£°èãã®ã«è¶
䟿å©ãªã®ã§ã PBX ãš Reseach ã®ã¡ã³ããŒã¯å
šå¡ã€ã³ã¹ããŒã«ããšããŠãã ããïŒããšããç±çãªã³ã¡ã³ããããã ããŸããã wavãmp3 ã aac ãªã©ã«ã察å¿ããŠããŸãã Rainbow CSV - CSV ãã¥ãŒã¯ãŒïŒ SQL ã©ã€ã¯å®è¡ç°å¢ Rainbow CSV ID: mechatroner.rainbow-csv CSV ãã¥ãŒã¯ãŒã®æ¡åŒµæ©èœã§ããåå¥ã«è²åãããŠè¡šç€ºããããSQL ã©ã€ã¯ãªã¯ãšãªãå®è¡ããŠè©²åœè¡ã®ã¿ãæœåºãããããããšãã§ããŸãã æšèŠè
ããã¯ãã¡ãã£ãšãã調æ»ã«äŸ¿å©ãSQLã«æ¯ã¹ãŠã§ããªãããšããããŸãããGROUP BY ãšãã§ããŸããããšã³ã¡ã³ããããã ããŸããã SQL ãå®è¡ããããã«ã¯ CSV ãã¡ã€ã«ã®ãšã³ã³ãŒãã UTF-8 ã«ããå¿
èŠããããŸãã Git Graph - Git å±¥æŽãã¥ãŒã¯ãŒ Git Graph ID: mhutchie.git-graph Git ã®å±¥æŽãã°ã©ãã§ç¢ºèªã§ããGit æäœãè¡ããæ¡åŒµæ©èœã§ãã æšèŠè
ããã¯ãã³ãããå±¥æŽã»ãã©ã³ãç¶æ³ãæè»œã«ã°ã©ãã§èŠãããã®ã§ãæ°ã«å
¥ãã§ãããšã³ã¡ã³ããããã ããŠããŸãã 該åœã³ãããã®ã³ãŒãã VSCode äžã§å€æŽãæ¯èŒã§ãããããã©ã³ãã«å¯Ÿããæäœãè¡ããŸãã çè
ã¯ãã©ã³ãåãç°¡åã«ã³ããŒã§ããæ©èœãå°å³ã«ãæ°ã«å
¥ãã§ãã ã¡ã¢ Bookmarks - ã³ãŒãã®æå®è¡ã«ããã¯ããŒã¯ã远å Bookmarks ID: alefragnani.Bookmarks ç¹å®è¡ã«å¯ŸããŠããã¯ããŒã¯ãä»ããããæ¡åŒµæ©èœã§ãã æšèŠè
ããã¯ã忥ãŸã§ã®äœæ¥ç®æããã€ã³ããªã©ã bookmark ã§ããŠãã©ãã§äœããã£ãããæç¢ºã«ãªãããšã³ã¡ã³ããããã ããŠããŸãã ããã¯ããŒã¯ã«ã¯ã©ãã«ãä»ããããšãã§ããŸãã®ã§ãã©ããã£ãæå³ã§ä»äžããã®ããåŸã§èŠè¿ãã®ãç°¡åã§ãã open Junkfile - æå®æ¡åŒµåã®ãã³ãã©ãªãã¡ã€ã«ãã¯ã³ã³ãã³ãã§äœæ open Junkfile ID: hidenba.open-junkfile æ¥æïŒæå®æ¡åŒµåã®ãã³ãã©ãªãã¡ã€ã«ãç°¡åã«äœããæ¡åŒµæ©èœã§ããã¡ãã£ãšããèŠãæžããã¹ã¯ãªãããªã©ã«äŸ¿å©ã§ããã ãã¡ãã¯çºè¡šäžã«ã¡ã³ããŒããã³ã¡ã³ãã§æããŠããã ããŸããã çªå€ç·š vscode-pets - VSCode å
ã§é£Œããããã vscode-pets ID: tonybaloney.vscode-pets VSCode å
ã§ãããããªçš®é¡ã®ãããã飌ãããšãã§ããæ¡åŒµæ©èœã§ãã æšèŠè
ããã¯ãããŒã«ãæããŠéã¶ããšãåºæ¥ãŸãããšã³ã¡ã³ããããã ããŸããã ã³ãŒãã£ã³ã°ã«ç²ããæã«æ¯æãã§éã¶ã®ããããããããŸãããã ãããã« RevComm ã§ã¯ããã®ããã«ããŒã ãè¶
ããŠçã§ãã¬ããžãå
±æããªããå
±ã«è¯ããã®ãäœãäžããŠããããšããããŒã ã¯ãŒã¯ããããŸãã TechTalk ã§ã¯ã»ãŒæ¯é±ããŸããŸãªããŒãã®çºè¡šããããŸãã ãã®èšäºã§ RevComm ã«èå³ãæã£ãŠãã ãã£ãæ¹ãããã£ããããŸãããããã²å¥®ã£ãŠãå¿åãã ããã 採用情報|株式会社RevComm(レブコム)
ãã®èšäºã¯ RevComm Advent Calendar 2022 ã® 4 æ¥ç®ã®èšäºã§ãã RevComm ã§é³å£°åŠçã®ç ç©¶éçºãæ
åœããŠããå è€éå¹³ã§ããç§ã¯ ADHD ïŒæ³šææ¬ é¥ã»å€åçïŒãšããéå®³ãæ±ããŠããŸããç§ã®å Žåã¯ä»äºãããŠããäžã§å°é£ãããïŒé害ãæããªã人ãšåãããæ¹ã§ã¯å°é£ã«çŽé¢ããïŒã®ã§ããããããã®å°é£ã«ã©ã®ããã«å¯ŸåŠããããšããŠããã®ãã玹ä»ããŸãããŸããåŒç€Ÿã®åãæ¹ã®ç¹åŸŽã§ãããã«ãã¬ãã¯ã¹ã»ãã«ãªã¢ãŒãç°å¢ãåãŒã圱é¿ã«ã€ããŠãåãäžããŸãã å è€éå¹³ïŒããšãããã
ããžãïŒ ã·ãã¢ãªãµãŒããšã³ãžãã¢ãRevCommã«ã¯2019幎ã«ãžã§ã€ã³ããé³å£°åŠçãäžå¿ãšããç ç©¶éçºãæ
åœãADHDãšä»ãåãã€ã€æ¥åã«åãçµã2å
ã®ç¶ã å人ãŠã§ããµã€ã X â éå»èšäºäžèЧ æ¬èšäºãèªãã«ããã£ãŠã®æ³šæ ç§ã¯å»åž«ã§ããã®ä»ã® ADHD ã®å°éå®¶ã§ããããŸããã ADHD ã«é¢ããæ£ç¢ºãªæ
å ±ã¯ãå°éå®¶ã®çºä¿¡ããåç
§ãã ãã ã ADHD ã®çç¶ïŒå°é£ã«çŽé¢ãããã€ã³ããããã¯æ¬äººã®ç¹æ§ïŒã¯äººã«ãã£ãŠç°ãªã ããšãç¥ãããŠããŸãããŸããåãçç¶ã«å¯ŸããŠåã察åŠãæå¹ãšã¯éããŸãããæ¬èšäºã§åãäžããã®ã¯ç§ã®çç¶ãšç§ãå®è·µããŠããå¯ŸåŠæ³ã§ãããäžäººã«éçšãããã®ã§ã¯ãããŸããã ADHD ã®èšºæã¯å»åž«ã®ã¿ãè¡ãããšãã§ããŸã ãèªå·±å€æã¯ããã£ãŠå°é£ãå¢å€§ããããããããããŸãïŒããšãã°ãçç¶ã䌌ãéãç
æ°ãããããŸããïŒã ADHD ãšã¯ ADHD ïŒæ³šææ¬ é¥ã»å€åçïŒãšã¯ã粟ç¥é害ã®ãã¡çºéé害ã«åé¡ããããã®ã®äžã€ã§ããçºéé害ãšã¯ãçãŸãã€ãã¿ãããè³ã®åãæ¹ã®éãã«ããã幌å
ã®ãã¡ããè¡åé¢ãæ
ç·é¢ã«ç¹åŸŽãããç¶æ
ã§ã *1 ãçºéé害ã®äžã§ã ADHD ã¯äžæ³šæã»å€åæ§ã»è¡åæ§ã®3çç¶ãäž»ãªç¹åŸŽãšããŠããããããã®çç¶ã®åœ±é¿ã§æ¥åžžç掻ã»åŠæ¥ã»ä»äºãªã©ã«æ§ã
ãªå°é£ãçããããšããããŸã *2 ããã€ãŠã¯åäŸã ãã«èŠãããç
æ°ãšèããããŠããŸããããçŸåšã§ã¯å€§äººã«ãªã£ãŠãçç¶ãç¶ç¶ããå Žåãããããšãç¥ãããŠããŸãã ç§ãš ADHD ç§ã ADHD ãšèšºæãããã®ã¯ã2017 幎ïŒ30 æ³é ïŒã®ããšã§ãããåœæã¯å幎ã«çºçãã匷迫æ§é害 *3 ãšããç
æ°ã®æ²»çã®ããã«å¿çå
ç§ã«éã£ãŠãããéé¢ã»æ²»çã®éçšã§ ADHD ã§ããããšãçºèŠããŸããã 匷迫æ§é害ãšããããŠé害è
æåž³ã®äº€ä»ãåããŠããŸã æãã°ç©å¿ã€ããé ããå¿ãç©ãç©ããªããã®ã¯æ¥åžžè¶é£¯äºã§ãéšå±ã¯åžžã«æ£ããã£ãŠãããã³ãã³ãå匷ããããšã¯æ±ºããŠãªããåŠæ ¡ã®ãã¹ãã§ã¯ããäžæ³šæã§å€±ç¹ãããŠããŸããã 倧人ã«ãªãä»äºãå§ããŠããã¯ãé åºç«ãŠãŠä»äºãåŠçããããšãèŠæã§ç· åã«éã«åããªãã£ãããä»äººã«åºããæç€ºããã£ããå¿ããããå調ãªäœæ¥ã§ããã«å¯ãŠããŸã£ãããäœèª¿ã«æ³¢ãããããã«æ¯æ¥ 8 æéããã©ãŒãã³ã¹ãåºãç¶ããããšãé£ããã£ããããŠãä»äºã®éè¡ã«æ¯éãããããŠããŸããããŸãããã€ãŠã®å€åå
ã§ã¯æ¯æ¥ãªãã£ã¹ã«åºç€ŸããŠããã®ã§ãããé»è©±çªãããããšãåšå²ã®è©±ã声ïŒéé³ïŒãèŠçã§é ããã£ã±ãã«ãªã£ãããšãã£ãå°é£ããããŸããã 蚺æãåããŠããã¯ã宿çã«éé¢ã®äžãæè¬ããã³æ¥åžžç掻ã®äžã§ã®æ²»çãç¶ããŠããŸãã ãã«ãã¬ãã¯ã¹ã»ãã«ãªã¢ãŒãç°å¢ã«ãããæ©æµãšå°é£ ADHD ãæã€äººã«ãšã£ãŠãåŒç€Ÿã®ãããªãã«ãã¬ãã¯ã¹ã»ãã«ãªã¢ãŒãç°å¢ã¯é©ããŠããã®ã§ããããïŒç§ã®å Žåã¯æ©æµã®ã»ãã倧ããåããŸããããã«ãã¬ãã¯ã¹ã»ãã«ãªã¢ãŒããªãã§ã¯ã®ããªãã£ã¹åºç€Ÿã«ã¯ãªãå°é£ãæããŠããŸãããããã®æ©æµãšå°é£ã玹ä»ããŸãã æ©æµ äœèª¿ã®æ³¢ãåžåããããïŒãã«ãã¬ãã¯ã¹ïŒ ADHD ãæã€äººãã¹ãŠã«åœãŠã¯ãŸãããã§ã¯ãªããšæããŸãããç§ã¯äœèª¿ã«æ¯èŒç倧ããªæ³¢ããããŸããã€ãŸã調åã®ããæ¥ãšæªãæ¥ã®ä»äºã®ããã©ãŒãã³ã¹ã®å·®ãããªã倧ããã§ãã ãã«ãã¬ãã¯ã¹ã®å¶åºŠäžã§ã¯äœèª¿ã«åãããŠæ¯èŒçæè»ã«å€åæéïŒé·ãããã³æé垯ïŒã®èª¿æŽãã§ããŸããåœç¶ãæåãããããžã§ã¯ãã®é²è¡ç¶æ³ãªã©ã®å¶çŽæ¡ä»¶ãããã®ã§å®å
šã«èªç±ã«èª¿æŽã§ããããã§ã¯ãããŸããããããã§ãæ¯æ¥æ±ºãŸã£ãæéã«ä»äºãããªããã°ãªããªãç¶æ³ããã¯ãã£ãšããã§ãã éããªç°å¢ã§ä»äºãã§ããïŒãã«ãªã¢ãŒãïŒ èªå®
ãå®¶ææ§æãªã©ã®è«žæ¡ä»¶ã«å·Šå³ãããŸããããªãã£ã¹ãããéããªç°å¢ãçšæããããšãã§ããå ŽåããããŸãïŒç§ã¯çšæã§ããŠããŸãïŒãç§ã®å Žåã¯éé³ãå€ãç°å¢ãèŠæãªã®ã§ãéããªç°å¢ã¯éäžåãé«ããã®ã«åœ¹ç«ã£ãŠããŸãã å°é£ èªäž»çã«ããæ°ã管çããå¿
èŠãããïŒãã«ãã¬ãã¯ã¹ã»ãã«ãªã¢ãŒãïŒ ãã«ãªã¢ãŒãç°å¢ã§ã¯ããªãã£ã¹ã®ããã«è¡äººç°èŠã®äžã§ä»äºãããããã§ã¯ãããŸããã人ã®ç®ããªãç°å¢ã ãšã©ãããŠãæ ãããããªããŸãããããæ ãããããšãä»äºã®ææãåºãåé¡ã«ãªããŸãã éã«ãããæ°ã«æºã¡ããµããŠããæã«ã¯éå°ãªé·æéåŽåããããããããããŸãããã«ãã¬ãã¯ã¹ã®å¶åºŠäžã§ã¯ïŒæ³ä»€ã®ç¯å²å
ã§ïŒæ¥µç«¯ãªæéã®äœ¿ãæ¹ãããããšãäžå¯èœã§ã¯ãããŸããããå¥åº·ã®èгç¹ããçµç¹ã®äžå¡ãšããŠåšå²ãšå調ãã€ã€åã芳ç¹ããã¯æãŸãããªãã§ãããã ADHD ãæã€äººã«ã¯ããæ°ã®ããæãšãªãæã®å·®ãæ¿ãã人ãå°ãªããããŸããããããæ°ã®ãªãæã«æäœéã®ããæ°ãåºãããšãšãããæ°ã«æºã¡ããµããŠããæã«åããããªãããã«ãã工倫ã¯ãäœèª¿ãæŽãã€ã€å®å®ããããã©ãŒãã³ã¹ãåºãäžã§éèŠã ãšèããŠããŸãã å®¶äºãªã©ã®ç§ç掻ãšä»äºã®ãã©ã³ã¹ãæèããŠåãå¿
èŠãããïŒãã«ãã¬ãã¯ã¹ã»ãã«ãªã¢ãŒãïŒ ãã«ãã¬ãã¯ã¹ã»ãã«ãªã¢ãŒãç°å¢ã§ã¯ãä»äºäžã«ãã€ã§ãç§çšãæãããšãã§ããŸããç¹ã«åšå®
å€åã®å Žåã¯ãä»äºã®åéã«å®¶äºãããããšã¯çãããªãã§ãããã ãšããããADHD ãæã€äººã«ã¯äžåºŠéäžãããä»ã®ã¿ã¹ã¯ã«ãªããªãç§»ãé£ãåŸåã®ãã人ãå°ãªããããŸããïŒééäžïŒãã€ãŸããå®¶äºãå§ããããã€ãŸã§ãä»äºã«æ»ããªãã£ãããéã«ä»äºã«ç±äžããŠå®¶äºãçãã«ãªã£ããããããšããããŸãã ä»äºã«æ»ããªãããšã¯åœç¶åé¡ã«ãªããŸãããå®¶äºãçãã«ãªãããšãç§ç掻ã«ãããŠã¯åé¡ã«ãªãããŸãã ç§ãå°é£ã«å¯ŸåŠããŠããæ¹æ³ã®äŸ ãèªäž»çã«ããæ°ã管çããå¿
èŠããããã«å¯Ÿã㊠æèµ·ãããåžå£ãç³ã ADHD 以åã®è¡åã®åé¡ãããããŸããããæèµ·ããŠãã°ãããããåžå£ãç³ã¿ãŸãïŒãããã§ã¯ãªããåºã«åžå£ãæ·ããŠå¯ãŠããŸãïŒãåºã«åžå£ãæ·ããŠãã£ãŠã¯ããã€ã§ãç°¡åã«å¯ãããšãã§ããŠããŸããŸããç³ãã ç¶æ
ã§ã¯ãåžå£ãæ·ãã®ã«ã²ãšæéãããã®ã§ãç°¡åã«å¯ãããšãã§ããŸããããåžå£ãæ·ãã®ã¯é¢åãããããšãã ADHD ãªãã§ã¯ã®ææ
ãå©çšãã工倫ã§ãã ä»äºåã«çæ¿ãã åšå®
å€åã§ã¯ãæåãããªããã°ããžã£ãã®ãŸãŸã§ãä»äºãããããšãå¯èœã§ããæåãããã£ãŠããäžå身ã¯ããžã£ãã®ãŸãŸã§ããã¬ãŸãããããããç§ã®å Žåã¯æ°æã¡ãä»äºã«åãæ¿ããããã«ãä»äºåã«å¿
ãããžã£ãããçæ¿ããããšã«ããŠããŸãããªãã£ã¹ã«åºç€ŸããŠããã°é倿éã§æ°æã¡ãåãæ¿ãã人ãå€ãããšæããŸãããåšå®
å€åã¯é倿éããªãã®ã§ä»£ããã«ãã£ããçæ¿ããããšã«ããŠããŸããããžã£ããããå¯å¿å°ãæªãã®ã§ãå®æãªæŒå¯ã鲿¢ãã广ãæåŸ
ã§ããŸãã çè
ã®ä»äºçã®äŸãåšå®
å€åã§ããã®ãããªæè£
ã§ä»äºãããŠããŸã å°çšã®ä»äºéšå±ã§ä»äºããã 誰ããå®è·µã§ããæ¹æ³ã§ã¯ãããŸããããç§ã¯ã»ãŒä»äºå°çšã®éšå±ãçšæããŠããŸããç§ç掻ã®å Žãšç©ºéãåããããšã§ãä»äºã«å¯Ÿããããæ°ãåºãããããªããŸããããæ°ã«ä¹ããæ¥ã§ããæºã«åº§ã£ãŠããŸãã°ä»äºãã§ããããšã¯çãããããŸããã ã³ã³ãã³ããããã«ãŒã䜿ã äŒç€Ÿã® PC ã§ããã°äžèŠãªå ŽåããããšæããŸãããããããµãŒãã£ã³é²æ¢ã®ããã«èªäž»çã«ã³ã³ãã³ããããã«ãŒãèšå®ããããšã¯æå¹ã§ããåšå®
å€åã§ã¯ç§ç©ã®ã¹ããŒããã©ã³ããããã§ãèŠãããšãã§ããã®ã§ãç§ã¯ç§ç©ã®ã¹ããŒããã©ã³ã«ãèšå®ããŠããŸãã é©åºŠã«æåããå
¥ãã æåãã¯çžæãããã®ã§ãå®æã«æ¬ åžããããšã¯ã§ããŸãããæã
ãã£ãŠããã²ã©ãããæ°ã®åºãªãæ¥ã§ããæåãåŸã¯ä»äºãã§ããããšããããŸããæåããå
¥ããããŠãããã¯ã«ãªããšæ¬æ«è»¢åã§ãããæ¯æ¥é©åºŠã«æåããããããšã¯å®å®ããããã©ãŒãã³ã¹ãçºæ®ããã®ã«æå¹ãããããŸããã åŽåæéããã©ããã³ã°ãã 以äžã¯ããæ°ã®ãªãæã«ããæ°ãåºãããã®å·¥å€«ã§ããããããæ°ã«æºã¡ããµããŠããæã«ä»äºãããããªã工倫ãå¿
èŠã§ãããã®ããã«ãç§ã¯ Toggl Track ã§åŽåæéããã©ããã³ã°ããŠããŸããåŽåæéããã©ããã³ã°ããããšã§ãåŽåæéãæ¯æ¥é©åœãªç¯å²ã«åããå©ãã«ãªããŸãã ãå®¶äºãªã©ã®ç§ç掻ãšä»äºã®ãã©ã³ã¹ãæèããŠåãå¿
èŠããããã«å¯Ÿã㊠ãªãã€ã³ããŒã«é Œã ééäžã®ç¶æ
ã«ãªããšãç®ã®åã®ã¿ã¹ã¯ã«éäžããããŠãç§ç掻ãä»äºãä»ã®ã¿ã¹ã¯ãå¿ããã¡ã«ãªããŸããå¿ããŠããŸãããšèªäœã¯ä»æ¹ãªãã®ã§ãç§ã¯ãªãã€ã³ããŒã«é Œã£ãŠããŸããå€ãããŠç¡èŠããŠããŸããªãçšåºŠã«ãäœã§ããªãã€ã³ããŒã«ç»é²ããŠããŸãã ç§ç掻ã«é¢ããã¿ã¹ã¯ã¯ç§ç©ã®ã¹ããŒããã©ã³ã®ãªãã€ã³ããŒããä»äºã«é¢ããã¿ã¹ã¯ã¯ Asana ïŒã¿ã¹ã¯ïŒã» Google ã«ã¬ã³ã㌠ïŒã¹ã±ãžã¥ãŒã«ïŒã» Slack ïŒã¡ãã»ãŒãžã«å¯Ÿããã¢ã¯ã·ã§ã³å¿ã鲿¢ïŒãªã©ãå©çšããŠããŸãã ç§ç掻ã«é¢ããã¿ã¹ã¯ã®ãªãã€ã³ã㌠ç§çæŽ»ã®æéã¯ã«ã¬ã³ããŒããããã¯ããŠããŸã ç§ã¯æãä»äºã«ç±äžããããŸãæŒé£ãåãæããããšããããããŸãããããã§ãæè¿ã¯æŒé£ã®æé (12:00 â 13:00) ã¯ã«ã¬ã³ããŒããããã¯ããŠããã€ãªãã€ã³ããŒã§ç¥ãããããã«ããŠããŸãã ã¹ããŒãã¹ããŒã«ãŒã«é ŒãïŒã¿ã€ããŒã»ã¢ã©ãŒã ïŒ æŽæ¿¯ãããã®ã«ãã€ãä»äºã«ç±äžããŠäœæéãå¹²ãå¿ããããšã¯ãããŸãããïŒç§ã¯ãããŸãããããªæã«ã¯ã¿ã€ããŒãã¢ã©ãŒã ã䟿å©ã§ããæŽæ¿¯ã®ã§ããããé åãã«èšå®ããŠç¥ãããŠããããŸããæè¿ã¯ã¹ããŒãã¹ããŒã«ãŒã«å£°ã§æç€ºãåºããŠèšå®ããã®ã䟿å©ã§ãã䜿ã£ãŠããŸãã ããã㫠以äžã®å°é£ã工倫ã¯ç§ã«ãšã£ãŠäžéšã§ãããä»ã«ãä»äºã»ç§ç掻ãåããæ§ã
ãªå°é£ã«å¯ŸããŠããŸããŸãªå·¥å€«ãæ¥ã
è¡ã£ãŠããŸãïŒADHD ããæã¡ã®æ¹ã¯ãåããã«ãªããããããŸããïŒããŸããåšå²ã®æ¹ã
ã®æ¯æŽãªãããŠè¯å¥œãªç€ŸäŒç掻ãéãããšã¯ã§ããŸãããæ¹ããŠåšå²ã®æ¹ã
ã«æè¬ããããŸãã RevCommã§ã¯äžç·ã«åã仲éãåéããŠããŸãã詳ããã¯æ¡çšãµã€ããã芧ãã ããã www.revcomm.co.jp *1 : åçåŽåçã«ããçºéé害ã®èª¬æ *2 : ã¢ã¡ãªã«ç²Ÿç¥å»åŠäŒã«ããADHDã®è§£èª¬ *3 : åçåŽåçã«ãã匷迫æ§é害ã®èª¬æ
ãã®èšäºã¯ RevComm Advent Calendar 2022 ã® 3 æ¥ç®ã®èšäºã§ããåæ¥ã¯æç°ããã®ãçç£æ§ã®é«ãå®äŸäŒè°ãè¡ãããã®æºåãšé²ãæ¹ãã§ããã ã¯ããã« äœå¶ã®çŽ¹ä» éå¶ãšããŠã®æŽ»å å®äŸäŒè° äŒç»äŒè° ãªãã£ã¹ã¢ã¯ãŒ å·çãããŠãããããã« ãããªãã«ãæžããŠã»ãããšããæšãäŒããããš å·çè
ããªã¹ãã¯ãããè®ããããš ç¡çããããªãããšãããã人ã«ãã£ãŠãããããš çµããã« ã¯ããã« ããã«ã¡ã¯å°å³¶ã§ããæ®æ®µã¯ãµãŒããŒãµã€ããšã³ãžãã¢ãšã㊠MiiTel for Zoom ã®éçºãããŠããŸããåæã«ãåã¯ãã®ããã° (RevComm Tech Blog) ã®ç®¡ç人ãããŠããŸãã ä»å㯠RevComm ã®ããŒã 玹ä»ã®ã²ãšã€ãšããŠãããã¯ããã°ãéçšããããŒã äœå¶ãåãçµã¿ã«ã€ããŠæžããŸãã äœå¶ã®çŽ¹ä» ãŸãã¯äœå¶ã§ããRevComm ã§ã¯ããã¯ããã°ã¯ç·šééšå¶ããšã£ãŠããŸããã€ãŸããäŒç»ã®ç«æ¡ã»å·çè
ã®ã¢ãµã€ã³ã»ã¹ã±ãžã¥ãŒã«ç®¡çãªã©ãæ
ãããŒã ããããå
šå¡ãšã³ãžãã¢ã§æ§æãããŠããŸããçŸåšãããŒã ã¡ã³ããŒã¯ 4 人ã§ãã 瀟å
ã§ã¯ããã¯ããã°éå¶ãšåŒãã§ããã®ã§ããã®èšäºã§ããã衚èšããŸãã ãã®ããã¯ããã°éå¶ãç«ã¡äžããŠããææã«ãåããæã
ã¯äœãããããã«ããã®ãããã¹ã©ã€ãäžæã§ãã£ãšå®çŸ©ããŸããã 2022 幎 1 æã«æžããéå¶ã®ä»äºãå®çŸ©ããã¹ã©ã€ãã®åæ¬ ç°¡åã«ãããšãèªè
ã«èšäºãå±ããããã«ãããããšã¯ãã¹ãŠãä»äºã§ãããšããå®çŸ©ã§ãã ãã®å®çŸ©ã®ããšã§ã倧ãã 4 ã€ã®ä»äºãããŠããŸãã èªè
ã«èå³ãæã£ãŠãããããã«ãèšäºã®å
容ãããããããïŒãã¿åºãã»äŒç»ç«æ¡ïŒ èªè
ã«ä¿¡é ŒããŠãããããã«ãèšäºã宿çã«å
¬éããïŒå·çã¹ã±ãžã¥ãŒã«ç®¡çïŒ èªè
ã«äžä¿¡æãäžããªãããã«ãèšäºã®å
å®¹ãæ ¡æ£ããïŒåçš¿ã®ã¬ãã¥ãŒïŒ èªè
ãšæ¥ç¹ãæã€ããã«ãSNS ãªã©ã§æŽæ°ã®çºä¿¡ããã éèŠãªããšã¯ãã©ã®ä»äºãèªè
ãèµ·ç¹ã«ããŠããããšã§ãã èªè
ã«ãšã£ãŠæå³ã®ããããšã§ãªããã°ãæã
ã®ä»äºã§ã¯ãããŸãã ãããã¯åœããåã§ãããéèŠãªããšã§ãã éå¶ãšããŠã®æŽ»å éå¶ã¯äž»ã«æ¬¡ã® 3 ã€ã®æŽ»åãããŠããŸãã å®äŸäŒè°ïŒæ¯é±ïŒ äŒç»äŒè°ïŒæ1çšåºŠïŒ ãªãã£ã¹ã¢ã¯ãŒïŒã»ãŒæ¯é±ïŒ å®äŸäŒè° åŒç€Ÿã§ã¯ãAsana ãšããã¿ã¹ã¯ç®¡çããŒã«ãå
šç€Ÿã§æ¡çšããŠããŸããèšäºã®ç®¡çã«ã¯ã Asana ã®ããŒãïŒã«ã³ãã³ïŒãå©çšããŠããŸãã èšäºã®é²æç®¡çããŒã ãã®ããŒããèŠãªãããå·çãã¬ãã¥ãŒã®ç¶æ³ãªã©ã鱿¬¡ã®å®äŸäŒè°ã§ç®¡çããŠããŸããçµéšäžãæ¯é±å¿
ã宿œããããšããé²æç®¡çã«ãšã£ãŠæãå¹çããããšæããŠããŸãã ãšããã®ããããã¯ããã°ã®å·çãéå¶ã¯åªå
床ãã©ãããŠãäžãããããæ¥åå
容ã ããã§ããåãå«ããŠéå¶ã¡ã³ããŒã¯æ®æ®µãããã¯ãã®éçºãªã©ãããŠããã®ã§ãããŒããããå®çŸããã°ä¿®æ£ãªã©ãšæ¯èŒãããšãã©ãããŠãããã°éå¶ã®ä»äºã¯åŸæã«åããã¡ã§ãã ããã§ãæ¯é±çŽ 30 åã®å®äŸäŒè°ã®æéãèšããããšã§ããã® 30 åã¯èªåãã¡ãéå¶ãšããŠã®ä»äºã«ã€ããŠèããããå¿ããŠããããšãæãåºãããããŸãã1 åã®æéã¯çããŠãããã§ãããæ¯é±èšäºã®é²æç¶æ³ããã§ãã¯ããããšãéèŠã ãšæããŠããŸãã äŒç»äŒè° å®äŸäŒè°ãšã¯å¥ã«æã« 1 åçšåºŠãäŒç»äŒè°ã宿œããŠããŸãã å®äŸäŒè°ã§ã¯èšäºã®é²æãªã©ã®çްã
ãšãã確èªããšã«çµå§ããŠããŸãã®ã§ãæ°ããèšäºãèªè
ã«åããäŒãããããšã¯äœãïŒãšããèŠç¹ã§ç©äºãèããæéãåã£ãŠããŸãã 宿œããå®çžŸã¯ãŸã å°ãªããäŒè°äœãšããŠã¯ãŸã 暡玢äžã§ãã äŒç»äŒè°ãšããååã«ã¯ããŠããŸãããèšäºã®äŒç»ã®ãã¬ã¹ãã ããããŒãã«ããã®ã¯ãããªããªãšèããŠããŸãããã¹ãŠã¯èªè
ã®ããã§ãããšããååã«ç«ã¡æ»ããéå¶ãšããŠã©ã®ãããªåãçµã¿ãããã¹ããããèªè
ãå·çè
ã®ããã®åãçµã¿ã«ã€ããŠãèããæéã«ããŠããŸãã ããã§åºãŠããåãçµã¿ã®ã²ãšã€ããªãã£ã¹ã¢ã¯ãŒã§ãã ãªãã£ã¹ã¢ã¯ãŒ äŒç»äŒè°ã§ãéå¶ãšããŠèšäºã®å·çè
ã®ãµããŒãäœå¶ãäœãããšãããã®ã§ã¯ãªãããšããæèŠãããããŸãããããã§ãããéå¶ã¡ã³ããŒã«äž»å°ããŠããããæ¯é± 1 æéãªãã£ã¹ã¢ã¯ãŒãéå¬ããããšã«ããŸããã äžè¬çã«ãªãã£ã¹ã¢ã¯ãŒã¯å€§åŠã§ãã䜿ãããçšèªã§ãæå¡ãçåŸããã®è³ªåãªã©ãåãä»ããæéã®ããšã§ããããã¯ããã°éå¶ã§ã¯ãæè¡èšäºã瀟å
ããã¥ã¡ã³ãã«é¢ããçžè«ãåãä»ããå ŽãšããŠãªãã£ã¹ã¢ã¯ãŒãå®çŸ©ããŠããŸãã RevComm ã§ã¯ã瀟å
äŒè°ã¯äž»ã« Google Meet ãå©çšããŠããŸããæ¯é±æ±ºãŸã£ãæéïŒçŸåšã¯æ°Žæã®16:00ïŒã« Google Meet ã«éãŸããå·çè
ã®è³ªåã«çããããèšäºã®æ§æã®å£æã¡ããããããŠããŸãã ãŸãå·çè
ã«éãããããã°ã«ã€ããŠããããŸãªè³ªåãçžè«ãåããå ŽãšããŠãæ©èœããŠããŸãã å·çãããŠãããããã« å·çè
ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯æãéèŠãªä»äºã®ã²ãšã€ã§ãããããŠã人ãšäººãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãªã®ã§æ£è§£ã¯ãããŸãããå·çè
ã«ãã£ãŠãçµç¹ã«ãã£ãŠããã¹ãããšã¯éããšæããŸãã ãšã¯ãããã»ãšãã©ã®ç¶æ³ã§ééã£ãŠããªããšåã確信ããŠããã¹ã¿ã³ã¹ãããã€ããããŸãããã®èšäºã§ã¯ãã®ã¹ã¿ã³ã¹ã 3 ã€ç޹ä»ããŸãã ãããªãã«ãæžããŠã»ãããšããæšãäŒããããš äŒç»ãèããæãå€ãã®å Žåã¯å·çè
ãã»ããã§èããŸãã ããã®èšäºãããªãã«æžããŠã»ããããšäŸé Œãããšãã«ããªããããªãããéžã°ããã®ãã説æã§ããããšãéèŠã§ãããäœãããããäŒç»ã®ãã¢ã ãšæã£ãŠããããã§ãã äŸãã°ãããŒã ã®ãªã³ããŒãã£ã³ã°å
容ã玹ä»ããèšäºãæžãããã§ãããšèšãã®ãšããè¥æãšã³ãžãã¢ããèŠãããŒã ã®ãªã³ããŒãã£ã³ã°äœå¶ãããŒãã«ããèšäºãæžãããããã25 æ³ã®ããªãã«æžããŠã»ããã§ãããšäŒããã®ãšã§ã¯ãå·çãäŸé Œããã人ã®çŽåŸæãéãã§ãããã ãããŠèšäºã®ãã¿ãšå·çè
ããããããŠããããšã¯ãèšäºã®å質ã«çŽçµããŸããçµç¹è«ãå
¥ç€Ÿ 1 ã¶æã®ã¡ã³ããŒãæžãããšã¯ã§ããŸããããæ¡çšæŽ»åãªã©ã§å€å¿ãªãããŒãžã£ãŒã«æè¿åŸãæè¡çãªåŠã³ãæžããŠãããã®ããºã¬ãèšäºã«ãªã£ãŠããŸãã§ãããããããªèšäºãããã°ããããã ãšããã¢ã€ãã¢ã«å¯ŸããŠã誰ãäžçªãã®ã¢ã€ãã¢ãããããæè¯ããŠãããããèããããããäŒç»ã ãšæããŸãã ãããŠäŒç»ãæ·±ãèããããããããããšã³ãžãã¢ãããã¯ããã°ã®éå¶ãããæçŸ©ããããšæã£ãŠããŸãã å·çè
ããªã¹ãã¯ãããè®ããããš æåäŸé Œããèšäºã®å®æãŸã§ãå·çè
ããªã¹ãã¯ãããããšã倧äºã ãšèããŠããŸãã éå¶ã¯äŸé Œãããç«å Žã§ãããžããã ãã®ããŸãããããã§ãããäžç·ã«èšäºã®äœæãããžã§ã¯ããé²ãã仲éã ãšãšããããããã¯ãéçºã®ããŒã ã¡ã³ããŒã«æ¥ããã®ãšåãããã«æ¥ããã®ããããšèããŠããŸãã ãŸããå
¬éåŸã¯å·çè
ãè®ããŸããèšäºã®å
¬éåœæ¥ã¯ç€Ÿå
ã® Slack ã§æŽæ°ãéç¥ããã¿ããªã§è®ããŸããããã«å ããŠãæã« 1 床è¡ããããšã³ãžãã¢ã®å
šäœäŒè°ã§èšäºãå·çããã ããæ¹ã®ååãæããæè¬ããããã«ããŠããŸãã 瀟å
Slack ã§ã®æŽæ°ã®éç¥ èšäºã®å·çã¯å€§å€ãªä»äºã§ãããããå®éããæ¹ã«ã¯ãéããŠæè¬ããŸãããã ç¡çããããªãããšãããã人ã«ãã£ãŠãããããš æåŸã«ããäºãç¡çã«ããããšããªãããšãããã人ã«ãã£ãŠãããããšã§ãããããå人çã«æãéèŠèŠããŠããããšã§ãã æè¡èšäºãæžãã®ã¯ç°¡åãªããšã§ããããïŒç¹ã«ããã°ãéå¶ãããããªäººãæ¥åžžçã«èšäºãæžããŠãã人ã§ããã°ããèšäºãªããŠèª°ã§ãæžããããšããæã£ãŠãããããããŸããã ãããããããªããšã¯ãããŸãããã©ããªææžãèšç·Žããªããšæžããªããã驿§ãããã§ãããããŸããæ®æ®µããèšäºãããæžããŠãã人ã§ããäºæ¥ã«ã€ã³ãã¯ãã®ããä»äºãããŠãããšãã«ããã°èšäºã®å·çãåªå
ããããšã¯é£ããã§ãããã誰ã§ãæåããã°èšäºã®ã²ãšã€ãããã¯æžããããšããã®ã¯æŽè«ã ãšæããŸãã ãããŠéèŠãªããšã§ãããçºä¿¡ã®æ¹æ³ã¯ææžå·çããã¹ãŠã§ã¯ãããŸããã瀟å
ã§ã¢ã³ã±ãŒããåã£ããšãããææžå·çã¯èŠæã§ãç»å£ã«ã¯ææ¬²ããã人ããã¹ã©ã€ãäœãã«ã¯èŠææèããªã人ãããŸãããèŠã¯ã人ã«ã¯åãäžåããããã®ã§ããææžå·çãåŸæãªãããã¯ããã°ã§ã人åã§ããã¹ãããšã奜ããªãã€ãã³ãç»å£ã§ããœãããŠã§ã¢äœããåŸæãªã OSS ãšãã圢ã§çºä¿¡ããŠãããã®ãäžçªãããšæãã®ã§ãã ããã¯ããã°ã«ã¯æ¡çšåºå ±ã¡ãã£ã¢ãšããæ§æ ŒããããŸããæ¡çšã®ããã«äœãäŒãããšããã®ããšèããã°ãåããšã³ãžãã¢ã楜ããåããŠããããšãäŒããã®ãäžçªã ãšèããŠããŸãããšãããšãç¡çã«ããã°ãæžããŠãããããšã¯ãããé广ã«ãªããããŸããã äœå¶ãæªçã§ããã°ä»¥å€ã®çºä¿¡ã®å ŽããŸã çšæã§ããŠããŸãããã2023 幎ã¯ããã°ä»¥å€ã®å Žãçšæããããšãèããããšæã£ãŠããŸãã çµããã« ããã¯ããã°ã¯ç«ã¡äžãåæãããã®äœå¶ã§éçšããå°ããã€è»éã«ä¹ã£ãŠããŸãããæåãã倧å€ã§ããããåŸã
ã«ããã¯ããã°ã¯ç€Ÿå
ã§ã浞éããŠããŠãæè¿ã§ã¯äŒç»æ¡ãæã£ãŠããŠããã人ããå·çã®ç«åè£ãããŠããã人ãå¢ããŠããŸããã ç«ã¡äžãæã¯è¶ããŸããããããã°ã®æ§è³ªäžãããããç¶ç¶ããŠããããšãäœãããéèŠã§ããä»åŸãããããçºä¿¡ãã§ããããã«éå¶ãšããŠæ¹åããŠãããŸãããããŠç€Ÿå
ã®åãçµã¿ã楜ããçºä¿¡ã§ããã¡ãã£ã¢éå¶ãç®æããŠãããŸãã RevComm ã§ã¯ãšã³ãžãã¢ãåéããŠããŸãããã®ããã°ãèªãã§èå³ãæã£ãŠãããæ¹ãåå ããããšæã£ãŠãããæ¹ããã²æ¡çšãµã€ãããã§ãã¯ããŠã¿ãŠãã ããã www.revcomm.co.jp
2022 幎 12 æ 9 æ¥ (é) ã«éå¬ããã Developers CAREER Boost ã« RevComm ã®ãšã³ãžãã¢ã®é¶å±±å¶ºãç»å£ããŸããã¿ã€ãã«ã¯ãäžæ©èžã¿åºãåæ°ãå€ãã -ã³ãã¥ããã£ãšåºäŒã£ãŠå€ãã£ãç§ã®ãšã³ãžãã¢äººç-ãã§ãã ã€ãã³ãæŠèŠ å
¬åŒãµã€ãããåŒçš https://event.shoeisha.jp/devboost/20221209 ããŸããŸãªé åã§æ°ãããã¯ãããžãŒãç»å ŽããŠããçŸåšããœãããŠã§ã¢éçºè
ãå«ãã人ã
ã®åãæ¹ã倿§åããŠããŸããç¹å®ã®æè¡ã«é¢ãããã£ãªã¢ãæ©ã人ãããã°ãã©ã€ãã¹ããŒãžã®å€åãè¿ããããšã§æ°ããªãã£ãªã¢ãéžæãã人ããããªã©ãããšã³ãžãã¢ã®çãæ¹ããšäžå£ã«èšãããšèªäœé£ãããªã£ãŠããŠããŸãã Developers CAREER Boostã§ã¯ãèªåã®äŸ¡å€ãæå€§éã«çºæ®ã§ããå Žæã§ã幎霢ãããŒã«ã«çžãããªããã£ãªã¢ãå®çŸããŠããå
人ãã¡ã®ç¥èŠããæè¡ãšãã¹ããŒãããããŸã§æ©ãã§ãããã£ãªã¢æŠç¥ããå±ãããããšã§ãäžç¢ºå®æ§ã®é«ãä»ã®æä»£ãçãæãã¹ãã«ãšãã£ãªã¢ãããŒã¹ãããŸãïŒ ãã²ãã®æ©äŒã«ãããããã®ãšã³ãžãã¢ã®çãããŸãèããŠã¿ãŸãããïŒ æ¥çš: 2022 幎 12 æ 9 æ¥ (é) äŒå Ž: ãªã³ã©ã€ã³ã®ã¿ åå ç³ã蟌ã¿ã¯ ãã¡ã äž»å¬: æ ªåŒäŒç€Ÿç¿æ³³ç€Ÿ CodeZineç·šééš ç»å£æ
å ± äžæ©èžã¿åºãåæ°ãå€ãã -ã³ãã¥ããã£ãšåºäŒã£ãŠå€ãã£ãç§ã®ãšã³ãžãã¢äººç- PyCon JP ãžã®åå ããã£ããã«ãããã®ãšã³ãžãã¢äººçã¯å€§ããåºãããããŸã§ã¯ç¬æžå
æµ·ã®å°ããªå³¶ãã Python ã§ä»äºãããŠããŸãã ãããªèªåã®äººçãæ¯ãè¿ã£ããšãã転æ©ã«ãªã£ããšæããŠããã®ã¯ãPyCon JP ãšã®åºäŒããã奜ããªå Žæã«äœãããã®è»¢è·ããæžç±ã®å·çãã§ãã ã©ããæ±ºæã«è¿·ãããªãã£ããšèšãã°åã«ãªããŸãããæåã®äžæ©ããèžã¿åºããŠããŸãã°æå€ãšãªããšããªããã®ã§ãã ãã®ã»ãã·ã§ã³ã§ã¯ãããããã³ãã¥ããã£æŽ»åããåŸãæ§ã
ãªãã®ã玹ä»ãããèªåãäžæ©èžã¿åºããŠã¿ããããšæããã»ãã·ã§ã³ãç®æããŸãã æ¥æ: 2022幎 12 æ 9 æ¥ (é) 15:25 ïœ 15:55 (B-7) ç»å£è
: é¶å±± 嶺 ãªã³ã¯: https://event.shoeisha.jp/devboost/20221209/session/4123/ æåŸã« RevComm ã¯é»è©±å¶æ¥ã顧客å¿å¯Ÿãå¯èŠåããé³å£°è§£æAIæèŒåã®ã¯ã©ãŠãIPé»è©±ãMiiTelïŒããŒãã«ïŒããéçºããŠããŸãã ãããã¯ãã®éçºã«ãã㊠Web ã¢ããªã±ãŒã·ã§ã³ãæ©æ¢°åŠç¿/深局åŠç¿ãªã©ã®é åã§ Python ãåºã䜿çšãããŠãããDjango ãæ¡çšããŠããŸãã ãã³ãã¥ãã±ãŒã·ã§ã³ãåçºæã人ãäººãæ³ã瀟äŒãåµãããšããããã·ã§ã³ãéæããã¹ããäžç·ã«ãããã¯ããéçºããŠé ãããšã³ãžãã¢ãåéããŠããŸãïŒ hrmos.co
ãã®èšäºã¯ãRevComm Advent Calender 2æ¥ç®ã®èšäºã§ãã æšæ¶ æ ªåŒäŒç€ŸRevCommã§ããã¯ãšã³ãããŒã ã®ãããŒãžã£ãŒãããŠããæç°ãšç³ããŸã ðš RevCommãšã¯ååã®éããã³ãã¥ãã±ãŒã·ã§ã³ ( Com munication) ãåçºæ ( Re in v ention) ããããšãããã·ã§ã³ãšããŠããäŒç€Ÿã§ãæ®æ®µããçžæãæãé£ã£ã亀æµã倧äºã«ããŠããŸãã ç§ãPMãšããŠå®äŸäŒè°ã®éå¶ãããŠãããªã³ã©ã€ã³äŒè°ãœãªã¥ãŒã·ã§ã³ã®éçºãããžã§ã¯ãã§ããããã·ã§ã³ãåæ ããŠãããçç£æ§ã®é«ãäŒè°ãéå¬ã§ããããã«å¶åºŠãæŽããŠããã®ã§ããã®ç¥èŠãå
±æããããšæããŸãð¡ æºåç·š æ
äºæèªã§ã äºäºåç« ãšããèšèããããŸããå
šãŠã®ããšã¯ãäºåã«ããèããŠæºåããã°ããŸããããšããæå³ã®èšèã§ãããã¡ããå®äŸäŒè°ã®åã«ããæºåãããããšã圹ç«ã¡ãŸãã æ¯é±è¡ãMTGã®ããã«éœåºŠè°äºé²çšã®ãã¡ã€ã«ãäœæããã®ã¯æéã§ããæ®æ®µããå©çšããŠãã ã¿ã¹ã¯ç®¡çããŒã«ã«ãèªåãã¢ãµã€ã³ãããŠããã¿ã¹ã¯ 1 ã®æ
å ±ãæžã蟌ãããã«ããŸãã ãéçºç°å¢ã«ãªãªãŒã¹æžã¿ããã¹ãã±ãŒã¹äœæäžããšãããããªå
·åã§ãã ã¿ã¹ã¯ã«æ
å ±ãéããããšãéèŠã§ãã ãããããªãã®ãããžã§ã¯ãã§å®äŸäŒè°ã®çºã ãã«è³æãäœæããŠããã®ã§ããã°ã極åèŸããã¹ãã§ããã¿ã¹ã¯ã«æ
å ±ãéããŠããããšã§ãã¢ãµã€ããŒã転è·ãããäœèª¿ã厩ãããããŠããã¿ã¹ã¯ã«é¢ããæ
å ±ãããŸãåŒãç¶ãããšãã§ããŸãã幎æ«äŒææãã«èªåã®ã¿ã¹ã¯ãæãåºãå Žåã«ã圹ã«ç«ã¡ãŸãã åŒç€Ÿã§ã¯ãå€ãã®ãããžã§ã¯ãã§ Asana ãæ¡çšããŠããŸãã å
šå¡ãAsanaã䜿ãããšã匷å¶ãããŠããããã§ã¯ãããŸãããäŸãã°ã Github Project ã䜿ã£ãŠãããããžã§ã¯ããååšããŸããããã¯ã¡ã³ããŒã®è©±ãåãã§æ±ºããããŠããŸãã ãããã®ããŒã«ãåŸæäžåŸæããããéžæã¯äŒç€Ÿã«ãã£ãŠç°ãªãããšæããŸãããã§ããã ãäŒç€Ÿã§1ã€ã®ã¿ã¹ã¯ç®¡çããŒã«ãæ¡çšããããšããªã¹ã¹ã¡ããŸããçµ±äžããããšã§ããããžã§ã¯ãéããŸãããã¿ã¹ã¯ã®äŸåé¢ä¿ãå®çŸ©ã§ããããèªåçãªçžäºãªã³ã¯ãå
±éã®ãã€ã«ã¹ããŒã³ã®èšå®ãªã©ãå¯èœã«ãªãããã§ãã 2 åŒç€Ÿã§ãAsanaã®å©çšã«åããŠç§»è¡ã掻çºã«ãªã£ãŠããŠããŸãã ãŸããæ¡çšããããŒã«ã決ãŸã£ãŠããŠãããããžã§ã¯ããšããŠã®éçšæ¹éãæ±ºããŠèª¬æããããã¥ã¡ã³ãããéçšæ¹éã匷å¶ããä»çµã¿ãç¡ããšãã§ããããšãå€ãããŠäžã
ã¡ã³ããŒã«äœ¿ã£ãŠããããŸããã äžèšã®ãããªã«ã¹ã¿ã æ©èœã§ãéçšæ¹æ³ããããããã«ããŠãããšèªåŸçãªæŽæ°ãæåŸ
ã§ããŸãã GitHubã® Issue ãã³ãã¬ãŒã Asanaã®ã¿ã¹ã¯ãã³ãã¬ãŒããã«ãŒã« ãããŸã§ç§ã®ãããžã§ã¯ãã®äžäŸã§ãããäžèšã®ããã«Asanaãã³ãã¬ãŒããèšå®ããããšã§å¿
èŠãªãµãã¿ã¹ã¯ãçæãããŸã (ãã¡ãããç¶æ³ã«å¿ããŠãã³ãã¬ãŒãã䜿çšããªãããšãã§ããŸãïŒã ããããããšã§ãã¿ã¹ã¯ã®é²è¡ç¶æ³ãããããããã坿¬¡çã«æ°ãã«ãããžã§ã¯ãã«åå ããã¡ã³ããŒã§ãå¿
èŠãªäœæ¥ãããããããªä»çµã¿ã«ãªã£ãŠããŸãã é²ãæ¹ç·š å®äŸäŒè°ã§ã¯ãäœæ¥äžã®ã¿ã¹ã¯ã«ã€ããŠå°ã£ãŠããããšãç¡ããã俯ç°çã«èŠãŠã¹ã±ãžã¥ãŒã«éãã«é²æããŠããããäž»ãªè°é¡ã«ãªããŸãã äœæ¥äžã®ã¿ã¹ã¯ã«ã€ããŠå°ã£ãŠããããšãç¡ãã確èªãã åã¡ã³ããŒã«æºåã®æ®µéã§ã¿ã¹ã¯ã«æ
å ±ã远èšããŠããã£ãŠããã®ã§ãç»é¢å
±æã§æŽæ°ãããã¿ã¹ã¯ã衚瀺ããŸãã Asanaã«ã¯ã æçµæŽæ°æ¥ > 7æ¥å ãšããã¿ã¹ã¯ã®ãã£ã«ã¿ãããã®ã§ããã®çµæ 3 ãç»é¢ã«æ ã 4 ãåæ
åœè
ã«æŽæ°å
容ãå¿
èŠã«å¿ããŠèªã¿äžããŠããããŸãã ãã®éã«çžè«ã決å®äºé
ãå¿
èŠã¢ã¯ã·ã§ã³ãæ°ãã«èšåãããã°ãã¿ã¹ã¯ã«æžã蟌ã¿ãŸãã誰ããæžã蟌ãã§ããéãåå è
ã«ã¯å°ãåŸ
ã£ãŠããã£ãŠãã ãããåŸã§æžããšèšã£ãŠå¿ããŠããŸãããã¯ãæ
å ±ãæ®ãããšã«å°ãæéããããæ¹ãè¯ãæéã®äœ¿ãæ¹ã§ã¯ãªãã§ããããã ã¹ã±ãžã¥ãŒã«ã®ç¢ºèª ã¹ã±ãžã¥ãŒã«ã«é¢ããŠã¯ã ã©ããããã®ãã¬ãã·ã£ãŒããããïŒ åå è
ã¯èª°ãïŒ äžèšã«ãã£ãŠèª¬æéãšèª¬æã®ä»æ¹ã倧ããå€ããããšæããŸãã AsanaãGitHubã«æžãèµ·ããããã¿ã¹ã¯ã¯ç²åºŠã现ãããã 5 ãæåã«å®çŸ©ããããŒãããã 6 ã«å¯ŸããŠã®ç²åºŠã倧ããã¬ãã«ã§é²æãåããããã«æèããŠããŸãã ãªãã¡ã¯ã¿ãªã³ã°ã倿°åãªã©ã®è©±ãèããŠç²ããŠããðããžãã¹ãµã€ãã®ã¡ã³ããŒã«ã¯ãããã ãã¯éäžããŠèããŠãããããã«ããŸããå Žåã«ãã£ãŠã¯ããã¡ãã®è©±é¡ãå
ã«åºãæ¹ããããããããŸããã ãã®éãæã
ã®ãããžã§ã¯ãã§ã¯æåã«çºè¡šãã Google ã¹ãã¬ããã·ãŒãã®ã¬ã³ããã£ãŒãã«èµ€é»éä¿¡å·ã瀺ãè²ãã€ããã ãã«ããŠããŸãã ãŸãšã å®äŸäŒè°ã®åã«ã鲿ãã¡ã¢ããŠãããŸããã ã¿ã¹ã¯ã Issue (ãã±ãã) ã«æ
å ±ãéããŸããã Slackã§ã¯èŠå€±ããããã§ã äŒè°ã®ããã ãã®è³æã¯èªã¿è¿ãã®ã倧å€ã§ã ã¿ã¹ã¯ç®¡çããŒã«ã®äœ¿ãæ¹ãå®çŸ©ããŸããããã«ãŒã«ãæžãã ãã§ãªããäœ¿ãæ¹ãå¶éããããèšå®ããŸããã ã¿ã¹ã¯ç®¡çããŒã«ãç»é¢ã«æåœ±ããŸããã åå è
ã«å¿ããŠãæ
å ±å
±æã®ç²åºŠãåããŸããã æåã®ã³ãããã®ãã©ããã³ã°ãããŸããã GitHubã䜿ã£ãŠãããªããIssueãšèªã¿æ¿ããŠãã ãã ã ↩ Unito ãªã©ã®ãµãŒãããŒãã£ã®æäŸããã¿ã¹ã¯ç®¡çããŒã«ã®åæããŒã«ã䜿ãã°AsanaãšGitHub Issueã®äž¡æ¹ã§ã¿ã¹ã¯ã管çããããŒãã«ã¯äžãããŸãããåããŒã«ã«å±ãããŠãŒã¶ãŒã®ãã¹ã¿ãŒããŒã¿ãªã©é£æºäžå¯èœãªãã£ãŒã«ããååšããããããã¯ã1ã€ã®ããŒã«ã䜿ãããšãæãŸããã§ãã ↩ åé ã®æºåç·šã§ã³ã¡ã³ãã远å ããŠããã°ããã£ã«ã¿çµæã§ã¿ã¹ã¯ã衚瀺ãããŸãã ↩ ã¿ã¹ã¯ç®¡çããŒã«ãç»é¢ã«æ ãããšã¯ããæ¯é±ç»é¢ã«æ ãã®ã§å¿
ãæŽæ°ããŠãã ãããããšããã¡ãã»ãŒãžã«ããªããŸããã¿ã¹ã¯ç®¡çããŒã«ã䜿ã£ãŠããããã©ãæŽæ°ãå°ãªã && å®äŸäŒè°ã§äœ¿ã£ãŠããªããšããããŒã ã«ã¯ãšãŠãæå¹ã§ãã ↩ ããã¯äŒç€Ÿã«ãã£ãŠå®æœæ¯éãç°ãªããšæããŸãããåæãååæããšã«ããŒã ããããžã§ã¯ãã®å€ã«åãã£ãŠæ©èœã®è¿œå äºå®ãçºè¡šããããšã瀺ããŠããŸã ↩ äŸãã°ãããžãã¹ãµã€ãã®ã¡ã³ããŒã«ãRefactor: isPositiveãã©ã°ãåé€ããšããã¿ã¹ã¯ãèŠããããšã«ã¯ããŸãæå³ããªãã ↩
ãã®èšäºã¯ãRevComm Advent Calender 1æ¥ç®ã®èšäºã§ãã 仿¥ãã RevComm ãã¢ããã³ãã«ã¬ã³ããŒãã¯ãããŸãã12/1~12/25ã®éãæè¡ãç ç©¶ãéçºçµç¹ã«ã€ããŠæ¯æ¥èšäºãæçš¿ããŠãããŸãããæ¥œãã¿ã«ã ä»å¹Žã®ã¢ããã³ãã«ã¬ã³ããŒã®åæ¥ã®èšäºã§ã¯ãRevComm ã®ãªãµãŒããã£ã¬ã¯ã¿ãŒã®æ©æ¬ãã¹ã¿ãŒãã¢ãã äŒæ¥ã«ãããç ç©¶éçºïŒResearch & DevelopmentïŒã®æçŸ©ã«ã€ããŠæžããŠãããŸãã RevComm ãæäŸãããµãŒãã¹ ãŸãã¯ãRevComm ã¯ã©ããªäŒæ¥ãªã®ããã©ããªãµãŒãã¹ãæäŸããŠããã®ã玹ä»ããŸããç§ãã¡ã¯ãã€ã³ãµã€ãã»ãŒã«ã¹ããªã³ã©ã€ã³äŒè°ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãæ¯æŽããSaaSãµãŒãã¹ãMiiTelããšãMiiTel for ZoomããæäŸããŠããŸãã MiiTel MiiTel ã¯ã¯ã©ãŠãåã® IP é»è©±ãµãŒãã¹ã§ããã¹ã¯ãããã¢ããªãã¹ããŒããã©ã³ã¢ããªããã©ãŠã¶ããé»è©±ããããããšãã§ããŸãã MiiTel ç¹åŸŽçãªã®ã¯ã é話å
容ãé³å£°ããŒã¿ãšããŠã¯ã©ãŠãäžã«ä¿åããã é³å£°èªèã«ããæåèµ·ãã ã³ãã¥ãã±ãŒã·ã§ã³ã¹ãã«ã®å¯èŠå ãªã©ãã§ããããšã§ããé»è©±ã§è©±ããå
å®¹ãæ¬äººãããã¯ããŒã å
ã®ã¡ã³ããŒãç°¡åã«æ
å ±å
±æã§ããããã«ããããšã é»è©±å¶æ¥ãè§£æããŠå¯èŠåãå®éåããããšã§æ
å ±å
±æã®å¹çåãæ°äººæè²ãã»ã«ãã³ãŒãã³ã°ã«æŽ»çšããããšãã§ããŸãã MiiTel for Zoom MiiTel for Zoom ã¯ãªã³ã©ã€ã³äŒè°ãµãŒãã¹Zoomã§è¡ã£ãäŒè°ã«å¯ŸããŠè§£æãè¡ããµãŒãã¹ã§ããäŒè°ã®é²ç»ãè°äºé²ã®äœæãäŒè°ã®äžã§ã®ãããã¯ã®æœåºãªã©ãã§ããŸããå€ãã®æè¡ã¯ãMiiTel ãã転çšããŠããŸãã MiiTel for Zoom ãªãç ç©¶éçºãããå¿
èŠãããã®ãïŒ RevComm ã®ããã«äºæ¥ãäž»äœãšããã¹ã¿ãŒãã¢ããäŒæ¥ã«ãããŠã¯ãçæçãªè£œåããµãŒãã¹ã®æé·ãæéèŠèª²é¡ã§ãããäžé·æçã«ããææãåŸãããªãç ç©¶éçºïŒç¹ã«åºç€ç ç©¶ïŒã«åãå
¥ããã¹ãã§ã¯ãªããšèããŠããæ¹ãå€ããšæããŸããããããç§ã¯ãã£ãŒãã©ãŒãã³ã°ãäž»äœãšããæ©æ¢°åŠç¿ããã³AIæè¡ãã³ã¢ãšããäºæ¥ã§ãããªãã°ãç©æ¥µçã«åºç€çãªç ç©¶éçºã«åãæ³šãæ¹ãè¯ããšèããŠããŸãããã®çç±ã¯3ã€ãããŸãã å
鲿è¡ã®ãã£ããã¢ãã 1ã€ç®ã®çç±ã¯ãæ°æè¡ã«ããç Žå£çã€ãããŒã·ã§ã³ãçŽ æ©ãçºæããããã«ãå
é²çãªæè¡ã®ååã«åžžæ¥é ããã¢ã³ããã匵ã£ãŠããå¿
èŠãããããã§ããæ°æè¡ãæ°ã¢ã«ãŽãªãºã ã¯è«æããã¯ãã«ã«ã¬ããŒããšããŠå
¬éãããããšãå€ãã§ãããã®ãããªè«æããã®æ
å ±åéãçæéãªæŽ»åãšããã®ã§ã¯ãªãããã¡ããšæ¥åžžçãªæ¥åãšããŠèªç¶ãšæ
å ±ãéãŸãããšãéèŠã§ãããã®ããã«ã¯ãç ç©¶è
ããšã³ãžãã¢ãåºç€çãªç 究調æ»ã«æéã䜿ãããšã¯æå³ããããŸãããã ããããç¹å®ã®æè¡åéãã¿ã¹ã¯ã«ã®ã¿æ³šåããŠããŸããªãããã«æ³šæããããšã倧äºã§ãç ç©¶åéãæšªæãããããªå¹
åºãèŠéãæã£ãŠæ
å ±ãåŸãããã«åªåããããšãæšå¥šããŸãããªããªãã°ãã©ã®åéã§æ°æè¡ãçªåŠçºè¡šããããããããªãããã§ãã ããäžã€ã®éèŠãªãã€ã³ãã¯ãã¢ã«ãŽãªãºã ã®è©³çްãçè§£ãããã®ã¢ã«ãŽãªãºã ã®æ¬è³ªãèŠæ¥µããããšã§ããè«æã§çºè¡šãããã°ããã®æè¡ãã¢ã«ãŽãªãºã ã¯ããŸã å€ãã®åé¡ãæ±ããŠããŸããçã®é©æ°çæè¡ãã©ããã倿ããããã«ã¯ãåºç€çãªç ç©¶ã«å¯Ÿããçè§£ãšèŠæ¥µããã¹ãã«ãæã£ã人ãè²ãŠãå¿
èŠããããŸãã Â æ°æè¡ã®çŽ æ©ãããžãã¹å 2ã€ç®ã®çç±ã¯ãæ°æè¡ãçŽ æ©ãããžãã¹åããŠæ¢åäºæ¥ãæ¡å€§ããããã§ããä»å¹Žã®å€§ããªç Žå£çã€ãããŒã·ã§ã³ã®äžã€ãšããŠãç»åçæAIãããããŸãã幎åã® OpenAI ã®ã DALL·E 2 ãã«å§ãŸããGoogleã®ã Imagen ããMidjourneyã®ã Midjourney ããStability AIã®ã Stable Diffusion ããªã©æ§ã
ãªãµãŒãã¹ãããŒã«ãçºè¡šãããŠæ³šç®ã济ã³ãŸãããç¹ã« Stable Diffusion ã8æã«å
¬éãããåŸãæ°é±éã§äžçäžã§ãããããªãµãŒãã¹ãããžãã¹ãçãŸããŠããããŸãã«å€é©ã®å¹Žã ã£ããšæããŸãããããã®ç»åçæã¯ã2006幎ã«çºè¡šãããã Denoising Diffusion Probabilistic Models ããã³ã¢æè¡ã§ã¯ããã®ã§ããããµãŒãã¹åã«å¯äžããã¢ã«ãŽãªãºã ã®ã»ãšãã©ã¯1幎以å
ã«çºè¡šãããŠããŸãããã¡ãããOpenAIã9æã«å
¬éããå€èšèªé³å£°èªèåšã Whisper ãã«ã泚ç®ããŠããŸãã 20幎ãããåã§ããã°ãç ç©¶çµæãå®çšåãããã®ã¯ãçºè¡šåŸ10幎20幎åŸãšããæèŠã§ããããããã2017幎ã®ã Transformer ãã2018幎ã BERT ãã2020幎ã GPT-3 ããæ¯ãè¿ã£ãŠã¿ããšãæ°æè¡ãçºè¡šåŸ1幎以å
ã«ãµãŒãã¹åããããšããããšãçè§£ã§ãããšæããŸããç¹ã«ãã¹ã¿ãŒãã¢ããäŒæ¥ã¯æ°æè¡ãã©ãã©ãåã蟌ãã§ãããé
åçãªè£œåããµãŒãã¹ããŠãŒã¶ã«å±ããããšãéèŠã§ãããããã£ãã¹ããŒãæãæã£ãŠããžãã¹ãæšé²ããããã«ã¯ãåºç€ç ç©¶ãéèŠãªç¶æ³ã«ãããšæããŸãã  人æãããã¯ãŒã¯ã®æ¡å
æåŸã®çç±ã¯ã人æç²åŸã®ããã®ãããã¯ãŒã¯ã®æ¡å
ã®ããã§ããã¹ã¿ãŒãã¢ãã嵿¥æã§ãæé·æã§ãããšã«ããåªç§ãªäººãå¿
èŠã§ããå
ã®çç±ã®ãšããåºç€ç ç©¶ã¯ã¹ã¿ãŒãã¢ããã«ãšã£ãŠãéèŠãªã®ã§ãåºç€ç ç©¶ãã§ããåªç§ãªäººæãåžžã«æ¡çšããŠããå¿
èŠããããŸãã ããã§ã¯ãç ç©¶ãã§ããåªç§ãªäººæãšã©ãã§åºäŒããããšãããšãç ç©¶ãæŽ»çºãªå€§åŠã®ç 究宀ãåŠè¡äŒè°ïŒç¹ã«åœéäŒè°ïŒã§åºäŒãããšãã§ããŸããå€§åŠæå¡ã倧åŠçã»å€§åŠé¢çã®èŠéã¯æå€ãšçããããã«ããžãã¹ãã¹ã¿ãŒãã¢ããçéã§æåã«ãªã£ãŠããäŒæ¥ã§ãç¥ãããŠããªãããšãå€ãã§ãããããªäººãã¡ã«èå³ãæã£ãŠããããäžç·ã«ä»äºãããŠãããããã«ã¯ã圌ããæ³šç®ããåŠäŒã§æŽ»èºãããããããŸããããã®ããã«ã¯ãç ç©¶ããŠãã®ææãåŠäŒã§çºè¡šãããšããããšã¯å¹æçã§ããããããããšã§ãæ¥æ¬äžãäžçäžã®ç ç©¶è
ã®ç®ã«æ¢ãŸãããããã¯ãŒã¯ãæ¡å€§ããŠããããšãã§ããŸãã RevComm ãåãçµãç ç©¶åé RevComm ã¯ã人ãšäººãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãå¹çåããAIæè¡ãéçºããã«ããã£ãŠã以äžã®ãããªåéã®ç ç©¶ãé²ããŠããŸãã é³å£°ä¿¡å·åŠç é³å£°èªè é³å£°ææ
èªè 話è
åé¢ã»è©±è
èªè ä¿çé³ã»çå®çªé»è©±å€å® é³å£°åæ å£°è³ªå€æ èªç¶èšèªåŠç 察話èŠçŽ ãããã¯æœåº åºæè¡šçŸæœåºã»å人æ
å ±ãã¹ãã³ã° ãã«ãã¢ãŒãã« é³å£°ããã®é¡ç»åçæ èªåå¿å¯ŸãšãŒãžã§ã³ã 2022幎ã®ç ç©¶å®çžŸ RevComm ã§ã¯ãèªç€Ÿã§ã®ç ç©¶éçºã«å ããŠãçæ³¢å€§åŠã京éœå€§åŠãä¹å·å·¥æ¥å€§åŠãšã®å
±åç ç©¶ãè¡ã£ãŠããŸãã2022幎ã®ç ç©¶å®çžŸãšããŠã¯ãåœå
å€ã®åŠè¡äŒè°ã«7æ¬ãåœéåŠè¡ãžã£ãŒãã«ã«1æ¬ã®è«æãçºè¡šããããšãã§ããŸããã æ
å ±åŠçåŠäŒ 第84åå
šåœå€§äŒ 2022 æ¥ äŒè©±é³å£°ããå¥èªç¹ä»ãããã¹ãã® End-to-End èªè éåŽæš¹æïŒäº¬éœå€§ïŒãç³å¡è³¢åãæ©æ¬æ³°äžïŒRevCommïŒãæ²³åéä¹ïŒäº¬éœå€§ïŒ é³é¿åŠäŒ 2022幎æ¥å£ç ç©¶çºè¡šäŒ Neutral/Emotional Speech Classification using Autoencoder and Output of Intermediate Layer in Emotion Recognizer Santoso JenniferãYamada Takeshi(Univ. of Tsukuba)ãIshizuka KenkichiãHashimoto Taiichi(RevComm)ãMakino Shoji(Waseda Univ./Univ. of Tsukuba) NELE-GANã®åŠç¿ã«çšããé³å£°ããŒã¿éããã³å€æ§æ§ã®åœ±é¿ã«ã€ããŠã®èª¿æ» å è€ éå¹³ãæ©æ¬ æ³°äž (RevComm) ICASSP 2022 Selective Multi-Task Learning For Speech Emotion Recognition Using Corpora Of Different Styles Heran Zhang, Masato Mimura, Tatsuya Kawahara(Kyoto Univ.), Kenkichi Ishizuka(Revcomm) INTERSPEECH 2022 End-to-end Speech-to-Punctuated-Text Recognition Jumon Nozaki, Tatsuya Kawahara(Kyoto Univ.), Kenkichi Ishizuka, Taiichi Hashimoto(Revcomm) Performance Improvement of Speech Emotion Recognition by Neutral Speech Detection Using Autoencoder and Intermediate Representation Jennifer Santoso, Takeshi Yamada(Univ. of Tsukuba), Kenkichi Ishizuka, Taiichi Hashimoto(RevComm), Shoji Makino(Waseda Univ./Univ. of Tsukuba) APSIPA ASC 2022 Speech Emotion Recognition Based on the Reconstruction of Acoustic and Text Features in Latent Space Jennifer Santoso, Takeshi Yamada(Univ. of Tsukuba), Kenkichi Ishizuka, Taiichi Hashimoto(RevComm), Shoji Makino(Waseda Univ.//Univ. of Tsukuba) IEEE Access Speech Emotion Recognition Based on Self-Attention Weight Correction for Acoustic and Text Features Jennifer Santoso, Takeshi Yamada(Tsukuba Univ.), Kenkichi Ishizuka, Taiichi Hashimoto(RevComm), Shoji Makino(Waseda Univ./Tsukuba Univ.) ãããã« RevComm ã§ã¯ãé³å£°è§£æãèªç¶èšèªåŠçãç»ååŠçã®ç ç©¶è
ãæ©æ¢°åŠç¿ãšã³ãžãã¢ã倧åéããŠããŸããæ°ããæè¡ã䜿ã£ãŠãŠãŒã¶ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«é©åœãèµ·ãããŸãããïŒ Research Engineer æ¡çšããŒãžïŒ https://hrmos.co/pages/revcomm/jobs PRTIMES STORYãAIãã³ãã¥ãã±ãŒã·ã§ã³ã®è³ªãå¯èŠåãããã¬ãã³ã ã«èããé³å£°DXãã®æªæ¥ãšã¯ïŒãïŒ https://prtimes.jp/story/detail/wrVWQOieZZb
ãµãŒããŒãµã€ããšã³ãžãã¢ã®å°å³¶ååŒã§ããä»å㯠2022 幎 11 æ 12 æ¥ïŒåïŒã«è¡ããããDjangoCongress JP 2022 ãžã®ç»å£ã»åå ã¬ããŒãããéãããŸãã manage.py æ·±å ã è¬æŒããã¯ã¢ãã Django 4.1 ã§ã® Asynchronous æ¥çµé»åçã§ã®Django掻çšäºäŸçŽ¹ä» çµããã« manage.py æ·±å ã åŒç€Ÿãã㯠1 åããµãŒããŒãµã€ããšã³ãžãã¢ã®æŸåæ
倪éãç»å£ããŸããã以äžã DjangoCongress JP ã®å
¬åŒãµã€ã ããåŒçšããŸãã Django 管çã³ãã³ã manage.py ãæ·±æã SHINTARO Matsudo manage.py 㯠Django ãããžã§ã¯ãã«æ¬ ãããªããæ§ã
ãªæäœãè¡ãããã®ã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã§ãã æ¬çºè¡šã§ã¯ãmanage.py ã®å
éšå®è£
ã远ããããŠãããã©ã®ãããªããšãè¡ãããŠãããèŠãŠãããŸãã ãŸããããã©ã«ãã³ãã³ã (check, migrate, runserver, shell, testãªã©) ã®è§£èª¬ããã«ã¹ã¿ã ã³ãã³ããéåæåŠçããããåŠçã§äœ¿çšããäºäŸã玹ä»ããŸãã ã¿ãªããã®ããããŒDjangoéçºã©ã€ãã®äžå©ã«ãªãã°å¹žãã§ãã docs.google.com ç»å£ã§ã¯ãmanage.py ã®å®è£
ã远ããããããšã«å§ãŸããDjango 4 ç³»ã§æ°ããç»å Žããã³ãã³ããæ©èœã®ç޹ä»ãã«ã¹ã¿ã ã³ãã³ãã®åŒç€Ÿã§ã®å©çšäŸã®ç޹ä»ãããŸããã ç»å£ã®æ§å 以äžãç»å£ããæŸåããã®ã³ã¡ã³ãã§ãã ä»åãå€éšç»å£ãåããŠçµéšãããŠããã ããŸããã ãŸããµããŒããã¢ããã€ã¹ããŠãã ãã£ãååãã¡ã«æè¬ãããã§ããåœæ¥ãå¿æŽã«æ¥ãŠãããŠå¿åŒ·ãã£ãã§ãã ç»å£ããããã«ã¯ãèããŠããã人ã«äžã€ã§ãæ°ããæ
å ±ãæ°ã¥ããæã¡åž°ã£ãŠããããããã§ãããããèãã調ã¹ãæºåããŸããã ãŸããRevCommã§ã¯ãTechTalkãšãã瀟å
å匷äŒãæ¯é±éå¬ããŠãããäºåã«ããã§çºè¡šããããšã«ãã£ãŠãç»å£ã«åããŠã®èª²é¡ãæŽãåºãããšãã§ããŸããããã®æºåã®ãããã§ãåœæ¥ã¯è¯ãçºè¡šãã§ãããšæããŸãã ãããçºè¡šãããããšä»¥äžã«ãã¿ãªããã®åå¿ããåŸãããããšããããããã£ããšæããŠããŸããèããŠãããæ¹ã質åãããŠãããæ¹ãTwitterã§åå¿ããŠãããæ¹ããã³ãã»ã¢ããã€ã¹ãäžãã£ãæ¹ãå€ãã®æ¹ããåŠã¶ããšãã§ããŸããã ååããŠãã ãã£ãæ¹ã
ã«å ±ããããã«ããŸãæ¥å¹Žãç»å£ãç®æããŠããã«è¯ãæºåãããŠãããããšæããŸãã æåŸã«ãã®å ŽãçšæããŠãã ãã£ãã¹ãã³ãµãŒãã¹ã¿ããã®çæ§ã«æ¹ããŠæè¬ããäŒããããã§ããããããšãããããŸããããšãŠã楜ããã£ãã§ãïŒ è¬æŒããã¯ã¢ãã çè
ã®å°å³¶ãèããããŒã¯ãããã€ãããã¯ã¢ããããŠã玹ä»ããŸãã Django 4.1 ã§ã® Asynchronous speakerdeck.com Junya Fukuda ããã®ããŒã¯ã§ãDjango 4.1 ã§ã®éåæå¯Ÿå¿ã®å
容ãšããªããã®ãããªå®è£
ã«ãªã£ãã®ãã®èæ¯ã解説ã§ããã 4.1 ã§ã®éåæå¯Ÿå¿ã¯å
¬åŒããã¥ã¡ã³ãã«ä»¥äžã®ããã«æžãããŠããŸãã Note that, at this stage, the underlying database operations remain synchronous ïŒæèš³: ãã®æ®µéã§ã¯ãåºç€ã®ããŒã¿ããŒã¹æäœã¯åæåŠçã®ãŸãŸã§ããããšã«æ³šæããŠãã ããïŒ ãã®æ³šæãèªãã§åèªèº«ããçµå±ãéåæå¯Ÿå¿ããã®ïŒããŠãªãã®ïŒããšæ··ä¹±ããŠããŸããããããä»åã® Fukuda ããã®çºè¡šãèããŠæŽçãããŠææ¿ããŸããã æ¥çµé»åçã§ã®Django掻çšäºäŸçŽ¹ä» speakerdeck.com 7 幎éïŒïŒïŒãã® Django ã§ã®éçºå®çžŸããããšããæ¥çµæ°è瀟ããã®çºè¡šã§ããã é·ã幎æãçµãŠããããããã®äŸåé¢ä¿ç®¡çã Lint ãªã©ã®ããŒã«ã®å€é·ãç ä¿®ã§ã®å·¥å€«ã瀟å
ã§ã®éçšããåŸã Tips éãªã©ãçŸå Žãªãã§ã¯ã®ç¥èŠãè±å¯ã§ããã Tips éã®äžã«ã¯è² è·ãäžãã工倫ãã¢ã¯ã»ã¹ãéäžãããšãã®å¯ŸåŠãªã©ãéçšèª²é¡ã«é¢ãããã®ãå€ãå«ãŸããŠããŸããã ç¹ã« HTTPS ã®ã³ãã¯ã·ã§ã³ã䜿ãåãããšã§ CPU ã®å©çšçãäžãããšãã話é¡ããããè€æ°ã®ãµãŒãã¹ã«ã¢ã¯ã»ã¹ãã MiiTel ã§ããã®å¯Ÿçã¯äœ¿ãããã ãšæããŸãããæ©éã察å¿ãæ€èšããããšæã£ãŠããŸãã çµããã« ä»åãå人çã«ãä¹
ãã¶ãã®ãªãã©ã€ã³ã®æè¡ã€ãã³ãã«åå ããŸããããã®å Žã§ããŒã¯ãèããäŒæ©æéãå»äžã§ã®éè«ãå«ãããšãŠãå¯åºŠã®æ¿ãæéãéãããŸãããçºè¡šè
ã®æ¹ã«çŽæ¥è³ªåãããããæè¬ãäŒãããã§ããŠãã²ãšãã®åå è
ãšããŠãšãŠãå¬ããã£ãã§ãã ç¥ããªãã£ãã©ã€ãã©ãªãæ©èœãå瀟ã§ã®å®è·µäŸãéçšäŸãªã©ãããã䌺ãããšãã§ããŠæ¬åœã«ããã£ãã§ãã äž»å¬ãéå¶ã¹ã¿ãããã¹ãã³ãµãŒã»äŒå ŽæäŸãããŠãã ãã£ãæ¥çµæ°èç€Ÿã®æ¹ã
ããããŠåå è
ã®ã¿ãªãããæ¬åœã«ããããšãããããŸããã RevComm ã§ã¯ãä»åŸã Python ã Django ã®ã³ãã¥ããã£ãžã®çºä¿¡ã«åãå
¥ããŠãããŸãããŸããäžç·ã«çãäžããŠããã仲éãåéããŠããŸããããèå³ããããŸãããããã²ä»¥äžã®æ¡çšãµã€ããã芧ãã ããã www.revcomm.co.jp
TL;DRð€© é³å£°èªèåšWhisperã®èªè粟床ãšèªèé床ã«ã€ããŠèª¿æ» èªè粟床 è±èªã§ã¯è«æåæ§ã®çµæ æ¥æ¬èªã®èªè粟床ã¯ãã¡ã€ã³ã«äŸå baseã¢ãã«ã®æšè«ããã¡ã€ã³ã«ããäžå®å® ããŒã ãµãŒãã®å©çšã«ãããæšè«ã®é 奿§ãåäž largeã¢ãã«ã®CERã¯baseã¢ãã«ã®ååçšåºŠ èªèé床 baseã¢ãã«ã®RTFã¯GPUã§0.104ãlargeã®RTFã¯0.408 ããããµã€ãºãªã©ãæé©åããããšã§æ¹å ããã«ã¡ã¯ãRevCommã®ãªãµãŒãããŒã ã§ã€ã³ã¿ãŒã³ãããŠããäžç°äºã§ãã 2022幎9æ21æ¥ã«OpenAIããWhisperãšåŒã°ããé³å£°èªèåšã äžè¬ã«å
¬é ãããŸãããä»åã¯ãWhisperã®æ§èœã«é¢ããŠèª¿æ»ãè¡ã£ãã®ã§ç޹ä»ããŸãã TL;DRð€© Whisperãšã¯ å®éšãšçµæ å®éšæ¡ä»¶ èªè粟床 è±èªã§ã®WER LibriSpeech test-clean test-other Earnings-21 æ¥æ¬èªã§ã®CER base, largeã®æ¯èŒ ä»ã®ã·ã¹ãã ãšã®æ¯èŒ revcomm-test-setã«ãããããŒã ãµãŒãå©çšã®å¹æ èªèé床 ã¢ãã«ããšã®RTF baseã¢ãã«ã«ãããããããµã€ãºã«ããRTFã®å€å ããŒã ãµã€ãºã«ããRTFã®å€å ãŸãšã Whisperãšã¯ Whisperã¯ãOpenAIãçºè¡šããã Robust Speech Recognition via Large-Scale Weak Supervision ãã§ææ¡ãããé³å£°èªèåšã§ããåŸæ¥ã®é³å£°èªèåšã¯æ°åããæ°äžæéã®é³å£°ããŒã¿ã§åŠç¿ãããã®ãäž»æµã§ããããWhisperã¯68äžæéãã®é³å£°ããŒã¿ãWebäžããåéããTransformerã§åŠç¿ããŠãããšããã倧ããªç¹åŸŽã§ãããŸããåŠç¿ã®éã«ã¯é³å£°èªèã«éããã翻蚳ãVADïŒé³å£°åºéæ€åºïŒãã¢ã©ã€ã¡ã³ããªã©ã®æ§ã
ãªã¿ã¹ã¯ã§åŠç¿ãããŠããŸããããã«ãããæ§ã
ãªçšéã«é©çšå¯èœãªæ±çšã¢ãã«ãåŠç¿ã§ããŠãããšå ±åãããŠããŸããä»åã¯ãWhisperã®é³å£°èªèã®æ§èœã«çŠç¹ãåœãŠã調æ»ãè¡ããŸããã å®éšãšçµæ å®éšã§ã¯ãAWSäžã«CPUã€ã³ã¹ã¿ã³ã¹ã»GPUã€ã³ã¹ã¿ã³ã¹ãæ§ç¯ãã OpenAIãæäŸããŠãã baseã¢ãã«ããã³largeã¢ãã«ã®èªè粟床ã»èªèé床ã«ã€ããŠèª¿æ»ãè¡ããŸããã å®éšæ¡ä»¶ ç¹çããªãéããå®éšæ¡ä»¶ã¯äžè¡šã®éãã§ãã EC2ã€ã³ã¹ã¿ã³ã¹ CPU: c5.9xlarge (36CPU) æšè«ã«ã¯32CPUãäœ¿çš GPU: g4dn.xlarge (4CPU, NVIDIA T4 16GB VRAM) èªè粟床ãã¹ãã»ãã è±èª LibriSpeech test-clean, test-other (ãªãŒãã£ãªããã¯èªã¿äžãé³å£°ïŒ Earnings-21 ïŒæ±ºç®èª¬æäŒã®é³å£°ïŒ æ¥æ¬èª TED è¬æŒé³å£° https://github.com/laboroai/TEDxJP-10K Common Voice Mozilla Common Voice ( https://commonvoice.mozilla.org/ja )ã®æ¥æ¬èªé³å£°ããŒã¿ãã27æéåã®é³å£°ããŒã¿ãéžãã ãã® revcomm-test-set (RevCommå
補ã®ããŒã¿ãé話é³å£°ããããªäŒè°é³å£°ïŒ èªèé床ãã¹ãã»ãã revcomm-video (revcomm-test-setã®ãã¡ããããªäŒè°é³å£°ã®ãµãã»ãã æ¥æ¬èª8.5æéïŒ ããããµã€ãº 1 ãã³ãŒãã£ã³ã°ææ³ è²ªæ¬²æ³ ããã¹ãã®æ£èŠå è±èª: Whisperå
¬åŒå®è£
ã§äœ¿çšãããŠããææ³ æ¥æ¬èª: å¥èªç¹é€å» èªè粟床 Whisperã®æšè«ãGPUã€ã³ã¹ã¿ã³ã¹ã§è¡ãããã®èªè粟床ã«ã€ããŠèª¿æ»ããŸããã è±èªã§ã®WER è±èªã§ã¯ãbaseã¢ãã«ããã³largeã¢ãã«ã®word error rateïŒWER; åèªèª€ãçïŒã調æ»ããŸããã LibriSpeech test-clean test-other å³1 LibriSpeech test-clean test-otherã«ãããbase, base.en, largeã¢ãã«ã«ããæšè«çµæã®WER ãŸããå³1ã«LibriSpeech test-clean, test-otherã«ãããçµæã瀺ããŸãããã®çµæã¯ãè«æã§ç€ºãããŠããçµæãšäžèŽããŠããŸããïŒ è«æ Appendix D.1.1åç
§ïŒWERã®åŸåãšããŠbase > base.en > largeã確èªãããŸããã Earnings-21 å³2 Earnings21ã«ãããbase, largeã«ããæšè«çµæã®WER 次ã«Earning-21ã«ãããçµæãå³2ã«ç€ºããŸããEarnings-21ã¯æ°ååã®åäžé³å£°ãã¡ã€ã«ãããªããŸããäžæ¹ã§ãWhisperã¯30ç§ä»¥äžã®é³å£°ã§åŠç¿ããŠãããããéåžžã®æšè«ã¯è¡ããŸããããã®åé¡ã«å¯ŸããŠãè«æã§ã¯é³å£°ã« çª ãé©çšããŠ30ç§ã«åã£ãåŸã«ãèªèçµæã«å¿ããŠçªãã¹ã©ã€ããããææ³ã䜿çšãããŠããŸãïŒ è«æ 3.8ç¯åç
§ïŒãEarnings-21ã§ã®WERã§ãããè«æã«ç€ºãããŠãããã®ããå°ãæªãçµæãšãªã£ãŠããŸããåå ãšããŠã¯ãããã¹ãæšæºåææ³ã®éããªã©ãèããããŸãã æ¥æ¬èªã§ã®CER æ¥æ¬èªã§ã¯ãlargeã¢ãã«ããã³baseã¢ãã«åæ¹ã®character error rateïŒCER; æå誀ãçïŒã調æ»ããŸããã base, largeã®æ¯èŒ å³3 忥æ¬èªãã¹ãã»ããã«ãããbaseã¢ãã«ãlargeã¢ãã«ã®æ§èœ ãŸãã忥æ¬èªãã¹ãã»ããã«ãããæ§èœãå³3ã«ç€ºããŸãããã¡ãã«é¢ããŠãbaseã¢ãã«ã«æ¯ã¹largeã¢ãã«ãåªããæ§èœã瀺ããŠããŸããTEDãšCommon Voiceã«æ³šç®ããŠã¿ããšãbaseã¢ãã«ã®CERã¯äœããªããã®ã®ãlargeã¢ãã«ã®CERã¯ããªãäœããªã£ãŠããŸããäžæ¹ã§revcomm-test-setã«é¢ããŠã¯ãbaseã largeãšãã«éåžžã«æªãèªè粟床ãšãªã£ãŠããŸããbaseã¢ãã«ã®èªèçµæã確èªããŠã¿ããšã以äžã®ãããªçµæãæ£èŠãããŸããã ãããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ããããã§ ããã¯Transformerãªã©ã®èªå·±ååž°åã¢ãã«ã§ææçºçããããªããŒãã£ã³ã°ïŒç¹°ãè¿ãïŒãšããçŸè±¡ã§ããrevcomm-test-setã®ãã¡ã€ã³ãWhisperã®åŠç¿ã«äœ¿çšããããã¡ã€ã³ãšç°ãªããããåºåãäžå®å®ã«ãªã£ãŠãããšèããããŸããããã«é¢ããŠã¯ãããŒã ãµãŒãã®å©çšã«ãã倧å¹
ã«CERãæ¹åããããšãåŸã»ã©ç޹ä»ããŸãã è«æ ã§ã¯ãæ¥æ¬èªã®Common Voice9ã«ãããŠCERã0.094ãæ¥æ¬èªã®FLEURSã«ãããŠCERã0.064ãšå ±åãããŠããŸãããæã
ãçšãããã¹ãã»ããã®ãã¡ãç¹ã«revcomm-test-setã®èªè粟床ã§ã¯è«æäžã«ãããããªäœãCERã«ã¯ãªããŸããã§ããã ä»ã®ã·ã¹ãã ãšã®æ¯èŒ åºãäžè¬ã«é³å£°èªèãµãŒãã¹ãå±éããŠããä»ç€Ÿã®é³å£°èªèåšãçšããŠãTEDãšCommon Voiceã«ãããŠCERã®æ¯èŒãè¡ããŸãããå³4-6 ã«ãä»ç€Ÿã®é³å£°èªèåšãšbaseã¢ãã« (whisper-base) ãlargeã¢ãã« (whisper-large) ã®æ¯èŒçµæã瀺ããŸãã å³4 TEDã«ãããbaseã¢ãã«ãlargeã¢ãã«ããã³ä»ç€Ÿã®é³å£°èªèæ©ã®æ¯èŒ å³5 CommonVoiceã«ãããbaseã¢ãã«ãlargeã¢ãã«ããã³ä»ç€Ÿã®é³å£°èªèæ©ã®æ¯èŒ å³6 瞊軞ãCommonVoice暪軞ãTEDã®CERãšããä»ç€Ÿã®é³å£°èªèæ©ã®æ¯èŒ ãã®çµæãã¿ããšãwhisper-baseã®æ§èœã¯å¥®ããªããã®ã®ãwhisper-largeãTEDã»Common Voiceã®åæ¹ã«ãããŠåªããæ§èœã瀺ããŠããŸããæ¥æ¬èªã®ASRããããæã«ãwhisper-largeã¯æåãªéžæè¢ã§ãããšèšããã§ãããã revcomm-test-setã«ãããããŒã ãµãŒãå©çšã®å¹æ å
ã»ã©ãrevcomm-test-setã«ãããŠCERãéåžžã«æªããªãçµæã玹ä»ããŸããããã®çµæãèžãŸããŠããã³ãŒãã£ã³ã°ææ³ã«ããŒã ãµãŒããå©çšããããšã§èªèç²ŸåºŠãæ¹åããªããæ€èšãè¡ããŸãããçµæãå³7ã«ç€ºããŸãã å³7 ããŒã ãµãŒãå©çšã«ããrevcomm-test-setã«ãããCERã®å€å å³7ã®çµæãèŠããšãbaseã¢ãã«ã§ã¯è²ªæ¬²æ³ (greedy) ãšæ¯èŒããŠãããŒã ãµãŒããå©çšããããšã«ããCERã倧å¹
ã«æ¹åããŠããããšã確èªã§ããŸããæšè«çµæãèŠãŠããå
ã»ã©ã®ãããªãªããŒãã£ã³ã°ã¯ã»ãšãã©ç¢ºèªããããæšè«ã®é 奿§ãåäžããŠããããšã確èªã§ããŸããããã®ããšãããbaseã¢ãã«ãçšããrevcomm-test-setã®æšè«ã«ãããŠãããŒã ãµãŒãã®å©çšãããªãæå¹ã§ãããšèšããŸããäžæ¹ã§ãlargeã¢ãã«ã«é¢ããŠã¯ãæ¹åã¯ããŠãããã®ã®baseã¢ãã«ã®ãããªå€§å¹
ãªæ¹åã¯èŠãããŸããã§ããã ããŒã ãµã€ãºïŒ2ã®æã®largeã¢ãã«ã®åºåã確èªããŠã¿ããšã以äžã®ãããªãã®ã確èªãããŸããã æ£è§£æ Whisper largeã¢ãã«ã«ããèªèçµæ ïŒããŒã ãµã€ãº 2ïŒ ãã®ãŒãŸããã¡ããŒã©ããã颚ã«äœ¿ããã£ãŠãããšããªãã§ããã©ããŒãã®å®ã¯ãŒãããã®ããŒããããã«ãªã£ãŠãŠè²ãæ¿ããšããã£ãŠããã®ã¯ãŒé»è©±ãããéããæéé»ããæã¯ãŒãã®ããè²ãã©ãã©ãæ¿ããªã£ãŠããæãåæ°ãå€ããªã£ã ãã¡ãã¯ã©ããããµãã«äœ¿ãããšãããšãããªãã§ããã©ããå®ã¯ããããŒããããã«ãªã£ãŠããŠè²ãæ¿ããšãããšããã®ã¯é»è©±ãéãããšããéé»ãããšãã¯è²ãã©ãã©ãæ¿ããªã£ãŠãããåæ°ãå€ããªãã ãã®äŸããã¯ãããã®ãŒãããŸãããªã©ã®èšããã©ã¿ïŒãã£ã©ãŒïŒããwhisper-largeã®èªèçµæã«å«ãŸããŠããªãããšã確èªã§ããŸããããã¯ãwhisperã®åŠç¿ã«çšããããããŒã¿ã»ããã«ãã£ã©ãŒãã»ãšãã©å«ãŸããŠããããæšè«çµæã«ãã£ã©ãŒãå«ãŸãã«ãããªã£ãŠãããããšæšæž¬ãããŸããäžæ¹ã§ãrevcomm-test-setã®æ£è§£æã¯ãé話é³å£°ããããªäŒè°ã®çºè©±ãèããããšããã«æžãèµ·ããããã®ã§ããããã£ã©ãŒãå€ãå«ãŸããŸãããã£ã©ãŒãæžãèµ·ãããŠããªãããšããCERã®ããã«ããã¯ãšãªã£ãŠãããšèããããŸãã èªèé床 èªèé床ã«é¢ããŠã¯ãrevcomm-test-setã®ãµãã»ããã§ããrevcomm-videoã®æšè«ã«ãããreal time factor (RTF) ã調æ»ããŸãããRTFã¯ä»¥äžã®åŒã§æ±ããããŸãã æ¬èšäºã§ã¯ãinferãšglobalã®2çš®é¡ã®RTFã調æ»ããŸãããããããå®çŸ©ã¯ä»¥äžã®ãšããã§ãã infer: ã¢ãã«ã®é äŒæã®ã¿ã«ããã£ãæé global : é³å£°ã®ãã³ãŒããã¡ã«ã¹ãã¯ããã°ã©ã çæãªã©ã®æšè«ã«å¿
èŠãªåŠçãã¹ãŠãåèšããæé 泚æç¹: ä»åã®æšè«ã§ã¯ãå
šãŠã®é³å£°ã30ç§ã«ãŒãããã£ã³ã°ããŠããŸããããã¯ãWhisperå
¬åŒå®è£
ã§ã¯ã30ç§ä»¥å€ã®é³å£°ã¯å
¥åã§ããªãããã«ãªã£ãŠããããã§ãã ã¢ãã«ããšã®RTF å³8 CPUã€ã³ã¹ã¿ã³ã¹ãGPUã€ã³ã¹ã¿ã³ã¹ã«ãããbaseã¢ãã«ãlargeã¢ãã«ã®èªèé床 CPUã€ã³ã¹ã¿ã³ã¹ãGPUã€ã³ã¹ã¿ã³ã¹ã«ãããåã¢ãã«ã®RTFãå³8ã«ç€ºããŸãããŸããGPUã§ã®æšè«ã«ãã倧å¹
ã«RTFãæ¹åããããšãåãããŸããç¹ã«largeã¢ãã«ã§ã¯ãglobalã«ãããŠGPUã€ã³ã¹ã¿ã³ã¹ãå©çšããããšã«ãã2.483ãã0.408ãžãšæ¹åããŠããŸãã ãŸããGPUã§ã¯inferãšglobalã§RTFã倧ããç°ãªãããšã確èªãããŸãããããã¯ãCPUã§ãã³ãŒãããé³å£°ãGPUã«ç§»åãããéã®éä¿¡ãªã©ãåå ãšãªã£ãŠãããšèããããŸãããããã£ãéä¿¡ã®ãªãŒããŒãããã¯ãåŠçãéåæåããããšã«ããæ¹åã§ããå¯èœæ§ããããŸãã baseã¢ãã«ã«ãããããããµã€ãºã«ããRTFã®å€å 以äžã®å®éšã§ã¯ããããµã€ãºã1ãšããŠããŸããããGPUã§ã®baseã¢ãã«æšè«ã«ãããŠGPUã®äœ¿çšçã確èªãããšãã40%çšåºŠã§ãããGPUã®èœåãæå€§éã«å©çšã§ããŠããŸããã§ãããããããµã€ãºããã倧ããããã°ãããã«å¹çããæšè«ãã§ããã®ã§ã¯ãšèããããããµã€ãºã«ããRTFã®å€åã調æ»ããŸãããçµæãå³9ã«ç€ºããŸãã å³9 ããããµã€ãºã«ããRTFã®å€å çµæãããããããµã€ãº8çšåºŠãäžçªå¹çããæšè«ãè¡ããããšã確èªã§ããŸããããã ããåŠçã®éåæåãªã©ã«ããæé©ãªããããµã€ãºã¯å€åãããšæãããŸãã ããŒã ãµã€ãºã«ããRTFã®å€å å
ã»ã©ããŒã ãµãŒãã®å©çšã«ããããã¡ã€ã³ã«ããäžå®å®ãªbaseã¢ãã«ã®æšè«ãããé å¥ã«ãªãããšã玹ä»ããŸãããäžæ¹ã§ãããŒã ãµãŒãã䜿çšããããšã«ããåŠçãå¢ããããæšè«æéãé·ããªããšèããããŸããããã§ãããŒã ãµãŒãã䜿çšããããšã§ã©ã®çšåºŠåŠçæéãå¢ãããã調æ»ããŸããããªããæšè«ã¯GPUã€ã³ã¹ã¿ã³ã¹ã§è¡ããŸãããçµæãå³10ã«ç€ºããŸãã å³10 ããŒã ãµã€ãºã«ããRTFã®å€å ãŸããå
šäœã®åŸåãšããŠããŒã ãµã€ãºã倧ããã»ã©ãRTFã倧ãããªãããšã確èªã§ããŸãããŸããé¢çœãçµæãšããŠãbaseã¢ãã«ã®globalã«é¢ããŠããŒã ãµãŒãå©çšã«ããRTFãæ¹åãããŠããããšã確èªã§ããŸããããã¯ãããŒã ãµãŒãã䜿çšããããšã«ãã£ãŠãªããŒãã£ã³ã°ãæ¹åãããWhisperã®åºåtokené·ãçããªã£ãããã«RTFãæ¹åããŠãããšæšæž¬ãããŸãã ãŸãšã Whisperã®èªè粟床ããã³èªèé床ã«ã€ããŠèª¿æ»ãè¡ããçµæã玹ä»ããŸããã èªè粟床ã«é¢ããŠã¯ãè±èªã§ã¯ããããè«æéãã®çµæã確èªãããŸãããäžæ¹ã§ãæ¥æ¬èªã®èªè粟床ã«ã€ããŠã¯ãç¹ã«RevCommå
補ã®ãã¹ãã»ããã«ããè©äŸ¡ã«ã€ããŠãè«æã§ç€ºãããŠããã»ã©äœãCERã«ã¯ãªããŸããã§ãããWhisperã®é³å£°èªèçµæã«ã¯ãã£ã©ãŒãã»ãšãã©å
¥ããªãããã察話é³å£°ã«ããããã£ã©ãŒãèããããšããã«æžãèµ·ãããããã¹ããæ£è§£ãšããè©äŸ¡ã§ã¯ãCERã倧ããªå€ãšãªãããšãããããã§ãããŸããbaseã¢ãã«ã®æšè«ã«ãããŠããã¡ã€ã³ã«ãã£ãŠã¯ããŒã ãµãŒããæ¥µããŠå¹æçã§ããããšã確èªãããŸããã èªèé床ã«é¢ããŠã¯GPUã®å©çšãéåžžã«å¹æçã§ããããšã確èªãããäžæ¹ã§ãGPUå©çšã«ããé äŒæä»¥å€ã®æéãå¢ããããšã確èªãããŸãããããã¯CPU-GPUéã®ããŒã¿ã®ç§»åã«æéãããã£ãŠãããšæšæž¬ãããŸãã
2022 幎 11 æ12 æ¥ (å) ã«éå¬ããã DjangoCongress JP 2022 ã« RevComm ã®ãšã³ãžãã¢ã®æŸåæ
倪éãç»å£ããŸããã¿ã€ãã«ã¯ãDjango 管çã³ãã³ã manage.py ãæ·±æããã§ãã ã€ãã³ãæŠèŠ å
¬åŒãµã€ãããåŒçš https://djangocongress.jp/ DjangoCongress JPã¯æ¥æ¬ã§éå¬ãããDjango Webãã¬ãŒã ã¯ãŒã¯ã®ã«ã³ãã¡ã¬ã³ã¹ã§ãã DjangoCongress JPã¯ãDjangoã§ã¢ããªã±ãŒã·ã§ã³ãéçºããŠãã人ãDjangoãåŠãã§ãã人ãªã©Djangoã«é¢ããå
šãŠã®äººãåå ã§ããŸãã åå ããå
šãŠã®äººãDjangoã«ã€ããŠäº€æµããåºäŒããåŠã³ã楜ãã¿ãæ·±ãçè§£ãåŸãããšãç®çã«ããŠããŸãã æ¥çš: 2022 幎 11 æ12 æ¥ (å) äŒå Ž æ¥çµã«ã³ãã¡ã¬ã³ã¹ã«ãŒã åå ç³ã蟌ã¿ã¯ ãã¡ã äž»å¬: æ¥æ¬çµæžæ°è瀟 ããžã¿ã«ç·šæãŠããã éå¶: django-ja ç»å£æ
å ± Django 管çã³ãã³ã manage.py ãæ·±æã å
¬åŒãµã€ãããåŒçš https://djangocongress.jp/#talk-11 manage.py 㯠Django ãããžã§ã¯ãã«æ¬ ãããªããæ§ã
ãªæäœãè¡ãããã®ã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã§ãã æ¬çºè¡šã§ã¯ãmanage.py ã®å
éšå®è£
ã远ããããŠãããã©ã®ãããªããšãè¡ãããŠãããèŠãŠãããŸãã ãŸããããã©ã«ãã³ãã³ã (check, migrate, runserver, shell, testãªã©) ã®è§£èª¬ããã«ã¹ã¿ã ã³ãã³ããéåæåŠçããããåŠçã§äœ¿çšããäºäŸã玹ä»ããŸãã ã¿ãªããã®ããããŒDjangoéçºã©ã€ãã®äžå©ã«ãªãã°å¹žãã§ãã æ¥æ: 2022幎 11 æ 12 æ¥ (å) 17:10ïœ17:55 (ROOM 1) ç»å£è
: SHINTARO Matsudo ãªã³ã¯: https://djangocongress.jp/#talk-11 æåŸã« RevComm ã¯é»è©±å¶æ¥ã顧客å¿å¯Ÿãå¯èŠåããé³å£°è§£æAIæèŒåã®ã¯ã©ãŠãIPé»è©±ãMiiTelïŒããŒãã«ïŒããéçºããŠããŸãã ãããã¯ãã®éçºã«ãã㊠Web ã¢ããªã±ãŒã·ã§ã³ãæ©æ¢°åŠç¿/深局åŠç¿ãªã©ã®é åã§ Python ãåºã䜿çšãããŠãããDjango ãæ¡çšããŠããŸãã ãã³ãã¥ãã±ãŒã·ã§ã³ãåçºæã人ãäººãæ³ã瀟äŒãåµãããšããããã·ã§ã³ãéæããã¹ããäžç·ã«ãããã¯ããéçºããŠé ãããšã³ãžãã¢ãåéããŠããŸãïŒ hrmos.co
RevComm ã®å°éã§ãã 2022幎10æ14æ¥(é)ïœ15æ¥(å) ã«éå¬ããã PyCon JP 2022 ã«åå ããŸããã åŒç€Ÿããã¯é¶å±± 嶺ãå·æ·» 貎ä¹ã®2åãç»å£ãæŸå æ
倪éãã³ã¢ã¹ã¿ãããšããŠåå ããŸããã ä»åã¯ã«ã³ãã¡ã¬ã³ã¹ã®æ¯ãè¿ããšããŠç»å£è
ãã®ã³ã¡ã³ããšãããŒã¯ã®ææ³ããéãããŸãã ç»å£æ¯ãè¿ã 詳解 print(âHello, worldâ) 誰ããç¥ã print() 颿°ã®åŠçãäŸã«ãCèšèª/OS ã¬ã€ã€ãŒã®ä»çµã¿ãæ·±å ããŠãããŸãã ãã㊠Python ãå«ããããã°ã©ãã³ã°èšèªãã©ã®ããã«ããŠåããããšããä»çµã¿ãç¥ãããã£ããã«ãªãããšæããŸãã ç»å£è
: Rei Suyama (rhoboro) ã¢ãŒã«ã€ãURL: - YouTube è³æ: docs.google.com ç»å£ã®ææ³ ããã¯ãšã³ããšã³ãžãã¢ã®é¶å±±ã§ããæ®æ®µã¯ PBX ãšããé³å£°é話ã«é¢ããæ©èœã®èšèšãéçºãè¡ã£ãŠããŸãã ã³ããçŠã«ãªã£ãŠããã¯PyCon JPã«éãããªã³ã©ã€ã³ç»å£ã°ããã§ããã®ã§ããªãã©ã€ã³ã§ã®ç»å£ã¯ä¹
ãã¶ãã§ããã ãªãã©ã€ã³ã ãšåå è
ãç®ã®åã«ãããããåå¿ãæŽã¿ãããç¹ã¯ãã¯ãè¯ãã£ãã§ããã ç§ã®ç»å£ã¯1æ¥ç®ã®æ¯èŒçæ©ãæé垯ã ã£ãããããã®åŸã®äŒæ©æéãªã©ã«ãé¶å±±ããã®ããŒã¯èããŠããŸããããšå£°ããããŠãã ãã£ãæ¹ã
ãããŠãšãŠãå¬ããã£ãã§ãã ä»ã®æ¹ã
ã®ããŒã¯ã§ã¯ãå
容ãåœç¶ã®ããšãªããã¹ããŒã«ãŒã®æ¹ã
ã®è©±ãæ¹ãç«ã¡æ¯ãèãããåŠã¹ãããšãå€ãã£ãã®ã§ãããããä»åŸã®èªåã®çºè¡šã«ç掻ãããŠãããããšæããŸããã Fast API ãšåŠã¶ WebRTC ãªã¢ã«ã¿ã€ã éä¿¡ã®ä»çµã¿ãšããŠæšä»äž»æµã«ãªãã€ã€ãã WebRTC ã«ã€ããŠæŠèŠããå°å
¥ãããã¢ãéããŠç°¡åã«åãã远ããããŠããå
容ã§ãã ç»å£è
: Takayuki Kawazoe (@zoetaka38) ã¢ãŒã«ã€ãURL: - YouTube è³æ: docs.google.com ç»å£ã®ææ³ ãœãããŠã§ã¢ãšã³ãžãã¢ã®å·æ·»ã§ããæ®æ®µã¯ç€Ÿå
æ¥åãåæ»åããããšã§äºæ¥ã«å¯äžããããã®ããŒã ã§ãããŒãžã£ãŒãããŠããŸãã ãã®ãããªç»å£ã¯çµéšããªãã£ãã®ã§ãè³æäœãããçºè¡šã®ä»æ¹ãŸã§è©Šè¡é¯èª€ã®é£ç¶ã§ããã ããèšãããããšã§ãããçºè¡šãšããã¢ãŠãããããããããã«çްãããšãããŸã§èª¿ã¹ãŠã€ã³ãããã§ããã®ã§ãçºè¡šã«å¯ŸããŠã ãã§ãªãæè¡é¢ã»ç¥èé¢ã®åäžãã§ããŠéåžžã«è¯ãçµéšã§ããïŒ ãã®èšäºãã芧é ããçæ§ããæ¯éçºè¡šãç»å£ã®æ©äŒãããã°ç€Ÿå
å€ãåãããã£ã¬ã³ãžããŠã¿ãŠé ãããšããããšæããŸãã åœæ¥ã¹ã¿ãã ããã¯ãšã³ãããŒã ã®æŸåãã³ã¢ã¹ã¿ãããšããŠåå ããŸããã çŸå°éå¬ã3幎ã¶ããšããããšã§æ··ä¹±ããã©ãã«ãå€ãã£ãããšæããŸãã è£æ¹ãšããŠã¹ã¿ããã®çãããããããããã€ãã³ããæãç«ã¡ãŸããããã®å Žã§ãæè¬ç³ãäžããŸãã Python 3.11 is coming! ä»åã®ã€ãã³ãã§ã¯åæ¥ã®åºèª¿è¬æŒãã¯ãããPython 3.11 ã®æ§èœæ¹å (é«éå) ãæ°æ©èœã«é¢ããããŒã¯ãè€æ°ãããŸããã Day2 16:00ãã What's new in Python 3.11 and beyond ãããå
容ãããã¯ã¢ããããŸãã æ§èœæ¹å äŸå€åŠçã®ãªãŒããŒãããã10ïœ15%ãã1%çšåºŠãŸã§åæž æ£èŠè¡šçŸã®åŠçã10%çšåºŠé«éå 颿°åŒã³åºãã10ïœ20%é«éå â float -heavyâ ã€ãŸãæµ®åå°æ°ã®æŒç®ãè¡ãããŠããã°ã50ïœ60%çšåºŠé«éå â»ãã ããNumpy ãã¯ãããšããã©ã€ãã©ãªã¯äœ¿çšãããæšæºæ©èœã®å Žåããšèšåãã äžèšã®ããã«äžèšã§ãæ§èœæ¹åããšèšã£ãŠããå®éã¯æ§ã
ãªã±ãŒã¹ã§å°éãªæ¹åãè¡ãããŠããããšãåãããŸãã ããŒã¿ã«ãšããŠã¯ãå€ãã®å Žåã§ 20ïœ30% çšåºŠã®æ§èœæ¹åãæåŸ
ã§ããããšã®ããšã§ãã æ©èœè¿œå Exception Groups (äŸå€ã°ã«ãŒã) raise ExceptionGroup ã«ãããäŸå€ã°ã«ãŒãã®éåºã except* ã«ãããäŸå€ã°ã«ãŒãã®ææã Asyncio Task Groups (éåæã¿ã¹ã¯ã°ã«ãŒã) asyncio.gather() ã®ä»£æ¿æ©èœ äŸå€ã°ã«ãŒãæ©èœã«ãã£ãŠãšã©ãŒãã³ããªã³ã°ãã åé¢é£ typing.Self èªèº«ã®ã¯ã©ã¹ã衚çŸããããã®ãšã€ãªã¢ã¹ ã¯ã©ã¹ç¶æ¿ããã¡ã¯ããªãŒã«æé© Variadic Generics (å¯å€é·ãžã§ããªã¯ã¹) tomlib (PEP 680) TOML ããŒãµãŒã®æšæºãµããŒã æ©èœè¿œå ã®å
šå®¹ã詳现ã¯å
¬åŒããã¥ã¡ã³ã Whatâs New In Python 3.11 ã§ç¢ºèªã§ããŸãã æ°æ©èœã®è¿œå ãšã¢ããããŒããç¹ã« asyncio ãš typing åšãã¯æšä»çã
ãšã¢ããããŒããããŠããŠãããä»åŸã¯ç©æ¥µçã« Python 3.11 ã«ç§»è¡ããŠãããããšããã§ãã ãã㊠Python 3.11 ã«ç§»è¡ãã ã ã ã§æ§èœæ¹åãæåŸ
ã§ããã®ã¯ãšãŠãå¬ããã§ããã ãã㪠Python 3.11 㯠10/24(æ) ã«ãªãªãŒã¹äºå® ã§ãïŒ PEP 664 â Python 3.11 Release Schedule ãŸãšã PyCon JP 2022 ã¯3幎ã¶ãã«ãªãã©ã€ã³éå¬ã§è¡ãããç§ã¯ä»åãåããŠã®çŸå°åå ã§ããã åå ããäžçªã®ææ³ã¯ã ãšã«ããæ¥œããã£ãïŒ ããšããããšã§ãã å€ãã®ãšã³ãžãã¢ãåãå Žæã«éãŸã£ãŠæè¡ãå
±æãåããããšã¯ãã¡ãããåå è
ãç»å£è
ã®ç±éãçŸå°ã§æããããšãã§ããŸããã2æ¥éãã£ãšã¯ã¯ã¯ã¯ããŠããŸããã ãŸã RevComm ã¯å
šç€Ÿå¡ããã«ãªã¢ãŒãã§åããŠããŸãã ä»åç»å£ããé¶å±±ãšå·æ·»ã¯é æ¹ããã®çŸå°åå ã ã£ããããä»ååããŠå¯Ÿé¢ããŸããã æ®æ®µã¯çŽæ¥äŒããªãã¡ã³ããŒãšã€ãã³ãããã£ããã«é¡ãåãããŠãããã話ãããããšãã§ããŸããã å·Šããå°éãæŸåãå·æ·»ãé¶å±± ã€ãã³ããæ¯ããŠãã ãã£ãç»å£è
ãã¹ã¿ããã®çãããåè³äŒæ¥æ§ã«æ¹ããŠæè¬ç³ãäžããŸãã æ¥å¹Žããã²åå ãããã§ãïŒ æåŸã« RevComm ã§ã¯ Python ã§ã®ã¢ããªã±ãŒã·ã§ã³éçºã«ç±æã®ãããšã³ãžãã¢ãåéããŠããŸãã RevComm ã§ã¯èªç€Ÿãããã¯ããMiiTelïŒããŒãã«ïŒãã®éçºã«ãã㊠Web ã¢ããªã±ãŒã·ã§ã³ãæ©æ¢°åŠç¿/深局åŠç¿ãªã©ã®é åã§ Python ãåºã䜿çšããŠããŸããé«ãå®å®æ§ãšã¹ããŒããäž¡ç«ããŠéçºãé²ããããã詊è¡é¯èª€ãç¶ãããã£ã¬ã³ãžã³ã°ãªç°å¢ã§ãã ãã²ãå¿åããåŸ
ã¡ããŠããŸãã hrmos.co
2022幎10æ14æ¥(é)ïœ15æ¥(å)ã«éå¬ããã PyCon JP 2022 ã« RevComm ã®ãšã³ãžãã¢ã®é¶å±± 嶺ãšå·æ·» 貎ä¹ãç»å£ããŸãã ã€ãã³ãæŠèŠ å
¬åŒãµã€ãããåŒçš https://2022.pycon.jp/ PyCon JP ã¯ãPython ãŠãŒã¶ãéãŸããPython ã Python ã䜿ã£ããœãããŠã§ã¢ã«ã€ããŠæ
å ±äº€æã亀æµãããããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãã PyCon JP ã®éå¬ãéããŠãPython ã®äœ¿ãæãäžå ã«éãŸããPython ã«ãŸã€ããæ§ã
ãªåéã®ç¥èãæ
å ±ã亀æããæ°ããªåéãã³ãã¥ããã£ãšã®ã€ãªãããä»äºãããžãã¹ãã£ã³ã¹ãå¢ãããå Žæãšããããšãç®æšã§ãã æ¥çš: 2022幎10æ14æ¥(é)ïœ15æ¥(å) äŒå Ž TOCææã³ã³ãã³ã·ã§ã³ããŒã« åå ç³ã蟌ã¿ã¯ ãã¡ã ãªã³ã©ã€ã³: YouTube Live äž»å¬: äžè¬ç€Ÿå£æ³äºº PyCon JP Association ç»å£æ
å ± 詳解 print("Hello, world") æ°ããäžçã«é£ã³èŸŒããšãã®å®çª Hello, world ã Python ã«åºé¢ãåŠã³å§ãããšã print("Hello, world") ãå®è¡ããã²ãšãå€ãã®ã§ã¯ãªãã§ããããã ãã®ããŒã¯ã§ã¯ãPython ã«æ
£ããä»ã ããããæ¹ã㊠print("Hello, world") ãå®è¡ãããã®è£åŽã§èµ·ããŠããããšãæ·±æãããŠãããŸãã Python ã®ä»çµã¿ãã·ã¹ãã ããã°ã©ãã³ã°ã®äžçã« Hello, world ããŸãããïŒ æ¥æ: 2022幎10æ14æ¥(é) 13:00ïœ13:30 ç»å£è
: Rei Suyama ãªã³ã¯: https://2022.pycon.jp/timetable?id=ZJB8DS Fast API ãšåŠã¶ WebRTC è¿å¹Žãæ§ã
ãªåéã§äœ¿ãããããã«ãªã£ãWebRTCã䜿ã£ãŠã®ã¯ã©ã€ã¢ã³ãã»ãµãŒãéã®ãªã¢ã«ã¿ã€ã éä¿¡ã ãã®æè¡ã¯ããããã®ãªã¢ã«ã¿ã€ã éä¿¡ãå©çšãããµãŒãã¹ã«çœ®ããŠã¯å¿
é ã®æè¡ã«ãªãã€ã€ãããŸãã ãã®ããŒã¯ã§ã¯ããããªWebRTCã«ã€ããŠãFastAPIãå©çšããŠWebRTCãµãŒããç°¡æå®è£
ããŠãWebRTCã®äžèº«ã«ã€ããŠå®è£
ãšãšãã«è§£èª¬ããŸãã æ¥æ: 2022幎10æ14æ¥(é) 14:20ïœ16:50 ç»å£è
: Takayuki Kawazoe ãªã³ã¯: https://2022.pycon.jp/timetable?id=JKLGKZ åœæ¥ã¯ FastAPI + aiortc ãçšãããã¢ã亀ããªãã WebRTC ã®åäœã深远ãããŠãããŸãã æåŸã« RevComm ã¯é»è©±å¶æ¥ã顧客å¿å¯Ÿãå¯èŠåããé³å£°è§£æAIæèŒåã®ã¯ã©ãŠãIPé»è©±ãMiiTelïŒããŒãã«ïŒããéçºããŠããŸãã ãããã¯ãã®éçºã«ãã㊠Web ã¢ããªã±ãŒã·ã§ã³ãæ©æ¢°åŠç¿/深局åŠç¿ãªã©ã®é åã§ Python ãåºã䜿çšãããŠããŸãã ãã³ãã¥ãã±ãŒã·ã§ã³ãåçºæã人ãäººãæ³ã瀟äŒãåµãããšããããã·ã§ã³ãéæããã¹ããäžç·ã«ãããã¯ããéçºããŠé ãããšã³ãžãã¢ãåéããŠããŸãïŒ hrmos.co
ä»åã¯ãããŒã éçºãªã©ã«ãããŠéçšãããããªãããšã³ãžãã¢ã®ããã®ããã綺éºãªCSSã®æžãæ¹ãã玹ä»ããŸãã !important ã䜿ããªã äœå㪠div ã¯æžããªã CSS ã»ã¬ã¯ã¿ãæ·±ãããªã HTML ã« style ãçŽæ¥æå®ããªã èªåããå€ã®ã³ã³ããŒãã³ãã« margin ã®æ
å ±ãæãããªã ãŸãšã !important ã䜿ããªã äŸãã°ã以äžã®ãããªHTMLããã£ããšããŸãã < style > p { color : red !important ; } </ style > < p > éè²ã®ããã¹ã </ p > < p > ç·è²ã®ããã¹ã </ p > ããã§èŠä»¶ãšããŠãæåè²ãèµ€ãªã®ãããããã«åã£ãè²ã«ãããããšããŸãã ããã§ blue ã green ãšããã¯ã©ã¹ã§è²ã倿ŽããŠã¿ãŸãã ä¿®æ£ã¯ä»¥äžã®éãã§ãã <style> p { color: red !important; } + .blue { + color: blue; + } + .green { + color: green; + } </style> - <p>éè²ã®ããã¹ã</p> - <p>ç·è²ã®ããã¹ã</p> + <p class="blue">éè²ã®ããã¹ã</p> + <p class="green">ç·è²ã®ããã¹ã</p> çµæã¯ãæåè²ã¯å€ãããèµ€è²ã®ãŸãŸã§ãã ãã㯠p ã¿ã°ã«å¯Ÿã㊠!important ãæå®ãããŠããããšãåå ã§ãã ãŸããCSS ã«ã¯åªå
é äœããã !important ãæå®ããªãå ŽåãåŸè
ãåªå
ããŠé©çšãããŸãã p ã¿ã° (èŠçŽ åã»ã¬ã¯ã¿) .blue ãŸã㯠.green (ã¯ã©ã¹ã»ã¬ã¯ã¿) ãã®ãããªåªå
é äœã®ããšãã詳现床 (Specificity) ããšèšããŸãã åè: 詳现床 - CSS: ã«ã¹ã±ãŒãã£ã³ã°ã¹ã¿ã€ã«ã·ãŒã | MDN 詳现床㯠0 以äžã®æ°å€ã§èšç®ãããããèŠçŽ ã«å¯ŸããŠè€æ°ã® style ãæå®ãããå Žåãæ°å€(= 詳现床) ã®é«ã CSS å®çŸ©ãåªå
ããŠé©çšãããŸãã ããã !important ã䜿çšããå Žåã詳现床ã匷å¶çã«äžæžããããŠããŸããŸãã ãããã£ãŠäžèšHTMLã®äŸã§ã¯ã p { color : red !important ; } ãåªå
ãããæåè²ã¯èµ€è²ã®ãŸãŸã ã£ãã®ã§ãã ãã®å Žåãæåè²ã倿Žããã«ã¯ .blue ã .green ã®åã¯ã©ã¹ã«ã !important ãæå®ããããæ¹æ³ã¯ãããŸããã äžèšã§ç޹ä»ãã MDN ã®åèãªã³ã¯ã§ã !important ã®äœ¿çšã¯ã æªããç¿æ
£ ããšãããŠããŸãã ãŸã詳现床ã®èšç®äŸãã玹ä»ããŸãã ( Specificity value ãé«ãã»ã©åªå
é äœãé«ãç¶æ
ãšãªããŸã) åŒçš: CSS Specificity - W3Schools ä»åã®ããã«ã圱é¿ç¯å²ãç®ã«èŠãã圢ã§ããã°ããã§ãããããã§ãªãå Žåã¯ãæ³å®ããŠããªãç®æãŸã§ä¿®æ£ããŠããŸããããšã«ãªããŸãã åºæ¬çã« !important ã¯äœ¿ããªãéçšã«ããæ¹ãè¯ãã§ãããã ä»®ã«éçšäžã®ã³ãŒãã§æ¢ã« !important ã䜿ãããŠããå Žåããªãã¹ã圱é¿ç¯å²ãå°ãããªããããªä¿®æ£ã«ããã¹ãã§ãã äžèšäŸã®HTMLã§æ°ãã«ãããã¹ãã倪åã«ãããããšããèŠä»¶ã远å ã«ãªã£ãå Žåã以äžã®ä¿®æ£ãšãªãã€ã¡ãŒãžã§ãã p { color: red !important; /* ãã¡ãã«å€æŽãå ãããšåœ±é¿ç¯å²ã倧ãã font-weight: bold !important; */ } /* æ°ãã«ã¯ã©ã¹ãçšæããŠé©çš */ .text--bold { font-weight: bold !important; } < p class = "text--bold" > 倪åã®ããã¹ã </ p > äœå㪠div ã¯æžããªã ãCSS ã®æžãæ¹ãšããã®ã« div ?ããšæããããããããŸãããããšãŠã倧åãªããšã§ãã 1çªã®å€§ããªçç±ã¯ã次ã«è©±ããCSS ã»ã¬ã¯ã¿ãæ·±ãããªããã«ãã€ãªããã®ã§ãããäœåãªã³ãŒããæžããã«æžããããã§ãã div ã«éããããã®èŠçŽ ããªããŠãæ§æãæãç«ã€èŠçŽ ãå
¥ãããšãHTML ã®æ§é ãè€éã«ãªã£ãŠããŸããéçºè
ã»ãããè§£éããŠã¬ã³ããªã³ã°ãããã·ã³ã«ãšã£ãŠãåªãããªãã³ãŒããšãªããŸãã ãã»ãã³ãã£ã¯ã¹ãæèããŠã³ãŒããæžãããšã§ãææžæ§é ãã·ã³ãã«ã«ä¿ã€ããšãã CSS ãã·ã³ãã«ã«ä¿ã€ããã«ãéåžžã«éèŠã«ãªã£ãŠããŸãã åè: HTML: ã¢ã¯ã»ã·ããªãã£ã®åºç€ - ãŠã§ãéçºãåŠã¶ | MDN äŸãã°ãããããã¿ãŒã³ãšããŠã¯ãh2 ã p ãç¡æå³ã«å²ããã®ã§ãã Bad: < div class = "wrapper" > < div class = "head_margin" > < h2 class = "head" > h2 </ h2 > </ div > < div class = "text_margin" > < p class = "text" > ããããã </ p > </ div > </ div > .wrapper .head_margin .head { font-size: 16px; margin-bottom: 8px; } .wrapper .text_margin .text { font-size: 14px; } ããã¯ãäžèšã®ããã«ç°¡ç¥åããããšãã§ããŸãã Good: < div class = "wrapper" > < h2 class = "head" > h2 </ h2 > < p class = "text" > ããããã </ p > </ div > .wrapper .head { font-size: 16px; margin-bottom: 8px; } .wrapper .text { font-size: 14px; } ç¡é§ãª div (div ã«éããŸãã) ã¯åæžããŠãããŸãããã â» ä»åã¯äžäŸãšã㊠äžèŠãª div ã®äŸãåºããŸãããããããã¯èŠçŽ ããŸãšããå Žåãªã©äŸå€ãããããã驿驿ã§äœ¿çšããŸãã ãŸããA > B (A ã® BèŠçŽ ã«ã®ã¿é©çšãã)ããªã©ã䜿ã£ãŠãããšãã¯ã©ã¹ã»ã¬ã¯ã¿ãŒãåœãŠããšãã«ãããŸãåœãããªãå ŽåããããŸããããã¯äžã®ãäœåã«ã»ã¬ã¯ã¿ãæå®ããªããŠæžããã«ç¹ãã£ãŠããŸãã CSS ã»ã¬ã¯ã¿ãæ·±ãããªã CSS ã»ã¬ã¯ã¿ãäžçšæã«æ·±ãããŠããŸããšå¯èªæ§ãäžããã詳现床ãäžãã£ãŠããŸããããæå³ããªãä¿®æ£ãããŠããŸãå¯èœæ§ããããŸãã äŸãã°ãèµ€ããšããæåã ãèµ€è²ã«ãããã®ã«ãããŸããããªããã¿ãŒã³ãã§ãŠããŸãã äŸ: .block > .text { color: yellow; font-size: 12px; } .block > .wrapper > .text { color: red; font-size: 12px; } .block > .wrapper > .text > .small { font-size: 10px; } < div class = "block" > < p class = "text" > é»è² </ p > < div class = "wrapper" > < p class = "text" >< span class = "small" > â» </ span > èµ€ </ p > </ div > </ div > ãã®ããã« CSS èšèšãèæ
®ããªãç¶æ
ã§ã¯ã©ã¹ãæžããšãæ·±ãã»ã¬ã¯ã¿ãæå®ããããšã«ãªããŸãã ãæåã®ãµã€ãºã¯å
±éåããããã®ã«å
±éåãã§ããªããªã£ãŠããŸãããšããããšã«ãªã£ãŠããŸããŸãã 1ããŒãžã®ã¿ã® LP ããŒãžãªã©ã§ã¯ç¹ã«å°ããªããšããå€§èŠæš¡ãª WebãµãŒãã¹ã»ã¢ããªã±ãŒã·ã§ã³ã§ãããšã管çã倧å€ãªããšã«ãªããŸãã äŸãã° .block ã§ã¯ãªã .block-2 ãšããã³ã³ããŒãã³ãé
äžã§åããããªããšãããããšã .block-2 > .text { color : yellow ; font-size : 12px ; } .block-2 > .wrapper > .text { color : red ; font-size : 12px ; } .block-2 > .wrapper > .text > .small { font-size : 10px ; } ãšãåãã³ãŒããæå®ããªããã°ãããŸããã åãã³ãŒããè€æ°äœããã«äœ¿ããŸããããšã§å
±éåãã§ããå¯èªæ§ã»ç®¡çã®åäžã«ãã€ãªãããŸãã å
ã»ã©ã®ã³ãŒãã CSS ã»ã¬ã¯ã¿ãæ·±ãããã«æžããšã以äžã®ãããªäžäŸã«ãªããŸãã < style > .block .text { font-size : 12px ; } .block .text--yellow { color : yellow ; } .block .text--red { color : red ; } .text > .small { font-size : 10px ; } </ style > < div class = "block" > < p class = "text--yellow" > é»è² </ p > < div class = "wrapper" > < p class = "text--red" >< span class = "small" > â» </ span > èµ€ </ p > </ div > </ div > äžèŠãããšæåã®ã³ãŒãããéãå¢ããããã«èŠããŸããã.block é
äžã® .text ã« font-size ãäžæ¬ã§æå®ããããšãã§ããŠããŸãã ãã®ããã«ãéå±€æ§é ãéãã ãã§ãã¹ã¿ã€ã«èªäœã®æå®ã¯åãã³ãŒããã¯ã³ãŒã管çã®ã³ã¹ããæžããããã§ããã ãå
±éåããæ¹ãããã§ãã ãã®ä»ã®è§£æ±ºçãšããŠã¯ããŠããŒã¯ãªã¯ã©ã¹åã䜿çšããããªã©ããããŸãã (äŸ: .block > .text ã .block > .wrapper > .text ããã¯ã©ã¹ã®åœ¹å²ã¯åäžã®ãã) HTML ã« style ãçŽæ¥æå®ããªã <div style="background: blue"> ã®ããã«ãçŽæ¥ HTML èŠçŽ ã« CSS ãèšèŒããŠããã±ãŒã¹ããããŸãã ãã®ããã«ãHTML ã«çŽæ¥ style èŠçŽ ãèšè¿°ããã®ã¯é¿ããŸããããïŒã€ã³ã©ã€ã³ã¹ã¿ã€ã«ãšãåŒã°ããŸãïŒ ã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã䜿çšãããšå€éš CSS ãããåªå
ãããããèŠéããæªããªããã³ãŒãã®ä¿å®æ§ã®äœäžã«ã€ãªãããŸãã Bad: // HTML < button style = "background: blue;" > ãã¿ã³ </ button > Good: // CSS .bg-blue { background: blue; } // HTML < button class = "sample-button" > ãã¿ã³ </ button > èªåããå€ã®ã³ã³ããŒãã³ãã« margin ã®æ
å ±ãæãããªã ãã®ãã¶ã€ã³ãäœããããšããããªããªãã©ãã³ãŒãã£ã³ã°ããŸããïŒ ããäžèšã®ãããªã³ãŒããæžãããã¡ã§ãããå®ã¯ãã¹ããã©ã¯ãã£ã¹ã§ã¯ãããŸããã < style > .title { margin-top : 16px ; } .title_text { margin-top : 16px ; margin-bottom : 16px ; } </ style > < div class = "wrapper" > < h2 class = "title" > title </ h2 > < p class = "title_text" > sub title </ p > </ div > ãã®ããã«ãèªåãã芪ã®èŠçŽ ãã«å¯ŸããŠäœçœã空ããããšãã«æ
å ±ãæãããã¹ãã§ã¯ãããŸããã(ãã®å Žå㯠.wrapper ã®äžäœçœèª¿æŽã®ããã®CSS) .title ãä»ã®èŠçŽ ã§äœ¿ããããªã£ããšãã«ããã®èŠçŽ çšã« CSS ãæžãçŽããªããŠã¯ãããªããªã .title ã®äžã«äœãèŠçŽ ã眮ãããšãã« .title ã§ä¿ã£ãŠããäžéšåã®äœçœããæ°èŠã§çœ®ããèŠçŽ ã«çœ®ãæããªããã°ãããªããªã ãªã©ã®ãã¡ãªãããåºãŠããŸãã ãã®å Žå㯠.title ã«æ
å ±ãæãããã®ã§ã¯ãªã .wrapper ã«äœçœã®æ
å ±ãæãããã¹ãã§ãã < style > .wrapper { padding : 16px ; } .title_text { margin-top : 16px ; } </ style > < div class = "wrapper" > < h2 class = "title" > title </ h2 > < p class = "title_text" > sub title </ p > </ div > ãŸãšã 以äžããã綺éºãª CSS ãæžãããã®ã¯ã³ãã€ã³ãã¢ããã€ã¹ã玹ä»ããŸããã ã¢ããã€ã¹ãšãããŸãããä»åèšèŒãããã®ã¯ãããŸã§å®è·µã§åŸãäžäŸã«ãªããŸãã éçºãããäžã§ã® äžã€ã®ææšã«ããŠããã ããã°ãšæããŸãã åèãªã³ã¯: MDN ã«ãã CSS ã®ãŸãšã: https://developer.mozilla.org/ja/docs/Web/CSS
RevComm ã®æšæã§ãã æå±ããŒã ã¯InfrastructureïŒã€ã³ãã©ããŒã ïŒã§ãã ä»åã¯ãRevCommã®å
šç€Ÿãªããµã€ãã«é¢ããèšäºã®ç¬¬3匟ã«ãªããŸãã 第1åŒŸïŒ ãã¬ããŒãã幎ã«1床ã®å
šç€Ÿãªããµã€ãããŒãã£ã³ã°ãéå¬ããŸããïŒ ç¬¬2åŒŸïŒ RevCommã€ã³ããŠã¹ãã¶ã€ã³ããŒãåãçµãã ãã€ãã³ããã¶ã€ã³ãã®å¶äœè£è©± ãªãã©ã€ã³ã§ã®éå¬äºå®ã ã£ãäŒãæ¥éœãªã³ã©ã€ã³ã€ãã³ããšãªãã第1éšã¯Zooméå¬ã第2éšã®æèŠªäŒã¯Gatherã§ã®éå¬ãšãªããŸããã Gatherãšã¯ã2D RPGã®ãããªé°å²æ°ã§ã¢ãã¿ãŒãæäœããŠäŒè©±ãç»é¢å
±æãããªãããããªãã£ãããè¡ãããšãã§ããããŒãã£ã«ã¹ããŒã¹ã§ãã æ¬èšäºã§ã¯ãGatherãå©çšããåå è
160人è¶
ã®ãªã³ã©ã€ã³ã€ãã³ããå®çŸããäžã§çºçãã課é¡ãšè§£æ±ºçã«é¢ããŠè§ŠããŠãããããšæããŸãã èšäºã®æ§æã¯ä»¥äžã®ãšããã§ãã 第1ç« - ããŒãã£ã«ã¹ããŒã¹ã®æ¹æ³ 第2ç« - ãªããŒãµã«æã«çºçããåé¡ãšãã®è§£æ±ºç 第3ç« - ã€ãã³ããçµããŠã¿ãŠã®ææ³ 第4ç« - ãããªã工倫 第1ç« - ããŒãã£ã«ã¹ããŒã¹ã®æ¹æ³ æ¬èšäºã§ã¯ãã€ãã³ãã®åå 人æ°ãšã³ã³ãã³ãå
å®¹ã¯æ±ºãŸã£ãŠãããã®ãšããŸãããã®æ®µéã§ãŸãè¡ãã¹ãããšããäŒå Žã®äœæã§ãã Gatherå
¬åŒã®ãã³ãã¬ãŒããããã€ããããå
¬åŒã®ããããšãã£ã¿ãååšããããã¹ããŒã¹äœæããã©ãŠã¶äžã§å®çµããããšãå¯èœã§ããããããä»åã¯æ¡ä»¶ã«èŠåãå
¬åŒãã³ãã¬ãŒãããªããããã«å
¬åŒããããšãã£ã¿ã®èªç±åºŠãå°ãªãæããããã Tiled ãšããããããšãã£ã¿ãå©çšããŠã¹ããŒã¹ãäœæããããšã«ããŸããã ã¹ããŒã¹ã®äœæèªäœã¯æ¬èšäºã®äž»é¡ã§ã¯ãªãã®ã§è»œãè§ŠããçšåºŠã«èª¬æããŸããã以äžã®5ã¹ããããå®è¡ããŠGatherã®ã¹ããŒã¹ãäœæããŸããã 32Ã32ã®ãã¹ã§ã¹ããŒã¹å
šäœã®ãµã€ãºã決å®ãã Tiledäžã§Gatherã®ã¿ã€ã«ã»ãããé
眮ããŠãPNG圢åŒã§ãšã¯ã¹ããŒããã PNGãPhotoShopã§ç·šéããŠãæåãç¢å°ãé
眮ãã åºæ¥äžãã£ãç»åãGatheräžã§ã€ã³ããŒããã Gatheräžã§Spotlightãã¯ãŒãèšå®ãå¶éãšãªã¢ãªã©ãèšå®ãã çµæãšããŠãä»åäœæããã¹ããŒã¹ã¯ä»¥äžã®æ§æã«ãªããŸããã å¹
1280px à 瞊2560pxïŒ40ãã¹ Ã 80ãã¹ïŒã®2ã«ãŒã æ§æ ã¡ã€ã³ã«ãŒã åŽã«ã¯åžäŒè
çšã«Spotlightã倿°é
眮ãã ãµãã«ãŒã åŽã«ã¯äžç¶è
çšã®Spotlightãå°æ°é
眮ãã åã«ãŒã ã®äžæ®µã«ã¯ããŒãã«ãé
眮ãã ããŒãã«ã«ã¯Private Areaãèšå®ãã â»ã¹ããŒã¹èšèšã«ããã ãããé ããŠããã®ã§ãããæ¬èšäºã§ã¯å²æããŸãã 第2ç« - ãªããŒãµã«æã«çºçããåé¡ãšãã®è§£æ±ºç ããããäœæããäŒå Žã§ãªããŒãµã«ã§ãã åæãšããŠãä»åã®ã€ãã³ãã§ã¯ãåå è
ã«å¯ŸããŠåžäŒè
ãç»é¢å
±æãããªããéå¶ãè¡ãå¿
èŠããããŸããã Gatherã®å
¬åŒããŒãžã«ã¯ã100人以äžã®åå è
ãããã«ãŒã ã§é
ä¿¡ãè¡ãå Žåã«ã¯ãYouTube LiveãZoomãªã©ã®å¥ããŒã«ã䜿çšããããšãæšå¥š ãããŠããŸãã 調æ»ããããšãããé
ä¿¡è
çšã®ã«ãŒã ãå¥éçšæããäŒå Žã«èšçœ®ããEmbed Mediaã§é
ä¿¡è
ã®é¢šæ¯ãYouTube Liveã§é
ä¿¡ãããšãã£ãèšäºãWebäžã§èŠã€ãããŸããã ä»åãåœåã¯èŠã€ããèšäºãšåæ§ã«å¥å®€ããã®é
ä¿¡ãè¡ãéžæè¢ãæ€èšããŸããããããã詊è¡é¯èª€ã®çµæãäœé
å»¶ã§ç»é¢å
±æãè¡ãã€ã€äŒå Žã®é°å²æ°ãåžäŒè
ã«äŒããããã«é
ä¿¡çšã®ã«ãŒã ã¯äœæãããã¡ã€ã³ã«ãŒã ã®å
容ããµãã«ãŒã ã«é
ä¿¡ããæ¹åŒãæ¡çšããŸããã ãã®æ¹æ³ã§ããã°ãåã«ãŒã ã®åå 人æ°ã100人ãè¶
ããªãããã«èª¿æŽããªãããåžäŒè
ã«ãã©ã€ãæãäŒããããšãå¯èœã§ãã â»äžç¶è
ã®ç»é¢ãåå è
ã®åå¿ãèŠããããšãåãããŸãã æèŠªäŒã®ã³ã³ãã³ããšããŠã¯è€æ°ã®äŒç»ããããŸãããããã®äžã€ã« ennoshita ãšèšãããŒã«ãå©çšããã¯ã€ãºããããŸãããã¯ã€ãºã®èšåããã®å Žã§æç€ºãããåçãŸã§ã®æéå¶éãããããªã¢ã«ã¿ã€ã æ§ãå³ããæ±ããããã³ã³ãã³ãã§ãã â»å®éã«å®æœãããã¯ã€ãºã®ç»é¢ã åœåæ€èšããŠããYouTube Liveãå©çšããæ¹æ³ã§ã¯ãæ°ç§ã®é
å»¶ãçºçããããšããããããåãã£ãŠããŸãããããã¯åžäŒè
ã®è©±è¡ã§ã«ããŒããŠãããæ³å®ã§ããããå®éã«ãªããŒãµã«ã宿œããŠã¿ããšã話è¡ã§ã¯ã«ããŒã§ããªãåé¡ãçºçããŸããã å
·äœçã«ã¯ãã©ã€ãé
ä¿¡ãèŠãŠãã人ã«ãã£ãŠé
ä¿¡ã®ã¿ã€ã ã©ã€ã³ãããããšããåé¡ã§ããåžäŒè
ã®ç¥ããªããšããã§é
ä¿¡ãé
ããŠããç¶æ
ã§ã¯ãã¯ã€ãºã®é²è¡ãæãç«ããªããªãããèŽåœçã§ãã ãŸããGatherã®Embed Mediaã®ä»æ§ãããã®åé¡ãããæ·±ãããçç±ã§ãã Gatherã®Embed Mediaã«YouTube Liveãåã蟌ãã å Žåã«ã¯ãYouTubeåŽã®ã³ã³ãããŒã«æ©èœãé ãããŠããŸããäžæåæ¢ããã³åçã®ã¿å®æœã§ãã仿§ã«ãªã£ãŠããŸãããã®ããããŠãŒã¶åŽã®æäœã§ææ°ã®ã¿ã€ã ã©ã€ã³ã«ç§»åããããšãäžåã§ããŸããã â»YouTubeå
¬åŒãµã€ãã«ã¯ããäžèšã®ã³ã³ãããŒã«æ©èœãé ãããŠããŸããŸãã äºåã«å°èŠæš¡ãªãã¹ããããŠããéã«ã¯ãé
ä¿¡ãšã®ã®ã£ããã10ç§ã»ã©ããã°ãææ°ã®ã©ã€ãæ åç¶æ
ã«ã¹ããããããåäœïŒâ»ïŒã確èªã§ããŠããŸãããããããããå€§èŠæš¡ã«ãªããŒãµã«ãè¡ã£ããšããããã®ã¹ãããåäœãåçŸãããªã人ãããŸãããå
ã«è¿°ã¹ããšãããã³ã³ãããŒã«æ©èœã¯é ãããŠããããããããªããšã©ããããããããŸããã â»å®éã«ã¯ãäžæåæ¢åŸã«åéãããšããæäœãå¿
èŠã§ããã ãã®åé¡ãçºèŠããã®ã¯æ¬çª2æ¥åã®ãªããŒãµã«ã§ãä»ããã³ã³ãã³ãã®å
容ãå€ããããšã¯ã§ããŸãããGatherã§ã®é
ä¿¡ã諊ããZoomé
ä¿¡ã«åãæ¿ããã¹ãããšå
šé¢ä¿è
ã§æ©ãã§ãããšããã«ããšããã²ãããã倩ããèãéããŸããã ãããããæ¬èšäºã®æ¬é¡ã§ãã ã²ãããã«ããå®çŸããããå
¬åŒã®ãã¹ããã©ã¯ãã£ã¹ãè¶
ããé
ä¿¡æ¹æ³ã®æŠèŠã¯ä»¥äžã®ãšããã§ãã åäžã®PCããåã«ãŒã ã«äžç¶çšã®ã¢ãã¿ãŒãèšçœ®ïŒéä¿¡è
ãåä¿¡è
ïŒ ã¡ã€ã³ã«ãŒã ã®ç»é¢ãäžç¶çšã®ã¢ãã¿ãŒã§ç»é¢å
±æãããµãã«ãŒã å
ã«Spotlightã§å
±æ ã«ãŒã éã®äžç¶ãYouTube Liveã§è¡ãããåäžã®PCãå©çšããç¹ãäžçªã®ãã€ã³ãã§ãã å
šäœæ§æãå³ã«ãããšä»¥äžã®ããã«ãªããŸãã ãã®æ¹æ³ã®ããç¹ããŸãšãããšä»¥äžã«ãªããŸãã ã«ãŒã éã®è»¢éã«èŠããé
å»¶ãã»ãŒãªãïŒããã0.1ç§ïŒ ä»®ã«äººæ°ãããã«åã«ãªã£ããšããŠããã«ãŒã ãšäžç¶è
ãå¢ããããšã§ã¹ã±ãŒã«ã¢ãŠããå¯èœ äžç¶è
ã¯2ã«ãŒã ãšãæ§åãèŠããŠãããããäžæž¬ã®äºæ
ã«å¯Ÿå¿ãããã â»å®éã«ãµãã«ãŒã åŽã®æºåãæŽãåã«ã¯ã€ãºãé²è¡ãããã«ãªã£ãã®ã§ãäžç¶è
ãããŠããç§ãåžäŒè
ã«å£°ããããé²è¡ãåŸ
ã£ãŠããããŸããã éã«æªãç¹ããŸãšãããšä»¥äžã«ãªããŸãã ã¡ã€ã³ã«ãŒã ããã®äžæ¹åã®å
±æãšãªããããã¡ã€ã³ã«ãŒã åŽã®åå è
ããã¯ãµãã«ãŒã åŽã®ç¶æ³ãèŠããªãïŒâ»ããããæ¹åå¯èœã§ã第4ç« ã§è§ŠããŸãïŒ äžç¶æ
åœè
ãäžåå è
ãšããŠã€ãã³ãã«åå ããå Žåã¯ãäžç¶çšãšã¯å¥ã®PCãå¿
èŠã«ãªã PCãšç»é¢ããããããªããšãå
šéšãææ¡ããããšãé£ãã â»åœæ¥ã¯ãããªåœ¢ã§åå ããŠããŸãããå³äžã®ãã£ã¹ãã¬ã€ã«ã¯ãå¥å
¥åã§äžç¶è
ã®ç»é¢ãå
šç»é¢è¡šç€ºãããŠããŸãã 第3ç« - ã€ãã³ããçµããŠã¿ãŠã®ææ³ Gatherãæ¡çšããæ±ºãæã¯ãããã«ãªã©ã®äŒå ŽãåããŠå®æœããæèŠªäŒã®ããã«åå è
ãèªç±ã«åããŒãã«ãç§»åããªããæèŠªã§ããå Žãçšæããããšããç¹ã§ãããä»åã¯ãææéãã«åããŒãã«ã§ã®äŒè©±ãç¹°ãåºããããŠããŸããã RevCommã¯ãã«ãªã¢ãŒãã®ç€Ÿå¡ãå€ããããªã³ã©ã€ã³ã®æèŠªäŒã®éå¬é »åºŠã¯å€ãã®ã§ãããæ®æ®µã¯ZoomãGoogle Meetãå©çšããŠããŸããä»åã®çµéšããããªãã©ã€ã³ã®ç©ºæ°æãåçŸããããšãã§ããGatherãå©çšããæèŠªäŒããããã®ã ãªãšæããŸããã 第4ç« - ãããªã工倫 æªãç¹ã§ãåãäžããŸããããä»åæ¡çšããæ¹æ³ã¯ã¡ã€ã³ã«ãŒã ããã®äžæ¹åé
ä¿¡ã§ãã ããã«å€§èŠæš¡ãªã€ãã³ããã³ã³ãã³ãã®å
容次第ã§ã¯ãã«ãŒã éã§ã®ããåããããããªãããšããããšæããŸãããšããããšã§ãæ¹åã®äœå°ããªããèããŠã¿ãŸããã äžæ¹åé
ä¿¡ã«ããŠããã®ã¯ãé³å£°ãã«ãŒãããããšãçç±ã§ãããéã«èšããšãé³å£°ã®ã«ãŒãåé¡ããã©ãã«ãã§ããã°ãã«ãŒã éã§ã®åæ¹åé
ä¿¡ãå¯èœã«ãªããŸãã æ¹ããŠGatherã®èšå®ãè¡ããã«ãŒãåé¡ã解決ã§ããªãã確èªããŠã¿ãŸããããã®çµæãçå±äžã¯ä»¥äžã®æ§æãåãããšã«ããåæ¹åã§ã®é
ä¿¡ãå¯èœã§ã¯ãªãããšããçµè«ã«è³ããŸããããŸã å®éã«è©ŠããŠã¯ããŸãããã詊ãããæ¹ãããã° ãã€ãã¿ãŒ ãªã©ã§æããŠããã ãããšå¹žãã§ãã åºæ¬çãªæ§æã¯åæ§ äžç¶è
ã1å远å ïŒäŸ¿å®äžProxyãšããŸãïŒ äžç¶è
Aã®Gatheräžã§ãProxy Bã®User Volumeããã¥ãŒããã
ãã®åºŠã2022幎10æ5æ¥(æ°Ž)ã7æ¥(é)ã«éå¬ããã DroidKaigi 2022 ã« SUPPORTER ã¹ãã³ãµãŒãšã㊠RevComm ãåè³ããŸãã ã€ãã³ãæŠèŠ å
¬åŒãµã€ãããåŒçš https://droidkaigi.jp/2022/ DroidKaigiã¯ãšã³ãžãã¢ã䞻圹ã®Androidã«ã³ãã¡ã¬ã³ã¹ã§ãã Androidæè¡æ
å ±ã®å
±æãšã³ãã¥ãã±ãŒã·ã§ã³ãç®çã«ã2022幎10æ5æ¥(æ°Ž)ã7æ¥(é)ã®3æ¥ééå¬ããŸãã æ¥çš: 2022幎10æ5æ¥(æ°Ž) ïœ 7æ¥(é) äŒå Ž æ±äº¬ããŒã ã·ã㣠ããªãºã ããŒã« ãªã³ã©ã€ã³ ( Youtube ) äž»å¬: DroidKaigi å®è¡å§å¡äŒ RevComm ã¯æè¡ã³ãã¥ããã£ã®å¿æŽãè²¢ç®ã«åŒãç¶ãåãçµãã§ãŸãããŸãã æåŸã« RevComm ã§ã¯èªç€Ÿãããã¯ãã®é話çšã¢ããªãMiiTel Phone Mobileãã iOSãAndroid ã§éçºããŠãããã¢ãã€ã«ã¢ããªãšã³ãžãã¢ãåéããŠããŸãã hrmos.co
åããŸããŠãRevCommã€ã³ãã©ããŒã æå±ã®å¹³å³¶ãšç³ããŸãã ã€ã³ãã©ããŒã ã¯ãäž»ã«åœç€Ÿã§çšããããå
šãã€ã¯ããµãŒãã¹ã®å
±éåºç€ã®èšèšã»æ§ç¯ã»éçšãæ
åœããŠããŸãããããã«å ããŠSite Reliability Engineering (SRE) æ¥åãæ
ã£ãŠããŸãããã® SRE æ¥åã®äžç°ãšããŠããµãŒãã¹ã®ã»ãã¥ãªãã£åŒ·åã«é 次åãçµãã§ããŸãã ã»ãã¥ãªãã£å¯Ÿçã®äžã€ã²ãšã€ã¯ãæè¡çã«ã¯å°å³ãªããšãå€ãã§ããããããã©ããã«å¯ŸçæŒããããã°ãæ
å ±æŒæŽ©ãªã©ã®é倧ã€ã³ã·ãã³ããåŒãèµ·ãããããŸãããã²ãšãã³ãã®ãããªäºæ
ãåŒãèµ·ããããã°ãå€é¡ã®æå®³è³ åãä¿¡çšå€±å¢ã«ãã顧客é¢ããªã©ã®ãã¬ãã£ãã€ã³ãã¯ããéåžžã«å€§ãããããã»ãã¥ãªãã£åäžã¯ããžãã¹ã§ã¯éåžžã«éèŠãªã¿ã¹ã¯ã§ãã ä»åã¯ä»¥åã«åãçµãã AWS äžã®ã»ãã¥ãªãã£å¯Ÿçã§ãããCloudFront ãçµç±ããªãApplication Load Balancer (ALB) ãžã®ã¢ã¯ã»ã¹ãå¶éããæ¹æ³ã«ã€ããŠã玹ä»ããŸãã åæ ã»ãã¥ãªãã£äžã®èª²é¡ æ¹æ³ 1ïŒã«ã¹ã¿ã ããããŒãå©çšãããªã¯ãšã¹ãã®æ€èšŒ æ¹æ³ 1 ã®ãã¡ãªãã æ¹æ³ 2ïŒAWS Managed Prefix Listãå©çšãã Security Group ã«ããã¢ã¯ã»ã¹å¶é AWS Managed Prefix List ãšã¯ èšå® ãŸãšã åæ ä»åæ³å®ããã®ã¯ã以äžã®ãã㪠CloudFront-ALB-Elastic Container Service (ECS) ã§æ§æãããã¢ãŒããã¯ãã£ã§ãããŠãŒã¶ããã®ãªã¯ãšã¹ãã¯ãã¹ãŠ CloudFront ãåãä»ããCloudFront-ALB é㯠HTTPS ã§æ¥ç¶ãããã®ãšããŸãã ãŸããCloudFront ã«ã¯Web Application Firewall (WAF) ãèšå®ããŠããããªã¯ãšã¹ãã®äžèº«ãæ€æ»ããŸãã ã»ãã¥ãªãã£äžã®èª²é¡ ALB ã¯äžçåæã«èšçœ®ããã CloudFront ã®ãµãŒããŒããã¢ã¯ã»ã¹ãåãä»ããããã«ãã€ã³ã¿ãŒãããã«åããŠèšçœ®ããå¿
èŠããããŸããéã«èšãã°ãALB ã® DNS åãå€éšã«æŒããŠããŸã£ãå ŽåãCloudFront ãçµç±ãããšããçŽæ¥ ALB ã® DNS åãæå®ããŠã¢ã¯ã»ã¹ããããšãå¯èœã§ãã ãã㯠CloudFront ã§èšå®ãã WAF ã«ãããªã¯ãšã¹ãã®æ€æ»ãããæããããšãšå矩ã§ãããã»ãã¥ãªãã£ãªã¹ã¯ãšãªãããŸãããããã£ãŠãCloudFront 以å€ããã® ALB ãžã®ã¢ã¯ã»ã¹ãäœãããã®æ¹æ³ã§é²ãå¿
èŠããããŸãã æ¹æ³ 1ïŒã«ã¹ã¿ã ããããŒãå©çšãããªã¯ãšã¹ãã®æ€èšŒ AWSã«ãã£ãŠå
¬åŒã«ç޹ä»ãããŠããæ¹æ³ã§ãåœåã¯ãã¡ããæ¡çšããŠããŸããã 倧ãŸããªæ¹éã¯ä»¥äžã®éãã§ãã CloudFront ã«ãããŠãå°æ¥ãããªã¯ãšã¹ãã«å¯ŸããŠã«ã¹ã¿ã ããããŒãä»äžãããã«ã¹ã¿ã ããããŒã®å€ã«ã¯ãç§å¯ã®å€ãèšå®ããã ALB ã®ãªã¹ããŒã«ãŒã«ãèšå®ããŠãã«ã¹ã¿ã ããããŒã®å€ãç§å¯ã®å€ãšäžèŽãããæ€èšŒãããäžèŽããå Žåã¯ã¢ããªã±ãŒã·ã§ã³ã® Target Group ã«ãªã¯ãšã¹ãã転éããäžèŽããªãå Žå㯠403 ãšã©ãŒãã¯ã©ã€ã¢ã³ãã«è¿ãã ããã§ã¯ãAWS Console äžã§å
·äœçãªèšå®æ¹æ³ãèŠãŠãããŸãã ãŸããCloudFront ã®èšå®ãè¡ããŸãããªãªãžã³ã§ãã ALB ã«ãªã¯ãšã¹ãã転éããéã«ä»äžããã«ã¹ã¿ã ããããŒã¯ããªãªãžã³ã®æ°èŠäœæïŒç·šéç»é¢ã§èšå®ããããšãå¯èœã§ãã ããã§ã¯ä»®ã«ãããããŒåã "x-cf-secret"ãå€ã "test1234" ãšããŠãããŸãã æ¬¡ã«ãALB Listener ã®èšå®ãè¡ããŸããCloudFront ã§ãªãªãžã³ãšããŠèšå®ãã ALB ã®Listener Rule ãç·šéããŸããä»åã¯ãHTTPS (443) ã®ãªã¹ããŒãç·šéããŸãã ãŸããTarget Group ãžè»¢éããæ¢åã«ãŒã«ã«ã€ããŠãããããæ¡ä»¶ãèšå®ããŸãããæ¡ä»¶ã®è¿œå ããããHTTP ããããŒããéžæããCloudFront ã§èšå®ããã«ã¹ã¿ã ããããŒåãšå€ãããããå
¥åããŸãã ããã«ãäžçªæåŸã®ã«ãŒã«ïŒããã©ã«ãã«ãŒã«ïŒã§ã¯ãåžžã« 403 ãšã©ãŒãè¿ãããèšå®ããŸãã 以äžã§èšå®ã¯å®äºã§ããå®éã«ãªãªãžã³ã«çŽæ¥ãªã¯ãšã¹ããé£ã°ããšã403 ãè¿ã£ãŠããããšã確èªã§ããŸãã æ¹æ³ 1 ã®ãã¡ãªãã ã«ã¹ã¿ã ããããŒã®æ
å ±ãæŒæŽ©ããå ŽåãããããŒããä»äžããŠããã°ãCloudFront 以å€ããã§ããªãªãžã³ã«ã¢ã¯ã»ã¹ã§ããŠããŸããŸããã€ãŸããã«ã¹ã¿ã ããããŒã¯ç§å¿æ
å ±ã«ããããŸãããæ¹æ³ 1 ã§ã¯ãã®ç§å¿æ
å ±ãå¹³æã®ç¶æ
ã§ CloudFrontãALB Listener ããããã®èšå®ã«ä¿åãããããšã«ãªããŸãããã®ãããéçºè
ã»éçšæ
åœè
ã容æã«ç§å¿æ
å ±ã«ã¢ã¯ã»ã¹ã§ããŠããŸããŸãã ç§å¿æ
å ±ãžã®ã¢ã¯ã»ã¹ã峿 Œã«ç®¡çãããªããåèš 2 ã€ã®ãªãœãŒã¹ã«å¯ŸããŠãIAM Role ãªã©ã«ããé²èЧå¶éãè¡ãå¿
èŠããããŸãããã ããæš©éã®èšå®ãç
©éã«ãªãäžãã«ã¹ã¿ã ããããŒä»¥å€ã®èšå®äœæ¥ã«ãããŠãäœæ¥è
ãéå®ãããŠããŸããªã©ãæ¥åžžã®éçºã»éçšã«æ¯éãããããããããããŸãã æ¹æ³ 2ïŒAWS Managed Prefix Listãå©çšãã Security Group ã«ããã¢ã¯ã»ã¹å¶é 2022幎2æã« CloudFront ã® Managed Prefix List ãå
¬éãããããšã§ãæ¹æ³ 1 ãããç°¡åã«ç®çãéæã§ããããšã倿ããŸããããã®ãããåŒç€Ÿã§ã¯çŸåšãã¡ãã®æ¹æ³ãæ¡çšããŠããŸãã AWS Managed Prefix List ãšã¯ AWS Managed Prefix ListïŒä»¥äžãPrefix ListïŒã¯è€æ°ã® CIDR Block ãäžæ¬ããŠç»é²ã»ç®¡çããããšãã§ããæ©èœã§ããSecurity Group ã® Rule ãäœæããéã«ããœãŒã¹ãšããŠãã® Prefix LIst ã® ID ãæå®ããããšãã§ããŸããããããããšã§ãPrefix List ã«ç»é²ããããã¹ãŠã® CIDR Block ã«å¯ŸããŠRule ãé©çšãããŸãã ãŸããããã€ãã® Prefix List ãããã©ã«ããšããŠçšæãããŠããŸããCloudFront ã® Prefix List ã¯ãã® 1 ã€ã§ãCloudFront ãã ALB ãžãªã¯ãšã¹ãã転éãããéã¯ããã® Prefix List ã«ç»é²ããã CIDR ã®ç¯å²ã«å«ãŸãã IPã¢ãã¬ã¹ãããªã¯ãšã¹ããéãããããšã«ãªããŸãã ããã§ã¯ãCloudFront ã® Prefix List ããœãŒã¹ãšãã Security Group ãäœæã ALB ã«ã¢ã¿ããããããšã§ãCloudFront 以å€ããã®ã¢ã¯ã»ã¹ãé²ããŸãã èšå® ãŸããVPC > ãããŒãžããã¬ãã£ãã¯ã¹ãªã¹ããããCloudFront ã® Prefix List ã確èªããŸããPrefix List å "com.amazonaws.global.cloudfront.origin-facing" ããä»å䜿çšãã Prefix List ã§ãã æ¬¡ã« Security Group ãäœæããŸããInboud Rule ã§ã¯ HTTPS ã®ãœãŒã¹ã«å
ã»ã©ç¢ºèªãã Prefix List ã® ID ãæå®ããŸãã æåŸã«ãäœæãã Security Group ã ALB ã«ã¢ã¿ããããã°å®äºã§ãã å®éã« curl ã䜿ã£ãŠãªãªãžã³ã«ã¢ã¯ã»ã¹ããããšãããšãå¿çããªããŸãŸã¿ã€ã ã¢ãŠãããŸããæ¹æ³ 1 ãšæåã¯ç°ãªããŸãããæ¥ç¶ã黿¢ã§ããŠããããšã«å€ãããããŸããã ãŸãšã ä»åã¯ãCloudFront 以å€ããã® ALB ãžã®ã¢ã¯ã»ã¹ãé²ãæ¹æ³ã 2 ã€ç޹ä»ããŸããã æ¹æ³1ïŒã«ã¹ã¿ã ããããŒãçšããããæ¹ïŒãšæ¯ã¹ãŠãæ¹æ³ 2 ïŒPrefix List ãçšããããæ¹ïŒ ã¯ã ç§å¿æ
å ±ã®ç®¡çãäžèŠ äœæ¥ãå°ãªãïŒSecurity Group ãäœæããŠã¢ã¿ããããã ãïŒ ãšããç¹ã§ã¡ãªããã倧ããã§ããçµè«ãšããŠãäœãç¹æ®ãªäºæ
ããªãéã㯠Prefix Listãçšããæ¹æ³ 2 ããå§ãããŸãã
ä»å㯠QA ããŒã ã®ã€ã³ã¿ãã¥ãŒã§ãã ã·ã¹ãã éçºã«ãã㊠QA (Quality Assurance; å質ä¿èšŒ) ãšã¯ãææç©ã§ãããœãããŠã§ã¢ã®å質ãä¿èšŒããæ¥åãæããŸããRevComm ã«ãããŠã¯ãMiiTel ã«äžå
·åããªãããæ°æ©èœå°å
¥æã«æ¢åæ©èœãšã®æŽåæ§ããšããŠããããªã©ãã客æ§ã«å®å¿ã㊠MiiTel ãå©çšããã ãããã«æ§ã
ãªèгç¹ãããã¹ããããããšãã¡ã€ã³ã®æ¥åã§ãã RevComm ã®QA ããŒã 㯠2022 幎 8 æçŸåšã§ãã 6 人äœå¶ã«ãªããŸããããååã»ã©ã®ã¡ã³ããŒã 2022 幎å
¥ç€Ÿã®æ¹ã§æ§æãããŠããããŸãã«ãããããããŒã ã®åºç€ã匷åããŠãããã§ãŒãºã«ãªã£ãŠããŸãã RevComm ãæäŸããŠãã MiiTel ã¯é»è©±ãµãŒãã¹ã§ãããé«ãä¿¡é Œæ§ãæ±ããããŸããäžæ¹ã§ MiiTel for Zoom ã 2022 幎 7 æã«ãªãªãŒã¹ãããªã©ããŸã ãŸã æ©èœã®è¿œå ãçºå±ãèããåŽé¢ããããŸããã客æ§ã« MiiTel ãå®å¿ããŠäœ¿ã£ãŠããã ããããå質åäžã®ããã®åãçµã¿ã¯éèŠåºŠãå¢ãã°ããã§ãã ããã§ä»å㯠MiiTel ã®å質ä¿èšŒãæ
ã QA ããŒã ã®å»£ç¬ãããçŠç°ããã®ããµããã«ã話ã䌺ãããããŸã§ã® QA ããŒã ã®æŽ»åã工倫ããŠããããšãä»åŸãã£ãŠããããããšãªã©ã«ã€ããŠãèãããŸãã *1 ã å»£ç¬ ç¥é æ°åãã IT æ¥çã§éçºãå·¥çšç®¡çãªã©ã«æºããããã®éçšã§ QA ã«é¢å¿ãæã€ããã®åŸããšã³ãžãã¢ãã«ã¹ã¿ããŒãµããŒãã®çµéšãçµãŠã2020 幎㮠2 æã« RevComm ã«ã«ã¹ã¿ããŒãµããŒããšããŠåç»ãçŸåšãRevComm ã® QA ããŒã ãå±ãããµããŒãããŒã ã®ãªãŒããŒãåããã çŠç° è¯å¥å æ°åããããã°ã©ããŒãšããŠäž»ã« Windows ã¢ããªã®éçºçã«åŸäºãçµéšãéããŠããéçšã§ãéçšã»ä¿å®ã®ã¿ãªããã«ã¹ã¿ããŒãµããŒããšããŠãçµéšãç©ã¿ã2020幎 10 æã« RevComm ã«ãµããŒãããŒã ã®ã¡ã³ããŒãšããŠåç»ãå
¥ç€ŸåŸããµããŒãæ¥åãããåã QA ããŒã ç«ã¡äžãã«æºããã ã客æ§ã®æ°æã¡ã«ãªã£ãŠãã¹ããã ãéçºã QA ããäºãã«å°éãåãã èªååã®åã°ãªãé å ã¡ã³ããŒãå©ãåãããã«ãªããã ãç¥ãã çµããã« ã客æ§ã®æ°æã¡ã«ãªã£ãŠãã¹ããã ââ QA ããŒã ã®æç«ã®çµç·¯ããŸãæããŠãã ãã 廣ç¬: ããšããš RevComm ã§ã¯ãšã³ãžãã¢ã®æ¹ã責任ããã£ãŠãã¹ããããšããæ¹éã§ãããã¯åŸ¹åºãããŠããŸãããã§ãããéçºè
ã ãã§ã¯ã©ãããŠãã客æ§ã®å©çšç¶æ³ãã«ããŒããããªãããšãããã2021 幎ã®å€é ã«çŠç°ãããå
¥ç€Ÿãããã®ãæ©ã«ãéçºè
ãšã¯ç°ãªãç®ç·ã§ã®ãã¹ããæ¬æ Œçã«å§ãããããšããã®ãããŒã çºè¶³ã®çµç·¯ã§ãã ââ RevComm ã®çµç¹å³ã§ã¯ QA ããŒã ã¯éçºããŒã é
äžã§ã¯ãªããã«ã¹ã¿ããŒãµããŒãããŒã é
äžã«ãªã£ãŠããŸãããã®çç±ã¯ãªãã§ãããã 廣ç¬: æãç«ã¡ããããããããã«ãå
ãããŠãŒã¶ãŒç®ç·ãšãããŸãããã客æ§ã®æ°æã¡ã«ãªã£ãŠãã¹ããããŠã¿ãããªã£ãããšããã®ãçºç«¯ã«ãããŸããããã¯ãµããŒããšããä»äºãããŠããããã§ããçºæ³ã ã£ãã®ããªãšæããŸãã 倧ããªéçºçµç¹ã ãšãéçºéšéã®QAããŒã ãšå
šäœã®å質管çã®éšéãšã§åãããŠãããããªçµç¹ããããŸããåŸè
ããŠãŒã¶ãŒç®ç·ã§ã®ãã¹ããããããŒã ã§ãããããã¡ãç®æããŠããã®ã¯åŸè
ã®åœ¹å²ãæ
ãããšã§ãã ââ æ©èœãå®çŸã§ããŠããããªã©ãäžå¿ãšãªãäœãæã®èŠç¹ã§ã®ãã¹ããšããããããŠãŒã¶ãŒç®ç·ã§ã®ãã¹ããããããŒã ãšããããšã§ããïŒ å»£ç¬: ããã§ããã客æ§ã¯éçºè
ãæå³ããªãæäœãããããšããããã§ããããããäœãæãæèããŠãã¹ãããããšã¯é£ããããããªãããªãšãéçºè
ãšã¯éãç®ç·ãéãèŠç¹ã§ã§ãããã¹ããããããããªããããã®äž¡æ¹ã®ãã¹ããããããšã§å質é¢ã«è²¢ç®ã§ããããããªãããšèããŠããŸãã çŠç°: ãµããŒãããŒã ã«äžãã£ãŠããåãåããã¯éçºè
ããµããŒãããŒã ãäºæããŠããªãã£ãäœ¿ãæ¹ãããã£ãŠããããšãããã®ã§ããã®ç¥èããã¹ãã®èгç¹ã«æŽ»ãããã®ãããŸã®äœå¶ã®åŒ·ã¿ããªãšæã£ãŠããŸãã ãéçºã QA ããäºãã«å°éãåãã ââ QA æ¥åã§ãããããæãããšãã¯ã©ããªãšãã§ããïŒ çŠç°: éçºè
ãæ°ãã«å®è£
ãããã®ããã客æ§ã®ç®ç·ãããããšããã倧ããªå€åã«ãªã£ãŠããŸããªãšæããããšãããŸã«ãããŸãããããããã®ãŸãŸãªãªãŒã¹ãããšã客æ§ãå°ã£ãŠããŸããŸããããšããããšãéçºè
ã«äŒãããšåãæ¢ããŠãããããã§ããããããŠããããã©ããããããšãã建èšçãªè°è«ãã§ããŸããããã RevComm ã®åããšããã ãšæããŸãã ããã仿§ãªãã ãã§çµãããªãã§ãäžåèããããšè°è«ãããå Žé¢ãçµæ§å€ãã®ã§ãæ°ã¥ããããšããäŒãã§ãããšããšãŠãããã£ããªãšæããŸãã ââ è°è«ãããŠå®éã«æ¹åã«ã€ãªããããŠããã®ã¯çŽ æŽãããããšã§ãããéçºããŒã ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ã§äœã工倫ããŠããããšã¯ãããŸããïŒ å»£ç¬: çŠç°ããã«éçºããŒã ã®ãã¹ããå質æ¹åã«é¢ããããŒã ã®ããŒãã£ã³ã°ã«æ¯é±åå ããŠããã£ãŠãéçºããŒã ã®åãçµã¿ããã£ããã¢ãããããŠããŸããæ¯é±åå ããããšã§ãäºãã®ç«å Žãçè§£ããããšåªããŠãããšããå°ããããšã®ç©ã¿éãããä¿¡é ŒãçãŸããŠãã£ãã®ããªãšæããŸãã ããšãã£ã±ããéçºãšãã¹ãã¯ã¶ã€ããããšãæ£çŽãããšæããã§ããã§ããççŽã«æèŠã亀ãããŠãããŸãã¶ã€ãããªãã§ã§ããŠããã®ã¯ããäºãé Œã£ãŠããããå°éããããšãã§ããŠããããã ãšæã£ãŠããŠããã㯠QA ãšãé¢ä¿ãªããå
šç€Ÿçã«çžæã®ç«å Žã«ç«ã£ãã³ãã¥ãã±ãŒã·ã§ã³ããäºãæèã§ããŠãããããªã®ããªãšæããŸãã èªååã®åã°ãªãé å ââ éçºããŒã ãšé£æºã㊠Autify ã®å°å
¥ãé²ããŠããŸãããèªååã«ã€ããŠã¯ã©ããªæ©æµãæããŠããŸããïŒ çŠç°: åçŽã«ããªãªãŒã¹åŸã®æå確èªã®è² è·ã軜æžãããŸããããåãåããããŒã¹ã®äžå
·åä¿®æ£ããªãªãŒã¹ããŠããããšããä»ãŸã§ã¯ãã®åšèŸºã§åé¡ãèµ·ããŠãªãããšãäžå®ã«ãªãããšããã£ããã§ãããä»ã¯ãã¹ããå®è¡ãã㊠Slack ã§ãã¹ãã®æåéç¥ãèŠããšãã£ã±ãå®å¿æãéããŸã *2 ã 廣ç¬: èªååèªäœããããªãã§ãããå°å
¥ãæ©äŒã«ä»æ§ãæ©èœãäœç³»çã«æŽçãããã£ããã«ãªã£ããšæããã§ãããã ãµããŒãããŒã ããããŸã§å
ã
ã§äœã£ãŠãããã¹ãã±ãŒã¹ã仿§ã®æŽçãéçºããŒã ã®æ¹ã«æŽ»çšããã ããããéã«éçºããŒã ã®æ¹ãã€ãã£ããã¹ãã±ãŒã¹ã§æ°ããªèгç¹ãç¥ã£ããã補åã«å¯Ÿããçè§£ãããŒã ããŸããã§æ·±ãããããªçžä¹å¹æããã£ãããã«æããŠãŸãã ââ ããŒã«ã®æãåã°ãªããäººã®æãã©ãããŠãå¿
èŠãªéšåã£ãŠãããŸããïŒ å»£ç¬: é»è©±ãšããç¹æ§äžãã客æ§ã®ç°å¢ãå€éšèŠå ãšããããšãããã®ã§ãããããéšåã¯ã©ãããŠãã«ããŒããããªããšããã¯ãããŸããã ããšãã°ã¢ãã€ã«ã¢ããªã®å Žåãã¢ããªã®åé¡ãªã®ããOS ã®ããŒãžã§ã³å·®ç°èµ·å ãªã®ããã¯ããŸã端æ«åºæã®äºè±¡ãªã®ããšããããšããã£ãŠãåãåããé£ããããåçŸãé£ããããšããããšã©ãããŠãæéãããããŸããã å€ãã® Web ã¢ããªã±ãŒã·ã§ã³ã ãšãã客æ§ãããå ±åããã ããäºè±¡ã¯ã ããããã¡ãã§ãåçŸã§ãããã§ããã©ãé»è©±ã¢ããªã ãšå¿
ãããåçŸããããªãã£ããããã®ã§ãããé£ãããªãšæããŸããã ã¡ã³ããŒãå©ãåãããã«ãªããã ââ ããããããããããšãæããŠãã ãã 廣ç¬: ã¡ã³ããŒãå¢ããã®ã§ããã£ãšä»ãŸã§ãããæéãå²ããããã«ãªã£ãŠããã®ã§ããã£ãš QA ã®èгç¹ãéžæããŠããããã§ããã ãããã QA ããŒã ã®äœå¶äœãã«æ¬è
°ãå
¥ããŠããããã§ãããã£ãããããã¯ãããããã«å¯ŸããŠã¡ã³ããŒãã¡ã€ã³æ
åœã«ã¢ãµã€ã³ããŠãšãã圢ã§äœå¶äœããããŠãããŸãã äžæ¹ã§ãŠãŒã¶ãŒç®ç·ã®ãã¹ããšãã芳ç¹ã ãšãèªåã®æ
åœãããã¯ãããããããªããã ãšé£ãããšæã£ãŠããŸããå¹
åºãç¥èãåŸãããã«ããããããã®ã¡ã³ããŒãå©ãåã£ãŠåããããã«ãªããããããªãšæã£ãŠããŸãã ââ ããŒã ãšããŠããææããããããã®äœå¶äœããããããæéããããŠãã£ãŠãããšããããšã§ãããããããããååãããããé¡ãããŸããä»åã¯ããããšãããããŸããïŒ ãç¥ãã RevComm ã® QA ããŒã ã®å€§é泰代ãã2022 幎 10 æ 1 æ¥ïŒåïŒã«è¡ããã ãXP ç¥ã 2022 @ Online ãã«ãŠç»å£ããŸãã xpjug.com XP ç¥ãã¯ãœãããŠã§ã¢éçºã®çŸå Žãããããããããã«ã§ããããšãçºè¡šããå Žã§ãã倧éã¯RevComm ãžã®è»¢è·ãèžãŸããŠãQA ãšã³ãžãã¢ãèªåã®ã¹ãã«ãåãæ¹ã«ãããããè»¢è·æ¹æ³ã玹ä»ããäºå®ã§ãã QA ããŒã ã¡ã³ããŒã®è©±ãçŽæ¥èããå Žã«ãªããŸãããæéãããŸããããã²ãåå ãã ããã çµããã« MiiTel ã¯ãããŸã§ã«ãªãã£ã䟡å€ãå±ãããããã¯ãã§ãããšåæã«ãé»è©±ãšããã客æ§ã®æ¥åã®ã€ã³ãã©ãšãªããããã¯ãã§ããããŸããæ¥ã
ã客æ§ãå®å¿ããŠäœ¿ãããããå質ä¿èšŒãžã®åãçµã¿ãããã«åŒ·åããŠãããŸãã ãã®èšäºãèªãã§ MiiTel ã®éçºãå質ä¿èšŒã«èå³ããã£ãŠããã ããæ¹ã¯ããã²åœç€Ÿã®æ¡çšãµã€ããã芧ãã ããã www.revcomm.co.jp äŒç»ã»èãæã»æè²¬ å°å³¶ååŒ RevComm Tech / Backend ããŒã èãæã»ç·šé å°é ç
§å€ª RevComm Tech / Infrastructure ããŒã *1 : ã€ã³ã¿ãã¥ãŒã¯ãªã³ã©ã€ã³ã§å®æœããŸããã *2 : ãã詳ãã㯠Autify 瀟ããã®ã€ã³ã¿ãã¥ãŒ ããã²ã芧ãã ãã:
ã¢ãã€ã«ãšã³ãžãã¢ã®é·å°Ÿã§ãã æè¿ã¯æããŠãã£ããå€ã«åºãªããªã£ãŠã¡ã¿ãäœåã«ãªã£ãŠããŸã£ãã®ã§ã宿çã«éåããæ¹æ³ãšããŠãžã ã«éãããã«ãªããŸããããã£ã±ãéåã¯ããã£ããã ã¯ããã« ããã¯ã°ã©ãŠã³ãã§ã®çä¿¡æã®åäœ ãã©ã¢ã°ã©ãŠã³ãç¶æ
ã§ã®åäœãããã¯ã°ã©ãŠã³ãç¶æ
ã§ãç¶ãããæã®åäœ ãŸãšã æåŸã« ã¯ããã« ã¿ãªããã¯ãiOSã¢ããªã¯ããŠãŒã¶ãŒã«ã¯èŠããŠããªãããã©ãã¢ããªãåããŠããç¶æ
ãããããšããåãã§ããïŒ iOS ã¢ããªã¯ããã¯ã°ã©ãŠã³ãç¶æ
ã§ã®ã¢ããªã®åäœã¯å³ããå¶éãããŠããŠããŠãŒã¶ãŒã«èŠããªãç¶æ
ã«ãããŠãã¢ããªã¯ã»ãšãã©åãããŸãããããããããã€ãã®ã±ãŒã¹ã«ãããŠã¯ãããã¯ã°ã©ãŠã³ãç¶æ
ã§ãã¢ããªãåäœãããããšãã§ããŸãã äŸãã°ããã¥ãŒãžãã¯ãã¬ã€ã€ãŒã®ãããªã¢ããªã¯ãã¢ããªããŠãŒã¶ãŒããèŠããŠããªããšãã鳿¥œãæµãç¶ããããšãã§ããŠããŸããããã¯ã¢ããªãããã¯ã°ã©ãŠã³ãç¶æ
ã«ãªã£ãŠããŠããåäœãç¶ããŠããããããå®çŸã§ããŠããŸãã åŒç€Ÿã§æäŸããŠãã MiiTel Phone Mobile ã¯ãé»è©±ã¢ããªã§ãã é»è©±ãšããæ©èœã¯ãiPhone ãããã¯ãããŠããç¶æ
ã§ããçä¿¡ã§ããå¿
èŠããããŸãããã®æ©èœãå®çŸããããã«ãããã¯ã°ã©ãŠã³ãç¶æ
ã§ãåäœããããã«èšèšããŠããŸãã æ¬çš¿ã§ã¯ãMiiTel Phone Mobile ã«ãããŠééããããã¯ã°ã©ãŠã³ãã§ã®ã¢ããªã®åäœã±ãŒã¹ã«ãããŠå©çšãã API ã2ã€ã玹ä»ããããããã® API ã«ãããå®è£
äžã®æ³šæç¹ããŸãšããŠããŸãã ããã¯ã°ã©ãŠã³ãã§ã®çä¿¡æã®åäœ é»è©±ã¢ããªã®ç¹åŸŽãšããŠãé»è©±ãããã£ãŠããéã«ãã¢ããªã䜿çšããŠããªããŠããã¢ããªãèµ·åãããå¿
èŠãããç¹ãæããããŸããããã§èšããã¢ããªãèµ·åããããšã¯ãã¢ããªãåé¢ã«ç«ã¡äžããããšã ããæããŠããã®ã§ã¯ãªããã¢ããªã®ããã»ã¹ãåãå§ããããšããæå³ãå«ã¿ãŸããé»è©±ãããã£ãŠããéã¯ãå°ãªããšããµãŒããŒãšéä¿¡ãã§ããçšåºŠã«ã¯ã¢ããªãåäœããå¿
èŠããããŸãã ãã®ãããªã±ãŒã¹ã«ãããŠã¯ãVoice-over-IP (VoIP) push notifications ãçšããŸãã VoIP push notifications ã䜿çšããŠãVoIP ããã·ã¥éç¥ãåä¿¡ããããšã§ã¢ããªãèµ·åããããšãã§ããŸãã ãã ããVoIP ããã·ã¥éç¥ãåä¿¡ããéã¯ãæå®ã®æé ãå®è¡ããªããšãOSãã¢ããªã匷å¶çµäºããŸãã ããæå®ã®æé ãå®è¡ããªããããªã¢ããªã§ããã°ãVoIP push notifications ã§ã¢ããªãèµ·åãããããšãã§ããªããªãããšããããŸãã ããã§ããæå®ã®æé ãšã¯ä»¥äžã®éãã§ãã pushRegistry() ã¡ãœããã®äžã§ã reportNewIncomingCall() ãã³ãŒã«ããããš reportNewIncomingCall() ã® completion() ã¯ããŒãžã£å
ã§ pushRegistry() ã¡ãœããã® completion() ãã³ãŒã«ããããš WWDCã§ãããªã匷ãå£èª¿ã§èšåãããŠãã *1 *2 ã®ã§ãOSã«ãã£ãŠåŒ·å¶çµäºãããããªããããªã³ãŒãã«ããŠããå¿
èŠããããŸãã pushRegistry() ã¡ãœããã¯ãPKPushRegistryDelegate ã«å®çŸ©ãããŠããããªã²ãŒãã¡ãœããã§ãVoIP ããã·ã¥éç¥ãåä¿¡ããéã«OSããã³ãŒã«ãããã¡ãœããã§ãã reportNewIncomingCall() ã¡ãœããã¯ãCXProviderã¯ã©ã¹ã«å®çŸ©ãããã¡ãœããã§ãç»é¢ã«çä¿¡ç»é¢ã衚瀺ããããã®ã¡ãœããã§ãã reportNewIncomingCall() ã¡ãœãããã³ãŒã«ããããšèªäœã«å¶çŽã¯ãããŸããã æå®ã®æé ãæºããããšãããšãVoIP ããã·ã¥éç¥ãåä¿¡ããéã«å¿
ãçä¿¡ç»é¢ã衚瀺ãããããšã«ãªããŸãã ã³ãŒãäŸãäŸç€ºããŠããã®ã§ãåèã«ããŠãã ãããïŒWWDC ã®ã»ãã·ã§ã³ã§è¡šç€ºãããŠããã³ãŒã *3 ãåèã«ããŠããŸãïŒ let provider = CXProvider(configuration : providerConfiguration ) func pushRegistry (_ registry : PKPushRegistry , didReceiveIncomingPushWith payload : PKPushPayload , for type : PKPushType , completion : @escaping () -> Void ) { if type != .voIP { return } guard let handle = payload.dictionaryPayload[âhandleâ] as? String else { return } let callUpdate = CXCallUpdate() callUpdate.remoteHandler = CXHandle(type : .phoneNumber, value : handle ) let callUUID = UUID() ãã // 1. pushRegistry(_:,didReceiveIncomingPushWith:,for:,completion:)ã¡ãœããå
ã§ãreportNewIncomingCallãã³ãŒã« provider.reportNewIncomingCall(with : callUUID , update : callUpdate ) { _ in // 2. reportNewIncomingCall(with:update:completion:)ã®ã¯ããŒãžã£å
ã§pushRegistry(_:,didReceiveIncomingPushWith:,for:,completion:)ã¡ãœããã®completionãã³ãŒã« completion() } establishConnection( for : callUUID ) } ãããå
ã»ã©ã®æå®ã®æé ãå®è¡ããªããã°ã以äžã®ãããªãšã©ãŒæãã³ã³ãœãŒã«ã«åºåãããŸãããã°ã«çŸããŠããéããã¢ããªã¯åŒ·å¶çµäºãããããŸãã 2022-08-25 14:36:30.016132+0900 AppName[4899:1149881] Apps receving VoIP pushes must post an incoming call (via CallKit or IncomingCallNotifications) in the same run loop as pushRegistry:didReceiveIncomingPushWithPayload:forType:[withCompletionHandler:] without delay. 2022-08-25 14:36:30.016292+0900 AppName[4899:1149881] *** Assertion failure in -[PKPushRegistry _terminateAppIfThereAreUnhandledVoIPPushes], /Library/Caches/com.apple.xbs/Sources/PushKit/PushKit-37/PKPushRegistry.m:343 2022-08-25 14:36:30.017563+0900 AppName[4899:1149881] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP push callback.' *** First throw call stack: (0x1b0851654 0x1b0573bcc 0x1b07546ec 0x1b0b9a16c 0x1c4a47ab8 0x107d2b730 0x107d3a488 0x1c4a46a70 0x107d2a338 0x107d2b730 0x107d39710 0x1b07cf6bc 0x1b07ca590 0x1b07c9ba8 0x1ba940344 0x1b49053e4 0x102def5b4 0x1b06518f0) äžã§ãã2. ã®æé ã¯ãèŠèœãšããã¡ãªã®ã§æ³šæãå¿
èŠã§ãã ãŸãã2. ã®æé 㯠pushRegistry() ã¡ãœããå
ã§ãªãã¹ãæ©ãå®è¡ããããšããå§ãããŸãããµãŒããŒãšã®éä¿¡ã®ç¢ºç«çãããªããšãããªãããšãè²ã
ãããšæããŸãããb)ã®æé ãè¡ã£ãŠãããŠããã§ãé
ãã¯ãªãã¯ãã§ãã ãã©ã¢ã°ã©ãŠã³ãç¶æ
ã§ã®åäœãããã¯ã°ã©ãŠã³ãç¶æ
ã§ãç¶ãããæã®åäœ ã¢ããªã䜿çšäžã«ãéä¿¡ãé·ããªã£ãŠããŸããšããŠãŒã¶ãŒãçºããåãããŠãã¹ãããããã¯ããŠããŸãã±ãŒã¹ã¯ããããããšã ãšæããŸãããããã£ããŠãŒã¹ã±ãŒã¹ã§ã¯ããã©ã¢ã°ã©ãŠã³ãç¶æ
ã®æã«ã¯ããŸã£ãéä¿¡ãããã¯ã°ã©ãŠã³ãç¶æ
ã«ãªã£ãŠãç¶ç¶ããéä¿¡ãå®äºãããŸã§åäœãç¶ããããšãæãŸããã§ãã ãã®ãããªã±ãŒã¹ã§äœ¿ãã®ããBackground Task Completion ã§ãã Background Task Completion ã®äœ¿ãæ¹ã¯ã以äžã®éãã§ãã UIApplication.beginBackgroundTask ãã³ãŒã«ããŠãOSã«å¯Ÿã㊠Background Task Completion ãéå§ãããããšãéç¥ãã ã¿ã¹ã¯ãå®äºããæç¹ã§ãUIApplication.endbackgroundTask ãã³ãŒã«ããBackground Task Completion ãå®äºãããŠãè¯ãããšãOSã«å¯ŸããŠéç¥ãã å¿
èŠã§ããã°ãå®ããããæéå
ã«ãã¿ã¹ã¯ãå®äºã§ããªãã£ãå Žåããšã©ãŒéç¥ãªã©ã¿ã¹ã¯ãå®äºã§ããªãã£ãæã®åŸå§æ«ãè¡ãã³ãŒãããbeginBackgroundTask ã¡ãœããã® expirationHandler åŒæ°ãžå®çŸ©ããŠãã 䜿çšäŸã瀺ããŸãããã¡ãã WWDC ã®ã»ãã·ã§ã³ã§è¡šç€ºãããŠããã³ãŒã *4 ãåèã«ããŠããŸã func send (_ message : Message ) { let sendOperation = SendOperation(message : message ) var identifier : UIBackgroundTaskIdentifier! // ããããããã¯ã°ã©ãŠã³ãã«ãªã£ãŠãç¶ç¶ãããåŠçãéå§ãããããšãOSãžéç¥ãã identifier = UIApplication.shared.beginBackgroundTask(withName : âsendOperationTaskâ,expirationHandler : { sendOperation.cancel() postUserNotification(âMessage not sent, please resendâ) // ããã¯ã°ã©ãŠã³ãã§ã®åäœãç¶ç¶ã§ããæéãéããŠããŸã£ãæã«åŒã°ãã }) sendOperation.completionBlock = { // ããã¯ã°ã©ãŠã³ãã§ãç¶ç¶ãããåŠçãå®äºããããšãOSã«éç¥ãã UIApplication.shared.endBackgroundTask(identifier) } operationQueue.addOperation(sendOperation) } ããã§å€§äºãªããšã¯ãbeginBackgroundTask ãã³ãŒã«ããåŸãå¿
ã endBackgroundTask ãã³ãŒã«ããããšãå¿
èŠãšããããšã§ãã beginBackgroundTask ãã³ãŒã«ããã«ãããããããendBackgroundTask ãã³ãŒã«ããªããšã©ããªãã§ãããïŒ çãã¯ç°¡åã§ãOS ã«ãã£ãŠã¢ããªã Terminated ãããŸãã ã¡ãããš endBackgroundTask ãã³ãŒã«ã§ããŠããªããšã以äžã®ãããªã¡ãã»ãŒãžãåºãã®ã§ãæ°ãã€ããŸãããã [BackgroundTask] Background Task 145 ("sendOperationTask"), was created over 30 seconds ago. In applications running in the background, this creates a risk of termination. Remember to call UIApplication.endBackgroundTask(_:) for your task in a timely manner to avoid this. ãŸãšã æ¬çš¿ã«ãããŠã¯ãããã¯ã°ã©ãŠã³ãã§ã®åäœã±ãŒã¹ã«ãããŠå©çšããAPIã2ã€æããããããã®APIã«ãããå®è£
äžã®æ³šæç¹ãã玹ä»ãããŠããã ããŸãããæ¬çš¿ã§ã¯åãäžããŸããã§ããããããã¯ã°ã©ãŠã³ãäžã«å°ãã ãã¢ããªãèµ·åããŠãæ
å ±ããªãã¬ãã·ã¥ããŠãããšèšã£ãäœ¿ãæ¹ã®ã§ããAPIãçšæãããŠããŸããèå³ãããæ¹ã¯ãBackground Task App Refresh *5 ãã§èª¿ã¹ãŠã¿ãŠãã ããã æ¬çš¿ããåèã«ãªãã°å¹žãã§ãã æåŸã« RevComm 㯠9æ10æ¥(å)ã12æ¥(æ) ã«éå¬ããã iOSDC Japan 2022 *6 ã«ã·ã«ããŒã¹ãã³ãµãŒãšããŠåè³ããŸãã RevComm ã§ã¯èªç€Ÿãããã¯ãã®é話çšã¢ããªãMiiTel Phone MobileããéçºããŠãããã¢ãã€ã«ã¢ããªãšã³ãžãã¢ãåéããŠããŸãã hrmos.co iOSDC ããŒã¯ã³ã¯ãã¡ãïŒ #RevCommã§MiiTelãäžç·ã«äœããŸããã *1 : Advances in App Background Execution - WWDC19 - Videos - Apple Developer 9:40ãã *2 : And new this year, it's very important that you know that you must report incoming calls with CallKit in the didReceiveIncomingPush callback or your app will be terminated. And, if you repeatedly do this, or if you repeatedly fail not to report an incoming call, the system may stop launching your app for VoIP pushes altogether. *3 : Advances in App Background Execution - WWDC19 - Videos - Apple Developer 10:04ãã *4 : Advances in App Background Execution - WWDC19 - Videos - Apple Developer 7:34ãã *5 : https://developer.apple.com/documentation/backgroundtasks/bgapprefreshtask *6 : https://iosdc.jp/2022/