株匏䌚瀟ラクスのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ラクス

株匏䌚瀟ラクス の技術ブログ

å…š954ä»¶

みなさんこんにちは。フゞサワです。今回は、 前回の蚘事 でご玹介いたしたした、「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」に぀いおの途䞭経過をレポヌトさせおいただきたす。 今幎床のかみせんプロゞェクトでは、倧きく以䞋の぀のテヌマ Elasticsearch デヌタ匿名化手法 に぀いお怜蚌を進めおおり、本蚘事ではElasticsearchの怜蚌に぀いお蚘茉いたしたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 ←今読んでいる蚘事 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 SQL チュヌニング以倖の手段を 匊瀟が運営しおいるサヌビスの開発では、怜玢凊理のパフォヌマンス課題に取り組むこずがしばしばあり、怜玢芁件ぞの察応範囲を広げたいず考えおいたす。 耇数の動的カラムのデヌタを暪断的に怜玢したい メヌルなどの倧量の文章デヌタを怜玢したい など、 SQL チュヌニングでは䞀筋瞄ではいかないようなシヌンにおいお、その他の技術的察応手段ずしおの圹割を、Elasticsearchに期埅しおいたす。 ※Elasticsearchを怜蚌察象ずした詳现な経緯に぀いおは、 前回の蚘事 をご芧ください。 党文怜玢 を䜿える未来を手に入れる Elasticsearchの怜蚌を進めるにあたり、 バックログ の掗い出しを行いたした。 チヌム党員がElasticearchに関する知芋がない状態からのスタヌトだったため、たずは以䞋の曞籍を各自読み、Elasticsearchの抂芁を理解するずころから始めたした。 Elasticsearch実践ガむド Elasticsearch実践ガむド (impress top gear) 䜜者: 惣道 哲也 むンプレス Amazon Elasticsearchに぀いお詳しく知るための調査を開始 Elasticsearchに関する基瀎的な情報や、実際に動䜜させおみた結果などを Wiki にたずめおナレッゞの蓄積を行いたした。 PHP で動䜜するサンプルプログラムを䜜成し、アプリケヌションからのElasticsearchの利甚方法の怜蚌なども行なっおいたす。 動䜜確認は、前述の曞籍の他に、以䞋のような情報も参考にしお行いたした。 Elasticsearc 公匏リファレンス 基本的な API の䜿い方などは、公匏リファレンスをなぞっお動䜜確認したした。 囜立情報孊研究所䜜成のGithubリポゞトリ Elasticsearchに関しお、䞀通り凝瞮しおたずめられおいたす。 REST API での怜玢むメヌゞ それでは、調査結果の䞀郚を抜粋しおご玹介いたしたす。 Elasticsearchの抂芁 オヌプン゜ヌス の分散 党文怜玢゚ンゞン 自然蚀語 で蚘述された倧量の文曞デヌタの怜玢を高速に実行可胜 文曞デヌタを字句解析し、単語などに分割しおむンデックス化するこずで実珟しおいる 日本語の字句解析に察応した プラグむン Kuromoji Analysis Pluginがある Elastic瀟 が䞭心になっお開発が進められおいる 怜玢゚ンゞン のコア郚分は Java 補の怜玢ラむブラリ Apache Lucene が䜿甚されおいる ドキュメント型デヌタベヌスで柔軟なデヌタ構造でデヌタを保存できる ドキュメント型なので、非正芏化した状態でデヌタを持぀必芁がある スケヌラブルな構成になっおおり、事前に最倧デヌタ量の怜蚎ができおいれば、容易にスケヌルアりトするこずが可胜 デヌタの分割単䜍であるシャヌド数を事前に定矩 ノヌドを増やすず、新しく増えたノヌドにシャヌドが分配されスケヌルアりトできる ただし、シャヌド数は埌から倉曎できないため、事前に最倧デヌタ量を想定した蚈画が必芁になる トランザクション を持たない怜玢・参照に特化 怜玢やデヌタの登録だけでなく、 クラスタ の管理やメンテナンス等の、ほが党おの操䜜が、 REST API を甚いお実行できる 怜玢だけでなく、怜玢結果の分類や集蚈なども高速に実行できる。Kibanaずの組み合わせにより、デヌタの傟向やパタヌン分析などの甚途でも甚いられる Linux , Windows , Mac 等の各OSに察応しおおり、公匏のDockerむメヌゞなども公開されおいる 基本動䜜の確認はDockerコンテナ䞊で実斜 Elasticsearchの掻甚事䟋 Elascticsearchの掻甚事䟋は、Elastic瀟の 公匏ペヌゞ に倚数掲茉されおいたす。 ここでは、いく぀か特城的な甚途で䜿甚しおいる事䟋を抜粋いたしたす。 GitHub リポゞトリ 、ナヌザヌ、Issue、PR、 ゜ヌスコヌド などの倧量の情報を高速に怜玢できる 日本経枈新聞瀟 日経電子版の蚘事怜玢機胜で掻甚 LINE 倧量のログデヌタの䞀元管理ずKibana連携による可芖化 かみせんElasticsearch怜蚌チヌムの様子 開発の未来に先手を打぀ための議論ぞ Elasticsearchの抂芁や機胜の理解を経た埌、今埌どのような怜蚌を行うべきかを、チヌム内で議論したした。 その際、キヌずなったのは、以䞋のポむント。 「Elasticsearchを調査・怜蚌するこずで埗られるMinimum Value ずはなにか」 そしお、私たちが埗た結論は、 『怜玢機胜を有する新芏サヌビスの アヌキテクチャ 怜蚎段階で、 RDB だけでなくElasticseachが比范怜蚎材料ずしお挙がる状態を䜜る』 ずなりたした。 「比范怜蚎材料ずしお挙がる状態を䜜る」ために、Elasticsearchの埗意分野である、 自然蚀語 で蚘述された文字列デヌタを持぀、倧量デヌタを察象にした怜玢パフォヌマンスを怜蚌を行い、 RDB ずの比范を行うこずにしたした。 Minimum Value の怜蚎颚景 ※この画像は議論の途䞭経過のもので、最終的に至った結論ではありたせん SQL チュヌニングでは解決できない怜玢芁件が生たれる未来に先手を打぀ための調査ず怜蚌に着手 珟圚、Minumum Value をアりトプットすべく、Elasticsearchのパフォヌマンス怜蚌を行っおいたす。 怜蚌察象のデヌタには、 Wikipediaの日本語版党デヌタ を採甚。 怜蚌開始時点のでドキュメント数2,339,123 ä»¶ 䞋蚘の環境にストアしお怜蚌を実斜䞭 Elasticsearch Amazon Elasticsearch Service RDB  Amazon RDS for PostgreSQL サヌバヌのスペックメモリやノヌド数などによる倉化や怜玢ク゚リの圓お方など、どのような芳点で怜蚌を行うべきかに぀いおも議論をしながら進めおいたす。 次回は、怜蚌結果に぀いおレポヌトさせお頂く予定です。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 ←今読んでいる蚘事 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化
初めたしお、MasaKuです。 はいくる通信 第回を担圓させおいただきたす。 はいくる通信はこれから党回にわたっお蚘事を投皿しおいきたすのでお楜しみに tech-blog.rakus.co.jp 第回では、先日、匊瀟で開催した RAKUS Meetup Osaka の発衚内容をもう少し掘り䞋げた蚘事を曞きたいず思いたす。 rakus.connpass.com 発衚資料は コチラ https://speakerdeck.com/masaku_2019/merumagapei-xin-sabisufalseyue-jing-puroziekuto-merudao-da-lu-xiang-shang-hefalsetiao-zhan speakerdeck.com はじめに「メヌルが届かない」にはいろんな理由が 「メヌルが届かない」のパタヌン ガむドラむンを敎理しおお客様にご提案する コンテンツチェックをしおお客様に修正をご提案する IPレピュテヌションを良いスコアに維持する たずめ 参考サむト はじめに「メヌルが届かない」にはいろんな理由が 普段なにげなく利甚するメヌルですが、メヌルは送信すれば必ず届くずは限らず様々な理由で盞手先に届かないこずがありたす。 そのため、メルマガ配信サヌビスにずっお、どれだけメヌルを届けられるかメヌル到達率は重芁な芁玠の぀です。 しかし、メルマガ配信サヌビスはメヌルを届けるこずだけが課題ではありたせん。 配信したメヌルが迷惑メヌルずしお凊理されずにメルマガ読者に読たれるこずも重芁な芁玠の぀ です。 皆さんも、以䞋のような経隓があるのではないでしょうか いたっお普通の内容のメヌルが迷惑メヌルずしお凊理された 今たで普通にやり取りしおいた方のメヌルが、突然迷惑メヌルずしお凊理された 時間をかけお䜜成したメルマガが迷惑メヌルになっおしたっおは本末転倒です。 お客様が望む「メヌルが届く」ずは この課題はメルマガ配信サヌビスにずっお重芁な課題ですが、実は配信の仕組みやアプリケヌション偎の凊理だけで解決するこずが難しい課題なのです。 「メヌルが届かない」のパタヌン メヌルが届かないずいうこずでお悩みのお客様には以䞋のようなパタヌンがありたす。 迷惑メヌルず刀定されるメヌルになっおいる 迷惑メヌルず刀定されないように留意しおいるが、無意識のうちにメヌル内容が悪くなっおいる メヌルの内容も悪くないが、なぜか迷惑メヌルになっおしたう 迷惑メヌルずいうず、 公序良俗 に反するような内容のメヌルいわゆる スパムメヌル を想像するず思いたすが、実はそれ以倖の理由で迷惑メヌルず刀定される堎合がありたす。 配配メヌルではそういった課題をクリアするために、いく぀かの斜策を行っおいたすので、本日はそちらに぀いおお話したいず思いたす。 ガむドラむン を敎理しおお客様にご提案する スパムメヌル などのコンテンツが䞍正なメヌルは迷惑メヌルずしお凊理されるこずはご存じかず思いたす。 しかし、どのようなメヌルが迷惑メヌルになるかは、受信サヌバごずに蚭けられたフィルタに䟝存するため完璧な察策をずるこずが難しいです。 そこで、配配メヌルでは少しでも倚くのメヌルをメルマガ読者に届けるための メヌルを䜜成するための ガむドラむン をお客様向けに展開しおいたす。 メヌル到達率向䞊 ガむドラむン 䟋えば、受信サヌバ偎でブロックされやすいキヌワヌドは避けおメヌルを䜜成しおいただくこずや、配信したメヌルの信頌性を高めるために SPF や DKIM の蚭定手順を案内する ガむドラむン をご提䟛しおいたす。 この ガむドラむン は配配メヌルの顧客サポヌト郚眲が䜜成しおおりたす。 コンテンツチェックをしおお客様に修正をご提案する メヌル本文内のコンテンツが悪いず迷惑メヌルずしお凊理されるこずを知っおいたずしおも、意図せず ガむドラむン に違反するメヌルを䜜成しおしたう堎合がありたす。 配配メヌルでは、メヌル本文内の情報を解析し、「迷惑メヌル」扱いになる可胜性のあるグレヌな内容を怜知する仕組みを導入しおいたす。 䟋えば、メヌル本文に「珟金」ず「皌」ずいうキヌワヌドが含たれたメヌルが配信されるず、システム偎で迷惑メヌルの疑いありず刀断し本圓に スパムメヌル かを盎接チェックしおいたす。 コンテンツチェックのフロヌ 迷惑メヌルになる基準は受信サヌバ偎の基準によるため、 システムが怜知したからずいっお、盎ちに スパムメヌル ず刀断せずに、顧客サポヌトチヌムが盎接お客様ぞご連絡し、メヌル内容の修正の盞談をしおいたす。 地道な䜜業ではありたすが、重芁な課題ず認識しお、課題解決に取り組んでいたす。 IPレピュテヌションを良いスコアに維持する 最埌に、これたでご説明したこずがすべお守られおいるのに迷惑メヌルずしお凊理されおしたうこずの察策です。 それが、 IPアドレス の信頌性レピュテヌションずいう仕様です。 䟋えば、 スパムメヌル を頻繁に配信しおいるサヌバは受信サヌバ偎から迷惑メヌル配信を行うサヌバずしお ブラックリスト に登録されおしたいたす。 その結果、そのサヌバから配信されるメヌルがブロックされおしたい、普通のメヌルすら届かないメヌルサヌバになっおしたいたす。 迷惑メヌル配信を攟眮しおはいけない理由 配配メヌルでは、迷惑メヌルずなるメヌルを配信し続けおいるお客様には、譊告のご連絡をした埌、それでも改善が芋られない堎合は別のサヌバに移動しおいただく、ずいう斜策をおこなっおいたす。 コンテンツ違反顧客の隔離 この斜策により、コンテンツが正垞なメヌルを配信されるお客様のメヌルが利甚されるメヌル配信サヌバの IPアドレス の信頌性は高い状態で維持するこずができたす。 たずめ いかがでしたでしょうか メヌル配信サヌビスにおける「 メヌルを届ける 」ずは、単玔にメヌルを届けるだけでなく、メルマガ読者に「 読たれる 」こずが重芁です。 そのためには、迷惑メヌルずしお凊理されないように様々な工倫が必芁であるこずがご理解いただけたら幞いです。 はいくる通信では、これからもメルマガ配信に぀いおの蚘事を掲茉しおいきたす 次回もどうぞお楜しみに 参考サむト メルマガ配信・一斉メール配信サービス「配配メール」 https://speakerdeck.com/masaku_2019/merumagapei-xin-sabisufalseyue-jing-puroziekuto-merudao-da-lu-xiang-shang-hefalsetiao-zhan
はじめに こんにちは、新卒2幎目のmrym_618です。 最近、 jQuery でスクロヌル䜍眮の取埗する方法を実装したしたが、なかなかうたくいきたせんでしたので、そのずきのこずを曞いおいきたいず思いたす。 はじめに jQueryでスクロヌル䜍眮を取埗する方法 うたくいかなかったこず おわりに jQuery でスクロヌル䜍眮を取埗する方法 jQuery でスクロヌル䜍眮を取埗するには、「scrollTop()」メ゜ッドを䜿甚したす。 「scrollTop()」メ゜ッドの蚘述方法は以䞋の通りです。 察象芁玠.scrollTop(); ブラりザ党䜓のスクロヌル䜍眮を取埗するには察象芁玠に window を指定したす。 $(window).scrollTop(); うたくいかなかったこず 今回は、察象芁玠に body を指定しお実装しおいたした。 するず、Edgeず Safari では、正しい倀を取埗できおいたしたが、 Chrome ず IE ず Firefox では、垞に0を取埗しおいたした。 原因は、以䞋のサむトの通りブラりザによっお「scrollTop()」メ゜ッドが効くタグが違うこずでした。 chaika.hatenablog.com そこで、そのサむトを参考にブラりザごずに察象芁玠を刀定するように実装したした。 var ua = navigator.userAgent; var scrollTag; // Edge, Safariの堎合 if(ua.indexOf('Edge') !== -1 || (!window.chrome && 'WebkitAppearance' in document.documentElement.style)) { scrollTag = 'body'; // Chrome, IE, Firefoxの堎合 } else { scrollTag = 'html'; } おわりに 今回は、 jQuery でスクロヌル䜍眮を取埗するずきに困った話に぀いお曞きたした。もし、同じようなこずで困っおいれば、この蚘事が参考になれば幞いです。 たた、 jQuery には「scrollTop()」メ゜ッド以倖にもブラりザによっお挙動が異なるメ゜ッドはあるず思うので、 jQuery で実装したずきはしっかりマルチブラりザでテストするこずを心がけおいきたいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは。新卒2幎目のbadaikiです。早いもので埌茩が配属され、瀟内の雰囲気がより明るく、より掻発になっおいるように感じたす。 目次 目次 はじめに デシゞョンテヌブルずは デシゞョンテヌブルの構成 メリット、デメリット 最埌に 参考にしたサむト はじめに 今回はテスト手法の デシゞョンテヌブル に぀いお曞いおいきたす。 最近は芏暡の倧きな開発や耇雑な仕様の開発を任せおいただく機䌚が増えおきたした。そのずきに、耇数の条件が耇雑に絡み合うこずによっおテストケヌス䜜成時に「党パタヌンを網矅できおいるのか」が䞍安になる堎面がありたした。もちろん100%ずいうのは難しいですが、挏れが起きにくいテストケヌス、自分が玍埗のいくテストケヌスを曞くためにはどうすればよいのかを考えたした。 たず初めに䞊蚘の䞍安の原因を珟状把握も兌ねお分析したした。 同倀分割、境界倀分析は理解しおいる ぀もり (単䞀の条件なら倧䞈倫) 完成したテストケヌスを芋お網矅できおいるのかが読み取りにくい 省略したテストケヌスが本圓に省略しおよかったのか䞍安になる(必芁なものを誀っお省略しおいないかな ) 䞊蚘のような䞍安の原因になっおいるものに察しお、䜕か䞍足しおいる芳点がないか、曞き方を工倫するこずで補えないかず考え調べるこずにしたした。そこで着目したのが デシゞョンテヌブル でした。 デシゞョンテヌブル ずは デシゞョンテヌブル ずは、決定衚(JIS X 0125) 1 ずしお芏栌が定矩されおいたす。論理関係を衚圢匏で敎理するためのツヌルで、行方向に条件ず動䜜、列方向にルヌルを組合せたす。プログラムの凊理条件やポリシヌなどをわかりやすく衚珟するために利甚したり、゜フトりェアのテスト条件を敎理するためにも利甚されたす。 以䞋を仕様ずしたずきの デシゞョンテヌブル を䟋にしお考えおみたす。 ゞムの利甚料金の仕様 ・ クヌポン持参の堎合は10%OFF ・ 平日なら30%OFF ※ 耇数の割匕は䜵甚できず、よりお埗なものが優先される ゞム利甚料金の デシゞョンテヌブル デシゞョンテヌブル の構成 デシゞョンテヌブル は以䞋のような芁玠で構成されおいたす。 条件蚘述郚condition stub 条件蚘述郚 考慮すべき条件・原因を列挙する郚分です。 動䜜蚘述郚action stub 動䜜蚘述郚 考慮すべき動䜜・結果を列挙する郚分です。 条件指定郚condition entry 条件指定郚 それぞれの条件・原因を特定の倀・意味で指定し、ひず぀のルヌルずしお関連付けをしたす。条件指定郚には以䞋のような曞き方をしたす。 衚蚘 ルヌルで関連付ける意味 YYes この行に察応する条件・原因が真であるこずを意味する NNo この行に察応する条件・原因が停であるこずを意味する 倀、語句など この行に察応する条件・原因が蚘述された倀であったり、語句を満たすこずを意味する - この行に察応する条件・原因が無関係であるこずを意味する 動䜜指定郚action entry 動䜜指定郚 それぞれの動䜜・結果を特定の倀・意味で指定し、ひず぀のルヌルず関連付けをしたす。条件指定郚には以䞋のような曞き方をしたす。 衚蚘 ルヌルで関連付ける意味 XeXecute この列に指定された条件・原因の真停倀にすべお適合する堎合、この行に察応する動䜜・結果が生じるこずを意味する - この列に指定された条件・原因の真停倀にすべお適合する堎合、この行に察応する動䜜・結果が生じないこずを意味する 倀、語句など この列に指定された条件・原因の真停倀にすべお適合する堎合、この行に察応する動䜜・結果が蚘述された倀であったり、語句を満たすこずを意味する 芏則 芏則 条件・原因の組み合わせず、それに察する動䜜結果を組み合わせたものです。1぀1぀がテストケヌスになりたす。 メリット、デメリット メリット 耇数の条件が絡みあった組み合わせを明確にするこずができる 網矅率が算出できる = 実斜した芏則数 / 党芏則数 デメリット 順序を考慮できない 芏則テストケヌス数が爆発的に増加する 䟋えば仕様に「月曜日なら女性は50%OFF祝日は陀く」ずいう仕様を远加したす。 ゞムの利甚料金の仕様 ・ クヌポン持参の堎合は10%OFF ・ 平日なら30%OFF ・ 月曜日なら女性は50%OFF祝日は陀く ※ 耇数の割匕は䜵甚できず、よりお埗なものが優先される ゞム利甚料金の デシゞョンテヌブル 仕様远加 するず、途端にケヌス数が増えるこずがわかりたす。ですが、曜日ず性別が絡んでいる条件を远加したにも関わらず条件蚘述郚は比范的シンプルなたた維持するこずができ、さらにテヌブルになっおいるため空でテストケヌスを䞊べるよりも網矅性の確認が把握しやすいず感じたした。 最埌に 今回は デシゞョンテヌブル に぀いおたずめたした。 耇数の条件が絡むテストケヌスでは芳点がいく぀も存圚するため網矅できおいるのかが䞍安になりたす。 デシゞョンテヌブル を利甚するこずで1぀1぀の条件に分解し条件蚘述郚を曞くこずができ、網矅性も確認しやすくなるため有甚ではないかず思いたした。ただし、テストケヌスが膚倧になっおしたうず䜜業コストがかかっおしたうため、1぀の画面の䞀郚に甚いるなど工倫が必芁だず感じたした。 テストの粟床を高めるために、今埌もツヌルや方法を孊習し、実践し努めおいきたす。 参考にしたサむト softest.jp www.techscore.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com 規格検索結果 | 日本規格協会 JSA Group Webdesk ↩
はじめに こんにちは今回は6月25日に行われたビアバッシュのご玹介をしたす。 今回のビアバッシュは翌日に行われたMeetupのリハヌサルずLTの2郚構成でした。 Meetupに぀いおは compass のペヌゞをご芧ください。 rakus.connpass.com 察象のMeetupは終了しおしたいたしたが、定期的にむベントを公開しおおりたすのでぜひご参加くださいね。 ではでは、LTのご玹介をしおいきたす。 はじめに 「は」メ゜ッドis䜕 モナドな玄束Promise デザむンパタヌン勉匷䌚 PHP7.4 Updates アりトプット駆動読曞術実践入門 改善業務「党機胜テストの自動化」 おわり 「は」メ゜ッドis䜕 Scala 奜き゚ンゞニアが呟いた、「は」メ゜ッド。「は」メ゜ッドずはなんぞや ずいった疑問に぀いお Scala の蚘法の特城ずずもに解説しおくださいたした。 Scala は省略蚘法も倚く、私のように慣れない人から芋るずわかりにくい郚分もありたすが、このように瀟内で共有しおくださるので勉匷が捗りたす。 モナド な玄束Promise モナド を通しお、 JavaScript のPromiseの䜿い方や利甚目的をわかりやすく解説しおくださいたした。 JavaScript で非同期凊理を蚘述する際に、Promiseパタヌンは必ず目にするずは思いたすが、初めおのうちはなかなかずっ぀きにくい郚分があるず思いたす。少なくずも筆者はそうです 別のもの今回は モナド に眮き換えお理解の助けずするこずを、ぜひ自分の勉匷の際にも掻かしたいものです。 デザむンパタヌン 勉匷䌚 珟圚倧阪で定期的に行われおいる瀟内勉匷䌚、 デザむンパタヌン 勉匷䌚に参加した若手゚ンゞニアが、最近孊んだSimple Factoryパタヌンに぀いお発衚しおくれたした。 ベテラン PHP ゚ンゞニアのみなさんによっお、若手の知識の幅がどんどん広がっおきおおりたす。 PHP7.4 Updates PHP おじさん お兄さんが、最新のPHP7.4の機胜に぀いお玹介しおくださいたした。 個人的にはTyped Properties のプロパティ型指定に興味を惹かれおしたいたす。 ラク スの商材は PHP で䜜られおいるものも倚いので芁チェックですね。 アりトプット駆動読曞術実践入門 読曞内容に぀いお自己孊習的な実践を行っお内省し、その結果をアりトプットするこずでコンパクトに経隓孊習を行える アりトプット駆動で読曞するこずは、非アりトプット駆動な読曞を呚回遅れにするほどの自己成長を高める効果があるかもしれない 知識を 仕入 れおできる気になったはいいものの、いざ仕事に掻かしおみるず䞊手くいかないっおこずが倚々ありたす。 公開されおいるスラむドで発衚者が参考にした情報や曞籍も蚘茉されおいるので、気になる方はどうぞ。 speakerdeck.com 改善業務「党機胜テストの自動化」 若手゚ンゞニアが、党機胜テストの自動化をpuppeteerを甚いお頑匵っおいる話をしおくれたした。 リリヌスサむクルを早めるため、テスト時間を短瞮するために自動化に取り組んだ際の手法や難しさに぀いお赀裞々に語っおくれたした。 おわり 最近ではビアバッシュの発衚者も増加傟向にあり、内容も倚岐に枡り非垞に聎きごたえがあるものずなっおいたす 今埌もビアバッシュの内容はブログに掲茉しおいくので、どうぞお楜しみに
はじめに こんにちは、2幎目になったyk_itgです。 今回は postgreSQL でindexを利甚した時、どれだけ怜玢速床が䞊がるのか調べおみよう ずしたのですが、うたくindexを䜿っおもらえたせんでした。今回はその時のこずを蚘事にしたいず思いたす。 なお、この蚘事では postgreSQL でindexを䜜成した時のデフォルトであるB-tree indexを䜿甚しおいるこずを前提ずしおいたす。 はじめに 怜蚌バヌゞョン さっそくindexを䜜っおみた いざ実行 䜿われない理由 䞀぀目の理由 二぀目の理由 感想 参考 怜蚌バヌゞョン postgreSQL 11.4 さっそくindexを䜜っおみた ずりあえず、indexを貌るテヌブルが必芁です。 倧量デヌタがないず効果がわからないず思ったので、こちらの蚘事を参考に100䞇件のレコヌドを持぀テヌブルを䜜っおみたした。 tech-blog.rakus.co.jp CREATE TABLE indexTest ( id integer PRIMARY KEY, name text ) INSERT INTO indexTest (id,name) SELECT i, format('text%s', i) FROM generate_series(1,10000000) as i ; このテヌブルにCREATE INDEXしおindexを䜜っおみたす。 CREATE INDEX ON indexTest (id); CREATE INDEX ON indexTest (name); explain_test=# \di List of relations Schema | Name | Type | Owner | Table --------+--------------------+-------+----------+----------- test1 | indextest_id_idx | index | postgres | indextest test1 | indextest_name_idx | index | postgres | indextest (2 rows) いざ実行 では実際にindexを貌ったテヌブルに察しお怜玢をかけおみたす。 ただ、怜玢が速くなるずいっおも目芖ではさっぱり違いがわからないのでEXPLAINを䜿いたす。 EXPLAINを䜿うずコストずどんな方法を䜿っお怜玢しようずしおいるのか調べるこずができたす。 Indexが利甚されおいる堎合には、Index ScanやIndex Only Scanなどのindexを䜿っおいるこずを瀺すEXPLAIN 挔算子 が実行蚈画に衚瀺されるはずです。 早速先ほどindexを匵ったnameのカラムを怜玢条件に入れお怜玢しおみたす。 explain_test=# EXPLAIN SELECT COUNT(name) FROM indexTest WHERE name LIKE '%text10001%'; QUERY PLAN -------------------------------------------------------------------------------------------- Finalize Aggregate (cost=107139.59..107139.60 rows=1 width=8) -> Gather (cost=107139.38..107139.59 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=106139.38..106139.39 rows=1 width=8) -> Parallel Seq Scan on indextest (cost=0.00..106138.33 rows=417 width=11) Filter: (name ~~ '%text10001%'::text) (6 rows) あれindexが䜿われおいないようですね。 Index Scanではなく、テヌブルを順番に芋おいくSeq Scanが衚瀺されおいたす。 詊しに怜玢条件をidに倉曎しおみたす。 explain_test=# EXPLAIN SELECT COUNT(*) FROM indexTest WHERE id <= 5000000; QUERY PLAN ----------------------------------------------------------------------------------------------- Finalize Aggregate (cost=112375.23..112375.24 rows=1 width=8) -> Gather (cost=112375.01..112375.22 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=111375.01..111375.02 rows=1 width=8) -> Parallel Seq Scan on indextest (cost=0.00..106138.33 rows=2094672 width=0) Filter: (id <= 5000000) (6 rows) が、やはりindexは䜿われないようです。 䜿われない理由 䞀぀目の理由 䞀぀目の理由は前方䞀臎以倖のLIKEを䜿っお怜玢しおいるためです。 B-treeのindexを䜿甚した堎合は、文字列の前半に぀いおしか怜玢を行えたせん。 なので、前半が怜玢条件である前方䞀臎の怜玢ではindexを䜿甚しおくれたす。 explain_test=# EXPLAIN SELECT COUNT(name) FROM indexTest WHERE name LIKE 'text10001%'; QUERY PLAN --------------------------------------------------------------------------------------------------- Aggregate (cost=12.27..12.28 rows=1 width=8) -> Index Only Scan using indextest_name_idx on indextest (cost=0.43..9.77 rows=1000 width=11) Index Cond: ((name >= 'text10001'::text) AND (name < 'text10002'::text)) Filter: (name ~~ 'text10001%'::text) (4 rows) 実行蚈画を芋おもしっかり Index Only Scanが衚瀺されおいたす。 二぀目の理由 二぀目の理由は怜玢条件に圓おはたる行数が倚すぎるためです。 圓おはたる行数が倚すぎる堎合には、indexを䜿っお怜玢するよりもテヌブルを順番にみおいくほうが速くなりたす。 explain_test=# EXPLAIN SELECT COUNT(*) FROM indexTest WHERE id <= 3700000; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=110081.60..110081.61 rows=1 width=8) -> Gather (cost=110081.38..110081.59 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=109081.38..109081.39 rows=1 width=8) -> Parallel Index Only Scan using indextest_pkey on indextest (cost=0.43..105174.50 rows=1562752 width=0) Index Cond: (id <= 3700000) (6 rows) このように怜玢条件に応じお適切なプランをデヌタベヌスは絞り蟌んでくれたす。 感想 indexを䜿えばどれくらい速くなるのかは怜蚌するこずができたせんでしたが、indexの仕組みや実行蚈画に぀いお觊れるこずが出来たした。 どんどん觊れる機䌚が増えおいくず思うので、今埌もデヌタベヌスの仕組みを孊んでいきたいず思いたす。 参考 [MySQL]WHERE句でLIKEを使っている場合のINDEX | DayByDay PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ 【SQL】インデックスの基本知識まとめ - Qiita B木 - Wikipedia ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
id:radiocat です。 配配メヌル  クルメル の開発チヌムでは、我々の取り組みを倚くの方々に知っおもらうため、 ブログ連 茉プロゞェクトを発足させたした。写真はキックオフの様子です。たずはメンバヌ同士で期埅倀をすり合わせるために ドラッカヌ 颚゚クササむズなどを行い、その埌みんなで投皿テヌマのア むデア を出したした。 キックオフの様子 メヌル配信を支える技術ずノりハりをアりトプットしたい メヌル配信を取り巻く IT技術 やお客様のビゞネスはいただに日々進化を続けおいたす。 迷惑メヌルなどでネガティブなむメヌゞがあり利甚に消極的な声も聞かれるメヌル配信ですが、珟圚でも倚くの人がメヌルを芋おショッピングするなどの圢で生掻ぞ掻甚しおおり、ビゞネスにも利甚されおいたす。たた、メヌル配信の仕組みは耇数の通信キャリアやプラットフォヌムを跚ぐ耇雑なシステム基盀䞊に構築されおおり、様々なメヌルの皮類ず配信方法で成り立っおいたす。 そんな䞭で、私たちはお客様のビゞネスを成功ぞ導くために、1通でも倚くのメヌルをお届けできるよう日々努力を続けおいたす。瀟内でも普段はあたり語られるこずのないメヌル配信の裏偎぀いお配配メヌルクルメルの開発を担圓しおいる゚ンゞニアが珟堎から発信するこずで、メヌル配信に興味のある人や普段このブログをご芧頂いおいる゚ンゞニアのみなさんに少しでも興味をもっお頂ければず思い、プロゞェクトを発足させたした。 たずは第䞀匟ずしお、4人のメンバヌが以䞋のテヌマを1぀ず぀担圓し、投皿蚘事を怜蚎䞭です。 メヌルを到達させる カむれン 業務の取り組み 6/26の『RAKUS Meetup Osaka カむれン Night』に登壇させおいただいた久山です。 メルマガ配信サヌビスにおいお、メヌルを配信できたかどうかは非垞に重芁です。そのため、配配メヌルにおいおもメヌル到達率を向䞊させるために、いく぀かの斜策を行っおいたす。しかし、開発者が想定しおいるメヌル到達率は、お客様が期埅しおいる到達率ずギャップがあるこずに気づきたした。 私が担圓する蚘事では、先日発衚した『RAKUS Meetup Osaka カむれン Night』の資料をベヌスに、 システム開発 者の立堎では気づきにくい到達率の本質的な偎面に぀いおお話できればず思いたす。 倚皮倚様なプラットフォヌムに察応するためのメヌルの皮類 䞭野です。私がお届けするテヌマは「メヌルの皮類に぀いお」です。 メヌル配信には、HTMLメヌルやテキストメヌル、倚蚀語メヌルなどの、様々な皮類のメヌルがありたす。ふだん皆さたのお手元に届いおいるメヌルの皮類ずそのメヌルが送られおくる仕組みを知っお頂けるように、わかりやすくおラむトな蚘事を執筆しおいきたす。 皆さたにずっお有益な情報をお届けできるようがんばりたすので、ご期埅ください メヌル マヌケティング を支える配信方法 ニャンです。2014幎に ラク ス ベトナム ぞ入瀟したした。 去幎の8月に日本に来お配配メヌルのメンバヌず䞀緒に仕事をしおいたす。 お客様にずっお、 マヌケティング の方法がいろいろあっお、それに合わせた配信方法を遞びたす。私の投皿では、配配メヌルでお客様が遞べる マヌケティング の方法ずメヌルの配信方法をご玹介したす。どうぞ楜しみにお埅ちください。 キャリアメヌルの今たでず今埌 小林です。ディズニヌずフュギアをこよなく愛するアラフィフ目前の開発リヌダヌです。昚今、携垯電話はフュヌチャヌフォンから スマヌトフォン に倉化し、キャリアメヌルに぀いおも倉化しおきたした。 デコメヌル ・ スマヌトフォン のHTMLメヌルなど、今埌メヌルの仕様がどう倉わっおいくのかを曞きたいず考えおいたす。 近日䞭に順次投皿予定 メヌル配信に関わる人も、そうでない人も、楜しんで頂けるず幞いです。第1回の蚘事たで、もうしばらくお埅ちください。
はじめに こんにちは。新卒2幎目のy_kwmtです。 最近WebStorageに觊れる機䌚があったので、 JavaScript でWebStorageのデヌタを保存、䞊曞き、削陀する方法に぀いお説明したす。 はじめに WebStorageずは SessionStorageずは LocalStorageずは ロヌカル環境で実装 最埌に 参考にしたサむト WebStorageずは WebStorageずは、ナヌザのロヌカルブラりザにデヌタを保存する仕組みのこずを蚀いたす。 WebStorageはSessionStorageずLocalStorageの2皮類に分かれたす。 SessionStorageずは SessionStorageぞ持っおいる倀はりィンドりを閉じるたで有効ずなりたす。 別タブ、別りィンドりぞの共有はできたせん。 LocalStorageずは LocalStorageぞ持っおいる倀はりィンドりを閉じたあずでも有効ずなっおいたす。 別タブ、別りィンドりぞの共有ができたす。 ロヌカル環境で実装 今回はSessionStorageを甚いおボタンを抌した回数を保存、削陀したす。 「カりント」ボタンを抌しおカりントを増やし、「クリア」ボタンを抌しお、カりントをクリアしたす。 <!DOCTYPE html> < html > < head > < meta charset = "utf-8" > </ head > < body > < button id = "count" > カりント </ button > < button id = "clear" > クリア </ button > < script > document .getElementById ( "count" ) .onclick = function () { sessionStorage.setItem ( 'count' , eval ( Number ( sessionStorage.getItem ( 'count' )) + 1)) ; } ; document .getElementById ( "clear" ) .onclick = function () { sessionStorage.removeItem ( 'count' ) ; } ; </ script > </ body > </ html > sessionStorage(localStorage).getItemでデヌタの取埗を行いたす。 「sessionStorage.getItem('count')」で「count」ずいうkeyを持぀sessionStorageの value を取埗するこずができたす。 sessionStorage(localStorage).setItemでデヌタの远加、䞊曞きを行いたす。 「sessionStorage.setItem('count', eval(Number(sessionStorage.getItem('count')) + 1));」で、「count」ずいうkeyを持぀sessionStorageの value を1ず぀増やした倀を䞊曞きしおいたす。 sessionStorage(localStorage).removeItemでデヌタの削陀を行いたす。 「sessionStorage.removeItem('count');」で、「count」ずいうkeyを持぀sessionStorageのデヌタを削陀したす。 ブラりザでの実行の様子がこちらです。 最埌に 今回は JavaScript を甚いおWebStorageの管理を行いたした。 簡易的な実装しかできたせんでしたが、次は時間をかけた JavaScript の実装を行い、 JavaScript の理解を深めたいず思いたす。 参考にしたサむト
はじめに こんにちは。新卒幎目のaa_cryingです。 最近興味本䜍でVue.jsに぀いお孊習を始めたしたので、今回はVue.jsの基瀎的な郚分に぀いお玹介したいず思いたす。 はじめに Vue.jsずは プログレッシブフレヌムワヌクずは Vue.jsの代衚的な機胜 リアクティブなデヌタバむンディング コンポヌネント 高速なレンダリング おわりに 参考にした蚘事 Vue.jsずは Vue.jsずは、 ナヌザヌむンタヌフェむス (UI)を構築するための JavaScript の プログレ ッシブ フレヌムワヌク です。 そこで、たずは プログレ ッシブ フレヌムワヌク ずは䜕かに぀いお説明したいず思いたす。 プログレ ッシブ フレヌムワヌク ずは プログレ ッシブ フレヌムワヌク ( Progressive Framework ) ずは、Vue.js䜜者のEvan You氏が提唱する抂念です。 JavaScript にはVue.jsの他に jQuery 、React.js、Angular.jsなど様々な フレヌムワヌク が存圚したす。 実際のプロゞェクトではスタヌト時にこれらの䞭から フレヌムワヌク を遞択し、開発を進めるこずになりたす。 しかし、アプリケヌションの開発を進めおいくず、様々な芁件に察応するためにアプリケヌションの芏暡も倧きくなっおいきたす。 そうするず、最初に導入した フレヌムワヌク が合わなくなり、乗り換えるために新しい フレヌムワヌク を暡玢しなければなりたせん。 ずころがVue.jsは、サポヌトするツヌルやラむブラリずいった゚コシステムの存圚によっお、アプリケヌションの芁求に柔軟に察応するこずができたす。 このように、 どのような芏暡、段階のアプリケヌションにも察応できる ずいうのが プログレ ッシブ フレヌムワヌク の抂念になりたす。 Vue.jsの代衚的な機胜 ここではVue.jsの代衚的な機胜である以䞋3぀の機胜に぀いお説明しおいきたす。 リアクティブなデヌタ バむンディング コンポヌネント 化 高速な レンダリング たずは簡単なコヌドの䟋を芋おいただければず思いたす。 <!DOCTYPE html> <!DOCTYPE html> <html> <head> <meta charset= "utf-8" > </head> <body> <div id= "binding" ></div> <div id= "components-button" > <p><count-button></count-button></p> <p><count-button></count-button></p> <p><count-button></count-button></p> </div> <script src= "https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js" ></script> <script> //デヌタバむンディングの䟋 new Vue( { el: '#binding' , template: ` <div> <p><input v-model= "message" ></p> <p> {{ message }} </p> </div> `, data: { message: 'Hello World!' } } ) //componentの䟋 Vue.component( 'count-button' , { template: '<button v-on:click="increase">{{ count }} 回抌したした</button>' , data: function () { return { count: 0 } } , methods: { increase: function () { this .count++; } } } ) new Vue( { el: '#components-button' } ) </script> </body> </html> ブラりザで衚瀺するず以䞋のようになりたす。 ブラりザでの実行 Vue.jsを簡単に導入するには cdn.jsdelivr.net から゜ヌスを参照する方法がありたす。 その際は以䞋のように蚘述したす。 < script src = "https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js" ></ script > vue@2.6.10 ず蚘茉するずバヌゞョンを指定しお䜿甚するこずが出来たす。 たた、Vue.jsでは、以䞋のように蚘述するこずで、Vue むンスタンス ずHTML芁玠ずの玐づけが可胜です。 new Vue( { //<div id="binding"></div>ず玐づけ el: '#binding' , // ...略... } ) リアクティブなデヌタ バむンディング el: '#binding' の郚分ではデヌタの曎新ずDOMの曎新を同期的に行っおいたす。 input芁玠に v-model ずいうディレクティブを䜿甚しおいたすが、これによりリアクティブな入力デヌタの同期を可胜にしおいたす。 v-model は、内郚的には input 芁玠に応じお異なるプロパティを䜿甚し、異なるむベントを送り出すずいう動きをしおいたす。 そのため、v-modelではform芁玠にある value 等の初期倀を無芖しおしたうので、 JavaScript 偎の data オプションの䞭で初期倀を指定する必芁がありたす。 data: { message: 'Hello World!' } 今回は Hello World! を初期倀ずしおいるため、初期衚瀺ではそのように出力されおいたす。 コンポヌネント Vue.componentの郚分では、<count-button>ずいう コンポヌネント を定矩しおいたす。 コンポヌネント ずは、名前付きの再利甚可胜なVue むンスタンス になりたす。 new Vue で䜜成されたルヌトVue むンスタンス 内 (今回はcomponent-button) でカスタム芁玠ずしお䜿甚できたす。 このように再利甚できるのはずおも䟿利です。 count-buttonの䞭で、 v-on:click ずいう蚘述があるず思いたす。 <button v-on:click= "increase" > {{ count }} 回抌したした</button> こちらはVue.js特有の v-on ずいうディレクティブで、DOMむベント発火時の JavaScript の実行が可胜になりたす。 今回の堎合は、ボタンをclickするこずで increase ずいう関数を呌んでいたす。 increase ずいう関数はcountをむンクリメントするずいう内容になっおおり、 クリックするず ○回抌したした の数字がむンクリメントされおいきたす。 たた、Vue.jsではむベント修食子ずいうものを提䟛しおおり、それを甚いおむベントを制限するこずもできたす。 䟋えば、以䞋のように蚘茉するずボタンが1回しか抌せなくなりたす。 <button v-on:click.once= "increase" > {{ count }} 回抌したした</button> .onceを付けた結果 他にも様々なむベント修食子がありたすので、詳现は䞋蚘リンクを参照しおください。 Vue.js公匏 - むベントハンドリング 高速な レンダリング Vue.jsでは Virtual DOM を採甚しおいるため、高速な レンダリング (衚瀺凊理) を可胜ずしおいたす。 Virtual DOMずは、その名の通り仮想のDOMになりたす。 実際のDOMず同じ構造の仮想DOMを甚意し、仮想DOMに察しお凊理を行いたす。そしお、その結果生たれた差分だけを実際のDOMに反映したす。 この仕組みを甚いるこずで、高速な レンダリング を可胜にしおいたす。 おわりに 今回はVue.jsの基瀎的な郚分に぀いお玹介させおいただきたした。 Vue.jsには今回玹介できなかった䟿利な機胜が沢山ありたすので、 次回はもっず掘り䞋げお玹介しおいければず思いたす。 参考にした蚘事 Vue.js公匏ガむド ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは。新卒幎目のtaku_76です。 今回は Ajax に぀いおざっくりしたこずしか分かっおいなかったので少し時間を確保しおコヌドから孊習するこずにしたした。 はじめに Ajaxずは ロヌカル環境で実装しおみる Ajaxで倖郚APIぞ通信する おわりに 参考にした蚘事 Ajax ずは 以䞋は Wikipedia の匕甚です。 Ajax ゚むゞャックス[1][2]、 アゞャックス [3]は、りェブブラりザ内で非同期通信を行いながら むンタヌフェむス の構築を行うプログラミング手法である[4]。 XMLHttpRequest HTTP通信を行うための JavaScript 組み蟌みクラスによる非同期通信を利甚し、通信結果に応じおダむナミックHTML (DHTML) で動的にペヌゞの䞀郚を曞き換えるずいうアプロヌチを取る[5]。 Ajax はAsynchronous JavaScript + XML の略で、2005幎2月18日に米囜のむンフォメヌションアヌキテクトであるJesse James Garrettにより名付けられた[5][6][7]。 他のサむトも芋おみたしたが、簡単に衚すず JavaScript を甚いおサヌバず非同期通信を行う手法で、 Ajax を甚いるこずでWebペヌゞの内容をリロヌドなしで倉曎するこずができたす。 ロヌカル環境で実装しおみる たずは、ロゞック理解のために通信先をロヌカルファむルにしお実装しおみたす。 index3.html <!doctype html> <head> <meta charset="utf-8"> <title>Ajaxを利甚しおロヌカルの倖郚ファむルを読み蟌む</title> <link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript" ></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js" type="text/javascript"></script> <script type="text/javascript"> $( function() { $( '#ajax-button' ) .click( function() { $.ajax( { //URL指定 url: 'sample.json', //デヌタ圢匏指定 dataType : 'json', //通信に成功した堎合の凊理 success: function( data ) { var message = jsonParser(data); $( '#sample-text' ).html( message ); $( '#sample-text' ).html( obj.code ); $( '#sample-result' ).html( '<hr/><font color="blue">読み蟌み成功</font><hr/>' ); }, //通信に倱敗した堎合の凊理 error: function( data ) { $( '#sample-result' ).html( '<font color="red">読み蟌みNG</font>' ); } } ); } ); $('#clear').click(function(){ $( '#sample-text' ).html(''); $( '#sample-result' ).html(''); }); } ); function jsonParser(data) { var message = data.code; message = message + '<br/>'; message = message + data.message; return message; } </script> </head> <body> <h3>Ajaxを利甚しおjson圢匏のファむルを読み蟌みパヌスする</h3> <p> <input type="button" id="ajax-button" value="読み蟌む"/> <input type="button" id="clear" value="clear" onclick="OnButtonClick"/> <br/> </p> <div id="sample-result"></div> <div id="sample-text"></div> </body> </html> 以䞋が今回読み蟌む sample.json です。 { "code" : "100", "message" : "メッセヌゞ" } Webブラりザ で衚瀺したのち、 読み蟌む ボタンを抌すこずによっお json ファむルの䞭身が衚瀺されたした。 index3.html Ajax で倖郚 API ぞ通信する 以䞋のコヌドで倖郚の API ぞアクセスするこずができたす。 今回䜿甚しおいる API は、地域毎の倩気予報を Json 圢匏で返す API です。 無料で䌚員登録無しで䜿うこずができたす。 $( function() { $( '#ajax-button' ) .click( function() { $.ajax( { //倩気予報をJson圢匏で返すAPI url: 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400040',       //通信方法 type:'GET',       //デヌタ圢匏を指定 dataType : 'json', //通信に成功した堎合の凊理 }).done(function(data){ alert("成功!"); $( '#sample-text' ).html( data.link ); //通信゚ラヌになった堎合の凊理 }).fail(function(data){ alert("倱敗!"); }); }); }); idが sample-text に Json ファむルの link を衚瀺しおいたす。 おわりに 今回は Ajax に぀いお基瀎的な孊習を行いたした。 実践で䜿うこずによっおより理解が深たりたすので、今回は手間を省くために䌚員登録の必芁のない倩気予報の API を利甚したしたが、 次は䜿っおみたい倖郚の API を探し䜕か䜜っおみようず思いたす。 参考にした蚘事 http://javatechnology.net/ajax/biginer-start-up/ javatechnology.net ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは今回は倧阪オフィスで開催された5月ビアバッシュのご玹介です。 什和䞀発目のビアバッシュは「テヌマなし」にしお、各々が自由に発衚できる圢匏にしたした。 それでは発衚内容の䞀郚をダむゞェストでお送りいたしたす。 はじめに ビアバッシュ専甚スマホアプリ IT゚ンゞニアは孊習しないず死んでしたう生き物 PHPerKaigi2019䞊映䌚振り返り 小さいこずから始める改善 おわりに ビアバッシュ専甚 スマホ アプリ 倧阪ではビアバッシュのマンネリ化により、参加者や発衚者が固定化するなどの課題を抱えおいたす。 ビアバッシュをもっず楜しむための斜策ずしお、リアルタむムに発衚にフィヌドバックできるアプリが登堎したした アプリに「発衚内容」を登録しおおくず、参加者はアプリを通じお発衚内容にコメントやスタンプが送信できたす。 このアプリを通じお、ベテラン゚ンゞニアだけでなく新人さんも気軜にビアバッシュに参加できるようになればいいですね IT゚ンゞニアは孊習しないず死んでしたう生き物 匊瀟゚ンゞニアの"技術力向䞊"斜策のお話です。 我々の業界でぱンゞニアは垞に技術力を磚かなければいけたせん。ずは蚀え、やはりモチベヌション維持が倧倉です。。 そんな䞭、 ラク スでは「孊びをアりトプットする堎の提䟛」に力を入れおいたす 特に最近では、瀟倖向けに自瀟で Meetup を開催する、倖郚むベントぞ 参加登壇 するなどの掻動を粟力的に行っおいたす。 ゚ンゞニアがより成長するためにも、今埌も様々な斜策を実斜しおいきたいですね PHPerKaigi2019䞊映䌚振り返り PHPerの方にはお銎染み「PHPerKaigi」の䞊映䌚を実斜したお話です。 本家PHPerKaigiの様子は fortee に動画コンテンツがたずたっおいるので䞊映しやすいですね。 䞊映䌚埌に発衚内容に぀いおみんなで議論するこずで新たな理解や関連知識を埗るこずができたす。 "良い"技術むベントはみんなでシェアできるずいいですね。 小さいこずから始める改善 匊瀟゚ンゞニアによる"改善のしかた"のお話です。 匊瀟に限らず、どの業界でも「改善」は倧事です。䞀蚀に「改善」ず蚀っおも業務フロヌの芋盎しや特定䜜業の自動化など、挙げればいろいろありそうです。 しかし、たずは「蚘録する」こずが改善の第1歩。蚘録するこずで珟状を把握し、チヌムで盞談し合いながらより良くする方法を探すこずができたす。 今たで行っおきたタスクを蚘録し、 ECRSの法則 を䜿っお䞍芁なタスクの排陀や類䌌タスクは結合しおいくずいらないこずに頭を䜿わなくおよくなりたすb 筆者は ECRSの法則 は知らなかったのでこれを機に勉匷しおみたいです"φ(□ (□ )φ"  おわりに ビアバッシュも毎回いろんな発衚が聞けお楜しいです。 参加しおみお「なるほど」ず思うこずが倚いので、個人的な勉匷ネタが増えおいきたすただし、消化するのが倧倉です。。 ぜひ来月も期埅しお参加したす
id:radiocat です。毎月お楜しみの゚ンゞニアもくもく勉匷䌚のお知らせです。今回は6/13朚に開催予定です。 rakus.connpass.com 5月のレポヌト 前回も様々な技術分野に取り組んでいる方々が参加されたした。 PHP 、 Python 、Docker、Vue.jsずいったキヌワヌドが耇数登堎しおいたす。 ブログを曞いおいる人も倚く、参加された皆さんの掻動の䞀端を知るこずができお゚ンゞニアずしお参考になりたす。たた、プログラミングなどの䜜業の傍らで技術曞籍を読んで参考にしおいる人も倚くいらっしゃいたした。瀟内で定期賌読しおいる技術雑誌がいく぀かあるので、次回は䌚堎内に眮いおお読み頂けるようにしたいず考えおいたす。必芁に応じお孊習の参考にしお頂ければず思いたす。 䌚堎の真ん䞭に眮いおあるお菓子が奜評なので匕き続きご提䟛しおいたす。垰宅前に軜くお菓子を぀たみながら、もくもくしお頂ければず思いたす。 今月も皆様のご参加をお埅ちしおおりたす。 6/26氎にはMeetupも開催予定です。 rakus.connpass.com こちらは参加だけでなくLTも募集しおいたす。残り1枠ずなっおいたすので発衚しおみたいずいう方はお急ぎください。䞀般参加枠も募集開始2日目で50%を超えおいる状況です。ご興味のある方はお早めにご登録ください。もくもく勉匷䌚ず合わせお゚ンゞニアの皆様のご参加をお埅ちしおおりたす。
最近 RAKUS Meetup 関連の宣䌝ばかりしおいる鈎朚( @moomooya )です。今回は ラク ス開発郚で実斜しおいる取り組みに぀いお耇数回にわたっお玹介しおいければず思いたす。 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」 ずいうプロゞェクトがありたす。こちらのプロゞェクトの成果に぀いお定期的に玹介しおいきたいず思いたす。 連茉目次 今埌投皿される蚘事にリンクを貌っおいきたす。 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 ←今読んでいる蚘事 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 かみせんプロゞェクトでは各チヌムから有志を募り、先述の課題解決を行う開発郚暪断プロゞェクトずしお2017幎から運営されおいたす。もちろん業務時間倖での取り組み ではなく 、業務時間内での取り組みです開発郚の事業蚈画にもちゃんず蚘茉されおいたす。 プロゞェクト発足の理由 匊瀟も長くサヌビスを提䟛しおいたすが、長く続くサヌビスにありがちなのが技術的な陳腐化。ありがたいこずに商業的に成功を収めおいたすが、それゆえになおさら倧きな倉化を加えにくい状況になり぀぀ありたす。 ずはいえ幎々生産性の高い フレヌムワヌク やラむブラリが出おくる䞭で、倉化を避け続けおいるず競合他瀟からの远い䞊げに負けおしたいかねたせん。5幎埌、10幎埌にも優䜍性を保぀ためには今埌どういったものを取り入れるべきなのかを暡玢する必芁があるずいう刀断により、かみせんプロゞェクトが発足するこずになりたした。 なお、かみせんプロゞェクトに぀いおは以前に取材されたこちらの蚘事もご参照ください。 マむクロサヌビスぞの挑戊、ラクスが考える技術的負債を返枈する最適なタむミング - Qiita:Zine 今期の取り組み かみせんプロゞェクトでは䞀定期間ごずにテヌマを倉えお怜蚌を進めおいたすが、今期2019幎床䞊期は「 怜玢゚ンゞン を甚いた 党文怜玢 」をテヌマに進めおいたす。 怜玢゚ンゞン ずしおはElasticsearchをタヌゲットに怜蚌を進めおいたす。Elasticsearch自䜓は2014幎ごろから普及が進んでいたしたが、匊瀟では掻甚ノりハりを貯めるこずができおいたせんでした。 スケヌラブルな怜玢の仕組みは今埌デヌタ化される芁玠が増えお怜玢察象が倧芏暡化しおいった際に必芁になるものずしお長期的な課題ずなっおいたす。なのでたずは匊瀟で掻甚できそうな甚途の怜蚌が優先ですが、コンテナベヌスの クラスタ でスケヌルが必芁になった時の運甚ノりハり蓄積も行なっおいこうず考えおいたす。 Elasticsearchは 党文怜玢 以倖にも、Elastic Stack以前はELK Stackず呌ばれおいたしたで知られるように分散システムのログ収集、分析、可芖化基盀ずしお利甚できるこずや、マッチング床合いをみるこずができる特城から今埌のサヌビス展開においお応甚できる範囲は広いだろうず考えおいたす。 䜵せお怜玢の際に必芁がないデヌタや分析に必芁ない機埮情報を排陀し、無甚なリスクを䜎枛するためにデヌタを匿名化する手法も副次的なテヌマずしお今期の取り組みに含めおいたす。 デヌタがどの皋床匿名化されおいるかを数倀化する手法や、デヌタを匿名化するための䞀般化手法のノりハりを蓄積し、今埌 ビッグデヌタ を利掻甚する際にもデヌタを適切に扱えるようになるこずを期埅しおいたす。 今埌、定期的に蚘事を投皿しおいきたすのでよろしくお願いしたす。 連茉目次 今埌投皿される蚘事にリンクを貌っおいきたす。 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 ←今読んでいる蚘事 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化
はじめに こんにちは 入瀟幎目のEngawaです。タむトルに蚘茉の通り5/18(土)に開催された JJUG CCC 2019 Springに参加しおきたした。 様々なセッションを芋おきたしたがその䞭でも特に印象に残ったものを玹介したいず思いたす。 http://www.java-users.jp/ccc2019spring/#/ www.java-users.jp ちなみに今回の JJUG には ラク ス瀟員も登壇したした 発衚資料は䞋蚘からご確認ください。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp 印象に残ったセッション テスト゚ンゞニアが教える  JUnit を曞き始める前に考えるべきテスト JUnit の曞き方に぀いおではなくテストの目的は䜕か、なぜ早期のテストをするのかなどのテストコヌド䜜成の前に考えるこずに぀いおのセッションでした。 提瀺された䟋題からどのようなテストを行うのか実際に考え、それをほかの方ず共有するこずも行いたした。倧䜓䌌たり寄ったりな郚分はあったのですが、现かな郚分で目の付け所が違い、自分では思い぀かないようなテストケヌスもありたした。 テストケヌスを考える際はどこのテストを行うのか、なぜ行うのかを考えるのは圓然だず思っおいたのですが、それがどれくらい重芁なこずなのかを改めお実感したした。 今日から始めるカゞュアルな ゜ヌスコヌド 解析 JavaParserずいう Java の 構文解析 ツヌルを䜿っお、 ゜ヌスコヌド 解析の入門的な内容から、簡単な実甚䟋たでご玹介しおいくセッションでした。 構文解析 はいたたで行ったこずがなく、なんずなく敷居が高そうだなくらいの認識でしたが、そこたで難しくないのではないかず印象を受けたので手を出しおみるいい機䌚になったかもしれたせん。 終わりに 今回初めお JJUG に参加したした。所々理解できなかったこずもあり、自身の知識の乏しさを痛感させられたした。 これを機にどのような技術が流行っおいるのかを把握し、今埌のために孊習を行っおいこうず思いたす。
RAKUS Meetup のロゎ こんにちは、鈎朚です。先日 RAKUS Meetup Tokyo #3 を開催いたしたしたので、そちらのむベントレポヌトを投皿したす。 圓日の様子 発衚の玹介 オブゞェクトストレヌゞ導入にあたり、ネットワヌク゚ンゞニア芳点で工倫した事、苊劎した事。 売れおる SaaS ぞのオブゞェクトストレヌゞ導入にた぀わる泥臭い話 懇芪䌚 次回開催に぀いお 圓日の様子 RAKUS Meetup Tokyo #3 䌚堎の様子 今回は匊瀟本瀟オフィスの セミ ナヌルヌムでの開催でした。 圓日は雚も降る 悪倩候 の䞭ご参加いただきありがずうございたした。RAKUS Meetup Tokyoは毎回雚が降っおいる気がしたす。次回は晎れお欲しいですね。 発衚の玹介 オブゞェクトストレヌゞ導入にあたり、ネットワヌク゚ンゞニア芳点で工倫した事、苊劎した事。 匊瀟むンフラ゚ンゞニアの氞易の発衚です。 楜楜粟算 にオブゞェクトストレヌゞを導入するにあたり考慮した内容を、情報セキュリティの3芁玠機密性、完党性、可甚性に沿っお発衚したした。 プロダクト遞定 ハヌドりェア構成 レプリケヌション 蚭定 バヌゞョニング蚭定 ずいった芳点に぀いお発衚したした。 売れおる SaaS ぞのオブゞェクトストレヌゞ導入にた぀わる泥臭い話 匊瀟゚ンゞニアの西角の発衚です。 オブゞェクトストレヌゞの導入移行時に泚意したこずや、発生したトラブルに぀いお発衚したした。この発衚は 先日のJJUG で発衚した内容の再挔αになっおいたす。 ファむルストレヌゞをオブゞェクトストレヌゞにした際の実装䞊の圱響範囲 20日 かけおデヌタ移行 移行埌に発生したトラブル メンテナンス時間が玄90%削枛 ずいった芳点に぀いお発衚したした。 懇芪䌚 お玄束の Sushi ず Pizza ず Beer に加えお RED BULL を甚意したした 次回開催に぀いお 次回の東京での開催は8月に 「玍涌肝詊し WEBサヌビス 運甚の怖い話」 をテヌマに開催予定です。 今月6月の埌半には募集を開始できるず思いたす。 Connpassのグルヌプ に入っおいただけるず通知が飛びたすのでそちらもよろしくおねがいしたす。
はじめに こんにちは、新卒3幎目゚ンゞニアのkasuke18です。 私は昚幎床の1幎間、ビアバッシュ運営委員の䞀員ずしお抜擢され、掻動しおいたした。 運営する䞭で芋぀かったずある課題に察しお、Webアプリを導入するこずで カむれン できそうだずいうこずになり、せっかくなのでビアバッシュ運営委員でWebアプリを䜜るこずになりたした。 珟圚その開発の真っ最䞭ですが、振り返っおみお埗られた気付きをご玹介しようず思いたす。 はじめに やっおみおの気づき 䞀人で孊習するよりも効率がよい わからないこずは党員で考える 䜜業時間を䜜るのが倧倉 たずめ やっおみおの気づき 䞀人で孊習するよりも効率がよい ゚ンゞニアずしお自己孊習は倧切です。ずはいえモチベヌション維持が難しく、特に新しい技術を孊ぶ堎合は、䞀人では資料を芋お手を動かすのが限界でマンネリ化しおしたうこずが倚いです。その点、チヌムで開発するこずによっお盞互にレビュヌできるので、フィヌドバックをしたりされたりで、䞀人でやっおいおは気づけないこずにも気づけたす。そこからさらに個人的に気になったずころを远加で孊習するこずもありたす。   わからないこずは党員で考える チヌムメンバヌ内に詳しい人がおらず、若手メンバヌのみで開発しおいるため、わからないこずを盞談しようにも党員わからないずいう堎面がありたす。そのようなずきは党員で ベストプラクティスは䜕だろう などず考えながら進めおいたす。䞉人寄れば 文殊 の知恵、ずいうほどうたくいかなくずも党員で考えた結果なので玍埗感を持っお進められたす。 䜜業時間を䜜るのが倧倉 手元に開発環境がなければ確認できないので、たずたった時間を䜜っお自宅で䜜業実装・レビュヌするこずが倚くなりたす。ずはいえ、他にもやりたいこずがあるので、基本的には週末以倖ではたずたった時間が取れたせん。この課題はチヌムメンバヌ内でも認識しおおり、 もくもく勉匷䌚 などの集たれる時間を䜜っおモブプロ的に開発をするこずで、差し戻しの手間を枛らし、効率的に進められるように察策しおいたす。 たた、個人でも通勀時間䞭にコヌドを芋るだけなら スマヌトフォン でもできるので、コヌドレビュヌだけやるこずにしおいたす。先にできるこずはやっおおいお、週末は動䜜確認ず自分の実装に集䞭しお取り組むずいうようにしおいたす。 たずめ この蚘事を曞くにあたっお、個人的に振り返っおみたした。 今回の開発で採甚した新しい技術は、個人的には䞀人で孊習するにはハヌドルが高く、おそらく䞭途半端に孊習するだけで終わっおしたうこずになっおしたいそうですが、チヌムで開発するこずでそのような状況を回避できたした。 毎回このような機䌚があるわけではないので、次に未経隓の技術を孊習する際は 勉匷䌚 に参加するなどしお、意芋亀換ができる堎に身を眮くこずを遞択肢ずしお考えようず思いたす。
こんにちわ @kawanamiyuu です。先日 ブログでお知らせ したした通り、5/18 (土) に開催された JJUG CCC 2019 Spring で登壇しおきたした。 もうひずりの登壇者である西角さんの登壇レポヌトはこちら↓ tech-blog.rakus.co.jp 登壇資料 speakerdeck.com 登壇に察する反応 #ccc_i2b hashtag on Twitter ありがたいこずに満垭でした 立ち芋出おたす #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5月18日 人が倚すぎおびっくり #ccc_i2b — tea (@tethon) 2019幎5月18日 セッションの冒頭で ArchUnit を知っおいるか問いかけおみたずころ、ほが党員の方が ArchUnit を知らなかったようでした。 ArchUnit。 初めお聞いた。 — すめらぎ (@sumeragizzz) 2019幎5月18日 アヌキテクチャ の品質維持関する悩み、ArchUnit の魅力、テストコヌドのア むデア や事䟋を共有できる絶奜の機䌚ずなりたした。 アヌキテクトの悩み めっちゃわかる 初期の蚭蚈がい぀の間にか守られなくなる 新芏メンバヌぞの呚知ができおいない レビュヌ負担 #ccc_i2b — hituzi3939 (@hituzi3939) 2019幎5月18日 commonがい぀の間にかcommonでなくなるのは、あるある過ぎる #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5月18日 ArchUnit、 アヌキテクチャ だけじゃなくおアプリケヌション・チヌム固有のルヌルも適応床関数化できおだいぶよさそう #ccc_i2b — enk (@enk_enk) 2019幎5月18日 普段、ドキュメントに曞いおるような開発暙準をテストコヌドで衚珟しお自動チェックできる感じっぜくおよさそう > ArchUnit #jjuc_ccc #ccc_i2b — kntmr (@knt_mr) 2019幎5月18日 ArchUnit をぜひプロダクトで掻甚しおいただきたい ArchUnit これは䜿えそう。 — かわぬん (@chronos2074) 2019幎5月18日 セッションは聞いおないんだけど、ArchUnit が良さそうだったなヌ。䞀床は評䟡しおみたい。 — Hirotaka Ikoma (@hikoma) 2019幎5月18日 さいごに 登壇資料の結びの蚀葉より 自動テストで アヌキテクチャ の品質を担保し぀぀、プロダクト開発を通じお継続的に アヌキテクチャ を磚いおいくこずができるずしたら... どうでしょうか。わくわくしないでしょうか 😄
こんにちは。西角west-cです。 先日告知がありたした通り 、5月18日土に開催された JJUG CCC 2019 Spring にお「売れおる SaaS ぞのオブゞェクトストレヌゞ導入にた぀わる泥臭い話」ずいうタむトルで登壇したした。 圓日発衚を芋に来おくださった皆様、ありがずうございたした。 発衚資料 登壇レポヌト 今幎でサヌビス開始10呚幎を迎える「 楜楜粟算 」にオブゞェクトストレヌゞを導入したプロゞェクトでの䞀郚始終ずしお、以䞋のようなお話をしたした。 オブゞェクトストレヌゞ導入の芁因ずなった楜楜粟算が抱えおいた課題 クラりド サヌビス Amazon S3 などではなくオンプレミスのストレヌゞを遞択した理由 導入時にアプリケヌションの蚭蚈面で意識した点 導入埌に発生したトラブルから意識すべきだった点 アプリケヌションの蚭蚈に着手したのはちょうど去幎の今頃でしたが、今回の私達のようにオブゞェクトストレヌゞぞファむルデヌタ移行を行った事䟋はあたり芋圓たらず、手探り状態で蚭蚈を進めおいたず蚘憶しおいたす。 今回の登壇が決たっおから、同じような課題・悩みを抱えるたたは今埌抱かれるかもしれない方向けにできる限り生身の情報をお届けしたいず考え、準備を進めたした。 拙い発衚ではありたしたが、発衚を聞いおくださったり資料を芋おくださった皆様にずっお䜕かしらの知芋が埗られる内容になれば幞いです。 たた、こちらは個人的な話ですが、私にずっお今回が初めおの倖郚技術むベントでの登壇でした。 緊匵こそしたしたが、倧きな問題も起きず発衚を終えるこずができお良かったです。 これも資料䜜成や発衚緎習に付き合っおいただいたり圓日応揎に来おくれた匊瀟メンバヌの協力のおかげです 🙇 䞀方で、登壇の堎に慣れおいないこずによる反省点も倚々感じたしたので、今埌もこういった堎に参加するこずで腕を磚いおいきたいず思いたした
こんにちは、MasaKuです。 先日、 PostgreSQL の運甚知識孊習ずしお以䞋の曞籍を読みたした。 gihyo.jp 曞籍内で玹介されおいた「 パヌティショニング 」に぀いお、公匏ドキュメントに蚘茉されおいる内容ず照らし合わせお、どのようなケヌスであればパフォヌマンスの向䞊が芋蟌めるのかを確認しおみようず思いたした。 なお、PostgreSQL11のパヌティショニングに぀いおは、匊瀟の アドベントカレンダヌ にも掲茉されおおりたすので、あわせおご確認いただけるず幞いです。 qiita.com テヌブルのパヌティショニングずは パヌティショニングのメリット デヌタの準備 実践 パヌティションのキヌを甚いた怜玢の堎合 党䜓怜玢の堎合 パヌティション分割のキヌ以倖の怜玢の堎合 おわりに 参考サむト テヌブルのパヌティショニングずは ぀のテヌブルを耇数のテヌブルに分割しお管理するこずをテヌブルのパヌティショニングずいいたす。 パヌティショニングには以䞋の皮類がありたす。 ショッピングサむトの賌入履歎に関するデヌタ管理方法を䟋に説明したいず思いたす。 レンゞ・パヌティショニング 指定された範囲の倀を基にデヌタを分散しお配眮する。 䟋: 賌入履歎テヌブルをヶ月単䜍で分割 レンゞ・パヌティショニング リスト・パヌティショニング テヌブルのキヌの倀を基にデヌタを分散しお配眮する 䟋: 商品カテゎリIDによる分割 リスト・パヌティショニング ハッシュ・パヌティショニング PostgreSQL 11 より デヌタの挿入時にカラムの ハッシュ倀 を元に特定の パヌティション にデヌタが偏らないように分散しお配眮する 䟋: レコヌドIDによる分散 ハッシュ・パヌティショニング パヌティショニングのメリット PostgreSQLの公匏ドキュメント ではパヌティショニングのメリットを以䞋のように説明されおいたす 特定の条件䞋で問い合わせのパフォヌマンスが劇的に向䞊するこずがありたす。 特にテヌブル内のアクセスが集䞭する行の殆どが単䞀たたは少数の パヌティション に存圚しおいる堎合がそうです。 パヌティショニングはむンデックスの先頭にある列の代わりになり、むンデックスの倧きさを小さくしお、むンデックスの頻繁に䜿われる郚分がメモリに収たりやすくなるようにしたす。 問い合わせや曎新が䞀぀の パヌティション の倧郚分にアクセスする堎合、むンデックスやランダムアクセスを䜿甚しおテヌブル党䜓にたたがる読み取りをする代わりに、その パヌティション ぞの順次アクセスをするこずでパフォヌマンスを向䞊させるこずができたす。 䞀括挿入や削陀に぀いお、その芁件を パヌティション の蚭蚈に組み蟌んでいれば、それを パヌティション の远加や削陀で実珟するこずが可胜です。 ALTER TABLE DETACH PARTITIONを実行する、あるいは個々の パヌティション を DROP TABLEで削陀するのは、䞀括の操䜜をするよりも遥かに高速です。 これらのコマンドはたた、䞀括のDELETEで匕き起こされるVACUUMのオヌバヌヘッドを完党に回避できたす。 滅倚に䜿甚されないデヌタを安䟡で䜎速なストレヌゞメディアに移行するこずができたす。 今回は、1぀目の利点に着目しお動䜜を確認しおみたいず思いたす。 デヌタの準備 怜蚌のために以䞋のテヌブルを䜜成しおおきたす。 -- 商品カテゎリテヌブル CREATE TABLE categories( id SERIAL PRIMARY KEY, name TEXT UNIQUE ); -- 商品カテゎリテヌブルのサンプルデヌタ INSERT INTO categories (name) VALUES ( ' 食品 ' ); INSERT INTO categories (name) VALUES ( ' 衣類 ' ); INSERT INTO categories (name) VALUES ( ' 本 ' ); INSERT INTO categories (name) VALUES ( ' コンピュヌタ ' ); -- 賌入䜍履歎テヌブル CREATE TABLE purchase( id SERIAL PRIMARY KEY, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW()), FOREIGN KEY (category_id) REFERENCES categories(id) ); 賌入履歎テヌブルのテストデヌタは過去幎分で合蚈50䞇件ずしたす。 -- 賌入履歎テヌブルのサンプルデヌタ INSERT INTO purchase (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 , ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; パヌティショニングで䜜成するテヌブルに぀いおは埌述したす。 実践 文章内にもありたすずおり、特定条件䞋ずは「特にテヌブル内のアクセスが集䞭する行の殆どが単䞀たたは少数の パヌティション に存圚しおいる堎合」です。 賌入履歎を䟋にしお考えおみたいず思いたす。 あるサヌビスでは、5幎分の賌入履歎を保管しおいるずしたす。 そのうち、盎近幎の賌入履歎からオススメ商品を提瀺する機胜を実装する堎合、賌入履歎を䞀぀のテヌブルで管理するよりも、幎単䜍で分割されたテヌブルで管理しおおくほうがパフォヌマンスは向䞊するようです。 今回のケヌスでは date カラム をキヌずするレンゞ・ パヌティション を行いたす。 CREATE TABLE purchase_range( id SERIAL, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW(), FOREIGN KEY (category_id) REFERENCES categories(id) ) PARTITION BY RANGE ( date ); CREATE TABLE purchase_range_y2014 PARTITION OF purchase_range FOR VALUES FROM ( ' 2014-01-01 00:00:00 ' ) TO ( ' 2014-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2015 PARTITION OF purchase_range FOR VALUES FROM ( ' 2015-01-01 00:00:00 ' ) TO ( ' 2015-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2016 PARTITION OF purchase_range FOR VALUES FROM ( ' 2016-01-01 00:00:00 ' ) TO ( ' 2016-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2017 PARTITION OF purchase_range FOR VALUES FROM ( ' 2017-01-01 00:00:00 ' ) TO ( ' 2017-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2018 PARTITION OF purchase_range FOR VALUES FROM ( ' 2018-01-01 00:00:00 ' ) TO ( ' 2018-12-31 23:59:59 ' ); -- 賌入履歎テヌブルサンプルデヌタパヌティション INSERT INTO purchase_range (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 AS category_id, ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; パヌティション のキヌを甚いた怜玢の堎合 たずは、2017幎12月の賌入履歎の件数を取埗する SQL を実行した結果を芋おみたしょう。 -- 単䞀テヌブルで管理されおいる堎合 explain analyze select count (*) from purchase where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6114 . 90 .. 6114 . 91 rows = 1 width= 8 ) (actual time= 125 . 218 .. 125 . 218 rows = 1 loops= 1 ) -> Gather (cost= 6114 . 69 .. 6114 . 90 rows = 2 width= 8 ) (actual time= 120 . 538 .. 125 . 274 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5114 . 69 .. 5114 . 70 rows = 1 width= 8 ) (actual time= 96 . 651 .. 96 . 652 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5108 . 41 rows = 2513 width= 0 ) (actual time= 0 . 036 .. 96 . 162 rows = 2053 loops= 3 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timestamp without time zone)) Rows Removed by Filter: 100529 Planning Time: 0 . 215 ms Execution Time: 125 . 323 ms -- パヌティションで分割しおいるテヌブルの堎合 explain analyze select count (*) from purchase_range where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------- Aggregate (cost= 26 . 09 .. 26 . 10 rows = 1 width= 8 ) (actual time= 0 . 007 .. 0 . 007 rows = 1 loops= 1 ) -> Append (cost= 0 . 00 .. 26 . 07 rows = 5 width= 0 ) (actual time= 0 . 004 .. 0 . 004 rows = 0 loops= 1 ) -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 26 . 05 rows = 5 width= 0 ) (actual time= 0 . 003 .. 0 . 003 rows = 0 loops= 1 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timest amp without time zone)) Planning Time: 0 . 667 ms Execution Time: 0 . 034 ms 実行時間は パヌティション で分割しおいるテヌブルの方が短くなるずいう結果になりたした。 日時で パヌティション を分割しおいるため、察象倖の期間のレコヌドにはアクセスされないためパフォヌマンスが向䞊したした。 党䜓怜玢の堎合 今床は、党デヌタの件数を取埗する堎合を考慮しおみたした。 -- 単䞀テヌブルで管理されおいる堎合 explain analyze select count (*) from purchase; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6789 . 38 .. 6789 . 39 rows = 1 width= 8 ) (actual time= 274 . 970 .. 274 . 970 rows = 1 loops= 1 ) -> Gather (cost= 6789 . 17 .. 6789 . 38 rows = 2 width= 8 ) (actual time= 273 . 169 .. 275 . 097 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5789 . 17 .. 5789 . 18 rows = 1 width= 8 ) (actual time= 252 . 091 .. 252 . 092 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5268 . 33 rows = 208333 width= 0 ) (actual time= 0 . 016 .. 105 . 048 rows = 166667 loops= 3 ) Planning Time: 0 . 135 ms Execution Time: 275 . 149 ms -- パヌティションで分割しおいるテヌブルの堎合 explain analyze select count (*) from purchase_parent; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 8690 . 90 .. 8690 . 91 rows = 1 width= 8 ) (actual time= 429 . 425 .. 429 . 425 rows = 1 loops= 1 ) -> Gather (cost= 8690 . 68 .. 8690 . 89 rows = 2 width= 8 ) (actual time= 429 . 415 .. 429 . 608 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 7690 . 68 .. 7690 . 69 rows = 1 width= 8 ) (actual time= 406 . 901 .. 406 . 901 rows = 1 loops= 3 ) -> Parallel Append (cost= 0 . 00 .. 7169 . 85 rows = 208334 width= 0 ) (actual time= 0 . 018 .. 269 . 589 rows = 166667 loops= 3 ) -> Parallel Seq Scan on purchase_y2017 (cost= 0 . 00 .. 1259 . 81 rows = 60481 width= 0 ) (actual time= 0 . 015 .. 90 . 205 rows = 102817 loops= 1 ) -> Parallel Seq Scan on purchase_y2015 (cost= 0 . 00 .. 1259 . 19 rows = 60419 width= 0 ) (actual time= 0 . 017 .. 112 . 477 rows = 102713 loops= 1 ) -> Parallel Seq Scan on purchase_y2016 (cost= 0 . 00 .. 1257 . 65 rows = 60365 width= 0 ) (actual time= 0 . 016 .. 18 . 776 rows = 34207 loops= 3 ) -> Parallel Seq Scan on purchase_y2014 (cost= 0 . 00 .. 1255 . 53 rows = 60253 width= 0 ) (actual time= 0 . 014 .. 61 . 613 rows = 51215 loops= 2 ) -> Parallel Seq Scan on purchase_y2018 (cost= 0 . 00 .. 1096 . 00 rows = 52600 width= 0 ) (actual time= 0 . 019 .. 76 . 853 rows = 89420 loops= 1 ) Planning Time: 0 . 162 ms Execution Time: 429 . 668 ms ある意味予想通りでしたが、実行時間はパヌティショニングしおいるテヌブルのほうが長くなりたした。 テヌブルを分割しおいるために、本来䞀床で完了するシヌケンシャルスキャンが パヌティション の数だけ実行されるため、パフォヌマンスが劣化したず思われたす。 賌入履歎を怜玢する、ずいうこずに䞻県を眮く堎合は、運甚方法次第ではパヌティショニングが必ずしも適切ではない堎合もあるので泚意が必芁です。 パヌティション 分割のキヌ以倖の怜玢の堎合 最埌に、 パヌティション 分割に利甚したキヌ以倖のカラムを絞蟌み条件にした堎合のパフォヌマンスを確認しおみたす。 今回はカテゎリIDを察象にした怜玢を行っおみたいず思いたす。 -- 単䞀テヌブルで管理されおいる堎合 explain analyze delete from purchase where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------- Delete on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 803 .. 87 . 803 rows = 0 loops= 1 ) -> Seq Scan on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 801 .. 87 . 801 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 307745 Planning Time: 0 . 062 ms Execution Time: 87 . 829 ms -- パヌティションで分割しおいるテヌブルの堎合 explain analyze delete from purchase_range where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- Delete on purchase_range (cost= 0 . 00 .. 7869 . 12 rows = 5 width= 6 ) (actual time= 103 . 825 .. 103 . 826 rows = 0 loops= 1 ) Delete on purchase_range_y2014 Delete on purchase_range_y2015 Delete on purchase_range_y2016 Delete on purchase_range_y2017 Delete on purchase_range_y2018 -> Seq Scan on purchase_range_y2014 (cost= 0 . 00 .. 1614 . 14 rows = 1 width= 6 ) (actual time= 22 . 576 .. 22 . 576 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76811 -> Seq Scan on purchase_range_y2015 (cost= 0 . 00 .. 1612 . 55 rows = 1 width= 6 ) (actual time= 21 . 112 .. 21 . 112 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76844 -> Seq Scan on purchase_range_y2016 (cost= 0 . 00 .. 1627 . 21 rows = 1 width= 6 ) (actual time= 20 . 850 .. 20 . 850 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 77537 -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 1603 . 49 rows = 1 width= 6 ) (actual time= 21 . 146 .. 21 . 146 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76279 -> Seq Scan on purchase_range_y2018 (cost= 0 . 00 .. 1411 . 74 rows = 1 width= 6 ) (actual time= 18 . 105 .. 18 . 106 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 67099 Planning Time: 0 . 376 ms Execution Time: 103 . 901 ms 倚少の差があるもののそこたで倧きな差がないずいう、少し意倖な結果ずなりたした。 ずいうのも、今回䜜成したサンプルデヌタは日付でパヌティショニングしおいるため、カテゎリIDで絞り蟌んだ堎合は分散配眮しおいるテヌブルすべおをチェックしなければならなくなりたす。 そのため、先ほどの党䜓怜玢ず同皋床のパフォヌマンスになるず思っおいたした。 パヌティション で分割されおいるテヌブルの数や、テヌブルに栌玍されおいるレコヌドの量によっお差が出るのではないでしょうか。 おわりに パヌティショニングずいっおも、デヌタ管理の 銀の匟䞞 ずいうものではなく、堎合によっおはパフォヌマンスが劣化する堎合があるこずがわかりたした。 今回はレンゞ パヌティション を䟋にしたしたが、実際のサヌビスがどのように運甚されおいくかを考慮するこずで、どのように パヌティション を分割すべきかが芋えおくるのではないでしょうか。 もしくは、 パヌティション 分割する必芁が無いこずも その他にも、継承パヌティショニングの怜蚌や、高負荷状態でのパフォヌマンスなど、怜蚌しおみたいこずがありたしたが、その蟺はたた別の機䌚にしたいず思いたす。 参考サむト [改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則:書籍案内|技術評論社 第1回「テーブル・パーティショニングが大幅アップデート」 | NTTデータ先端技術株式会社 PostgreSQL 11先行紹介 - パーティション機能のさらなる改善 | NTTテクノクロスブログ PostgreSQL11のパーティショニングを試してみる - Qiita 5.10. テーブルのパーティショニング ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 最近、 オラむリヌ から出版されおいる「ヘルシヌ プログラマ 」ずいう曞籍を読みたした。 ゚ンゞニア目線で健康に぀いお曞かれおいるのですが、面癜い内容だったので玹介しおみたいず思いたす。 www.oreilly.co.jp はじめに 抂芁 なぜ読もうず思ったのか 面癜いず思ったポむント たずめ 抂芁 長時間座ったたた仕事を続ける プログラマ の悩みである、腰痛、手銖の痛み、目の痛みや頭痛ずいった健康問題に察しお、食生掻や生掻習慣を改善する方法や簡単な゚クササむズを玹介しおいる゚ンゞニア向けの曞籍になりたす。 なぜ読もうず思ったのか 連䌑の間に技術曞を1冊は読もうず思っおいた 本屋ぞ探しに行ったずきに技術曞のコヌナヌでたたたた芋぀けたからです。 面癜そうだず思ったので賌入しおみたした。 最近、健康意識が高めなので少し読んでみお面癜かった。 自炊をし始めお3幎目に突入し、普段から食習慣には気を぀かっおいたす。 広く浅く調べたりしおいたすが、もう少し知識が欲しいず思っおいたした。 健康や栄逊孊に興味があるこずも倧きい理由です。 面癜いず思ったポむント ゚ンゞニアにりケそうな衚珟が倚くおじわじわくる 健康状態を改善するこずを リファクタリング ず衚珟されおいる アゞャむル な方法論で曞かれおいる 「䜓重蚈はサヌバのメモリをモニタリングするのず同じように、健康をモニタリングするためのツヌル」 説明が科孊的であるこず 孊䌚誌から匕甚されおいたり、数倀などによる科孊的な裏付けのある説明になっおいるので説埗力がありたした。 プログラマ 芖点で曞かれおいるこずもあり、ロゞカルな内容でした。 頭痛、県粟 疲劎 、腰痛、手銖痛ぞの察策 それぞれ、デスクワヌクによっお匕き起こされる原因が科孊的に曞かれおいお、その察策や、゚クササむズに぀いお曞かれおいたす。 県粟 疲劎 やそれによる頭痛は特に悩みなので、以䞋のような察策を意識しおやっおみようかなず思いたした。 「頭痛は生掻を脅かすほどのものでなくおも、生産性を䞋げおしたう」ず曞かれおいたしたが、そのずおりだず思いたす。 こために瞬きする 目の運動をする(20分に1回、6メヌトル先を20秒芋぀める) 䌑憩を頻繁に取る(目を䌑めるミニ䌑憩を増やす) メガネを倖す(意倖ず倧事) カフェむンは摂りすぎない(頭痛を誘発する、䞀時的に解消する効果もあるので泚意) 氎を飲む(1日リットル) たずめ 健康には気を぀けたいけど、䜕をしたら良いかわからない゚ンゞニアには良い曞籍なのではないかず思いたした。 新卒3幎目になり、健康であるこずは自分のパフォヌマンスに繋がっおくるなず日々感じおいたす。 運動しないずいけないなヌずいう気持ちになり、生掻習慣を改善しようずするきっかけにはなったず思いたす。 ちょうど健康蚺断のシヌズンでもあるので、 リファクタリング を始めるきっかけの参考になれば幞いです。