ããã«ã¡ã¯ãSREããŒã ã€ã³ãã©ãšã³ãžãã¢ã®ç¶¿åŒã§ãã æ¢åã®ã·ã¹ãã ãå·æ°ããéããªãã¥ãŒã¢ã«ãªã©ãè¡ãæãªã© ã€ã³ãã©æ§æãããããèããããšæããŸããã DB ã®ã¯ã©ãŠãåãæ€èšãããæ¹ãäžã«ã¯ããã£ãããã®ã§ã¯ãªãã§ããããã ã¡ãªããã»ãã¡ãªããã¯ããããšã¯æããŸããããŸãã¯çŸç¶ã®ã·ã¹ãã ãã ç§»è¡å¯èœããšããç¹ãæ°ã«ãªãããšæããŸãã ããã§æ¬æ¥ã¯ãªã³ãã¬ã EC2 ã€ã³ã¹ã¿ã³ã¹ã«ã€ã³ã¹ããŒã«ãã MySQL ããã AWS ã® RDS ã® MySQL ã«ç§»è¡ããæ¹æ³ã詊ããŠã¿ãã®ã§æžããŠãããããšæããŸãã ãŸããã£ãããªã®ã§ RDSã®æå·å ãäžç·ã«ãã£ãŠã¿ãããšæããŸãã æé ä»å㯠EC2 ã«ã€ã³ã¹ããŒã«ãã MySQL ãã RDS ã«ç§»è¡ããããšæããŸãã 宿œããæé ãšããŠã¯ä»¥äžã§ãã 1. RDS ãã©ã¡ãŒã¿ã°ã«ãŒãäœæ 2. RDS ã€ã³ã¹ã¿ã³ã¹äœæ 3. EC2 ã¬ããªã±ãŒã·ã§ã³äºåæºå 4. EC2 mysqldump ãšã¯ã¹ããŒã 5. RDS mysqldump ã€ã³ããŒã 6. EC2 â RDS ã¬ããªã±ãŒã·ã§ã³æ§ç¯ 7. ã¢ããªã±ãŒã·ã§ã³åãå
å€æŽ 8. EC2 â RDS ã¬ããªã±ãŒã·ã§ã³è§£é€ ã§ã¯æ©éæ§ç¯ããŠãããŸãã 1. RDSãã©ã¡ãŒã¿ã°ã«ãŒãäœæ ãŸã㯠RDS ã®ãã©ã¡ãŒã¿ã°ã«ãŒãã®äœæã§ãã ãã©ã¡ãŒã¿ã°ã«ãŒããšã¯ MySQL ã® my.cnf ã®ãããªãã®ã§ãã ãã©ã¡ãŒã¿ã°ã«ãŒãèªäœã¯ããã©ã«ãã®ã°ã«ãŒããååšããã®ã§ æåã«äœæããªããŠã RDS ã€ã³ã¹ã¿ã³ã¹ãäœæããããšãã§ããã®ã§ããã my.cnfãã«åçãšéçãªãã©ã¡ãŒã¿ããã£ãããã« äžã«ã¯ãã©ã¡ãŒã¿å€æŽåŸã«åèµ·åãå¿
èŠãªã±ãŒã¹ãããããã ã€ã³ã¹ã¿ã³ã¹äœææã«é©çšããŠãããšãããšæããŸãã ãã©ã¡ãŒã¿ã°ã«ãŒãã®äœææ¹æ³ãšããŠã¯ AWS ã³ã³ãœãŒã«ã«ãã°ã€ã³ãã 以äžã®æäœãè¡ããŸãã ãAmazon RDSã â ããã©ã¡ãŒã¿ã°ã«ãŒãã ã â ããã©ã¡ãŒã¿ã°ã«ãŒãã®äœæã äœæãå®äºããã ããã©ã¡ãŒã¿ã®ç·šéã ãã¿ã³ããå€ãç·šéããŸãã å°ãç§ãèšå®ãããã©ã¡ãŒã¿ãšããŠã¯ä»¥äžã§ãã ãã©ã¡ãŒã¿ èšå®å€ time_zone Asia/Tokyo sql_mode NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_results utf8 character_set_server utf8 skip-character-set-client-handshake 1 åºæ¬çã«ã¯æåã³ãŒããš time_zone é¢é£ã§ãã RDS ã¯ã€ã³ã¹ã¿ã³ã¹ãµã€ãºã«ãã£ãŠãèªåã§ãã©ã¡ãŒã¿ã倿ŽããŠããããããªã®ã§ äžèšã ãèšå®ããŠæ§åãèŠã€ã€ãªãœãŒã¹ãè¶³ããªããªã©ããã°æ¡åŒµããŠããããšæããŸãã 2. RDS ã€ã³ã¹ã¿ã³ã¹äœæ 次ã«ã€ã³ã¹ã¿ã³ã¹ã®äœæã§ãã èšå®ãããŒãžã§ã³ãã¹ããã¯ãšããŠã¯ä»¥äžã®ããã«ããŸããã ãã¹ããªã®ã§ã¹ããã¯ã¯äœãã«ããŠããŸãã é
ç® èšå®å€ ãšã³ãžã³ MySQL æ¬çªã®äºå® éçº/ãã¹ãçš DBãšã³ãžã³ã®ããŒãžã§ã³ MySQL 5.7.17 DBã€ã³ã¹ã¿ã³ã¹ã®ã¯ã©ã¹ db.m3.medium ã¹ãã¬ãŒãžã¿ã€ã ãã°ããã£ã㯠ã¹ãã¬ãŒãžå²ãåœãŠ 5GB DBãã©ã¡ãŒã¿ã°ã«ãŒã â» å
ã»ã©äœæãããã©ã¡ãŒã¿ã°ã«ãŒã æå·åãæå¹ ã¯ã DBã€ã³ã¹ã¿ã³ã¹ã®ã¯ã©ã¹ ãšãèµ€åã«ããŠãããŸãããRDS ã®æå·åãè¡ãã«ããã£ãŠ æå·åãå¯èœãªã€ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ ãšã ããã§ãªãã€ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ ãååšããŸãã ãããééããŠããŸããšæå·åãã§ããªãã®ã§ã泚æãã ããã ãŸãæå·åã«ã¯äžèšã®ãããªæ³šæãã¹ããã€ã³ãã幟ã€ããããŸãã äŸãã°ãæå·å㯠DB ã€ã³ã¹ã¿ã³ã¹ã® äœææã®ã¿ããæå¹ã«ã§ããªã ãªã©ã§ãã 詳现ã¯ä»¥äžã®å
¬åŒããŒãžãã芧ãã ããã Amazon RDS ãªãœãŒã¹ã®æå·å 3. EC2 ã¬ããªã±ãŒã·ã§ã³äºåæºå ã§ã¯ã¬ããªã±ãŒã·ã§ã³ãè¡ãããã®äºåæºåãããŠãããŸãããã ããã¯åçŽã« MySQL ã®ã¬ããªã±ãŒã·ã§ã³ãæ§ç¯ããæ¹æ³ãšäžç·ã§ãã ãŸãã¯ã¬ããªã±ãŒã·ã§ã³çšã®ãŠãŒã¶ãäœæããŸãã mysql> SHOW GRANTS for test@'%'; mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO test@`%` IDENTIFIED BY 'XXXXXXXX'; mysql> SHOW GRANTS for test@'%'; ã»ãŠãŒã¶ +----------+----------------+ | User | Host | +----------+----------------+ | test | % | +----------+----------------+ ã»æš©é +------------------------------------------------------------------+ | Grants for test@% | +------------------------------------------------------------------+ | GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%' | +------------------------------------------------------------------+ 次ã«ã¬ããªã±ãŒã·ã§ã³ã®èšå®ã®ãã my.cnf ã«ä»¥äžã远å ããŸãã server-id = 100 log-bin=mysql-bin èšå®åæ ã®ãã MySQL ãåèµ·åããŸãã $ sudo /etc/init.d/mysqld restart $ mysql -uroot -p ãã¹ã¿åŽã®èšå®ãã§ããŠãããã以äžã®ã³ãã³ãã§ç¢ºèªããŸãã mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.XXXXXX | XXX | | | | +------------------+----------+--------------+------------------+-------------------+ 4. EC2 mysqldump ãšã¯ã¹ããŒã ã¬ããªã±ãŒã·ã§ã³ã®äºåèšå®ãçµãã£ãã mysqldump ã§ãšã¯ã¹ããŒããè¡ããŸãã $ sudo mysqldump -u root -p --single-transaction --routines test > mysqldump-test.sql 5. RDS mysqldump ã€ã³ããŒã 次㯠RDS ã«ä»ååŸãã dump ãã¡ã€ã«ãã€ã³ããŒãããŸãã RDS ã®æ¥ç¶å
ã«é¢ããŠã¯ AWS ã³ã³ãœãŒã«ãã ãšã³ããã€ã³ã ãšèšèŒã®ããéšåãã確èªãã ããã â» source ã§ãã¡ã€ã«ãèªã¿èŸŒãéã¯å¯Ÿè±¡ãã¡ã€ã«ãã OSåŽã®ã«ã¬ã³ããã£ã¬ã¯ããªã«ååšããªããã°ãªããªãã®ã§ã泚æãã ããã $ mysql -h test.ckipnlucwhuv.ap-northeast-1.rds.amazonaws.com -P 3306 -u root -p mysql> use test; mysql> source mysqldump-test.sql ããã§ã€ã³ããŒãã¯å®äºã§ãã 6. EC2 â RDS ã¬ããªã±ãŒã·ã§ã³æ§ç¯ 次㫠EC2 ãã RDS ãžã®ã¬ããªã±ãŒã·ã§ã³ã®æ§ç¯ãè¡ããŸãã mysql> show slave status \G mysql> CALL mysql.rds_set_external_master ('EC2ã®MySQLã®IP',3306,'ãŠãŒã¶å','ãã¹ã¯ãŒã','show master statusã§ç¢ºèªãã **File**',show master statusã§ç¢ºèªãã **Position**,0); mysql> CALL mysql.rds_start_replication; mysql> show slave status \G 以äžã®é
ç®ãã©ã¡ãã**Yes**ã§ããã°ã¬ããªã±ãŒã·ã§ã³æ§ç¯å®äºã§ãã ã»Slave_IO_Running: Yes ã»Slave_SQL_Running: Yes 7. ã¢ããªã±ãŒã·ã§ã³åãå
å€æŽ ã¢ããªã±ãŒã·ã§ã³åŽã§ EC2 ã® MySQL ã«æ¥ç¶ããŠãããã®ãããã°å€æŽããŸãã ã¢ããªã±ãŒã·ã§ã³ä»¥å€ã«ãããŒã«ç³»ïŒphpMyadminãªã©ïŒã泚æã§ããã 8. EC2 â RDS ã¬ããªã±ãŒã·ã§ã³è§£é€ ã¢ããªã±ãŒã·ã§ã³åŽã®åãå
ã倿ŽããããæåŸã« EC2 â RDS éã® ã¬ããªã±ãŒã·ã§ã³ãè§£é€ããŠç§»è¡å®äºã§ãã mysql> CALL mysql.rds_reset_external_master; â» reset slave ã¯ãã å ã¿ã«ãã mysql> call mysql.rds_stop_replication; â» stopã¯ãã mysql> CALL mysql.rds_skip_repl_error; â» skipã¯ãã ããã§ç§»è¡ã¯å®äºã§ãã äœæ¥èªäœã¯ç°¡åã§ããç§»è¡å
ã®ããŒã¿ããŒã¹ã巚倧ã ã£ãããããšçµæ§æéãããããŸãã ãããµãŒãã¹åŽã§æ€èšãããŠããæ¹ã¯ã¿ã€ãã³ã°ãéèŠã§ããã ãŸãšã ä»å㯠ãªã³ãã¬ã»EC2 ã® MySQL ãã AWS RDS ãžã®ç§»è¡ã宿œããŸããã çŸåšãã¯ã©ãŠãç§»è¡ãé²ããŠããæ¹ãªã©åèã«ããŠé ããã°å¹žãã§ãã ãæž
芧é ãããããšãããããŸããã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããããŠé ããã°ãšæããŸãã ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
SREããŒã ãšã³ãžãã¢ã®é¿ä¹
接ã§ãã ä»åã¯Apacheã®403 Forbiddenã衚瀺ãããæã®ãã§ãã¯ãã€ã³ãã«ã€ããŠèšäºã«ããããšæããŸãã ç°å¢ Vagrant 1.9.5 CentOS Linux release 7.1.1503 (Core) Apache 2.4.6 åæ èšå®ãã¡ã€ã« ã/etc/httpd/conf/httpd.conf DocumentRoot ã/var/hoge ãã¹ãããŒãž ã/var/hoge/index.html äºè±¡ ãã¹ãããŒãžã衚瀺ããããšãããš403 Forbiddenã衚瀺ãããã ãã§ãã¯ãã€ã³ã â Apacheã®åèµ·åãããŠããªã èšå®ãã¡ã€ã«ã倿Žããå ŽåãApacheãåèµ·åããªããšå€æŽãåæ ãããŸããã ãã®ããåèµ·åããŠããªãå Žåã¯ã宿œããŸãã â åèµ·å $ sudo systemctl restart httpd.service â ãªããŒã Apacheãçµäºããããªãå Žåã¯ã以äžãå®è¡ããŠäžããã $ sudo systemctl reload httpd.service â¡ãã¡ã€ã«ã«èªã¿åãæš©éããªã æš©éã«ã¯ãææè
ããææã°ã«ãŒããããã®ä»ã®ãŠãŒã¶ãããããŸãããããã®ä»ã®ãŠãŒã¶ãã«èªã¿åãæš©ïŒrïŒãä»äžãããŠããã確èªããŠãã ããã â»ä»åã®å Žåã ãšã/var/hoge/index.html ã®æš©éã«ãªããŸãã â ãã®ä»ã®ãŠãŒã¶ã«èªã¿åãæš©ããªãå Žå $ ls -l /var/hoge/index.html -rw-r----- 1 root root 19 11æ 26 11:21 /var/hoge/index.html â å¯Ÿå¿ ãã¡ã€ã«ã«èªã¿åãæš©ãä»äžããŸãã $ sudo chmod o+r /var/hoge/index.html $ ls -l /var/hoge/index.html -rw-r--r-- 1 root root 19 11æ 26 11:21 /var/hoge/index.html â¢ãã£ã¬ã¯ããªã®æš©éã«å®è¡æš©ããªã DocumentRootãŸã§ã®åãã£ã¬ã¯ããªã§ãããã®ä»ã®ãŠãŒã¶ãã«å®è¡æš©ïŒxïŒãä»äžãããŠããã確èªããŠãã ããã ä»åã ãšã/ã, ã/varã, ã/var/hogeãã®3ã€ã®å
ã®ããããã«ãã£ã¬ã¯ããªã«å®è¡æš©ïŒxïŒããªããšããã¹ãããŒãžã衚瀺ãããŸããã â /var/hoge/ ã«å®è¡æš©ããªãå Žå $ ls -ld /var/hoge/ drwxr-xr-- 2 root root 23 11æ 26 20:22 /var/hoge/ â å¯Ÿå¿ ãã£ã¬ã¯ããªã«å®è¡æš©ãä»äžããã $ sudo chmod o+x /var/hoge $ ls -ld /var/hoge drwxr-xr-x 2 root root 23 11æ 26 20:22 /var/hoge/ â£httpd.confã®Directoryã»ã¯ã·ã§ã³ã®èšå®ãèŠçŽã Directoryã»ã¯ã·ã§ã³å
ã®Requireã®èšå®ã確èªããŸãããã â ãã¹ãŠã®ã¢ã¯ã»ã¹ãæåŠããå Žå $ cat /etc/httpd/conf/httpd.conf Options Indexes FollowSymLinks AllowOverride None Require all denied â å
šãŠã®ã¢ã¯ã»ã¹ãæåŠ ... äžèšã®ããã«Requireã§ãall deniedããšèšè¿°ãããšãã©ãããã§ãã¢ã¯ã»ã¹äžå¯ãšãªã£ãŠããŸããã¹ãããŒãžã衚瀺ãããŸããã ãã®ãã以äžã®ãããªæ¹æ³ã§ãã¹ãããŒãžãžã®ã¢ã¯ã»ã¹ãèš±å¯ããããšãã§ããŸãã â ãã¹ãŠã®ã¢ã¯ã»ã¹ãèš±å¯ããå Žå ... Options Indexes FollowSymLinks AllowOverride None Require all granted â å
šãŠã®ã¢ã¯ã»ã¹ãèš±å¯ ... â ç¹å®ã®IPã®ã¿ã¢ã¯ã»ã¹ãèš±å¯ããå Žå ... Options Indexes FollowSymLinks AllowOverride None Require 192.168.1.0/24 â æå®ããIPããã®ã¿ã¢ã¯ã»ã¹ãèš±å¯ ... â€SELinuxãæå¹ã«ãªã£ãŠãã SELinuxãæå¹ã«ãªã£ãŠããå ŽåãDocumentRootãžã®ã¢ã¯ã»ã¹ãæåŠãããŠããå¯èœæ§ããããŸãã SELinuxãå©çšããäºå®ããªãå Žåã¯ç¡å¹ã«èšå®ããŸãããã â€-1. SELinuxãç¡å¹ã«ããå Žå â SELinuxã®ç¶æ
ç¢ºèª $ getenforce Enforcing Enforcingãšè¡šç€ºãããå ŽåãSELinuxã¯æå¹ã«ãªã£ãŠããç¶æ
ã§ãã â SELinuxãç¡å¹ã«ãã SELinuxã®èšå®ãã¡ã€ã«ã¯ /etc/selinux/config ã«ãªãããããã¡ããç·šéããŸãã $ sudo vi /etc/selinux/config ... SELINUX=disabled â enforcing ãã disabled ã«å€æŽ ... â ãµãŒãåèµ·å SELinuxã®èšå®ãåæ ããããã«ãµãŒãã®åèµ·åãè¡ããŸãã $ sudo shutdown -r now â SELinuxã®ç¶æ
ãååºŠç¢ºèª $ getenforce Disabled Disabledãšè¡šç€ºãããã°ãSELinuxã¯ç¡å¹ã«å€æŽãããŠããŸãã â€-2. SELinuxãæå¹ã®ãŸãŸéçšããå Žå æ°ããDocumentRootã«ã¯SELinuxã®ã©ãã«ãä»ããå¿
èŠããããŸãã â å
DocumentRootã®ã©ãã«ãç¢ºèª $ ls -ld --context /var/www/html drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html â ã©ãã«ã®ä»äž æ°DocumentRootã«å
DocumentRootãšåãã©ãã«ãä»äžããŸãã $ sudo chcon system_u:object_r:httpd_sys_content_t:s0 /var/hoge -R â ã©ãã«ã®ç¢ºèª 以äžã®ããã«è¡šç€ºãããŠããã°ãå
DocumentRootãšåãã©ãã«ãä»äžãããŠããŸãã $ ls -ld --context /var/hoge drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/hoge ãŸãšã ä»åã¯Apacheã§403 Forbiddenã衚瀺ãããæã®ãã§ãã¯ãã€ã³ããèšäºã«ãããŠããã ããŸããã DocumentRootã®ãã¡ã€ã«ããã£ã¬ã¯ããªã®æš©éã確èªããŠãåé¡ãªããããªã®ã«ã©ãããŠè¡šç€ºãããªãã®…ãšæã£ãŠãããSELinuxã®åœ±é¿ãåå ã ã£ããšããèºãããããŸããã ããåãå Žæã§èºããŠããæ¹ã«å°ãã§ãåèã«ãªããŸããã幞ãã§ãã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããããŠé ããã°ãšæããŸãã ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
ã¯ããã« ããã«ã¡ã¯ãSREããŒã ãšã³ãžãã¢ã®è¥¿èïŒ@yasuhiro1711ïŒã§ãã 2016幎6æãã AWSãRoute53ã«ãŠãã«ãããªã¥ãŒå¿çãã§ããããã«ãªããŸããã Amazon Route 53 announces support for multivalue answers in response to DNS queries ã§ããããã«ãªã£ãŠããããªãæ¥ãçµã£ãŠããŸããŸããããå°ã詊ããŠã¿ãã®ã§ãã®èšé²ãšãªããŸãã ãã®ãã¥ãŒã¹ã®äœãé©ãã ã£ãããšãããšã ãããŸã§ããRoute53ã§ã¯ããªã¥ãŒïŒAã¬ã³ãŒãïŒã«è€æ°ç»é²ããããšã§ãDNSã©ãŠã³ãããã³ã¯å©çšå¯èœã§ãã£ãã ããâ»ããã§ã¯ããDNSã©ãŠã³ãããã³ããšããèšèã«éçŽããŸããããRouting Policyãæ¬¡ç¬¬ã§è²ã
ãªæ©èœããããŸãã ãã«ãããªã¥ãŒå¿çã®æ©èœã«ãããããªã¥ãŒïŒAã¬ã³ãŒãïŒã®ç»é²IPã®äžã€äžã€ã«å¯ŸããŠããRouting Policyããèšå®ã§ããããã«ãªã£ãã ãã®èšå®ã®çµã¿åããã«ãããELBãªã©ã®å°å
¥ãã³ã¹ãé¢ãèšèšã®é¢ã§ã§ããªãå Žåã«ã§ããRoute53ãå©çšããŠããçšåºŠæè»ã«è² è·åæ£ïŒéå®çãªïŒãã§ããããã«ãªããŸããã ã§ã¯ããã«ãããªã¥ãŒå¿çã詊ããŠãããŸãããã å
容 webãµãŒãã3å°ã®æºå äžèš3å°ã®ãµãŒãããhealth checkãç»é² 3å°ã®ãµãŒãã®IPãæ¢åã®ãã·ã³ã°ã«ããªã¥ãŒãã§ç»é² 3å°ã®ãµãŒãã®IPãããã«ãããªã¥ãŒãã§ç»é² ããã«ãããªã¥ãŒãã«ãhealth checkã远å ãhealth checkãã§èœã¡ããµãŒããèªåã§Route53ã®å¿çããæ¶ãããã®åäœç¢ºèª webãµãŒãã3å°ã®æºå 以äžã®ããã«webãµãŒãæºåããŸãã ä»åã¯ã·ã³ãã«ã«EC2ã§ç«ãŠãŠããŸãã ãµãŒã IP server1 172.25.0.111|ãã server2 172.25.0.112 server3 172.25.0.113 äžèš3å°ã®ãµãŒããhealth checkç»é² AWS console > Route53 > Health checks ã«ãŠç»é²ããŸãã Health checksã¯ãããŒã«ã«IPã«ã¯å¯Ÿå¿ããŠããªãã®ã§ã泚æãã ããã 3å°ã®ãµãŒãã®IPãæ¢åã®ãã·ã³ã°ã«ããªã¥ãŒãã§ç»é² Route53ã«ãŠç»é²ããŸããããã¬ã³ãŒãã«å¯ŸããŠè€æ°ã®IPãèšå®ã§ããŸãã ãããã¬ã³ãŒããã¯ãåãååã§ã¯è€æ°äœæã§ããŸããã§ããã digã®çµæã¯ä»¥äžã§ãã # dig +short single_value.xxxxxxxx.net 172.25.0.111 172.25.0.112 172.25.0.113 3å°ãåºãŠããŠããŸããã 3å°ã®ãµãŒãã®IPãããã«ãããªã¥ãŒãã§ç»é² ç¶ããŠãã«ãããªã¥ãŒã詊ããŠã¿ãŸãããã ãã¡ããRoute53ã«ãŠç»é²ããŸããããã¬ã³ãŒãã«å¯ŸããŠã1ã€ã®IPã ãèšå®ããŸãããã¬ã³ãŒããåããŠè€æ°ç»é²ãã§ããããã«ãªããŸããããRouting PolicyãããMultivalue Answerãã«èšå®ããããšã§ããããã¬ã³ãŒããã¯ãåãååã§è€æ°äœæå¯èœã«ãªããŸãã setIDã¯ããŠããŒã¯IDã«ãªãã°åä»ãã«ãŒã«ã¯èªç±ã§ãã 3å°ç»é²ããŸãããdigçµæã¯ä»¥äžã§ãã # dig +short multi.xxxxxxxx.net 172.25.0.113 172.25.0.111 172.25.0.112 3å°åºãŠããŸããå
ã»ã©ã® single_valueããšãŸã£ããåãã§ããã ããã«ãããªã¥ãŒãã«ãhealth checkã远å ç¶ããŠãã«ãããªã¥ãŒãšããŠç»é²ãã3ã¬ã³ãŒãã«ããhealth checkãã远å ããŸãã ãAssociate with Health Check:ããYESã«å€æŽã ãHealth Check to Associate:ãã«ãæåã«èšå®ãããã«ã¹ãã§ãã¯ãèšå®ã 以äžã®ããã«health check ID ãã€ãã°OKã ãhealth checkãã§èœã¡ããµãŒããèªåã§Route53ã®å¿çããæ¶ãããã®åäœç¢ºèª multi2ã®ãhealth checkããwebãµãŒãã忢ããããç£èŠå¯Ÿè±¡ã®ãã¡ã€ã«ãåé€ãªã©ããfailãããŸãã failã確èªãã³ãœãŒã«ã§ã¯ä»¥äžã®ããã«ãUnhealthyããšãªããŸãã digã§ç¢ºèª # dig +short multi.xxxxxxxx.net 172.25.0.113 172.25.0.111 digçµæãããããhealth checkãã§èœã¡ããµãŒãã¯æ¶ããŸããã䟿å©ã§ããã æåŸã« Route53æ©èœã®ã¿ã§ãLBã«äŒŒããåäœããããããšãã§ããããã«ãªããŸãããä»åŸãŸããŸããhealth checkããšé£åããæ©èœã¯åçš®ãµãŒãã¹ã§åºãŠããã®ã§ã¯ãªãããšæã£ãŠããŸãã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããããŠé ããã°ãšæããŸãã ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
ããã«ã¡ã¯ãSREããŒã ã€ã³ãã©ãšã³ãžãã¢ã®ç¶¿åŒã§ãã æ¬æ¥ã¯ goofys ãšãã AWS S3 ããŠã³ãçšãœãªã¥ãŒã·ã§ã³ã® ã€ã³ã¹ããŒã«ã«ã€ããŠèšèŒããããšæããŸãã goofysãšã¯ goofys ãšã¯ãµãŒããã S3 ãã±ããããã¡ã€ã«ã·ã¹ãã ã®ããã«ããŠã³ãããŠã OSäžãããã£ã¬ã¯ããªã®æ§ã«äœ¿çšã§ãããœãªã¥ãŒã·ã§ã³ã§ãã S3 ã®äœ¿ç𿹿³ãšããŠã¯ã 1. éçãŠã§ããµã€ããã¹ãã£ã³ã°æ©èœãæå¹ã«ã㊠S3 åŽã§ãã¹ãã£ã³ã°ãè¡ã 2. ãã°ãªã©ãæ ŒçŽãã ïŒaws cli ãªã©ãçšããŠïŒ ãšãã£ããã®ãäžè¬çã ãšæããŸãã ãã ä»åã® goofys ãçšãããš OSåŽããããŠã³ããã§ããã®ã§ã Linux ã®ãcpã ã³ãã³ãã ãlsã ã³ãã³ãã䜿çšå¯èœãšãªããäœ¿ãæ¹ã®å¹
ãåºãããŸãã åæ§ã®æ©èœãæã€ãœãªã¥ãŒã·ã§ã³ã®äžã€ã« s3fs ãšãããã®ãããã ç§ãä»ãŸã§ãã¡ãã䜿ã£ãŠããã®ã§ãããããããé
ããã æåŸã« goofys ãš s3fs ã§ã®ç°¡åãªé床æ€èšŒãè¡ã£ãã®ã§ã æ¯éåèã«ããŠé ããããšæããŸãã 1. goofysã€ã³ã¹ããŒã« æ©é goofys ã®ã€ã³ã¹ããŒã«ããåããŠãããŸãã 1-1. fuse ãŸã㯠fuse ãã€ã³ã¹ããŒã«ããŸãã # yum install fuse å
ã
fuse 㯠s3fs ã§å¿
èŠã ã£ããããœãŒã¹ã§ã€ã³ã¹ããŒã«ããŠããŸããã ãã goofys å°å
¥åŸã«ãã S3ãã±ãããããŠã³ãããæã§äžæããããªãã£ããã ãœãŒã¹ã§ã€ã³ã¹ããŒã«ãã fuse ã remove ãã yum ã§å
¥ãçŽããŠãããŸãã ãã fuse ããœãŒã¹ã§ã€ã³ã¹ããŒã«ãããŠããç°å¢ã§ goofys ãäžæããããªããšããæ¹ã¯ãããã±ãŒãžãã詊ããã ããã 1-2. go 次㯠go ã®ã€ã³ã¹ããŒã«ã§ãã GOROOT ãš GOPATH 㯠/usr/local ã«é
眮ããããšæããŸãã GOROOT=/usr/local/go GOPATH=/usr/local/gocode # wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz # tar -xzf go1.8.3.linux-amd64.tar.gz # mv go /usr/local # mkdir /usr/local/gocode # mkdir /usr/local/gocode/{src,bin,pkg} 次ã¯ç°å¢å€æ°ã®èšå®ã§ãã # echo export GOROOT=/usr/local/go >> ~/.bash_profile # echo export GOPATH=/usr/local/gocode >> ~/.bash_profile # source ~/.bash_profile # echo export PATH=$PATH:$GOROOT/bin:$GOPATH/bin >> ~/.bash_profile # source ~/.bash_profile # go version go version go1.8.3 linux/amd64 go ã®å°å
¥ãå®äºããŸããã 1-3. goofys ã§ã¯æ©é goofys ãå°å
¥ããŠãããããšæããŸãã # go get github.com/kahing/goofys # go install github.com/kahing/goofys goofyså°å
¥ãå®äºããŸããã ããã§ãã€ãŸã¥ããã®ã§å
±æãããŠé ããããŸãã æåæ§ç¯ããéã«äœãèããã«ãWEBãã諞å
茩æ¹ã®èšäºã«ããã³ãã³ãã ãã®ãŸãŸå®è¡ããã®ã§ããèšäºãå€ãã ææ°ã§ã¯ãªãããŒãžã§ã³ã® goofys ãã€ã³ã¹ããŒã«ãããŠããŸããŸããã åé¡ãªãã¹ã£ïŒãšãã®ãŸãŸé²ããŠããŸã£ãŠããã®ã§ãããçµæäžæãããããã çç±ãšããŠã¯ Content-Type ã§ãã ææ°ã® goofys ã§ã¯ –use-content-type ãšãã /etc/mime.types ã«åŸã£ãŠ Content-Type ãèšå®ããŠããããªãã·ã§ã³ãããã®ã§ãã å€ãããŒãžã§ã³ã«ã¯ããããªãã goofys çµç±ã§ç»åãªã©ãæ ŒçŽããæã S3åŽã§ã®ã·ã¹ãã ã¡ã¿ããŒã¿ã binary ãšãªã ç»åã衚瀺ãããªããšããèŠæžãèããããããŸããã çšéã«ãã£ãŠã¯å¿
èŠãªããšã¯æããŸãããããå¿
èŠã§ããã°ãæ°ãã€ãäžããã å ã¿ã«S3ãã±ããåŽã®ãã±ããããªã·ãŒãæ¯éãããŠãããŠäžããã Content-Type ãèšå®ããåŸã®è©±ã§ããã jpeg ãæ ŒçŽããã®ã«ãªãã S3 åŽã®ã·ã¹ãã ã¡ã¿ããŒã¿ã§ xml ãšèªèãã Content-Type ãïŒïŒ ãšæ©ãã§ããã®ã§ããçŽ çŽã« ã403 permission deniedã ãæ ŒçŽãããŠããã ãã§ããã 1-4. awscli 次㯠awscli ãå°å
¥ããŸãã # curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" # python3.5 get-pip.py # pip install awscli aws cliã®ã»ããã¢ããã宿œããŸãã # aws configure AWS Access Key ID [********************]: XXXXXXXXXXXXXXXXXX AWS Secret Access Key [********************]: XXXXXXXXXXXXXXXXXX Default region name [ap-northeast-1]: ap-northeast-1 Default output format [None]: json ãããŸã§å¿
èŠãªãã®ã¯å
šãŠã€ã³ã¹ããŒã«ããŸããã äŸã«ãã£ãŠãŸããã®ããã§ãã€ãŸã¥ããŠãããŸãã ããã¯å®å
šã« goofys ãšã¯çŽæ¥é¢ä¿ã®ãªãåé¡ãªã®ã§è©³çްã¯èšèŒèŽããŸãããã curl ã®ããã±ãŒãž ãäœãã£ãããpython 2.6ã ãš pip install ã§ syntax error ãçºçããããªã©æ£ã
ã§ããããŸããã ä»ã§ã¯ããæãåºã§ãã ã§ã¯ããŠã³ãããŠãããŸãã 2. ããŠã³ã ä»åã¯ãªããŒãããŠãã¢ã³ããŠã³ããããªãããã« fstab ã«èšèŒããŸãã # cat /etc/fstab LABEL=centos_root / ext4 defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 /swapfile swap swap defaults 0 0 /usr/local/gocode/bin/goofys#goofys-test. /goofys fuse _netdev,allow_other,--file-mode=0666,-uid=80,--gid=80,--region=ap-northeast-1,--use-content-type 0 0 èšå®ãšããŠã¯ä»¥äžã§ãã ãªãã·ã§ã³ 説æ _netdev ãããã¯ãŒã¯ãæå¹ã«ãªããŸã§ããŠã³ããåŸ
ã€ããæå® allow_other ããŠã³ããããŠãŒã¶ä»¥å€ã®ãŠãŒã¶ãå©çšã§ããããã«ãã –file-mode ããŠã³ãããéã®ãã¡ã€ã«æš©éãèšå® –uid ããŠã³ããããŠãŒã¶ãŒIDãæå® –gid ããŠã³ãããã°ã«ãŒãIDãæå® –region ãªãŒãžã§ã³ãæå®ãéåžžã¯èªåã§æ€åºããããããã§ããããã©ã«ã㯠us-east-1 ãšã®ããš –use-content-type /etc/mime.types ã«åŸã£ãŠ Content-Type ãèšå® ã§ã¯ããŠã³ãã宿œããåºæ¥ãŠãããã確èªããŸãã # mount -a # mount goofys-test on /goofys type fuse (rw,allow_other,default_permissions) åºæ¥ãŸããã ã§ã¯ ls ã³ãã³ããçºè¡ããŠã¿ãŸãã # ls -l /goofys drwxr-xr-x 2 www www 4096 2017-11-10 14:47 test åç
§ãå¯èœã§ããã 3. s3fs vs goofys é床æ€èšŒ ç°¡åã«é床æ€èšŒããŠã¿ãŸããã åç
§ç³»ã§ ls ã³ãã³ãããæžã蟌ã¿ç³»ã§ cp ã³ãã³ãã10åçšçºè¡ãã ããããã§é床ããšããŸãã å°ã cp ã³ãã³ãã§ã³ããŒããå
ãã¡ã€ã«ã®ãµã€ãºã¯çŽ5MBã§ãã çµæã¯ä»¥äžã§ãã ls çµæ åæ° goofys s3fs 1 4 sec 30 sec 2 2 sec 34 sec 3 2 sec 29 sec 4 2 sec 36 sec 5 2 sec 31 sec 6 2 sec 34 sec 7 2 sec 31 sec 8 1 sec 32 sec 9 2 sec 35 sec 10 4 sec 33 sec å¹³å 2 sec 33 sec cp çµæ åæ° goofys s3fs 1 1 sec 1 sec 2 0 sec 1 sec 3 1 sec 1 sec 4 2 sec 2 sec 5 0 sec 1 sec 6 3 sec 2 sec 7 0 sec 2 sec 8 0 sec 2 sec 9 1 sec 2 sec 10 1 sec 2 sec å¹³å 1 sec 2 sec ç¹ã« ls ã«é¢ããŠã¯ goofys ãå§åçã«æ©ãã§ããã ããã§ã¹ãã¬ã¹ãè§£æ¶ãããŸãã ãŸãšã ä»å㯠goofys ã®ã€ã³ã¹ããŒã«ãã s3fs ãšã®é床æ€èšŒã宿œããŸããã æ§ç¯èªäœã¯äžè»¢ã³å
«èµ·ãã§ããããããçµæã§åºãŠè¯ãã£ãã§ãã s3fs ã䜿çšããŠããã£ãããæ¹ã¯æ¯éåèã«ããŠããã ãããšå¬ããã§ãã ãæž
芧é ãããããšãããããŸããã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããããŠé ããã°ãšæããŸãã ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
ããã«ã¡ã¯ãSREããŒã ãšã³ãžãã¢ã®è¥¿èïŒ@yasuhiro1711ïŒã§ããä»å¹Ž4æãŠãšãã£ã³ã°ããŒã¯ã¯ãµã€ããäžéšHTTPSããå®å
šHTTPSã«ç§»è¡èŽããŸãããç§»è¡ããããšã«ãã£ãŠãããå®å¿ããŠãŠãŒã¶ã«ããµã€ãããå©çšé ããããã«ãªã£ãŠãããŸãã å®å
šHTTPSåïŒåžžæSSL/TLSåïŒãããžã§ã¯ãã宿œãã4æããããŸããŸãåžžæSSLåã¯webãµãŒãã¹ã«ã¯å¿
é ã«ãªã£ãŠããŠãããŸãããããã®å¿
èŠæ§ãšå¿
èŠäœæ¥ã«ã€ããŠæžããããšæããŸãã å®å
šHTTPSåïŒåžžæSSL/TLSåïŒãå¿
èŠãªçç± å®å
šHTTPSåïŒåžžæSSL/TLSåïŒã¯ãªãå¿
èŠãªã®ã§ãããããåŒç€Ÿã§ã¯äž»ã«ä»¥äžã®ããã«èããŸããã 1, ã»ãã¥ãªãã£åäžãçèŽããªãããŸããé²ã ç»ååŒçšïŒGoogle Developers HTTPã§ã¯èª°ããç°¡åã«éä¿¡ã®çèŽããªãããŸããå¯èœã§ããäžéã§ããã®åé¡ã¯å€§ããªåé¡ãšãªã£ãŠãããGoogleãå§ããšããäŒæ¥ãã»ãã¥ãªãã£å£äœãªã©ããéä¿¡ã«ã»ãã¥ãªãã£ã確ä¿ãããHTTPSã®å©çšãæšå¥šãããããã«ãªããŸããã ãã°ã€ã³ãåãåãããæçš¿ãã©ãŒã ãªã©ã®å
¥åããŒãžçã®äžéšãhttpsã«ããã ãã§ãªãããã¹ãŠã®ããŒãžãSSL/TLSåã«ããããšã§cookieãžã®äžæ£ã¢ã¯ã»ã¹ã鲿¢ããããšãå¯èœã«ãªãããŠãŒã¶ãã»ãã¥ãªãã£ãªã¹ã¯ã®è
åšããå®ãããšãå¯èœã§ãã 2, å®å
šHTTPSãµã€ããSEOã§åªéãã Official Google Webmaster Central Blog: HTTPS as a ranking signal æåã«ããã«é¢ããçºè¡šããããã®ã¯ã2014幎8æã®ããšã§ãããã»ãã¥ãªãã£åäžã課é¡ã®Googleã¯èªç€ŸãµãŒãã¹ã ãã§ãªããGoogleæ€çŽ¢ãéããäžã®äžã®ãã¹ãŠã®ãµã€ããã»ãã¥ã¢ã«ããŠããããšãæ¹éãšããŸãã ãã®åŸã2015幎ããGoogleæ€çŽ¢ã«ãŠæ¬æ©èœã¯å®è£
ãããHTTPSãµã€ãã§ããããšãæ€çŽ¢ã©ã³ãã³ã°ã«è¯ã圱é¿ãäžããããšãšãªã£ãŠãããŸãããåœåã¯HTTPSã§ããããšãã©ãã ã圱é¿ãããã¯çåèŠãããŠãããšããããããŸããããä»ã§ã¯åžžèã«ãªãã€ã€ãããŸãã 3, Google ChromeãFirefoxçãåçš®ãã©ãŠã¶ã§HTTPæ¥ç¶ãžã®èŠååŒ·åæ©èœãç¶ã
ç»ååŒçšïŒGoogle Online Security Blog: Next Steps Toward More Connection Security Firefoxã2017幎3æã«ã Google Chromeã2017幎10æïŒGoogle chrome 62ïŒããããããããHTTPã§æ¥ç¶ããå Žåãã¢ãã¬ã¹ããŒã§èŠåã衚瀺ãããããã«å€æŽãããŸãããããã«ãããŠãŒã¶ã®é²èЧã«ãããŠããããã®ãµã€ãã¯ã»ãã¥ãªãã£ã«äžå®ããããµã€ããªãã ããšèªèããããããã«ãªããŸãããã©ãŠã¶åŽãããHTTPã®éæšå¥šãæ©æã®HTTPSãžã®ç§»è¡ãšããã®ãã匷å¶ãããŠããŠããŸãã 4, HTTP/2ãåãããŠå°å
¥ããããšã§é«éåãèŠèŸŒãã ã»ãã¥ãªãã£ã®çç±ããHTTPSãæšå¥šããã¯ããã話ãããŠããŸãããããã®äžã§ç»å Žãããããæè¡ããããŸãããããHTTP/2ã§ããç§ã¯ããã¯webã®æŽå²ã®äžã§åããŠãããã®ãã€ã³ã¿ãŒããããé²åãããããšãã§ããæè¡ã ãšæã£ãŠããŸãããããŸã§ã¯ã ãHTTPSã¯é
ãã ãšããåžžèã¿ãããªãã®ããããŸããããHTTP/2ãå©çšããããšã§HTTPSã¯é«éã«ããããšãå¯èœã§ãã以äžã®ãµã€ããã芧ãã ããã HTTP vs HTTPS â Test them both yourself https://www.httpvshttps.com/ ãã®ãµã€ããèŠãŠããã ããšHTTPSãããé«éåãããŠããããšã宿ã§ãããšæããŸããHTTP/2ã§ã¯ããµãŒããšã¯ã©ã€ã¢ã³ãéã§è¡ãããå¿çã®ä»çµã¿ã倿Žããããããæ®éã¯ãªãŒããŒããããšãªãæå·åã®ãããšããå
¥ããŠãå
šäœã§èŠããšé«éã§ã®éä¿¡ãå¯èœãšãªãããã§ãã ãã®èŸºãã®è©³çްã¯ã ããã©ãŒãã³ã¹åäžã®ããã®ãã¶ã€ã³èšèš ã®ä»é²ã«ãŠæžãããŠé ããŠãããŸãã®ã§èŠãŠããã ããã°ãšæããŸãã 5, HTTPSããã©ã«ããªãµãŒãã¹ä»æ§ã次ã
ãš iOSã¢ããªã§ã®éä¿¡ããWebPushãªã©ããä»ã§ã¯HTTPSãããã©ã«ãã§ããä»åŸã®æ§ã
ãªãµãŒãã¹ãããŒã«ã§HTTPSã¯å¿
é ãšãªã£ãŠããã§ãããã 以äžã®ãããªã¡ãªãããææµãªã©ããããåŒç€Ÿã§ãåžžæSSLåïŒå®å
šHTTPSåïŒãé²ããããšãšãªããŸãããããããªãããä»åã¯æåããHTTPSã§å§ãããµã€ãã§ã¯ãããŸãããããã話ããã¡ãªãããåŸãããã®ç§»è¡ã«ã¯ãã¡ãããªã¹ã¯ããããŸãããäž»ãªãªã¹ã¯ã§èšããŸããšä»¥äžããããŸããã ãªã¹ã¯1, SEOçã«HTTPããHTTPSã®ç§»è¡æéãã©ãããŠãçºçããã ç§»è¡æéã¯ã©ãããŠãçºçããŸããããã«ã¯æ€çŽ¢ãšã³ãžã³ãžã®éç¥ã飿ºããµãŒãã³ã³ãœãŒã«çã§ãã£ãããšè¡ãå¿
èŠããããŸããããã§æé ãééã£ãŠããŸããšãSEOã®é äœããŠã³ã«ãã€ãªãããŸããGoogleãªã©ã®ã³ã³ãœãŒã«ã§ã¯ãããã«ç¹åããæé ã解説ãããŠããããããããåç
§ããŠé²ããŠè¡ãã°ééããªãã§ãããã åèïŒHTTPS ã§ãµã€ããä¿è·ãã – Search Console ãã«ã ãªã¹ã¯2, ãªãã¡ã©ãŒã®åãæž¡ãã®åœ±é¿ãçºçãã å®å
šHTTPSåïŒåžžæSSL/TLSåïŒãããšãHTTPSããHTTPã«ãªãã¡ã©ãŒãåãæž¡ããªã仿§ãšãªããŸããæå·åããŠãããã®ãå¹³æã«æž¡ããªã仿§ãšããã®ã¯èããŠã¿ãã°ãããã«åœç¶ã§ãããã ç»ååŒçšïŒåžžæSSLã¯ããã¹ãïŒïŒã¡ãªãããšãã¡ãªãã | Growth Seed äžå³ã®ããã«ããªãã¡ã©ãŒãæž¡ããªããã¿ãŒã³ãçºçããããšããããã®ãã¿ãŒã³ã®åœ±é¿ç¯å²ã®æŽãåºããšç¢ºèªãé²ããŸãããåæã«ãããŠãã®åœ±é¿ãçºçãããšå°ããŸãããã®ã»ãã«ãåŒç€Ÿãããžã§ã¯ãã§ã¯ãæè¡ãªã¹ã¯ãããã¡ãã£ã¢ããåãããžã§ã¯ãã«é¢ããã®ãªã¹ã¯ããã£ã圢ã§ããfacebookã®ãããæ°åŒãç¶ãåé¡ããããŸãããä»ã«ãè€æ°ã®æžå¿µã調æ»ããäžã§äŒç€Ÿãããæ£åŒã«GOãé ããäœæ¥ãé²ããŠãããŸããã å®å
šHTTPSåãžã®äœæ¥ äœæ¥ãšããŠã¯äž»ã«ä»¥äžã®ãããªé
ç®ãšãªããŸããåãµã€ãããšã³ãžãã¢ããã°ãªã©ã§ããæžãããŠããã®ã§è©³ããã¯ãã¡ããåèã«ããŠããããã°ãšæããŸããåŒç€Ÿã§ç¹ã«æ°ãã€ãããã€ã³ãã¯ãã¡ãã§ãã HTTPããHTTPSãžã®ãªãã€ã¬ã¯ã å
éšãªã³ã¯ä¿®æ£ mixed contentsã«æ³šæ rel=âcanonicalâ屿§ã®å€æŽãå¿ããªã åçš®ããŒã«é£æºã»é£æºãµãŒãã¹ã®HTTPSåäœç¢ºèªããç¹ã«åºåé¢é£ã¯å€§äºã§ãã Google Search Consoleçã§ã®ç»é²URLã®ä¿®æ£ã HSTS ãµããŒããåãæ±ãæ
éã«ã ãªãã¡ã©ãŒçã®ãã°éèšãžã®åœ±é¿ã®ç¢ºèª æåŸã«ã å®å
šHTTPSåã«ã€ããŠæãããš ãŸã ãŸã æ¥æ¬ã¯äžçååœãšæ¯ã¹ããšå®å
šHTTPSå°å
¥çã¯äœãç¶æ
ã§ãã®ã§ãã©ãã©ãHTTPSåã¯é²ããšãããªãšæããŸãããããŠå®å
šHTTPSåã®æµãã¯å¿
é ã§ããæéã®åé¡ã ãšæã£ãŠããŸãããšã¯ãããã®ã®ãæªå¯Ÿå¿ã§ããã°æ¥ããçŠããã«å¯Ÿå¿ææã決ããŠåãçµãã°ãããšæããŸããçŠãã¯çŠç©ã§ãã å®å
šHTTPSã«ã€ããŠã¯ãçŸåšã¯ãŸã çºå±éäžã ãšæã£ãŠããŸããã¡ãªãããå¢ããŠãããã®è£ã§ã¯SSL/TLSã§ã®è匱æ§ã®çºèŠããHTTP/2ãµãŒãã®ã»ãã¥ãªãã£åé¡ãªã©ãã®æè¡ã«é¢ãããªã¹ã¯çºèŠãšå¯Ÿå¿ãç¹°ãè¿ãããŠãããããå®å
šHTTPSååŸã¯ãããã·ãã¢ã«ããã話é¡ã«æ³šèŠããå¿
èŠããããšæããŸãããŸããLet’s Enscriptãã¯ãããšããç¡æSSLèšŒææžãäžççã«å®å
šHTTPSåãä¿é²ããåé¢ãè©æ¬ºãµã€ãããã£ãã·ã³ã°ãµã€ãã§ã¯å€ãããããã®èšŒææžãå©çšããŠãããªã©ãšãã£ã次ã®èª²é¡ãåºå§ããŠãããïŒ åèïŒLet’s EncryptãšComodoã®TLSèšŒææžã96%ã®è©æ¬ºãµã€ãã§äœ¿çš ïŒãšã瀟äŒçã«ãããããžã®å¯Ÿçãå
¥ããããšãæ¥åã§ã¯ãªãããšæã£ãŠããŸãã ãšããããã§ãæ¥ã
ã®å®å
šHTTPSåã«é¢ãããã¥ãŒã¹ãæ°ã«ããªãããéçšãããŠããã®ãè¯ãã§ãããã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããããŠé ããã°ãšæããŸãã ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
åããŸããŠããšã³ãžãã¢ã®é¿ä¹
接ã§ãã ä»åã¯ç€Ÿå
ã§DNSãµãŒããæ§ç¯ããæ©äŒããããŸããã®ã§ãããèšäºã«ããããšæããŸãã æŠèŠ CentOS6ã«BINDãã€ã³ã¹ããŒã«ããDNSãµãŒãïŒå
éšåãçšïŒãæ§ç¯ããŸãã èªèº«ã®ã¯ã©ã€ã¢ã³ãPCããDNSãµãŒãã«åãåãããŠãåå解決ãã§ãããšãããŸã§ããŽãŒã«ã«ãªããŸãã ç°å¢ ç©çãµãŒã CentOS release 6.9 (Final) BIND 9.8.2 BINDã€ã³ã¹ããŒã« ã€ã³ã¹ããŒã« $ sudo yum install bind ç¢ºèª ã以äžã®ããã«è¡šç€ºãããã°ã€ã³ã¹ããŒã«ãå®äºããŠããŸãã $ yum list installed | grep bind bind.x86_64 32:9.8.2-0.62.rc1.el6_9.4 bind-libs.x86_64 32:9.8.2-0.62.rc1.el6_9.4 èšå®ãã¡ã€ã«(named.conf)ã®ç·šé BINDã®ã¡ã€ã³ã®èšå®ãã¡ã€ã«ã¯”named.conf”ã§ãã CentOS6ã«BINDãyumã§ã€ã³ã¹ããŒã«ããå Žåã¯ã”/etc/named.conf”ãèšå®ãã¡ã€ã«ã«ãªããŸãã ã»ãã¥ãªãã£ãæèããå Žåã¯ãchrootãããããšãããããããŸãã â»ç·šéåã«ããã¯ã¢ããã¯ãšã£ãŠãããŸããã $ sudo vi /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { #DNSãµãŒãã®åŸ
ã¡åãIPã¢ãã¬ã¹ã®èšå® listen-on port 53 { 127.0.0.1; 172.16.11.1; #DNSãµãŒãã®ãã©ã€ããŒãIPãæå® }; #listen-on-v6 port 53 { ::1; }; #IPv6ã¯äœ¿çšããªãããã³ã¡ã³ãã¢ãŠã directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost; }; recursion yes; dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; #ããŒã«ã«ãããã¯ãŒã¯ãå®çŸ©ãã acl localnet { 172.16.11.0/24; #DNSãµãŒããæå±ãããããã¯ãŒã¯ãå®çŸ© 172.16.12.0/24; #èªèº«ã®ã¯ã©ã€ã¢ã³ãPCãæå±ãããããã¯ãŒã¯ãå®çŸ© }; #å
éšåãçšã®èšè¿° view "internal" { match-clients { localnet; }; #å®çŸ©ããããŒã«ã«ãããã¯ãŒã¯ã«åèŽããå Žåãviewå
ã®åŠçããã allow-query { localnet; }; #å®çŸ©ããããŒã«ã«ãããã¯ãŒã¯ã®ã¿åãåãããèš±å¯ãã zone "." IN { type hint; file "named.ca"; }; #æ£åŒããŸãŒã³ zone "example.com" IN { type master; file "/etc/named/example.com.zone"; }; #éåŒããŸãŒã³ zone "11.16.172.in-addr.arpa" IN { type master; file "/etc/named/11.16.172.zone"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; }; ãŸãŒã³ãã¡ã€ã«ã®äœæ æ£åŒããŸãŒã³ãã¡ã€ã«äœæ $ sudo vi /etc/named/example.com.zone $TTL 86400 @ IN SOA dns.example.com. root.example.com.( 2017092701 ; Serial 10800 ; Refresh 3600 ; Retry 3600000 ; Expire 3600 ; Negative Cashe TTL ) IN NS dns.example.com. test1 IN A 172.16.11.2 test2 IN A 172.16.11.3 $TTL 86400 ãã®ãŸãŒã³ã®å
容ãä»ã®DNSãµãŒããŒã«ãã£ãã·ã¥ãããæéã衚ããŸããä»åã ãš86400ç§(1æ¥)ãšãªããŸãã @ ãŸãŒã³åºç¹ã衚ããŸããä»åã ãšèªåèªèº«ïŒexample.comïŒãåºç¹ãšãªããŸãã @ã§ã¯ãªããexample.com.ããšèšè¿°ããŠãOKã§ãã IN 決ãŸãæå¥ãšãªããŸãããInterNetããæå³ããŠããŸãã SOA dns.example.com. root.example.com. SOAã¬ã³ãŒãããStart Of Authorityãã®ç¥ã§ãæš©åšãæã€ãŸãŒã³ã®éå§ã衚ããŸãã ä»åã ãšãã©ã€ããªãµãŒãã¯ãdns.example.comãã管çè
ã®ã¡ãŒã«ã¢ãã¬ã¹ã¯ãroot.example.comããšãªããŸãã 2017092701 ; Serial ãŸãŒã³ãã¡ã€ã«ã®ã·ãªã¢ã«çªå·ã衚ããŸãããå¹Žææ¥+éãçªå·ããäžè¬çã«ãªããŸãã 10800 ; Refresh ã»ã«ã³ããªãµãŒãããŸãŒã³ããŒã¿ã®æŽæ°ããã§ãã¯ããæé(ç§)ãä»åã ãš10800ç§(3æé)ã«ãªããŸãã 3600 ; Retry ãã©ã€ããªãµãŒããå¿çããªãæã«å床æ¥ç¶ã詊ã¿ããŸã§ã®æé(ç§)ãä»åã ãš3600ç§(1æé)ã«ãªããŸãã 3600000 ; Expire ã»ã«ã³ããªãµãŒããããã©ã€ããªãµãŒãã«ã¢ã¯ã»ã¹ã§ããªãç¶æ
ãç¶ããå ŽåããŸãŒã³ããŒã¿ãç¡å¹ã«ãããŸã§ã®æé(ç§)ãä»åã ãš3600000ç§(1000æé)ã«ãªããŸãã 3600 ; Negative Cashe TTL ååšããªããã¡ã€ã³ãåãåãããæã¯ããã®ãã¡ã€ã³ãååšããªããšããããšãäžå®æéãã£ãã·ã¥ããæéïŒç§ïŒãä»åã ãš3600ç§(1æé)ã«ãªããŸãã IN NS dns.example.com. NSã¬ã³ãŒããä»åã ãšãdns.example.com.ããšããååã«ããŠããŸãã test1 IN A 172.16.11.2 Aã¬ã³ãŒããä»åã ãšãtest1.example.comã㯠172.16.11.2 ã§ããããšã衚ããŸãã test2 IN A 172.16.11.3 Aã¬ã³ãŒããä»åã ãšãtest2.example.comã㯠172.16.11.3 ã§ããããšã衚ããŸãã éåŒããŸãŒã³ãã¡ã€ã«äœæ $ sudo vi /etc/named/11.16.172.zone $TTL 86400 @ IN SOA dns.example.com. root.example.com.( 2017092701 ; Serial 10800 ; Refresh 3600 ; Retry 3600000 ; Expire 3600 ; Negative Cashe TTL ) IN NS dns.example.com. 2 IN PTR test1.example.com. 3 IN PTR test2.example.com. $TTL 86400 ã IN NS dns.example.com. æ£åŒããŸãŒã³ãã¡ã€ã«ãšåæ§ã§ãã 2 IN PTR test1.example.com. PTRã¬ã³ãŒããä»åã ãš 172.16.11.2 㯠ãtest1.example.com.ã ã§ããããšã衚ããŸãã 3 IN PTR test2.example.com. PTRã¬ã³ãŒããä»åã ãš 172.16.11.3 㯠ãtest2.example.com.ã ã§ããããšã衚ããŸãã BINDèµ·å èµ·å $ sudo service start named ååè§£æ±ºç¢ºèª digã³ãã³ãã䜿ããŸããã€ã³ã¹ããŒã«ããŠããªãå Žåã¯ãbind-utilsã§ã€ã³ã¹ããŒã«ããŠãã ããã ã€ã³ã¹ããŒã« $ sudo yum install bind-utils ç¢ºèª $ yum list installed | grep bind-utils bind-utils.x86_64 32:9.8.2-0.62.rc1.el6_9.4 æ£åŒãç¢ºèª ãtest1.example.comãã®IPãç¥ãããå Žå $ dig test1.example.com ; <<>> DiG 9.8.3-P1 <<>> test1.example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40332 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;test1.example.com. IN A ;; ANSWER SECTION: test1.example.com. 86400 IN A 172.16.11.2 ;; AUTHORITY SECTION: example.com. 86400 IN NS dns.example.com. ;; Query time: 7 msec ;; SERVER: 172.16.11.2#53(172.16.11.2) ;; WHEN: Mon Oct 30 20:28:49 2017 ;; MSG SIZE rcvd: 81 ANSWER SECTIONãèŠããšãæ£åŒããŸãŒã³ãã¡ã€ã«ã§èšå®ããIPãè¿ã£ãŠããŠããã®ãããããŸããã éåŒãç¢ºèª ã172.16.11.2ãã®ãã¡ã€ã³ãç¥ãããå Žå $ dig -x 172.16.11.2 ; <<>> DiG 9.8.3-P1 <<>> -x 172.16.11.2 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35024 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;2.11.16.172.in-addr.arpa. IN PTR ;; ANSWER SECTION: 2.11.16.172.in-addr.arpa. 86400 IN PTR test1.example.com. ;; AUTHORITY SECTION: 11.16.172.in-addr.arpa. 86400 IN NS dns.example.com. ;; Query time: 3 msec ;; SERVER: 172.16.11.2#53(172.16.11.2) ;; WHEN: Mon Oct 30 19:13:18 2017 ;; MSG SIZE rcvd: 104 ANSWER SECTIONãèŠããšãéåŒããŸãŒã³ãã¡ã€ã«ã§èšå®ãããã¡ã€ã³ãè¿ã£ãŠããŠããã®ãããããŸããã ãŸãšã ä»åã¯CentOS6ã«BINDãã€ã³ã¹ããŒã«ããDNSãµãŒãïŒå
éšåãçšïŒãæ§ç¯ããŸããã DNSãµãŒããæ§ç¯ããæ©äŒã¯ãªããªããªããšæããŸãã®ã§ããšãŠãè¯ãçµéšã«ãªã£ããšæããŸãã ä»åºŠã¯AWSã®Route53ãæ©äŒãèŠã€ããŠè§Šã£ãŠã¿ãããšæããŸãã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããããŠé ããã°ãšæããŸãã ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
ã¯ããã« ããã«ã¡ã¯ã岩æ©è¡åŸã§ãã ä»åããè€æ°åã«æž¡ã£ãŠã Pythonæ©æ¢°åŠç¿ã©ã€ãã©ãªscikit-learnã®cheat-sheet ã解説ããŠã¿ãããšæããŸãã çè
ãæ©æ¢°åŠç¿ãå匷ãå§ããéããã¥ãŒã©ã«ãããã¯ãŒã¯ã»ãµããŒããã¯ã¿ãŒãã·ã³ã»ã©ã³ãã ãã©ã¬ã¹ããªã©…ã¢ã«ãŽãªãºã ã°ãããå
ã«æ
å ±ãšããŠæº¢ããŠããŠãæ©æ¢°åŠç¿ãã俯ç°ããŠäœç³»çã«èŠãããšãé£ããç¶æ³ã§ããã çµå±äœãã§ããã®ïŒ…ãããªæã«åºäŒã£ãã®ãããã® ãcheat-sheetã ã§ããã ãã® cheat-sheet ãããæ©æ¢°åŠç¿ã¯å€§ãã ååž° ã» èå¥ ã» åé¡ ã» æ¬¡å
åæž=äž»æååæ ã®ïŒã€ã®ç®çã®éæã®çºã«äœ¿çšãããããšããããŠãã®ç®çãšç¶æ³ã«å¿ããŠã¢ã«ãŽãªãºã ãæ±ºå®ãããããšãããããŸãã ãã®ïŒã€ã®ç®çãçµã¿åãããããšã§ãããããããšãå¯èœã«ããã®ããæ©æ¢°åŠç¿ããšãªããŸãã 第ïŒåã§ã¯ã cheat-sheet ã®è§£èª¬ãšå°ãå®è·µãããŠã¿ãããšæããŸããæçµçã«ã¯ä»å玹ä»ããå
šãŠã®ã¢ã«ãŽãªãºã ãå®è·µããããšæã£ãŠããŸã…æ±ã scikit-learn cheat-sheet ã®è§£èª¬ classificationïŒèå¥ïŒæåž«ããåŠç¿ïŒ âãã£ããèšããšïŒ ãç¹åŸŽããšãã°ã«ãŒããã®ããŒã¿ã»ãããæåž«åŠç¿ãšããã°ã«ãŒããåãããªããç¹åŸŽãããŒã¿ãå
¥åããå Žåã«ãã°ã«ãŒãããèå¥ã âãããªã€ã¡ãŒãžã§äœ¿ãããïŒ ã»ä»æ¥ã® 颚ã®åŒ·ã ããææ¥ã® 倩åïŒæŽãã»æãã»éšïŒ ãèå¥ ã» èº«é· ã äœé ãš ã·ã¯ã®æ° ãã æ§å¥ïŒç·ã»å¥³ïŒ ãèå¥ âã¢ã«ãŽãªãºã ã®éžã³æ¹ïŒ ãSGDèå¥ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãªããšã ãkernelè¿äŒŒèå¥ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãªããšã ãã»SGDèå¥ãããŸããããªãïŒéç·åœ¢ã§ã®èå¥ãå¿
èŠãªïŒãšã ãLinearSVCèå¥ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãããšã ãkè¿åæ³èå¥ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãããšã ãã»LinearSVCèå¥ãããŸããããªãïŒéç·åœ¢ã§ã®èå¥ãå¿
èŠãªïŒãšã ãã»ãµã³ãã«ããŒã¿ã»ãããããã¹ãããŒã¿ã§ãªããšã ãSVCèå¥ããEnsembleèå¥ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãããšã ãã»kè¿åæ³èå¥ãããŸããããªããšã ãã»ãµã³ãã«ããŒã¿ã»ãããããã¹ãããŒã¿ã§ãªããšã ããã€ãŒããã€ãºèå¥ïŒããã¹ãããŒã¿å°éïŒã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãããšã ãã»LinearSVCèå¥ãããŸããããªãïŒéç·åœ¢ã§ã®èå¥ãå¿
èŠãªïŒãšã ãã»ãµã³ãã«ããŒã¿ã»ãããããã¹ãããŒã¿ã§ãããšã ãããexïŒè¿·æã¡ãŒã«ãããã§ãªããã®èå¥ãªã©ãå¯èœã regressionïŒååž°ïŒæåž«ããåŠç¿ïŒ âãã£ããèšããšïŒ ãææããããšãçããã®ããŒã¿ã»ãããæåž«åŠç¿ãšããçããåãããªããææãããããŒã¿ãå
¥åããå Žåã«ãçãããäºæž¬ïŒæ°å€ããæ°å€ãäºæž¬ïŒã âãããªã€ã¡ãŒãžã§äœ¿ãããïŒ ã»ä»æ¥ã® 颚ã®åŒ·ã ããææ¥ã® æ°æž© ãäºæž¬ ã» èº«é· ã äœé ãš ã·ã¯ã®æ° ãã 幎霢 ãäºæž¬ – *1 âã¢ã«ãŽãªãºã ã®éžã³æ¹ïŒ ãSGDååž°ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãªããšã ãLassoååž°ããElasticNetååž°ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãããšã ãã»å
šãŠã®ç¹åŸŽéãéèŠã§ãªãïŒéèŠãªç¹åŸŽã®èå¯ããããïŒãšã ãããexïŒ*1ã®å Žåã ã·ã¯ã®æ° ãéèŠã èº«é· ãš äœé ã¯éèŠã§ãªããšãããããªèå¯ãå¯èœã ãRidgeååž°ããLinearSVRååž°ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãããšã ãã»å
šãŠã®ç¹åŸŽéãéèŠã§ãããšã ãSVRååž°ããEnsembleååž°ã ãã»æåž«åŠç¿çšã®ããŒã¿ã»ããã100,000以äžãããšã ãã»å
šãŠã®ç¹åŸŽéãéèŠã§ãããšã ãã»Ridgeååž°ãLinesarSVRååž°ãããŸããããªãïŒéç·åœ¢ã§ã®ååž°ãå¿
èŠãªïŒãšã clusteringïŒåé¡ïŒæåž«ãªãåŠç¿ïŒ âãã£ããèšããšïŒ æŒ ç¶ãšãããç¹åŸŽãã®ããŒã¿ã»ããããã¿ãŒã³ïŒäŒŒãŠããã»è¿ããç¹åŸŽïŒãèŠã€ããŠåé¡ïŒå¡åïŒãç¹ã«ãç°¡åã«åé¡ã§ããªããããªãã®ã«ã€ããŠãã°ã«ãŒãããå®çŸ©ããããããçºã®ææ®µã âãããªã€ã¡ãŒãžã§äœ¿ãããïŒ ã»å
¬åã®ç å Žã®ç ïŒç¡¬åºŠã»åŒ·åºŠã»è² etcïŒã®ç²åãããã€ãã®å¡ã«åé¡ã ã»å€ç©ºã®æïŒå
ã®åŒ·ãã»è²ã»è·é¢ã»æž©åºŠ etcïŒãããã€ãã®å¡ã«åé¡ã âã¢ã«ãŽãªãºã ã®éžã³æ¹ïŒ ãMeanShiftåé¡ããVBGMMåé¡ã ãã»åé¡ããå¡ã®æ°ãæå®ããªããšã ãã»å¯Ÿè±¡ã®ããŒã¿ã»ããã100,000以äžãããšã ãMiniBatchKMeansåé¡ã ãã»åé¡ããå¡ã®æ°ãæå®ãããšã ãã»å¯Ÿè±¡ã®ããŒã¿ã»ããã100,000以äžãªããšã ãKMeansåé¡ã ãã»åé¡ããå¡ã®æ°ãæå®ãããšã ãã»å¯Ÿè±¡ã®ããŒã¿ã»ããã100,000以äžãããšã ãã¹ãã¯ã¿ã¯ã«åé¡ããGMMåé¡ã ãã»åé¡ããå¡ã®æ°ãæå®ãããšã ãã»å¯Ÿè±¡ã®ããŒã¿ã»ããã100,000以äžãããšã ãã»KMeansåé¡ãããŸããããªãïŒéç·åœ¢ã§ã®åé¡ãå¿
èŠãªïŒãšã dimensionality reductionïŒæ¬¡å
åæž,äž»æååæïŒæåž«ãªãåŠç¿ïŒ âãã£ããèšããšïŒ ããŒã¿ã®ã°ãã€ãã倧ããéšåã«çç®ããéã«ã°ãã€ããå°ããéšåãç¡èŠãããããªèŠç¹ã«å€æããããšã§ãããŒã¿å§çž®ïŒæ¬¡å
åæžïŒãäž»æååæã宿œããææ®µã3次å
ã2次å
ã«èœãšã蟌ã¿ç¶æ³ãææ¡ãããããããšããç¹ã§ åçãæ®ãã»åçãã倿ãã ãšããè¡çºã«äŒŒãŠããã âãããªã€ã¡ãŒãžã§äœ¿ãããïŒ ã»ç»åãªã©ã®å€§ããããŒã¿ã®æ¬¡å
ãåæžã âã¢ã«ãŽãªãºã ã®éžã³æ¹ïŒ ãã©ã³ããã€ãºPCAã ãã»å
ãããã詊ã ãkernelè¿äŒŒPCAã ãã»ã©ã³ããã€ãºPCAãããŸããããªãïŒããŒã¿ã»ããã®æ§é ãéç·åœ¢ã§ããïŒãšã ãã»å¯Ÿè±¡ã®ããŒã¿ã»ããã100,000以äžãªããšã ãIsomap PCAããSpectralEmbedding PCAã ãã»ã©ã³ããã€ãºPCAãããŸããããªãïŒããŒã¿ã»ããã®æ§é ãéç·åœ¢ã§ããïŒãšã ãã»å¯Ÿè±¡ã®ããŒã¿ã»ããã100,000以äžãããšã ãLLE PCAã ãã»ããŒã¿ã»ããã®æ§é ãéç·åœ¢ã§ãã ãã»å¯Ÿè±¡ã®ããŒã¿ã»ããã100,000以äžãããšã ãã»IsomapPCAãSpectralEmbeddingPCAãããŸããããªããšã å®è·µïŒclassificationïŒèå¥ïŒæåž«ããåŠç¿ïŒããã£ãŠã¿ã ããã§ã¯ã classification ã®ãSGDèå¥ãã¢ã«ãŽãªãºã ã䜿ã£ãå®è·µããŠãããŸãã ä»åã¯äžèšã¢ã«ãŽãªãºã ã䜿ã£ãŠãã¢ã€ã¡ïŒè±ïŒã®ãçš®é¡ãããã®ãè±ã³ãã®é·ãããšãããã®é·ããããèå¥ããŠã¿ãããšæããŸãã Pythonã§æ©æ¢°åŠç¿ç°å¢ãæ§ç¯ â ãAnacondaããPCã«ã€ã³ã¹ããŒã« Anacondaã¯Pythonãšæ©æ¢°åŠç¿ã§ãã䜿ãã©ã€ãã©ãªãããŸãšããŠã€ã³ã¹ããŒã«ããŠãããŸãã â·Anacondaã€ã³ã¹ããŒã«æ¹æ³ïŒWindowsïŒ â¡jupyter notebookã®èµ·å jupyter notebookã¯pythonã®å®è¡ç°å¢ã®äžã€ã§ãã â·jupyter notebookã®äœ¿ãæ¹ïŒWindowsïŒ å®è£
å
ã䜿çšããã©ã€ãã©ãªãã€ã³ããŒãããŠãããŸãã #䜿çšã©ã€ãã©ãªã€ã³ããŒã import numpy as np #numpyãšããè¡åãªã©ãæ±ãã©ã€ãã©ãªãå©çš import pandas as pd #pandasãšããããŒã¿åæã©ã€ãã©ãªãå©çš import matplotlib.pyplot as plt #ããããçšã®ã©ã€ãã©ãªãå©çš from sklearn import linear_model, metrics, preprocessing, cross_validation #æ©æ¢°åŠç¿çšã®ã©ã€ãã©ãªãå©ç𠿬¡ã«ããŒã¿ã»ãããèªã¿èŸŒã¿ãŸãã æ©æ¢°åŠç¿ãå匷ããŠããäžã§ãµã³ãã«ããŒã¿ã¯å¿
èŠäžå¯æ¬ ã§ãã 以äžã¯çè
ããã䜿ããµã€ãã§æ§ã
ãªãµã³ãã«ããŒã¿ãæäŸããŠãããŸããä»åããã¡ããããµã³ãã«ããŒã¿ãåããããšã«ããŸãã â·UCI â·UCI_ã¢ã€ã¡ã®ããŒã¿ã»ãã詳现 #ããŒã¿ã»ããã®èªã¿èŸŒã¿ df_iris_all=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/bezdekIris.data', header=None) 念ã®çºããŒã¿ã®äžèº«ã確èªããŸãããã #ããŒã¿ã®è¡šç€º df_iris_all.columns=['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class'] df_iris_all.head() â·å®éã®ããŒã¿ã»ããäžèº«ïŒ150ã»ããïŒ ä»åã¯ãã®äžããã ãã»class=åçš® ãã»petal-length=è±ã³ãã®é·ã ãã»sepal-length=ããã®é·ã ã䜿çšããŸãã #ãclassããšãpetal-lengthããšãsepal-lengthããäœ¿çš df_iris=df_iris_all[['class', 'petal-length', 'sepal-length']] 次ã«ããŒã¿ã® æšæºå ã§ãã ãã®ãŸãŸSGDã¢ã«ãŽãªãºã ãçšããŠèå¥ããããšãå¯èœã§ããã æšæºå ããããšã§ç²ŸåºŠã®é«ãäºæž¬ãå¯èœã«ãªããŸãã ããŒã¿ã»ããã¯ã次å
ã«ãã£ãŠæ°å€ã®åäœããã©ãã©ã§ãã£ããã倧ãããæ¥µç«¯ã«ç°ãªã£ããããå ŽåããããããŸãããã®ãŸãŸæ±ã£ãŠããŸããšã忬¡å
ãèŠæ¯ã¹ããšãã«ããããã®é¢ä¿ãåããèŸãããŸãæ©æ¢°åŠç¿ã«ãããŠã¯ç¹å®ã®æ¬¡å
ã®åœ±é¿ã匷ã (ãŸãã¯åŒ±ã) åºãŠããŸãããšããããŸãã ããã§äœ¿çšããããŒã¿ã»ããã®å次å
ã®ã¹ã±ãŒã«ãæããŠãããããšã§ãåè¿°ã®ãããªãªã¹ã¯ãé²ãããšãã§ããŸããããã æšæºå ãšèšããŸãã #ããŒã¿ã®æšæºå data=df_iris[['petal-length',ã'sepal-length']] sc=preprocessing.StandardScaler() sc.fit(data) std_data=sc.transform(data) #èŠãããããçºãclassããæ°å€ã«çœ®ãæãã(Iris-setosa:0ãIris-versicolor:1ãIris-virginica:2) label=df_iris[u'class'].replace('Iris-setosa',ã0).replace('Iris-versicolor',ã1).replace('Iris-virginica',ã2) 次ã«ãSGDèå¥ãã¢ã«ãŽãªãºã ã®æºåãããŸãã ãã®éã«æå€±èšç®ã«äœ¿ããã颿°ãæå®ããŸããä»åã¯ãã³ãžæå€±é¢æ°ã䜿çšããŸãã æ©æ¢°åŠç¿ã®æåž«ããåŠç¿ã«ãããŠã æå€±é¢æ° ïŒã³ã¹ã颿° or ç®ç颿°ïŒãšãããã®ããããŸãã å®ããŒã¿ãšäºæž¬ããŒã¿ã®å·®ã æå€± ãšããããããå®çŸ©ããããžãã¯ã æå€±é¢æ° ãšãããŸããæåž«ããåŠç¿ã®å€ãã®ã¢ã«ãŽãªãºã ã¯ããã®æå€±ãæå°ã«ãããããªäºæž¬ããŒã¿ãåºåã§ããããã«ãå
éšã®ä¿æ°ãåçã«èª¿æŽããŠãããŸãã æå€± ã¯ã¢ã«ãŽãªãºã ãäºæž¬ããçºã«äœ¿ã ç®å° ãšèšã£ãŠè¯ããããããŸããã #ãSGDèå¥ãã¢ã«ãŽãªãºã ã®æºå clf_result=linear_model.SGDClassifier(loss="hinge") #ãã³ãžæå€±é¢æ°ãæå® ããŒã¿ã»ãããåŠç¿ããŒã¿ã»ãããšãã¹ãïŒäºæž¬å®æœïŒããŒã¿ã»ããã«åå²ããŸãã ä»åã¯90%ïŒ135ã»ããïŒãåŠç¿ããŒã¿ã10%ïŒ15ã»ããïŒããã¹ãããŒã¿ãšããŸãã #ããŒã¿ã»ãããåŠç¿ãšãã¹ãïŒäºæž¬å®æœïŒã«åå²ããŠå®è¡ ds_train, ds_test, ds_train_label, ds_test_label=cross_validation.train_test_split(std_data, label, test_size=0.1, random_state=0) #åŠç¿å®è¡ clf_result.fit(ds_train, ds_train_label) #äºæž¬å®è¡ pre=clf_result.predict(ds_test) äºæž¬ãå®äºããŸããã å®éã®ãclassããšäºæž¬ãããclass-predictããæ¯èŒããŠã¿ãŸãããã #å®éã®ãclassããšäºæž¬ãããclass-predictããæ¯èŒ df_result=pd.DataFrame(columns=['class', 'class-predict'], dtype=object) df_result['class']=ds_test_label.reset_index(drop=True) df_result['class-predict']=pre pd.DataFrame(df_result) äžè¡ç®ã®ã¿äžäžèŽã§ãã以å€ã¯äžèŽããŸãããã¹ã³ã¢ãšããŠã¯ #ã¹ã³ã¢åºå ac_score=metrics.accuracy_score(ds_test_label,ãpre) print(ac_score) 0.933333333333ïŒçŽ93%ã§äºæž¬æåïŒãšããçµæã«ãªããŸããã æåŸã« ä»åã®å®è·µã§ã¯ãã¢ã«ãŽãªãºã 決ãæã¡ã§å®æœããŸããããå®éã«ã¯ Kåå²äº€å·®æ€èšŒ ïŒâ·åèïŒ ãªã©ãçšããŠç²ŸåºŠã確èªããããç®ç倿°ïŒex ã¢ã€ã¡ã®çš®é¡ïŒãšèª¬æå€æ°ïŒex è±ã³ãã®é·ãã»ããã®é·ãïŒãšã§ãããããããŒã¿æ§é ãææ¡ããŠã¢ã«ãŽãªãºã ãéžå®ããŠããããšã«ãªããŸãã æ¬¡åã¯å®è·µã«æ¯éã眮ããããã°ã«ããŠãããããšæããŸããåé ã§ãèšããŸããããæçµçã«ã¯ä»å玹ä»ããå
šãŠã®ã¢ã«ãŽãªãºã ãå®è·µããããšãç®æšã§ããæè¿ã ãšè©±é¡ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¢ã«ãŽãªãºã ã䜿ããããã«ãªã£ãããã§ãããåŒãç¶ãé 匵ã£ãŠãããããšæããŸã…æ±ã ãæž
芧é ãããããšãããããŸããã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããŠãã ããã âçè
ã®ããããèšäº ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬1åïŒ ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬2åïŒ ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬3åïŒ ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒLambda|API Gateway|ã·ãªãŒãºç¬¬4åïŒ ã»ãDBèšèšå
¥é|ERå³|MySQLãã³ã³ããã¬ã·ãŒãããåŠã¶ïŒããŒã¿ã¢ããªã³ã°ææ³
ããã«ã¡ã¯ãSREããŒã ã€ã³ãã©ãšã³ãžãã¢ã®ç¶¿åŒã§ãã ä»ãŸã§MySQLã®èšäºã°ããæžããŠãããŸãããã ä»åã¯éçšé¢ã®è©±ã§ãæžãããŠé ãããšæã£ãŠãããŸãã çµè«ããç³ãäžãããšã GitLabã®ããã¯ã¢ãããåå ã§ãµãŒãã®å®¹éãåè¿«ãããã ããã¯ã¢ããäžä»£æ°ã倿ŽããŠåé¡è§£æ±ºããŸããããšããå
容ã§ãã äœãã®åèã«ããŠé ãããå¬ããã§ãã 1. äºè±¡ç¢ºèªããåå ç¹å®ãŸã§ åŒç€Ÿã§ã¯æ§ã
ãªããŒã«é¡ã䜿çšããŠãããŸããã ãã®äžã§ã¯GitLabãäžéšäœ¿çšããŠããŸãã ããæããã®GitLabãæèŒããŠãããµãŒãã® ç¹å®ã®ããŒãã£ã·ã§ã³ã®äœ¿çšçã95%ã«ãªã£ãŠããããšãåãããŸããã ããã£ãã¹ã£ããã ãã£ãšãã®æã«ã¯ãããªé¡ãããŠããããšã§ããããã å
å¿ã¯ãã£ã¡ã§ãã ãã€ã§ã䜿çšçãšããã®ã¯æããã®ã§ã ã¹ãã¬ãŒãžå®¹éãå¢å çã«ããããŸãã95%ãšããæ°åã¯å°ãçŠããŸãã 倿ããæ®µéã§æ©éåå 調æ»ã«ç§»ããŸããã $ du -h | grep [0-9]G [/html] äžèšã³ãã³ãã§å€æããã®ã¯”gitlab/backups”ã å€ãã®å®¹éã䜿çšããŠãããšããããšã§ããã æ¬¡ã«GitLabã®èšå®ã確èªããŸãã gitlab_rails['backup_keep_time'] = 5184000 â» 5184000/24/60/60 = 60 äžä»£ä¿å 60äžä»£ä¿åãããã®ã§ãèšå®ãå¹ããŠãããã確èªããŸãã $ ls -l gitlab/backups | wc -l äžèšã®çµæããèšå®èªäœã¯å¹ããŠããããšã倿ãè¯ãã£ããã ãã 1æ¥åã®ããã¯ã¢ãã容éãå¢å ããŠããããã åœæã¯åé¡ãªãã£ãå
šäœå®¹éã埮å¢ããããã ããã§å
茩ãšçžè«ãããã¯ã¢ããäžä»£æ°ã10äžä»£çšåºŠã«æžããããšã«ã 2. 察å¿ïŒ ã»30äžä»£æ®ãå Žå gitlab_rails['backup_keep_time'] = 2592000 ã»10äžä»£æ®ãå Žå gitlab_rails['backup_keep_time'] = 864000 ä»åã¯10äžä»£æ®ãæ¹åã§é²ããŸããã èšå®ãã¡ã€ã«ã倿Žãã以äžã®ã³ãã³ãã宿œã â èšå®ãã¡ã€ã«åæ $ sudo gitlab-ctl reconfigure $ sudo gitlab-ctl restart cronã®èšå®ã以äžãªã®ã§ãåå2æã«ç¡äºå®¹éãäžãã£ãããšã確èªã 0 2 * * * /gitlab/bin/gitlab-rake gitlab:backup:create > /dev/null 2>&1 ãããã§å¯Ÿå¿å®äºã§ãã ãŸãAWSã®S3ãªã©ã䜿çšããŠããã°ãããã¯ã¢ããå
ãšããŠãã¡ãã察象ã«ã§ããã¿ããã ãŸãšã ä»åã¯æ¥åžžããŒã¹ã®è©±ã§ããããä»åºŠã¯æè¡æ€èšŒã®è©±ãæžãããã§ãã ãæž
芧é ãããããšãããããŸããã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããããŠé ããã°ãšæããŸãã ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
ããã«ã¡ã¯ããµãŒããŒãµã€ããšã³ãžãã¢ã®è
åã§ãã ä»åã¯ååã®ç¶ããswift3ã§ãã¥ãŒã¹é
ä¿¡ã¢ããªãäœã£ãŠã¿ã #1 (storyboardç·š)ã ã§å®è£
ã®ãœãŒã¹ãããŒã¹ã«ã¿ãŠãããããšæããŸãã URLSessionã䜿ã£ãŠHTTPéä¿¡ãã urlRequestã«ååŸãããapiã®ãªã¯ãšã¹ãURLãèšå®ãã URLSessionã䜿ã£ãŠã¿ã¹ã¯ãäœã Jsonã®çµæããŒã¿ãååŸãã è¿ã£ãŠæ¥ãããŒã¿ãæŽåœ¢ããArticle.swiftã®ãªããžã§ã¯ãã®äžã«å
¥ããŠããã task.resume()ã§ã¿ã¹ã¯ãéå§ãã var articles: [Article]? = [] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. getArticles() } func getArticles() { let urlRequest = URLRequest(url: URL(string: "https://newsapi.org/v1/articles?source=techcrunch&sortBy=latest&apiKey=1125d5f179304a4abe798dc427faed07")!) let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in if error != nil { print(error) return } // Article.swift self.articles = [Article]() do { let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject] if let articlesFromJson = json["articles"] as? [[String : AnyObject]] { for articleFromJson in articlesFromJson { let article = Article() if let title = articleFromJson["title"] as? String, let url = articleFromJson["url"] as? String, let urlToImage = articleFromJson["urlToImage"] as? String { article.title = title article.url = url article.imageUrl = urlToImage } self.articles?.append(article) } } DispatchQueue.main.async { self.tableview.reloadData() } } catch let error { print(error) } } task.resume() } tableViewã«è¡šç€ºèšå®ãã tableViewã®é¢æ°ã«ã»ã«ã®ããŒã¿ãã»ãããã extensionã®æ¡åŒµæ©èœã䜿ãç»åããŒã¿ãååŸãã func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "articleCell", for: indexPath) as! ArticleCell cell.title.text = self.articles?[indexPath.item].title cell.imgView.downloadImage(from: (self.articles?[indexPath.item].imageUrl!)!) return cell } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.articles?.count ?? 0 } extension UIImageView { func downloadImage(from url: String){ let urlRequest = URLRequest(url: URL(string: url)!) let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in if error != nil { print(error) return } DispatchQueue.main.async { self.image = UIImage(data: data!) } } task.resume() } } ãã·ãã¥ã¬ãŒã¿ã§å®è¡ãã ããã§ç°¡åãªãã¥ãŒã¹é
ä¿¡ãããã¢ããªãäœãããšãã§ããŸããã ãŸãšã storyboardã®äœ¿ãæ¹ã«æ
£ããã®ãæéãããã Httpéä¿¡ãããiosã®APIã䜿ãããããŠç°¡åã«ããŒã¿ãåãããšãã§ããã TableViewãå°ãåå¿è
ã«ã¯é£ããã£ãã æ¬¡åã¯é³æ¥œãfirebaseãªã©ãšé£æºãããã¢ããªãäœã£ãŠããããã
ããã«ã¡ã¯ããšã³ãžãã¢ã®æ±ã§ãã PHPerãåŠã¶go tour #1 ~åºæ¬~ ã«åŒãç¶ãã PHPerã Tour of Go ã§åŠãã§ãããšãã®ããã«PHPãšGoã§ã®æžãæ¹ã®æ¯èŒãããŠãããããšæããŸãã å¶åŸ¡æ§æ ä»åã¯Tour of Goã®å¶åŸ¡æ§æãã(https://go-tour-jp.appspot.com/flowcontrol/1)玹ä»ããŠãããŸãã å¶åŸ¡æ§æã¯å¶åŸ¡æã«æ¬åŒ§ããããªããŠæžæãããšæãããŸããããããããã§ããšã¯åºæ¬çã«ã·ã³ãã«ã§ãã for ããããæ®éã®foræã§ããforeachæã«ã€ããŠã¯ãŸãå¥èšäºã§ç޹ä»ããŠãããŸãã go package main import "fmt" func main() { sum := 0 for i := 0; i (åŒçš: https://go-tour-jp.appspot.com/flowcontrol/1) php namespace Main; class Main { static function main() { $sum = 0; for ($i = 0; $i Goã«ãããWhile go package main import "fmt" func main() { sum := 1 for sum (åŒçš: https://go-tour-jp.appspot.com/flowcontrol/3) php namespace Main; class Main { static function main() { $sum = 1; while ($sum if go package main import ( "fmt" "math" ) func sqrt(x float64) string { if x (åŒçš: https://go-tour-jp.appspot.com/flowcontrol/5) php namespace Main; class Main { protected function sqrt(float $x) : string { if ($x If with a short statement go package main import ( "fmt" "math" ) func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v (åŒçš: https://go-tour-jp.appspot.com/flowcontrol/6) php namespace Main; class Main { protected function pow(int $x, int $n, float $lim) : float { $v = pow($x, $n); if ($v if else è©äŸ¡æã®ããã®ç°¡åãªã¹ããŒãã¡ã³ããè©äŸ¡æã«èšè¿°ã§ãã ifæã®ããã ãã®å€æ°ããã€ãŸã§ãä¿æãã€ã¥ããªããŠæžã¿ãŸãã go package main import ( "fmt" "math" ) func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } else { fmt.Printf("%g >= %g\n", v, lim) } // can't use v here, though return lim } func main() { fmt.Println( pow(3, 2, 10), pow(3, 3, 20), ) } (åŒçš: https://go-tour-jp.appspot.com/flowcontrol/7) php namespace Main; class Main { protected function pow(int $x, int $n, float $lim) : float { $v = pow($x, $n); if ($v switch switchã¯Goèšèªã¯BreakãšãããªããŠãBreakããããšã³ãªæžãæ¹ã§ãïŒ BreakããŠã»ãããªãå Žåã ããfallthroughãšæžããŠãããã°ããã®ã§ãã go package main import ( "fmt" "runtime" ) func main() { fmt.Print("Go runs on ") switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Println("Linux.") default: // freebsd, openbsd, // plan9, windows... fmt.Printf("%s.", os) } } (åŒçš: https://go-tour-jp.appspot.com/flowcontrol/9) php print('Go runs on '); $os = 'linux'; switch ($os) { case 'darwin': print('OS X.'); break; case 'linux': print('Linux.'); break; default: printf("%s.", $os); } ãdefer Goã®éåžžã«äŸ¿å©ãªã®ãDeferã§ãã ããã¡ã€ã«ãªãŒãã³ããã®ã§ãåŸã§ã¯ããŒãºããŠããŒã ãšãäºçŽããããã«èšè¿°ãã§ããã®ãšãã¹ã¿ãã¯(Last-In First-Out)ã§å®è¡ããããããå
¥ãåã§ãªãŒãã³ã¯ããŒãºããŠããå Žåãå®å¿ã§ãã go package main import "fmt" func main() { defer fmt.Println("world") fmt.Println("hello") } (åŒçš: https://go-tour-jp.appspot.com/flowcontrol/12) php try { print("hello "); } finally { print("world"); } ãããããç°¡åãªãã®ã ãšããããã¿ããããã¥ããã§ããã颿°ã§ãã¹ãããŠãã£ãããè¡æ°ãå€ããªã£ãŠã¯ããŒãºããã®å¿ããŠãïŒã£ãŠããã®ãé²ããŸãã åŸã§ããããšã宣èšããããšã®ããããã¿ã¯è€éãªã·ã¹ãã ã«ãªãã°ãªãã»ã©å®æããã®ãããããŸããïŒ ãããã ã£ãã§ããããïŒ ä»åã¯Goã®å¶åŸ¡æ§æã«ã€ããŠPHPã絡ããŠç޹ä»ããŸããã æ¬¡åã¯ãã€ã³ã¿ã玹ä»ããããšæããŸãã
ã¯ãããŸããŠãã·ã¹ãã ãšã³ãžãã¢æ°å1幎ç®ã®è¥å®®ã§ãã ä»åã¯Goã®ãã¬ãŒã ã¯ãŒã¯ã§ããRevelãè§Šã£ãŠã¿ãã®ã§ç޹ä»ããŸãã Revelãšã¯ Revelã¯æ©èœãè±å¯ãªãã«ã¹ã¿ãã¯ãã¬ãŒã ã¯ãŒã¯ã§ãã ãã«ã¹ã¿ãã¯ãªã®ã§goã®åºæ¬çãªéšåãåŠã¶ã®ã«ãšãŠã圹ã«ç«ã¡ãŸãã webã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªæ©èœãæã£ãŠããŠã³ãŒããç·šéãããš èªåçã«ã³ã³ãã€ã«ãå®è¡ã§ããããdevã¢ãŒãã®å®è¡ã§ç°¡åã«ãããã¯ãã§ããŸãã ãããŠãã€ããã©ãŒãã³ã¹ãªèšèªã§ãã ã¡ãªã¿ã«Goã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯GinãMartiniãªã©ãé
ã®ååãå€ãããšã§æåã§ãã Revelã¯é
çããšããæå³ãããããã§ããé
ããããã åŒçšå
ïŒ https://revel.github.io/ Revelã®ã€ã³ã¹ããŒã« ä»åã®ç°å¢ mac OS go1.8.3 darwin/amd64 Revel v0.17.1 ä»åã¯å
¬åŒã®ãã¥ãŒããªã¢ã«ã«æ²¿ã£ãŠãã£ãŠãããŸãããã https://revel.github.io/tutorial/gettingstarted.html ïŒgoã®ã€ã³ã¹ããŒã«ã¯æžãã§ããç¶æ
ããã¹ã¿ãŒãããŸãïŒ 1.ãGOPATHã®èšå® ïŒä»åç§ã¯sampleãã£ã¬ã¯ããªå
ã«gocodeçšã®ãã£ã¬ã¯ããªãæºåããŸãïŒ $ mkdir sample $ cd sample $ mkdir gocode $ ls gocode $ export GOPATH=~/sample/gocode $ echo export GOPATH=$GOPATH &gt;&gt; ~/.bash_profile 2.ãgitãšhgã®ã€ã³ã¹ããŒã« $ brew install git $ brew install hg 3.ãgo commandã§revelãã€ã³ã¹ããŒã« $ pwd ~/sample $ go get github.com/revel/revel 4.ãrevelã®command line toolãã€ã³ã¹ããŒã« $ go get github.com/revel/cmd/revel $ export PATH=”$PATH:$GOPATH/bin” 5.ãrevelã³ãã³ãã§ç¢ºèª 以äžã§revelã®ã€ã³ã¹ããŒã«ã¯å®äºã§ãã applicationã®äœæ ã§ã¯applicationãäœæããŠãã©ãŠã¶äžã«è¡šç€ºããŠã¿ãŸãããã ãµã³ãã«ã³ãŒãã®å®è¡ sampleappãäœæããŸã sampleappãã§ããã®ã§å®è¡ããŠã¿ãŸãã ãã©ãŠã¶ã§http://localhost:9000ã«ã¢ã¯ã»ã¹ããŸãã å®è¡ã§ããŸããã 倿°ã®åãæž¡ã ã§ã¯ãcontrollerããviewãžå€æ°ãæž¡ããŠãã©ãŠã¶ã«è¡šç€ºããŠã¿ãŸãããã controllerã«äžèšã®ããã«å€æ°ãå®çŸ©ããŸãã ãã©ãŠã¶ã«è¡šç€ºããããã«viewãã¡ã€ã«ãäžèšã®ããã«å€æŽããŸãã local:9000ã«ã¢ã¯ã»ã¹ãããš… åæ ãããŸããïŒ ãŸãšã ä»åã¯Goã®ãã¬ãŒã ã¯ãŒã¯ã§ããRevelã®å°å
¥ããç°¡åãªå€æ°ã®åãæž¡ããŸã§ãã£ãŠã¿ãŸããã revelã¯æ©èœãè±å¯ã§åå¿è
ã§ãæ±ãããããã¬ãŒã ã¯ãŒã¯ãªã®ã§ããããã©ãã©ãGoã®å匷ã«åœ¹ç«ãŠãŠè¡ãããšæããŸãã
ããã«ã¡ã¯ããµãŒããŒãµã€ããšã³ãžãã¢ã®è
åã§ãã ä»åã¯WWDC2017ã«ãŠios11ãxcode9ã®çºè¡šãªã©çãäžãããèŠããŠããAppleãã Swift3ã«è§ŠããŠã¿ãããšæãç°¡åãªäºéšæ§æã®ãã¥ãŒã¹é
ä¿¡ã¢ããªãéçºããŸããã ç°å¢ãšçšæãããã® News API (Tech Crunch APIã䜿çšããŸãã) https://newsapi.org/techcrunch-api swift3 xcode8.3 ãããžã§ã¯ããäœæãã ãã¥ãŒã¹èšäºã®ã¬ã€ã¢ãŠããèšçœ®ãã NavigationVar TableView ããããã®éšåã«ã€ããŠã¯Constrainãé©çšãããã UIãèšçœ®ãã Prototype Cellsã1ã«èšå®ãã Image Viewãèšçœ®ãã Labelãèšçœ®ãã UITableViewCellãç¶æ¿ãã UIKitã®UITableViewCellãç¶æ¿ããŠã«ã¹ã¿ã ã»ã«ã®è¡šç€ºæ¹æ³ãèšå®ãã ArticleCell.swiftãäœæããã MainStoryboardããåããŒãããArticleCell.swiftã«çŽä»ããããã import UIKit class ArticleCell: UITableViewCell { @IBOutlet weak var imgView: UIImageView! @IBOutlet weak var title: UILabel! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } } åæ§ã«Article.swiftã§èšäºã®ãªããžã§ã¯ããäœæã çŸåšã¯ååŸããã¿ã€ãã«ãURLãç»åURLãåãåãããã«èšå®ããŠããã import UIKit class Article: NSObject { var title: String? var url: String? var imageUrl: String? } ViewConrollerã§tableViewã®ã»ã«ã«å€ãèšçœ®ãã func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "articleCell", for: indexPath) as! ArticleCell // ã»ã«ã®ã¿ã€ãã«ã«ããã¹ããããã§èšå®ãã cell.title.text = "THIS IS NEWS TITLE" return cell } func numberOfSections(in tableView: UITableView) -&gt; Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int { return 1 } ããã ãã§buildãããšä»¥äžã®ããã«ã·ãã¥ã¬ãŒã¿ãèµ·åã㊠èšå®ããå€ãtableViewã«å
¥ã£ãŠããããšããããã æ¬¡å ä»åã¯storyboardã®äœ¿ãæ¹ãã¡ã€ã³ã«ç»åã§è§£èª¬ããŠãããŸãããå®éã«ååŸããããã®å®è£
ã swift3ã§ãã¥ãŒã¹é
ä¿¡ã¢ããªãäœã£ãŠã¿ã #2 (å®è£
ç·š) ã«ãŠç¶ããŸãã®ã§ãã¡ããã芧ãã ããã
ããã«ã¡ã¯ïŒ2幎ç®ã®ãµãŒããŒãµã€ããšã³ãžãã¢ã®è
åã§ãã å
æ¥ãŠãšãã£ã³ã°ããŒã¯ã§éå¬ãããWedding Park TECH TALK #1 çç£æ§åäžãã«ã€ããŠå ±åèŽããŸãã ãŠãšãã£ã³ã°ããŒã¯ã§ã¯ãããŸã§ãæã«äžåºŠç€Ÿå
ã§ãšã³ãžãã¢LTäŒãéå¬ããŠããŸããã 瀟å
LTäŒã®åãçµã¿ã«ã€ã㊠ä»åã¯ãNo.1 BRIDAL TECH TEAM Byâ20ããç®æãã«ããããåããŠãŠãšãã£ã³ã°ããŒã¯äž»å¬ã®meetupåLTäŒãéå¬ããŸããïŒ èšå¿µãã¹ã第äžåç®ã®ããŒãã¯ãçç£æ§åäžã äŒå Žã¯æšå¹ŽãªãŒãã³ãããŠãšãã£ã³ã°ããŒã¯ã®Creators Studioãéç§°: Cã¹ã¿ãã§ãã ãŠãšãã£ã³ã°ããŒã¯ ãšã³ãžãã¢ã»ãã¶ã€ãã®ããã®éäžã¹ããŒã¹ãCã¹ã¿ãéèš çç£æ§ã«ã€ããŠç±ãããŒã¯ãç¹°ãåºããæ§åãã¬ããŒãããããŸãïŒ éäŒã®æšæ¶ WeddingââPark ââè
å 瀟å¡ã®ã¡ã³ããŒã¯å
¬åã®LTäŒã¯åéå¬ãšããããšã§å°ãç·åŒµæ°å³ã®äžãéäŒã®æšæ¶ãããŸããã ãŠãšãã£ã³ã°ããŒã¯ã®LTäŒã¯åå ããå
šå¡ãæ¬æ°ã§æè¡ã®åžåãããããããŠåå ããå
šå¡ã楜ãã ã¿ããªã§çãäžããããšãç®æããŠããŸãã äŸãã°… “é¢çœã”ã”ãããã”ããã¯äœ¿ãããïŒ”ãšæã£ãæã¯ããã£ïŒãã£ãšããæã声ã«åãããŠææãã éã«ã”ãã埮劔ã”ãããã®ïŒ”ãšããæã¯ãã㌅.ãã£ãšåžããŸãã(ããã¯ãªããªãåºãŸãã) äŒå Žãã¢ããããŒã ãªé°å²æ°ã«ãªã£ããšããã§ä¹Ÿæ¯ããŠLTãã¹ã¿ãŒãïŒ çºè¡šå
容 1.âââ WeddingââPark ââæ± ãGoã®èªåçæã«ããçç£æ§åäžã 2. ââã²ã¹ãLTæ PNSK ââãWhat is the Productivity growth?ã 3. ââWeddingââParkââ ä¹
ä¿ ãGoogle Apps Script ã§æ¥åå¹çåã 4. ââWeddingââParkââ æŠç° ââãFirefoxã¢ããªã³ã§æ¬çªç°å¢å€å®ã 5. ââWeddingââPark ââæ å±± ããããã¬ã¹Chromeã§ãã©ãŠã¶ãã¹ãèªååå
¥éã 1.ââãGoã®èªåçæã«ããçç£æ§åäžã WeddingââParkââ æ± ãµãŒããŒãµã€ããšã³ãžãã¢ã®æ±ããããŠãšãã£ã³ã°ããŒã¯ã§ã¯Goå匷äŒã®äž»æ
åœãããŠããGo倧奜ããªæ±ããããä»åã¯Goã®ã³ãŒãæŽåœ¢ã«ã€ããŠã®ãã©ãŒãããã®ãã³ãã¬ãŒãäœæã§çç£æ§åäžã®LTãããŸããã ããã«ãã£ãŠèª°ãè§Šã£ãŠãçµ±äžãããæžãæ¹ã«ãªãããšããã³ãŒãã¬ãã¥ãŒããã¹ãã«ãããŠãçç£æ§ãã¢ããïŒå€§èŠæš¡éçºãªãããã§å®å¿ã§ããïŒ 2.ââãWhat is the Productivity growth?ã âã²ã¹ãLTæ ââ PNSK ä»åã²ã¹ãLTæ ã§åå ããŠããã ããPNSKãããä»åã¯ãšã³ãžãã¢ãšããŠã®çç£æ§ãšã¯ïŒ ã«ã€ããŠç»å£ããŠããã ããŸããã æ¥åã§äœ¿ãããŒã«ã®éžå®ã«ã€ããŠãæ¥åã¡ãŒã«ã®ãå€ãã®èšå®ã«äœ¿ãã¹ã¯ãªãããHubotã®çµã¿åããã«ããçç£æ§åäžãªã©ãªã©ç±ãçºè¡šãããŠããã ããŸãã ã æ¥é ã®æ¥åã§ã«ãŒã«åãããŠããããšãªã©ãçç£æ§ã«ç¹ããããšãã§ããªããæ¹ããŠèããããããŸããïŒ 3.ââãGoogle Apps Script ã§æ¥åå¹çåã âWeddingââParkââ ä¹
ä¿ 2幎ç®ã®ãµãŒããŒãµã€ããšã³ãžãã¢ã®ä¹
ä¿ããããæ¥åã§éçºãµãŒããŒã®ãã¹ãã¡ãŒã«ããã£ã«ã¿ãªã³ã°ããã倿 é£çµ¡ãéç¥ããŠãããbotããªã©ãGoogle Apps Scriptã«ãã£ãŠçç£æ§åäžããã話ãããŠããã ããŸããã Google Apps ScriptååŠè
ã«ãäžå¯§ã§ããããããLTã§ãææ¥ããã§ãäžäŸ¿ã ãšæããããšãããã«èªååãããããšãã§ãããã§ããïŒ 4.ãFirefoxã¢ããªã³ã§æ¬çªç°å¢å€å®ã âWeddingââParkââ æŠç° ãŠãšãã£ã³ã°ããŒã¯ã®å§åйãµã€ãã§ãããPhotoraitãã®éçºè²¬ä»»è
ãããŠããæŠç°ãããä»åã¯åããŠFireFoxã§äœ¿ãã¢ããªã³éçºããããšã«ã€ããŠã話ãããŠããã ããŸããïŒ éçºç°å¢ã§ã¹ããŒãžã³ã°ç°å¢ãšæ¬çªç°å¢ãªã©ããã¡ã€ã³ãèŠãã«ç¬æã«èŠèŠçã«å€æã§ããã¿ãã«ã©ãŒãšããã¢ããªã³ã§æ¥åã®çç£æ§ãäžãã£ããšã®ããšã§ãïŒ ãã¢ããããã·ã¥ãŒã«ã«ãªããŸãããçãäžãããããŠã³ããŒãæ°ãåŸã
ã«äžãã£ãŠããŠããããã§ãïŒFireFoxãŠãŒã¶ã®çãããæ€çŽ¢ããŠã¿ãŠãã ããïŒ 5.ããããã¬ã¹Chromeã§ãã©ãŠã¶ãã¹ãèªååå
¥éã âWeddingââParkââ æ å±± 5幎ç®ã®ãµãŒããŒãµã€ããšã³ãžãã¢ã§ãŠãšãã£ã³ã°ããŒã¯ã®å§åйãµã€ããRingraphãã®éçºè²¬ä»»è
ã®æ å±±ããã æ¥åã«ãããŠSEOãªã©ã®éçºã§ã¿ã°ããã£ã¹ã¯ãªãã·ã§ã³ãªã©ã®ããŒã¿ã®æ¡ä»¶ã«ãã£ãŠç°ãªããã¿ãŒã³ã®ãã¹ããããã®ãå°å³ã«å€§å€ã ãšããèæ¯ããèªååããã話ããããŠããã ããŸããã Node.jsã§GoogleãæäŸããŠããPuppeteerãšèšãã©ã€ãã©ãªãŒãçšããŠéçºãçç£æ§ã®åäžãããŸããïŒChrome59 (2017/6æé ) ããæèŒãããæ©èœã§ãã®ã§æ¥åã§ãããã«äœ¿ãããïŒ æèŠªäŒã®æ§å LTåŸã«ã¯åå ããã ããçæ§å
šå¡ã§æèŠªäŒïŒãšã³ãžãã¢ã®LTäŒã¯ã寿åžããã¶ãšããã€ã¡ãŒãžã§ãã ä»åã¯ç¬¬äžåéå¬ãšããäºã§ã衚åéã£ãœã軜é£ãå²ã¿ãŸããïŒ ãšã³ãžãã¢å士ããããæ
å ±äº€æãããšãŠãçãäžãããŸããïŒ æåŸã« ç·å¢30人ãè¶
ããã¡ã³ããŒã§ã決ãŸãã®ãŠãšãããŒãºããšããªããã®éååçïŒ ãŠãšãåmeetupåLTäŒã倧æåã§ããïŒïŒ åå ããŠãã ãã£ãã¿ãªããŸãããããšãããããŸããïŒ æ¬¡åã®éå¬ããæ¥œãã¿ã«ïŒïŒ
ããã«ã¡ã¯ããšã³ãžãã¢ã®æ±ã§ãã ä»åã¯ãPHPerãåŠã¶Go Tourããšããé¡ç®éãã Tour of Go ãPHP䜿ããåŠã¶äžã§ã®èšèªã®éããæžããŠãããããšæããŸãã ãªããã®èšäºãæžãã«è³ã£ãããããã¯åŒç€Ÿã§ã¯èšèªã«Goãæ¡çšããŠãããŸããã æ
£ã芪ããã èšèªãšã¯å¥ã«æ°ããèšèªãæ±ãã®ã¯ãéåžžã«æžæãããšãå€ããšæããŸãã çè
èªèº«ããããGoãšPHPãè¡ãæ¥ãããããPHPã§ã»ãã³ãã³å¿ããGoã§å€æ°å®çŸ©ã§ $piyo ãšæžããŠããŸãã ãåããªã…ãªãã§ãŒ…ãã£ãšãå°æ¥ãããããã¹ãããŸã£ãããšããããŸãã ãªããªãæ°ããèšèªã䜿ãã®ã«ã¯ãã®èšèªããªãããŸã§çµæ§å€§å€ã§ãã ãŸããTour of Go ã¯ä»èšèªãåŠãã§ããåæã§ã®ãµã€ãã§ãã ããããGoèšèªã¯ä»èšèªãšåæãéãããšãå€ããå°å
¥ã«æžæãç¹ãå€ã
ãããšæããŸãã ãŸããèšèªã«è§ŠããŠã¿ãã®ã倧äºã ãšæããŸãã®ã§ãã£ãã倧éæã«Tour of Goã®ãœãŒã¹ãPHPã§æžããããããªæãã§ãã£ãŠç޹ä»ããŠãããããšæããŸãã â» Goã«é¢ãã説æã¯æ¬å®¶ãµã€ãã§ããTour of Goã«ãããŸãã®ã§ããã¡ããããããªãããåæã«ãã¡ãã®èšäºãã¿ãŠããã ããã°ãšæããŸãã â» æ¬èšäºã¯ãå°å
¥ã®ãããããéèŠãããããæ£ããã¯ç°ãªããããªã誀解ãäžãã衚çŸãå«ãŸããŠããããšãããããŸãããäºæ¿ããã ããã°å¹žãã§ãã Hello World! å®çªã®Hello WorldïŒ ãã®æ®µéã§ã¯ã ããŸããªã ãªæžãæ¹ã§ãããããã¯Go tourãåŸã
説æããŠãããŠããŸãã package main import "fmt" func main() { fmt.Println("Hello, äžç") } (åŒçš: https://go-tour-jp.appspot.com/welcome/1) 1.phpã®Hello world! print("Hello, äžç\n"); 2.php goã«äŒŒããŠã¿ãå Žå namespace main; class Main { static function main() { print("Hello, äžç\n"); } } Main::main(); Packages ããã±ãŒãžãšimport ããã±ãŒãžã¯ãä»èšèªã§ãããšããã®åå空éã«è¿ãã§ãã package main import ( "fmt" "math/rand" ) func main() { fmt.Println("My favorite number is", rand.Intn(10)) } (åŒçš: https://go-tour-jp.appspot.com/basics/1) 1.phpã§æžãå Žå print('My favorite number is '.mt_rand(0, 10)); 2.php goã«äŒŒããŠã¿ãå Žå namespace main; // PHPã§æšæºé¢æ°ãªã®ã§ãæ¬æ¥æžããŸããããgoã®importã¯phpã§ããuseã«è¿ãã§ãã // use Math; // use String; class Main { static function main() { print('My favorite number is '.mt_rand(0, 10)); } } Main::main(); 颿° 颿° åŒæ°ã®åãåŸãã«ã€ãã®ã¯ç¬ç¹ã§ããã package main import "fmt" func add(x int, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) } (åŒçš: https://go-tour-jp.appspot.com/basics/4) namespace main; class Main { protected function add(int $x, int $y) : int { return $x + $y; } static function main() { print(self::add(42, 13)); } } Main::main(); 2å€ä»¥äžè¿åŽãã颿° 2å€ä»¥äžè¿åŽããã®ã¯æ¢åã³ãŒããæžãããããšãã«ã·ã³ãã«ã«ããããã§ããã package main import "fmt" func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap("hello", "world") fmt.Println(a, b) } (åŒçš: https://go-tour-jp.appspot.com/basics/4) PHPã®å Žå2å€ä»¥äžè¿åŽã§ããªãã®ã§äžèšãªæãããããã namespace main; class Main { protected function swap(string $x, string $y) : array { return [$y, $x]; } static function main() { list($a, $b) = self::swap("hello", "world"); printf("%s %s", $a, $b); } } Main::main(); åºæ¬ã®åïŒãŒãå€ïŒ ãŒãå€ã¯Goç¹æãªã®ã§PHPã§ã©ã®ããã«èšè¿°ãããã¯ãªãã§ãããPHPã§ã¯åºæ¬çã«å
šãŠåæåããŠäœ¿ã£ãŠãããšæãã°è¯ãããšæããŸãã package main import "fmt" func main() { var i int var f float64 var b bool var s string fmt.Printf("%v %v %v %q\n", i, f, b, s) } (åŒçš: https://go-tour-jp.appspot.com/basics/12) $i = (int)0; $f = (float)0.0; $b = false; $s = ''; printf("%d %f %b %s", $i, $f, $b, $s); ãããã ã£ãã§ãããã ä»åã¯Goã®åºç€ãPHPã«çµ¡ããŠç޹ä»ããŸããã æ¬¡åã¯å¶åŸ¡æ§æã玹ä»ããããšæããŸãã
ããã«ã¡ã¯ã岩æ©è¡åŸã§ãã ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ã奜è©ã® 第2å ã«ç¶ããŸããŠãåŸ
æã®ç¬¬3åããã£ãŠãããããšæããŸããååãŸã§ã«äœæããã€ã³ãã©æ§æã« KVSïŒElasticacheïŒ ã ããŒã¿ããŒã¹ïŒRDSïŒ ããã« CDNïŒCloudFrontïŒ ã远å ããŠãWebã¢ããªã±ãŒã·ã§ã³ã®åäœç°å¢æ§ç¯ã®ä»äžããããŸãããã RDSãèšå®ãã äžéšã®äŸå€ãé€ããWEBãµã€ãäžã§ã¯æ
å ±ãæŽçããŠæ ŒçŽããã»æ€çŽ¢ããŠåãåºããšããæ©èœæ§ãå°ãªãããæã£ãŠãããšèšã£ãŠãéèšã§ã¯ãããŸããããã®ãããªãµã€ãã«ãããŠã¯å¿
ç¶çã«äœããã®ããŒã¿ããŒã¹ãµãŒããŒãéçšããããšã«ãªããŸãã仿¥ã®WEBã§äœ¿ãããããŒã¿ããŒã¹ã¯æŠã以äžã®4ã€ã«çµãããŠããã®ã§ããããããã®DBãµãŒããŒãæ§ç¯ã»éçšããå Žåã«ãããŠã¯ãéçšæã®æ»æŽ»ç£èŠãããã¯ã¢ããããã©ã¡ãŒã¿ã®èª¿æŽãããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ãªã©ãåžžã«èª²é¡ãšãªããŸããAmazon RDSãæŽ»çšããããšã§ãããã®èª²é¡ãèªååããŠéçšã®æéãäœæžããWEBãµãŒãã¹ãã®ãã®ã®ãµãŒãã¹åäžãšããæ¬è³ªçãªèª²é¡ã«æ³šåããããšãåºæ¥ãŸããæ©éèšå®ããŠã¿ãŸãããã ãŸãRDSã®äœæã«å¿
èŠãªãµãããããäœæããŸãã äœææã«ãµããããã®ååãééããŠããŸã£ãã®ã§çŽããŠãããŸãïœ æ¬¡ã«ã¡ãã¥ãŒããRDSãéžæããŠäœæãŠã£ã¶ãŒããèµ·åããŸãããã MySQLãšäºææ§ãããããã©ãŒãã³ã¹ãé«ãAuroraãéžæããããšããã§ãããç¡æå©çšæ ã®å¯Ÿè±¡å€ã§ãã®ã§ä»åã¯MySQLãéžæããŸãã ä»åã¯ããã°äœæçšã§ãã®ã§ãéçºïŒãã¹ããéžãã§æ¬¡ã«é²ã¿ãŸãã DBã®è©³çްãèšå®ããŠãããŸãããã¹ããããã ãã§ããã°ç¡æå©çšæ å
ã§äœ¿çšå¯èœãªæ©èœã ãã«çµããã§ãã¯ããã¯ã¹ãæå¹ã«ããŠãããŸãã ãããªãã¯ã¢ã¯ã»ã¹å¯èœèšå®ããããã¯ã¢ããæéã®èšå®ãè¡ã次ã«é²ã¿ãŸãã ããã§ã€ã³ã¹ã¿ã³ã¹ãäœæãããŸããã æ¥ç¶ã®ç¢ºèªåã«ã»ãã¥ãªãã£ãŒã°ã«ãŒããèšå®ããŸããRDSã®ãŠã£ã¶ãŒãã§æ°ããã»ãã¥ãªãã£ãŒã°ã«ãŒããäœæãããã¯ããªã®ã§ãã¡ãã倿ŽããŸãã æ¬¡ã«MySQLã«æ¥ç¶ããããã®ãŠãŒãã£ãªãã£ãŒããæ¥ç¶å
ã«ãªã ec2 ãžã€ã³ã¹ããŒã«ããŸãã [ec2-user@ip-10-0-0-204 ~]$ sudo yum install mysql Loaded plugins: priorities, update-motd, upgrade-helper amzn-main/latest | 2.1 kB 00:00 amzn-updates/latest | 2.3 kB 00:00 Resolving Dependencies –> Running transaction check —> Package mysql.noarch 0:5.5-1.6.amzn1 will be installed –> Processing Dependency: mysql55 >= 5.5 for package: mysql-5.5-1.6.amzn1.noarch –> Running transaction check —> Package mysql55.x86_64 0:5.5.54-1.16.amzn1 will be installed –> Processing Dependency: real-mysql55-libs(x86-64) = 5.5.54-1.16.amzn1 for package: mysql55-5.5.54-1.16.amzn1.x86_64 –> Processing Dependency: mysql-config for package: mysql55-5.5.54-1.16.amzn1.x86_64 –> Running transaction check —> Package mysql-config.x86_64 0:5.5.54-1.16.amzn1 will be installed —> Package mysql55-libs.x86_64 0:5.5.54-1.16.amzn1 will be installed –> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: mysql noarch 5.5-1.6.amzn1 amzn-main 2.7 k Installing for dependencies: mysql-config x86_64 5.5.54-1.16.amzn1 amzn-updates 49 k mysql55 x86_64 5.5.54-1.16.amzn1 amzn-updates 7.5 M mysql55-libs x86_64 5.5.54-1.16.amzn1 amzn-updates 815 k Transaction Summary ================================================================================ Install 1 Package (+3 Dependent packages) Total download size: 8.3 M Installed size: 31 M Is this ok [y/d/N]: y Downloading packages: (1/4): mysql-5.5-1.6.amzn1.noarch.rpm | 2.7 kB 00:00 (2/4): mysql-config-5.5.54-1.16.amzn1.x86_64.rpm | 49 kB 00:00 (3/4): mysql55-5.5.54-1.16.amzn1.x86_64.rpm | 7.5 MB 00:00 (4/4): mysql55-libs-5.5.54-1.16.amzn1.x86_64.rpm | 815 kB 00:00 ——————————————————————————– Total 8.7 MB/s | 8.3 MB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : mysql-config-5.5.54-1.16.amzn1.x86_64 1/4 Installing : mysql55-libs-5.5.54-1.16.amzn1.x86_64 2/4 Installing : mysql55-5.5.54-1.16.amzn1.x86_64 3/4 Installing : mysql-5.5-1.6.amzn1.noarch 4/4 Verifying : mysql-5.5-1.6.amzn1.noarch 1/4 Verifying : mysql55-5.5.54-1.16.amzn1.x86_64 2/4 Verifying : mysql55-libs-5.5.54-1.16.amzn1.x86_64 3/4 Verifying : mysql-config-5.5.54-1.16.amzn1.x86_64 4/4 Installed: mysql.noarch 0:5.5-1.6.amzn1 Dependency Installed: mysql-config.x86_64 0:5.5.54-1.16.amzn1 mysql55.x86_64 0:5.5.54-1.16.amzn1 mysql55-libs.x86_64 0:5.5.54-1.16.amzn1 Complete! äžæãå
¥ããŸããã ããã§ã¯ç¢ºèªããŠã¿ãŸãããã [ec2-user@ip-10-0-0-204 ~]$ mysql -h yattemiyou.cxotk9qitqo0.ap-northeast-1.rds.amazonaws.com -u yattemiyou –password=Abc12345 amazonaws.com -u yattemiyou –password=Abc12345 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 54 Server version: 5.6.27-log MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. mysql> æåããŸããïŒ KVSïŒElasticacheïŒãèšå®ãã ãµã€ãäžã®åŠçã®äžéšã«ã¯èšç®ãæ€çŽ¢åŠçã«æéã®æãããã®ãããã§ããããäŸãã°1æ¥1åã ãæŽæ°ãããããŒã¿ã幟ã€ããã£ãŠããã®æ€çŽ¢1åã«ã€ã300ããªç§æããå Žåã«WEBãµã€ããžå€§éã®ã¢ã¯ã»ã¹ããã£ããã©ããªãã§ããããããã£ãšãµã€ãã¯ç°¡åã«ãã³ã¯ããŠããŸãã§ããããã(æ€çŽ¢åŠçãé
ãã®ã倧åé¡ã§ãã) ãããã1æ¥1åããæŽæ°ãããªãããŒã¿ãåãåºãããã«æ¯åºŠDBãµãŒããŒãžåãåããã«è¡ãã®ã¯å¿äœç¡ãã§ãããïŒäœåŠãã«æ€çŽ¢çµæã ããæºããŠããããããªä»çµã¿ã欲ãããšæããŸãã ãããªæã«ããŸã掻çšãããã®ãKVS (Key Value Store)ã§ãããã£ãã®1æ¥1åã ãæŽæ°ãããããŒã¿ãäŸãã°ã仿¥ã®å€©æ°ãšããŸããããæ ŒçŽããã仿¥ã®å€©æ°ã300ããªç§ãããæããŠDBãµãŒããŒããåãåºããŠããã®çµæã ãããtoday-weatherããšåŒã°ããèå¥åãä»ããŠå¥ã®å Žæã«ä¿åããŠãããŸãããã®æ¥ã®ãã¡ã§ããã°ããŒã¿ã®å
容ã¯å€ãããŸããã®ã§ãå¿
èŠã«ãªã£ããDBã®ä»£ããã«éœåºŠKVSãžåãåãããŠããtoday-weatherãã®èå¥åãã€ããããŒã¿ãèŠæ±ããŸãããããŠæ¥ä»ãå€ãã£ãããã®æ¥æåã®1åã ããåã³DBãµãŒããŒããããŒã¿ãåãåºããŠKVSã«ä¿ç®¡ããŸããããããããšã§ãDBãžã®ãªã¯ãšã¹ãåæ°ãåæžã§ããŸããã ãã®ãããªããã«ãŠã§ã¢ãWEBã¢ããªã«æŽ»çšããããšã§ãµã€ãã®ããã©ãŒãã³ã¹ãããã«æ¹åããããšãå¯èœã«ãªããŸããããã§ã¯ã€ã³ãã©ã®èšå®ãããŠã¿ãŸãããã ElastiCacheã®èšå®ã«å¿
èŠãªãµãããããèšå®ããŸãã ElastiCacheã®ã¡ãã¥ãŒãããµããããã°ã«ãŒããèšå®ããŸãããµããããã°ã«ãŒããšã¯ãæåéãVPCå
ã®ãµãããããæããAWSäžã®æŠå¿µãšãªããŸãïŒ ç¬¬äžååç
§ ïŒã ããã§ã¯ElastiCacheã®ãã£ãã·ã¥ã¯ã©ã¹ã¿ãŒãäœæããŸãã(ãšã¯èšã£ãŠãä»åã¯æå°æ§æãšããŠè€æ°å°äœ¿ããªãã®ã§ã¯ã©ã¹ã¿ãŒã§ã¯ãããŸãããâŠ) RedisãmemcachedãéžæããŸããNumber of replicasã«Noneãèšå®ãããšåäžæ§æã«ãªããŸããïŒmemcachedã«ã€ããŠããã®ãŸãŸã§ã¯ã¬ããªã±ãŒã·ã§ã³ãã§ããªãã®ã§ç¹å¥ãªæ¹æ³ãå¿
èŠãšãªããŸã…çè
ã¯ãšãŠãåµããŸããwãïŒ Node typeã¯ããã©ã«ãã§ããªã倧ããã®ã€ã³ã¹ã¿ã³ã¹ã¿ã€ããèšå®ãããŠããŸãããã¹ãã§äœ¿ãå Žåã¯å°ãããã®ãèšå®ããŸãããã Advanced Redis SettingsãéããŠãå
çšäœæããSubnet Groupãæå®ããŸãããã æ£ããäœæã§ããããã§ãã®ã§æ¥ç¶ã詊ã¿ãŠã¿ãŸãã ãšã³ããã€ã³ãæ
å ±ãã³ããŒããŠå床ã¿ãŒããã«ãéããŸãã Redisã«ã¯ãšããããtelnetã䜿ãã°æ¥ç¶ãåºæ¥ãŸãã®ã§ãã£ãŠã¿ãŸãããã [ec2-user@ip-10-0-0-204 ~]$ sudo yum install telnet Loaded plugins: priorities, update-motd, upgrade-helper Resolving Dependencies –> Running transaction check —> Package telnet.x86_64 1:0.17-48.8.amzn1 will be installed –> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: telnet x86_64 1:0.17-48.8.amzn1 amzn-main 62 k Transaction Summary ================================================================================ Install 1 Package Total download size: 62 k Installed size: 107 k Is this ok [y/d/N]: y Downloading packages: telnet-0.17-48.8.amzn1.x86_64.rpm | 62 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 1:telnet-0.17-48.8.amzn1.x86_64 1/1 Verifying : 1:telnet-0.17-48.8.amzn1.x86_64 1/1 Installed: telnet.x86_64 1:0.17-48.8.amzn1 Complete! [ec2-user@ip-10-0-0-204 ~]$ telnet yattemiyou-kvs.f1pyqo.0001.apne1.cache.amazonaws.com 6379 Trying 10.0.10.39… telnet: connect to address 10.0.10.39: Connection timed out ç¹ãããŸããã§ãã æ±ã ããããèŠãŠã¿ãã©ãããã»ãã¥ãªãã£ãŒã°ã«ãŒããèšå®ããã®ãå¿ããŠããããã§ããããããã§ããwã ã§ã¯ElastiCacheã§äœ¿ãããŠããã»ãã¥ãªãã£ãŒã°ã«ãŒãã調ã¹ãŸãã ã»ãã¥ãªãã£ãŒã°ã«ãŒãã®IDãåãã£ãã®ã§ããã«å¯ŸããŠRedisã®æ¥ç¶ããŒãã«åœãã6379ãå
éšã§èš±å¯ããããã«ããŸãã å床詊ããŠã¿ããšãã [ec2-user@ip-10-0-0-204 ~]$ telnet yattemiyou-kvs.f1pyqo.0001.apne1.cache.amazonaws.com 6379 Trying 10.0.10.39… Connected to yattemiyou-kvs.f1pyqo.0001.apne1.cache.amazonaws.com. Escape character is ‘^]’. SET a a +OK GET a $1 a ããŸããããŸããïŒ CloudFrontãèšå®ãã ããã§ã¯ä»äžãã«CloudFrontãèšå®ããŸããCloudFrontã¯Amazon AWSãæäŸããŠããCDNæ§ç¯çšã®ã€ã³ãã©ã§ãã CDNãšã¯æ£åŒã«ã¯ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ãªã©ãšåŒã°ããŸãããããã¯ãŠã§ãã³ã³ãã³ãã®é
ä¿¡çšãšããŠæé©åããããããã¯ãŒã¯ã®ããšããããŸãã AWSã®å ŽåELBã®åã«CloudFront(CDN)ããªã¯ãšã¹ããåŸ
ã¡åããŠãããéå»ã«åæ§ã®ãªã¯ãšã¹ãããã£ãå Žåã¯ãELBã«éããèªèº«ã§ã³ã³ãã³ãã®é
ä¿¡ãè©ä»£ãããããšããæ©èœãæã£ãŠããŸããããããããšã§è² è·åæ£ãå³ãããšãã§ããŸã(衚瀺é床ã®åäž)ã ä»åã®èšå®äŸã¯åçãªWebã¢ããªåãã«å¿
èŠãªèšå®ãæœãããã®ã«ãªããŸããã¢ããªã±ãŒã·ã§ã³ã®æ©èœãå
šãŠã®CDNã«åæ£ããããšã¯ã§ããŸããã®ã§ãååãšããŠåçèŠçŽ ã¯ELBãçµç±ããããšã«ãªããŸãããCloudFrontãšELBã¯å€ªããããã¯ãŒã¯ã§æ¥ç¶ãããŠããŸãã®ã§ãåçèŠçŽ ãå«ããµã€ãã§ãã£ãŠãããã©ãŒãã³ã¹ã芳ç¹ããå©çšãã䟡å€ã¯ãããŸãã ã¡ãã¥ãŒããCloudFrontãã²ãããŸãã WebåŽã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãäœæããŸãã OriginãšããŠæ¢åã®(ã³ã³ãã³ãã®å€§å
ãšãªã)ELBãéžæããŸãã --> Allowed HTTP MethodãšããŠå
šãŠãéžæããŸãããããå¿ãããšåçèŠçŽ ãæ£ããåããªããªãããšããããŸãã ãŸããForward CookiesãQuery String Forwardingãå¿ããã«èšå®ããŠãããŸãã ä»åã¯ãã¹ãçšã§ãã®ã§ãPrice ClassãšããŠæãå®ããã®ãéžæããAlternate Domain Namesãèšå®ããŠãããŸãã äžã«ã¹ã¯ããŒã«ããŠããã®éšåã¯ãã®ãŸãŸæ¬¡ã«é²ã¿ãŸãããã ãã£ã¹ããªãã¥ãŒã·ã§ã³ãã§ããŸããã height=”1264″ class=”alignnone size-full wp-image-1064″ /> äžå¿èŠããŠã¯ããããã§ãã… ç¢ºèªã®çºã«ãªã¯ãšã¹ãã®å¿çããããŒãèŠãã¿ãŸãããã ãxxx.cloudfront.net(CloudFront)ããšãããŸãããïŒããã§ã¯ã©ãŠãããã³ãããäžæãè¿ã£ãŠããŠããããšãããããŸããã ããã§ã第ïŒåã第ïŒåã«æž¡ããŸããããRote53ïŒDNSãµãŒããŒïŒ -> CloudFrontïŒCDNïŒ -> ELBïŒããŒããã©ã³ãµãŒïŒ -> EC2ïŒWebãµãŒããŒïŒ ãŸã§ã®ãã±ããã®æµããæ£ããèšå®ããããšãã§ããŸããã 第3åç®ã®æåŸã« ä»åã®ãã£ãŠã¿ããAWSã·ãªãŒãºã§ã¯ãç°¡åã§ã¯ãããŸããAWSäžã«ãããã€ã³ãã©æ§ç¯æé ããã£ãšã玹ä»ããŸããããAWSã§ã¯ãŸã ãŸã å€ãã®ã€ã³ãã©ãµãŒãã¹ãæäŸãããŠããããã®ãã¡ã®ã©ãããå®éã®WEBãµãŒãã¹éå¶ã«åœ¹ç«ã€åŒ·åãªæŠåšãšãªããŸããä»åŸããã®ãããªã·ãªãŒãºèšäºãéããŠçããã«æçãªæ
å ±ãæäŸã§ããã°ãšæããŸãã ãŸããã®ã·ãªãŒãºã§ãããŸã§ã€ã³ãã©ãšçžé ãã£ãæ¹ã§ãAWSã«å¯Ÿããçè§£ãå°ãã§ãæ·±ãŸã£ãŠããã°å¹žãã§ãã ãæž
芧é ãããããšãããããŸããã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããŠãã ããã âã·ãªãŒãº ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬1åïŒ ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬2åïŒ âçè
ã®ããããèšäº ã»ãDBèšèšå
¥é|ERå³|MySQLãã³ã³ããã¬ã·ãŒãããåŠã¶ïŒããŒã¿ã¢ããªã³ã°ææ³ ã»ãæ©æ¢°åŠç¿å
¥é|Python|scikit-learnãçµå±äœãã§ããïŒcheat-sheetãã解説ããŠã¿ãç¯
åããŸããŠïŒæ°åïŒå¹Žç®ãšã³ãžãã¢ã®é«å¶ã§ãã å
æ¥ãŠãšãã£ã³ã°ããŒã¯ã§éå¬ããããšã³ãžãã¢LT女åäŒãã«ã€ããŠå ±åèŽããŸãã 女åãšã³ãžãã¢ãå€ã掻èºãããŠãšãã£ã³ã°ããŒã¯ã§ã¯ã宿çã«å¥³åãšã³ãžãã¢LTãéå¬ãã 瀟å
å€ãã女åãšã³ãžãã¢ãéãŸã£ãŠæè¿æ°ã«ãªãæè¡ãã¯ãŒã¯ã¹ã¿ã€ã«çãããŒãã«LTã宿œããŠããŸãã ä»åã¯ãä»åŸå°±è·æŽ»åããããåŠçã«åããŠã女åãšã³ãžãã¢ã®ä»äºã«ã€ããŠã¢ã¬ã³ã¬ã話ãLTäŒãéå¬ããŸããã 女åãšã³ãžãã¢ã ãã§ã¯ãªããåŠçãç»å£OKãšããããšã§ãæè¿ãã£ãŠããããšãèªå·±ç޹ä»ãªã© æ§ã
ãªè©±é¡ã§å€§çæ³ã ã£ããã®æ§åã«ã€ããŠã¬ããŒããããŠããã ããŸãïŒ LTäŒã®é°å²æ° äŒå Žã¯ãŠãšãã£ã³ã°ããŒã¯ã®äŒè°å®€ã åŠçå
šå¡ãLTäŒååå ãšããããšã§ãåãã¯å°ãç·åŒµæ°å³ã 衚åéÃ女åäŒãšããããšãããã 軜é£ããããªã«ãã©ããžã§ããã¯ããããŠãªãŒã¬ããã¯…ïŒ ãããªè»œé£ãé£ã¹ãªããããšãŠãã¢ããããŒã ãªé°å²æ°ã§LTäŒã¹ã¿ãŒãïŒ çºè¡šå
容 1. âââWeddingââPark ââè
沌 âããšã³ãžãã¢ã®ä»äºãšãã£ãªã¢ã 2.âââ WeddingââPark ââæ å±± ã5幎ç®å¥³æ§ãšã³ãžãã¢ãèãããšã³ãžãã¢è·ã®é
åã 3. ââWeddingââParkââ è¥å®® ââãç§ã®å°±æŽ»ãšä»ã 4. ââWeddingââParkââ è°·æžââ ãïœæ°å3幎ç®ãšã³ãžãã¢ã®ææŠïœæ°èŠäºæ¥ã®ã¡ãã£ã¢ãç«ã¡äžããïŒã 5.ââ åŠçæ ââOãã ãOã§ããåããŸããŠãã 6.ââ åŠçæ ââYããââ ãâã¢ã³ããã€ãã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠâã 7. ââWeddingââParkââ æç° ââãWPPJã«ã€ããŠã 8. ââWeddingââPark ââåŸè€ââ ãäŒç€Ÿç޹ä»ã 1.ããšã³ãžãã¢ã®ä»äºãšãã£ãªã¢ã] WeddingââPark ââè
沌 ãŠãšãã£ã³ã°ããŒã¯ã®äžã§ãæ¥çæŽã®é·ãè
沌ããã ãšã³ãžãã¢ãšãã£ãŠããè·çš®Ãæ¥çš®ãã®æ°ã ãæ§ã
ãªä»äºãããäžã§ã ä»äºã®ããªã·ãŒãšãã軞ããã£ãããšãã€ããšã倧åãšããã話ãããŠãã ãããŸããã 2.ââã5幎ç®å¥³æ§ãšã³ãžãã¢ãèãããšã³ãžãã¢è·ã®é
åã WeddingââParkââ æ å±± æç³»åºèº«ã§ããããšã³ãžãã¢æ°åïŒæçã®æ å±±ããã å
¥ç€ŸããŠããã®ïŒå¹Žéãæ¯ãè¿ããªããããšã³ãžãã¢è·ã®é
åãæããŠãã ãããŸããã ãšã³ãžãã¢ã«ã¯ãåŠãŒããšãã人ã«ã¯åªããæåããããã 倧å€ãªææãå©ãåã£ãŠããããã§ããçŽ æµãªæåã§ãïŒ 3.ââãç§ã®å°±æŽ»ãšä»ã âWeddingââParkââ è¥å®® æ°åïŒå¹Žç®ãããããšåæã®è¥å®®ããã 就掻æä»£ãåããŠããä»ãã話ããŠããã ããŸããã 就掻ã®è»žããããšããããåããŠãã人ã瀟å
ã®é°å²æ°ãã«å€ããã åãã¯ãããä»ãå®éã«äººã®åªããã«æ¯ããããŠããããšããã話ãããŠãã ãããŸããã 4.ââãïœæ°å3幎ç®ãšã³ãžãã¢ã®ææŠïœæ°èŠäºæ¥ã®ã¡ãã£ã¢ãç«ã¡äžããïŒã âWeddingââParkââ è°·æž æ°åïŒå¹Žç®ã®è°·æžãããïŒå¹Žç®ã®ãšãã«ãšã³ãžãã¢ãšããŠç«ã¡äžãããDRESPICãã«ã€ããŠã®ãè©±ã æ§ã
ãªææŠãã§ããæ³å以äžã«å€§å€ãªããšããæ³å以äžã«å¬ããããšãããããããããã§ãïŒ ææŠããªãããããšãã«ã¯å©ããŠãããããšãã§ããã æé·ããããšã³ãžãã¢ã«ãšã£ãŠæé«ã®ç°å¢ã§ãã 5.ãOã§ããåããŸããŠãã åŠçæ Oãã æµ·å€ã®ãããããªåå°ããŸããã®ãè¶£å³ãšããOããã èŠããèšèªãçŸå°ã§ã€ããã®ããããæ¥œãããã ããã§ãïŒ å€åœèªã«äŒŒãŠãããããšããOãããããèå³ã®æã¡æ¹ã§ããã°ã©ã ã®å匷ãã¯ããã ä»ã§ã¯ã¢ããªãã€ãã£ãŠããããã§ãïŒ 6.ãã¢ã³ããã€ãã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠã åŠçæ Yãã å®éã«èªåã§éçºããAndroidã¢ããªã«ã€ããŠçºè¡šããŠããã ããŸããã æ©èœã®ã²ãšã€ãå²ãåæ©èœã¯åãäžããŸã§çްããèšå®ããããšãã§ãã å®éã«ã€ãã£ãŠã¿ããïŒãšæããŸããïŒ ããããªããšããã¯èªåã§èª¿ã¹ããã人ã«èãããããŠå®æãããããã§ãããããïŒ 7.ãWPPJã«ã€ããŠã WeddingPark æç° æ°åïŒå¹Žç®ã®æç°ãããäŒç€Ÿã®ã«ã«ãã£ãŒãå®ããè²ãŠãããšãç®çã«æŽ»åããŠãã ãWPPJ(瀟å
掻æ§åãããžã§ã¯ã)ãã«ã€ããŠç޹ä»ããŠããã ããŸããã ãã åãã®ã§ã¯ãªããäŒç€Ÿã®æªæ¥ã«ã¯ã¯ã¯ã¯ããªããåããã…ãšãŠãé¿ããŸããã 8. ãäŒç€Ÿç޹ä»ã WeddingPark åŸè€ æåŸã«ã¯äººäºã®åŸè€ãããããŠãšãã£ã³ã°ããŒã¯ã«ã€ããŠã®ã話ã ãŠãšãã£ã³ã°ããŒã¯ã®ã«ã«ãã£ãŒãäŒãããããªã ããããã®ã€ãã³ããå¶åºŠã«ã€ããŠèª¬æããŠããã ããŸããïŒ æèŠªäŒã®æ§å LTã®ããšã«ã¯é£²ãã ãé£ã¹ããããªããã®æèŠªäŒãè¡ããŸããïŒ é£ã³èŸŒã¿LTãããŠãããåŠçããããããã就掻ã«ã€ããŠããšã³ãžãã¢ã«ã€ããŠãªã© ããŸããŸãªè³ªåããã£ãããšããšãŠãçãäžãããŸããïŒ æåŸã« åå ããã13åã§ã決ãŸãã®ãŠãšãããŒãºããšããªããã®éååçïŒ ãŠãšãåã®åŠçããããæãããŠã®LTäŒã倧æåã§ããïŒïŒïŒ åå ããŠãã ãã£ãã¿ãªããŸãããããšãããããŸããïŒ
ããã«ã¡ã¯ïŒãšã³ãžãã¢ã®ä¹
ä¿ã§ãã å
æéå¬ããã Microsoft Build 2017 ã§ã¯ïŒBash on Windows ã§ïŒ ãããŸã§ã® Ubuntu ã®ã»ãã«ïŒ Fedora ãš openSuSE ã® ãµããŒããçºè¡š ãããŸããã ãã®æ©èœã¯ïŒ2017 幎ç§ã«ãªãªãŒã¹äºå®ã® Windows 10 Fall Creators Update ã«å«ãŸããããã§ããæ¥œãã¿ã§ããã ä»åã¯ïŒçŸåšå©çšå¯èœãª Bash on Ubuntu on Windows ã«ã€ããŠïŒWindows 10 Creators Update ç°å¢ã§å°å
¥ããŠã¿ãŸããã ç°å¢ Windows 10 Pro 64 bit ããŒãžã§ã³ïŒ1703ïŒCreators UpdateïŒ OSãã«ãïŒ15063.0 æé Windows ãéçºè
ã¢ãŒãã«å€æŽ ãŸãã¯ïŒWindows ãéçºè
ã¢ãŒãã«å€æŽããŸãã ã¹ã¿ãŒãã¡ãã¥ãŒâãèšå®ãâãæŽæ°ãšã»ãã¥ãªãã£ããéžæããéçºè
åããã¿ããéããŸããéããããéçºè
ã¢ãŒãããéžæãïŒéçºè
ã¢ãŒããæå¹ã«ããŸãã Windows Subsystem for Linux ã®ã€ã³ã¹ããŒã« 次ã«ïŒBash on Ubuntu ã䜿ãããã«ïŒWindows Subsystem for Linux ãã€ã³ã¹ããŒã«ããŸãã ã³ã³ãããŒã«ããã«ãéããŸãïŒã¹ã¿ãŒãã¡ãã¥ãŒâãWindows ã·ã¹ãã ããŒã«ãâãã³ã³ãããŒã«ããã«ãïŒã ç¶ããŠïŒãããã°ã©ã ãã®é
ç®ãéžæãïŒãWindows ã®æ©èœã®æå¹åãŸãã¯ç¡å¹åããéããŸãã ãWindows Subsystem for Linux (Beta)ãã«ãã§ãã¯ãå
¥ããŠïŒïŒ¯ïŒ«ãã¯ãªãã¯ã ã€ã³ã¹ããŒã«ãå®äºãããåèµ·åããŸãã Bash on Ubuntu ã®ã€ã³ã¹ããŒã« Windows Subsystem for windows ã€ã³ã¹ããŒã«ãæžãã ã®ã§ïŒBash on Ubuntu ã®èšå®ãé²ããŠãããŸãã PowerShell ãèµ·åãïŒ bash ã³ãã³ããå®è¡ããŸãããã®äœæ¥ã¯ïŒã³ãã³ãããã³ããã§ã倧äžå€«ãªã®ã§ããïŒä»å㯠Creators Update ã§ããã©ã«ãã®ã·ã§ã«ãšãªã£ã PowerShell ã䜿ã£ãŠã¿ãŸããã > bash 衚瀺ãããã¡ãã»ãŒãžã確èªãïŒ y ãå
¥åããŸãã å±éãå®äºãããšïŒãã±ãŒã«ã®èšå®ïŒãŠãŒã¶ãšãã¹ã¯ãŒãã®èšå®ãè¡ãããŸãããã¡ããã¡ãã»ãŒãžã«æ²¿ã£ãŠå®è¡ããŸãããã¹ãŠã®èšå®ãçµããã°ã€ã³ã¹ããŒã«å®äºã§ãã ç¶ããŠïŒUbuntu ã®ã¢ããããŒããè¡ã£ãŠãããšè¯ãã§ãããã bash $ sudo apt-get update $ sudo apt-get upgrade 䜿ã£ãŠã¿ãŸããã ã€ã³ã¹ããŒã«ãå®äºããŸããã®ã§äœ¿ã£ãŠã¿ãŸãããã èµ·å ä»åæ§ç¯ããïŒBash ç°å¢ã¯ïŒæ¬¡ã®æ¹æ³ã§èµ·åã§ããŸãã PowerShellïŒãããã¯ã³ãã³ãããã³ããïŒãèµ·åããŠïŒ bash ã³ãã³ããå®è¡ ã¹ã¿ãŒãã¡ãã¥ãŒãããBash on Ubuntu on Windowsããèµ·å Ubuntu ã®ããŒãžã§ã³ 次ã®ã³ãã³ãã§ç¢ºèªã§ããŸããä»å㯠16.04.2 LTS ã§ããã bash $ cat /etc/issue Ubuntu 16.04.2 LTS Windows ãžã®ã¢ã¯ã»ã¹ Windows ã® ãã©ã€ã㯠/mnt/ ã«ããŠã³ããããŠããŸããäŸãã° C ãã©ã€ãã¯ïŒ /mnt/c/ ã«ããŠã³ããããŠããŸãã åŸã£ãŠïŒWindows ã®ãŠãŒã¶ãã©ã«ããžã¯ïŒ /mnt/c/Users/<ãŠãŒã¶å> ã§ã¢ã¯ã»ã¹ã§ããŸãã ããã±ãŒãžã®ã€ã³ã¹ããŒã« Ubuntu ãšåæ§ã«ïŒaptã³ãã³ãã§ããã±ãŒãžã®ã€ã³ã¹ããŒã«ãã§ããŸãã ããšãã°ïŒemacs ãã€ã³ã¹ããŒã«ããã«ã¯æ¬¡ã®ã³ãã³ãã bash sudo apt-get install emacs åã€ã³ã¹ããŒã« Bash ç°å¢ãåã€ã³ã¹ããŒã«ããããªã£ããïŒPowerShell ã§æ¬¡ã®ã³ãã³ããå®è¡ããŸãããã > lxrun /uninstall /full lxrun /install ããã§ïŒ lxrun /uninstall /full 㯠Bash ç°å¢ã®ã¢ã³ã€ã³ã¹ããŒã«ïŒ lxrun /install 㯠ã€ã³ã¹ããŒã«ã瀺ããŸãã ãããã« ä»åã¯ïŒWindows 10 Creators Update ã« Bash on Ubuntu on Windows ãå°å
¥ããŸããã ãããŸã§ã¯ Cygwin ã MSYS2 ã䜿ã£ãŠéçºç°å¢ãæ§ç¯ããŠããã®ã§ããïŒç°å¢ã®éãããã¡ãã£ãšããäœæ¥ã§æéåã£ãŠããŸãããšããããŸããã ãããã㯠Bash on Ubuntu ã䜿ããããšã§ïŒãããªæ©ã¿ãããè§£æŸããããã§ããä»åŸã¯ Bash ç°å¢ã«åçš®éçºç°å¢ãæ§ç¯ããŠããããšæããŸãã åèæç® Bash on Ubuntu on Windows Microsoft å
¬åŒããã¥ã¡ã³ããè±èªã§ããïŒã³ãã³ããªãã¡ã¬ã³ã¹ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°ã圹ã«ç«ã¡ãŸãã ãŠãšãã£ã³ã°ããŒã¯ã§ã¯ããšã³ãžãã¢ãåéããŠãããŸãã Weddingparkãå§ããåçš®ãµã€ãããµãŒãã¹ãäžç·ã«äœããŸãããïŒ ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
ã¯ãããŸããŠïŒã·ã¹ãã ãšã³ãžãã¢ã®è°·æžã§ãã 仿¥ã¯ãDRESPIC( https://drespic.net )ã«ã€ããŠã話ãããããšæããŸãã DRESPICãšã¯…ïŒ DRESPICã¯ã2017幎1æ11æ¥ã«ãªãŒãã³ããããŠãšãã£ã³ã°ãã¬ã¹ã®ã¯ãã³ããµã€ãã§ããç§ã¯ãã®ãµã€ãã®ç«ã¡äžããšã³ãžãã¢ãšããŠãæšå¹ŽããDRESPICã«é¢ãã£ãŠããŸãããµã€ãã0ããç«ã¡äžãããšããããããããšäžå®ãšãããããªæ°æã¡ãæ±ããŠãäºæ¥è²¬ä»»è
ã®ãããã¬ã¹æ¥çã«é©åœãèµ·ããããïŒããšãã倢ã«ä¹ã£ãã£ãŠãäžç·ã«å¶ãããïŒãšæ±ºæããDRESPICãã€ãã£ãŠããŸããã DRESPICã¯å¥³åããŒã ã§ã幎ãè¿ãããšãããããããïŒãšæããã®ã䌌ãŠããŠãããŽæ±ºå®ããµã€ãã®ãã€ã¹ããªã©ãããŒã å
šå¡ã§ã絶察ã«ãããããïŒãšçŽåŸã§ãããã®ãéããŠãå
šå¡ã§DRESPICãµã€ããžã®æãæ·±ããªããã倧äºã«å€§äºã«ãªãªãŒã¹ã«åããŠè²ãŠãŠããŸããã DRESPICãå§åçãããããªãµã€ãã«ãããïŒãšããæããããããã®ããã«ã¯æè¡ã倧äºãšããããšã§ãæè¡é¢ããã®èšäºã§æ¹ããŠèŠçŽããŠã¿ãããšã«ããŸããã DRESPICã®ç¹åŸŽ å
ã«ãæžããŸããããDRESPICãšã¯ããŠãšãã£ã³ã°ãã¬ã¹ã®ã¯ãã³ããµã€ãã§ããã¯ãã³ããã¡ã€ã³ã«ããã¬ã¹ãã©ã³ãã®ããŒãžããã¬ã¹ã·ã§ããã®ããŒãžããã¬ã¹ãã¿ãã·ãŒãã®ååããŒãžãªã©ããããæ§ã
ãªæ€çŽ¢è»žã§æ€çŽ¢ãã§ããæ©èœãããŠãŒã¶ãŒãæžã蟌ããSNSã®ãã£ãŒãæ©èœããªã©æ§ã
ãªæ©èœããããµã€ãã§ãã éçºæã®æ¡ä»¶ãç¹åŸŽãããå®çŸãããã£ãããšã¯å€§ããïŒã€ã§ãã ã»æ¯èŒçèŠæš¡ã倧ãããµã€ãã§ãéçºã1人ã§ã¯ãªãããš ãLéçºè
ããšã«æžãæ¹ã倧ããå€ããããšããã ãLä»ã®ã¡ã³ããŒããããªãã³ãŒããæžãããããšããã ãLå
±éã®åŠçãéçºè
éã§å¹ççã«å
±æããããªã ãLããšãä¿®æ£ãããšãã«åœ±é¿ãåããå Žæãæç¢ºã«ããŠãããã ã»ã¯ãã³ãéšåãšSNSã®éšåã§æé©ãªèšèšãç°ãªãããš ãLã¯ãã³ãããŒãžã¯SEOãæèããããããJSã§ã®å®è£
ã¯å±æçã«ããã ãLSNSã®ããŒãžã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ãéèŠããŠãJSã§SPAå®è£
ããã ãL…ã§ãäž¡æ¹ã®ç»é¢ã«å
±éã®ã¢ãžã¥ãŒã«ãããããã³ãŒããåå©çšããã ( å·Š:ã¯ãã³ã / å³:SNSã®ãã£ãŒã) ãã®æç¹ã§ãµãŒããµã€ãã®èšèªã¯æ±ºå®ããŠããã®ã§ã äžèšã®ããšããµãŸããŠãããã³ããšã³ãã®æè¡éžå®ã«å
¥ããŸããã DRESPICèšèªéžå® ãã®åã« ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªã®éã æåã«å®çŸ©ãããããããŠãããŸãããã ããã¬ãŒã ã¯ãŒã¯ãã»ã»ã»ã¢ããªã±ãŒã·ã§ã³ã®éªšæ Œãæ
ããã®ã§ãéçºããããšãã«éçºè
ã¯ãã®éªšæ Œã«æ²¿ã£ãŠèä»ããããŠãããã®ã§ãã ãã©ã€ãã©ãªãã»ã»ã»éªšæ Œã§ã¯ãªããèä»ããè£å©ãããã®ã§ãããã®ãããéªšæ Œéšåã¯ãã¬ãŒã ã¯ãŒã¯ã«ä»»ããããèªåã§å®è£
ããå¿
èŠããããŸãã ãã¬ãŒã ã¯ãŒã¯ãç¥ã£ãŠããã ãã§ãæ°ããéçºè
ããããžã§ã¯ãã«åå ããããã£ãããä¿¡é Œæ§ã®é«ãéªšæ Œã䜿ããããšã§ãåã¢ãžã¥ãŒã«ã®åœ¹å²ãåé¢ãããä»ã®ã¢ãžã¥ãŒã«ã«åœ±é¿ãäžããã³ãŒãããæœåšçã«ãã°ãæœã¿ãããã³ãŒããæžãã«ãããªããŸãã DRESPICã®èšèªéžå® éžã¶ãã€ã³ãã¯3ã€ã§ããã ã»å°æ¥æ§ãããããš ãLå°æ¥ã¡ã€ã³ã¹ããªãŒã ã«ãªããããªæè¡ã®æ¹ããããŠããŠãèç©ãããŠãã ã»åäžã¢ãžã¥ãŒã«ããSPAãŸã§å¯Ÿå¿ã§ããæè»æ§ãããããš ãLåäžã¢ãžã¥ãŒã«ã®åã蟌ã¿(ã¯ãã³ãéšå)ããSPA(SNSéšå)ãŸã§æè»ã«å¯Ÿå¿ã§ãã ãLã³ã³ããŒãã³ãã®çµã¿åããã§ãã倧ããªã³ã³ããŒãã³ããäœãããšãã§ãããšããâ ã»åŠç¿ã³ã¹ããé«ãããªãããš ãLã¡ã³ããã³ã¹æ§ãäžããããåŒãç¶ãã«æéãããã£ãŠããŸããŸã 以äžãèžãŸããŠãéžå®ãã¯ããŸããŸããã åºãŠããåè£ã¯ãã®3ã€ã§ãã â Angular2 â¡Vue.js â¢React.js + redux ãããå
ã»ã©ã®ãã€ã³ãããµãŸããŠèããŠã¿ãŸããã… Angular2 å°æ¥æ§ â æè»æ§ â³ åŠç¿ã³ã¹ã â³ (TypeScriptã®åŠç¿ã³ã¹ããé«ããã§ãã) Vue.js å°æ¥æ§ ⯠æè»æ§ ⯠åŠç¿ã³ã¹ã â (ã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã®äžéãªã®ã§SPAã®ããã«è¿œå ã®ãã¬ãŒã ã¯ãŒã¯ãäœ¿ãæ¹ãããããããã ãšVue.jsã®ã·ã³ãã«ããæŽ»ãããªã…ïŒ) React.js + redux å°æ¥æ§ â æè»æ§ â åŠç¿ã³ã¹ã ⯠(Vue.jsããåŠç¿ã³ã¹ãé«ãã§ããAngular2ããã¯äœãã§ãã) 以äžã®çµæãèžãŸããŠãéžã°ããã®ã¯ redux + React.js ã§ããããããŠåæã«è°·æžã®å匷ãå§ãŸãã®ã§ãããå匷ã®éçšãã©ããã§ã話ãã§ããã°ãããªãšæããŸãïŒ DRESPICã®ãããã 1/11ã«ãªãªãŒã¹ãããã°ããã®DRESPICããŸã ãŸã ãã¡ãã¡æ©ãã®ãµã€ãã§ãããŠãŒã¶ãŒããããéãŸãããããã®ã¯ãã³ãã倧åã«ããã£ãšãããããŠã誰ã«ãšã£ãŠããããããããµã€ãã«è²ãŠãŠãããŸãïŒãããããDRESPICããããããé¡ãããŸãïŒ ãŠãšãã£ã³ã°ããŒã¯ã§ã¯ããšã³ãžãã¢ãåéããŠãããŸãã Weddingparkãå§ããDRESPICãªã©åçš®ãµã€ãããµãŒãã¹ãäžç·ã«äœããŸãããïŒ ITÃãã©ã€ãã«ã§æ¥çãå€ããïŒãããã§ãã·ã§ãã«ãªWEBãšã³ãžãã¢åéïŒ
ã¯ããã« ããã«ã¡ã¯ã岩æ©è¡åŸã§ãã ä»åã¯ç§ãå®åã§è¡ã£ãŠããããŒã¿ã¢ããªã³ã°ææ³ïŒå®éææ³ãšã¯åã°ããã§ãã…ïŒã玹ä»ããããŸãã ããŒã¿ã¢ããªã³ã°ã¯ããåç¥ã®éãããã®åŸã®ã·ã¹ãã éçºãæ¡åŒµã¹ããŒãããŸãã·ã¹ãã èªèº«ã®ããã©ãŒãã³ã¹ã«ãæ·±ãé¢ãã£ãŠããŸãããããã©ã®ããã«èšèšããããéçºãããžã§ã¯ããé²ããäžã§å€§ããªã«ã®ã«ãªããŸãã ãªãã¬ã·ãŒããªã®ã ã¢ããªã³ã°ããäžã§ããã®å¯Ÿè±¡ãšãªããµãŒãã¹ã»ã·ã¹ãã ã®ããžãã¹ããžãã¯ã仿§ãæ·±ãçè§£ããå¿
èŠããããŸããã¬ã·ãŒãã®èæ¯ã«ãããç©ãè²·ãããšããè¡çºã¯è³æ¥µèº«è¿ãªãã®ã§ããã誰ããããã®ã¬ã·ãŒããçºè¡ããããŸã§ã®æµããçµéšã§ç¥ã£ãŠããŸãããŸãã¬ã·ãŒãã¯ããã®å°ããªçŽã®äžã«ãåºèãããååããªã©ãWEBãµãŒãã¹ã§éŠŽæã¿ãããæŠå¿µãå€ãå«ãŸããŠãããèšç·Žãããäžã§éåžžã«æé ãªãã®ã§ãïŒãã³ã³ããããªããã¬ãŒãºã¯æŽã¿ã«äœ¿ãããŠããã ããŸããwïŒã ä»åã®è©±ã®ãšãªã¢ ä»åã¯æŠå¿µèšèšãè«çèšèšã®ååãŸã§ã®å
容ã察象ãšããŠããŸããå
·äœçã«ã¯ãããç¹å®æ¥ã®ã¬ã·ãŒãäžèЧãåºåã§ããã·ã¹ãã ãã®ããŒã¿ã¢ããªã³ã°ãè¡ã£ãŠãããŸãã æŠå¿µïŒå®äœïŒã®æŽãåºããšããºã«å æŠå¿µã®æŽãåºã äžã®ã¬ã·ãŒãã«ã€ããŠæŠå¿µãæŽãåºããŠã¿ãŸããããæ·±ãèããå¿
èŠã¯ãããŸãããå
ãã¯äžãããªããããã«ãªã¹ãåããŠãããŸãããã -æŠå¿µãªã¹ã ãåºåã ãåºã ãé»è©±çªå·ã ãäœæã ãæ¥æã ãååã ã倿®µã ãåæ°ã ãç·é¡ã ããã€ã³ãã ãåºå¡ã ãšãããããããŸã§ã§ãæ¬¡ã¯æŠå¿µã®ããºã«åãèããŠãããŸãããã æŠå¿µïŒå®äœïŒã®ããºã«å ãã®æŠå¿µã®ããºã«åã¯æŠå¿µå士ã®é¢ä¿ã以äžã®ã«ãŒã«ã«åœãŠã¯ããªããäœã£ãŠãããŸãã Aã®BïŒææïŒ ex) ç§ïŒAïŒã®ããœã³ã³ïŒBïŒ Aã®BïŒå±æ§ïŒ ex) ãã£ãã·ã¥ïŒAïŒã®éŠãïŒBïŒ AãBããïŒäž»è¿°ïŒ ex) ã¿ã¯ã·ãŒïŒAïŒãæ¢ãŸãïŒBïŒ BãAããïŒåè©-ç®çèªïŒ ex) 客ïŒBïŒãä¹ããïŒAïŒ AãããããBãããïŒååšçç±ïŒ ex) ç«ïŒAïŒããããã鳎ã声ïŒBïŒããã ãã®å Žåã¯å
šãŠä»¥äžã®ãããªåœ¢ïŒAã®ç®±ã®äžã«Bã®ç®±ãå
¥ã圢ïŒã«ãªããŸãã ã§ã¯ æŠå¿µãªã¹ã ãããã£ããäœã£ãŠãããŸãããã ãŸãããåºåããšãåºãã§ããããã¯ãåºã®åºåã§ããã… ãšãªããŸã ïŒç®±ã®å€§ãããäœçœ®ã¯èª¬æäžã®äŸ¿å®çãªã®ãã®ã§ãïŒ ã ç¶ããŠãé»è©±çªå·ããäœæãã远å ããŠãããŸããããåºã®é»è©±çªå·ãåºã®äœæã 次ã«é çªãããããšãæ¥æããªã®ã§ãããããã¯ãããªããšä»ã®ããºã«ã«åœãŠã¯ããããªãããã«æããŸããããã¯å€§åãªæèŠã§ãããåœãŠã¯ããããªãã㯠äœãæŠå¿µïŒå®äœïŒãè¶³ããªã ããšãæå³ããŠããŸãïŒãã¡ããããããåœãŠã¯ãŸããªãããšããããŸãã…ïŒãããã¯äžæŠã¹ãããããŸãããã ã§ã¯ã æŠå¿µãªã¹ã ãããããªããšåœãŠã¯ããããããªãã®ãæ¢ããš…ãåºå¡ãã¯ã©ãã§ããããã ããã¯ãã£ãšä»¥äžã®ããã«ãªãã§ãããã ç¶ããŠãååãã«ã€ããŠèããŠããããã®ã§ããããŸãã¯ãã®ãååãèªèº«ã«å
¥ããããªç®±ãèããŠã¿ãŸãããã æŠå¿µãªã¹ã ãèŠããš…ã倿®µããåæ°ãã¯ã©ãã§ãããããååã®å€æ®µãååã®åæ°…ããããã§ãã ãããªæãã«ãªãã§ããããã ããŠããã¯ã©ãã«å
¥ãã§ãããããåºãã®ãååããšèãããããã§ããããïŒä»®ã«ãã®ããã«èããå Žåããåºãã®ãååãã® ãåæ°ã ãšã¯ã©ãããæå³ã§ããããèšèã®ãŸãŸã«æãããšãåºé ã«é³åãããååã®åæ°ãããåºã®åšåº«ååã®åæ°ããšããæå³ã«èãããŸããæ¬æ¥ã®æŠå¿µãããºã¬ãŠããŠããŸããã ããºã«ã®åæŠå¿µã¯å
šãŠ å®äœ ã§èããããã«ããŸãããããã®ãååããååãã¹ã¿ãŒãšæããŠããŸããšãããºã«ã¯äžæãã€ãããŸããïŒãã¹ã¿ãŒã¯ãããŸã§æ£èŠåããçµæã§å®çŸ©ãããä»®æ³ã®æŠå¿µã§ãïŒãã§ã¯ããã®ã¬ã·ãŒããç©èªã£ãŠãããååããšã¯äœãªã®ã§ãããã ãååãããã¬ã·ãŒãã®èæ¯ã«ãããç©ãè²·ãããšããè¡çºïŒã¹ããŒãªãŒïŒã®äžã§é¢ä¿ãæã£ãã®ã¯ã©ã®å Žé¢ã ã£ãã§ãããã…ããã¯ããåºå¡ãã ã販売ã ããå Žé¢ïŒãããã¯ãã客ããã賌å
¥ãããå Žé¢ïŒã§ã¯ãªãã§ããããïŒ åŸã£ãŠã販売ããšããæŠå¿µã远å ããŠãããºã«ã¯ä»¥äžã®ããã«ãªããŸãã è¶³ããªãã£ãæŠå¿µã远å ãããããšã§ãå
ã»ã©åœãŠã¯ããããªãã£ããæ¥æãããŸããç·é¡ããªã©ã以äžã®ããã«åœãŠã¯ãããããã§ãã ãŸããæåŸã«æ®ã£ãããã€ã³ããã«ã€ããŠãããã®ãŸãŸã ãšåœãŠã¯ããããªãã®ã§æŠå¿µã远å ããå¿
èŠããããŸãããã®ããã€ã³ããã¯ãã販売ããã ã客ã ã®ããã€ã³ããã«ãªããšæãããã®ã§ã ã®ããã«ãã客ãã远å ãããšäžæãåœãŠã¯ããããŸããã ãããŸã§ããŸãšããŠã¿ãŸããš æŠå¿µã®ããºã«åãè¡ãããšã§æŠå¿µå士ã®é¢ä¿ãå¯èŠåã§ããã æŠå¿µã®ããºã«ãäžæãã¯ãŸããªãå Žåã¯ãå¿
èŠãªæŠå¿µãè¶³ããªãå¯èœæ§ãããã å
·äœçã«ç»å Žããå Žé¢ãã€ã¡ãŒãžããªããæŠå¿µã®ããºã«ã¯å
šãŠå®äœã§èããŠããïŒãã¹ã¿ãŒã¯ãããŸã§æ£èŠåããçµæã§å®çŸ©ãããä»®æ³ã®æŠå¿µïŒã ãšãªããŸãã ERDïŒå®äœé¢é£å³ïŒã«å±é ããŠããããERDã«å±éããŠããã®ã§ãããããã¯æ©æ¢°çã§ããäŸã«äžè¿°ã®Aã»Bã®æŠå¿µã䜿ããšä»¥äžã®ããã«å±éã§ããŸãã AãBãåŸå±ïŒAãšBã¯èŠªãšåã®é¢ä¿ïŒ AãšBã¯ã1察å€ãã®é¢ä¿ ããããå
ã»ã©äœã£ãæŠå¿µã®ããºã«å
šäœã«é©å¿ãããšä»¥äžã®ããã«å±éã§ããŸãã ããã«ãäœãåŸå±ããŠããªãæŠå¿µ ãåºåã ãé»è©±çªå·ã ãäœæã ãæ¥æã ãç·é¡ã ããã€ã³ãã ãåæ°ã ã倿®µã ã«ã€ããŠã¯ã以äžã®ããã«ã㮠芪 ã®å±æ§ã«å«ããŠãè¯ãã§ãããã æŠå¿µ â 屿§ ã¯äºãã«å£æ ¹ãææ§ã§ãã©ã¡ãã§å®çŸ©ããããã¯èšèšè
ã®è£éã«ä»»ãããããšãåŸã
ã«ããŠãããŸããèªèº«ã®å Žåã¯ãç®çã®ã·ã¹ãã ã«ãããŠããã®æŠå¿µãéèŠïŒå¥ã®æŠå¿µãåŸå±ããŠããçïŒã§ããã°æŠå¿µãšããŠãããã§ãªãå Žåã¯å±æ§ãšããŠæ±ãããšãå€ãã§ãã ããŒã¿ããŒã¹ERDãžã®å€æãšæ£èŠå ä»åºŠã¯ãäžã®ERDãããŒã¿ããŒã¹ã®çºã®ERDã«æžãæããŸãã å€éšã㌠ïŒä»ã®è¡šã«é¢é£ä»ããããããŒïŒãçšããããšã§ãããæ©æ¢°çã«ã§ããŸãã æžãæãæã«æ³šæããç¹ãšããŠã¯ã ãµãã²ãŒãããŒïŒä»£çäž»ããŒãæå³ãæããªãIDãã£ãŒã«ãã远å ãäž»ããŒã®ä»£çããããïŒ ãå
šãŠã®ãšã³ãã£ãã£ã«çœ®ããããšãŠãã ãµãã²ãŒãããŒã«ã€ããŠã¯ãæ¯ãåŠãã®è«äºãå··ã§ãªãããŠããŸãããèªèº«ã®å人çãªèŠè§£ãšããŠã¯ã誰ãèŠãŠãããã«äž»ããŒã ãšå€æã§ããããäž»ããŒåšãã®ä»æ§å€æŽã«åŒ·ãããæè¿ã®ãã¬ãŒã ã¯ãŒã¯ã䜿ã£ãéçºã«ãããŠã¯ããã©ã«ãäž»ããŒãIDãšãªã£ãŠãããã®ç¹ããå
¥ããããã«ããŠããŸãã æ£èŠå ããã§ãäžã®ïŒã€ã®ãšã³ãã£ãã£ïŒæŠå¿µïŒã¯ä»¥äžã®ããã«ããªãœãŒã¹ç³»ããã€ãã³ãç³»ãã«åé¡ã§ããŸãã -ãªãœãŒã¹ç³» ãåº ãåºå¡ ã客 ãåå -ã€ãã³ãç³» ã販売 åé¡ã®æ¹æ³ãšããŠã¯ããã®ãšã³ãã£ãã£å
ã«ãæéãçèŠçŽ ãå«ããã©ããïŒè¥ããã¯å«ãŸãããããã©ããïŒãå«ãå Žåã¯ãã€ãã³ãç³»ããå«ãŸãªãå Žåã¯ããªãœãŒã¹ç³»ããšããŠåé¡ã§ããŸããä»å㯠販売 ã« æ¥æ ãå«ãŸããã®ã 販売 ã¯ã€ãã³ãç³»ã«åé¡ã§ããŸãã ãŸãããã§èª¬æããŠãããªãœãŒã¹ç³»ã®ãšã³ãã£ãã£ã¯ã芪ã«ãã¹ã¿ãŒã®ãªãœãŒã¹ç³»ãšã³ãã£ãã£ãæã€ããšãã§ãããããè¡ãããšã§ããŒã¿ã®åé·æ§ãé²ããŸããåé·ã«ãªãåŸããã£ãŒã«ããäžç·ã«ãã¹ã¿ãŒã«ç§»ããŸãã ä»åã¯å¿
èŠããªãã®ã§è§ŠããŸããããå¿
èŠãããã°ãã®ä»æ£èŠåããã®ã¿ãã³ã°ã§è¡ããšè¯ãã§ãããã å°ããŸãšããŸããš åãšã³ãã£ãã£ã«ã¯ãµãã²ãŒãããŒã眮ã åãšã³ãã£ãã£ã¯ãªãœãŒã¹ãšã€ãã³ãã«åé¡ã§ãã æŠå¿µã®ããºã«åããå°åºããããªãœãŒã¹ç³»ãšã³ãã£ãã£ã«ã¯ ãã¹ã¿ãŒ ãªãœãŒã¹ç³»ãšã³ãã£ãã£ã芪ã«è¿œå ã§ããïŒæ£èŠåïŒ ãã®ä»æ£èŠåããã®ã¿ã€ãã³ã°ã§è¡ã ãšãªããŸãã ãªã¬ãŒã·ã§ã³ãšãšã³ãã£ãã£ã®æé©å æ£èŠåããERDã¯ãéçšã§ãããŽãŒã«ã§ã¯ãããŸããã ç®çã®ãµãŒãã¹ã®ä»æ§ãèæ¯ããŸãå®éã®ããŒã¿ã®åãåºãæ¹ãèŠãªãããããæé©åããŠãããŸãããã å
ãã¯ããã®ãµãŒãã¹ã®ä»æ§ãèæ¯ãéã¿ãŠæ¢åERDã®ãªã¬ãŒã·ã§ã³ãé©åãã©ããèŠãŠãããŸãããã ãªã¬ãŒã·ã§ã³ãèŠã æ¢åã®ERDã¯ä»¥äžã®ãããªãªã¬ãŒã·ã§ã³ã«çŽããã®ã§ã¯ãªãã§ããããã åºãã¹ã¿ãŒ x åºïŒ ãåºãã¯ãåºãã¹ã¿ãŒãã®ãã¡ã販売ïŒãšããã€ãã³ãïŒããã£ãåºãšè§£éã§ããããã 1 察 0 or 1ããšããŸããã åºå¡ãã¹ã¿ãŒ x åºå¡ïŒ ãåºå¡ãã¯ãåºå¡ãã¹ã¿ãŒãã®ãã¡ã販売ãè¡ã£ãããšãããåºå¡ãšè§£éã§ããããã 1 察 0 or 1ããšããŸããã 販売 x å®¢ïŒ ïŒã€ã®ã販売ãè¡çºã«å¯ŸããŠã客ãã¯äžäººã«ãªãããã 1 察 1ããšããŸããã ååãã¹ã¿ãŒ x ååïŒ ãååãã¯å®éã«è²©å£²ãããååã§ããã販売ããªãããŠããªãååãèããããããã 1 察 0 or å€ããšããŸããã ããã§ãå°ããªã¬ãŒã·ã§ã³ãšãããã®ãæ¯ãè¿ã£ãŠã¿ãŸãããã ãªã¬ãŒã·ã§ã³ã®ãããã â 1 察 1 巊蟺ã®ã¬ã³ãŒããæ±ºãŸããšãå³èŸºã®ã¬ã³ãŒããïŒã€æ±ºãŸãå¿
ãååšããŠããç¶æ
ããŸãã巊蟺ã®ã¬ã³ãŒããäœããããšåæã«å³èŸºãäœãããå¿
èŠãããããšã瀺ããŠããŸãããšã³ãã£ãã£å士ã®é¢é£æ§ãé«ãïŒçæ¹ã ãã§ãªãäž¡æ¹ã®æ
å ±ãæ±ãå Žåãå€ãïŒå Žåã¯ã ããã©ãŒãã³ã¹ã®èгç¹ãããšã³ãã£ãã£ãïŒã€ãŸãšããæ¹ãè¯ã å ŽåããããŸãã â¡ 1 察 0 or 1 巊蟺ã®ã¬ã³ãŒããæ±ºãŸããšãå³èŸºã®ã¬ã³ãŒããååšããŠããªãè¥ããã¯ïŒã€æ±ºãŸãç¶æ
ããŸãã巊蟺ã®ã¬ã³ãŒããäœãããåŸã«å¥ã®ã¿ã€ãã³ã°ã§ããå³èŸºãäœãããããšã瀺ããŠããŸãããšã³ãã£ãã£å士ã®é¢é£æ§ãé«ãïŒçæ¹ã ãã§ãªãäž¡æ¹ã®æ
å ±ãæ±ãå Žåãå€ãïŒå Žåã¯ã ããã©ãŒãã³ã¹ã®èгç¹ãããšã³ãã£ãã£ãïŒã€ãŸãšããæ¹ãè¯ã å ŽåããããŸãã ⢠1 察 å€ å·ŠèŸºã®ã¬ã³ãŒããæ±ºãŸããšãå³èŸºã®ã¬ã³ãŒããå¿
ãïŒã€ä»¥äžçŽã¥ããŠããç¶æ
ã巊蟺ã®ã¬ã³ãŒããäœæããããšåæã«ãå³èŸºã®æ¢åã¬ã³ãŒããšçŽã¥ãããå·Šèšã®ãããªã¬ã³ãŒãããªãå Žåã¯å³èŸºã«ãäœãããå¿
èŠãããããšã瀺ããŠããŸãã ⣠1 察 0 or å€ å·ŠèŸºã®ã¬ã³ãŒããæ±ºãŸããšãå³èŸºã®ã¬ã³ãŒããååšããŠããªãè¥ããã¯ïŒã€ä»¥äžçŽã¥ããŠããç¶æ
ã ãªã¬ãŒã·ã§ã³ããã£ããäœã£ãŠãããšã ããŒã¿ã®äœãããé çªãªã©ãææ¡ã§ããã®ã§ã第äžè
ã§ãããã䜿ã£ãå®è£
ãã€ã¡ãŒãžãæããªããŸãã ããŠãåŒãç¶ããšã³ãã£ãã£ãèŠãŠãããŸãããã ãšã³ãã£ãã£ãèŠã äžè¿°ã«ãããšã³ãã£ãã£ã¯ä»¥äžã®ããã«ãŸãšããããã®ã§ã¯ãªãã§ããããã åºãã¹ã¿ãŒ x åºïŒ ã 1 察 0 or 1ãã®é¢ä¿ãªã®ã§ïŒã€ã«ãŸãšããŸããã åºå¡ãã¹ã¿ãŒ x åºå¡ïŒ ã 1 察 0 or 1ãã®é¢ä¿ãªã®ã§ïŒã€ã«ã«ãŸãšããŸããããã®éã«ãåºå¡ãã¹ã¿ãŒããšã販売ãã®ãªã¬ãŒã·ã§ã³ãèŠçŽããŠããŸãã 販売 x å®¢ïŒ ã 1 察 1ãã®é¢ä¿ãªã®ã§ïŒã€ã«ãŸãšããŸãããçµæçã« ã販売ãããåºå¡ãã¹ã¿ãŒããšã客ãã¹ã¿ãŒãã®äžéããŒãã« ã«ãªã£ãŠããããšãããããŸãã ååãšã³ãã£ãã£ã®ç©çåã»è«çåããããåããããããsale_productsãã販売ååããšããŸãããçµæçã« ã販売ååããã販売ããšãååãã¹ã¿ãŒãã®äžéããŒãã« ã«ãªã£ãŠããããšãããããŸãã ä»åã®ç®çã®ã·ã¹ãã ã¯ãããç¹å®æ¥ã®ã¬ã·ãŒãäžèЧãåºåã§ããã·ã¹ãã ãã§ããç¹å®æ¥ãæå®ãããšã¬ã·ãŒãäžèЧãåºåãããã€ã¡ãŒãžã§ããããŒã¿ã®åãåºãæ¹ãšããŠã¯ãç¹å®æ¥ãªãã販売ããšã³ãã£ãã£ã®ãæ¥æïŒdateïŒããæå®ããããã«çŽã¥ãåšãã®ããŒãã«ããæ
å ±ãåŒã£åŒµã£ãŠããããšã«ããŸãã ã§ãã®ã§ããªã¬ãŒã·ã§ã³é¢ä¿ãé ããã®ãäŸãã°ãåºãã¹ã¿ãŒãã販売ãã«ã€ããŠã¯ä»¥äžã®ãããªçŽä»ãã远å ããŠãè¯ããšæããŸãã ããã§äžé£ã®ããŒã¿ã¢ããªã³ã°ïŒæŠå¿µèšèšãè«çèšèšååïŒãå®äºããŸããã ãŸãšããŠã¿ãŸããš æ£èŠåããERDã¯éçšã§ãããŽãŒã«ã§ã¯ãªããããæçµçã«ã¯äœ¿ããããåœ¢ã«æé©åããŠããïŒéæ£èŠåïŒã ãªã¬ãŒã·ã§ã³ããã£ããèããããšã§ ããŒã¿ã®äœãããé çªãªã©ãææ¡ã§ããã®ã§ã第äžè
ã§ãããã䜿ã£ãå®è£
ãã€ã¡ãŒãžãæããªãã ãªã¬ãŒã·ã§ã³ããã£ããèããããšã§ãšã³ãã£ãã£å士ããŸãšããããšãå¯èœã«ãªãã·ã³ãã«ãªããŒã¿ã¢ããªã³ã°ã«ã€ãªããã å®éçšã«åããŠãªã¬ãŒã·ã§ã³é¢ä¿ãé ããã®ã«ã€ããŠãªã¬ãŒã·ã§ã³ã匵ãããšã倧åïŒéæ£èŠåïŒã ãšãªããŸãã æåŸã« DBçæš©åšã®ã¯ãªã¹ã»ãã€ãæ°èªããããŒã¿ããŒã¹èšèšã¯ããããŠäž»èгçã§ããããšèªããããåŸãªãã»ã©ããã®åéã¯æªã ææ§ãªéšåãå€ãã§ãã å°ãåã«å匷ããŠã ãæŠå¿µèšèšã ã«ã€ããŠèª¿ã¹ãŠã¿ãã®ã§ããããã®æ¹æ³ãèãæ¹ã瀺ãããããã¥ã¡ã³ãããµã€ããå°ãªãäºã«æ°ã¥ããŸãããèšèã®èª¬æã«ã€ããŠã¯èšèŒãããã®ã§ããèå¿ã®ãããŒãææ³ãšãããã®ãèŠåœãããªãããšããããç©èªã£ãŠãããã®ããã§ãã ãã ä»åãç¹ã« ãæŠå¿µèšèšã ã«ã€ããŠäžã€ã® èãæ¹ã® çš® ã瀺ãããçãèµ·ãããŸããããŸã ãŸã æŽçããããŠããªãéšåãããããšæããŸãããå°ãã§ãçããã®ããŒã¿ã¢ããªã³ã°ã®ã圹ã«ç«ãŠãã°å¹žãã§ãã ãæž
芧é ãããããšãããããŸããã Wedding Parkã§ã¯äžç·ã«æè¡ã®ãŠãšãã£ã³ã°ããŒã¯ãåµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãã èå³ã®ããæ¹ã¯ãã²äžåºŠæ°è»œã«ãªãã£ã¹ã«éã³ã«ããŠãã ããã âçè
ã®ããããèšäº ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬1åïŒ ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬2åïŒ ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒã·ãªãŒãºç¬¬3åïŒ ã»ãã£ãŠã¿ããïŒAWSã§WEBãµãŒããŒç°å¢æ§ç¯ïŒLambda|API Gateway|ã·ãªãŒãºç¬¬4åïŒ ã»ãæ©æ¢°åŠç¿å
¥é|Python|scikit-learnãçµå±äœãã§ããïŒcheat-sheetãã解説ããŠã¿ãç¯
ããã«ã¡ã¯ããã©ããŠãšãã£ã³ã°ã¹ã¿ãžãªæ€çŽ¢ãµã€ããPhotoraitãã®æ
åœãšã³ãžãã¢ã®æŠç°ã§ãã å
æã®1/10~13æ¥ã«åŠçåãã®å¬ã®ã€ã³ã¿ãŒã³ãWeddingPark Winter TechCamp 2018 ãéå¬ããããŸããã®ã§å ±åããããŸãïŒ æŠèŠ åå ããŠããåŠçå士ã§ããŒã ãçµã¿ã4æ¥éã§å®éã®ãŠãšãã£ã³ã°ããŒã¯ã®ãµãŒãã¹éçºãããŒãäœéšããŸãã ä»åã®ã€ã³ã¿ãŒã³ã§ã¯ããŠãšãã£ã³ã°ããŒã¯ãéå¶ãããµã€ããPhotoraitãã§ ã¹ããåãã³ã³ãã³ãã®äŒç»~éçº~ãã¹ããè¡ã£ãŠããããŸããïŒ ãŸããäœæããã³ã³ãã³ãã®ããŒãã¯ãçµå©ã決ããã«ããã«ããã©ããŠãšãã£ã³ã°ãããããªããããªã¹ããã³ã³ãã³ããäœæããããã§ãã ããŒã ä»åã®ã€ã³ã¿ãŒã³ã§ã¯ãïŒäºº1ããŒã èš3ããŒã ã§è¡ããŸããã ïŒããŒã ã«ã€ãã¡ã³ã¿ãŒãšããŠã·ã¹ãã ã¡ã³ããŒã2人ã€ã培åºãµããŒãäœå¶ã§ãïŒ AããŒã BããŒã CããŒã 1æ¥ç® 忥ã®ååäžã¯ãªãªãšã³ãèªå·±ç޹ä»ãªã©ã®ããŒã ãã«ãã£ã³ã°ãè¡ããŸãã åãã¯å°ãç·åŒµããŠããåŠçéããååäžãçµããããã«ã¯ç·åŒµãã»ãããåæ°ãããããšåãããªé°å²æ°ã«ãªã£ãŠããŸããã ååŸããã¯ãäŒç»ãã§ãŒãºã§ãã å°ãªãå·¥æ°ã®äžã§éçºããŠããå¿
èŠããããããããäºãšããããäºã倩秀ã«ãããŠèããŠãããªãã®ã§ãã¿ããªããªãæ©ãã§ããŸããã äžåºŠæ±ºãŸã£ãæ¡ããå床ãŒãããŒã¹ã§èãçŽããŠããããŒã ããããŸããã 2æ¥ç® ã¡ã€ã³ã®éçºãã§ãŒãºã§ãã æšæ¥ãšããšãæ©ãã§èããäŒç»ãããšã«ããšã³ãžãã¢ã»ãã¶ã€ããŒå°çšã®ãµãã©ã€ããªãã£ã¹ã§éçºããŠãããŸãã ã¡ã³ã¿ãŒç·åºã§ãµããŒãããç±éãããªãé«ãã£ãã§ãã 3æ¥ç® åŒãç¶ãéçºããã€ã€ããšã³ãžãã¢ã»ãã¶ã€ããŒããã®ã³ãŒãã¬ãã¥ãŒïŒ ãã éçºããã ãã§ã¯ãªããéçºãããã®ããã®ãŸãŸãªãªãŒã¹ããŠè¯ãã¬ãã«ãŸã§ããã§ãã¯ããŸãã 4æ¥ç® æçµæ¥ã¯ã瀟é·ãšåç· åœ¹ã®åã§ãã¬ãŒã³çºè¡šã§ãã ããŒã å
ã§è°è«ããååãåããªããäœã£ãŠããã³ã³ãã³ããªã®ã§ãã©ã®ããŒã ãç±éã®é«ãçºè¡šã§ããïŒ åªåããBããŒã ã§ã¯ããã®äººã«ãã£ãåçãèŠã€ããããã®èšºæã³ã³ãã³ããäœæããŠããŸããã ãã¬ãŒã³çµäºåŸã«ãå
šå¡ã§èšå¿µæ®åœ±ã§ãã ãã¬ãŒã³åã¯ã¿ããªããªãç·åŒµããŠããŸããããã¿ããªãããã£ãé¡ãããŠãŸããç¬ ãã¬ãŒã³ã®çµæçºè¡šåŸã¯ãä¿®äºåŒã«ãªããŸãïŒ åããã€ã³ã¿ãŒã³çäžäººãã€ã«ä¿®äºèšŒæžãæž¡ããŸããã æèŠªäŒ ç€Ÿé·ãã¡ã³ã¿ãŒãå«ããæèŠªäŒãè¡ããã€ã³ã¿ãŒã³å
šïŒæ¥éã®å·¥çšãçµäºããŸããïŒïŒ ã¿ããªæ¬åœã«ãç²ãæ§ïŒïŒ æåŸã« ãŠãšãã£ã³ã°ããŒã¯ã®ãšã³ãžãã¢ã€ã³ã¿ãŒã³ã·ããã§ã¯ãå®éã«åããŠããšã³ãžãã¢ãšåããµãŒãã¹éçºãããŒãäœéšã§ããŸãã ãŸããå
¥ç€ŸåŸã«äžç·ã«åããšã³ãžãã¢ã»ãã¶ã€ããŒãã瀟å
ã®é°å²æ°ãäœæã§ããŸãïŒ æè¡çã«äžå®ã ãããšããçç±ã§èºèºããŠããåŠçã®æ¹ããäžæ©èžã¿åºããŠåå ããŠãããããåŒç€Ÿãšã³ãžãã¢ã»ãã¶ã€ããŒãå
šåã§ãµããŒãããŸãïŒ ããèå³ããããŸãããããã²æ¬¡åã€ã³ã¿ãŒã³é嬿ã®ãåå ããåŸ
ã¡ããŠãŸãïŒ ãŠãšãã£ã³ã°ããŒã¯æ°åæ¡çšãªãªãžãã«ãµã€ã https://www.weddingpark.co.jp/recruit/fresh/