Wedding Parkり゚ディングパヌクのブログ - TECH PLAY

TECH PLAY

Wedding Parkり゚ディングパヌク

Wedding Parkり゚ディングパヌク の技術ブログ

å…š206ä»¶

こんにちは。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 &amp;gt;&amp;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=&rdquo;$PATH:$GOPATH/bin&rdquo; 5. revelコマンドで確認 以䞊でrevelのむンストヌルは完了です。 applicationの䜜成 ではapplicationを䜜成しおブラりザ䞊に衚瀺しおみたしょう。 サンプルコヌドの実行 sampleappを䜜成したす sampleappができたので実行しおみたす。 ブラりザでhttp://localhost:9000にアクセスしたす。 実行できたした。 倉数の受け枡し では、controllerからviewぞ倉数を枡しおブラりザに衚瀺しおみたしょう。 controllerに䞋蚘のように倉数を定矩したす。 ブラりザに衚瀺するためにviewファむルも䞋蚘のように倉曎したす。 local:9000にアクセスするず&#8230; 反映されたした たずめ 今回は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) -&amp;gt; UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: &quot;articleCell&quot;, for: indexPath) as! ArticleCell // セルのタむトルにテキストをここで蚭定する cell.title.text = &quot;THIS IS NEWS TITLE&quot; return cell } func numberOfSections(in tableView: UITableView) -&amp;gt; Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&amp;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䌚は参加した党員が本気で技術の吞収をする、そしお参加した党員が楜しく みんなで盛り䞊げるこずを目指しおいたす、 䟋えば&#8230; &#8220;面癜い&#8221;、&#8221;すごい&#8221;、&#8221;それは䜿えそう&#8221;ず思った時は「よっ」っずいう掛け声に合わせお拍手し、 逆に、&#8221;それ埮劙&#8221;、&#8221;すごいの&#8221;ずいう時は「んヌ&#8230;.」っず唞りたす。(これはなかなか出たせん) 䌚堎がアットホヌムな雰囲気になったずころで也杯しお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 ず曞いおしたい、 「動かない&#8230;なんでヌ&#8230;」っず、小恥ずかしいミスをしたったこずもありたす。 なかなか新しい蚀語を䜿うのにはその蚀語をなれるたで結構倧倉です。 たた、Tour of Go は他蚀語を孊んでいる前提でのサむトです。 しかし、Go蚀語は他蚀語ず勝手が違うこずが倚く、導入に戞惑う点も倚々あるず思いたす。 たず、蚀語に觊れおみるのが倧事だず思いたすのでざっくり倧雑把にTour of Goの゜ヌスをPHPで曞いたらこんな感じですっお玹介しおいきたいず思いたす。 ※ Goに関する説明は本家サむトであるTour of Goにありたすので、そちらをすすめながら、同時にこちらの蚘事をみおいただければず思いたす。 ※ 本蚘事は、導入のしやすさを重芖するため、正しくは異なるような、誀解を䞎える衚珟が含たれおいるこずがございたす。ご了承いただければ幞いです。 Hello World! 定番のHello World この段階では、 おたじない な曞き方ですが、それはGo tourが埌々説明しおくれおいたす。 package main import &quot;fmt&quot; func main() { fmt.Println(&quot;Hello, 侖界&quot;) } (匕甚: https://go-tour-jp.appspot.com/welcome/1) 1.phpのHello world! print(&quot;Hello, 侖界\n&quot;); 2.php goに䌌せおみた堎合 namespace main; class Main { static function main() { print(&quot;Hello, 侖界\n&quot;); } } Main::main(); Packages パッケヌゞずimport パッケヌゞは、他蚀語でいうずころの名前空間に近いです。 package main import ( &quot;fmt&quot; &quot;math/rand&quot; ) func main() { fmt.Println(&quot;My favorite number is&quot;, 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 &quot;fmt&quot; 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 &quot;fmt&quot; func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap(&quot;hello&quot;, &quot;world&quot;) 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(&quot;hello&quot;, &quot;world&quot;); printf(&quot;%s %s&quot;, $a, $b); } } Main::main(); 基本の型れロ倀 れロ倀はGo特有なのでPHPでどのように蚘述するかはないですが、PHPでは基本的に党お初期化しお䜿っおいるず思えば良いかず思いたす。 package main import &quot;fmt&quot; func main() { var i int var f float64 var b bool var s string fmt.Printf(&quot;%v %v %v %q\n&quot;, i, f, b, s) } (匕甚: https://go-tour-jp.appspot.com/basics/12) $i = (int)0; $f = (float)0.0; $b = false; $s = ''; printf(&quot;%d %f %b %s&quot;, $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 &#8211;> Running transaction check &#8212;> Package mysql.noarch 0:5.5-1.6.amzn1 will be installed &#8211;> Processing Dependency: mysql55 >= 5.5 for package: mysql-5.5-1.6.amzn1.noarch &#8211;> Running transaction check &#8212;> Package mysql55.x86_64 0:5.5.54-1.16.amzn1 will be installed &#8211;> Processing Dependency: real-mysql55-libs(x86-64) = 5.5.54-1.16.amzn1 for package: mysql55-5.5.54-1.16.amzn1.x86_64 &#8211;> Processing Dependency: mysql-config for package: mysql55-5.5.54-1.16.amzn1.x86_64 &#8211;> Running transaction check &#8212;> Package mysql-config.x86_64 0:5.5.54-1.16.amzn1 will be installed &#8212;> Package mysql55-libs.x86_64 0:5.5.54-1.16.amzn1 will be installed &#8211;> 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 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 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 &#8211;password=Abc12345 amazonaws.com -u yattemiyou &#8211;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 &#8216;help;&#8217; or &#8216;\h&#8217; for help. Type &#8216;\c&#8217; 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に぀いお、このたたではレプリケヌションができないので特別な方法が必芁ずなりたす&#8230;筆者はずおも嵌りたした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 &#8211;> Running transaction check &#8212;> Package telnet.x86_64 1:0.17-48.8.amzn1 will be installed &#8211;> 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&#8230; 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&#8230; Connected to yattemiyou-kvs.f1pyqo.0001.apne1.cache.amazonaws.com. Escape character is &#8216;^]&#8217;. 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=&#8221;1264&#8243; class=&#8221;alignnone size-full wp-image-1064&#8243; /> 䞀応芋えおはいるようですが&#8230; 確認の為にリク゚ストの応答ヘッダヌを芗いみたしょう。 「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䌚初参加ずいうこずで、初めは少し緊匵気味。 衚参道×女子䌚ずいうこずもあり、 軜食がこんなにフォトゞェニック、そしおオヌガニック&#8230; そんな軜食を食べながら、ずおもアットホヌムな雰囲気で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(瀟内掻性化プロゞェクト)」に぀いお玹介しおいただきたした。 ただ働くのではなく、䌚瀟の未来にワクワクしながら働けるか&#8230;ずおも響きたした。 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/&lt;ナヌザ名&gt; でアクセスできたす。 パッケヌゞのむンストヌル 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ずは&#8230; 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&#8230;でも䞡方の画面に共通のモゞュヌルがあるからコヌドを再利甚したい ( å·Š:クチコミ / 右:SNSのフィヌド) この時点でサヌバサむドの蚀語は決定しおいたので、 䞊蚘のこずをふたえお、フロント゚ンドの技術遞定に入りたした。 DRESPIC蚀語遞定 その前に フレヌムワヌクずラむブラリの違い 最初に定矩をおさらいしおおきたしょう。 「フレヌムワヌク」・・・アプリケヌションの骚栌を担うもので、開発をするずきに開発者はその骚栌に沿っお肉付けをしおいくものです。 「ラむブラリ」・・・骚栌ではなく、肉付けを補助するものです。そのため、骚栌郚分はフレヌムワヌクに任せるか、自分で実装する必芁がありたす。 フレヌムワヌクを知っおいるだけで、新しく開発者がプロゞェクトに参加しやすかったり、信頌性の高い骚栌を䜿えるこずで、各モゞュヌルの圹割が分離され、他のモゞュヌルに圱響を䞎えるコヌドや、朜圚的にバグが朜みやすいコヌドを曞きにくくなりたす。 DRESPICの蚀語遞定 遞ぶポむントは3぀でした。 ・将来性があるこず  L将来メむンストリヌムになりそうな技術の方が、ノりハりが蓄積されおいく ・単䞀モゞュヌルからSPAたで察応できる柔軟性があるこず  L単䞀モゞュヌルの埋め蟌み(クチコミ郚分)からSPA(SNS郚分)たで柔軟に察応できる  Lコンポヌネントの組み合わせでより倧きなコンポヌネントを䜜るこずができるずよい◎ ・孊習コストが高すぎないこず  Lメンテナンス性も䞋がるし、匕き継ぎに時間がかかっおしたいたす 以䞊を螏たえお、遞定がはじたりたした。 出おきた候補はこの3぀です。 ①Angular2 ②Vue.js ③React.js + redux これを先ほどのポむントをふたえお考えおみたしょう&#8230; Angular2 将来性 ◎ 柔軟性 △ 孊習コスト △ (TypeScriptの孊習コストが高そうでした) Vue.js 将来性 ◯ 柔軟性 ◯ 孊習コスト ◎ (ラむブラリずフレヌムワヌクの䞭間なのでSPAのために远加のフレヌムワヌクを䜿う方がよいが、それだずVue.jsのシンプルさが掻かせない&#8230;) React.js + redux 将来性 ◎ 柔軟性 ◎ 孊習コスト ◯ (Vue.jsより孊習コスト高めですがAngular2よりは䜎めでした) 以䞊の結果を螏たえお、遞ばれたのは redux + React.js でした。そしお同時に谷枕の勉匷が始たるのでした。勉匷の過皋もどこかでお話しできればいいなず思いたす DRESPICのこれから 1/11にリリヌスされたばかりのDRESPIC、ただただよちよち歩きのサむトです。ナヌザヌさんから集たるたくさんのクチコミを倧切に、もっずかわいくお、誰にずっおもわかりやすいサむトに育おおいきたすこれからもDRESPICをよろしくお願いしたす り゚ディングパヌクでは、゚ンゞニアを募集しおおりたす。 Weddingparkを始め、DRESPICなど各皮サむトやサヌビスを䞀緒に䜜りたせんか IT×ブラむダルで業界を倉えるプロフェッショナルなWEB゚ンゞニア募集
はじめに こんにちは、岩橋聡吟です。 今回は私が実務で行っおいるデヌタモデリング手法実際手法ずは名ばかりですが&#8230;を玹介いたしたす。 デヌタモデリングは、ご存知の通り、その埌のシステム開発や拡匵スピヌド、たたシステム自身のパフォヌマンスにも深く関わっおきたす。ここをどのように蚭蚈するかが開発プロゞェクトを進める䞊で倧きなカギになりたす。 なぜレシヌトなのか モデリングする䞊で、その察象ずなるサヌビス・システムのビゞネスロゞックや仕様を深く理解する必芁がありたす。レシヌトの背景にある「物を買う」ずいう行為は至極身近なものであり、誰しもがそのレシヌトが発行されるたでの流れを経隓で知っおいたす。たたレシヌトは、その小さな玙の䞭に「店舗」や「商品」など、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の箱が入る圢になりたす。 では 抂念リスト よりさっそく䜜っおいきたしょう。 たず、【店名】ず【店】ですがこれは、店の店名ですから&#8230; ずなりたす 箱の倧きさや䜍眮は説明䞊の䟿宜的なのものです 。 続いお【電話番号】【䜏所】も远加しおいきたしょう。店の電話番号、店の䜏所、 次に順番からいくず【日時】なのですが、これはすんなりず今のパズルに圓おはめられないように思えたす。これは倧切な感芚です。「圓おはめられない」は 䜕か抂念実䜓が足りない こずを意味しおいたすもちろんそもそも圓おはたらないこずもありたすが&#8230;。ここは䞀旊スキップしたしょう。 では、 抂念リスト からすんなりず圓おはめられそうなものを探すず&#8230;【店員】はどうでしょうか。 これはきっず以䞋のようになるでしょう。 続いお【商品】に぀いお考えおいきたいのですが、たずはこの【商品】自身に入りそうな箱を考えおみたしょう。 抂念リスト を芋るず&#8230;【倀段】【個数】はどうでしょうか。商品の倀段、商品の個数&#8230;いけそうです。 こんな感じになるでしょうか。 さおこれはどこに入るでしょう。【店】の【商品】ず考えられそうでしょうか仮にそのように考えた堎合、【店】の【商品】の 【個数】 ずはどういう意味でしょうか&#8230;蚀葉のたたに捉えるず「店頭に陳列された商品の個数」や「店の圚庫商品の個数」ずいう意味に聞こえたす。本来の抂念からズレおきおいたすね。 パズルの各抂念は党お 実䜓 で考えるようにしたしょう。この【商品】を商品マスタヌず捉えおしたうず、パズルは䞊手く぀くれたせんマスタヌはあくたで正芏化した結果で定矩される仮想の抂念です。では、このレシヌトが物語っおいる【商品】ずは䜕なのでしょう。 【商品】が、レシヌトの背景にある「物を買う」ずいう行為ストヌリヌの䞭で関係を持ったのはどの堎面だったでしょうか&#8230;それは、【店員】が 【販売】 した堎面もしくは、【客】が【賌入】した堎面ではないでしょうか 埓っお【販売】ずいう抂念を远加しお、パズルは以䞋のようになりたす。 足りなかった抂念が远加されたこずで、先ほど圓おはめられなかった【日時】、たた【総額】なども以䞋のように圓おはめられそうです。 たた、最埌に残った【ポむント】に぀いおも、このたただず圓おはめられないので抂念を远加する必芁がありたす。この【ポむント】は、【販売】した 【客】 の【ポむント】になるず思われるので、 のように、【客】を远加するず䞊手く圓おはめられたした。 ここたでをたずめおみたすず 抂念のパズル化を行うこずで抂念同士の関係が可芖化できる。 抂念のパズルが䞊手くはたらない堎合は、必芁な抂念が足りない可胜性がある。 具䜓的に登堎する堎面をむメヌゞしながら抂念のパズルは党お実䜓で考えおいくマスタヌはあくたで正芏化した結果で定矩される仮想の抂念。 ずなりたす。 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/