ã¯ããã« ããã«ã¡ã¯ã id:FM_Harmony ã§ãã Rakus Developers Blogã§ã¯5åç®ã®æçš¿ã§ãã ååã®èšäºã¯ãã¡ãâ tech-blog.rakus.co.jp ä»åãååãšåãããã¢ããã·ã¥ã®è£è¶³ãã¿ã§ããïŒãã¢ããã·ã¥...?ãšããæ¹ã¯ ã³ãã© ïŒ ããŒãã¯ãMattermostãã«ã€ããŠã§ãã ã¯ããã« Mattermostãšã¯ïŒ Mattermost Serverã®æ§ç¯ äºåæºå ããŒã¿ããŒã¹ã®æºå Mattermost Serverã®æ§ç¯ Mattermostãè§Šã£ãŠã¿ã Mattermostã®åæèšå® Webhookã䜿ã£ãŠã¿ã ãããã« åè Mattermostãšã¯ïŒ Mattermostãšã¯Slackã«äŒŒã ãªãŒãã³ãœãŒã¹ ã®ãã£ããããŒã«ã§ãã 倧ããªéãã¯Slackã ã¯ã©ãŠã åã®ãµãŒãã¹ã§ããã®ã«å¯Ÿãã Mattermostã¯ãªã³ãã¬ãã¹å ã®ãµãŒãã¹ã§ããããšã§ãã ãã®ããã瀟å
æ
å ±ãå€éšã«ä¿åããããªããšããçç±ã§ããã£ããããŒã«ãšããŠSlackã§ã¯ãªãMattermostãéžã¶ããšãããããã§ãã âMattermostã®å
¬åŒããŒãžã«ãSlackãšã®éãã説æãããŠããŸãã ä»åã¯ãããªMattermostã®ãµãŒããæ§ç¯ããŠè²ã
ã詊ãããŠã¿ã話ã§ãã Mattermost Serverã®æ§ç¯ ããã§ã¯Mattermost Serverã®æ§ç¯ã«ã€ããŠèª¬æããŸããä»å㯠CentOS7.1 ãž Mattermost Server v4.4.0 ã®ãµãŒããæ§ç¯ããŸããã ãŸããããŒã¿ããŒã¹ãµãŒããšMattermost Serverã¯åäžã®ãã·ã³ã«æ§ç¯ããŸãã æ§ç¯æã®æé ã¯åèãªã³ã¯å
ã® Installing Mattermost on RHEL 7.1 ãåèã«ããŸããã ãªããä»åã®æé ã¯ãããŸã§æå
ã§ã®æ€èšŒãç®çãšãããã®ã§ãããããã»ãã¥ãªãã£çã®èæ
®ãçããŠããéšåããããŸãã ãã®ããã æ¬çªæ§ç¯æã«ã¯æé ããã®ãŸãŸé©çšãã¹ãã§ã¯ãªã ããšã«ã泚æãã ããã äºåæºå äºåã«ããã±ãŒãžã¯ææ°ã®ãã®ã«ããŸãã [hoge@huga ~ ]$ yum update ããŒã¿ããŒã¹ã®æºå Mattermostã§ã¯ãŠãŒã¶ãæçš¿ãä¿åããããŒã¿ããŒã¹ãšããŠã PostgreSQL ã MySQL ã䜿ãããšãã§ããŸãããä»å㯠PostgreSQL v9.4ãå©çšããŸãã ãŸãã PostgreSQL ãµãŒãã®æ§ç¯ããã³åæåã¯å®äºããŠãããã®ãšããŸãã ãŸããå©çšããããŒã¿ããŒã¹ãäœæããŸãã(postgresãŠãŒã¶ã¯ PostgreSQL ã®åæåæã«äœæãããŠããã¯ãã§ã) [hoge@huga ~]$ psql -U postgres postgres=# CREATE DATABASE mattermost; 次ã«äœæããããŒã¿ããŒã¹ãMattermostã䜿ãããã®ãŠãŒã¶ãäœæãã mattermost ããŒã¿ããŒã¹ã«é¢ããå
šãŠã®æš©éãäžããŸãã ïŒãŠãŒã¶ã®ãã¹ã¯ãŒãã¯é©åœã«æ±ºããŠãã ããïŒ postgres=# CREATE USER mmuser WITH PASSWORD 'xxxx'; postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser; postgres=# Â¥q æåŸã« postgreSQL ã®æ¥ç¶èšå®ã倿ŽããŸãã postgresql.conf ãç·šéã㊠listen_addresses ãå
šã¢ãã¬ã¹ã«ã pg_hba.conf ãç·šéã㊠localhost ããæ¥ç¶ããéã®èªèšŒæ¹åŒã trust ã«ããã°åºæ¬çã«ã¯åé¡ãªãã¯ãã§ãã Mattermost Serverã®æ§ç¯ ã§ã¯ãããããMattermost Serverãæ§ç¯ããŸãã ãšããããã /usr/local/src çŽäžã«ã€ã³ã¹ããŒã«ãããããŒãžã§ã³ïŒä»åã¯v4.4.0ïŒã®Mattermost ServerãããŠã³ããŒãããŸãã [hoge@huga ~ ]$ cd /usr/local/src [hoge@huga src ]$ wget https://releases.mattermost.com/4.4.0/mattermost-4.4.0-linux-amd64.tar.gz 次ã«ãããŠã³ããŒããããã¡ã€ã«ãè§£åãã /opt çŽäžã«é
眮ããŸãã ãã®åŸãé
眮ãã ãã£ã¬ã¯ã ãªã®çŽäžã« data ãã£ã¬ã¯ã ãªãäœæããŸãã [hoge@huga src ]$ tar -xvzf mattermost-4.4.0-linux-amd64.tar.gz [hoge@huga src ]$ sudo mv mattermost /opt [hoge@huga src ]$ sudo mkdir /opt/mattermost/data ãããŠãMattermostã管çããããã®ã·ã¹ãã ãŠãŒã¶ãäœæããå
ã»ã©é
眮ãã mattermost ãã£ã¬ã¯ã ãªä»¥äžã®ãã¡ã€ã«ã» ãã£ã¬ã¯ã ãªãã·ã¹ãã ãŠãŒã¶ãæžã蟌ã¿å¯èœã«ããŸãã [hoge@huga src ]$ sudo useradd --system --user-group mattermost [hoge@huga src ]$ sudo chown -R mattermost:mattermost /opt/mattermost [hoge@huga src ]$ sudo chmod -R g+w /opt/mattermost æåŸã«MattermostãããŒã¿ããŒã¹ãšæ¥ç¶ããéã®èšå®ãè¡ãã°äž»ãªäœæ¥ã¯å®äºã§ãã /opt/mattermost/config/config.json ã以äžã®ããã«ç·šéããŸãã "DriverName" ã postgres ãšããã "DataSource" ã "postgres://mmuser:(mmuserã®ãã¹ã¯ãŒã)@localhost:5432/mattermost?sslmode=disable&connect_timeout=10" ãšããã ãããŸã§å®äºããã°Mattermostãèµ·åããããšãã§ããã¯ãã§ãã 以äžã®ã³ãã³ããããã¹ãèµ·åãè¡ããŸãã [hoge@huga src ]$ cd /opt/mattermost [hoge@huga src ]$ sudo -u mattermost ./bin/platform èµ·åã«å€±æããå Žåã¯æé ãèŠçŽããŠã¿ãŠãã ããã ãŸããæ¬æ¥ã¯Mattermost ServerããµãŒãã¹åããæ¹ãMattermostãèµ·åããéã«äŸ¿å©ãªã®ã§ãããä»åã¯å²æãããŠããã ããŸãã Mattermostãè§Šã£ãŠã¿ã Mattermostã®åæèšå® åæèšå®ã倿Žããªãå Žåãå
ã»ã©ãã¹ãå®è¡ããMattermost Serverã¯8065ããŒãã§ã¢ã¯ã»ã¹ãåŸ
ã¡åããŸãã 8065ããŒããžã¢ã¯ã»ã¹ãããšãäžèšã®ãããªç®¡çè
ã®èšå®ç»é¢ã衚瀺ãããããšæããŸãã 管çè
ã®èšå®ãçµãããš ããŒã ãéžæããç»é¢ã«ç§»ããŸãã Mattermostã§ã¯ ãã£ã³ãã« ãšåŒã°ãããã£ãããéãŸã£ãŠãããŒã ãæããŠããŸãã åæç¶æ
ã§ã¯ããŒã ã¯ãããŸããã®ã§ã Create a new team ãã¯ãªãã¯ããŠããŒã ãäœæããŸãã äœæãããšä»¥äžã®ãããªç»é¢ã«ç§»ããŸããããããMattermostã®ãã£ããç»é¢ã§ãã tutorialã¯é©åœã«é£ã°ããŠãã ããã Webhookã䜿ã£ãŠã¿ã Mattermost㯠Webhook ãå©çšããããšã§å€éšãšé£æºããããšãã§ããŸãã ãŸãã¯MattermostãWebhookãå©çšã§ãããèšå®ã確èªããããã«ããã£ããç»é¢å·Šäžã®ã¡ã€ã³ã¡ãã¥ãŒãã System Console ã«ç§»åããŸãã æ¬¡ã«ã System Console å
ã® INTEGRATINS > Custom Integrations ãéžæããŸãã ãããšã Enable Incoming Webhooks , Enable Outgoing Webhooks , Enable Custom Slash Commands ãšãããªãã·ã§ã³ãããããšæããŸãã åæèšå®ã§ã¯ãããã true ã®ã¯ããªã®ã§ãä»åã¯ãã®ãŸãŸã«ããŸãã âSystem Consoleç»é¢ãä»åã¯èµ€æ ã§å²ã£ãéšåããã¹ãŠ true ã«ããŸãã ç»é¢å·Šäžã®ã¡ã€ã³ã¡ãã¥ãŒãã Switch To (ããŒã å) ãéžæããŠããã£ããç»é¢ãžæ»ããŸãããã ãã®åŸãåã³ã¡ã€ã³ã¡ãã¥ãŒããä»åºŠã¯ Integrations ãéžæããŸãã ãããšãå
ã»ã©ç޹ä»ãã3ã€ã®å€éšé£æºæ©èœã®é
ç®ãéžã¹ãã¯ãã§ãã ä»åã¯äŸãšã㊠Incoming Webhook ãå©çšããŠã¿ãŸãããã 3ã€ã®é
ç®ã®äžãã Incoming Webhook ãéžæããŸãã ãã®åŸã衚瀺ãããç»é¢ã®å³äžã«ãã Add Incoming Webhook ãéžæããŸãã ãããšã Webhook ã®èšå®ç»é¢ã«ç§»ããŸãã®ã§ãããããé©åœãªå€ãèšå®ã㊠Save ãéžæããŸãã èšå®ãå®äºãããšURLã衚瀺ãããŸãã Incoming Webhook ã§ã¯ãã®URLã«å¯ŸããŠãªã¯ ãšã¹ ããéãããšã§ãMattermostã«ã¡ãã»ãŒãžã衚瀺ããããšãã§ããŸãã â Incoming Webhookã®èšå®ç»é¢ã§ãã 詊ãã«ä»¥äžã®ã³ãã³ããã¿ãŒããã«ããå®è¡ããŠã¿ãŸãã curl -i -X POST -d 'payload={"text": "this is sample bot"}' (å©çšãã Incoming WebHooks ã®URL) ãããšã以äžã®ç»åã®ããã«ãthis is sample bot ããšããã¡ãã»ãŒãžã衚瀺ãããã¯ãã§ãã ãŸããèšå®ã倿ŽããŠããªãå Žåãæçš¿è
åã« BOT ãšãã衚瀺ãåºãŠããã¯ãã§ãã ãã®ããã« Incomming Webhook ãå©çšããããšã§ãå€éšã®ãµãŒãã¹ããMattermostãžã¡ãã»ãŒãžã®éä¿¡ãè¡ãããšãã§ããŸãã ãããã« ãããã§ããã§ããããã é§ãè¶³ã«ãªã£ãŠããŸããŸããããMattermost Serverã®æ§ç¯æé ãšWebhookã«ã€ããŠå°ãã§ããçè§£ããã ããã°å¹žãã§ãã MattermostãµãŒãæ§ç¯ã®é£æåºŠã¯ããã»ã©é«ããªããšæããŸãã®ã§ããããããã£ããããŒã«ãå°å
¥ããããšããæ¹ã¯ããã®æ©äŒã«ãã²MattermostãäœéšããŠã¿ãŠã¯ãããã§ããããã åè Installing Mattermost on RHEL 7.1 CentOS7系㮠Linux ãµãŒãã«Mattermost Serverãå°å
¥ããæé ã«ã€ããŠæžãããŠããŸãã Slackã¯ããŒã³ã®Mattermostã䜿ã£ãŠã¿ã - å€éšé£æºç·š -ïŒWebHooksãHubotïŒ Mattermostã§å€éšé£æºãè¡ãæ¹æ³ã«ã€ããŠæžãããŠããŸãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
id:radiocat ã§ããä»å¹ŽåºŠã¯ãã¢ããã·ã¥æšé²å§å¡ããäžæ©èº«ãåŒããŠã¢ããã€ã¶ãŒåœ¹ã«ãªããŸããã ãã®ããã°ã§ãäœåºŠã玹ä»ããŠãã ãã¢ããã·ã¥ ã§ããããã®ãã³æ°ããéå¶ã¡ã³ããŒãéžæãããŠãå
æ¥ããã¯ãªããè¡ããŸãããåãäŒç€Ÿã®ç€Ÿå¡ãšã¯ãã䟡å€èгã¯äººã«ãã£ãŠéãããããã¢ããã·ã¥ãã©ã®ããã«æšé²ããŠããããããæãæãã€ã¡ãŒãžã¯ããããéã£ãŠãããã®ã§ããã¯ããã¯ãäºãã«ææ¢ãç¶æ
ã§æèŠãããåãããªããããããããšããŸãšããŠããããšã«ãªããŸããããããªæã«åœ¹ã«ç«ã€äŸ¡å€èгãå¯èŠåããææ³ããã ãŒãã³ã°ã¢ãããŒã¿ãŒãºãã§ãã ã ãŒãã³ã°ã¢ãããŒã¿ãŒãºãšã¯ ããŒã ã®ã¡ã³ããŒå士ã§ãäºãã®äŸ¡å€èгãå
±æããããã®ã¯ãŒã¯ã·ã§ããã§ããææ³ã®æãç«ã¡ãèæ¡è
ã«ã€ããŠã¯åŸè¿°ããŸãã 10çš®é¡ã®ã«ãŒã ã¢ãããŒã·ã§ã³ã®æºæ³ãšãªãããŒã¯ãŒããæžããã10çš®é¡ã®ã«ãŒãããããŸãããã®ã«ãŒããèªåã䟡å€ãæããé çªã«äžŠã¹æ¿ããŠå
±æããŸãã ãã£ãŠã¿ãã ããŒãã®èªèåãã ãŸãã¯äœã«å¯ŸããŠã®äŸ¡å€èгã«ã€ããŠèããã®ãå
šå¡ã§ãã£ããèªèåãããããŸããä»åã¯ãéçºéšã®ãã¢ããã·ã¥ãæšé²ããŠããããã§äŸ¡å€ãé«ããšæããããŒã¯ãŒãããšããŸããã å®è·µã¿ã€ã 5åïœ10åçšåºŠã§æéãæ±ºããŠäžŠã³æ¿ããŸããããŸãæ·±ãèããçŽæçã«äžŠã³æ¿ããŸãããã å
±æã¿ã€ã 1人ãã€çµæãããŒã ã«å
±æããŸãããªããã®ããŒã¯ãŒããéžãã ã®ãçç±ã説æããŠäŸ¡å€èгã®çè§£ãæ·±ããŸãããã ä»åã¯ã¡ã³ããŒãããããéžãã ããã3ãçºè¡šããŸããããã®ããŒã ã¯ãé¢ä¿æ§ããšãå容ããéžãã ã¡ã³ããŒãå€ããšããåèªãããæš©åãã¯èª°ãéžã°ãªãã£ããšãã£ãã³ãã¥ãã±ãŒã·ã§ã³ãåã£ãŠäŸ¡å€èгãå
±æããŸããã ãŸãšã ãã¢ããã·ã¥ã®ãããªç€Ÿå
ã€ãã³ãã®éå¶ã§ã¯ã«ãŒã«ãæé ã现ããæ±ºãŸã£ãŠããããã§ã¯ãªãããããéãŸã£ãã¡ã³ããŒã®åæ§ãèãæ¹ã«å§ããããŠããé¢ãããã®ã§ããã®ããã«æè»œã«äŸ¡å€èгãå
±æã§ããææ³ã¯ãšãŠãæå¹ã§ãã ãŸããç§ã®æå±ããéçºããŒã ã§ã¯æ¯æ1åå
šå¡ã§ãããè¡ã£ãŠåæããã®ã¡ã³ããŒã®äŸ¡å€èгã®å€åã远ããããŠããŸãããæè¿æ°ããæè¡ã«åãçµãã§ããã®ã§å¥œå¥å¿ãéžãã 人ãå¢ããããšãããé£ãã課é¡ã«åãçµãã§ããã®ã§ãŽãŒã«ã®éèŠæ§ãæããŠããããšãã£ããããŒã ã®ç¶æ³ã®å€åã«å¿ããã¡ã³ããŒå士ã®äŸ¡å€èгã®å€åã«ãæ°ã¥ããŸãã æåŸã«ãå®è·µãããããã§ã®ãã€ã³ãã3ã€ç޹ä»ããŸãã æ°è»œã«äžŠã¹ã çµå±ã©ãã倧äºãªèšèãªã®ã§ããæéããããã«ãã®ç¬éã®äŸ¡å€èгããããåºããŸãããããã¡ããé£ã®äººã®ã«ãŒããèŠãŠã¯ãããŸããã èšèã®æãæ¹ãå
±æãã ãã£ãŠã¿ããšèšèã®æãæ¹ã人ã«ãã£ãŠéãããšã«ãæ°ã¥ããŸããå
ã
è±èªã§äœãããã«ãŒããªã®ã§ããå容ãããçéããªã©ãæ¥æ¬èªã ãšå°ãã€ã¡ãŒãžãã«ããèšèããããŸãããããæ°ã«ããå¿
èŠã¯ãããŸããããèªåã¯ããæã£ãŠãããéžãã ããšããèããå
±æããããšã倧äºã§ããã©ãããŠãæ°ã«ãªãå Žåã¯ã¿ããªãã©ãããæå³ã§æããŠãããèããŠã¿ãŸãããã æ¥œãã ãäºãã«äŸ¡å€èгãå
±æãããã®ã§ã å
èŠãã é°å²æ°ã ãšçºèšãã¥ãããªããŸããç¡èšã§ã«ãŒãã䞊ã¹ãã®ã§ã¯ãªããæ¥œããã¯ã€ã¬ã€ããŸãããã åèïŒManagement 3.0 ã ãŒãã³ã°ã¢ãããŒã¿ãŒãºã¯Management 3.0ã®ã ã©ã¯ ãã£ã¹ã®1ã€ã§ãã management30.com Management 3.0㯠å
¬åŒãµã€ã ã§ä»¥äžã®ããã«èª¬æãããŠããŸãã ãªã©ã³ãåºèº«ã®ãšãŒã¬ã³ ã¢ããïŒJurgen AppeloïŒã®äžç80ã¶åœã§å±éããŠããæ°ãã ã€ãããŒã·ã§ã³ ãšãªãŒããŒã·ãããããŠãããžã¡ã³ãéåã§ãã è¿å¹Žãããžã¡ã³ãã®é åã§æ³šç®ãããŠããèªå·±çµç¹åã å¿çç å®å
šæ§ãªã©ã«ã€ããŠãèšåãããŠããã ã¢ãžã£ã€ã« éçºã®çŸå Žã§ãææ³ã䜿ãããŠããããã§ãã
ããã«ã¡ã¯ sts -250rrã§ãã ä»åãååã®èšäºã«åŒãç¶ãARæè¡ã®ç޹ä»ã«ãªããŸãã tech-blog.rakus.co.jp ååã¯ç°¡åã«ARãäœéšããããŸã§ã§ããã®ã§ä»å㯠Software Design ã®ã³ã©ã ã«ãã£ãARã¢ããªARKittenãäœã£ãŠã¿ãŸããã gihyo.jp ã¡ãªã¿ã« Github ã® ãªããžã㪠ã§ãµã³ãã«ãå
¬éããŠãã ãã£ãŠããŸãã®ã§ããã¡ãã§ãŸã詊ããŠã¿ãã®ãè¯ãããã§ããã ã§ã¯ããã£ãŠãããŸãããã ç«ãARã«ç«ã€ ã«ã¡ã©ãåãã¬ç« ãŸãšã å®é²ãã«ãã§ããªãäºä»¶ç°¿ ç«ãARã«ç«ã€ ååã¯ARã®äžçã§å¹³é¢ãæ€åºãããã¥ãŒããèšçœ®ãããšãããŸã§ã§ããããããã§ã¯ããŸãã«å³æ°ãªãã®ã§ç«ãé
眮ããããšã«ããŸãã â»AssetStoreããARKitãã€ã³ããŒãããéšåã¯å²æããŸãã Unityã®AssetStoreã§ã¯ã3Dã®ã¢ãã«ããŒã¿ã賌å
¥ããããšãã§ããŸãã ããããç«ã®ã¢ãã«ãååŸããŠãããããšããã§ãããæ®å¿µãªããšã«ARKittenã§äœ¿çšããç«ã®ã¢ãã«ã¯äœæè
ã®è«žäºæ
ã«ãããAssetStoreããããŠã³ããŒãã§ããªããªã£ãŠããŸããŸããã çŸåšã¯äžèšã® Github ããã¢ãã«ããŒã¿ãååŸããŠãããããªãããã§ãã Kitten ãã£ã¬ã¯ã ãªã ãããžã§ã¯ãå/Assets é
äžã«æ ŒçŽããŠãããŸãããã åçŽã«ç«ãå¹³é¢ã«è¿œå ããã ãã§ã¯ãæ¡åŒµçŸå®ããããªããŸããã ããã¯ãªããããºã㪠圱ããªããã ã§ãã ããã§ä»åäœæããã¢ããªã§ã¯ UnityARShadows ãšãããµã³ãã«ãå
ã«äœæããŠãããŸãã ãã®ãµã³ãã«ã§ããã°å¹³é¢ãæ€åºããéšåã«3Dã¢ãã«ã®åœ±ãèœãšãããšãã§ããŸãã UnityARShadows ã«ã¯ Cube ã®ä»£ããã« HitPlayer ãååšããŠããŸãã ããã Assets/Kitten/Prefabs/KittenNPC ã«çœ®ãæããŸãã ããã ãã§ã¯ iOS ã®ç»é¢ãã¿ããããŠãç«ãå¹³é¢ã«é
眮ã§ããªãã®ã§ ã¹ã¯ãªãã ãçµã¿èŸŒãã§ãããŸãã KittenNPC ãéžæãã€ã³ã¹ãã¯ã¿ãŒãŠã£ã³ããŠïŒå³åŽã«è¡šç€ºãããŠããèšå®çªïŒã®èšå®ã以äžã®ããã«ããŸãã ããã§äžåºŠãã«ãããŠãç»é¢ãã¿ããããŠèŠãŠç«ãé
眮ããŠã¿ãŸãã ç«ã«åœ±ãã€ããŠããããã¢ãã¡ãŒã·ã§ã³ãå®çŸ©ãããŠããã®ã§ããŸãã§ç«ãããã«ããããã§ãã ã«ã¡ã©ãåãã¬ç« åçŽã«ç«ãé
眮ããã ãã§ã¯ãå Žæã«ãã£ãŠã¯ãã£ãœãåãããŠããŸããŸãã ç«ãé
眮ããæã«ãã€ããã¡ãåŽïŒã«ã¡ã©ïŒãåããŠãããããã« ãã€ã ã¹ã¯ãªãã ã远å ããŠãããŸãã ããã§ã¯ç«ãã«ã¡ã©ãåããŠãããæã®åŠçã®æµãã解説ããŸãã ç«äœçœ®ã®ååŸ ã¿ããã§é
眮ããç«ã®äœçœ®ãååŸããŸãã ãã®ãŸãŸã§ã¯ç«ã¯åæã®åããåããŠããŸããŸãã 3Dã°ã©ãã£ãã¯ã¹ã®äžçã§ã¯åãïŒå転ïŒãšããæ
å ±ã¯ ã¯ãªãŒã¿ããªã³ ãšåŒã°ãããã®ã§ä¿æãããŠããŸãã ã«ã¡ã©äœçœ®ã®ååŸ ç«ãšã«ã¡ã©ã®äœçœ®ïŒåº§æšïŒãæ¯èŒããããšã§ãç«ãã©ã®æ¹åãåãã°è¯ãã®ãããããããã«ãªããŸãã ã«ã¡ã©ã®æ¹ã«åããã ç«ãšã«ã¡ã©ã®äœçœ®ã®å·®ãããç«ãã©ãã ãå転ããã°è¯ãã®ããèšç®ããŸãã ãã®èšç®ã¯3Dãæ±ãã©ã€ãã©ãªã§ããã°ã倧æµ3次å
ãã¯ãã«ãäžããŠããã°èšç®ããŠããã颿°ããããŸãã ARKitã§ããã°ã Quaternion ã¯ã©ã¹ã® LookRotation ã¯ã©ã¹ããã®äžã€ã«è©²åœããŸãã â» ã¹ã¯ãªãã ã®å
容ã¯ãµã³ãã«ã³ãŒããçºããŠã¿ãŠãã ããã ã¹ã¯ãªãã ã宿ãããåã³ãã«ãããŸãããã ããã«ã¯åŸé ã«ãã¡ããåããŠããç«ãäœãã§ããã¯ãã§ãã ãŸãšã ä»åã¯ååã玹ä»ããARKitã®ãµã³ãã«ããã°ã©ã ãäœã£ãŠã¿ãŸããã ç«ãé
眮ããããããçºãããŸã§ããã§ããŸããããæ¬æ¥ããã«ããªãã¯ãã®ç«ãç»é¢ãéããŠååšããŠããæèŠã¯ãŸããã æ¡åŒµçŸå® ã§ãã æ¬¡åãåŒãç¶ãARKitãã¿ããéãããããšæããŸãã ãæ¥œãã¿ã«ã å®é²ãã«ãã§ããªãäºä»¶ç°¿ iPhone ã® iOS ãã¢ããããŒãããã°ããã«ãã«ãã§ããªããªã£ãŠããŸã£ãã»ã»ã»ã» ãšã©ãŒå
容ãèŠãŠã¿ããšã ãiOS11.3ã®ã ãã€ã¹ ãµããŒããã¡ã€ã«ããªãããšããããšã ããã§ãã ã¿ãªããçµæ§èµ·ããŠããŸã£ãŠããããã§ã解決çã調ã¹ãŠã¿ããããã«åºãŠããŸããã ä»åã¯ä»¥äžã®èšäºãåèã«ãããŠããã ããŸããã iOSをアップデートしたために実機でビルドができない - Qiita
ã©ã¯ ã¹ã®ã¡ãŒã«ãã£ãŒã©ãŒã®éçºãè¡ã£ãŠãã@nerobluebrosã§ãã 5æ9æ¥ã«ã¡ãŒã«ãã£ãŒã©ãŒã®ããŒãžã§ã³12.2ããªãªãŒã¹ããŸããã ä»åã¯ãã®ã¡ãŒã«ãã£ãŒã©ãŒããŒãžã§ã³12.2ãšãªãªãŒã¹ã«ã€ããŠã®ç޹ä»ãããŸãã ããŒãžã§ã³12.2ã§ã¯33ã®æ©èœãšä¿®æ£ããªãªãŒã¹ ãªãªãŒã¹ã¯è€æ°åã«åå²ããŠå®æœ ããŸã ããŒãžã§ã³12.2ã§ã¯33ã®æ©èœãšä¿®æ£ããªãªãŒã¹ 12.2ã§ã¯å€§å°åãããŠ33ã®æ©èœãšä¿®æ£ããªãªãŒã¹ããããšãåºæ¥ãŸããã äž»ãªæ©èœãšä¿®æ£ã¯ä»¥äžã®ãšããã§ãã 1.æ·»ä»ãã¡ã€ã«ã»ãã¥ãªãã£ãªãã·ã§ã³æ©èœ ãã»æ·»ä»ãã¡ã€ã«ã®æ¡åŒµåãšå®éã®ãã¡ã€ã«ã®å
容ããã§ãã¯ããŸã ãã»ãŠãŒã¶åäœã§æ·»ä»ãã¡ã€ã«ã®ããŠã³ããŒãå¯åŠãã³ã³ ãããŒã« ã§ããŸã ãã»æéä»ãã®URLããæ·»ä»ãã¡ã€ã«ã®ããŠã³ããŒããã§ããŸã ãã»æ·»ä»ãã¡ã€ã«ã®ã¿ã察象ã«èªååé€ã§ããŸã 2.ã¢ãã¬ã¹å
¥åæ¬ã®UI倿Žãªã©UIæ¹å 3. ããã«ãŠã§ã¢ ã Postfix ã«ããããšã§STARTTLSã«å¯Ÿå¿ããŸã 4.ã¡ãŒã«æ¬æã RFC ã«æºæ ããŸãã 5.äžå
·åä¿®æ£ ãªãªãŒã¹ã¯è€æ°åã«åå²ããŠå®æœ 以éã¯ãªãªãŒã¹ã«ã€ããŠèª¬æããŸãããªãªãŒã¹ã¯è€æ°å(è€æ°æ¥)ã«åå²ããŠè¡ããŸãã çç±ã¯ä»¥äžã®ãšããã§ãã ã»ã¡ãŒã«ãã£ãŒã©ãŒã®ãµãŒãã¯è€æ°å°ãã1æ¥ã§ã¯çµäºããªã ã»ã¡ãŒã«ãã£ãŒã©ãŒå
éšã® ããã«ãŠã§ã¢ ã®å€æŽããããããæ
éã«ãããªãå¿
èŠããã£ã ãªãªãŒã¹äœæ¥ã¯æ·±å€ã«å®æœããŸãã ãã㯠ãªãªãŒã¹äžã«ã¡ãŒã«ãã£ãŒã©ãŒã®ãµãŒãã¹ã忢ãããã ã§ãã ããµãŒãã¹åæ¢ãçºçããïŒã客æ§ãã¡ãŒã«ãã£ãŒã©ãŒãå©çšã§ããªãããšããããšãæå³ããŸãã ã§ãã®ã§ãã客æ§ã®æ¥åžžæ¥åã«åœ±é¿ããªãããã«ã å€éããããéå§ãããæã®4æãŸã§ã«ãªãªãŒã¹äœæ¥ãçµäºããªããã°ãªããŸããã ãã®ããããªãªãŒã¹äœæ¥ã«ãããµãŒãã¹åæ¢æéãæ¥µåçãããããã«ãæºåäœæ¥ãªã©ã¯äºåã«å®æœããŠãããŸãã ãªãªãŒã¹äœæ¥ã¯ãã§ããã ãé
ãæéã«éå§ãããã§ããã ãæ©ãçµäºãããæéãšã®æŠãã«ãªãã®ã§å€§å€ãªäœæ¥ã§ãã ãªãªãŒã¹ã«ã€ããŠã¯ãŸãå¥ã®èšäºã§è©³ããã玹ä»ããŸãã ãªã2åç®ã¯5æ30æ¥ã®æ·±å€ãäºå®ããŠããŸãã 以äžã§ã¡ãŒã«ãã£ãŒã©ãŒã®12.2ã®æ©èœãšãªãªãŒã¹ã«ã€ããŠã®èª¬æãçµããã«ããŸãã ããŸã çŸåš ã©ã¯ ã¹ã§ã¯æ°åæ¡çšãš äžéæ¡çš ãè¡ã£ãŠããŸãã ãµãŒãã¹éçºã«å°ãã§ãèå³ãããæ¹ã¯äžèšæ¡çšãµã€ããã芧ã«ãªããå¿åãããããããŸãã ã©ã¯ ã¹æ¡çšãµã€ã http://fresh-recruit.rakus.co.jp/
ããã«ã¡ã¯ããšã³ãžãã¢ã®mickey-STRANGEã§ãã åå㯠ããã©ããããã«ããããã©ããããã®ããã®ã¹ããã¢ããªéçºã«ã€ããŠã話ããããšæããŸãã ãªããŠèšããªãããå
šãŠãJSã§ããã£ãšç¡çãã解決ããæ¹æ³ãã玹ä»ããŸããã tech-blog.rakus.co.jp ã¯ããã¿ã€ãã«è©æ¬ºã§ãããã¿ãŸãããå·éã«èããŠããã®äœãã®WebããŒãžãäžã®äžã«ãªãçŸç¶ããããããç°¡åãªæ¹æ³ãå¿
ãããã¯ããªãã§ããã ïŒåœæãµã³ãã«æžããªããã³ã¬ããã©ããããªããªããŠæã£ãŠãªãã§ãïŒ ã ä»åã¯ã¿ã€ãã«è©æ¬ºã§ã¯ãªããHerokuãšãããµãŒãã¹ãçšããŠWeb ã¢ããªéçº ã®ç°å¢æ§ç¯ãæ¬åœã«ç°¡åã«åºæ¥ãŠããŸãæ¹æ³ãã玹ä»ããããŸãã HerokuïŒãžããïŒãšã¯ Herokuã§ç°å¢æ§ç¯ php+postgresã¢ããªã®äœæ ãããã€ãœãŒã¹ã®æå® ãã©ãŠã¶ããã¢ã¯ã»ã¹ïŒ ãè£è¶³ãphpããpostgresã®æ¥ç¶ çµããã« HerokuïŒãžããïŒãšã¯ Herokuãšã¯ãPaaSïŒPlatform as a ServiceïŒã®1çš®ã§ãã¢ããªã±ãŒã·ã§ã³ã®åºã«ãããã©ãããã©ãŒã ãã®ãã®ããWebãéããŠæäŸããŠããããµãŒãã¹ã§ãã ä»åã®èšäºã§ã¯ãHerokuäžã§ php +postgresããã©ãããã©ãŒã ãšããWebã¢ããªã®æ§ç¯ããç®çãšãªããŸãã Herokuã§ç°å¢æ§ç¯ HerokuãçšããŠããšããããšãªã®ã§Herokuã®ã¢ã«ãŠã³ãç»é²ã¯å®äºããŠããåæã§èª¬æãå§ããŸãã䜿çšããã®ã¯ä»¥äžã®2ãµãŒãã¹ã§ãã®ã§ãã¢ã«ãŠã³ãç»é²ãŸã ã ãããšããæ¹ã¯ãæºåãã ããã Heroku jp.heroku.com GitHub github.co.jp php +postgresã¢ããªã®äœæ ãŸãæåã«ãHerokuäžã«ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãããã°ã€ã³ããŠå³äž New ãã Create New App ããããã¯ã¢ããªã±ãŒã·ã§ã³ã1ã€ããªãå Žåã¯ç»é¢çãäžã«ãã Create New App ãã¯ãªãã¯ããŸãã ã¢ããªåãå
¥åãã Create app ãã¯ãªãã¯ããŸããããã§ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããã ãšãã£ãŠããååãšæ çµã¿ã ãã®ç¶æ
ãªã®ã§ããããã php +postgresã§åãã¢ããªã±ãŒã·ã§ã³ã ãšããèšå®ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžãã Settings â Add buildpack ã®é ã«ã¯ãªãã¯ããŸãã ç«ã¡äžãã£ããããã¢ããã®äžã§ php ãéžã³ã Save changes ãã¯ãªãã¯ããŸãã ããã§äœæããã¢ããªã±ãŒã·ã§ã³ã¯ php ã§åããŸããããšããèšå®ãåºæ¥ãŸããã ç¶ããŠpostgresãèšå®ããŸãã Resources â Find more add-ons ãã Heroku Postgres ãæ¢ããŠã¯ãªãã¯ãã Install Heroku Postgres ãã¯ãªãã¯ããŸãã Heroku Postgres ã¯ã¢ããªã³ã§ãã®ã§ãæéãã©ã³ã®éžæããããŸãããšãããšèº«æ§ããŠããŸããããããŸãããã Hobby Dev ãšããç¡æãã©ã³ããããŸãã®ã§ããããéžæããŸãããããŠpostgresã远å ããã¢ããªã±ãŒã·ã§ã³ãéžæãã Provision add-on ãã¯ãªãã¯ããŸãã 以äžã§äœæããã¢ããªã±ãŒã·ã§ã³ã php +postgresã®ã¢ããªã±ãŒã·ã§ã³ã§ãããšããèšå®ãå®äºããŸãããããšã¯ãœãŒã¹ããããã€ããã°Webã¢ããªã±ãŒã·ã§ã³ãšããŠçšŒåããç¶æ
ã§ãã ãããã€ãœãŒã¹ã®æå® ç¶ããŠããœãŒã¹ã®ãããã€å
ã®èšå®ãã説æããŸãã ãœãŒã¹ã®ãããã€å
ãšããŠäœ¿çšããã®ã GitHub ã«ãªããŸãã GitHub ã«ãããã€çš ãªããžã㪠ãäœæããçŽäžã« index.php ãpushããŸãã ä»åäœæãããã¡ã€ã«ã¯ä»¥äžã®ãã®ã§ãã php +postgresã皌åããŠããããšã php ããpostgresã«æ¥ç¶ã§ããŠããããšã®ç¢ºèªãç®çãªã®ã§ç°¡åãªãã®ã§ãã ä»åã GitHub ãžã®push㯠GitHub Desktop ã䜿çšããŸãããçŽæã§ãœã¡ãœã¡ã§ãããã¹ã¯ãããã¢ããªã¯ãã¯ã匷ãã§ããã GitHub Desktop | Simple collaboration from your desktop ãšã¯ãããããã§ GitHub åŽã®æäœã¯çµããã§ããHerokuã®ç»é¢ã«æ»ããŸãã Deploy â GitHub â Search ãšã¯ãªãã¯ããäžèš index.php ãpushãã ãªããžã㪠ã®é£ã«ãã Connect ãã¯ãªãã¯ããŸãã ããã§ GitHub ãªããžã㪠ãããããã€ããèšå®ãå®äºããŸãããHerokuãã GitHub ãžã®æ¥ç¶ãåããŠã®å Žåã¯ã飿ºããããã©ããã®ç¢ºèªãåºãŸãã®ã§ã衚瀺ããããšããã«é²ããŠããã°OKã§ãã æåŸã«ã Enable Automatic deploys ãš Deploy Branch ãã¯ãªãã¯ããŸãããã Enable Automatic deploys ã¯èªåãããã€ã®èšå®ã§ãããã©ã³ããæå®ããŠèªåãããã€ãæå¹ã«ããããšã§ããã®ãã©ã³ãã«pushããããã³ã«èªåã§ã¢ããªã±ãŒã·ã§ã³ãææ°ã®ãœãŒã¹ã«çœ®ãæããŠãããŸãã Deploy Branch ã¯æåãããã€ã®ãã¿ã³ã§ããã¢ããªã±ãŒã·ã§ã³ã®èšå®ãšãããã€å
ã®æå®ãããã ãã§ããŸã ãããã€ã¯ãããŠããŸãããèªåãããã€ãæå¹ã«ãããšããŠããååã ãã¯æåã§è¡ããŸãã ãã©ãŠã¶ããã¢ã¯ã»ã¹ïŒ ãããŸã§ã®æé ã§å
šãŠã®æºåãå®äºããŸãããå®éã«äœæããã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŠã¿ãŸãããã ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã®å³äžã« Open app ãšãããã¿ã³ãããã®ã§ã¯ãªãã¯ããŠã¿ãŸãããã äœæãã index.php ã®éãã«è¡šç€ºãããŸããïŒ postgresã®ããŒãžã§ã³ã php ããååŸåºæ¥ãŠããã®ã§ getAttribute ã®ä»£ããã« SQL ãçºè¡ããŠåããã€ããŠããã°ç«æŽŸãªWebã¢ããªã±ãŒã·ã§ã³ã«ãªããŸããã å人çãªææ³ãšããŠãpostgresã10.3ãšææ°ã«å¯ŸããŠphp5.6ãããã³ãã©ããã«æããŠä»æ¹ããªãã£ãã®ã§ããã php ã®ããŒãžã§ã³ãæå®ããæ¹æ³ãã¡ãããšçšæãããŠããŸããç»é¢ããäœã£ãã ãã§ã¯ããã©ã«ãèšå®ã§äœãããããšãã£ãæãã§ããããã composer.json ã«æ¹ããŠæå®ããããšã§ php ã®ããŒãžã§ã³å€æŽãå¯èœã§ãã Heroku PHP Support | Heroku Dev Center ãè£è¶³ã php ããpostgresã®æ¥ç¶ ãããŸã§ã¢ããªã±ãŒã·ã§ã³çšŒåãŸã§ã®æé ãã説æããããŸãããã1ã€ã ãè£è¶³ããããŸãã æåã php ããpostgresã«æ¥ç¶ããã«ããã£ãŠãæ¥ç¶æ
å ±ã®åãæ¹ã«è©°ãŸããŸãããHerokuã®ç»é¢äžãã確èªã¯åºæ¥ãã®ã§ããã§ãããããã ãç°å¢æ§ç¯ãç°¡åãªã®ã«æ¥ç¶æ
å ±ã¯ãŸã£ããé¢ä¿ãªããµãŒãã¹ã§ãã GitHub äžã®ãœãŒã¹ã«ã¹ãæžãã§æã€ããšãããšãããåŒã£ããããŸããã GitHub äžã®ãœãŒã¹ãèŠãã°ä»ã®äººã®ã¢ããªã®DBã«ã¢ã¯ã»ã¹åºæ¥ãŠããŸããŸãã 調ã¹ããšãããpostgresãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ãããšãã«ã ç°å¢å€æ° ã«è¿œå ãããŠããããã§ãããããååŸããæ¹æ³ããäžèšã® index.php ã®èšè¿°ã«ãªããŸãã Heroku Postgres | Heroku Dev Center çµããã« ä»åã¯ã¿ã€ãã«è©æ¬ºã§ã¯ãªããããã©ããããã§ãããã«Web ã¢ããªéçº ãåºæ¥ãæé ã®èšäºã«ãªã£ãŠãããšæããŸãã HerokuãåããŠäœ¿ã£ãã®ã§ããããšãŠãç°¡åã§é©ããŸããã調ã¹ãã«ãå
¬åŒããã¥ã¡ã³ããå€ãã®ã§ãè©°ãŸã£ãŠã©ããããããªããªããšããããšã¯ãããŸããã§ããã ã¿ã€ãã«ã®30åãšããã®ãåã§ã¯ãªãããããããããããšæãç«ã£ãŠHerokuã®ã¢ã«ãŠã³ããäœæããŠãããç¹ã«èª¿ã¹ãã§ããªãçŽæã§ãœã¡ãœã¡ç»é¢ãæäœããŠã phpinfo() ãç»é¢ã«åºããŸã§ã®æéããããããã§ãããæ¬åœã«ç°¡åã§ãã ã³ãã³ãèŠããã®èšå®ã®ç°¡åããçŽ æŽãããã®ã§ãããç¹ã«pushããã®èªåãããã€ãããã©ããããã®å¿ã«ããªãé¿ããŸããã æ°ãä»ããªããšãããªããšããã¯ãååã®èšäºã§äœæããã¢ããªã¯ã¢ã¯ã»ã¹è
æ¬äººã®ç»é¢ã«ã®ã¿ããŒã¿ã衚瀺ãããã®ã«å¯ŸããHerokuã¯éåžžã®Webã¢ããªã«ãªããŸãã®ã§ã èåŒ±æ§ ã®ãããµãŒãã¹ãå
¬éããŠããŸããšæ»æã®èžã¿å°ãšããŠäœ¿ãããŠããŸãå¯èœæ§ããããŸããã¢ããªã®äœæãå
¬éã¯æ°ãä»ããŠè¡ããŸãããã ããŠãããã«ãŠä»åã®èšäºã¯çµãããšããŸãããååã®ã¿ã€ãã«è©æ¬ºã®æ±åãè¿äžã§ããã§ããããã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ããã«ã¡ã¯ãéçºãšã³ãžãã¢ã®amdaba_skïŒ ãã³ã ãŒã æªå®ïŒã§ãã ååã¯ã OWASP ZAPã«ã€ããŠèª¿ã¹ãŠã¿ã ããšããèšäºãæžããŸããã åäœãã¹ã äžã«ãã£ãã䜿ã£ãŠã¿ããããšæã£ãŠããã®ã§ãããæå
ã®ç°å¢ã§ã¯ããŒãåŸ
ã¡åãã§ãšã©ãŒãåºãŠããŸã£ãŠæŸçœ®ããŠããŸãâŠâŠã ããã¯ããŠãããã²ãšæã»ã©åã®è©±ã«ãªããŸããã åŒç€Ÿãšã³ãžãã¢ã®ã€ã³ã¿ãã¥ãŒèšäº ãå
¬éãããŸãããã åšãããä¿¡é ŒãããŠãããããšæ¥åã«å±ãåç°ããã®å§¿ãäŒãã£ãŠããŸãããã®èšäºãèªãã§ãããããäžèŠã«ããæ¥œããããªè·å Žã ãªããç§ããããããšããã§åãããâŠâŠããšã¡ãã£ãšæã£ãŠããŸããŸããããããå¥ã«ä»ã®è·å Žç°å¢ã«äžæºãããããã§ããªãã®ã§ããã ãŸã ã芧ããã ããŠããªãæ¹ã¯ãã²ã«ã ãšããã§å®ã¯åœŒã¯ç§ã®åæã§ãããŸããŠãå
æ¥ãæŒãäžç·ã«é£ã¹ãã€ãã§ã«éè«ã«èŠããããŠè¿œå ã§ã€ã³ã¿ãã¥ãŒããŠã¿ãŸããã®ã§ããã®æã®è©±ãä»åã¯æžãããšæããŸãã ïŒâ»æ¬äººäºæ¿æžã¿ããã ãåçã¯æ°æ¥ããããã®ã§NGã ããã§ããä»ãããªæããããŸããïŒ ããæŒäžãã ç§ã¯ååã®ããã°æçš¿ãããã£ããéã空ããŠããã®ã§ãããããæ°ããèšäºãæçš¿ããããªãšæã£ãŠããŸãããæè¡çãªTipsã®ãããªãã¿ãããããã©ãããŸã«ã¯ ã©ã¯ ã¹ç€Ÿå¡ã§ããèªåããæžããªããããªãã¿ãè¯ãããããŠãã£ããæžãã®ã ããèªåãæ¥œããã§æžããããæ¥åã®åãé ã®é
ã§èãããã®ã®ããããããã ãšãããã¿ããªããªãèŠã€ããããã«å°ãçŠã£ãŠããŸããã æ··éãé¿ããŠå°ãé
ãã®æéåž¯ã«æŒé£ããšãã®ãåæã®éã§ã®ç¿æ
£ã§ããæ¥åã®åããèŠãŠç€Ÿå
ãã£ããã§èªãåãããªãã£ã¹ããåºãŠå€ãžããã®æã¯ç§ãšåç°ããã®äºäººã§ããã ããã§ããã³ãšããŸãããæãç«ã£ãã忥ãšããããšã§æ©éã¢ã€ãã£ã¢ãå®è¡ã«ç§»ãç§ããã®æã¡ãã£ãšé¡ãã«ãããŠãããããããŸããã ãã³ã ãŒã æªå® ïŒä»¥åŸ ãã³æª ïŒãããããã°ãã®åã€ã³ã¿ãã¥ãŒåããŠãèšäºå
¬éãããŠãŸããããèŠãŸãããå
šåœããã¥ãŒããã§ãšãããããŸãã åç°ãã ïŒä»¥åŸ åç° ïŒããããŠã ãã³æª ããªãããã£ã¡ãããæãã®ããšèšã£ãŠãããããããã»ããšã«èšã£ãã®ã åç° ããã®ãŸãŸã¯èšã£ãŠãªããèšäºã®ç®çã«åãããŠããªãç·šéãããŠãããåŸããä¿®æ£ããããã ãã³æª ããŸããã§ãããã åç° ãã§ãããŒã¹ã¯ã€ã³ã¿ãã¥ãŒã®æã«è©±ããå
容ã ãã£ãããã£ãŒã©ãŒã®ããšã«ã€ã㊠ãã³æª ãCD 1 ã§äœ¿ã£ã ãã¬ãŒã ã¯ãŒã¯ ã£ãŠãªãã ã£ãããâŠâŠããã°ãïŒã åç° ãLaravelã PHP ã®Webã¢ããªã±ãŒã·ã§ã³ ãã¬ãŒã ã¯ãŒã¯ ã ããããš JavaScript ã§Vue.jsã äœèšã£ãŠãã®ïŒ ã¿ãããªé¡ããã€ã€ãåç°ããã¯ã¡ãããšçããŠãããŸãããããããã ãã³æª ãããã§ããã䜿ã£ãŠã¿ãŠã©ãã ã£ãïŒ äŸãã°MD 2 ãšæ¯ã¹ãŠã¿ãŠã MDã¯CDãšåãã PHP ã§æžãããŠããŸãããç¹ã« ãã¬ãŒã ã¯ãŒã¯ ã¯äœ¿çšããŠããªããšããããšã¯ä»¥ååç°ããããèããŠããŸããã åç° ã ãã¬ãŒã ã¯ãŒã¯ ããããšãã£ã±ãããªã楜ãé¢åãªããšã¯ãã£ãŠãããŠãããã©ãã«ã©ããªããšãæžããšããã®ããæç¢ºã«åãããŠããããäœãããæ©èœã®ããšã«éäžã§ãããããã¯Laravelã«éã£ã話ãããªããšã¯æããã©ãä»ã« ãã¬ãŒã ã¯ãŒã¯ ãè§Šã£ãããšãç¡ãããä»ã® ãã¬ãŒã ã¯ãŒã¯ ãšæ¯ã¹ãŠã£ãŠãªããšããããããªãã ãã³æª ãVue.jsã¯é飿®ºå°ã ã£ãã£ãŠè©±ã ã£ãããã åç° ãããŒããããæ
£ãããŸã§ã¯ã¡ãã£ãšå€§å€ã ã£ãããªããããŸã§æ
£ã芪ããã æç¶ãçãªJSã®æžãæ¹ãšã¯ ãã©ãã€ã ãéããšããããVue.jsã£ãœãæžãæ¹ã£ãŠã©ããªã ããã£ãŠã¯ãªã£ããéçºå
¥ãåã«ãã¡ãã£ãšã¯å匷ããŠããã©ãå®è£
å§ããŠãããå
¬åŒãµã€ãã®ããã¥ã¡ã³ãèªãã§ãããšãæåã®ãã¡ã¯å€ãã£ãã ãã³æª ããžãŒâŠâŠãå
èŒ©ã«æããå Žé¢ããã£ãã£ãŠèšäºã«ã¯æžããŠãã£ãããã åç° ãã¿ããªããŠæ
£ããŠãªãã£ãããããLaravelãVue.jsããäœãæ°ããããã£ãããšããã£ãããã£ããæããã£ãŠããLaravelã ãšããæžãã°ããã¿ããã§ãããŒããšããVue.jsã§ããæžããšãããã¶ãããŸããããŸãããšãã 話ããŠãããã¡ã«ãªãã£ã¹è¿ãã®å®é£å±ããã«å°çããé£åžã賌å
¥ããããã«è©±ã¯äžæäžæãšãªããŸããã ãã¿ãã ãã³æª ãããããã°CDã¯å
šç€Ÿäº€æµäŒ 3 ã§è¡šåœ°ãããŠãŸããããã åç° ãããã§ããã ãã³æª ãããããã°ããªããããã£ã衚地ãããŠãŸããã§ããã£ãããªãã§ã§ããã£ãã åç° ãããã§ããããã¿ãããããžã§ã¯ãã§ããã ãã³æª ãããåããæã£ãŠããã ãã©ããã¿ããã£ãŠçµå±ãªã«ããŠãã®ã åç° ãç®æšã¯ããªãã ã£ãâŠâŠæ°ããæè¡ãšãã«ãã£ã¬ã³ãžããŠãããã£ãããšãæ®æ®µã®æ¥åã®æ¹åã«æŽ»ããããšãå
·äœçã«ã¯QCããŒã¿ã« 4 ã®æ®µéçãã€ã¯ããµãŒãã¹åãä»ãã£ãŠããšãã§ãç§ã¯ãã€ã¯ããµãŒãã¹äžã€ã®å®è£
ããã£ãŠãã Haskell âŠâŠïŒ ãã³æª ãããã§ Haskell ïŒã åç° ããããã ãã³æª ããªãã§ Haskell ïŒã åç° ããããªãããã£ãããããâŠâŠçŽç²é¢æ°ã§ããã°ã©ã æžãã®ã£ãŠãªããè¯ããããããªãïŒãå€ãªãšããã«å¯äœçšãåºãªãããä¿®æ£ã®ããã®åœ±é¿ç¯å²ã®èª¿æ»ã ã£ãŠæ¥œããã ãããã圱é¿ããããªã忀æ»ã§åŒã£ãããã ããããããããããã ãã³æª ãã§ãããã§ã¢ããªã±ãŒã·ã§ã³äœããšãã€ã¡ãŒãžã§ããªããã ãã©ã åç° ãããã¯ã©ã€ãã©ãªããããã倧äžå€«ããã®åãã¢ããã·ã¥ 5 ã§ç޹ä»ããæ¬ 6 ã«ã¯Webã¢ããªã±ãŒã·ã§ã³ãäœãç« ããããç°¡å㪠API ãµãŒããŒããããªãããã«ã ãã³æª ãã£ãšãããããæéãããè¡ããŸããããã ãããŠä»äºã¯ã€ã¥ã Haskell ã«ã€ããŠç±ãèªã£ãŠããããããªæãã«ãªã£ãŠããŸãããããã«ããšæéåãããã¡ããããŸãšåããŠåºãåºããã®ããšã¯ä»æããªã話ããã€ã€ãªãã£ã¹ã«æ»ããŸãããååŸã®æ¥åãå§ãŸããŸãã èªåžã«ã€ããŠå
ã»ã©ã®è©±ã®å
容ãã¡ã¢ãã€ã€ãç§ãæã£ãã®ã¯äžã€ã§ããã Haskell 奜ããå¢ãããšãããâŠâŠ Chat DealerïŒãã£ãããã£ãŒã©ãŒïŒã®ç¥ç§°ãCDã«ã€ããŠè©³ããããšã¯ååãµã€ããåç
§ â https://www.chatdealer.jp ↩ Mail DealerïŒã¡ãŒã«ãã£ãŒã©ãŒïŒã®ç¥ç§°ãMDã«ã€ããŠã詳ããããšã¯ååãµã€ããåç
§ â https://www.maildealer.jp ↩ 幎床æ«ã«éå¬ãããå
šç€Ÿå¡ãéãŸã£ãŠã®ããŒãã£ããã®å¹ŽåºŠã«ç¹ã«æŽ»èºãããããå人ã»ã°ã«ãŒãã衚地ããããããã ↩ 瀟å
çšã·ã¹ãã ã®ã²ãšã€ãããã€ãæ©èœã¯ãããããã£ã±ããã®æ¥ã®ä»äºã¯ã©ããªããšãäœæéãã£ããå
¥åã®ããã«å©çšããã ↩ æ1ã§éå¬ããŠããéçºéšã®äº€æµäŒãããŒã«ãªã©ã®ã¢ã«ã³ãŒã«(+軜é£)ãçæã«ãã©ã³ã¯ã«æè¡å
容ã«ã€ããŠçºè¡šãããèªãåã£ããããããã®ããã°å
ã§ãéå»ã« 玹ä»ããã ã ↩ æ¬é é
æŽ, é¡å° åä», é¢å æé¿ (2017)ãHaskellå
¥é 颿°åããã°ã©ãã³ã°èšèªã®åºç€ãšå®è·µãæè¡è©è«ç€Ÿ ↩
Y-Kanohã§ãã 瀟äŒäººã«ãªã£ãŠ2幎ãšã¡ãã£ãšãçµã¡ãŸããã ç§ã¯ãå
¥ç€ŸããŠãããäŒç€Ÿã§åŸãç¥èãªã©ãæ°ããæè¡ã詊ãéãDockerã䜿ã£ãŠéçºç°å¢ãæ§ç¯ããŠããŸãã Dockerãšãããšããã®æè»œããšç®¡çã®ãããããããéåžžã«æ³šç®ãããŠããŸãããæ°ç±³ãšã³ãžãã¢ç®ç·ã ãšãæè¡åŠç¿ã®ããŒã«ãšããŠå€§å€éå®ããç¹ããšãŠãå€ãæããŸãã ä»åã¯ãæ°ç±³ã®ãšã³ãžãã¢ãDockerãåŠç¿ããããšã§ããã£ããšæããããšã4ã€ãŸãšããŸãã ãã®1ïŒè»œéãªéçºç°å¢ãšããŠäœ¿ãã Dockerãšã¯ä»®æ³åæè¡ã®1ã€ã§ãã ãšèšã£ãŠãã VirtualBox ãªã©ã®ãããªãã¹ãåä»®æ³åã§ã¯ãªããã³ã³ããåä»®æ³åæè¡ã§ãã 䜿ãå€ãããå³ã§ãããäžå³ã®ããã«ã ã³ã³ããåä»®æ³åã§ã¯ããã¹ãåä»®æ³åãšéãã ã²ã¹ãOSãçšãããOSäžã®åºåãããã³ã³ãããšåŒã°ãã空éã§åäœããããã»ã¹ãšããŠä»®æ³ç©ºéãæ±ãããšãã§ããŸãã ãã®ããããã¹ãåä»®æ³åãã軜éã§ãCPUãã¡ã¢ãªã®äœ¿çšéãæããããšãã§ããŸãã æ°ç±³ã®ãšã³ãžãã¢ãšããŠãèªå®
ã§å¿
èŠã«ãªããã®ã¯ãèªåãèªç±ã«æ±ãããšãã§ããéçºç°å¢ã§ãã äŒç€Ÿã§åŸãæè¡ã詊ããããã¡ãã£ãšããäžèª¿ã¹ãããã«ã¯èªå®
ã§ã®éçºãè¡ãã«ã¯ãéçºç°å¢ãå¿
èŠã§ããã éã ä»®æ³ãã·ã³ ãç«ã¡äžããããšã¯ããŸãåŸçã§ã¯ãããŸãããããã«ããµãŒããè€æ°å°çšããéçºãè¡ãããå Žåã¯... æåãããã€ã¹ããã¯ãªã³ã³ãã¥ãŒã¿ãæã£ãŠããå Žåã¯å¥ã§ãããã¹ããã¯ãéãããã³ã³ãã¥ãŒã¿ãããã£ãŠããªãå Žåãªãããã§ãã ãã®2ïŒäœ¿çšããMWãæèã§ãã Dockerã¯"Infrastructure as Code"ãšåŒã°ãããã€ã³ãã©ç°å¢ãã³ãŒãåããŠç®¡çããããšãã§ããä»çµã¿ãæäŸããŠãããŸãã å
·äœçã«ã¯ããDockerfileããšåŒã°ãããã¡ã€ã«ã«ãã³ã³ãããæ§æããOSãMWãèšè¿°ãããDockerfileããåºã«ã³ã³ãããäœæããããšã§ãäœåºŠã§ãåãç°å¢ãæ§ç¯ããããšãã§ããŸãã 以äžã¯ç°¡å㪠PHP ç°å¢ãæ§ç¯ããéã«äœ¿çšããDockerfileã§ãããšãã«é£ããããšãæžããŠããããã§ã¯ãªãã䜿ãããMWã®ã€ã³ã¹ããŒã«ã³ãã³ããã»ãšãã©ãªãããç¥èããªããŠãããŒãã«ã¯é«ããããŸãããã FROM php:7.2.0-apache RUN apt-get update RUN apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql mbstring RUN a2enmod rewrite ## èšå®ãã¡ã€ã«ã®è¿œå ADD ./config/000-default.conf /etc/apache2/sites-available/000-default.conf ADD ./config/php.ini /etc/php.ini # ã¿ã€ã ãŸãŒã³ã®èšå® RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime CMD apache2-foreground ããŸãç¥èããªããã¡ã®éçºã§ã¯ãèªåãäžäœã©ã®MWãã©ã€ãã©ãªã®æ©èœã§å®è£
ã§ããŠããã®ãããããªããªãæããããŸãã ç§ã®å Žåãèªå®
ã® ä»®æ³ãã·ã³ ã§ã§ããŠããããšããå®ã¯OSã«ããŸããŸã€ã³ã¹ããŒã«ãããŠããæ©èœã ã£ãã®ã«ãç¥ããã«äœ¿ã£ãŠãããšããããšããããŸããã å
ã
ããDockerfileãã¯ã€ã³ãã©ç°å¢ãã³ãŒããšããŠç®¡çããããšã§ãMWã®ããŒãžã§ã³ç®¡çãããããã€ã®å¹çåãªã©ãç®çããšæããŸãã ã§ãããåŠç¿ç®çãšããŠã®ç°å¢æ§ç¯æã«ã¯ãèªèº«ãå¿
èŠãšããMWããªããªã®ããäœã®æ©èœã䜿ã£ãŠéçºãé²ããã®ããèªèŠããããšãã§ããŸãã Dockerfile ã¯ãèªèº«ã®æ§ç¯ããç°å¢ããã£ããæèããããã«ãã圹ã«ç«ã€ã®ã§ã¯ãªãã§ããããã ãã®3ïŒãŸã£ãããªéçºç°å¢ãããæã«å
¥ã åŠç¿ç®çã®éçºãè¡ãäžã§ãããã¡ãªã®ããæ§ã
ãªã©ã€ãã©ãªãMWã詊ããã¡ã«ã ãªã«ãã©ãã€ã³ã¹ããŒã«ããã®ããããããéçºç°å¢ã修埩ã§ããªãç¶æ
ã«ãªã£ãŠããŸãããšã§ãã å°ãªããšããç§ã¯ããã§ããã ã€ã³ã¹ããŒã«ããMWã¯èŠããŠããªããããŒãžã§ã³ãããããããªãããšãã£ãç¶æ³ã§ãã ãã®ãã³ãéçºç°å¢ããªã»ããããããã«ãOSãã€ã³ã¹ããŒã«ããªããã®ã¯ãæéãããããããã«äŒŽã£ãŠã¢ãããŒã·ã§ã³ããªããªããããããŸãã«ãã³ã»ã³ã¹ã§ãã Dockerã§ã¯ããDockerã€ã¡ãŒãžããšåŒã°ããã³ã³ããã®ãã³ãã¬ãŒãã®ãããªãã®ãä¿åããããšãã§ããŸãã ãDockerã€ã¡ãŒãžãã¯ãã¹ãå ä»®æ³ãã·ã³ ã®ã¹ãããã·ã§ããã®ããã«å®¹éã倧ãããªãã ã³ãã³ãäžçºã§ããã³ã³ãããäœãããšãã§ããŸãã ãDockerã€ã¡ãŒãžãã¯ãå
ã«è§Šãã Dockerfile ããäœãããšãã§ããŸããã ã€ã³ã¿ãŒãããã«ã¯ãããããã®ãDockerã€ã¡ãŒãžããå
¬éãããŠããŸãã ãããéçºç°å¢ã®æ§ç¯ã§ãããã詊ãããå Žåã¯ãããŒã¹ãšãªãOSã®ã³ã³ãããäœæãã æ°ã«ãªã£ãMWãã€ã³ã¹ããŒã«ããŠãããŸããããªãã£ããããç Žæ£ããŠããäžåºŠã³ã³ãããäœãçŽããšãã£ãããšãã çãã¹ãã³ã§ç¹°ãè¿ãããšãã§ããŸãã ãã®ãããããŒã«ã®éžå®æã«ã¯ããšãŠãéå®ããŸãããæ°è»œã« ãã©ã€ã¢ã³ããšã©ãŒ ãè¡ãããšãã§ããŸãã ãã®4ïŒããŸããŸãª OSS ããŒã«ã詊ãããšãã§ãã Dockerã®å©ç¹ã¯ããªã«ãéçºç°å¢ã®æ§ç¯ã ãã§ã¯ãããŸããã äž»èŠãª OSS ã¯ãå
¬åŒã®Dockerã€ã¡ãŒãžãå
¬éããŠããŸãã ããšãã°ã redmine ãGitLabãJenkinsãªã©ãDockerã€ã¡ãŒãžãçšæãããŠããã ã³ãã³ãäžçºã§æå
ã«ãããã€ããããšãã§ããŸãã ãã®ããããããé
å±ãããããŒã ã«ãŠäœ¿ã£ãŠããããŒã«ã«ã€ããŠãããããªãããšããã£ãå Žåã èªå®
ã§ãã®ããŒã«ããããã€ããŠãèªåã§ãããã詊ãããšãã§ããŸãã ç§ã®å ŽåãããŒã ã§äœ¿ãå§ããGitLabãèªå®
ã§ç«ã¡äžããæ®æ®µäœ¿ã£ãŠããªãæ©èœãè§Šã£ããããŠããŸãã ããŒã ã§äœ¿çšããŠããããŒã«ã¯ãéçºã®äžã§äœ¿ãããªããããã«ãªããšã¯éããŸããã ããšãã£ãŠãããŒã ã§äœ¿ã£ãŠããããŒã«ãåŠç¿ç®çã§åŒãããã«ããããªãã®ã§ãèªå®
ã§ç°¡åã«ãããã€ããèªç±ã«äœ¿ããç°å¢ã¯ãšãŠãéèŠã§ãã ãããã« ç§ã®å Žåãæåã«DockerãåŠç¿ãããã£ããã¯ãäžèšã®ãããªåŠç¿ç®çã§ã¯ãªããåçŽãªèå³ã§ããã ããããDockerãåŠç¿ãããããã§ãèªå®
ã§ã®éçºãåŠç¿ã«å¯ŸããŠããããã¯ãŒã¯ã軜ããªã£ããšæããŠããŸãã Dockerã®ç¥èãæ¥åã«çŽæ¥åœ¹ã«ç«ããªãå Žåã§ããèªèº«ã® ã¹ãã«ã¢ãã ã®ããã«ãåŠç¿ããŠã¿ããã©ãã§ããããã
ã¯ããã« ããã«ã¡ã¯ãã©ã¯ã¹ãšã³ãžãã¢ã® strongWhite ã§ãã ä»åã¯Swiftã«ããã ã¯ããŒãžã£ ã®æžãæ¹ããŸãšããããšæããŸãã ã¯ããŒãžã£ 㯠JavaScript ãªã©ãå匷ããæ¹ã¯éŠŽæã¿ããããããããŸããããåããŠã®æ¹ã¯æ
£ãããŸã§æéãããããããããŸããã ãªããä»åã¯Swiftèªäœã®èª¬æãçããŸãã éå»ã®èšäº ã§Swiftã«ã€ããŠè§ŠããŠããã®ã§ãæ°ã«ãªãæ¹ã¯ãã¡ãããåç
§ãã ããã ã¯ããã« ã¯ããŒãžã£ãšã¯ ã³ãŒã«ããã¯ãšã¯ å®äŸïŒéåžžã®æžãæ¹ïŒ å®äŸïŒã¯ããŒãžã£ã®æžãæ¹ïŒ ã¯ããŒãžã£ã«ãããšäœãããã®ãïŒ ã¯ããŒãžã£ ãšã¯ ãŸãã¯å眮ãããããããã ã¯ããŒãžã£ ãšã¯ïŒã§ãããç°¡åã«èšããš ååã®ãªã颿° ã§ãã æç« ã«ãããšäœèšã«æ··ä¹±ããããããããŸãããããããŠãŸãšãããªã以äžã®ãããªæãã§ããããã èªèº«ãå®çŸ©ãããã¹ã³ãŒãå
ã§è§£æ±ºãã颿° å®è¡çµæã次ã®åŠçã§ç¶ããŠäœ¿çšãã颿°ãäœæãããå Žåã«äœ¿çš ãããèªãã§ãæå³äžæã ãšæããŸãã®ã§ãåŸã»ã©ãµã³ãã«ã³ãŒããæžããŠã¿ãŸãã ã³ãŒã«ããã¯ãšã¯ ã¯ããŒãžã£ ãšã¯çŽæ¥é¢ä¿ãããŸãããããã®åŸã®ãµã³ãã«ã³ãŒãã« ã³ãŒã«ããã¯é¢æ° ãåºãŠããã®ã§ãã³ãŒã«ããã¯ãšã¯ïŒãšããæ¹ã®ããã«ããããã解説ããŠãããŸãã ã³ãŒã«ããã¯ãšã¯ ããšã§åŒã¶ ãšããæå³ã§ãåŒã³åºãå
ã®é¢æ°ã®äžã§å®è¡ãããããã«ãããããæå®ããŠãã颿°ã ã³ãŒã«ããã¯é¢æ° ãšèšããŸãã颿°ã®äžã§å¥ã®é¢æ°ãåŒã¶ã€ã¡ãŒãžã§ãã å®äŸïŒéåžžã®æžãæ¹ïŒ ããã§ã¯ãµã³ãã«ã³ãŒããèŠãŠãããŸãããããŸãã¯éåžžã®æžãæ¹ãããåçŽãªæååãåºåããããã°ã©ã ã§ãã func A () { print( "RAKUS Developers Blog" , terminator : "" ) B() } func B () { print( "ãèªãã§ã©ã¯ã¹ãç¥ãã" ) } A() // åºåçµæ // RAKUS Developers Blogãèªãã§ã©ã¯ã¹ãç¥ãã å®äŸïŒ ã¯ããŒãžã£ ã®æžãæ¹ïŒ ç¶ã㊠ã¯ããŒãžã£ ã䜿ã£ããµã³ãã«ã³ãŒãã§ããåŠçå
容ã¯éåžžã®æžãæ¹ãšå€ãã£ãŠããŸããã func A (title : String , callback : (String) -> (String)) { print(callback(title) + "ã©ã¯ã¹ãç¥ãã" ) } A(title : "RAKUS Developers Blog" ) { (blogName) in // <--ã¯ããŒãžã£ return blogName + "ãèªãã§" } // åºåçµæ // RAKUS Developers Blogãèªãã§ã©ã¯ã¹ãç¥ãã ããããããã§ããç°¡åã«åŠçã®æµãã解説ãããšã颿° A ã®å®åŒæ° title ã®å€ãcallbackã®åŒæ°ã«ãªãïŒ blogName ã®åŒæ°ã«ãªããŸãã ãã㊠RAKUS Developers Blog ã« ãèªãã§ ãè¶³ãããæååãreturnããã颿° A ã®åŠçã§ããã« ã©ã¯ã¹ãç¥ãã ãè¶³ãããæçµçãªæååãåºåãããããšã«ãªããŸãã é«åºŠãªæžãæ¹ã«èŠããŸãããSwiftããã£ãŠãããšããåºãŠããæžãæ¹ãªã®ã§èŠããŠãããŠæã¯ãªãã§ãã ãã®ãšãã颿° A ã®callbackãåè¿°ãã ã³ãŒã«ããã¯é¢æ° ã§ãã颿° A ã§åŒã³åºãããŠåããŠåŠçãè¡ãããŸãã ã¯ããŒãžã£ ã«ãããšäœãããã®ãïŒ æåã«æžããããã« å®è¡çµæã次ã®åŠçã§ç¶ããŠäœ¿çšãã颿°ãäœæããã å Žåã«æå¹ã§ãã äŸãã°ãããŠã³ããŒããã CSV ãã¡ã€ã«ãè¿ã颿° downLoadCsv ããããšããŸãããµã³ãã«ã³ãŒãã§ãããš downLoadCsv ã¯é¢æ° A çžåœã«ãªããŸãã downLoadCsv ããè¿ããã CSV ãã¡ã€ã«ãããšã«åŸç¶ã®åŠçãè¡ãããïŒäŸ. CSV ãã¡ã€ã«ãããŒã¹ããïŒå Žåã ã¯ããŒãžã£ ã§ downLoadCsv ã®è¿ãå€ãèšè¿°ããŠãããã°å®è¡çµæãåŒãç¶ããŸãã æ
£ãããšãšãŠã䜿ãããããèšè¿°ãã·ã³ãã«ã«ãªãã®ã§ã ã¯ããŒãžã£ ã®æžãæ¹ããã²ãã¹ã¿ãŒããŠã¿ãŠãã ããã
ã¯ããã« æ°å3幎ç®ã«çªå
¥ããŸããnorth_mkyã§ãã ãšã³ãžãã¢ãããŠãããšäžåºŠã¯ã³ã³ãã¥ãŒã¿ã§ã®æåã®æ±ãã«ã€ããŠèããããšãããã®ã§ã¯ãªãã§ããããã ä»åã¯ãããªãã®åœã®æåãã«ããŒããŠãã笊å·å æåéå ã unicode ã®ç¹åŸŽã«ã€ããŠæžããŸãã â»ä»åã¯ããããããã®ããã«å³å¯æ§ã¯æ±ããªãæžãæ¹ãããŠããç®æããããŸããã容赊ãã ãããŸãã ã¯ããã« 1. unicodeãšã¯ 2. unicodeã®ç¹åŸŽ ç¹åŸŽ1. 4次å
ã§äžã€ã®æåã衚ã ç¹åŸŽ2. ä»ã®æåãšçµã¿åãããŠäœ¿ãåæçšæåãååšãã(çµåæå) ç¹åŸŽ3. åãæåã ãåäœãç°ãªãå Žåäžã€ã®åäœã«çµ±åãããŠãã(çµ±åæå) ç¹åŸŽ4. ä»ã®ç¬Šå·åæ¹åŒãšã®äºææ§ã®ãã远å ããæåãååšãã(äºææå) 3. unicodeã¯é²åãç¶ããŠãã ~ã¿ã€ãã«åå~ 4. çµããã« 5. åèæç® 1. unicode ãšã¯ 笊å·å æåéå ã®ã²ãšã€ã§ãã ...ãšæžããšé ã« ã¯ãŠãª ãæµ®ãã¶ãããããŸããã æåãšããã®ã¯äžçèŠæš¡ã ãšããªãã®æ°ãååšããŸãã ãã æåãéããã ãã§ã¯ãŸãšãŸã(ã²ãããªã挢åãã©ãã³ãªã©)ã衚çŸããããšãé£ããã£ãã圢ã䜿ããæ¹ã®éãæåã®çµ±äžçã«ç®¡çããããšãé£ãããããããã® äœçœ® ã«ãã®æåããããŠããããšããããã«æåã系統çã«å®çŸ©ãã管çããããããŠããŸãããã®äœçœ®ã®ããšã 笊å·äœçœ®(ã³ãŒããã€ã³ã) ãšãããåã«å¯ŸããŠå¿
ãäžæã®æ°å€ã§è¡šããã笊å·äœçœ®ãååšãããã€ãŸãåãæ°å€ã«è¡šããã笊å·åããè¡ã£ãŠãããããâ笊å·å æåéå âãšãããŸãã unicode ã®ä»ã«ã笊å·å æåéå ã¯äžçã®åå°åã§ååšããŠããŸãã ããšæ¥æ¬ã§ãããŸããšæåãšããŠããã²ãããªã»ã«ã¿ã«ãã»æŒ¢åã»ã¢ã«ãã¡ããããã䜿ãããããããã®ç¬Šå·å æåéå ã®å®çŸ©ãå¿
ç¶ãšãªããŸããåœå
ã§ãããã®æåã«ç¹åããæåãªç¬Šå·å æåéå 㯠JIS X 0208 ããããŸãã ãã®ç¬Šå·å æåéå ã¯åã«åã笊å·äœçœ®ãšããäœçœ®ã¥ããä»äžãæåãå®çŸ©ãéããŠããã ããªã®ã§ãã³ã³ãã¥ãŒã¿ã§æ±ããããã»åŠçãããããããæŽã«ç¹å®ã® ã¢ã«ãŽãªãºã ã§ç¬Šå·åãããŠããããšãå€ãã§ãããã®ç¬Šå·åã®çš®é¡ã®ããšã 笊å·åæ¹åŒ ãšãããå
·äœçã«ã¯äžèšã®ããã«ç¬Šå·å æåéå ã衚çŸããè€æ°ã®ç¬Šå·åæ¹åŒãååšããŸãã 笊å·å æåéå 笊å·åæ¹åŒ unicode UTF-16 , UTF-8 ... JIS X 0208 Shift_jis , EUC -JP, ISO-2022-JP ãšãå°ãé·ããªããŸããã話ãå
ã«æ»ããŸããš unicode ãšã¯ç¬Šå·å æåéå ã®äžã€ã§ãã webã§ã¯ ããã¡ã¯ãã¹ã¿ã³ããŒã ã®ç¬Šå·åæ¹åŒ( æåã³ãŒã )ã UTF-8 ã®æåã¯ãã® unicode ã笊å·åãããã®ã§ããåé ã§è¿°ã¹ãéãã unicode ã¯å€ãã®åœã®æåãã«ããŒããŠããã®ã§ãããããããã« æåéå ã®è¡šãæ¹ãåã®å®çŸ©ã®ä»æ¹ã«ç¹åŸŽããããŸãã以äžã«ãã®ç¹åŸŽãè¿°ã¹ãããšæããŸãã 2. unicode ã®ç¹åŸŽ unicode ã«ã¯å€§ããªç¹åŸŽã4ã€ãããŸãã ç¹åŸŽ1. 4次å
ã§äžã€ã®æåã衚ã ç¹åŸŽ2. ä»ã®æåãšçµã¿åãããŠäœ¿ãåæçšæåãååšãã(çµåæå) ç¹åŸŽ3. åãæåã ãåäœãç°ãªãå Žåäžã€ã®åäœã«çµ±åãããŠãã(çµ±åæå) ç¹åŸŽ4. ä»ã®ç¬Šå·åæ¹åŒãšã®äºææ§ã®ãã远å ããæåãååšãã(äºææå) ç¹åŸŽ1. 4次å
ã§äžã€ã®æåã衚ã unicode ã§ã¯ç¬Šå·äœçœ®ã¯4次å
ã§è¡šããŠããŸãã æ¬äŒŒçã«è¡šçŸãããšäžèšã®ããã«ãªããŸãã characterSet[group(矀)][plane(é¢)][row(åº)][cell(ç¹)] = 'ã' unicode ã§ã¯åã
ã®æ¬¡å
ããããã1ãã€ã(0x00~0xFF)ã®ç¯å²ã§è¡šçŸããŠããã1æåã4ãã€ãã®ç¬Šå·äœçœ®ã§è¡šçŸããŠããŸãã ããªãã®ç¬Šå·ç©ºéãçšæããŠããããã§ãããå
šäžçã§çŸåšå©çšããŠããæåã®ã»ãšãã©ã¯group:0x00,plain:0x00ã®ç¯å²ã«åãŸã£ãŠããŸãã ãã®ç¯å²ã ãç¹å¥ã« BMP (Basic Multiligual plane: åºæ¬å€èšèªé¢ )ãšããããã«åŒã°ããŠããŸãã unicode ãšã¹ ã±ãŒã衚èšã§è¡šãããŠããæåã§ã u\3042 ããšããããã«2ãã€ã衚èšãããŠãããã®ã¯ã BMP ã«å±ããŠããŸãã ã u\3042 ã=ãgroup0x00/plane0x00ã®é¢ã«ãããrow0x30ã®cell0x42ã®ç¬Šå·äœçœ®ã ã¡ãªã¿ã« BMP ã«ã®ãããå¥ã®planeã«ããæåãšããŠæ¥æ¬ã§äœ¿ãããŠããäžéšã®æŒ¢åããããŸãã ãã®planeã®æåãå®è£
ããŠããªãã·ã¹ãã ã ãšæåããã ãã衚瀺ãããªãäºè±¡ãçºçããŸãã æåãããã¯ãã®å Žæãç©ºçœ â¡ã®äžã«Ãã衚瀺ãããŠããæåã«ãªã ç¹åŸŽ2. ä»ã®æåãšçµã¿åãããŠäœ¿ãåæçšæåãååšãã(çµåæå) unicode ã§ã¯è€æ°ã®åæçšæå( çµåæå )ãåæããŠ1æåã衚ãããšããã®ãå®çŸå¯èœã«ããŠããŸãã ããšãã°æ¥æ¬èªã®ãã±ããªã©ã®åæ¿é³ã¯åæçšã®åæ¿ç¹ã unicode ã«ååšããã®ã§ããã¯ã+ã åæ¿ç¹ãã§è¡šçŸã§ããŸãã(â»ä»ã®ç¬Šå·å æåéå ãšã®å€ææ§ãèæ
®ããŠåæçšã§ãªãåæ¿ç¹ããããããã±ãã ãã§ç¬Šå·äœçœ®ããããŸãããããããã§ãã...) ã§ãã®ã§ãããšãã°ãããã«åæ¿ç¹ãã€ãããªã©ãæåãšããŠèªèãããŠããªãæåãåæããŠ1æåã®ããããšã unicode ãçšããã°å¯èœã«ãªããŸãã ç¹åŸŽ3. åãæåã ãåäœãç°ãªãå Žåäžã€ã®åäœã«çµ±åãããŠãã(çµ±åæå) 挢åãçšããæ°æããšããŠæ¥æ¬ã®ä»ã«äžåœã»éåœã»å°æ¹Ÿããªã©ããããŸãããåãæŒ¢åã®åœ¢ã§å°ãæžãæ¹ãéããã®ãæ°å€ãååšããŸãã(ex. æµ·|ï©
) ãã®ãããªæŒ¢å㯠unicode ã§ã¯äžã€ã®åäœã«çµ±åããŠããŸã(çµ±åæå)ã ç¹åŸŽ4. ä»ã®ç¬Šå·åæ¹åŒãšã®äºææ§ã®ãã远å ããæåãååšãã(äºææå) ç¹åŸŽ3ã§åäœãçµ±åããŠããããšãã£ããã®ã®ãåä»ãªåé¡ããããŸãã å¥ã®ç¬Šå·åæ¹åŒã§ã¯åºå¥ããŠããæåãã unicode ã«å€æãããšããã®åäœã®éããåžåãããããšã®ç¬Šå·åæ¹åŒã§ã®åäœãåçŸããããšãã§ããªãäºè±¡ãããããŸãã ãã®ãããªäºè±¡ãè§£æ¶ããããã«ä»ã®ç¬Šå·åæ¹åŒãšã®äºææ§ãç®çãšããŠæåã远å ãããããšããããŸãã远å ãããããã¯å¥é äºææå ãšåŒã°ããŸãã 3. unicode ã¯é²åãç¶ããŠãã ~ã¿ã€ãã«åå~ ãã£ãã unicode ã«ã€ããŠç¹åŸŽãè¿°ã¹ãã®ã§ããããã¯ãããã¹ãŠã®æåãç¶²çŸ
ãããã®ã¯éåžžã«é£ãããæ¢åã®ç¬Šå·å æåéå ãšã®äºææ§ã®å¯Ÿå¿ã¯äžå¯æ¬ ãšãªã£ãŠããããã§ããã§ãã®ã§ã unicode ãé²åããŠãã£ãŠããŸããæè¿ã¯æåã ãã§ãªããçµµæåã®è¿œå ãçãã«è¡ãããŠããŸããããã«å¯ŸããŠã·ã¹ãã ã䜿ã£ãŠãã unicode ã®ããŒãžã§ã³ãç°ãªããšæåã衚瀺ãããªãçŸè±¡ãããããŸãã ã¿ã€ãã«ã«æžãã顿åã§ããããŸãããç¹åŸŽã§ã話ãã çµåæå ãé§äœ¿ããŠäœãããŠããŸãã ç§ã®ç°å¢ã§ããšã chrome ã§ã¯äžéšæåã衚瀺ã§ããŸããã§ãããã safari ã§ã¯ãã¡ããšæåã衚瀺ãããŸããã chrome safari 4. çµããã« unicode ã®ãã£ããããç¹åŸŽãè¿°ã¹ãŸããã äœæ°ãªãåèªãšããŠèããŠãã unicode ãã©ããªãã®ãªã®ããæŽããããã«ãªããŸããã幞ãã§ãã 5. åèæç® ã æåã³ãŒã æè¡å
¥éãã http://amzn.asia/0fEbLWi ä»åã®èšäºã¯ãã¡ãããšãŠãåèã«ãããŠããã ããŸããã ãç¬¬äžæ°ŽæºæŒ¢åãã ãµãã²ãŒã ãã¢ããªã©ã®åèªãã©ã®ã«ããŽãªã®ã©ãã«äœçœ®ãã話ãªã®ãããªã©ããããããšæããŸãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
id:radiocat ã§ãã ã¹ã¯ã©ã ãã¹ã¿ãŒããã£ãŠããŸãã å
æã瀟å
ã®Techã€ãã³ãã®å
šç€ŸMeetUpã§çºè¡šããŠããŸãããä»åã¯ãã®å
容ã«ã€ããŠããšããçã«ãŸãšããŠã¿ãŸããã çµãããªã ã¹ã¯ã©ã ç§éã®ããŒã ã§ã¯ã以åãã®ããã°ã§ã玹ä»ãããŠãã ã¹ã¯ã©ã ã ã¬ãŒãã³ ã°ãåè¬ã㊠ã¹ã¯ã©ã éçºãå®è·µãã¯ãããŸããã tech-blog.rakus.co.jp ãã®çµéšãèžãŸããŠåŸãç¥èŠãæ°ã¥ããå
ã«çºè¡šããã®ããã®ã¹ã©ã€ãã§ãã speakerdeck.com äºåã«ã ã¬ãŒãã³ ã°ãç©ãã§ãããã®ã®ãå®éã« ã¹ã¯ã©ã ãå®è·µããŠã¿ããšããŸããããªãäºãããããåºãŠã㊠ã¹ã¯ã©ã ã€ãã³ããæã£ãéãã«çµãããªãäºæ
ã«é¥ããŸããããããªç¶æ³ãæ¹åããããã« ã¹ã¯ã©ã ã³ãŒãã®å矜ããã«ã¢ã ãã€ã¹ ãé ãããã ã¹ã¯ã©ã ã¬ã€ããæ§ã
ãªæžç±ã»è³æãåèã«ããŠã ã¹ã¯ã©ã ã€ãã³ãããã¡ããšçµããããããã«åãçµãã ã®ã次ã®ãããªå
容ã§ãã ã¿ã¹ã¯ã®çްåå ã¹ã¯ã©ã ã¬ã€ãã«ã¯ äœæ¥ã®åäœã¯1æ¥ä»¥äž ãšæžãããŠããŸããã¿ã¹ã¯ã®ç²åºŠã倧ãããšçæäžã®ç¶æ
ãé·ããªããã©ã®çšåºŠé²ãã§ããã®ããã©ããããã§çµããã®ãã®èŠéãããããã¥ãããªããŸããããããèŠç©ãã£ãæç¹ã§1æ¥ä»¥äžããããšããããšã¯çްããäœæ¥å
容ãå
åã€ã¡ãŒãžã§ããŠããªãäºãå€ãããäºå®éãé²ãŸãªãããšãå€ããªããŸããç§éã®ããŒã ã§ã¯èŠç©ããã倧ããå Žåã¯åæ¥ä»¥äžã«ãªããŸã§ã¿ã¹ã¯ãåè§£ããã«ãŒã«ã«ããŸããã ãªãã¡ã€ã³ã¡ã³ãã®åŸ¹åº éçºããŒã ãšãããã¯ããªãŒããŒããã£ããäŒè©±ããŠãããã¯ã ããã¯ãã° ã®å
容ãçžäºã«çè§£ããŠãããªããšãäœãã©ããã£ãŠå®çŸããããæç¢ºã«ãªãã忥以äžã®ã¿ã¹ã¯ã«åè§£ããããšãé£ãããªããŸãã ã¹ã¯ã©ã ã¬ã€ãã« ããªã ã¡ã€ã³ã¡ã³ã㯠ãããã¯ããªãŒããŒãšéçºããŒã ãååããŠè¡ãç¶ç¶çãªããã»ã¹ ã§ãããšå®çŸ©ãããŠããŸããç§éã®ããŒã ã§ã¯ ãªãã¡ã€ã³ã¡ã³ãäŒè°ãæ¯é±1å宿éå¬ ããã«ãŒã«ã«ããŸããã ãã€ãªãŒ ã¹ã¯ã©ã ã®æ¹å ç§éã®ããŒã ã§ã¯ ã¹ã¯ã©ã ã§éçºãå§ããåããæäŒã§å
šå¡ã®é²æã確èªããŠããŸããããæ¹ã㊠ã¹ã¯ã©ã ã§å®çŸ©ãããŠãããã€ãªãŒ ã¹ã¯ã©ã ã®ç®çã¯äœããèããŠæäŒã®ããæ¹ãèŠçŽããŸããã ã¹ã¯ã©ã ã¬ã€ãã«ã¯ èªå·±çµç¹åããŒã ãšããŠã¹ããªã³ããŽãŒã«ãéæããã¹ããªã³ãçµäºãŸã§ã«æåŸ
ãããã€ã³ã¯ãªã¡ã³ããäœæã§ããããæ¯æ¥ææ¡ ããããã®ã€ãã³ããšå®çŸ©ãããŠããŸãããã®ããããŒã ã®ãªãŒããŒãé²è¡ããŠé²æã確èªããã¹ã¿ã€ã«ããéçºããŒã ã亀代å¶ã§é²è¡ããã«ãŒã«ã«å€æŽããŸããã ã«ã³ãã³ãæ€æ»ã®æ ãæã« ã«ã³ãã³ã ã¹ã¯ã©ã ã§éçºãå§ããåããå°å
¥ããŠããŸããããããŒã ã§æèŠãåºãåã£ãŠå°ããã€ãã€ããŒãã§ã³ãžãç¹°ãè¿ããŠããŸãããã€ãªãŒ ã¹ã¯ã©ã ãæ¯æã«ã³ãã³ã®åã§è¡ããããã«ã³ãã³ããã€ãªãŒ ã¹ã¯ã©ã ã®ç®çã«æ²¿ã£ãŠããããšãéèŠã§ããããŒã ã®ç¶æ
ãæ€æ»ãä»åŸã®ç¶æ
ãäºæž¬ã§ããå Žã«ããããã«ããè¯ãäœ¿ãæ¹ãæš¡çŽ¢ããŠããŸãããçŸåšãç§éã®ããŒã ãå®è·µããŠããã¹ã¿ã€ã«ã¯å·ŠããToDoãå®è¡äžãã¬ãã¥ãŒäžãå®äºã®é ã«ã¬ãŒã³ããããŠãåªå
床ã®é«ãã¿ã¹ã¯ãäžããé ã«äžŠã¹ãŠããŸããå³äžã«ããã»ã©ããŒã ãšããŠæãåªå
床ã®é«ãã¿ã¹ã¯ã§ãããå
šå¡ã§ååããŠæ©ãçµããããããã«ããŠããŸãã ãããªããã§ããŒã ã®æ¹åæ§ãåç¢ºèª ã¯ããããããŒã ã®é²ãã¹ãæ¹åæ§ããã£ã¡ãå®ãŸã£ãŠããŠå
šå¡ã®èªèãäžèŽããŠãããããªããŒã ã¯çšã§ããç§éã®ããŒã ãã¯ããã¯ææ¢ãç¶æ
ã§ã©ããã§äžå®ãæ±ããªããã¹ããªã³ããé²ããŠããããã3åç®ã®ã¹ããªã³ããçµãã£ãæã«æ¹ããŠããŒã ã®é²ãã¹ãæ¹åæ§ãè°è«ããŠç®æãã¹ãèšèšã®æ¹éãåè³ªç®æšãå確èªããŸããã ã€ã³ããã£ã¡ã³ãã®é€å» ã¹ã¯ã©ã ã¬ã€ãã«ã¯ ã¹ã¯ã©ã ãã¹ã¿ãŒã¯ ãµãŒãã³ããªãŒã㌠ã§ãã ã ã¡ã³ããŒãææãäžããããã«æ¯æŽãå¥ä»ããããªãŒã㌠ã§ãããšæžãããŠããŸãã ã¹ã¯ã©ã ã«ãããããœãããŠã§ã¢éçºã«ãããŠéçºããŒã ã«ã¯æ§ã
ãªåŠšå®³èŠçŽ ãåŸ
ã¡åããŠããŸããè¿å¹Žã®ãœãããŠã§ã¢éçºã§ã¯ãä»ãŸã§äœ¿ã£ãããšã®ãªãæ°ããæè¡ãå€éšã®ãµãŒãã¹ã䜿ãããšãåœããåãšãªã£ãŠããŸãã ã¹ã¯ã©ã ãã¹ã¿ãŒã¯ãã®ãããªèŠçŽ ã劚害ãªã¹ããšããŠæŽãåºããããããå°ãã ãå
åãããããåé¡ãå°ãããã¡ã«æãæã€ããšã§ããŒã ãææãäžããããããã«æ¯æŽã«åŸ¹ããŸããã 2ã€ã®æ°ã¥ã ãããã®åãçµã¿ãå®è·µããããšã§åŸãæ°ã¥ãã¯å€§ãã2ã€ã§ãã ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ã¯åŸæ¥åã®éçºã§ã圹ã«ç«ã€ ã¹ã¯ã©ã éçºã§åãçµãã ããšã¯åŸæ¥åã®éçºã«ã掻ãããããšãå€ããšæ°ã¥ããŸãããå®éã«ãã®ãããªææ³ã¯ãåŸæ¥åã® éçºããã»ã¹ ã®äžã« ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ãåãå
¥ãããšããããšã§ãã€ããªãã ã¢ãžã£ã€ã« ãšåŒã°ããŠå®è·µãããŠããããã§ããã€ãæè¿ãæ¥çµSYSTEMSã®ææ°å·ã§ããã€ããªãã ã¢ãžã£ã€ã« ãããŒãã«ããé£èŒãå§ãŸã£ãŠããŸãã tech.nikkeibp.co.jp æ¹åã®æ©äŒã¯ ã¹ã¯ã©ã éçºã®ã»ããè±å¯ ã¹ã¯ã©ã éçºã§ã¯æ±ºãŸã£ãã¿ã€ã ããã¯ã¹ã§ã€ãã¬ãŒãã£ãã«éçºãé²ããããšã«ãã£ãŠ ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ãåãå
¥ããããã®æ€æ»ã»é©å¿ã®æ©äŒããããã蚪ããŸãã ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ãå®è·µããŠæ¹åããæ©äŒã¯ ã¹ã¯ã©ã ã®ã»ããè±å¯ã«ãããšæããŸããã çµãããªãåŠã³ãšå®è·µ ã¹ã¯ã©ã éçºã§ããã以å€ã® éçºããã»ã¹ ã§ãã ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ã¯æŽ»çšã§ããŸãããããŠã ã¹ã¯ã©ã ã§éçºããæ©äŒã蚪ããæã«ã¯ ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ã掻çšããæ©äŒã¯å¢å ããŸããã€ãŸãããããã«ããŠã ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ãåãå
¥ããŠåŠã³ãšå®è·µãç¹°ãè¿ããŠããããšãããŒã ãæé·ããŠããããã®éçã®ïŒã€ã ãš ã¹ã¯ã©ã éçºãéããŠåŠã³ãŸãããã¹ã©ã€ãã§ã¯ãã®ãã㪠ã¢ãžã£ã€ã« éçºã®ã ã©ã¯ ãã£ã¹ãåãå
¥ããããã®æ
å ±æºã幟ã€ã玹ä»ããŠããŸãã ã¹ã¯ã©ã ã¬ã€ãã«ãããš ã¹ã¯ã©ã éçºã¯ çè§£ã¯å®¹æ ã§ ç¿åŸã¯å°é£ ãšãããŸããç§éããŸã ãŸã çµããã¯èŠããŠããŸããããç¿åŸã«åããŠåŠã³ãšå®è·µãç¹°ãè¿ãããšã§ããŒã ãããã«æé·ã§ãããšæã£ãŠããŸãã
ã¯ããã« 2幎ç®ã®ãšã³ãžãã¢ã«ãªããŸãããFM_Harmonyã§ãã Rakus Developers Blogã§ã¯4åç®ã®æçš¿ã§ãã âååã®èšäºã¯ãã¡ã tech-blog.rakus.co.jp ããŠãåŒç€Ÿã§ã¯ãã¢ããã·ã¥ãšããã€ãã³ããè¡ã£ãŠããŸããïŒãã¢ããã·ã¥ã»ã»ã»?ãšããæ¹ã¯ ã³ãã© ïŒ ä»åã¯ãã®éã«ç§ãçºè¡šããããšã«ã€ããŠãè£è¶³ãèžãŸãã€ã€ãŸãšããããšæããŸãã ããŒã㯠tigã§commitããããã«ïŒ ã§ãã ã¯ããã« tigãšã¯ïŒ æºå tigã®ã€ã³ã¹ããŒã«ïŒwindowsã®å ŽåïŒ tigã®ã€ã³ã¹ããŒã«ïŒmacOSã®å ŽåïŒ commitããããã«ããçç± äœ¿ã£ãŠã¿ã 宿Œã®åæºå æ©èœã远å ããŠããŸãšããŠcommitãã git rebase -i ã§ãcommitã®åå²ãå§ãã tigã䜿ã£ãŠcommitãåå²ãã - ãã®1 tigã䜿ã£ãŠcommitãåå²ãã - ãã®2 tigã䜿ã£ãŠcommitãåå²ãã - ãã®3 ãŸãšã åèè³æ tigãšã¯ïŒ Tig is an ncurses-based text-mode interface for git. --- https://github.com/jonas/tig ãã tigãšã¯ã¿ãŒããã«äžã§åäœããgit ãªããžã㪠ã®ãã©ãŠã¶ã»ã»ã»ãšèšããŸãã logã®é²èЧããcommitæäœãªã©ãç°¡åã«è¡ãããšãã§ãã䟿å©ãªããŒã«ã§ãã åäœãé«éãªã®ã§ãæ
£ããŠããŸãã°ã¹ãã¬ã¹ãªãcommitæäœãè¡ãããšãã§ããŸãã æºå ä»å㯠windows ã§å®æŒãè¡ããŸããã mac ã§ã®ã€ã³ã¹ããŒã«æ¹æ³ãèšèŒããŠãããŸãã tigã®ã€ã³ã¹ããŒã«ïŒ windows ã®å ŽåïŒ Git for Windows ã® v2.14.2 ãããtigãä»å±ããããã«ãªããŸããã ãªã®ã§ã windows ã§ã¯tigãç¹å¥ã«ã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸããã tigã®ã€ã³ã¹ããŒã«ïŒ macOS ã®å ŽåïŒ Homebrew ã䜿ãããšã§ç°¡åã«ã€ã³ã¹ããŒã«ããããšãã§ããŸã *1 ã tigã macOS ã«ã€ã³ã¹ããŒã«ããããã«ã¯ãã¿ãŒããã«ãã以äžã®ã³ãã³ããå®è¡ããŸãã $ brew install tig commitããããã«ããçç± å®æŒã®åã«ãcommitãåå²ããçç±ã説æããŸãã éçºãè¡ã£ãŠãããšãã©ãããŠã commit ã倧ãããªã£ãããé©åã« commit ãåããããŠããªããšããç¶æ³ã«åºããããšæããŸãã ãã®commitããã®ãŸãŸã«ãããšäœãè¯ããªãã®ããšãããšã ã¬ãã¥ã¯ãŒãpushãããcommitäžã€äžã€ã«ã€ããŠèŠæš¡ãææ¡ãã¥ããã åŸãã倿Žã«åé¡ãããããšãçºèŠããéã«ãåé¡ãçºçãã commitã远ãã¥ãããªã. ãšãã£ãäºãæããããŸãã ãªã®ã§ãäžèšã®åé¡ãçºçããªãããã« commitãé©åãªå€§ããã«åå²ãããšããã§ãã ãã®éã«ãtigãå©çšãããšé«éãã€ç°¡åã«commitã®åå²ãè¡ãããšãã§ããŸãã 䜿ã£ãŠã¿ã 宿Œã®åæºå å®éã«tigã䜿ã£ãŠãcommitã®åå²ãè¡ã£ãŠã¿ãŸãããã çŸåšãsampleReposãšãã ãªããžã㪠ã以äžã®ãããªæ§æã«ãªã£ãŠãããšããŸãã SampleRepos/ â â NewFile.java NewFile. java ã®å
容ã¯ä»¥äžã®éãã§ãã public class NewFile { public static void main(String args[]){ System.out.println( "Hello World!" ); } } ãã®ç¶æ
ã§äžåºŠ commit ãããšããŸãã $ git add NewFile.java $ git commit -m "first commit" æ©èœã远å ããŠããŸãšããŠcommitãã ããŠããã®ç¶æ
ããNewFile. java ã« methodA ãš methodB ãšããã¡ãœããã远å ããããšã«ãªããŸããã public class NewFile { public static void main(String args[]){ System.out.println( "Hello World!" ); methodA(); methodB(); } public static void methodA(){ System.out.println( "methodA!" ); } public static void methodB(){ System.out.println( "methodB!" ); } } ãšããããä»åã®å€æŽããŸãšããŠcommitããŸãã $ git add NewFile.java $ git commit -m "add methodA and methodB to NewFile" git rebase -i ã§ãcommitã®åå²ãå§ãã ã§ã¯ãæ©écommitãåå²ããŠã¿ãŸãããã ä»åã¯ãå
çšã® add methodA and methodB to NewFile ãšããcommitã add methodA to NewFile add methodB to NewFIle ãšããäºã€ã®commitã«ããŸãã ãŸãã以äžã®gitã³ãã³ããå®è¡ããŸãã $ git rebase -i HEAD~1 // HEAD~ã®åŸã®æ°åã¯é©å®å€æŽãã. ãããšã以äžã®ãããªæç« ã ããã¹ããšãã£ã¿ ã§è¡šç€ºãããã¯ãã§ã *2 ã pick 1599a7b add methodA and methodB to NewFile # Rebase 9276511..1599a7b onto 9276511 (1 command) // 以äžçç¥. 次ã«ã add methodA and methodB to NewFile ã®commitãåå²ãããã®ã§ããã®æšªã«ãã pick ã edit ãžå€æŽããŠãšãã£ã¿ãä¿åããŠéããŸãã ãã®åŸã以äžã®ã³ãã³ããå®è¡ããŸãã $ git reset HEAD~1 ããããŠåé¡ã®commitã«ãã倿Žãunstagedãªç¶æ
ã«ãªããŸããã ïŒ = 倿Žãaddãããåã®ç¶æ
ïŒ tigã䜿ã£ãŠcommitãåå²ãã - ãã®1 ããŠããã®ç¶æ
ã§ä»¥äžã®ã³ãã³ããå®è¡ããŸãã $ tig ãããšã次ã®ãããªç»é¢ã衚瀺ãããã¯ãã§ãã yyyy-mm-dd Unknown o Unstaged changes yyyy-mm-dd Committer I [HEAD] first commit ãããtigã® Main View ãšåŒã°ããç»é¢ã§ãã ãã®ç¶æ
ã§ã Shift + S ããŒãæŒããšã次ã®ãããªç»é¢ãžé·ç§»ããŸãã Interactive rebase master Changes to be committed: (no files) Changes not staged for commit: M NewFile.java Untracked files: (no files) ãããtigã® Status View ãšåŒã°ããç»é¢ã§ã *3 ã ãã®ç¶æ
ã§ã Changes not staged for commit: 以äžã® M NewFile.java ã«ã«ãŒãœã«ãåãã㊠Enter ããŒãæŒããšã次ã®ãããªç»é¢ãç»é¢äžïŒãããã¯ç»é¢å³ïŒã«åå²ãããŠè¡šç€ºãããŸãã NewFile.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/NewFile.java b/NewFile.java index 9fde6b2..01487f8 100644 --- a/NewFile.java +++ b/NewFile.java @@ -1,5 +1,15 @@ public class NewFile { public static void main(String args[]){ System.out.println("Hello World!"); + methodA(); + methodB(); + } + + public static void methodA(){ + System.out.println("methodA!"); + } + + public static void methodB(){ + System.out.println("methodB!"); } } ãããã Diff View ãšåŒã°ããç»é¢ã§ãã é·ããªããŸãããããã®ç»é¢äžã§staged / unstagedããéšåãæå®ã§ããŸãã tigã䜿ã£ãŠcommitãåå²ãã - ãã®2 ããã§ã¯ã main ã¡ãœããå
ã® methodA(); ãšã methodA ã¡ãœããã®å®çŸ©ã§ãã public static void methodA(){ System.out.println( "methodA!" ); } ãšãã倿Žãå«ãŸããcommitãäœæããŸãããã ä»åã¯1è¡ãã€stagedã«ããŠãããŸãã Diff Viewã§ãcommitã«å«ãã倿Žç®æã«ã«ãŒãœã«ãåãã㊠1 ããŒãæŒãããšã§1è¡ã¥ã€ staged ã«ããããšãã§ããŸãã ãã ãã 倿Žå
容ã衚瀺ãããç»é¢ã§ã®ã«ãŒãœã«ç§»åã«ã¯ j , k ããŒã䜿ãããšã«æ³šæããŸãã å®äºããããStatus Viewã Interactive rebase master Changes to be committed: M NewFile.java Changes not staged for commit: M NewFile.java Untracked files: (no files) ãšãªã£ãŠããã¯ãã§ãã ã€ãŸããåããã¡ã€ã«ã«å¯Ÿãã倿Žãcommitã«å«ããã®ãšå«ãŸãªããã®ã«åããããšãã§ãã ãšããããšã§ãã 念ã®ãããChanges to be committedã®äžã«ããNewFile. java ã®Diff Viewã以äžã®ããã«ãªã£ãŠããããšã確èªããŠãã ããã NewFile.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NewFile.java b/NewFile.java index 9fde6b2..becff04 100644 --- a/NewFile.java +++ b/NewFile.java @@ -1,5 +1,10 @@ public class NewFile { public static void main(String args[]){ System.out.println("Hello World!"); + methodA(); + } + + public static void methodA(){ + System.out.println("methodA!"); } } q ããŒãæŒããŠDiff ViewãéããŠããStatus Viewäžã§ Shift + C ããŒãæŒããšã git commit ã³ãã³ãå
¥åæãšåãç»é¢ãçŸããŸãã ããã§ã commit messageã add methodA to NewFile.java. ãšããŠcommitãè¡ããŸãã ããããŠã methodA ã®è¿œå ã«é¢ãã倿Žã®ã¿ãå«ãã commitã宿ããŸããã tigã䜿ã£ãŠcommitãåå²ãã - ãã®3 ãã®åŸãç»é¢ã«ã¯ Enter ããŒãæŒãããã«ã¡ãã»ãŒãžãåºãŠããã¯ããªã®ã§ãããã«åŸããŸãã ãããšãMain Viewã«ç»é¢ãæ»ãã¯ãã§ãã ããã§å
çšã® add methodA to NewFile. ãšããcommitã衚瀺ãããŠããªãå Žåã¯ã Shift + R ããŒã§Main ViewãæŽæ°ããŸãã ã§ã¯ãåãããã« methodB ã®è¿œå ã«é¢ãã倿Žã®ã¿ãå«ãã commitãäœæããŸããããStatus Viewãããunstaged㪠NewFile.java ã«é¢ããDiff ViewãéããŸãã NewFile.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NewFile.java b/NewFile.java index becff04..01487f8 100644 --- a/NewFile.java +++ b/NewFile.java @@ -2,9 +2,14 @@ public class NewFile { public static void main(String args[]){ System.out.println("Hello World!"); methodA(); + methodB(); } public static void methodA(){ System.out.println("methodA!"); } + + public static void methodB(){ + System.out.println("methodB!"); + } } ãŸã1è¡ãã€stagedã«ããŠãè¯ãã®ã§ãããä»åºŠã¯å
šãŠã®å€æŽãcommitã«å«ã¿ãŸãã ãªã®ã§ã U ããŒ ãæŒããŠãã¡ã€ã«ã®å€æŽå
šãŠãäžæ¬ã§stagedã«ããŸãã Status Viewã確èªãããšã以äžã®ããã«ãªãã¯ãã§ãã Changes to be committed: M NewFile.java Changes not staged for commit: (no files) Untracked files: (no files) ãããŠãDiff Viewãéããç¶æ
ã§ Shift + C ããŒãæŒã㊠git commit ãè¡ããŸãã commit message㯠add methodB to NewFile.java. ãšããŸãã commitãå®äºããŠMain Viewãžæ»ã£ãåŸã q ããŒ ãæŒããŠtigãçµäºããŸãã ãã®åŸã以äžã®ã³ãã³ããå®è¡ããŠã add methodA and methodB to NewFile ãšããcommitãžã®ç·šéãçµäºããŸãã $ git rebase --continue ãã®åŸãåã³ tig ã³ãã³ããå®è¡ãããšã確ãã«commitãåå²ãããããšãåãããŸãã yyyy-mm-dd hh:ss Committer o [master] add methodB to NewFile.java yyyy-mm-dd hh:ss Committer o add MethodA to NewFile. yyyy-mm-dd hh:ss Committer I first commit ãŸãšã ãããã§ããã§ããããã ã¡ãã£ãšäŒããã¥ããéšåããã£ããšæããŸãããå®éã« tig ã䜿ã£ãŠã¿ããšãã®äŸ¿å©ããåãããšæããŸãã commitãèŠãããåå²ããã®ã¯ãã¬ãã¥ã¢ãŒã®è² æ
ãæžããã ãã§ãªããå°æ¥ã®èªåã倿Žå
容ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã ãªã®ã§ããã®èšäºãã芧ããã ããæ¹ããtig ã䜿ãããšã§ å°ãã§ã楜㫠commit ããããã«ã§ãã㰠幞ãã§ãã æåŸã«ã以äžã®èšèãåŒçšããŠãã®èšäºã®ãŸãšããšããŸãã ã³ãŒãã¯ä»ã®äººãæçæéã§çè§£ã§ããããã«æžããªããã°ãªããªã --- ãªãŒããã«ã³ãŒã - ããè¯ãã³ãŒããæžãããã®ã·ã³ãã«ã§å®è·µçãªãã¯ãã㯠P.3 ãã ïŒæ¬æ¥ã¯ã³ãŒãã®å¯èªæ§ã«é¢ããèšèã§ãããcommitããããã«ãããšããããšã¯äžèšã®èãæ¹ãšåããã®ãæ ¹åºã«ãããšæããŸããïŒ åèè³æ VS Code ã®çµ±åã¿ãŒããã«ã§ Tig ãæšæºè£
åããã Git for Windows ã䜿ã gitã¯ã©ã€ã¢ã³ããtigãã䜿ãããªãããã®æäœéèŠããã¹ã6ã€ã®ã³ãã³ã çºè¡šã«å©çšããã¹ã©ã€ãïŒäžéšç·šéæžïŒ 0330_beerbash_Fm_Harmony from æ ªåŒäŒç€Ÿã©ã¯ã¹ *1 : ãœãŒã¹ã³ãŒã ããã«ãããæ¹æ³ããããŸãã 詳ãã㯠ã³ãã© *2 : åœç¶ãcommit idçã¯äººã«ãã£ãŠç°ãªããŸã *3 : ãã®ç¶æ
ã§ãããã¡ã€ã«ããšã«staged / unstagedãåãæ¿ããããšã¯å¯èœã§ãã
3æåæ¬ã«éå¬ãããJaSST'18ã®åå ã¬ããŒãã§ãã [èªäºæé 8å] JaSST Tokyo ãšã¯ åœå
æå€§çŽã® ãœãããŠã§ã¢ãã¹ã ã·ã³ããžãŠã ã§ãã JaSST'18 Tokyo ãœãããŠã§ã¢ãã¹ãã·ã³ããžãŠã 2018 æ±äº¬ æ¥æ : 2018/03/07æ°Žïœ08æš å Žæ : æ±äº¬éœ å代ç°åº æ¥æ¬å€§åŠ çå·¥åŠéš é§¿æ²³ å°æ ¡èïŒå·é€š åå è
: 1600人 åå è²» : 2æ¥åžïŒæ©å²ïŒ 8,400å ãã¥ãŒããªã¢ã« åè¬åž 10,800åã远å 賌å
¥ããã°ãã¯ãŒã¯ã·ã§ãã圢åŒã® ãã¥ãŒããªã¢ã« å
šãŠã«åå å¯èœ JaSST Tokyo ã®æšå¹Žãšä»å¹Žã®ãã¹ãã¹ããŒã«âè³ã®åŸåïŒ 2017幎 ã 2018幎 ïŒãããããã»ã¹æ¹åã«æ³šç®ãéãŸã£ãŠããæããããŸãããä»åã® JaSST'18 Tokyoã®ç®çã¯ãã¯ããªããšãã£ãŠãã Google ãžã§ã³ã»ããã³æ°ã® Flaky Test ã ãšæããŸãã 以äžã§ã¯ãããã³æ°ã«ããïŒã€ã®ã»ãã·ã§ã³ åºèª¿è¬æŒ_A1ãAdvances in Continuous Integration Testing at Googleã åºèª¿è¬æŒè
ãã¥ãŒããªã¢ã« G5ãHow to identify test flakiness in your test result data ãã¹ãçµæãããã¹ãã®äžå®å®æ§(test flakiness) ãèªã¿è§£ãã ãåãäžããŠãä»ååå ã§ããªãã£ãæ¹ã§ãã Google 瀟ã®å
é²çãªåãçµã¿ã«ã€ããŠæŠèŠãææ¡ã§ããããããã€ã³ããçµã£ãŠãäŒãããããšæããŸããïŒããã°ã«æ²èŒããããšã«ã€ããŠã¯ãããã³æ°ã®èš±å¯ãåŸãŠãããŸããããããšãããããŸãïŒïŒ åºèª¿è¬æŒ ã»ãã·ã§ã³ A1ãAdvances in Continuous Integration Testing at Google ããåºèª¿è¬æŒè
ãã¥ãŒããªã¢ã« G5ãHow to identify test flakiness in your test result data ãã¹ãçµæãããã¹ãã®äžå®å®æ§(test flakiness) ãèªã¿è§£ãã è¬æŒè³æ ãå
¬éãããŠããŸããã èªåœã®äºåç¥èã質çã§ããå Žãªã©ããªããšãªããªãçè§£ãã«ããç®æããããšæããŸãã ãŸããè¶£æšïŒåŒçšïŒãšããŒã¯ãŒããç°¡åã«æŽçããåŸã«ãã»ãã·ã§ã³ã®èŠç¹ããäŒãããŸãã è¶£æš ãã广çãªãã¹ãã®ã¹ã±ãžã¥ãŒãªã³ã°ãšã¯ ã³ã¹ãã®åæžæ¹æ³ äžå®å®ãªèªåãã¹ããžã®å¯ŸåŠïŒFlaky TestïŒ ããŒã¯ãŒã SETI (Software Engineer, Tools and Infrastructure) ãã¹ãã€ã³ãã©ãéçºããåœ¹å² 8ïœ10人ã®ããŒã ã«1ïœ2åã® SETI ã ã¢ãµã€ ã³ããã RTS (Regression Test Selection) å®è¡ãã ååž°ãã¹ã ã±ãŒã¹æ°ãåæžããã¢ãããŒã Transition ãã¹ãçµæãPASSâFAIL ãŸã㯠FAILâPASSãžãšç¶æ
é·ç§»ããããš Edge ãã¹ãçµæãPASSâFAIL ãŸã㯠FAILâPASSãžãšç¶æ
é·ç§»ãããã§ã³ãžãªã¹ãã®æç Greenish ãã¹ãæåïŒã°ãªãŒã³ïŒã®ãããªç¶æ
確信ã§ã¯ãªã確ç Flaky Test äžå®å®ãªãã¹ãã®ããš ãã¹ãçµæãé æ±ºå®è« ç åãã³ãŒããªããžã§ã³ãåãå
¥åãšèšå®ãã«ãããŠãã¹ããæåããã倱æããããã Google ã®èªåãã¹ãïŒæŠèŠ³ïŒ 420äžã®ç¬ç«ãããã¹ã ãã®16%ã¯äœãããã®Flakyããæã€ 1æ¥ããã1å5000äžã®ãã¹ãå®è¡æ° å¹³åããŠåãã¹ããæ¯æ¥ã«35åå®è¡ããã 1äž3000以äžã®ããŒã ãã¹ã宿œã®99%ã¯æåãã ãã¹ãçµæãPASSâFAILã«é·ç§»ãããã¹ãã®ãã¡ã84%ã¯Flaky ãã¹ã倱æã®16%ã ããæ¬ é¥ãæå³ããŠãã ãã¹ãã® 1.23% ã ãããœãããŠã§ã¢ã®æ¬ é¥ãèŠã€ããŠãã 倿Žé »åºŠãå€ããã¡ã€ã«ã¯æ¬ é¥ãåã蟌ãŸãããã éçºè
ã3人以äžä¿®æ£ãããœãŒã¹ã¯æ¬ é¥ãåã蟌ãŸãããã 1人ãã2人ããã 3人ãã2人ããã èšèªã«ãã£ãŠæ¬ é¥ã®åã蟌ãŸã床åããç°ãªã C++ ãã Java ããã Java ããGoããã ãªããšãããèŠæš¡ãæ¡éãã§ããïŒ RTS ã¯ãªãå¿
èŠã ãã¹ãå®è¡æ°ãåæžãããã ãã¹ãå®è¡ã®99.8%ã¯ããã¹ãçµæã®é·ç§»ãåŒãèµ·ãããªã ãã¹ãçµæã®é·ç§»ãåŒãèµ·ãããããª0.2%ã®ãã¹ãå®è¡ã ãã§ååãªããšã«ãªã ããå®ç§ãª ã¢ã«ãŽãªãºã ãããã°ããã¹ãŠã®ãã¹ããæµãç¶ããå¿
èŠã¯ãªã GreenishãšããæŠå¿µããªãå¿
èŠã ãã¹ãã®éãå®è¡åæ°ãšãã«è«å€§ã§ãå
šãŠãå®è¡ããããªããã RTS ã ãã§ã¯åé¡ãå€ã äŸåé¢ä¿ã°ã©ããå
ã«ãã ååž°ãã¹ã 察象ã®éžå®ïŒ RTS ïŒãè¡ã£ãŠããã³ã¢ã¢ãžã¥ãŒã«ãžã®äºçްãªä¿®æ£ãã»ãŒå
šäœã«åœ±é¿ãããããäžå®æéã® ãã€ã«ã¹ããŒã³ ã§ã®ã¹ã±ãžã¥ãŒãªã³ã°ã«ãããŠå
šãã¹ããå®è¡ããããšã«ãªããã¡ ãã€ã«ã¹ããŒã³ éã¯ããããžã§ã¯ãã®ç¶æ
ã¯æ±ºå®çã§ã¯ãªãïŒinconclusiveïŒ å
šãã¹ããå®è¡ããããšã«ãããã°ãªãŒã³ã®ç¢ºä¿¡ãã«ä»£ããããã°ãªãŒã³ã®ç¢ºçããæäŸããŠãã å³1. Greenish å³1ã§ã倧ããç·âããã°ãªãŒã³ã®ç¢ºä¿¡ã å³1ã§ã㢠ã¹ã°ãª ãŒã³åè§ããã°ãªãŒã³ã®ç¢ºçã ããŒã ã«ãšã£ãŠã¯ãªã¹ã¯ãæã£ãŠãªãªãŒã¹ããããšã«ãªã é·ç§»ãèŠã€ãããŸã§ã®æéãç¯çŽããããšãéèŠ ããŠããããã§ããïŒæ¥çµãŠã°ãéå»ãã§ããå
容ãå¿ããŠããããšã FlakyãšããæŠå¿µããªãéèŠã ãã¹ãçµæãæåãã倱æã«ç¶æ
é·ç§»ãããšãã§ãããã®84%ã èª€å ± ã§ãããã ã·ã¹ãã ã®åé¡ãªã®ã«ãéçºè
ã«ãã¹ããäžåæ Œã ã£ããšéç¥ãããããšã§èª¿æ»ããæéãç¡é§ã«ãªã ãã·ã³ãªãœãŒã¹ã® 2ïœ16%ãFlaky Testã®ããã«æ¶è²»ããŠãã å
šãŠã°ãªãŒã³ã§ãªããšãªãªãŒã¹ããªãããããªãªãŒã¹ã®åŠšãã«ãªã ç¡èŠãã¹ãã§ãªããšãããã å³2. Flaky å³2ã§ãFlakesã¯ãã¹ãçµæãé æ±ºå®è« çã«æåããã倱æãããããFlaky Test Flakyãªãã¹ãããããšã ãã¹ã倱æãåžžã«æ¬ é¥ãæå³ãããšã¯éããªããªã£ãŠããŸã ã®ã§ããçŒå°å¹Žã®ãããªååšã§ããã Flaky Testãžã®å¯ŸåŠ Flaky Testãæ€åºããããšã§ãéçºè
ã«ã¯ãã¹ãçµæã«æ·»ããŠãFlakyã§ããããšããæšãäžç·ã«äŒããããšã§ã調æ»ã³ã¹ããæãã Flakyãã¯äžå¯é¿ïŒInevitableïŒãšã®èŠè§£ Flakyããé€å»ããã®ãšåçšåºŠã«ã¯æ°ããªFlakyããåã蟌ãŸãã Flaky ãªãã¹ããåã«ç¡èŠãããåé€ãããšããèãæ¹ã«ã€ããŠãäŒæ©æéã«ããã³æ°ã«çŽæ¥å°ããããšãã§ããŸãããäžå®å®ãªãã¹ãã¯ãŸã ãã°ãæãŸããããã«äŸ¡å€ãããã®ã§ç¡èŠãããåé€ãããããŠã¯ãªããªãïŒæèš³ïŒãšã®ããšã§ããã Flaky Testã®æ€åºæ¹æ³ ãã¹ãçµæïŒPASS/FAILã®ãã€ããªå€ã®ã¿ïŒïŒãæ®ãã ãã§ãFlaky Testãžã®æŽå¯ãåŸãããããã§ãã ç¹æ®ãªæäœã¯å¿
èŠãªããåçŽãªã¯ãšãªã§æšå®ã§ãããšããããã€ã³ãã§ãã Google ã§ã¯ ãã¹ãçµæã2幎éèšé²ãæ®ãç¶ããŠãã PASS/FAILã®ãã€ããªå€ã®ã¿ Google ã§ã¯ *unit.xml ãã¡ã€ã«ã¯æ®ããŠããªãïŒãæ®ããŠãæ§ããªãïŒ ãã¹ãçµæã®é·ç§»ã§ããTransitionãEdgeã«çç®ããŠãçµéšåãè²ãŠãŠãã å³3. Edge å±¥æŽãå
±æïŒåãã¿ã€ãã³ã°ã§æåã»å€±æããããšïŒããä»ã®ãã¹ãã®æ°ãå€ãå Žåã¯Flakyã§ã¯ãªã ã©ã€ãã©ãªèµ·å ãªã©ã®æç¢ºãªçç±ãããå¯èœæ§ãé«ã ãã¹ãçµæã®é·ç§»ãå€ããã¹ãã¯ãFlakyãšå€æã§ãã äŸãã°ã1æ¥ã«30åããã¹ãçµæãé·ç§»ãããã¹ãããã£ãå Žåã«ãéçºè
ãããã»ã©é »ç¹ã«çŽãããå£ãããããããšã¯å°åºèããããªã ãã¥ãŒããªã¢ã« ã§ Flaky Test ã®æ€åºãå®éã« Google BigQuery ã䜿ã£ãŠè¡ããŸãããããšãŠãç°¡åã§ããã ææ³ èªåãã¹ããžã®é·å¹Žã®åãçµã¿ã®ææãšããŠãããèªåãã¹ããå
šãŠæµãããªãã確信ïŒ100% ConfidentïŒãããããšããåå£ããã£ãäžã§ã ãã¹ãå®è¡ã®éçšãããã«å¹æçã«è¡ããïŒ ãšããæ¬¡å
ã®ã話ã§ããã 確信ïŒ100% ConfidentïŒã«ä»£ããäœããå¿
èŠãªç¶æ³ã§ã ããã°ããŒã¿ è§£æã掻çšãããšãããã°ãŒã°ã«ãããã§ããã ã¯ããŒãžã³ã°ããã«ã§ã話ãããŠããã ã¢ã¡ãª ã«ã§ã¯å€§äŒæ¥ãäžå
äŒæ¥ã«ãããŠèªåãã¹ãã¯æ¢ã«åœããåã§ããããã广çãªéçšã«ã€ããŠãã®èå³ãç§»ã£ãŠããããšãã£ãèšèª¬ãå°è±¡çã§ããã
ã¯ããã« ããã«ã¡ã¯ïŒ FM_Harmonyã§ãã Rakus Developers Blog ã§ã¯3åç®ã®æçš¿ã«ãªããŸãã â ååã®èšäºã¯ã³ãã© tech-blog.rakus.co.jp å
æ¥ãReact Nativeã䜿ã£ã ã¹ãã ã¢ããªéçº ã«ã€ããŠã®å匷äŒã«åå ããŸããã ãªã®ã§ã ä»åã¯ãã®æåŠãã ããš + åŸããèªåã§èª¿ã¹ãããš ã«ã€ããŠãŸãšããŸããã ãã®èšäºãããReactãã£ãŠã¿ãããªãŒããšããæ¹ã®åèã«ãªãã°å¬ããã§ãã ã¯ããã« å眮ããã¹ããã¢ããªã®åé¡ React Native ãšã¯ïŒ Expoãšã¯ïŒ Hello World ããã£ãŠã¿ã ç°å¢æ§ç¯ ãããžã§ã¯ãäœæ ãµã³ãã«ã確èªããŠã¿ã Hello World! å°ã£ããšãã ã¢ããªãèµ·åã§ããªãïŒ å®æ©ã§åãããªãïŒ ææ³ å眮ãã ã¹ãã ã¢ããªã®åé¡ ãããã ã¹ãã ã¢ããªã¯å€§ããåããŠ2çš®é¡ãããŸãã *1 Webã¢ã㪠ãã©ãŠã¶äžã§åäœããã¢ããªã±ãŒã·ã§ã³ã§ãã HTMLã CSS ãªã©ã䜿ã£ãŠéçºããŸãã ãã€ãã£ãã¢ã㪠ã¹ãã äžã§çŽæ¥åäœããã¢ããªã§ãã äŸãã°ã Android åãã¢ããªã ã£ãã Android Studio ã䜿ã£ãŠéçºããŸãã ä»åã話ãããã®ã¯ã ãã€ãã£ãã¢ã㪠ã®éçºã«ã€ããŠã§ãã React Native ãšã¯ïŒ React Nativeãšã¯ããã€ãã£ãã¢ããªã JavaScript ãšReactã§ãã«ãããããã® ãã¬ãŒã ã¯ãŒã¯ ã§ãã çŽ ã® JavaScript ã®ã¿ã§ ã¢ããªéçº ãè¡ãããšãã§ããŸãã ç¹åŸŽãšããŠã¯ãã¢ããªã±ãŒã·ã§ã³ã®æŽæ°ãå³åº§ã«åæ ãããããšãã§ããããšããããŸãã ãã«ãããªãããªããŠããèªèŸŒã¿ãçŽãã ãã§å€æŽã確èªããããšãã§ããã®ã§éçºé床ã®åäžã«ã€ãªãããŸãã Expoãšã¯ïŒ 端çã«ããã°ãReact Nativeã§ã®éçºããµããŒãããããŒã«ã§ãã å芧äŒãããããŸãã ããšããšã¯ Exponent ãšããååã ã£ãããã§ãã Expoã®ç¹åŸŽã¯ããã€ããããŸãããäžã€ã¯åºæ¬çã« iOS / Android ã¢ããªã®åºå¥ãããããšãªãéçºãé²ããããäºãæããããŸãã Expoã¯ãã€ãã£ãå±€ãé ããŠããã®ã§ã äž¡è
ã®éããæèããªããŠæžã ã»ã»ã»ãããã§ãã ããã«ã 宿©ã§ã®æ€èšŒãç°¡åã«è¡ãã ããšãç¹åŸŽã®äžã€ã§ãã ããã«ã€ããŠã¯ããŸãããšã§è§ŠããããšæããŸãã Hello World ããã£ãŠã¿ã ããã§ã¯ãExpoã§ Hello World ããã£ãŠã¿ãŸãããã ä»åã®ãŽãŒã«ã¯ã ã¹ãã ã®ç»é¢ã« Hello World! ãšè¡šç€ºãããããšã§ãã ãªããäœæ¥ã¯ macOS ã§è¡ã£ãŠããŸãã Windows ã§ãã§ããŸããã説æã¯çç¥ããŸãã ç°å¢æ§ç¯ ãŸããéçºç°å¢ãæ§ç¯ããŸãããã Expoã§éçºãè¡ãããã«ã¯ã以äžã®ãã®ãå¿
èŠã«ãªããŸãã npmïŒãããã¯yarnïŒ Node.js watchman create-react-native-app ãã®å
ãwatchmanãšcreate-react-native-appã«ã€ããŠèª¬æããŸãã watchman ããããªããšã¢ããªã±ãŒã·ã§ã³ãåããããšãã§ããŸããã Homebrewã§ã€ã³ã¹ããŒã«å¯èœãªã®ã§ããã£ãŠãããŸãããã $ brew install watchman create-react-native-app ãããžã§ã¯ããäœæããéã«å¿
èŠã§ãã ãã¡ãã¯npmã§ã€ã³ã¹ããŒã«å¯èœã§ãã ã€ã³ã¹ããŒã«ã®éã«ã¯ãã°ããŒãã«ãªãã·ã§ã³ãä»ããŠãããŸãããã $ npm install -g create-react-native-app ãããžã§ã¯ãäœæ ã§ã¯ã次ã«ãããžã§ã¯ããäœæããŸãã æ¬¡ã®ã³ãã³ããå®è¡ãããšãã«ã¬ã³ã ãã£ã¬ã¯ã ãªçŽäžã«ãããžã§ã¯ãã®ã²ãªåœ¢ãäœæãããŸãã $ create-react-native-app HelloWorldApp ãµã³ãã«ã確èªããŠã¿ã ãããžã§ã¯ãã宿ããããããã«åããããšãã§ããŸãã å
ã»ã©äœæããããããžã§ã¯ãã® ãã£ã¬ã¯ã ãªãžç§»åããŠã以äžã®ã³ãã³ããå®è¡ããŠã¿ãŸãã ânpm ã®å Žå $ npm start âyarn ã®å Žå $ yarn start èµ·åã«æåãããšã倧ã㪠QRã³ãŒã ã衚瀺ããããšæããŸãã â QRã³ãŒã ã衚瀺ãããŠããŸãïŒèªã¿èŸŒã¿ã§ããªãããã«äžéšå¡ãã€ã¶ããŠããŸãïŒ Expoã§ã¯ãã® QRã³ãŒã ã ã¹ãã äžã§èªã¿èŸŒãããšã§ãç°¡åã«åäœç¢ºèªãè¡ãããšãã§ããŸãã ãã ãã QRã³ãŒã ã®èªã¿èŸŒã¿ã«ã¯å°çšã®ã¢ããªã±ãŒã·ã§ã³ãå¿
èŠã§ãã iOS ãªã Expo Cliant ã Android ãªã Expo ãããããããŒã±ããäžã§æ€çŽ¢ããã°ããèŠã€ããã¯ãã§ãã ã§ã¯ãä»å㯠iOS ã§ QRã³ãŒã ãèªã¿èŸŒãã§ã¿ãŸãããã ã¢ããªã®èªèŸŒåŸã«ãç»åã®ãããªç»é¢ã衚瀺ãããŠããã°æåã§ãã â ã¢ããªã®ç»é¢ïŒè«žäºæ
ã«ãã ãšãã¥ã¬ãŒã¿ äžã§åãããŠããŸãïŒ Hello World ! äžã®ç»åã«ãæžããŠãããŸããããã¢ããªã±ãŒã·ã§ã³ã¯ App.js ãç·šéããããšã§å€æŽãå¯èœã§ãã ããã§ãã¢ããªãèªã¿èŸŒãã ãŸãŸ App.js ãéããŠã¿ãŸãããã ãããšã <View> ... </View> ã§å²ãŸãããããã¯å
ã«ã <Text>...</Text> ã®ããã«ã¿ã°ã§å²ãŸããã³ãŒããããã¯ãã§ãã ãã®éšåãæ¬¡ã®ããã« å€æŽããŠä¿å ããŸãã â ... ã®éšåã¯å€æŽããªãã§ãã ãã <View style = { ... } > <Text>Hello World!</Text> </View> 宿©ã確èªãããšãç»é¢ãèªåçã«å€æŽãããããšã確èªã§ããŸãã â Hello World ! ã«ãªã£ãŠããïŒ ãšããããšã§ãExpoã§ Hello World ãã§ããŸãããïŒ ä»åã¯ç°¡åãªäŸã§ããããExpoã䜿ããšç°¡åã ãã€ã æè»œã« ã¹ãã ã¢ããªéçº ãã§ããããšãåãããŸããã å°ã£ããšãã ä»åããã®`Expoãè§Šã£ãŠã¿ãŠå¹Ÿã€ãå°ã£ãç¹ããã£ãã®ã§ç޹ä»ããŸãã ã¢ããªãèµ·åã§ããªãïŒ ãããžã§ã¯ãã®äœæãå®äºããããŠã©ããªé¢šã«åãã®ããªãšã¢ããªãèµ·åããããšããã»ã»ã» âãããªãšã©ãŒãåºãŸããã ããã§èª¿ã¹ãçµæãwatchmanãå¿
èŠãªããšãç¥ã£ãã®ã§ããã 宿©ã§åãããªãïŒ ç°¡åã«å®æ©ã§åäœç¢ºèªã§ããããšãExpoã®å£²ãã§ãããèªåã®å Žå宿©ã§ã®ç¢ºèªãã§ããŸããã§ããã 宿©ã§åäœç¢ºèªããããã«ã¯ãäœæ¥çšPCãšå®æ©ãåããããã¯ãŒã¯ã«ããå¿
èŠãããã®ã§ãããã©ããããã®ãšããã§äžæããããªãã£ãããã§ãã â QRã³ãŒã ãèªã¿èŸŒãã§ããããããç»é¢ãåºãŠããŠããŸãã ãªã®ã§ãããããå Žå㯠ãšãã¥ã¬ãŒã¿ ã§åäœç¢ºèªããŸãããã macOS ã®å Žåã XCode ã«ä»å±ããŠãã ãšãã¥ã¬ãŒã¿ ãå©çšããããšãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãç«ã¡äžããåŸã«ã i ãã¿ã³ãæŒãã° iOS ã® ãšãã¥ã¬ãŒã¿ äžã§åäœç¢ºèªãè¡ããŸãã ãã ãããã®å Žå㯠xcode-select -s /Application/Xcode.app ã¿ãããªæãã§ãã³ãã³ããå®è¡ããŠããå¿
èŠããããŸãã ããã¯ã XCode ã® ã³ãã³ãã©ã€ã³ ããŒã«ãæå®ããŠããããã *2 ã§ãã ææ³ ãªããšãã£ãŠãåäœç¢ºèªã®æè»œããããã䟿å©ã§ãã ãã«ãã®ããããããããè§£æŸãããã ãã§ãããªããµã¯ãµã¯éçºãé²ããªããšæããŸããã ããšãä»åã¯æ®å¿µãªããã§ããŸããã§ãããã宿©ã§ã®åäœç¢ºèªã QRã³ãŒã ãèªã¿èŸŒãã ãã ãšããã®ããæè»œã§é
åçã§ãã ç§ãä»åã®ããŒãã«ã€ããŠå匷ããããšæã£ãçç±ã¯ããReactã£ãŠããèããå§ããŠã¿ããããªããããã®è»œããã®ã§ããã ãªã®ã§ãããããæè»œãªãšãããã ã¢ããªéçº ã«èŠªãã¿ã€ã€ãReactã«ã€ããŠå匷ããããšã§å¹çããåŠç¿ã§ãããã ãšæããŸããã *1 : ãã®ä»ã«ããã€ããªããã¢ããªãšåŒã°ãããäž¡è
ãæãåããããã®ããããŸã *2 : ãã®èŸºãã¯ãŸã å匷äžã§ãã»ã»ã»
ã¯ããã« æ°å1幎ç®ãšã³ãžãã¢ã®kasuke18ãšç³ããŸãã å
æã«éå¬ããã瀟å
ã®æè¡äº€æµäŒ ãã¢ããã·ã¥ ã®çºè¡šã®äžã§ MeCab ã«ã€ããŠè§Šããçºè¡šããããŸããã â» ãã¢ããã·ã¥...ïŒ ãšããæ¹ã¯ãã¡ãããåç
§ãã ããã ãã® MeCab ã«èå³ããã¡ãŸããã®ã§ãä»åã®èšäºã§ã¯ MeCab ã Windows ã«å°å
¥ããŠäœ¿ã£ãŠã¿ãŸãã以äžã¯ç§ã®ç°å¢ã§ã€ã³ã¹ããŒã«ãããšãã®ãã®ãªã®ã§ã ãã£ã¬ã¯ã ãªãªã©ãéæèªã¿æ¿ããŠãã ããã ã¯ããã« ãŸãã¯ãµã³ãã« MeCabãšã¯ MeCabã®å°å
¥âŠã®åã« Windows Subsystem for Linuxãšã¯ Windows Subsystem for Linuxã®å°å
¥ MeCabã®å°å
¥ æ°èªå¯Ÿå¿ã®èŸæž(mecab-ipadic-NEologd)ã䜿ã mecab-ipadic-NEologdã®å°å
¥ MeCabãPHPãã䜿çšãã ãããã« åèæç® ãŸãã¯ãµã³ã㫠圢æ
çŽ è§£æ ãšã¯ã©ã®ãããªãã®ãã確èªãããµã³ãã«ãäœæãHEROKUã«ãããã€ã㊠å
¬éããŠããŸã ããŸãã¯è§Šã£ãŠåãããŠã¿ãŸããã! MeCab ãšã¯ MeCab 㯠ãªãŒãã³ãœãŒã¹ ã®æ¥æ¬èªã® 圢æ
çŽ è§£æ ãšã³ãžã³ã§ããïŒ å
¬åŒããŒãž ïŒ OS㯠Unix ç³»ã§ã Windows ã§ã䜿çšå¯èœã§ãããç§çšã®PCã Windows ã®ãããä»å㯠Windows ã« MeCab ãå°å
¥ããŸããã MeCab ã®å°å
¥âŠã®åã« Windows ã« MeCab ãå°å
¥ãããšãã£ãŠããåçŽã« Windows ã«å
¥ãããšããããã§ã¯ãããŸããããã¡ããå
¬åŒã«ã¯ Windows çš ã€ã³ã¹ããŒã© ãçšæãããŠããã®ã§ãåã«å©çšããã ããªãããã䜿çšããããšãäžçªæ©ãã§ãã ããã ã€ã³ã¹ããŒã© ã§ã€ã³ã¹ããŒã«ãããæšæºã®èŸæžãå€ããæ°ããåèªã«åŒ±ãã®ã§ãããé©å㫠圢æ
çŽ è§£æ ãè¡ããªãæ°èªã«å¯Ÿå¿ããèŸæžãå¿
é ã§ãããã®èŸæžã®å°å
¥ã ã€ã³ã¹ããŒã© ããã€ã³ã¹ããŒã«ããå Žåã¯é£ããã®ã§ãä»åã¯å¥ã®ææ®µãçšããŸããã ããã Windows Subsystem for Linux ãšãããã®ã§ãã Windows Subsystem for Linux ãšã¯ ç°¡åã«èšããšã Windowsäžã§LinuxãåããããïŒ ãšãã£ããã®ã§ãã 察å¿ãã Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ 㯠Ubuntu ã OpenSUSE 1 ãªã©ã§ãã ïŒå
¬åŒDOCåç
§ïŒ ä»åã¯äœ¿çšãã ãã£ã¹ããªãã¥ãŒã·ã§ã³ ãšã㊠Ubuntu ãéžæããŸããã Windows Subsystem for Linux ã®å°å
¥ ãã¡ãã®Qiitaã®èšäº ã詳ããã®ã§ããã¡ããã確èªãã ããã MeCab ã®å°å
¥ ããŠãå眮ããé·ããªã£ãŠããŸããŸãããããããã MeCab ã®å°å
¥ã§ãã ãšãã£ãŠãç¹æ®µé£ããæé ã§ã¯ãããŸããã以äžã®ã³ãã³ããå®è¡ããã°å°å
¥ã§ãããšæããŸãã sudo apt update sudo apt upgrade sudo apt install make automake autoconf autotools-dev m4 mecab libmecab-dev mecab-ipadic-utf8 å°å
¥ããã®ã§åäœç¢ºèªãè¡ããŸãã以äžã®ã³ãã³ãã§ MeCab ãå®è¡ã§ããŸãã mecab æ£ããå®è¡ããããšå
¥åã¢ãŒãã«ãªããŸãã®ã§ãäœããå
¥åããæ¹è¡ããŠã¿ãŸããããæ¹è¡ã§ 圢æ
çŽ è§£æ ãè¡ãããçµæã衚瀺ãããŸãã å³1. MeCab ã³ãã³ããå®è¡ æ°èªå¯Ÿå¿ã®èŸæž( mecab -ipadic-NEologd)ã䜿ã åè¿°ã®ãšãããæšæºã®èŸæžã¯å€ãã®ã§æ°èªã«å¯Ÿå¿ããŠããŸãããæ°èªã«å¯Ÿå¿ããèŸæžãå¿
èŠã§ããã®èŸæžã®äžã€ã« mecab-ipadic-NEologd ãšãããã®ããããŸãã mecab -ipadic-NEologd㯠ã¯ãŠãªããŒã¯ãŒã ã®ãã³ãããŒã¿ãªã©ãããšã«æ¯é±æææ¥ãšæšææ¥ã«æŽæ°ãããŸãã ã¯ãŠãªããŒã¯ãŒã ã®åèªã®è±å¯ããèãããšãæ¥ççšèªãªã©ã®ç¹åããåèªãé€ããåºæ¬çã«ã¯ mecab -ipadic-NEologdã§äºè¶³ããã§ãããã mecab -ipadic-NEologdã®å°å
¥ GitHub ã®READMEã«äžå¯§ã«æé ãèšèŒãããŠããŸããããã«è±èªã ãã§ãªãã æ¥æ¬èªã§æžãããREADME ãçšæãããŠããã®ã§ãè³ããå°œãããã§ãã 以äžã«ã³ãã³ãã®ã¿èšèŒããŠãããŸãã sudo apt install git make curl xz-utils file sudo sed -i -e 's%/lib/mecab/dic%/share/mecab/dic%' /usr/bin/mecab-config git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git ./bin/install-mecab-ipadic-neologd -n -a å°å
¥ããã®ã§åäœç¢ºèªãè¡ããŸãã以äžã®ããã« MeCab ã³ãã³ãã® -d ãªãã·ã§ã³ã䜿çšããããšã§ mecab -ipadic-NEologdãèŸæžãšãã 圢æ
çŽ è§£æ ãå®è¡ã§ããŸãã mecab -d /usr/share/mecab/dic/mecab-ipadic-neologd æ£ããå®è¡ããããšå
¥åã¢ãŒãã«ãªããŸãã®ã§ãäœããå
¥åããæ¹è¡ããŠã¿ãŸããããæ¹è¡ã§ 圢æ
çŽ è§£æ ãè¡ãããçµæã衚瀺ãããŸãã å³2. mecab -ipadic-NEologdã䜿ã£ã MeCab ã³ãã³ãã®å®è¡ MeCab ã PHP ãã䜿çšãã äžèšã®æé ã§ MeCab ãçšãã 圢æ
çŽ è§£æ ãå¯èœã«ãªããŸãããã PHP ãªã©ã®åçš® ã¹ã¯ãªããèšèª ããã®äœ¿çšããã«ã¯é¢åã§ããããã§åçš® ã¹ã¯ãªããèšèª åãã« ãã€ã³ãã£ã³ã° ããããã®ããããŸãã®ã§ããããå©çšããŸããä»å㯠PHP ã䜿çšããŸãããå
¬åŒã«ã¯çšæãããŠããªãã®ã§ããã® php-mecab ãå©çšããŸãã php - mecab å°å
¥ã®ããã以äžã®ã³ãã³ããå®è¡ããŸãããã cd /usr/local/src/ git clone https://github.com/rsky/php-mecab.git cd php-mecab/mecab phpize ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/bin/mecab-config make make test make install å°å
¥åŸã PHP ã§äœ¿çšããããã«extentionãã¡ã€ã«ãäœæããŸãã echo 'extention=mecab.so' > /etc/php/7.0/cli/php.d/mecab.ini ããã§ PHP ãã MeCab ã䜿çšããããã®æºåãæŽããŸããããµã³ãã«ã³ãŒãã以äžã«ç€ºããŸãã®ã§å®éã«åãããŠã¿ãŸãããã <?php dl ( 'mecab.so' ) ; $ option = array ( '-d' , '/usr/share/mecab/dic/mecab-ipadic-neologd' ) ; $ t = new \MeCab\Tagger ( $ option ) ; $ str = 'ãããããããããã®ãã¡ã«ããã¯ããã€ããã§ããã' ; echo $ t -> parse ( $ str ) ; ãšã©ãŒãªãå®è¡ã§ãããšä»¥äžã®ãããªçµæãåŸãããŸãã å³3. mecab - php ãçšãããµã³ãã«ã³ãŒãã®å®è¡ ãããã« ãã®èšäºã§ã¯ Windows ã« MeCab ãå
¥ã㊠PHP ã§åãããŸã§ã®æé ã玹ä»ããŸãããç§ã詊ããŠã¿ããšã㯠php - mecab ãå
¥ãããšãã«è©°ãŸããŸãããã MeCab æ¬äœãå
¥ãããšãããŸã§ã¯å
šãè©°ãŸããã«é²ããããŸããã PHP ãªã©ã§äœ¿ãããšãèããæ°è»œã« åœ¢æ
çŽ è§£æ ãè¡ããšããç¹ã§ã¯ã MeCab ã¯ã¡ããã©ããã®ããªãšæããŸããã åèæç® MeCab : Yet Another Part-of-Speech and Morphological Analyzer http://taku910.github.io/mecab/ Docs: Windows Subsystem for Linux Documentation https://docs.microsoft.com/en-us/windows/wsl/about Windows Subsystem for Linux ãã€ã³ã¹ããŒã«ããŠã¿ããïŒ https://qiita.com/Aruneko/items/c79810b0b015bebf30bb mecab -ipadic-NEologd : Neologism dictionary for MeCab https://github.com/neologd/mecab-ipadic-neologd php - mecab : MeCab binding for PHP https://github.com/rsky/php-mecab ãããããã°ãã¡ãããäžèªãã ããã ãopenSUSEãã§å§ããåããŠã®Linuxãã¹ã¯ããã ↩
ã¯ããã« ããã«ã¡ã¯ãrs_tukkiã§ãã æ¯åæ¯åã¿ã€ãã«çµµã¯ãœã ããã®ã©ãã«ãããã æè¿ãäŒç€Ÿã®å
å€åããã ã¹ãã ã¢ããªã®è©±é¡ãå¢ããŠããããã«æããŸããçããä»äºãä»äºãªã®ã§ãããã£ãè©±ã«ææãªã®ãããããŸããããæè»œã«æã¡éã¹ã ã¹ãã ã§æè»œã«äœ¿ãã圢ãšããã®ãããããã(ãšããããæ¢ã«) ã¢ããªéçº ã®äž»æµã«ãªã£ãŠããããšã§ãããã ã§ããã ã¹ãã ã¢ããªã®éçºã¯ããæè»œã«ã¯ãããŸãããèšèªã¯æ°ãã«ç¿åŸããªããã°ãªããªãã£ããããããæ©çš®ããšã«éçºããªããã°ãªããªãã£ãããšãä»ãŸã§WEBã§ã¢ããªãéçºããŠãã人ã«ãšã£ãŠã¯å°å³ã«ããŒãã«ãé«ãã®ã§ã¯ãšæããŸãã ããã§ä»åã¯ããããã®åé¡ãäžæ°ã«è§£æ±ºã§ãã ãã€ããªããã¢ã㪠ãšããã®éçºç°å¢ã§ãã ã Monaca ã ã䜿ã£ãŠå®éã«ãã€ããªããã¢ããªãäœã£ãŠã¿ãã話ãããŸãïŒ ã¯ããã« ãã€ããªããã¢ããªãšã¯ïŒ ã¡ãªãã ã¯ãã¹ãã©ãããã©ãŒã UIã®èªç±åºŠãé«ã Webã¢ããªã®éçºçµéšãããã°éçºãå¯èœ ãã¡ãªãã ãã€ããŒãªãã€ãã£ãæ©èœã®å©çšãé£ãã ãã€ãã£ãã¢ããªãšæ¯èŒãããšåäœãéã Webæè¡ã§ãã€ãã£ããªæ©èœã䜿ã£ãŠã¿ã ã¢ã«ãŠã³ãååŸ ãããžã§ã¯ãã®äœæ ãã©ã°ã€ã³ã®æå¹å APIããŒã®ååŸ ã³ãŒãäœæ index.html script.js å®è¡ïŒ ãããã« åè ãã€ããªããã¢ããªãšã¯ïŒ ãŸãäžè¬çã«ã ã¹ãã äžã§åäœããã¢ããªã¯ããã€ãã£ãã¢ããªããšãWebã¢ããªãã«å€§å¥ãããŸãã 现ããéãã¯ãããŸããã倧ãŸãã«ãã㚠端æ«äžã§åäœããã¢ã㪠ããã€ãã£ãã¢ããªã Webäžã§åäœããã¢ã㪠ãWebã¢ããªãšãªããŸãã ãããŠããã€ããªããã¢ããªããšããã®ã¯èããªããªãèšèããšæããŸããããã€ãã£ãã§åäœãããWebViewããšãããœããã䜿ãã€ã€ãã³ã³ãã³ãèªäœã¯Webäžã®ãã®ãèªã¿èŸŒã圢ã§å®çŸããã¢ããªã®ããšãæããŸã *1 ã Webã¢ããªã®è±å¯ãªæ
å ±éãšããã€ãã£ãã¢ããªã®è±å¯ãªæ©èœãšãçµã¿åãããè¯ããšãã©ãã®ã¢ããªãããããã€ããªããã¢ããªãªã®ã§ãã ã¡ãªãã ã¯ãã¹ãã©ãããã©ãŒã çŸåšæµéããŠãã ã¹ããŒããã©ã³ 㯠iPhone ã Android ã®ãµãã€ã§ããããã€ãã£ãã¢ããªã§ã¯ åè
ãswiftãåŸè
㯠Java ã§ã®éçºãäžè¬çã§ããã€ãŸããäž¡æ¹ã«å¯Ÿå¿ãã ã¹ãã ã¢ããªãéçºããããšããå Žåã¯ãå
šãç°ãªã2çš®ã®èšèªãåŠã¶å¿
èŠãããããããéçºã®ããŒãã«ãé«ãããäžå ãšãªã£ãŠããŸããã ã§ããããšãããããã€ããªããã¢ããªã¯ iPhone ã«ã Android ã«ãæšæºã§çµã¿èŸŒãŸããŠããWebViewãšãããœããã䜿ãã WebããŒãžãèªã¿èŸŒãã§è¡šç€ºãããããªåœ¢ã§åŠçãå®çŸãã ããã ã HTML5 ããã CSS ããã JavaScript ãã®3ã€ã®èšèªã§ãã©ã¡ãã«ã察å¿ã§ãããã€ãã£ã(颚ã®)ã¢ããªãéçºå¯èœãªã®ã§ãã UIã®èªç±åºŠãé«ã ãã€ããªããã¢ããªã¯ã HTML5 ã CSS ãçšããŠéçºããŸãã®ã§ããããã Webã¢ããªãäœæãããããªæèŠã§UIãèšèšãã ããšãåºæ¥ãŸãã ãã€ãã£ãã¢ããªãšæ¯èŒããŠãã«ã³ã¿ã³ã«ããããŠåã£ã衚瀺ããµã¯ããšäœããããã®ã¯çŽ æŽããããšæããŸãã Webã¢ããªã®éçºçµéšãããã°éçºãå¯èœ å
ã»ã©èšã£ãéãããã€ããªããã¢ããªã®éçºã«å¿
èŠãªã®ã¯åºæ¬çã«ã HTML5 ãã CSS ãã JavaScript ãã®äžçš®ã®ã¿ã§ãã ãã®ããããããæ±ãWebã¢ããªã®éçºçµéšããããšã³ãžãã¢ãªããããã»ã© èŠåŽããéçºã«çæã§ãã ãšæããŸãããã®æè»œãããããéçºè
ã«ãšã£ãŠã¯æå€§ã®é
åã«ãªãã§ãããã ãã¡ãªãã ãã€ããŒãªãã€ãã£ãæ©èœã®å©çšãé£ãã ãã€ããªããã¢ããªã§ã«ã¡ã©ã GPS ãªã©ã®ãã€ãã£ãæ©èœãå©çšããã«ã¯ãCordovaçã® ãã¬ãŒã ã¯ãŒã¯ ãæäŸããŠãã ãã©ã°ã€ã³ ãå©çšããã®ãäžè¬çã§ãã ãããããããã® ãã©ã°ã€ã³ ã¯ãã®ã»ãšãã©ãå人éçºãªã®ã§ãããŸãã«ããã€ããŒãªãã€ãã£ãæ©èœã ãš ãã©ã°ã€ã³ ãå®è£
ãããŠããããèªåã§éçºãããããªã...ãªããŠããšãã ãã€ãã£ãã¢ããªãšæ¯èŒãããšåäœãéã ãã€ãã£ãã¢ããªã¯ç«¯æ«äžã§åäœããã¢ããªããšããããšã¯å
ã»ã©èª¬æããŸããã äžæ¹ããã€ããªããã¢ããªã¯Webéä¿¡ãå¿
é ã«ãªã£ãŠããé¢ä¿äžããã€ãã£ãã¢ããªãšæ¯èŒããŠåäœããã£ããããå ŽåããããŸãã æè¿ã¯ã²ãŒã ã®ãããªåŠçã®å€ããã®ã§ãªããã°ãã€ãã£ãã¢ããªãšãéè²ããªããããã§ãããå€ãããŒãžã§ã³ã® ã¹ãã ã ãšããªããã£ããããå¯èœæ§ãããã®ã§æ³šæãå¿
èŠã§ãã Webæè¡ã§ãã€ãã£ããªæ©èœã䜿ã£ãŠã¿ã ã§ã¯ããããŸã§ã®è©±ãèžãŸããŠããã£ãã ã¹ããŒããã©ã³ ã®ãã€ãã£ããªæ©èœãå©çšãããã€ããªããã¢ããªäœæãäœéšããŠã¿ãããšæããŸãã ä»åéçºç°å¢ã«ã¯ã ã¢ã·ã¢ã«æ ªåŒäŒç€Ÿæ§ ãæäŸããŠãã ã Monaca ã ãšãã WebãµãŒãã¹ ã䜿çšããŸãããããŒã«ã«ã§éçºç°å¢ãçšæããå¿
èŠããªãã ã¯ã©ãŠã äžã§å
šãŠãå®çµããã®ã§ããªã䟿å©ã§ãã ã¢ã«ãŠã³ãååŸ ãŸãåãã«ã Monacaã®è£œåããŒãž ããã¢ã«ãŠã³ããååŸããŸãã Monaca ã¯å人åãã«ç¡æãã©ã³ãå«ã2ãã©ã³ãäŒæ¥åãã«2ãã©ã³çšæãããŠããŠãç¡æçã§ããªãªãŒã¹ãã«ããŸã§ã¯åé¡ãªãéçºããããšãåºæ¥ãŸãã ã§ãããç¡æçã ãšãã®ãã«ãã®åæ°ã1æ¥3åãŸã§ã«å¶éãããŠãããã Monaca ãçšæãã ãã©ã°ã€ã³ ãã䜿çšã§ããªãã£ããããã®ã§ããã€ãææçã«ç§»è¡ããã®ãããã§ãããã ä»åã¯ã²ãšãŸãç¡æçã§äœæããŸãã ãããžã§ã¯ãã®äœæ ã¢ã«ãŠã³ããäœæãããã ããã·ã¥ ããŒãã確èªããŠã¿ãŸãã æåã« ããã·ã¥ ããŒããéããšãã¯ãããŠã® Monaca ã¢ããªããšãããããžã§ã¯ããæ¢ã«äœæãããŠããŸã *2 ãããŸãã¯èªåã§æ°ãã«ãããžã§ã¯ããäœã£ãŠã¿ãŸãããã ãæ°èŠãããžã§ã¯ãã®äœæããã¯ãªãã¯ã Monaca ã§ã¯ããã€ãã®ãµã³ãã«ã¢ããªããUIã JavaScript ã® ãã¬ãŒã ã¯ãŒã¯ ãå©çšãããã³ãã¬ãŒããããã€ããããŸãã®ã§ããããã£ããµã³ãã«ãåèã«ãã€ã€éçºãé²ããããšã«ãªããšæããŸãã ä»åã¯ã²ãšãŸããNo Frameworkãã§äœæããŸããäœæãããããžã§ã¯ããéããšãæ©éç·šéç»é¢ãåºãŠããŸããã ç·šéç»é¢ã«ã€ããŠã¯ãã»ãŒã»ãŒäžè¬ç㪠IDE ãšåãèŠæ¹ã§ããç§ã¯æ®æ®µ Eclipse ã䜿ã£ãŠããã®ã§ãç»é¢ã«é¢ããŠã¯ç°¡åã«çè§£ã§ããŸããã ç»é¢å³ã«ã¯ãã¬ãã¥ãŒã衚瀺ãããŠããŸããã ã¹ããŒããã©ã³ ã®ãã€ãã£ããªæ©èœä»¥å€ã®åäœã¯ä¿åãããã®ãå³åæ ãããã®ã§ãã³ãŒãã£ã³ã°ããããããšæããŸãã ãã©ã°ã€ã³ ã®æå¹å ããŠããããã ã¹ããŒããã©ã³ ã®ãã€ãã£ãæ©èœãå©çšã§ããããã«ããŠãããŸãã ä»åã¯ã çŸåšäœçœ®ãGoogleMapã«è¡šç€ºãã ã¢ããªã®äœæã«åãçµãã§ã¿ãŸãããã ãŸããã¡ãã¥ãŒããŒãããèšå®->Cordova ãã©ã°ã€ã³ ã®ç®¡çããéããçŸåšäœçœ®ãååŸããããã® ãã©ã°ã€ã³ ãGeolocationããæå¹åããŸãã ãã©ã°ã€ã³ ã«é¢ããŠã¯ç¡æçã§ãããªãã®æ°ããããä»ã«ãã«ã¡ã©ã ããŒã³ãŒããªãŒã ãŒããã€ãã¬ãŒã·ã§ã³æ©èœãªã©ã ãã®ç»é¢ã§æå¹ã«ããã ãã§å©çšããããšãã§ããŸãã®ã§ã調ã¹ãŠã¿ãŠãã ããã Monaca åŽã§ã®èšå®ã¯ããã§å®äºã§ãã API ããŒã®ååŸ ããŠãç¶ããŠGoogleMapã衚瀺ãããããã«å¿
èŠãªã Google Maps API ã®æ¿èªããŒãååŸããŸãã Google ã¢ã«ãŠã³ãã§ãã°ã€ã³ããŠããã APIã®ããŒãž ã®å³äžã«ãããããŒã®ååŸããã¯ãªãã¯ããŠ32æåã® API ããŒã確èªããŠãã ããã ãã®ããŒãã³ãŒãã«åã蟌ãããšã§Mapã衚瀺ã§ããããã«ãªããŸãã ã²ãšãŸãã¯ç¡æã§å©çšã§ããŸãããèªã¿èŸŒã¿ã®åæ°ã«ãã£ãŠã¯èª²éãå¿
èŠã«ãªããŸãã®ã§ããªãªãŒã¹ãªã©ãè¡ãéã¯æ³šæããŠãã ããã ã³ãŒãäœæ ããŠãã§ã¯æ©éã³ãŒããæžããŠãããŸãããã ãŸãã¯è¡šç€ºéšåããã index.html <!DOCTYPE HTML> < html > < head > < style > #map { height : 400px ; width : 100 %; } </ style > ããïœäžç¥ïœ < script src = "./script.js" ></ script > < script src = "https://maps.googleapis.com/maps/api/js?key=ããã«APIããŒãå
¥å&callback=getMapLocation" ></ script > </ head > < body > < div id = "map" > </ div > </ body > </ html > ã¹ã¯ãªãã ãšããŠèªã¿èŸŒãã®ã¯åŸè¿°ã®jsãã¡ã€ã«ãšGoogleMapsAPIã§ãã callback=getMapLocation 㯠API ãèªã¿èŸŒãã éã«æåã«å®è¡ããã¡ãœããã®ããšã ç¹ã«åŒã£ããããšããã¯ãªããšæããŸãããäžã€ã ãæ³šæç¹ãã Mapã®è¡šç€ºéšå < div id = "map" > </ div > ã«ã¯å¿
ã CSS ãªã©ã§ 衚瀺é åãç¢ºä¿ ããŠãããªããšãä»®ã«Scriptãæ£ãããŠãMapã衚瀺ãããŸããã ç§ã¯ãããªãã ããªãããšã§æ°æéãæ©ãã§ããŸããŸãã... script.js ãããŠãããã JavaScript ã®ã³ãŒãã£ã³ã°ãéå§ããŸãã ä»åã¯ã Monaca ã® å
¬åŒããã¥ã¡ã³ã ã«ä¹ã£ãŠãããã®ãåèã«ããŸããã var Latitude = undefined ; //緯床 var Longitude = undefined ; //çµåºŠ // åæåŠç function getMapLocation() { navigator.geolocation.getCurrentPosition(onMapSuccess, onMapError, { enableHighAccuracy: true } ); } // getMapLocation()ã§ã®äœçœ®æ
å ±ã®ååŸã«æåãããåŒã°ãã var onMapSuccess = function (position) { Latitude = position.coords.latitude; Longitude = position.coords.longitude; getMap(Latitude, Longitude); } // ååŸããäœçœ®æ
å ±ãããšã«Mapãçæãã function getMap(latitude, longitude) { var latLong = new google.maps.LatLng(latitude, longitude); //äœçœ®æ
å ±ã®èšå® var mapOptions = { center: latLong, zoom: 15, mapTypeId: google.maps.MapTypeId.ROADMAP //Mapã®è¡šç€ºåœ¢åŒããã®å Žåéåžžã®éè·¯å°å³ã«ãªã } ; var map = new google.maps.Map( document .getElementById( "map" ), mapOptions); var marker = new google.maps.Marker( { position: latLong } ); marker.setMap(map); } // äœçœ®æ
å ±ã®ååŸã«å€±æããæã«åŒã°ãã function onMapError(error) { console.log( 'code: ' + error.code + '\n' + 'message: ' + error.message + '\n' ); } æåã«åŒã³åºã getMapLocation() ã§ããGeolocationã ãã©ã°ã€ã³ ãå©çšããŠçŸåšäœçœ®ãååŸããŠããŸããæåãããš onMapSuccess ã getMap(latitude, longitude) ãšåŠçãé²ãã§ãããæåŸã«çŸåšäœçœ®ã瀺ããMapã衚瀺ãããããã«ãªããŸãã 颿°ã®æå³ãåããã°ããã¡ããå
容èªäœã¯ãã»ã©é£ãããªãã§ãããã å®è¡ïŒ ããŠãã§ã¯æ©éãã®ã¢ããªã詊ããŠã¿ããã®ã§ãã... åœç¶ãã«ãããªãªãŒã¹ã¯ãŸã è¡ã£ãŠããªãã®ã§ã ã¹ããŒããã©ã³ ã§æ©èœã詊ãã«ã¯ ãããã° çšã®ã¢ããªãå¿
èŠã§ãã Monaca ã®ãããã¬ãŒã¯ã Android , iOS å
±ã«ç¡æã§ã€ã³ã¹ããŒã«ãã§ããŸãã ãããŠãã€ã³ã¹ããŒã«åŸã«èªåã®ã¢ã«ãŠã³ãã«ãã°ã€ã³ããå
ã»ã©ã®testãããžã§ã¯ããèµ·åããŠã¿ããš... èŠäºãèªåã®çŸåšäœçœ®ãMapã«è¡šç€ºãããŸããïŒ ãããã« ãã€ããªããã¢ããªãã©ãã ãç°¡åã«äœæã§ããããåããããã ããã§ããããã åœç¶ã ãã©ã°ã€ã³ ã¯ä»å玹ä»ãããã®ä»¥å€ã«ãããŸããŸãããŸãããHTMLã JavaScript ãé£ããèšèªã§ã¯ãªããšæããŸãã®ã§ãããããäœãã¢ããªãäœã£ãŠã¿ããïŒãšããåå¿è
ã®æ¹ã«ã¯æé©ããšæããŸãã (ããååã®èšäºã§ãèšã£ããªâŠ) çããããããããæè»œã« ã¹ãã ã¢ããªã®éçºã«çæããŠã¿ãŠã¯ãããã§ããããïŒ åè ネイティブアプリの意味や定義 Weblio辞書 開発コスト削減&サクサク動く!今話題の”ハイブリッドアプリ”って? | 起業・創業・資金調達の創業手帳 ハイブリッドアプリとは? - Qiita ハイブリッドアプリ制作で動作が重くならないために気をつけること|意識の高い時に雑記 Get an API Key | Maps JavaScript API | Google Developers 位置情報の取得 プラグイン | Monaca Docs *1 : webã¢ããªã§ãããªãããã«ã¡ã©ã GPS ãªã© ã¹ãã æ¬äœã®æ©èœãå©çšããã¢ããªã®ããšããšããèŠæ¹ãããããã§ãã *2 : ãtestãã¯ç§ãäœæãããã®ã§ãã
ã¯ããã« ããã«ã¡ã¯ã ã©ã¯ ã¹ãšã³ãžãã¢ã®strongWhiteã§ãã ä»å㯠åå¿è
åãSwiftããã°ã©ãã³ã°ååŒ·äŒ ã«åå ããã®ã§ãå匷äŒã®å
容ãåå ããææ³ãèšäºã«ããããšæããŸãã Swiftãšã¯ æ¬é¡ã«å
¥ãåã«Swiftã«ã€ããŠç°¡åã«è§ŠããŠãããŸãã Swift ãšã¯ã iOS åãã®ã¢ããªã±ãŒã·ã§ã³ãéçºããããã® ããã°ã©ãã³ã°èšèª ã§ã Apple 瀟ãéçºããŸããã iPhone ã iPad ããæã¡ã®æ¹ã§ããµã ãäœæ°ãªãã«äœ¿ã£ãŠããã¢ããªã¯ãã®Swiftã«ãã£ãŠäœãããŠããŸãã Swift㯠Xcode ( çµ±åéçºç°å¢ )ã䜿ã£ãŠèšè¿°ããŠãããŸãã åå ããååŒ·äŒ ãµã ãç§ã¯èªå®
ã§ããã°ã©ãã³ã°åŠç¿ãããŠããã®ã§ãããããŸããŸSwiftã«é¢ããå匷äŒã調ã¹ãŠãããšãããSwiftã®ã¹ã®åãç¥ããªãåå¿è
ã§ãæ°è»œã«åè¬ã§ããããªå匷äŒãèŠã€ããã®ã§ãæãåã£ãŠåå ããŠã¿ãããšã«ããŸããã ã ã«ãã§ãµãã³ã§åŠã¶!è¶
åå¿è
åãã®swiftããã°ã©ãã³ã°ã¬ãã¹ã³âª ã éå¬å°ïŒå€§éª å¿ææ© ã¬ã³ã¿ã«ãªãã£ã¹ salon HAJIMARI æ¥æïŒ2018幎1æ21æ¥(æ¥) 14:00ã18:00 æã¡ç©ïŒããŒãããœã³ã³( Mac OS )ã黿ºã³ãŒã/黿ºã¢ããã¿(åã¯ããããª) åå è²»ïŒ2,000å ãããã ããããäŒ ãšã¯éããè¬çŸ©åœ¢åŒã§ç°¡åãªã¢ããªãäœæããŠãããŸãã Xcode ã®èšå®ããããžã§ã¯ãã®äœæããäžå¯§ã«æããŠããããã®ã§ããã¢ããªã«ã€ããŠèå³ã¯ãããã©ã©ããã£ãŠäœãã°ãããããããªãããšãã人ã«ã¯ãªã¹ã¹ã¡ã®å匷äŒã§ããã äŒå Žã®é°å²æ° äŒå Žã¯ ã¬ã³ã¿ã«ãªãã£ã¹ ã®ã«ãã§ã¹ããŒã¹ã ã£ãã®ã§ã倧åŠã®è¬çŸ©å®€ã®ãã㪠å
èŠãã æãã¯ãªãããã£ãããšå¿ãèœã¡çãããªããå匷ã§ããŸããã äŒå Žã®ç®¡ç人ãããããèåãšã³ãŒããŒãåºããŠããã ããã®ã§ãããã°ã©ãã³ã°ã§è©°ãŸã£ãæã¯ããŸãæ°å転æãããããšãã§ããŸããã ã«ãã§ã¹ããŒã¹ã§ã³ãŒããŒã飲ã¿ãªãã Mac ãç«ã¡äžããŠããæ§ã¯äœã ãããããšã³ãžãã¢ã£ãœããªãšæããŸãã(ç¬) äœæããã¢ã㪠å匷äŒã®é嬿¥ããã¬ã³ã¿ã€ã³ããŒã«è¿ãã£ãããšããããããã¬ãŒã³ãããã¯ã¹ãã¿ãããããšãã¬ã³ã¿ã€ã³ã¡ãã»ãŒãžãéãããã¢ããªãäœæããŸããã äŒå Žã§ã¯ã·ãã¥ã¬ãŒã¿ã§åäœç¢ºèªãè¡ã£ãŠããŸã( iPhone ãªã©ã®ç«¯æ«ãããã°å®éã«ã¢ããªãã€ã³ã¹ããŒã«ããããšãå¯èœã§ã)ã ç»é¢ãæ§æèŠçŽ (ãã¬ãŒã³ãããã¯ã¹ãªã©ã®ããŒã)ãå°ãªããè€éãªæåãããªãã®ã§ããã°ã©ã èªäœã¯æ°åè¡çšåºŠã®ç°¡åãªãã®ã§ãã Swiftã«è§ŠããŠæ¥ãæµ
ã人ã«ã¯ã¡ããã©ããé£æåºŠã§ã¯ãªãã§ããããã åå ããææ³ ä»åã®å匷äŒã§äœæããããã°ã©ã ã¯ãã»ã©é£ãããªãã£ãã®ã§ãå°ãç©è¶³ããªãã£ãå°è±¡ã§ãã è¬çŸ©èªäœãæåã®2æéãããã§çµãã£ãŠããŸã£ãã®ã§ãåŸåã¯åå è
ãšã®äº€æµã«ããŠã圢ã«ãªããŸããã äž»å¬è
åŽã¯ãããåŸåã®åå è
ãšã®äº€æµã«éãã眮ããŠããããããç©æ¥µçã«åå è
ãšã®æèŠäº€æãä¿ããŠããŸããã 瀟å€ã®ãããšç©æ¥µçã«é¢ããã貎éãªæ©äŒã§ããã®ã§ãæè¡è«è©±ãçãã«è¡ããŸããã æåŸã« èªå®
ã§ã®ããã°ã©ãã³ã°åŠç¿ã¯äœãã§è©°ãŸã£ãããæãããã«çè§£ãé²ãŸãªãã£ããšããŠãèªåã²ãšãã§è§£æ±ºããªããšãããªãã®ã§çµæ§ã€ããã§ãã ååãåèæžãèªãã ããWebãµã€ãã§èª¿ã¹ããããããå³åŸå·ŠåŸããªããšãããªããšæããŸãããå匷äŒã«è¡ããšããããªãããšã¯æ°è»œã«è³ªåã§ããã®ã§ããã§ãã ããã«ã§ãç¥èã身ã«ä»ããã人ã¯åèæžãè²·ããããå匷äŒã«è¡ã£ãæ¹ããããããããŸããã åè Swift Xcode
MasaKuã§ãããããã瀟äŒäººïŒå¹Žç®çµäºã§ãã è¿æ³ã§ãããå
æ¥å€§éªã§éå¬ããã ãªãŒãã³ãœãŒã¹ ã®ã€ãã³ã OSC OSAKA 2018 ã«åå ããŸããã www.ospn.jp ã€ãã³ãã®äžã§ã openSUSE ãã®ã»ãã·ã§ã³ããã£ãã®ã§ããã Linux ãã¹ã¯ãããã䜿ã£ãããšããªãç§ã®ãããªåå¿è
ã§ãæ±ããããã㪠Windows ã©ã€ã¯ãªç»é¢ã§èå³ãæã¡ãŸããã ãŸããçºè¡šè
ããã®å±ç€ºããŒã¹ã®æ¹ã«ã蚪ãããã§ããã openSUSE Leap42.3 ã®ã€ã³ã¹ããŒã«ãã£ã¹ã¯ãé ããã®ã§ãå€ããªã£ãããŒãããœã³ã³ã«ã€ã³ã¹ããŒã«ããŠäœ¿ã£ãŠã¿ãããªãšæããŸããã openSUSE ã®å
¬åŒãã¹ã³ãããGeeko(ã®ãŒã³ïŒãã§ãã坿ãã§ããã openSUSEãšã¯ ãã©ã€ããŒãçšãšããŠã®Linuxãã¹ã¯ãããã®å©çš ããã±ãŒãžç®¡çãœãããYaSTã YaSTãå©çšããLAMPç°å¢ã®æ§ç¯ YaSTãå©çšããApacheã®èµ·å Apacheã®èšå® ãããã« åèãµã€ã openSUSE ãšã¯ " Slackware âç³» Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ ã§ãäž»ã«æ¬§å·ã§äººæ°ã®ããã§ãã 2017幎7æãã" Microsoft ã¹ã㢠âã§ããªãªãŒã¹ãããŠããŸãã ãã¹ã¯ãããç»é¢ ãã¹ã¯ãããã¯äžå³ã®ãããªæãã§ãæ®æ®µãã Windows ãã·ã³ãå©çšããæ¹ã¯ããã«æäœã«æ
£ããããšãã§ããã®ã§ã¯ãªãã§ããããã ãŸããä»®æ³ãã¹ã¯ããããããAlt + Tabãã®ç»é¢åãæ¿ããªã©ãæ§ã
ãªãã¹ã¯ããã广ã䜿ããããã Windows ã Mac ã§ãã®ãããªæ©èœã倿§ãããæ¹ã§ã䜿ããããã®ã§ã¯ãªãããšæããŸãã OSC OSAKA 2018 ã®äŒå Žã§èãã話ã§ãã openSUSE ã¯ããªãåæããä»®æ³ãã¹ã¯ãããæ©èœãå°å
¥ããŠããããã§ãã ãã©ã€ããŒãçšãšããŠã® Linux ãã¹ã¯ãããã®å©çš ç§ã¯æ¥åã§ããã©ã€ããŒãã§ãã Windows ãã·ã³ã䜿ã£ãŠããŸãã openSUSE ããã©ã€ããŒãã§å©çšããå Žåãæ®æ®µè¡ã£ãŠããããšãã©ããŸã§ã§ããã®ãããšããããšããªã¹ãã¢ããããŸããã æç« äœæïŒ google ããã¥ã¡ã³ããå©çšã§ãã ããã°ã©ãã³ã°ïŒ Atom ã Linux ç°å¢ã§ãå©çšã§ãã åç»èŠèŽïŒ YouTube çã®åç»ãµã€ããå©çšã§ãã FireFox ãæšæºæèŒãããŠããããã Windows ã§å©çšããŠã ã¯ã©ãŠã ãµãŒãã¹ããã®ãŸãŸå©çšã§ããŸãã ç°å¢ãéžã°ãªãããšã®çŽ æŽããããæ¹ããŠå®æããŸããã ä»ã®ãšããããã©ã€ããŒãå©çšããäžã§ã¯ç®ç«ã£ãåé¡ã¯èŠã€ãã£ãŠããŸããã 匷ããŠåé¡ç¹ãäžãããªãã ãã©ãã«ã·ã¥ãŒãã£ã³ã° ãã»ãŒè±èªèšäºã®ãããåé¡ãèµ·ããå Žåã¯è±èªãšåãåããªããã°ãªããªããšããç¹ããããŸãã æ¥æ¬èªã® ãã©ãã«ã·ã¥ãŒãã£ã³ã° ãèšäºã«ããŠçºä¿¡ããŠããäºã§ããããã§ã ãªãŒãã³ãœãŒã¹ ã®çºå±ã«è²¢ç®ã§ããããããªãããšæããŸãã ããã±ãŒãžç®¡çãœããã YaST ã Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ ã¯ã©ã®OSãé¡äŒŒæ©èœãããããç¹åŸŽãèŠã€ãã«ããããã§ããã openSUSE ã®æå€§ã®ç¹åŸŽã¯ã YaST ããšããããã±ãŒãžç®¡çãœããã§ãã YaST ãšã¯ã Yet another Setup Tool (ãã 1 ã€ã®ã»ããã¢ããããŒã«) ã®ç¥ã§ãã·ã¹ãã å
šäœã®èšå®ãè¡ãªãããšãã§ããããã«ç®æããŠäœãããŠããŸãã Windows ã®ã³ã³ ãããŒã« ããã«ã®ããã«èŠããŸããã GUI ã§ Linux ã®æäœãã§ããããŒã«ã§ãã ããã«ãŠã§ã¢ ã®ã€ã³ã¹ããŒã«ã YaST ã§è¡ãããšãã§ããŸãã YaST ã®ãããç»é¢ YaST ãå©çšãã LAMP ç°å¢ã®æ§ç¯ é©ãã ã£ãã®ãã YaST ã®ãœãããŠã§ã¢ç®¡çã¡ãã¥ãŒãå©çšããããšã§ã LAMP ç°å¢ãäžçºã§æ§ç¯ã§ããŠããŸããŸãã æ§ç¯æé ã¯ä»¥äžã®éãã§ãã ã¡ãã¥ãŒã®äžãããœãããŠã§ã¢ãéžæããœãããŠã§ã¢ç®¡çãéžæ æ€çŽ¢ããŒã« LAMP ãšå
¥å æ€çŽ¢ã§èŠã€ãã£ããpatterns-openSUSE- lamp _serverããéžæããŠäºè§£ãã¿ã³ãæŒäž YaST ã§ã® LAMP ç°å¢ã®ã€ã³ã¹ããŒã«æé ãã£ãšããéã« PHP ãå®è¡ã§ããç°å¢ãåºæ¥äžãããŸããã YaST ãå©çšãã Apache ã®èµ·å ã€ã³ã¹ããŒã«å®äºåŸã« Apache ã®åäœç¢ºèªãè¡ããŸãã Apache ã®èµ·åã YaST ã§è¡ãããšãã§ããŸãã ã¡ãã¥ãŒã®äžããã·ã¹ãã ãéžæãããµãŒãã¹ãããŒãžã£ãŒãéžæ Apache2ãéžæããŠæå¹ã«å€æŽããéå§ãæŒäžãã OKãæŒäžããŠã倿Žã確å®ãã Apache ã®èµ·åæ¹æ³ ããã§ Apache ã®èµ·åãå®äºã§ãã FireFox ã§ localhost ããã㯠Apache ãèµ·åããŠããã³ã³ãã¥ãŒã¿ã® IPã¢ãã¬ã¹ ã«ã¢ã¯ã»ã¹ãããš Apache ãèµ·åããããšã確èªããããšãã§ããŸãã Apache ã®èµ·å確èªããIt works!ããšè¡šç€ºãããŠããã°èµ·åæå Apache ã®èšå® PHP ãå©çšããããã«ã¯ apache ãèšå®ããå¿
èŠããããŸããããã¡ãã YaST ã§èšå®ããããšãã§ããŸãã ãããã¯ãŒã¯ãµãŒãã¹ãéžæããHTTPãµãŒããéžæ ãŠã£ã¶ãŒãã«åŸã£ãŠãµãŒãã®èšå®ãè¡ã PHP ãå©çšã§ããããã«ããããã®èšå® éèŠãªã®ã¯STEP2ã§ PHP ãèšå®ããããšã§ãã ãã以å€ã¯èšå®ããå¿
èŠã¯ãããŸããã èšå®ãå®äºããã以äžã®ããã°ã©ã ãäœæã㊠/srv/www/htdocs/ ã«é
眮ããŠç¢ºèªããŠã¿ãŸãããã <?php phpinfo () ; Apache ã§ PHP ã䜿ããç¶æ
ã«ãªã£ãŠããã°phpinfo()ãèµ·åããŠç»é¢ã衚瀺ããã ãããã« ãããã§ããã§ããããã Linux ã¯ãµãŒããšããŠããå©çšããããšããªãã£ãããã Linux ãã¹ã¯ãããããããŸã§å©çšãããããã®ã ãšã¯æããŸããã§ããã OSç¡ãã®ããŒãããœã³ã³ãäžå°è³Œå
¥ããŠã openSUSE ãå
¥ããŠãã£ãããšäœ¿ã£ãŠã¿ãããšããæ°æã¡ã«ããªããŸããã Linux ãã¹ã¯ãããã«èå³ãããæ¹ããå€ããªã£ãããœã³ã³ãåå©çšããŠã¿ããããšããæ¹ã¯å©çšããŠã¿ãŠã¯ãããã§ããããã åèãµã€ã 「openSUSE Leap」がWindows 10の“ストア”に登場 ~「SUSE Linux Enterprise Server」も - 窓の杜 KDE4ã®ãã¹ã¯ããã广ã®è§£èª¬ ãããã®VPSã«openSUSE Leap42.2ãæäŸãããã®ã§LAMPãªç°å¢ãæ§ç¯ããŠã¿ã
ã¯ããã« ããããããš cVimã®ããŠã³ããŒã cVimã§ã§ããããš(ã·ã§ãŒãã«ããããŒ) cVimã§ã§ããããš(ã³ãã³ã) ã·ã§ãŒãã«ããã®ã«ã¹ã¿ãã€ãº èšå®äŸ unmap x map w map e :duplicate let hintcharacters "asdfgjklwertuioxcvnm" set noautofocus çµããã« åè ã¯ãã㫠以å調ã¹ãããšãå€ãææããããå¹ççã« ãã©ãŠãžã³ã° ãããããcVimãšãã google Chrome ã§å©çšã§ãã æ¡åŒµæ©èœ ãå°å
¥ããŸãããcVimã䜿ããš Vim ã©ã€ã¯ã«ãã©ãŠã¶ã䜿ãããšãã§ããä»ãã·ã§ãŒãã«ãããèªåã§èšå®ããããšãã§ããŸãããã®èšäºã§ã¯cVimã䜿ããšã§ããããšã玹ä»ããŸãã ããããããš ç§ãããŒã«ãå°å
¥ãããããã£ãããšãèšèŒããŸãã ã§ããã ãããŠã¹ã䜿ããã« ãã©ãŠãžã³ã° ãããã command + f ã®ãããª2ããŒã®ã·ã§ãŒãã«ããã1ããŒã§è¡ãããã£ã ã¿ãã®è€è£œãç¹å®ã®ããŒãžãéããšãã£ããååšããªãã·ã§ãŒãã«ããã䜿ããã cVimã®ããŠã³ããŒã ããŠã³ããŒãããŒãž ãã远å ãã¿ã³æŒããŠããŠã³ããŒãããŸã(ç§ã¯è¿œå æžã¿ã®ããã CHROME ã«è¿œå æžã¿ããšãã衚瀺ã«ãªã£ãŠããŸãã)ã cVimã§ã§ããããš(ã·ã§ãŒãã«ããããŒ) cVimã«å
ããåãã£ãŠããã·ã§ãŒãã«ããããŒã«ã€ããŠå¹Ÿã€ã玹ä»ããŸãã f ã§ããŒãžå
ã®ãªã³ã¯ã«ã·ã§ãŒãã«ãããå²ãæ¯ã æããcVim(ãäŒŒã æ¡åŒµæ©èœ Vimium)ã䜿ã£ãéã«äžçªäŸ¿å©ãªæ©èœã§ããäžèšã®å Žåã¯ç¶ã㊠u ãæŒãã°ã©ã¯ã¹ã®ããŒã ããŒãžãéãããŸã j ã§äžã k ã§äžã«ããŒãžã¹ã¯ããŒã«(ç¢å°ããŒã®äžäžãšåãæå)ã d ã§äžã u ã§äžã«åããŒãžåã¹ã¯ããŒã« gg ã§ããŒãžã®æäžéšãžç§»åã G ã§ããŒãžã®æäžéšãžç§»å / ã§ããŒãžå
æ€çŽ¢ã Enter ã§æ€çŽ¢æååã確å®åŸ n ã§æ¬¡ã®æ€çŽ¢å¯Ÿè±¡ã N ã§åã®æ€çŽ¢å¯Ÿè±¡ãžç§»å gi ã§ããŒãžã®äžçªäžã®æ€çŽ¢æ¬ã«ãã©ãŒã«ã¹ cVimã§ã§ããããš(ã³ãã³ã) : ã§ã³ãã³ããæãŠãŸããäŸãã° :tabnew [URL] ã§ã[URL]ãæ°èŠã¿ãã§éããã :tabnew [æ€çŽ¢æåå] ã§ãæ°èŠã¿ãã§[æ€çŽ¢æåå]ãæ€çŽ¢ããçµæãéããããšãã§ããŸãããŸãã : ã§ã³ãã³ãã¢ãŒãèµ·åããåŸãæåãå
¥åãããšãã®æåããå§ãŸãã³ãã³ãã衚瀺ããŠãããŸã(äžèšã¯ t ãå
¥åããå Žå)ãåè£ã¯ tab ãš shft + tab ã§ç§»åã§ããŸãã ã·ã§ãŒãã«ããã®ã«ã¹ã¿ãã€ãº : ã§ã³ãã³ããæãŠããšå
ã»ã©èšè¿°ããŸããããšã¯èšãã³ãã³ããæã€ããããªãããŠã¹ã§æäœããæ¹ãæ©ããšãã話ã§ããããã§ã¯ã·ã§ãŒãã«ããããŒãã³ãã³ããèšå®ããæ¹æ³ãã玹ä»ããŸãã ã·ã§ãŒãã«ãããªã©ã®ã«ã¹ã¿ãã€ãºã¯cvimã®ããŒã¯ > Settingsããèšå®ã§ããŸãã cVimrcãšæžãããæ ã«èšå®ãèšè¿°ããŠãããŸããå ã¿ã«Helpã®ãªã³ã¯ãæŒããšãcVimã®ã·ã§ãŒãã«ããããŒã CSS ã®èšå®æ¹æ³ãäŸãèŒã£ãŠããŸãã®ã§è©³ããç¥ãããæ¹ã¯ãåç
§äžããã ããã§ã¯äŸãšããŠããã©ã¯ã¹ã®ããŒã ããŒãžãæ°èŠã¿ãã§éãããèšå®ããŠã¿ãŸãã 1.cVimrcã«èšå®ãèšè¿° map [ä»»æã®ããŒ]ã[æå] ã§ä»»æã®ããŒã«ç¹å®ã®æåãèšå®ã§ããã®ã§ãäžèšã®ããã«èšå®ããŸããããã§ a ããŒã« :tabnew https://www.rakus.co.jp/ ãå²ãåœãŠãããŸãã map a :tabnew https://www.rakus.co.jp/ 2.ç»é¢äžéšã®saveãã¿ã³ããèšå®ãä¿å ããã§èšå®ã¯å®äºã§ããããšã¯æ°èŠã®ã¿ããéããŠ(èšå®åã«éããŠããã¿ãã ãšèšå®ãåæ ãããŠããªããããªããŒããå¿
èŠ)ã a ãšæŒãã°äžèšã®ãããªç»é¢ã衚瀺ãããã¯ãã§ããããã« Enter ãæŒãã°ã©ã¯ã¹ã®ãããããŒãžãéãããã¯ãã§ãã äžèš ã®äŸã¯ã³ãã³ããå®è¡ãããã®ã§ãã£ããããã·ã§ãŒãã«ããããŒãæŒããããšã« Enter ãæŒãå¿
èŠããããŸããããcVimã§çšæãããŠããã·ã§ãŒãã«ãã( f ã j ã k ãªã©)ãªãããŒãæŒããã ãã§ç¹å®ã®æåãå®è¡ã§ããŸãã èšå®äŸ æåŸã«çŸåšã®ç§ã®èšå®ã玹ä»ããŸã(䜿ãå§ããŠéããªãã®ã§ãããŸã§èšå®ããŠãŸããã...) unmap x unmap [ããŒ] ãšèšå®ããããšã§ç¹å®ã®ããŒãã·ã§ãŒãã«ããã§äœ¿ããªãããŸã Command ãšééã£ãŠ x ãæŒããšcVimã«ç»é²ãããŠãããçŸåšã®ã¿ããéããã(closeTab)ãå®è¡ãããŠããŸãã®ã§ç¡å¹ã«ããŸãã(ã¿ã€ãããªããã°ãã話ãªãã§ããã©ã) map w Command + w ã®ãçŸåšã®ã¿ããéãããã w 1ã€ã§ã§ããããã«ããŠããŸã ãããã£ãããšã®1ã€ã2ããŒã®ã·ã§ãŒãã«ããã1ããŒã§è¡ãããããå®çŸããŠããèšå®ã§ã map e :duplicate e ãšæŒããåŸã« Enter ãæŒããšãçŸåšã®ã¿ããè€è£œããããå®è¡ã§ããŸã ãããã£ãããšã®1ã€ãååšããªãã·ã§ãŒãã«ããã䜿ãããããå®çŸããŠããèšå®ã§ã let hintcharacters "asdfgjklwertuioxcvnm" f ã§ããŒãžå
ã«ãªã³ã¯ãå²ãæ¯ãéã«äœ¿çšã§ããããŒãèšå®ããŠããŸã set noautofocus éããéã«å
¥åæ¬ã«ãã©ãŒã«ã¹ãããããŒãžã ãšãã·ã§ãŒãã«ããã䜿ãåã«å
¥åæ¬ããã§ã(escãæŒã)å¿
èŠããããŸããé¢åãªã®ã§ãå
¥åæ¬ã«ãã©ãŒã«ã¹ããªãããã«èšå®ããŠããŸã çµããã« ãã®èšäºã§ã¯cVimã«ã€ããŠã玹ä»ããŸãããããã§ã¯ CSS ãªã©ã®èšå®ã«ã¯è§ŠããŸããã§ããããä»ã«ãè²ã
ãšèšå®ãã§ããã®ã§æ°ã«ãªã£ãæ¹ã¯èª¿ã¹ãŠã¿ãŠãã ããã åè Google Chromeã§cVimã®èšå®ãã¢ããããŒã ã¯ããŒãªã²ãšãšãv2
id:radiocat ã§ããæè¿èªãã æžç±ã¯ ã«ã€ãŒã³ã»ãžã£ãŒã㌠ã§ãã å
æããITãšã³ãžãã¢ã«èªãã§ã»ããïŒæè¡æžã»ããžãã¹æžå€§è³ 2018ããçºè¡šãããŸããã www.shoeisha.co.jp ä»å¹Žã®å€§è³ã¯ä»¥äžã®éãæ±ºãŸã£ãããã§ãã æè¡æžéšé æ©æ¢°åŠç¿å
¥é ãã«ããã³æ©æ¢°åŠç¿ããæ·±å±€åŠç¿ãŸã§ äœè
: 倧é¢çä¹ çºå£²æ¥: 2016/12/01 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ããžãã¹æžéšé è·å Žã®åé¡å°å³ ~ãã§ãã©ãããå€ãã?ãæ®æ¥ã ããã»äŒããªãåãæ¹ äœè
: 沢枡 ããŸã çºå£²æ¥: 2016/09/16 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ãã®äŒç»ã¯ ç¿æ³³ç€Ÿ ããã®äž»å¬ã§æ¯å¹Žéå¬ãããŠããŸãããã®å¹Žã®æ¬ãªæè¡æžãç¥ãããšãã§ããã®ã§æ¥œãã¿ã«ããŠãããšã³ãžãã¢ã®äººãå€ãã®ã§ã¯ãªãã§ããããïŒ ãšããããã§ããã®ã€ãã³ãã«ãããã£ãŠåŒç€Ÿç€Ÿå
ã§ãããããã®æžç±ã«ã€ããŠã¢ã³ã±ãŒããåã£ãŠã¿ãŸãããéçºéšã®æ°äººããéšé·ãŸã§åœ¹è·ãè·æŽãåãããç¹ã«ããŒããå¶éãèšãããçŸæç¹ã§äººã«ããããã§ããæžç±ã1人æå€§5åãŸã§éžãã§ããããŸããããã ããã®èšäºã®ã¿ã€ãã«ã®éãåŒç€Ÿã¯ ã¯ã©ãŠã ãµãŒãã¹ã®äŒç€Ÿã§Webç³»ã®ãšã³ãžãã¢ãå€ããããæ¬å®¶ã®æç¥šçµæããã¯ãžã£ã³ã«ãå°ãéå®ãããŠããŸãç¹ã¯å¿µé ã«çœ®ããŠããã ããã°ãšæããŸããé¡ããŠã ã¯ã©ãŠã ãµãŒãã¹ã®ãšã³ãžãã¢ãèªãã§ã»ããïŒïŒãšæã£ãŠããïŒæè¡æžã»ããžãã¹æž 2018ãã§ãã RAKUS Developers ã«æãæ¯æãããŠãã1å æè¡æžéšéïŒãªãŒããã«ã³ãŒã ããžãã¹æžéšéïŒããšã¿çç£æ¹åŒ RAKUS Developers ãéžã¶ãªã¹ã¹ã¡ã®5å æè¡æžïŒé人ããã°ã©ã㌠æè¡æžïŒãã¶ã€ã³çµç¹ã®ã€ãããã æè¡æžïŒSCRUM BOOT CAMP THE BOOK ããžãã¹æžïŒãæ®æ¥ããªãããŒã ããšãæ®æ¥ã ããããŒã ãã®ç¿æ
£ ããžãã¹æžïŒå
¥ç€Ÿ1幎ç®ã®æç§æž RAKUS Developers ã®ã²ãšãã²ãšããå³éžãã1å è¥æãšã³ãžãã¢ãéžãã 6å 7ã€ã®ç¿æ
£ 99%ã®äººãããŠããªããã£ã1%ã®ä»äºã®ã³ã ã¬ãã¬ããžã»ãªãŒãã£ã³ã° ãšã³ãžãã¢ã説æäžæã«ããæ¬ ããªã³ã·ãã« ãªã ããã°ã©ãã³ã° çŸå Žã§äœ¿ãããããã° & ãã©ãã«ã·ã¥ãŒã Javaç·š çç·Žãšã³ãžãã¢ãéžãã 4å Javaèšèªã§åŠã¶ãã¶ã€ã³ãã¿ãŒã³å
¥é ã«ã³ãã³ä»äºè¡ æ
ç±ããã°ã©ã㌠40æ³ãéããããåãæ¹ãå€ããªãã ã¹ãã·ã£ãªã¹ããéžãã 4å å
¥é ã³ã³ãã¥ãŒã¿ç§åŠ ITãæ¯ããæè¡ãšçè«ã®åºç€ç¥è UNIXãšããèãæ¹ ãã¹ãé§åéçº ãããHaskellãã®ããåŠãŒã! ãã¶ã€ããŒãéžãã 4å ãŠãŒã¹ã±ãŒã¹é§åéçºå®è·µã¬ã€ã ãšã³ãžãã¢ã®ããã®å³è§£æè SOSã®ç¿ åé¡è§£æ±ºã©ã ãããŒãžã£ãŒãéžãã 5å ã±ã³ã»ãã©ã³ãã£ãŒã ãªãŒããŒã·ããè« 1åéãããžã£ãŒâäœã瀺ããã©ãè€ããã©ãå±ãã! ãªããããªãã®ä»äºã¯çµãããªãã®ã Inspired: 顧客ã®å¿ãæãã補åã®åµãæ¹ Joy, Inc. ãããã« RAKUS Developers ã«æãæ¯æãããŠãã1å ãŸãã¯æãå€ãã®ç¥šãéããæè¡æžã»ããžãã¹æžããããã玹ä»ããŸãã æè¡æžéšéïŒãªãŒããã«ã³ãŒã æ¬å®¶ã®æè¡æžã»ããžãã¹æžå€§è³ã§ã2014幎ã«å€§è³ã«èŒããæžç±ãå
šäœã§æå€ã®ç¥šæ°ãéããŸãããåçã¯2012幎ã§ãããããŸã ã«æ°äººããããã©ã³ãŸã§å€ãã®ãšã³ãžãã¢ãæ ãæã«ããŠããäžåã®åèã§ãã ãªãŒããã«ã³ãŒã âããè¯ãã³ãŒããæžãããã®ã·ã³ãã«ã§å®è·µçãªãã¯ãã㯠(Theory in practice) äœè
: Dustin Boswell , Trevor Foucher çºå£²æ¥: 2012/06/23 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ æç¥šè
ã®ã³ã¡ã³ã ããã°ã©ã ã«ãšã£ãŠã¯ãæç§æžçãªæ¬ã ãšæããŸããã èšãããããªãšã³ãžãã¢ã¯å
šå¡èªãã ã»ããããæ¬ã ããžãã¹æžéšéïŒ ããšã¿çç£æ¹åŒ ã«ã€ãŒã³ ã®ãã€ãã«ãšãèšããäžåã®åèãããžãã¹æžã®ãããã§ãããåçã¯1978幎ã§ãæ¥çãéžã°ã40幎éèªã¿ç¶ããããŠãããITæ¥çã§ã ã¢ãžã£ã€ã« éçºãäžå¿ãšããŠã«ã³ãã³ãªã©ã®åœ¢ã§åãå
¥ããããŠããŸããç«å Žãéžã°ããããžã¡ã³ãã«ãéçºã®çŸå Žã«ãæ¯æãããŠãã1åãšèšããŸãã ããšã¿çç£æ¹åŒââè±èŠæš¡ã®çµå¶ãããã㊠äœè
: 倧é èäž çºå£²æ¥: 1978/05/01 ã¡ãã£ã¢: åè¡æ¬ æç¥šè
ã®ã³ã¡ã³ã äœå幎ãåã«èããããæ¹åŒãããã°ãããä»ã®ãœãããŠã§ã¢éçºã«çããŠãããšããç¹ã¯ææ
šæ·±ãã èªèº«ã®ãœãããŠã§ã¢ éçºããã»ã¹ ãèããªããèªããšããŸã£ããè£œé æ¥ã«éå®ãããªãããšã ãšåãã£ãŠé©ãã RAKUS Developers ãéžã¶ãªã¹ã¹ã¡ã®5å æ¬¡ã«ãæããããããã®åº§ã¯éããŸããããå€ãã®ç¥šãéãããã¹ã5ãæç¥šè
ã®ã³ã¡ã³ããšåãããŠç޹ä»ããŸããã©ã®æ¬ããããã®1åã«å£ããªãåèã§ãéçºããŒã å
ã§è©±é¡ã«ãªã£ãŠèŠãåã£ãããèªæžäŒã®é¡æã«ãªã£ããããããšã§ç¥šãéãŸã£ãããã§ãã æè¡æžïŒé人 ããã°ã©ã㌠æ°è£
ç é人ããã°ã©ã㌠è·äººããåå ãžã®é äœè
: Andrew Hunt , David Thomas çºå£²æ¥: 2016/10/20 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ãšã³ãžãã¢ãåºæ¬ãšãã¹ãèãæ¹ãèŠç¹ãããããå«ãŸããŠãããçµéšãçµãŠããèªãã§ãæ°ããªæ°ä»ããããããæå
ã«ãããŠæ°å¹Žããã«èªã¿ããæ¬ã åå¿è
ã®èªåã«ãšã£ãŠã¯ã éã®åŒŸäžž ã¯ç¡ãããšããããšã«æ¹ããŠæ°ä»ããããäžåã§ããã æè¡æžïŒãã¶ã€ã³çµç¹ã®ã€ãããã ãã¶ã€ã³çµç¹ã®ã€ãããã ãã¶ã€ã³æèãé§åãããã€ã³ããŠã¹ããŒã ã®æ§ç¯&éçšã¬ã€ã äœè
: ããŒã¿ãŒã»ã¡ã«ãã«ã , ã¯ãªã¹ãã£ã³ã»ã¹ãã㌠çºå£²æ¥: 2017/12/22 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ UIããŒãã®ãã¶ã€ã³ããªãµãŒããUXèšèšãªã©åºç¯å²ã«æž¡ã£ãŠãããã¶ã€ããŒã®ä»äºã1人ã§ããªãã®ã¯çŸå®çã§ã¯ãªãããŠãŒã¶ãŒã®å©çšãšããžãã¹äžã®èŠæ±ãå
ããããã®ãã¶ã€ã³çµç¹ãã©ã®ããã«ããŠçµã¿ç«ãŠãŠããã®ãè¯ããã瀺åã«å¯ãã å
å®¹ã æè¡æžïŒSCRUM BOOT CAMP THE BOOK SCRUM BOOT CAMP THE BOOK äœè
: 西æ çŽäºº , æ°žç¬ çŸç© , å矜 éŸå€ªé çºå£²æ¥: 2013/02/13 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ã¹ã¯ã©ã ãšã¯äœãã»ã©ããã£ãæµãã§é²ãã§ããã®ããæŒ«ç»ã亀ããŠåããããã説æãããŠããŸãã ã¹ã¯ã©ã ããã£ãããšãç¡ã人åãã« ã¹ã¯ã©ã ãã©ããããã®ãã説æãã解説æžã®äžã§æããããããããããã§ããŠéèŠãªèŠçŽ ããã£ãã説æãããŠããã ããžãã¹æžïŒãæ®æ¥ããªãããŒã ããšãæ®æ¥ã ããããŒã ãã®ç¿æ
£ ãæ®æ¥ããªãããŒã ããšãæ®æ¥ã ããããŒã ãã®ç¿æ
£ (Asuka business & language book) äœè
: ç³å· åç· çºå£²æ¥: 2017/10/10 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ãæ®æ¥ããªãããŒã ããšãæ®æ¥ã ããããŒã ããæ¯èŒããªããæ§ã
ãªã±ãŒã¹ãäŸã«æžããŠããèªã¿ãããã§ãã ããã«å®è·µåºæ¥ãããšãå€ãã®ã§èªãã§ããã«è©ŠããŸãã ããžãã¹æžïŒå
¥ç€Ÿ1幎ç®ã®æç§æž å
¥ç€Ÿ1幎ç®ã®æç§æž äœè
: å²©ç¬ å€§èŒ çºå£²æ¥: 2011/05/20 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ é
å±ãããŠéããªãé ã¯çžè«ã質åã®ä»æ¹ã§æžæãå Žé¢ãããã®ã§åèã«ãªããŸããã 瀟äŒäººã®å¿æ§ãã«ã€ããŠå€§äºãªãã€ã³ããäžå¯§ã«è§£èª¬ãããŠããŸãã RAKUS Developers ã®ã²ãšãã²ãšããå³éžãã1å ãããŸã§ç޹ä»ããæžç±ä»¥å€ã«ããã®äººã®ç«å Žãä»äºå
容ã«ãã£ãŠãããããã®æžç±ã¯ãŸã ãŸã ãããããããŸããã¢ã³ã±ãŒãã§ã¯åèšã§100åè¿ãã®æžç±ãæç¥šãããŸãããããã§ããã£ãããªã®ã§æç¥šè
ã²ãšãã²ãšãã®æšããç¹ã«åŒ·ãã£ã1åããéžãã 人ã®ç«å Žãä»äºå
容ããšã«åé¡ããŠããã¯ã¢ããããŠã¿ãŸããã è¥æãšã³ãžãã¢ãéžãã 6å ååºã®ããªãŒããã«ã³ãŒããããå
¥ç€Ÿ1幎ç®ã®æç§æžããè¥æã®ç¥šãå€ãéãŸã£ãæžç±ã§ããããä»ã«ãããããã®åèãéžã°ããŸããããããã瀟äŒäººã«ãªã人ã«ããªã¹ã¹ã¡ã§ãããã§ãã 7ã€ã®ç¿æ
£ 7ã€ã®ç¿æ
£-æåã«ã¯ååããã£ã! äœè
: ã¹ãã£ãŒãã³ã»R. ã³ãŽã£ãŒ çºå£²æ¥: 1996/12/25 ã¡ãã£ã¢: åè¡æ¬ é©åãªå
çã§èªèº«ã®æé·ããããããŒãæç¢ºãã€èª¬åŸåãã圢ã§èšèŒãããŠãããæè¡ã«ããããèªèº«ã® ãã£ãªã¢ãã¹ ãªãæ¥ã
ã®è¡åã®ãã³ããšãªã 99%ã®äººãããŠããªããã£ã1%ã®ä»äºã®ã³ã 99%ã®äººãããŠããªããã£ã1%ã®ä»äºã®ã³ã (ãã£ã1%ã®ã³ãã·ãªãŒãº) äœè
: æ²³é è±å€ªé çºå£²æ¥: 2012/03/12 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ä»äºã«åãçµãããã®å§¿å¢ããšãã¹ãæ
床ãèšèŒãããŠããŸã ã¬ãã¬ããž ã»ãªãŒãã£ã³ã° ã¬ãã¬ããžã»ãªãŒãã£ã³ã° äœè
: æ¬ç° çŽä¹ çºå£²æ¥: 2013/05/02 ã¡ãã£ã¢: Kindle ç å¿ãã瀟äŒäººã§ãå€ãã®æ¬ãèªãã¹ããªã®ã§ããã®ããŠããŠã玹ä»ããŠããæ¬æžã¯ãšãŠãæçšã§ãã ãšã³ãžãã¢ã説æäžæã«ããæ¬ ãšã³ãžãã¢ã説æäžæã«ããæ¬ çžæã«å¿ããæè¡æ
å ±ãç¥èã®äŒãæ¹ äœè
: éç±³ çæµ© çºå£²æ¥: 2016/12/02 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ 顧客/ãªãã¬ãŒã¿ãŒ/çµå¶è
/æ°äºº...åæç¥èãããããç°ãªã人ã«ããŸã説æããã«ã¯ã©ãããã°ããããããããããæ²èŒãããŠããŸã ããªã³ã·ãã« ãªã ããã°ã©ãã³ã° ããªã³ã·ãã« ãªã ããã°ã©ãã³ã° 3幎ç®ãŸã§ã«èº«ã«ã€ããã äžç圹ç«ã€101ã®åçåå äœè
: äžç°å² çºå£²æ¥: 2017/04/27 ã¡ãã£ã¢: Kindle ç ãé人 ããã°ã©ã㌠ãã ããã°ã©ã ãç¥ãã¹ã97ã®ããšãçã®åèã®ãšãã»ã³ã¹ïŒïŒããªã³ã·ãã«ïŒãåçž®ãããŠããŸãã çŸå Žã§äœ¿ãã ãããã° & ãã©ãã«ã·ã¥ãŒã Java ç·š çŸå Žã§äœ¿ãããããã° & ãã©ãã«ã·ã¥ãŒã Javaç·š äœè
: å°å äžé , èå ç¯ , äœè€ èèŠ , ç³å£ äž , 飯山 æå² çºå£²æ¥: 2010/02/27 ã¡ãã£ã¢: 倧忬 å®è·µçãªãã©ãã«ã·ã¥ãŒãå¯Ÿå¿æ¹æ³ïŒ Java ã®ã¿ïŒãæžããŠããæ¬ãåå¿è
åãã« Java ãªãœãŒã¹ã®ä»çµã¿ãªã©ãåŠã¹ãã çç·Žãšã³ãžãã¢ãéžãã 4å çµéšãç©ãã ãšã³ãžãã¢ããã¯ãããã«çéãç®æãããŒãã®æžç±ãéžã°ããŠããŸããçµéšãšé åã¯éžã³ãŸããåŽã«çœ®ããŠé·ã掻çšã§ããããªæžç±ã°ããã§ãã Java èšèªã§åŠã¶ ãã¶ã€ã³ãã¿ãŒã³ å
¥é å¢è£æ¹èšçJavaèšèªã§åŠã¶ãã¶ã€ã³ãã¿ãŒã³å
¥é äœè
: çµå 浩 çºå£²æ¥: 2004/06/19 ã¡ãã£ã¢: 倧忬 èšãããšãããåèã§ Java ã§ä»äºããããªãèªãã§ããããæ¬ã ã«ã³ãã³ä»äºè¡ ã«ã³ãã³ä»äºè¡ äœè
: Marcus Hammarberg , Joakim Sundén çºå£²æ¥: 2016/03/26 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ã«ã³ãã³ã®ããæ¹ãããçè§£ããããšãã§ããã æ
ç± ããã°ã©ã㌠æ
ç±ããã°ã©ã㌠ãœãããŠã§ã¢éçºè
ã®å¹žããªçãæ¹ äœè
: Chad Fowler çºå£²æ¥: 2010/02/26 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ããã°ã©ã㌠ã«ãšã£ãŠå€§åãªããšãè©°ãŸã£ãŠããŠãèªããšååãã«ãªããã宿çã«èªã¿è¿ãããã" 40æ³ãéããããåãæ¹ãå€ããªãã 40æ³ãéããããåãæ¹ãå€ããªãã äœè
: äœã
æš åžžå€« çºå£²æ¥: 2017/05/24 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ è²ã
ãšçç¥ããŸããããšããè¥æã«ä»»ããŸããããšãã¯å
±æã§ããŸããã ã¹ãã·ã£ ãªã¹ããéžãã 4å 瀟å
ã§ãç¹ã«æè¡å¿åã®åŒ·ãã®ãšã³ãžãã¢ãéžãã æžç±ãéããŠã¿ãŸãããéžãã æ¬ã®ã¿ã€ãã«ããããã®å¿åãå£éèŠããæ°ãããŸãããããŠäœãããæç¥šè
ã®ã³ã¡ã³ããã¿ããªã¢ããããŠèšäºãç·šéããã»ããå§åãããŠããŸããŸããã å
¥é ã³ã³ãã¥ãŒã¿ç§åŠ ITãæ¯ããæè¡ãšçè«ã®åºç€ç¥è å
¥é ã³ã³ãã¥ãŒã¿ç§åŠ ITãæ¯ããæè¡ãšçè«ã®åºç€ç¥è äœè
: J.Glenn Brookshear çºå£²æ¥: 2017/03/15 ã¡ãã£ã¢: åè¡æ¬ ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ ã®æç§æžãåŠçæä»£ã«æ
å ±åŠéšã§ã¯ãªãã£ã人ã¯ããŸãäœç³»çã«åŠã¶æ©äŒããªãã®ã§èªãã§ãããæ¹ããããšãããèªãŸãªããšã©ããã§ITãšã³ãžãã¢ãšããŠé æã¡ã«ãªãã ã¢ãŒããã¯ã㣠ãèãããšãã ãã©ãã«ã·ã¥ãŒãã£ã³ã° ãããšããããè¯ãèšèšã ãœãŒã¹ã³ãŒã ã倿ãããšããªã©ãããããå Žé¢ã®åºç€ãšãªãç¥èãå«ãŸããã UNIX ãšããèãæ¹ UNIXãšããèãæ¹âãã®èšèšææ³ãšå²åŠ äœè
: Mike Gancarz çºå£²æ¥: 2001/02/01 ã¡ãã£ã¢: åè¡æ¬ è¯ãèšèšãèãããã£ããã«ãªã£ãæ¬ãæ§ã
ãªããã°ã©ãã³ã°ååãã ã©ã¯ ãã£ã¹ã¯ããã«åž°çããã ã©ã®ããã°ã©ãã³ã°ããŠããŒæ¬ãèªãã¹ããè¿·ã£ãããŸãã¯ãã®ïŒåãèªãããšãããããããã ãã¹ãé§åéçº ãã¹ãé§åéçº äœè
: Kent Beck çºå£²æ¥: 2017/10/14 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ åç䞻矩 ç㪠ãã¹ããã¡ãŒã¹ã ããããã©ããã¯å¥ãšããŠãèªåãã¹ããæžãããšã§åŸããã å¿çç ãªå®å¿æããé«é㪠ãã£ãŒãããã¯ã«ãŒã ãåããã®ãäœã£ãŠãã ãªãã¡ã¯ã¿ãªã³ã° ããšããTDDã®è¯ããæããŠã»ããã æ¬æžååã®å€åœé貚ãå®éã«åçµããããšã§ãã¿ã¹ã¯ã现ããïŒå·æãªãŸã§ã«çްããïŒåå²ããèªåãã¹ãã«æ¯ããªãã1ã€ãã€ãã£ã€ããŠããæ°æã¡ããããã²å³ãã£ãŠã»ããã ããã Haskell ãã®ããåŠãŒã! ãããHaskellãã®ããåŠãŒã! äœè
: Miran LipovaÄa çºå£²æ¥: 2012/05/23 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ Haskell èšèªã®å
¥éçèªã¿ç©ãšããŠä»£è¡šçãªæ¬ã§ãã å®éã«ã¢ããªãäœãããšãããŸã§ã¯ãããŸãããããã¡ã³ã¯ã¿ãŒã ã¢ãã ãšãã£ã Haskell ã§äžå¿çãªæŠå¿µãèªã¿ããã説æããŠãããŠããŸãã èªãã§ãããšäœãšãªãèªåã Haskell ã§äœãäœããããªæ°ãããŠããŸãã ãã¶ã€ããŒãéžãã 4å ãã¶ã€ããŒããã®ãªã¹ã¹ã¡ããã®ä»äºã«æ²¿ã£ãç¹åŸŽçãªæžç±ãéžã°ããŸãããWebç³»ãšã³ãžãã¢ãšããŠãæããŠããããæ¬ã䞊ãã§ããŸãã ãŠãŒã¹ã±ãŒã¹ é§åéçºå®è·µã¬ã€ã ãŠãŒã¹ã±ãŒã¹é§åéçºå®è·µã¬ã€ã äœè
: ãã°ã»ããŒãŒã³ããŒã° , ãããã»ã¹ããã¡ã³ çºå£²æ¥: 2016/01/28 ã¡ãã£ã¢: Kindle ç èŠæ±ãã ãã¡ã€ã³ ã¢ãã«ãš ãŠãŒã¹ã±ãŒã¹ ãäœãããœããã®ããæ¹ãæ®µéçã«æããã«ããŠãã ICONIX ããã»ã¹ã«ã€ããŠã®æ¬ã å®è·µãæ³å®ããå
·äœçãªå
容ã§ããããããŸããããã§ãªãããããããšå€±æããããããæžãããŠããã®ã§å¿åŒ·ãã ãšã³ãžãã¢ã®ããã®å³è§£æè ãšã³ãžãã¢ã®ããã®å³è§£æè åå
¥éè¬åº§ äœè
: éç±³çæµ© çºå£²æ¥: 2013/08/09 ã¡ãã£ã¢: Kindle ç èªåã®é ã®äžã®æŽçã®æ¹æ³ãèããããªã©å³ç€ºãããã¯ããã¯ãèŒã£ãŠããã®ã§ãæ¥åã§å®è·µããããã SOSã®ç¿ SOSã®ç¿ (äžå
¬æåº«) äœè
: äŒå 幞倪é çºå£²æ¥: 2012/11/22 ã¡ãã£ã¢: æåº« ãèªç€Ÿéçºããæ ªã®çºæ³šã·ã¹ãã ã誀åäœããŠ300ååã®æå€±ãåºããåå ã調ã¹ãã...ãããæãã§ãã ãããå®ã¯é¡§å®¢ãããUIã®ããã«ããããã§ãããUIãã¶ã€ãã®å人ãªã©ã¯èº«ã«æã¿ããšç³ããŠãããŸããã åé¡è§£æ±ºã©ã åé¡è§£æ±ºã©ãââããã£ãããããªããããã¡ã«ãããã²ããããã®æè¡ äœè
: äœè€ ãªãªã çºå£²æ¥: 2015/02/27 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ åºãé ãæãããããæ¬ ãããŒãžã£ãŒãéžãã 5å æåŸã«ãããŒãžã£ãŒããããªã¹ã¹ã¡ã®æžç±ãéžãã§ããããŸãããçµç¹ã®æ¹åæ§ã瀺ããŠãšã³ãžãã¢ãæããèŠç¹ã§éžã°ããŠããã®ãããããŸãããããããããžã¡ã³ããåŠãŒããšããŠãããšã³ãžãã¢ãèªã¿ããæžç±ã®æ°ã
ã§ãã ã±ã³ã»ãã©ã³ãã£ãŒã ãªãŒããŒã·ããè« ã±ã³ã»ãã©ã³ãã£ãŒã ãªãŒããŒã·ããè«[å®å
šç] äœè
: ã±ã³ã»ãã©ã³ãã£ãŒã , ã±ã³ã»ãã©ã³ãã£ãŒãã»ã«ã³ãã㌠çºå£²æ¥: 2012/12/07 ã¡ãã£ã¢: åè¡æ¬ ãªãŒããŒã管çè·çãããžã¡ã³ããæ
ãã¡ã³ãã¯èªãã§ããã¹ãåºæ¬æžã ãµãŒãã³ãåãªãŒãã·ãããéèŠã§ããã 1åéãããžã£ãŒâäœã瀺ããã©ãè€ããã©ãå±ãã! 1åéãããžã£ãŒâäœã瀺ããã©ãè€ããã©ãå±ãã! äœè
: K.ãã©ã³ãã£ãŒã , S.ãžã§ã³ãœã³ ã¡ãã£ã¢: åè¡æ¬ 管çè·ãšããŠã¡ã³ããŒãšæ¥ããæã«ïŒåãšããçãæéã§å€§ããªææãåŸãããã«ãèããããããã æ¬èªäœã¯å€ããïŒå鿝ãè¿ããªã©ããã«ãªããã®ããã£ãã ãªããããªãã®ä»äºã¯çµãããªãã®ã ãªããããªãã®ä»äºã¯çµãããªãã®ã äœè
: äžå³¶è¡ çºå£²æ¥: 2016/06/01 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ã¿ã¹ã¯ã®é²ãæ¹ã§ãæ©ã¿ã®æ¹ã段åããæªããŠã¿ã¹ã¯ãäžæãé²ãããªãæ¹ãž æéè¡ãä»äºè¡ã«ã€ããŠããããããæžããŠããŸãããšã³ãžãã¢ã®èæžã§ãããæ¥ã
ã®èªåãã¡ã®ç¶æ³ãšããããã話ãå€ããšæããŸãã Inspired: 顧客ã®å¿ãæãã補åã®åµãæ¹ [asin:B00TCM8TB4:detail] æ£ãã補åãšã¯äœããèãããããããŸãæ£ãã補åãäœãæ¹æ³ã解説ãããŠããã 補åã«ã¯ãšã³ãžãã¢ãªã³ã°ã¯ãã¡ããã®ããšããã®ä»ã«ã ãããã¯ããããžã¡ã³ã ãUX/UIãã¶ã€ã³ããããžã§ã¯ããããžã¡ã³ããã·ã¹ãã éçšããããã¯ã ããŒã±ãã£ã³ã° ãå¿
èŠã§éçºã§é¢ãããç¯å²ã®åºããç¥ãããšãã§ãããšå
±ã« ãã£ãªã¢ãã©ã³ ãèããéã«åèã«ã§ããã Joy, Inc. ãžã§ã€ã»ã€ã³ã¯ 圹è·ãéšçœ²ããªãå
šå¡äž»åœ¹ã®ãããžã¡ã³ã äœè
: ãªãã£ãŒãã»ã·ã§ãªãã³ çºå£²æ¥: 2016/12/20 ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ ã¢ãžã£ã€ã« ã®çæ³åã®ã€ã¡ãŒãžãæŽãã äžã®äžã«ããã»ã©ãŸã§ã«JOYãçªãè©°ããäŒç€Ÿãããäºã«é©ãããã®äŒç€Ÿãå£ã³ãã ãã§ä»äºãèã蟌ã¿ãããžãã¹ãæ©èœããŠããã®ã¯ãŸãã« win-win ãªé¢ä¿æ§ãçŽ æŽãããã®äžèšã ãããã« æå
ã®ã¢ã³ã±ãŒãçµæããªãããŠã¿ããšç޹ä»ãããæ¬ã¯ãŸã ãŸã ãããããããŸãããããã ãã§ã30åã«ãªã£ãã®ã§ä»åã¯ãããŸã§ã«ããããšæããŸãã30åããããŸãããç¥ããªãã¿ã€ãã«ã¯ç¡ããããã©ããèåãªæžç±ã°ããã ãšæããŸãããŸããæç¥šãã人ã®ä»äºå
容ã«åãããŠåé¡ããŠã¿ããšããããéžã°ããæžç±ã«ç¹åŸŽããã£ãã®ãè峿·±ãçµæã§ãããèªåã®èå³ã®ããåéã®æ¬ã§æªèªã®ãã®ãããã°èªãã§ã¿ãŠã¯ãããã§ããããããããŠæ©äŒãããã°ãŸãæ¥å¹Žã宿œããŠã¿ãŸãã®ã§ã楜ãã¿ã«ã
ã¯ããã« Node.js Express Socket.io ãã£ãããäœã£ãŠã¿ã 1. ã¡ãã»ãŒãžã®éåä¿¡ãšè¡šç€º ã¯ã©ã€ã¢ã³ãåŽã®åŠç ãµãŒãåŽã®åŠç 2. NodeãµãŒãã«ãªã¯ãšã¹ãããããšãã°ã€ã³ç»é¢ãžé·ç§» ã¯ã©ã€ã¢ã³ãåŽã®åŠç ãµãŒãåŽã®åŠç ãããã« åè ã¯ããã« id:d_shr ã§ãã æ
åœããŠããåæã®æ©èœãå®è£
ããäžã§ Node.js , Express , Socket.io ã«ã€ããŠåŠç¿ããæ©äŒããã£ãã®ã§ãŸãšããŠã¿ãããšæããŸãã Socket.ioã®ãµã³ãã«ã³ãŒããåèã«ç°¡åã«ãã£ããã¢ããªã®åºæ¬çãªæ©èœãäœã£ãŠã¿ãŸããã ç°¡åã«Webã¢ããªã±ãŒã·ã§ã³ãäœã£ãŠã¿ãããšããæ¹ãNode.jsãSocket.ioãåŠç¿ãå§ããæ¹ã®åèã«ãªãã°ãšæããŸãã Node.js Node.jsã«ã€ããŠã¯éå»ã®èšäºã§ç޹ä»ãããŠããã®ã§å²æããŸãã Node.jsの勉強会でお手軽にWebアプリを作った話 - RAKUS Developers Blog | ラクス エンジニアブログ 知ってる?nodemailerを使ってメールを送る方法 - RAKUS Developers Blog | ラクス エンジニアブログ Express Expressã¯Node.jsåãã®è»œé㪠ãã¬ãŒã ã¯ãŒã¯ ã§ãã ã¡ãã£ãšããã©ãããå€éšããã®èŠæ±ãšå
éšããžãã¯ã ãããã³ã° ããåºæ¬çãªã«ãŒãã£ã³ã°æ©èœãç°¡åã«ã§ããããexpress-generatorã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ã®éåãç°¡åã«äœãã䟿å©ãªãã€ã 詳ãã説æãäœ¿ãæ¹ã¯ å
¬åŒãµã€ã ã«æžãããŠããŸãã Socket.io ãµãŒããšã¯ã©ã€ã¢ã³ãéã®éä¿¡ã§éåæãã€åæ¹åã®éä¿¡ãå®çŸããããã® ãããã³ã« ã§ããWebSocketãæè»œã«å©çšã§ããã¢ãžã¥ãŒã«ã§ãã Node.jsã®npmã§æäŸãããŠããŸãã 詳ãã説æãäœ¿ãæ¹ã¯ å
¬åŒãµã€ã ã«æžãããŠããŸãã ãã£ãããäœã£ãŠã¿ã Node.js, Express, Socket.ioãå©çšããŠäœã£ãŠã¿ãŸããã å®è£
ããæ©èœã¯2ç¹ã§ãã 1. ã¡ãã»ãŒãžã®éåä¿¡ãšè¡šç€º 2. ãã°ã€ã³æ©èœ(NodeãµãŒãã«ãªã¯ ãšã¹ ãããããšãã°ã€ã³ç»é¢ãž) 1. ã¡ãã»ãŒãžã®éåä¿¡ãšè¡šç€º ãã£ããã®åºæ¬çãªæ©èœã Socket.ioã® Get started ããšãããããã£ãŠã¿ãŸããã ãã£ããã®ãµã³ãã«ã³ãŒãã§ã¡ãã»ãŒãžã®éåä¿¡ãã©ã®ããã«è¡ãã説æãããŠããŸãã ã¯ã©ã€ã¢ã³ãåŽã®åŠç ã¡ãã»ãŒãžã®è¡šç€ºãå
¥åæ¬ <!-- ã¡ãã»ãŒãžã®è¡šç€º --> < ul id = "messages" ></ ul > <!-- ã¡ãã»ãŒãžå
¥åæ¬ --> < form action = "#" id = "chatForm" > < input id = "m" autocomplete= "off" /> < button > Send </ button > </ form > åä¿¡ããã¡ãã»ãŒãžã衚瀺ããéšåãšéä¿¡ããã¡ãã»ãŒãžã®å
¥åæ¬ã§ãã ã¡ãã»ãŒãžéä¿¡ãåä¿¡ã¡ãã»ãŒãžã®è¡šç€ºããžã㯠<script src= "/socket.io/socket.io.js" ></script> <script src= "https://code.jquery.com/jquery-1.11.1.js" ></script> <script> var socket = io(); var userName = '' ; $( function () { // ã¡ãã»ãŒãžãéä¿¡ãã $( 'form' ).submit( function () { socket.emit( 'chat message' , $( '#m' ).val()); $( '#m' ).val( '' ); return false ; } ); // åä¿¡ããã¡ãã»ãŒãžã衚瀺 socket.on( 'chat message' , function (data) { var chat = data.userName + " : " + data.message; $( '#messages' ).append($( '<li>' ).text(chat)); } ); } ); </script> éä¿¡ãè¡ãããã®åºæ¬çãªæäœã¯ä»¥äžã®2ã€ã§ãã socket.emit('event', data); ã€ãã³ãã®çºç«ãæ¥ç¶ããŠããå
šå¡(éä¿¡è
å«ã)ãždataãéä¿¡ããŸãã socket.on('event', callback); ã€ãã³ãã®æ€ç¥ãéä¿¡ãããdataãåä¿¡ããŸãã ããã§ã¯ãå
¥åãããã¡ãã»ãŒãžã®Submitãã€ãã³ã chat messsage ãšããŠãµãŒããžã¡ãã»ãŒãžãéãããŸãã ã€ãã³ã chat messsage ãæ€ç¥ãããšããµãŒãã§åŠçããéä¿¡ãããŠããã¡ãã»ãŒãžãåãåã衚瀺ããŸãã ãµãŒãåŽã®åŠç ãµãŒãã«ã¢ã¯ã»ã¹ãããšå®è¡ãããéšåã // ã¢ãžã¥ãŒã«ãèªã¿èŸŒã var app = require( 'express' )(); var http = require( 'http' ).Server(app); var io = require( 'socket.io' )(http); // NodeãµãŒãã«ã¢ã¯ã»ã¹ããããšindex.htmlãžé·ç§» app.get( '/' , function (req, res) { res.sendFile(__dirname + '/index.html' ); } ); å¿
èŠãªã¢ãžã¥ãŒã«ã require ã§èªã¿èŸŒã¿ãindex.html(ã¯ã©ã€ã¢ã³ãã®åŠç)ãžé·ç§»ããŸãã ã¡ãã»ãŒãžã®éä¿¡ããžã㯠// ã¡ãã»ãŒãžéä¿¡åŠç socket.on( 'chat message' , function (msg) { io.emit( 'chat message' , msg); } ); ã¯ã©ã€ã¢ã³ãåŽããéä¿¡ãããŠããã¡ãã»ãŒãžããµãŒãã§åãåãåŠçãããšããã§ãã æ¥ç¶ããŠããã¯ã©ã€ã¢ã³ããžã¡ãã»ãŒãžãéä¿¡ããŸãã 以äžããã£ããã®åºæ¬çãªã¡ãã»ãŒãžã®ãããšãã®åŠçã«ãªããŸãã 2. NodeãµãŒãã«ãªã¯ ãšã¹ ãããããšãã°ã€ã³ç»é¢ãžé·ç§» çè§£ãæ·±ããããã«ãããŒã¿ã®ããåããããå°ãè€éã«ããŠã¿ãããšæãã€ãã§å®è£
ããŠã¿ãæ©èœã å®è£
ãããã®ä»¥äžã®ãšããã§ãã ãŠãŒã¶åãå
¥åããŠãã°ã€ã³ ãŠãŒã¶åã衚瀺ããŠã¡ãã»ãŒãžãèå¥ ããŒã¿ã®ããåãã«ãŠãŒã¶ã®æ
å ±ã远å ã¯ã©ã€ã¢ã³ãåŽã®åŠç ãã°ã€ã³ãã©ãŒã <!-- ãã°ã€ã³ãã©ãŒã --> < form id = "loginForm" > < div > < input id = "username" name = "username" type = "text" class = "form-control" placeholder= "ãŠãŒã¶å" autofocus /> < button id = "btnLogin" > ãã°ã€ã³ </ button > </ div > </ form > ãã°ã€ã³åŠç <script src= "/socket.io/socket.io.js" ></script> <script src= "https://code.jquery.com/jquery-1.11.1.js" ></script> <script> var socket = io(); var userName = '' ; $( function () { // ãã°ã€ã³ç»é¢è¡šç€º $( '#loginForm' ).show(); $( '#chatForm' ).hide(); // ãã°ã€ã³åŠç $( '#btnLogin' ).on( 'click' , function (e) { userName = $( '#username' ).val(); if (userName) { // ãã£ããç»é¢è¡šç€º $( '#loginForm' ).hide(); $( '#chatForm' ).show(); // ãŠãŒã¶æ
å ±ããµãŒããžéç¥ãã socket.emit( 'login' , { userID: socket.id, userName: userName } ); } e.preventDefault(); } ); } ); </script> äž»ã«è¿œå ãããã®ã¯ãã°ã€ã³æã®åŠçã§ãã ãã°ã€ã³ãã©ãŒã ãšãã£ãããã©ãŒã ã®åãæ¿ãåŠçãå
¥ãããããŠããŸãã socket.emit() ã§éä¿¡è
ã®socketã®idãšå
¥åããããŠãŒã¶åãéä¿¡ããŸãã ãµãŒãåŽã®åŠç io.on( 'connection' , function (socket) { var loginUsers = [] ; //ãã°ã€ã³ãŠãŒã¶ // ãã°ã€ã³åŠç socket.on( 'login' , function (userInfo) { loginUsers [ userInfo.userID ] = userInfo.userName; } ); // ã¡ãã»ãŒãžéä¿¡åŠç socket.on( 'chat message' , function (msg) { userName = loginUsers [ socket.id ] ; io.emit( 'chat message' , { userName: userName, message: msg } ); } ); } ); ãã°ã€ã³æã®åŠçãšã¡ãã»ãŒãžéä¿¡æã®ããŒã¿ã远å ããŠã¿ãŸããã ãŠãŒã¶ã®æ
å ±ãšããŠãœã±ããIDããŠãŒã¶IDãã¯ã©ã€ã¢ã³ãåŽã§ãã°ã€ã³æã«å
¥åãããå€ããŠãŒã¶åãæã£ãŠããŸãã ã¡ãã»ãŒãžã®éä¿¡æã«ã¯ãéä¿¡ãããŠãŒã¶ãšãã®ã¡ãã»ãŒãžãçŽã¥ããŠãã¯ã©ã€ã¢ã³ãåŽãžéä¿¡ããŸãã ããã§ãã°ã€ã³æ©èœããŠãŒã¶åã«ããèå¥ãå®çŸãããããã£ããã£ãœããªããŸããã ãããã« åŠç¿ããNode.js, Express, Socket.ioã䜿ã£ãŠå®éã«ã¢ãŠããããããŠã¿ãããšããŸãšããŠã¿ãŸããã ç°å¢æ§ç¯ãšå®è£
ããããç°¡åã§ããã«ã§ããŸãã ãã£ããã«ã€ããŠã¯ãããå°ãæ©èœæ¡åŒµãããã³ãŒãèªäœããã¬ã€ã«ããããšæããŸãã åè https://heavy-metal-explorer.com/approach_socket_io/ 今更だけどSocket.ioについてまとめてみる - blog::wnotes.net ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com