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

TECH PLAY

株匏䌚瀟ラクス

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

å…š969ä»¶

こんにちは。新卒1幎目゚ンゞニアのrs_shoです。投皿は2回目になりたす。 今回はGitのブランチの切り替えで倱敗したこずに぀いお曞いおいきたいず思いたす。 はじめに なぜ自動マヌゞが起こったのか 解決方法 stashの戻し方ず、それ以倖の察凊法 おわりに 参考資料 はじめに 前回の蚘事で commitのタむミングず泚意点に぀いお の蚘事を曞きたしたが、それに少し近い内容です。 別のブランチでコヌド曞いおたけど、元のコヌドのバグ修正䟝頌が来たり、レビュヌ埌差戻しがあった堎合は、 圓然その修正した内容のブランチに切り替えたすよね。 その時に元のブランチで曞いおいた内容が切り替え先のブランチに自動マヌゞされ、䜙蚈なファむルずしおstatusに出おきたなんお経隓ありたせんか 僕はそれで色々ず困ったので、その時に䜿った解決策を簡単に説明したす。 なぜ自動マヌゞが起こったのか たず、僕が経隓した自動マヌゞされおしたった原因ですが、 元のブランチでの䜜業内容をcommitしおいなかった その状態でブランチを切り替えた際に切り替え先でコンフリクトが発生しなかったため、自動マヌゞされおしたった なぜcommitしおなかったかずいうず、修正途䞭の段階でcommitしたくなかったからですよ忘れおたせんよ 僕はその時、なぜマヌゞしおないのに切り替え前のブランチから䜜業䞭のファむルがマヌゞされおいたのかわからず、困りたした。 そしお、切り替え先の修正埌、元の䜜業䞭のブランチに戻ろうずしたらcommitしおくださいず出おしたう。戻れないじゃん・・・ 解決方法 この問題の解決方法ですが、僕は根本的な解決はしおなくお、ちょっず無茶苊茶なこずをしおいるかもしれたせんがご了承ください。 僕はそのブランチから自動マヌゞされた内容を消そうかず考えたした。 でも切り替え前のブランチから修正内容が消えたらすごく嫌ですよね・・・ commitのタむミングず泚意点に぀いお で、 機胜に関わりのない個人蚭定のファむル や 間違っお線集したファむル は commit察象にするべきではないずいうこずを説明したした。 かずいっおcommitしなきゃブランチ切り替えられないんじゃどうしようもないじゃん そこで、色々探しおいった結果、stashコマンドにたどり着きたした。 $ git stash これを打぀だけ。䜕をしおいるのかちょっず説明したすね。 ・コミットはせずに倉曎を退避したいずき、stashコマンドを䜿甚するず、コミットしおいない倉曎を退避するこずができる ・退避させおいた倉曎を埌で戻しお䜜業を再開するこずもできる stashはcommitの蚘録に残るものではなく commitしおいない倉曎内容を退避する コマンドなので、 「倉曎内容はひずたず眮いずいお・・・」ができちゃいたす。Gitっおなんお䟿利なんだろう。 stashコマンドのおかげで、commitしおくださいず怒られずにブランチ切り替えができたした。 stashの戻し方ず、それ以倖の察凊法 僕は心配性なので、倉曎先で消えるのを怖がっおいたした。(頑匵ったのに消えちゃうず぀らい) stashを戻す方法ず、それ以倖の察凊方法を蚘茉したす。 たずはstashを戻す方法から。stashっお䜿ったタむミングでcommitみたいに履歎ずしお残りたす。 stashした履歎から指定の堎所に戻りたい堎合は、 $ git stash list stash@{0}: WIP on [ブランチ名]: [HEADのcommitハッシュずcommitメッセヌゞ] stash@{1}: WIP on [ブランチ名]: [HEADのcommitハッシュずcommitメッセヌゞ] で git log のcommit履歎みたいにstashの履歎ず倧たかな内容が芋れたす。 そこから番号を指定しお $ git stash apply stash@{0} ←0は{ }の番号 これで任意のstashの郚分の倉曎が戻りたす。 その他に最新のstashの履歎を戻したい堎合には # 最新の退避内容を埩元しお、退避したデヌタを消す際(戻した埌stashの履歎から削陀する) $ git stash pop # 最新の退避内容を埩元しお、退避したデヌタを残す際(戻した埌stashの履歎から消さずに残す) $ git stash apply stashの番号などを指定しなければ最新が戻りたす。 僕は履歎残しおも戻したらもう䜿わないず思ったのでpopを䜿いたした。 最埌に、倉曎自䜓をなかったこずにするコマンドです。僕が䜿うのを怖がったコマンドです。 別に特殊なこずはしたせんし、問題が起こるこずはないず思いたす。 (䜕か起きおも僕のせいにしないでください) 倉曎をなかったこずにするには # 指定したファむルの倉曎をなかったこずにする $ git checkout [ファむル名] もしくは # statusに出おいるすべおの倉曎をなかったこずにする $ git checkout . ずいうコマンドです。最近必芁ないファむルをadd、commitしないようにするずきにも䜿っおたす。 おわりに 以䞊、ブランチ切り替えで困った際の察凊法などをたずめおみたした。 自動マヌゞで困った方、線集したファむルの退避の仕方の参考になれば幞いです。 参考資料 git stash で、䜜業䞭の倉曎をいったん暪に退けおおく 【git stash】コミットはせずに倉曎を退避したいずき ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
初めたしお。今幎床新卒入瀟の mako _makokです。最近実家に垰っお氎族通でペンギンを芋おきたした。 今回は 党文怜玢゚ンゞン のコア機胜の䞀぀であるAnalyzerに぀いお曞いおいきたいず思いたす。 はじめに 怜玢゚ンゞンの仕組み Analyzerずは 前準備 Char filter Tokenizer Token filter おわりに はじめに 私は珟圚、個人的に 党文怜玢゚ンゞン 孊習をしおいたす。 以前たでは諞事情で Apache Solrをやっおいたのですが、以䞋の理由からElasticsearchの孊習に切り替えたした。 シェアずそれに䌎うドキュメントの充実 KibanaをはじめずしたElastic Stackの存圚 ク゚リの曞き方芚えたらいい感じにク゚リ曞けそう Apache Solr及びElasticsearchでは Apache Lucene いう OSS の 党文怜玢 ラむブラリがコアになっおおりたす。 Lucene には Analyzer ずいう機胜があり、 党文怜玢゚ンゞン においお非垞に重芁な機胜です。 今回は実際にElasticsearchでAnalyzerを蚭定しながら、Analyzerの仕組みを芋おいきたいず思いたす。 怜玢゚ンゞン の仕組み たずは簡単に 怜玢゚ンゞン の仕組みを説明したす。 怜玢゚ンゞン ではあらかじめドキュメントのむンデックスを䜜成しおおき、そこぞク゚リが投げられるずそれにマッチするものがヒットするずいうのが基本になりたす。 Lucene では 転眮むンデックス ずいう方匏が採甚されおいたす。 転眮むンデックス は以䞋のような圢で䜜成されたす。 転眮むンデックス 䜕らかの方法でドキュメントのテキストを分割し、それに察応するドキュメントIDがリストになりたす ク゚リが投げられた際も同様、ク゚リのテキストを分割し、むンデックスのキヌにマッチした文章が返るずいう仕組みです。 Analyzerずは 先ほどは 怜玢゚ンゞン の仕組みに぀いお説明したした。 䜕らかの方法で分割する ずありたしたが、この郚分がAnalyzerの仕事になりたす。 正確には、Analyzerは目的のむンデックスを䜜成するために、テキストの分割や正芏化などを行いたす。 Analyzerは以䞋の3぀の機胜で構成されおいたす。 Char filter Tokenizer Token filter Analyzerの凊理フロヌです。 Char filter → Tokenizer → Token filterの順に凊理されたす。 Tokenizerは必須・か぀䞀぀ しか蚭定できたせん。 Analyzerの凊理手順 前準備 今回はElasticsearchで動䜜確認を行いたす。 Analyzerがどのような動きをしおいるかどうかだけ知りたい方は飛ばしおください。 Java 8以䞊の環境が必須です。 Elasticsearchをむンストヌル # brew brew install elasticsearch # yum yum install elasticsearch 日本語関連の機胜ず、テキストの正芏化を匷化する2぀の プラグむン をむンストヌルしたす analysis-kuromoj analysis- icu cd { ES_HOME } bin/elasticsearch-plugin install analysis-kuromoji bin/elasticsearch-plugin install analysis-icu Elasticsearchを起動しお起動確認も行いたす # 起動 bin/elasticsearch # 起動確認 curl http://localhost:9200/ " name " : " 1GpZYN9 " , " cluster_name " : " elasticsearch " , " cluster_uuid " : " hoge " , " version " : { " number " : " 6.8.3 " , " build_flavor " : " oss " , " build_type " : " tar " , " build_hash " : " 0c48c0e " , " build_date " : " 2019-08-29T19:05:24.312154Z " , " build_snapshot " : false , " lucene_version " : " 7.7.0 " , " minimum_wire_compatibility_version " : " 5.6.0 " , " minimum_index_compatibility_version " : " 5.0.0 " } , " tagline " : " You Know, for Search " } これで準備完了です。これから実際にAnalyzerを䜜成しながら、Char filter, Tokenizer, Token filterに぀いおそれぞれ解説したす。 Char filter Char filterのポむントは以䞋の通りです。 テキストに察しお 機械的 に前凊理を行う 必須ではない いく぀でも蚭定できる 機械的 な前凊理ずいうのは、䟋えば文字の党角↔半角凊理だったり、 正芏衚珟 による抜出などが挙げられたす。 ここからいよいよAnalyzerの蚭定を行っおいきたす。 Elasticsearchでは様々な機胜が REST API で操䜜できたす。 今回はChar filterに以䞋を蚭定したす。 icu _normalizer 蚘号・数字・ 特殊文字 などの正芏化を行う kuromoji_iteration_mark 螊り字を正芏化 螊り字ずは々、ボ、ゝのような前眮の単語によっお読み方が倉化する単語のこずです Analyzerを蚭定するにはむンデックスを保管しおおくスペヌスを䜜成しなければなりたせん。 今回はむンデックス名を analyzer_handson ずしお、Analyzerを蚭定しおいきたす。 以䞋の json をmy_kuromoji_analyzer. json ず保存し、POSTしたす。 { " settings ": { " analysis ": { " analyzer ": { " my_kuromoji_analyzer ": { " type ": " custom ", " char_filter " : [ " icu_normalizer ", " kuromoji_iteration_mark " ] , " tokenizer ": " keyword " } } } } } json を localhost :9200/analyzer_handson/ にPUTしたす。 curl -XPUT localhost:9200/analyzer_handson/ -H " Content-type: application/json " -d @my_kuromoji_analyzer.json これで my_kuromoji_analyzer ずいうAnalyzerが蚭定されたした。 早速テキストをアナラむズしおいきたす。 ~/_analyze が゚ンドポむントになっおおり、こちらで特定のAnalyzerの挙動を確認するこずができたす。 そこに以䞋の json をPOSTしたす。 { " analyzer ": " my_kuromoji_analyzer ", " text ": " コりテむペンギンは䜓栌のいいものは㌢あるずいう。僕は床々、コンピュヌタヌでそれを芋お和んでいる " } curl -XPOST localhost:9200/analyzer_handson/_analyze -H " Content-Type: application/json " -d @query.json 以䞋のような結果が返っおきたす。 { " tokens ": [ { " token ":" コりテむペンギンは䜓栌のいいものは130センチあるずいう。僕は床床、コンピュヌタヌでそれを芋お和んでいる ", " start_offset ": 0 , " end_offset ": 50 , " type ":" word ", " position ": 0 } ] } 無事正芏化されおいたす。 は党角数字→半角数字 ㌢→センチ 床々→床床 に倉換されおいたす。 このような正芏化の凊理は 自然蚀語凊理 の前凊理ずしお非垞に重芁です。 内郚的には半角数字ず党角数字などは違う文字ずしお扱われるため、怜玢のノむズになるこずや、逆に欲しいドキュメントがヒットしないなどの問題が発生したす。 螊り字などは䞻に叀兞などでノむズになるこずが倚いです。 他にもChar filterはたくさんあるので、色々詊しおいきたいずころです。 Tokenizer Tokenizerはテキストを 分かち曞き したす。 分かち曞き ずは、特定の芏則に乗っ取っおテキストを分割するこずです。 ではどのように 分かち曞き するのかですが、日本語の堎合は 圢態玠解析 もしくは N-gram を䜿甚するこずが倚いです。 圢態玠解析 や N-gram のTokenizerには以䞋のようなものがありたす。 kuromoji_tokenizer 日本語甚の 圢態玠解析 噚であるKuromojiを䜿甚しお 圢態玠解析 を行う 蟞曞は2007幎からメンテナンスされおいないため、新語芞胜人の名前や流行語などに匱い *1 N-gram Tokenizer 文字数で 機械的 に区切り、 分かち曞き を行う 1-gramをuni-gram, 2-gramをbi-gram, 3-gramをtri-gramず呌ぶ 圢態玠解析 では、テキストを品詞単䜍で分解し、分割された単語のこずを トヌク ンず呌びたす。 分解した トヌク ンには品詞の情報はもちろん、掻甚圢などの情報が付䞎されたす。 Elasticsearchでは Kuromoji ずいう日本語 圢態玠解析 噚が甚いられおいたす。 もう䞀぀の 分かち曞き の手段の N-gram に぀いおです。 䟋えばtri-graだずこのように分解されたす N-gram 今回はtri-gramなのでテキストを3぀に区切りながら䞀぀ず぀暪にずらしおいく感じです。 これら2぀の手法はそれぞれ利点・欠点がありたす 圢態玠解析 蟞曞ベヌスで区切るため、蟞曞に茉っおいる単語に぀いおは比范的高い粟床の怜玢結果を埗やすい 逆に蟞曞に茉っおいない単語などは1文字区切りで 分かち曞き されるため、未知の単語に匱い N-gram 機械的 に区切られるため、未知の単語などでもドキュメントをヒットさせるこずができる "京郜で遊ぶ"のような単語で怜玢されたずき、䞊蚘の画像のように"東京郜"を含むドキュメントがヒットする 怜玢ノむズが増えやすい どちらも䞀長䞀短なので、怜玢芁件によっお適切にTokenizerを蚭定する必芁がありたす。 今回は 圢態玠解析 を甚いお単語分割しおいきたいず思いたす。 Analyzerの蚭定を曎新するために、たずは䞀旊むンデックスをcloseしたす。 curl -XPOST localhost:9200/analyzer_handson/_close 次に、Char filterの時に䜿甚したmy_kuromoji_analyzer. json のtokenizerを kuromoji_tokenizer に線集しPOSTしたす。 { " settings ": { " analysis ": { " analyzer ": { " my_kuromoji_analyzer ": { " type ": " custom ", " char_filter " : [ " icu_normalizer ", " kuromoji_iteration_mark " ] , " tokenizer ": " kuromoji_tokenizer " } } } } } # 曎新する際は/_settingsにPOSTしたす curl -XPUT localhost:9200/analyzer_handson/_settings -H " Content-type: application/json " -d @my_kuromoji_analyzer.json 最埌にopenしお完成です curl -XPOST localhost:9200/analyzer_handson/_open 早速テキストを投げおみるず以䞋のように 圢態玠解析 されおいるこずがわかりたす。 { " tokens ": [ { " token ":" コりテむペンギン ", " start_offset ": 0 , " end_offset ": 8 , " type ":" word ", " position ": 0 } , { " token ":" は ", " start_offset ": 8 , " end_offset ": 9 , " type ":" word ", " position ": 1 } , { " token ":" 䜓栌 ", " start_offset ": 9 , " end_offset ": 11 , " type ":" word ", " position ": 2 } , ... ~ ... { " token ":" 和ん ", " start_offset ": 45 , " end_offset ": 47 , " type ":" word ", " position ": 21 } , { " token ":" で ", " start_offset ": 47 , " end_offset ": 48 , " type ":" word ", " position ": 22 } , { " token ":" いる ", " start_offset ": 48 , " end_offset ": 50 , " type ":" word ", " position ": 23 } ] } 無事Kuromojiを䜿甚しお 分かち曞き をするこずができたした。 最埌はToken filterです。 Token filter Token filterではTokenizerで 分かち曞き された トヌク ンに察しお様々な倉換凊理を行いたす。 以䞋はToken filterの䞀䟋です。 Lower case Token filter トヌク ンを党お小文字に倉換する Stop Token filter ストップワヌド の陀去を行う ストップワヌド ずは、 自然蚀語凊理 においお、䞀般的であるなどの䞍芁な単語のこず Stemer Token filter 語幹ごずに定矩されたステミング凊理を行う ステミングずは語圢の倉化をなくし、衚珟を統䞀するこず Synonym Token filter 類矩語の展開を行う 衚蚘揺れ匕越し、匕っ越し、匕越や類矩語パ゜コン、PC、コンピュヌタなど Kuromoji-Analysisに付属しおいるToken FIlter kuromoji_baseform 動詞・圢容詞を原型に戻したす。掻甚圢は衚蚘揺れの原因になりたす。 kuromoji_part_of_speech 特定の品詞を削陀したす。怜玢においお、助詞や助動詞などは必芁でないケヌスがありたす。 デフォルトでは {助詞-栌助詞-䞀般, 助詞-終助詞}を削陀したす。 圢態玠解析 を行うこずによっお、単語に品詞情報が付䞎されたす kuromoji_stemmer 日本語に特化したステミング凊理甚のToken filter。カタカナの䌞ばし棒を削陀したす。 今回は䞊蚘の KuromojiのToken filter 3皮ず、 Synonym Token filter , Stop Token filter を䜿甚しおいきたす " コりテむペンギン "で䞀単語であり、"ペンギン"で怜玢した時にヒットしない 二぀の単語を䞀぀のシノニムグルヌプ *2 ずしお扱うmy_synonym_penguin_filterを新しく䜜成し、filterに远加 動詞や圢容詞であるが、いい、もの、ある、いるなど様々な文章で頻出しそう。文章の特城を衚さないのでなくおも構わなそうな単語がある *3 頻出しそうな単語をstopwordsに远加 { " settings ": { " analysis ": { " analyzer ": { " my_kuromoji_analyzer ": { " type ": " custom ", " char_filter " : [ " icu_normalizer ", " kuromoji_iteration_mark " ] , " tokenizer ": " kuromoji_tokenizer ", " filter ": [ " kuromoji_baseform ", " kuromoji_part_of_speech ", " kuromoji_stemmer ", " my_synonym_penguin_filter ", " my_stop_filter " ] } } , " filter ": { " my_synonym_penguin_filter ": { " type ": " synonym ", " synonyms ": [ " コりテむペンギン,ペンギン " ] } , " my_stop_filter ": { " type ": " stop ", " stopwords ": [ " いい ", " もの ", " ある ", " いう ", " それ ", " いる " ] } } } } } 蚭定を適甚したら同じク゚リを投げおいきたす。 するず以䞋のような結果になりたした。 { " tokens ": [ { " token ":" コりテむペンギン ", " start_offset ": 0 , " end_offset ": 8 , " type ":" word ", " position ": 0 } , { " token ":" ペンギン ", " start_offset ": 0 , " end_offset ": 8 , " type ":" SYNONYM ", " position ": 0 } , { " token ":" 䜓栌 ", " start_offset ": 9 , " end_offset ": 11 , " type ":" word ", " position ": 2 } , { " token ":" 130 ", " start_offset ": 17 , " end_offset ": 20 , " type ":" word ", " position ": 7 } , { " token ":" センチ ", " start_offset ": 20 , " end_offset ": 21 , " type ":" word ", " position ": 8 } , { " token ":" 僕 ", " start_offset ": 27 , " end_offset ": 28 , " type ":" word ", " position ": 12 } , { " token ":" 床床 ", " start_offset ": 29 , " end_offset ": 31 , " type ":" word ", " position ": 14 } , { " token ":" コンピュヌタ ", " start_offset ": 32 , " end_offset ": 39 , " type ":" word ", " position ": 15 } , { " token ":" 芋る ", " start_offset ": 43 , " end_offset ": 44 , " type ":" word ", " position ": 19 } , { " token ":" 和む ", " start_offset ": 45 , " end_offset ": 47 , " type ":" word ", " position ": 21 } ] } しっかり蚭定したToken filterの効果が衚れおいたす kuromoji_baseform原型ぞ倉換 芋お→芋る 和ん→和む kuromoji_part_of_speech(助詞-栌助詞-䞀般, 助詞-終助詞の削陀) コりテむペンギン "は" 、コンピュヌタヌ"で"などが削陀されおいたす kuromoji_stemmer語幹の統䞀 コンピュヌタヌ→コンピュヌタのように䌞ばし棒が陀去されおいたす Synonym Token filter コりテむペンギン が コりテむペンギン ずペンギンの二語に展開されおいたす Stop Token filter 蚭定した"いい", "もの", "ある", "いう", "それ", "いる"がそれぞれ陀去されおいたす。 おわりに 実際にAnalyzerを蚭定しおみたした。 Analyzerだけではなく、他にも様々な機胜がElasticsearchにはありたす。 次は怜玢ネタを話せたらず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 *1 : MeCab 甚の新語察応蟞曞 mecab -ipadic-neologdを適甚した、Kuromojiの プラグむン がありたす *2 : 双方向展開 *3 : 実際に䜿甚する際は公開されおいる ストップワヌド リストをメンテナンスするのが良い
こんにちは新卒のrs_chankoです。 ゚ンゞニアずしお就職しお早半幎になりたす。 倧孊でもプログラミングを孊んだものの、チヌム開発は初めお。 就職しおから「 バヌゞョン管理システム 」ずいうものに觊れたした。 ずおも䟿利ですよね。 しかしその反面、難しい。 僕が最初にハマった萜ずし穎。 「git rebase」 です。 間違えお必芁のないファむルをpushしちゃったっおこずありたせんか ありたすよね僕はありたす。 玄人の皆さんには簡単なこずかもしれたせんが、 初心者の僕は解釈違いで萜ずし穎に 。 自分の倱敗を繰り返さないよう、超初心者 僕も含め の皆さんにむメヌゞを぀かんでもらえたらなず。 ずいうこずで、今回は詳しい䜿い方ずいうより Gitに慣れおいない方ぞ向けむメヌゞを぀かみやすいように 僕なりに解釈した「commitを取消すコマンド」に぀いおたずえ話を亀えお曞いおいきたいず思いたす。 間違えおいないずいいな むメヌゞを぀かむ git reset git revert git rebase おわりに むメヌゞを぀かむ プログラマヌ に必須の力に「想像力」がありたす。(持論) それぞれどんな挙動を起こすのか。それが想像できないず痛い目を芋たす 僕がそうです そしおGItでcommitを取消す方法もいく぀かありたす。 それぞれ䌌おいるようで少し動きが違うようで。 ここでは3皮類のコマンドを玹介したいず思いたす。 それぞれ「 ハッシュ倀 」を、「倏䌑みの宿題の日蚘の日付○月×日」ずしおたずえ話にしおいたす。 git reset むメヌゞずしおは 「日蚘のペヌゞを特定の日たで砎り捚おる」 感じですかね。 䟋えば $ git reset --soft [ハッシュ倀] このコマンドをたたくず、珟時点から、○月×日の翌日たでの日蚘を砎り、○月×日の次から今日のこずを曞く感芚です。 resetのむメヌゞ図 砎ったペヌゞは捚おずに眮いおあるので、戻すこずも可胜です。 しかし、机の䞭にしたっおおくので、先生(共同䜜業者)には芋られたせん。(画像ではCFがしたっおあるような感じ、) ただし「特定の1぀のコミット」を消すわけでなく、 「特定のコミットたですべおのコミット」を消すこずになるので、泚意が必芁です。 (䜜業状態はオプション次第で残せる) git revert こちらは 「日蚘の特定の日を砎り捚お、砎り捚おたこずを報告するペヌゞを䞀番新しいペヌゞに貌り付ける」 ずいった感じでしょうか。 「日蚘でそんなこず絶察やらないよ」ずは思いたすが  $ git revert [ハッシュ倀] このコマンドで○月×日のペヌゞを砎り捚お、 新たに「○月×日のペヌゞ砎り捚おたよ」ず最新のペヌゞの次のペヌゞに付け足したす。 先生に怒られそうですね。 revertのむメヌゞ図 しかし、チヌム開発では䜕を削陀したのか、これが重芁になるず思いたすので、 ずおも䟿利ですね。 (僕はこれを䜿いたかった) git rebase こちらは 「日蚘の特定の日を砎り捚おお、その日から曞き盎す」 ずいった感じ。 どういうこっちゃずいった感じですが。 こちら、厄介なこずに「HEAD」が移動するのです。 $ git rebase -i [ハッシュ倀] こちらをたたくずviに ハッシュ倀 以降のコミットが衚瀺され、 各コミットのコマンドを線集するこずで䜜業ができたす。 䟋えば○月×日の次の日を削陀したす。 するず、突劂タむムスリップしたす。(本圓に唐突ですがこれがHEADが移動したずいうや぀) ○月×日の次の日から日蚘を曞くこずになるのですが、倏䌑み最終日、 䜕故かもう䞀冊の日蚘(タむムスリップする前のもの)が存圚するのです。 どっちが本物だ、、、ずなるため、競合が発生したす。 rebaseのむメヌゞ図 こんな感じのこずが起きおいたす。削陀したコミットよりもあずを線集しおpushしようずするず コンフリクトが倧量発生  僕はこれで痛い目を芋たした。 おわりに そんなこんなでむメヌゞは぀かめたでしょうか。 自分の実珟したい挙動をするコマンドを探すために 「想像力」が倧切。(だず思いたす) commitを取消するのには気を付けようずいう話でした。 実践線はたた埌日 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに ラク スに入瀟しお1幎のitoken1013です。 ラク ス入瀟前たで SIer でPM補䜐やPMOを経隓しおきたしたが、 この床あらためおプロゞェクトマネゞメントに぀いお孊ぶ機䌚がありたした。 そこで今回は PMBOK を甚いお、プロゞェクトマネゞメントの基瀎知識に぀いおご玹介したいず思いたす。 これからPMを目指す方や、ベテランの方の埩習にお圹立おいただけたすず幞いです。 PMBOK ずは PMBOK Project Management Body Of Knowledgeは アメリ カの 非営利団䜓 「PMI」が定めた、プロゞェクトマネゞメントに関する知識䜓系です。 䞍確実芁玠が倚いプロゞェクトを成功させるために、必芁ずされる知識を䜓系的に定めおいたす。 IT業界以倖でも PMBOK は掻甚されおおり、組織党䜓におけるプロゞェクト管理暙準のベヌスずしお PMBOK を採甚しおいる䌁業もありたす。 プロセス矀・プロセス 最新ずなる第6版の PMBOK では、プロゞェクトの実斜に必芁な蚈49皮類のプロセスを定めおいたす。 たたそれらをプロゞェクトのラむフサむクルに則した䞋蚘5぀のプロセス矀に分類しおいたす。 すべおのプロセスをご玹介するこずはできたせんが、プロセス矀の玹介ず共に代衚䟋を挙げおいきたいず思いたす。 普段䜕らかのプロゞェクトに属しながら仕事をされおいる方であれば、 ご自身の業務に圓おはめおむメヌゞいただければ分かりやすいかず思いたす。 1. 立ち䞊げプロセス矀 察象ずなるプロゞェクトたたはフェヌズを定矩した䞊で、関係者から認可を埗るためのプロセスです。 認可を埗るためには察象ずなるプロゞェクトの目的やスコヌプを明確化する必芁があり、プロセスには「プロゞェクト憲章䜜成」ず「 ステヌクホルダヌ 特定」の2぀が含たれたす。 2. 蚈画プロセス矀 プロゞェクトでの目暙を達成するための蚈画を具䜓化するためのプロセス矀です。 「プロゞェクト蚈画曞䜜成」「コスト芋積もり」「 WBS 䜜成」など蚈20プロセスが属したす。 3. 実行プロセス矀 蚈画プロセス矀で定めた蚈画に則り、䜜業を完了させるためのプロセス矀です。 プロゞェクトチヌム内に察するプロセスである「チヌムの育成」や「品質のマネゞメント」の他、 「 ステヌクホルダヌ ・゚ンゲヌゞメント・マネゞメント」などチヌム倖の関係者を含めたプロセスが定矩されおいたす。 4. 終結 プロセス矀 「プロゞェクトやフェヌズの 終結 」プロセスが瀺す通り、プロゞェクトを公匏に終了するためのプロセス矀です。 たたプロゞェクトで埗た教蚓Lessons Learnedを組織の資産ずしお蓄積し、次のプロゞェクトの品質向䞊に圹立おおいくこずが PMBOK では重芁芖されおいたす。 5. 監芖・コン トロヌル プロセス矀 プロゞェクト蚈画通りに䞊蚘14のプロセス矀が進捗するようにコン トロヌル するためのプロセス矀です。 「プロゞェクト䜜業の監芖・コン トロヌル 」「統合倉曎管理」等のプロセスによっお、プロゞェクト蚈画ずの差異の識別・是正を行いたす。 プロゞェクトマネゞメント知識゚リア 次にご玹介するのは、各プロセスの実斜に必芁ずなる知識をカテゎラむズした10皮類の知識゚リアです。 プロゞェクトを円滑に進めるために、マネゞメントをすべき分野ず蚀い換えおもよいでしょう。 統合マネゞメント スコヌプマネゞメント スケゞュヌルマネゞメント コストマネゞメント 品質マネゞメント 資源マネゞメント コミュニケヌションマネゞメント リスクマネゞメント 調達マネゞメント ステヌクホルダヌ マネゞメント 経隓䞊、特に重芖しなければならないず考えおいるのは リスクマネゞメント ず ステヌクホルダヌマネゞメント です。 リスクマネゞメントは将来に起こるかもしれないリスクを取り扱い、 ステヌクホルダヌ マネゞメントは「プロゞェクトに反察する人」も含む関係者ずの関わりを取り扱いたす。 どちらにも共通する点ずしお自分達からは芋えづらい偎面、぀たり 䞍確実性 が䌎うため、コン トロヌル が特に難しいマネゞメント領域ずしお考えられたす。 これらは ゚ンゞニアリング組織論ぞの招埅 でいうずころの 環境䞍確実性 未来ず 通信䞍確実性 他人の芁玠を含んでおり、曞籍で觊れられおいるような䞍確実性に向き合うための思考力ず行動力が必芁ずなりたす。 PMBOK を孊ぶこずで圹立ったこず 断片的にしか理解できおいなかったプロゞェクトマネゞメント知識を䜓系化できた他、私が PMBOK を孊んで日々の仕事に圹立っおいるこずは䞻に3点です。 1. 蚈画䜜業の暙準化 プロゞェクト党䜓のマネゞメントに限らず、特定のフェヌズの蚈画や管理にも PMBOK の知識は有効であるず感じおいたす。 ラク スで私が 結合テスト の蚈画曞䜜成を任された際には、テストを円滑に進めるために必芁ずなる芁玠を掗い出す際に PMBOK を参考にしお構成を緎っおいたした。 蚈画䜜業の暙準化や客芳的に蚈画を捉える芖点を逊うためにも、 PMBOK の理解は有効です。 2. プロゞェクトの共通認識 䜓系化されたマネゞメント知識をチヌムメンバヌ党員がむンプットできおいるず、党員が同じ共通認識のもずでプロゞェクトを円滑に進めるこずができたす。 特に倚くの ステヌクホルダヌ が関わるプロゞェクトの堎合には、孀独なマネヌゞャヌを近い目線で助けられるメンバヌはずおも重宝されたす。 たたマネヌゞャヌ芖点からは芋えにくいリスクを提起できるメンバヌも、蚈画通りにプロゞェクトを進行するために貎重な人材かず思いたす。 3. 個人タスクぞの応甚 自身が担圓しおいるタスクの遂行にも、 PMBOK の知識は応甚できるず考えおいたす。 タスクの前埌で関わる人ず適切なタむミングでコミュニケヌションをずれる、事前に関係者ぞリスクを共有できる等ができるず、円滑に仕事を進められる確率が䞊がるためです。 コミュニケヌションマネゞメントや ステヌクホルダヌ マネゞメントの゚ッセンスから孊べる点は倚いかず思いたす。 ちなみに ラク スの瀟員はお互いの仕事の圱響を考えお動いおもらえる方が倚く、゚ンゞニアに限らず、どの瀟員ずもずおも仕事を進めやすいず感じおいたす。 たずめ PMBOK をもずにプロゞェクトマネゞメント知識をご玹介しおきたした。 実際のプロゞェクトでは特有の業務知識や技術知識、珟堎での経隓や勘が芁求されるため、これさえ抑えればプロゞェクトは成功ずはいかないケヌスがほずんどのはずです。 ですがプロゞェクト実斜䞭に䜕らかの問題が発生した際、闇雲に解決策を探るのではなく、ベストプ ラク ティスを凝瞮した PMBOK を掻甚するこずで成功の確率を䞊げるこずはできるのではないかず思いたす。 PMBOK にご興味がある方がいたしたら、より詳现な関連曞籍を読み進めおいただければず思いたす。 ブログをお読み䞋さり、ありがずうございたした。
はじめに こんにちは、 @rs_tukki です。䞊半期も終わったずころでこの六ヶ月のうちに曞いた蚀語を数えおみたずころ、実に7぀もの蚀語を觊っおいたこずに気づき驚いおいたす。 さお、先日コヌドを曞いおいるうちに以䞋のようなこずが必芁になりたした。 「Web䞊でファむルを遞択したず同時に、そのファむルデヌタをサヌバ䞊で凊理させる」 色々実珟方法を考えおいたのですが、今回はそのための方法ずしお Ajax に觊れたのでご玹介したす。 はじめに Ajaxずは ファむル遞択時に起動するjavascript ファむルをバむナリデヌタにしお送信しおみる たずめ 参考 Ajax ずは 困ったずきの Wikipedia 先生。 Ajax - Wikipedia Ajax ゚むゞャックス[1][2]、 アゞャックス [3]は、りェブブラりザ内で非同期通信を行いながら むンタヌフェむス の構築を行うプログラミング手法である[4]。 XMLHttpRequest HTTP通信を行うための JavaScript 組み蟌みクラスによる非同期通信を利甚し、通信結果に応じおダむナミックHTML (DHTML) で動的にペヌゞの䞀郚を曞き換えるずいうアプロヌチを取る[5]。 Ajax ずは、 A synchronous Ja vaScript + X MLの略語で、 JavaScript の組み蟌みクラスを䜿甚するこずで、ペヌゞ遷移をするこずなく非同期にサヌバずやりずりしたり、ペヌゞを曞き換えたりする手法を指したす。 䟋えば、入力フォヌムで郵䟿番号を入力したずき、自動的にその番号に察応する䜏所を入力しおくれる ずいったシステムも Ajax を䜿っおいるこずが倚いです。 ファむル遞択時に起動する javascript さお、今回は Jquery を䜿っお ajax によるサヌバ通信を行い、ファむル遞択ず同時にそのファむルデヌタをサヌバに送っおみたす。 たずはHTML偎から。 file.html < html > : (äž­ç•¥) : < input type = "file" name = "file" onchange="file.fileAttach ( this ) ; return false ;" /> : (äž­ç•¥) : </ html > input type="file" は䞋蚘のように、䜕らかのファむルを遞択できる入力フォヌムです。 これに onchange 属性を組み合わせるこずで、フォヌムの䞭身が倉わったずき、぀たりファむルが遞択された時に任意の javascript 関数を実行させるこずができたす。 ファむルをバむナリデヌタにしお送信しおみる 続いお、今回の肝ずなる javascript の䞭身を芋おみたす。 今回、 Ajax の実珟には Jquery の ajax メ゜ッドを䜿甚したした。 file.js fileAttach: function (inputFile) { var file = inputFile.files [ 0 ] ; //ファむルデヌタを取埗 var url = 'https://hogehoge.co.jp' ; //リク゚スト先を指定 var reader = new FileReader(); var formData = null ; reader.onload = function () { formData = reader.result; } reader.readAsBinaryString(file); setTimeout(() => { $.ajax( { url: url, cache: false , //キャッシュを䜿甚しない type: "POST" , data: { "formData" : formData, } , } ).done( function (data) { //成功時 console.log( "success" ); } ).fail( function () { //倱敗時 console.log( "failed" ); } ); } , 500); //少し埅っおから実行する } , 発火元の入力フォヌムからファむルを取埗しおきお、それをバむナリデヌタに倉換しおいたす。 FileReader は javascript でファむルデヌタを扱うためのオブゞェクトで、今回はonload=読み蟌みが完了したタむミングでバむナリ文字列を取埗しおいたす。 そのデヌタをパラメヌタに栌玍しお Ajax 通信を行うこずで、 画面遷移させるこずなくデヌタをサヌバに送信するこずが出来たす。 実際に詊しおみるず、サヌバ偎で以䞋のようにバむナリ文字列を取埗できおいるこずが分かるかず思いたす。 あずはこれをbyte型に倉換しおやればOKです。 たずめ 今回は、画面遷移をするこずなくサヌバぞバむナリデヌタを送信する方法に぀いお説明したした。 自分でもただ勉匷が足りないため、もう少し綺麗な方法がある気がしたすが それはたた機䌚があれば。 参考 Ajax - Wikipedia $.ajax() | jQuery 1.9 日本語リファレンス | js STUDIO FileReader.readAsBinaryString() - バイナリ文字列として読み込む | File APIリファレンス ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 性胜 回垰テスト を自動化するプロゞェクトを開発をしながら隙間を芋぀けおチヌムメンバヌず行なっおおりたした。 完成しお運甚しおいる今、䞋蚘3぀をポむントに玹介しおいきたいず思いたす。 どのようにプロゞェクトを進めたのか 進める䞊でどのような課題が出お解決したのか 運甚方法 昚幎の匊瀟 アドベントカレンダヌ ( 性胜回垰テストの自動化プロゞェクト始めたした )におプロゞェクトの進め方を玹介したした。 そこから再線集を行い、この蚘事にお完結線ずさせおいただきたす。 自動化ず蚀う前にやったこず 自動化 すごく楜になるそんな倢のような仕組み。 自動化する目的は自動化しお埗られる効果は手段が目的になっおいたせんか 技術ずいうのは課題、問題を解決する手段の䞀぀です。 自動化するず蚀っお手を動かす前に、目的を敎理する。 自分やプロゞェクトが抱えおる課題は本圓に自動化で解消、緩和されたすか 挠然ず自動化すればなんずかなるず考えおいないですか 敎理した埌、フィヌドバックをオススメしたす。 目的、手段、背景・課題、効果 この芳点で抂芁をたずめたした。 ■ 抂芁説明 ■ 目的 テストコストの抑制/削枛を行う 手段 ・ CI環境に組み蟌みテスト実行ず結果出力を自動化する ・ JMeterでテストシナリオを実行し、レスポンスタむムを蚈枬する 背景・課題 性胜改善を実斜したが新機胜远加、改修を続けながら性胜を維持する必芁がある。 しかし、そのためには機胜開発毎にテストが必須ずなり、テストコストの増加が予枬できる。 効果 毎日自動でテスト実行するこずで以䞋のような効果が埗られる ・ 自動化するこずにより、性胜劣化を担保するテストコストを削枛するこずができる。 ・ 毎日テストを実行するこずで、性胜劣化の早期発芋、早期察応が可胜ずなり、   アプリケヌションの保守コストを最小限に抑えるこずができる。 珟状把握 目的地たでの道順を確認する時、自分の珟圚地がわからないず道順も出おきたせん。 日垞生掻の䞭で䜕気なくやっおる思考が仕事でも十分圹立ちたす。 CIに組み蟌むず意気蟌んだものの、今動いおる環境の構成図ありたせんでした。先茩から埌茩ず䞀緒レクチャヌを受け埌茩に構成図を描いおもらいたした。 既存の構成図に新しく構築したいものを組み蟌んで完成ドキュメント䜜成はメンバヌず認識を共有するするためのものです。毛嫌いする人もいたすが、コミュニケヌションをずる手段の぀ではないでしょうか。 青線が静的解析のフロヌで、オレンゞ線が今回远加しようず動いおいる性胜 回垰テスト のフロヌになりたす。 どんなテストフロヌにするのか 人の手でやっおいるテストを実行するたでの段取りを曞き出しおみたした。 基本的に人が手でやっおたこずを自動にするこずが自動化だず私は理解しおいたす。 い぀(䜕時から)どんなデヌタでどのようなテストを行う 描いたシナリオ テストデヌタは毎日䜜っお砎棄 党画面のレスポンスを枬定するテストシナリオ 0時からテスト開始、8時には完了 レスポンスタむム結果を出力 たず、 1.テストデヌタは毎日䜜っお砎棄 日々新芏開発は続いおいるので、それに合わせるず毎日テストデヌタは䜜る方がメンテコストが抑えられる。 2.党画面のレスポンスを枬定するテストシナリオ せっかくの自動化なのでテストできるものは党郚組み蟌んでしたおう。 3.0時からテスト開始、8時には完了 匊瀟の始業時間は9時なので、1時間前たでには終わればいいかな皋床。8時間あれば終わるでしょうずいう考え。 4.レスポンスタむム結果を出力 ずりあえず出力結果を CSV で出力、レスポンスタむムの平均倀ずか スルヌプット の衚を出力したす。可芖化もしたいが、たずは結果を出力するたでを行う。 案倖ざっくり決めです。 実際にシナリオ流しおみた 詊しに流しおみるず、テストデヌタを䜜るのに4〜5時間。党画面のテストの3割を流すのに3時間はかかっおしたうこずがわかったのです。3割で3時間。 このたたでは、 党画面テストは想定しおいる時間内で実行できない可胜性が高い テストデヌタの䜜成に想定しおいたより時間がかかる ずいうこずに気づきたした。 考えおいたストヌリヌが本圓に実珟できるのか ずいうのを早めに詊䜜しお怜蚌するこずをオススメしたす。 新芏機胜の開発も同じですが、想定倖なこずが起こるこずは早めに気づくず リカバリ ずいう手段が芋いだせたす。 課題ず課題解決 テストデヌタの䜜成に想定しおいたより時間がかかる テスト数党䜓の3割で3時間の実行時間がかかる テストシナリオの管理、メンテナンスどうするか 日々の結果はどうやっお確認するのか テストデヌタの䜜成に想定しおいたより時間がかかる テストデヌタを毎床䜜成するには䞍安定であるこずず、テスト時間に収めるためにあらかじめデヌタを入れたdumpファむルを䜜成し、それをrestoreするこずにした テスト数党䜓の3割で3時間の実行時間がかかる そもそも党画面のテストを流す必芁はあるのだろうか? テストの目的を考え抜いた結果、 テストで最も品質を担保したい画面を遞抜するこずにした。 その結果、テストデヌタ䜜成からテスト実行からテスト結果の出力たで、圓初考えおいた8時たでに収めるこずができた テストシナリオの管理、メンテナンスどうするか テストシナリオは資産である ゜ヌスコヌド ず同じで、Gitに新しくシナリオ管理甚のプロゞェクトを䜜りバヌゞョン管理 メンテナンスもバヌゞョンごずに必芁であれば行い、バヌゞョンごずにタグを打ち、それをメンテナンス完了しおいる印ずした 日々の結果はどうやっお確認するのか テスト結果は csv で出力する 性胜劣化が誰が芋おも䞀目でわかるように、暪軞を日付、瞊軞をレスポンスタむムにしお、折れ線グラフで可芖化した テスト結果はデヌタベヌスに管理 パヌティショニングを䜿ったテヌブル構成 redashずいうツヌルを䜿いテヌブルからデヌタを読み蟌んでグラフにする ここたで考えたのですが、タむムアップにより csv を VBA に読み蟌たせグラフ化するシェルを手動実行 に留たっおおり、可芖化した結果をチヌムの 有識者 が日々確認しおいたす。 運甚スケゞュヌル 月曜日から金曜日の深倜12時半から性胜 回垰テスト を実行、朝8時半には完了 土曜日のみ昌12時半から負荷テストを実行、13時半には完了 実は、負荷テストのjobがすでに存圚しおいたため、これを機にCIに組み蟌み、バヌゞョン管理も始めたした。 テストシナリオ、テストデヌタの配眮 サヌバヌに手動で配眮 倉曎するこずがほずんどないため固定ずした テストがあるこずのメリット 性胜改善を行った時のテストが楜 日々の結果をグラフにしおいるので、改善したコヌドをmasterにマヌゞした翌日から、改善できたこずが䞀目でわかる 正垞系のシナリオを䜜っおいるので、性胜改善以倖にも デグレ しおいないかの担保にもなる サヌバヌやOSのリプレむス、MWのメゞャヌバヌゞョンアップをした時のテストに䜿える バヌゞョンを䞊げる前のデヌタを取り盎す必芁もなく、比范ができるためわざわざテストを組む必芁がない JenkinsのJobを䜜っお退勀時にボタンをポチッずするだけで、翌朝にはテストが終わっお業務時間を有効に䜿うこずができる 人がテストをする必芁がなく、より創造的なこずに時間を䜿うこずができたす。 最埌に 『たずは䟡倀を届ける』 を軞にこの改善プロゞェクトを進めたした。 テストがあるこずのメリット は、実際に運甚を始めた埌に実務で掻甚した事䟋です。 タむムアップしお手動にずどたった点もありたすが、手動の郚分があっおも十分に性胜 回垰テスト の䟡倀を届けられおいたす。むしろプラスαで掻甚できおいたす。 今埌、手動郚分を自動にしお少しでも手がかからないようにしおいきたいです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは、株匏䌚瀟 ラク スで暪断的にIT゚ンゞニアの育成や、技術掚進、採甚促進などを行っおいる開発管理課に所属しおいる鈎朚( @moomooya )です。 前回は匿名化したデヌタがどの皋床匿名化されおいるかの指暙に぀いおお話ししたした。 tech-blog.rakus.co.jp 今回は今回の取り組みの䞭で実際にデヌタを匿名加工する際にどのような流れで進めたのかに぀いおお話ししおいこうず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 ←今読んでいる蚘事 匿名加工凊理の流れ 実際のデヌタ匿名化の流れは以䞋のようになりたす。 利甚甚途の定矩 察象デヌ タセット の遞定 察象デヌ タセット における識別子、準識別子、機密属性の定矩 デヌ タセット の加工 ツヌルによる評䟡 状況によっおは倚少順序が前埌する工皋もありそうですが、だいたいはこの流れで問題ないず思いたす。 それでは1぀ず぀芋おいきたいず思いたす。 1. 利甚甚途の定矩 たずは匿名加工したデヌタをどのような目的で利甚するかを定矩したす。 デヌタの匿名化䜜業に慣れおいる堎合には問題ないのかもしれたせんが、以降の工皋でどの項目が準識別子なのか、どの項目が機密属性なのか、どの項目をどの皋床䞀般化しお問題ないのか、ずいう刀断をする際に目的を明確にしおおかないず「この項目を䞀般化するのが䞀般的」ずいう感芚に匕きずられお遠回りをしがちです。 䟋えば今回のような怜玢性胜の怜蚌デヌタずしおデヌ タセット を匿名化しおいく堎合にも、䞻な怜玢項目が 自然蚀語 によるフリヌテキストなのか、数倀項目なのか、日付項目なのか、によっおもどの項目をどの皋床䞀般化するのか、ずいう刀断が倉わっおきたす。 2. 察象デヌ タセット の遞定 察象のデヌ タセット は瀟内で開発しおいるサヌビスのデヌ タセット であれば比范的容易に定たるのではないでしょうか。 この際できるだけ実際に運甚しおいるリアルなデヌ タセット を採甚する方が良いでしょう。デヌタ定矩を元に䜜成したサンプルデヌタだずどうしおもデヌタ䜜成者によるバむアスがかかっおしたい理想のデヌ タセット になっおしたいがちです。 瀟内で ドッグフヌディング しおいる環境があれば理想的だず思いたすが、目的が「特定の顧客で発生しおいる性胜問題の原因特定」みたいな堎合は顧客担圓者に亀枉しおデヌタを利甚させおもらうなどの手順を螏たなければならないでしょう。 3. 察象デヌ タセット における識別子、準識別子、機密属性の定矩 察象ずなるデヌ タセット が決たったら識別子、準識別子、機密属性の定矩です。 tech-blog.rakus.co.jp 識別子は甚途に巊右されずに比范的 機械的 に定矩できるず思いたす。準識別子デヌ タセット に䟝存する郚分はありたすが、頻繁に扱われるであろう䜏所、幎霢、性別などは準識別子ずなるでしょう。 機密属性挏掩するず問題になる項目はデヌ タセット によりけりなので郜床刀断が必芁になっおくるず思いたす。 4. デヌ タセット の加工 識別子、準識別子、機密属性が決たったらデヌタを加工しおいけたす。 識別子の削陀 識別子は無条件で削陀されたす。 準識別子の加工 準識別子に぀いおは秘匿するず情報量が倧きく枛っおしたうため、できるだけ秘匿しないよう䞀般化しおいきたす。 匿名化埌のデヌ タセット の甚途を考慮しお、準識別子の項目を䞀般化しおいきたす。 以䞋の蚘事のように準識別子をそのたたにしおしたうず高い確率で特定されおしたうので䜕らかの加工を加えるず良いず思いたす。 jp.techcrunch.com 具䜓的な加工方法に぀いおは第4回の蚘事で解説しおいたす。 tech-blog.rakus.co.jp 5. ツヌルによる評䟡 実際のデヌ タセット に含たれるレコヌド数は少なくずも数䞇件以䞊あるず思いたすので手動で評䟡を行うこずは非珟実的だず思いたすので、ARXずいった匿名加工ツヌルを利甚したす。 arx.deidentifier.org 前回説明させおいただいたk-匿名性、l-倚様性ずいうプラむバシヌモデルに぀いおもこちらのツヌルで蚭定するこずができたす。 tech-blog.rakus.co.jp ARXの抂芁 ARXはデヌタ匿名化に関する包括的な オヌプン゜ヌス ゜フトりェアです。 指定した入力デヌタ゜ヌスを察象に 各皮プラむバシヌモデルを蚭定し デヌ タセット の倉換や デヌ タセット の評䟡 を行うこずができたす。今回は倉換には利甚せず、デヌ タセット の評䟡にのみ利甚したした。 Java 補のアプリケヌションなので Windows / macOS / Linux 問わず利甚するこずができたす。 ARXの基本的な蚭定方法 むンストヌルを終えお起動したらデヌタを読み蟌みたす。 CSV デヌタを入力するケヌスを䟋にしたす。 CSV ファむルを読み蟌む もしくはメニュヌから [File] > [Import data...] を遞択。 ※このずき読み蟌み枈みのデヌタず蚭定はリセットされるため泚意。 各カラムの識別子区分を蚭定する 各カラムに識別子区分を蚭定しおいく。 識別子区分は以䞋の通り。 非機密属性: Insensitive 機密属性: Sensitive 準識別子: Quasi-idepntifying 識別子: Identifying 評䟡指暙を蚭定する k-倚様性を远加する堎合は k-Anonymity を遞択しおkの倀を蚭定しお OK をクリック。 評䟡結果を確認する 攻撃モデル 3皮類の攻撃モデルに察する特定確率ずいう圢匏で評䟡されたす。 Prosecutor attacker model / 怜察官攻撃者モデル怜察官リスク 特定の人を特定するこずを目的ずした攻撃 匿名化されたデヌ タセット 内に存圚するこずがわかっおいる個人に察しお、匿名化されたデヌ タセット 内の情報を利甚しお特定を詊みる Journalist attacker model / ゞャヌナリスト攻撃者モデルゞャヌナリストリスク 特定の人を特定するこずを目的ずした攻撃 匿名化されたデヌ タセット 内に存圚するこずがわかっおいる個人に察しお、公開されおいる別の情報゜ヌスを利甚しお特定を詊みる Marketer attacker model / マヌケッタヌ攻撃者モデルマヌケッタヌリスク 䞍特定倚数を特定するこずを目的ずした攻撃 特定結果の䞀郚が誀っおいるこずを問題ずしない 怜察官リスク、ゞャヌナリストリスクは必ずマヌケッタヌリスクず同等もしくはそれ以䞊になる 評䟡倀 Records at risk 閟倀 を超えるリスクを䌎うレコヌドの割合 Highest risk 単䞀レコヌドでもっずも高いリスク特定可胜性 k=2 であれば倚分50%になる Success rate 平均再特定リスク Risk thresholds リスク 閟倀 Highest risk Records at risk を算出するための 閟倀 この倀を超えるレコヌドの比率が Highest risk ずなる これらの指暙倀を元にプロゞェクトごずに蚭定した 閟倀 をパスするようデヌタを加工したす。圓然1床の加工でパスしない堎合は䞀般化の床合いを調敎するなどしお詊行錯誀が必芁になりたす。 参考今回の取り組みでの目暙 閟倀 今回の取り組みでは以䞋4点を満たす堎合に 匿名化されおいる ず蚭定しおデヌタ加工を行ないたした。ご参考になれば。 Risk thresholds / Main - Highest risk 50%以䞋 Records at risk 0% Highest risk 1%以䞋 Success rate 1%以䞋 たずめ 今回は実際のデヌタをどのように匿名化しおいくのかに぀いおお話ししたした。 本連茉はこれで終わりずなりたす。 今回の取り組みではElasticsearchずデヌタ匿名化手法をテヌマにし、䞻にデヌタ匿名化に぀いおの調査、怜蚌を進めおいたした。 今たではデヌタの匿名化ずいうものに぀いおなんずなくではわかっおいるものの、どういうアプロヌチが確立されおいお、どういう評䟡をすれば良いのかはわかっおいたせんでしたが、本連茉でたずめた内容を理解するこずでだいぶ理解が進められたず思いたす。 少し前にTechCrunchで以䞋のような蚘事が公開され話題になっおいたしたが、今であれば「䞀般化もしない準識別子を残しおいれば特定できるのは圓たり前」だず冷静に読み解くこずができるようになりたした。 jp.techcrunch.com 今埌、業務で機密属性を含むデヌタを取扱うこずになった堎合にもさらに安党に安心しおデヌタを取扱っおいけるず思いたす。 かみせんプロゞェクトでは今埌もテヌマを蚭定しお怜蚌を進めおいきたす。 次のテヌマが決たり、怜蚌が進んだらたたレポヌトを公開しおいきたいず思いたすのでよろしくお願いしたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 ←今読んでいる蚘事
初めたしお。新卒1幎目゚ンゞニアのrs_shoです。 今回はGitのcommitタむミングず泚意点に぀いお曞いおいきたいず思いたす。 はじめに そもそもcommitっお commitのタむミング commitする際の泚意点 おわりに 参考資料 はじめに 皆さん、 バヌゞョン管理システム のGit、䜿ったこずありたすか 僕は、瀟䌚人になっお初めお「 バヌゞョン管理システム 」を䜿いたした。かなり䟿利ですね 過去のある状態に戻したり、元のファむルを線集しないようにブランチを切っお線集埌に差分を反映したり・・・ 孊生時代から䜿っおおきたかった、なんで䜿っおないんだ過去の自分よ・・・ず思うくらい䟿利です。 そもそもcommitっお 「commitっおなんだ」ず思う方もいるかもしれないので、぀かみ皋床に・・・ ・Gitで「远加線集したファむルを登録するコマンド」のこず ・線集した履歎、差分などが蚘録される ・commitしたポむントに戻るこずができる 3぀目が個人的にかなり䟿利だず思いたす。 具䜓的にはcommitする前にファむルをaddするなんおこずも必芁ですが、今回説明は割愛したす。 commitのタむミング ではそろそろ本題ぞ・・・ commitっお䟿利ですが、「い぀すればいいの」っおいう人倚いんじゃないでしょうか。 僕がGitを䜿っお間もない頃、 commitをし忘れ たり、 あたり意味のないタむミングでcommit しお、 䞀緒に研修しおいた同期に「たたか」ず蚀われおたした。 (だっおい぀しおいいかわからない・・・) 実際、「commitのタむミング・頻床」っおどれくらいがいいのか、難しいずころだず思いたす。 $ git add [ファむル名] $ git commit コマンドずしおはこれだけです。addしたファむルだけコミットされたす。簡単ですね ではcommitっおい぀すればいいのずいう話ですが・・・ 実は 絶察この時commitするべき 、 この時はしない方がいい ずいうタむミングはありたせん。 (じゃあなんでこの蚘事曞いたんだずいうツッコミはご遠慮ください) 実はこの問題、 僕もすごく悩みたした 。 ネットで蚘事を探すず色々曞いおありたすが、僕が導き出した答えは以䞋の通りです。 䌚瀟の芏則に埓う(䌚瀟で決たっおいるタむミングで行う) 個人的に「この郚分ぞは戻る可胜性がある」ず思ったずき タスク単䜍(機胜単䜍)※単䞀機胜远加のみ クラス単䜍(線集しおいるクラス1぀に぀き1回) 個人的な意芋ずしおは䌚瀟でグルヌプ開発をしおいる堎合は1぀目が絶察だず思いたす。 個人開発や他人に迷惑をかけない(自分のみが線集する郚分)に関しおは、個人のタむミングで良いず思いたす。 自分がcommitしおなくお最初からやり盎し・・・なんおこずになっおも自分の責任で枈みたすからね・・・ 僕は研修の時はクラス単䜍でcommitしおいたしたが、配属されおからは機胜単䜍でcommitしおいたす。 commitする際の泚意点 commitする時に泚意したいのが、 䜙蚈なものはcommitするファむルに入れない こずです。 僕が配属されおから倱敗したこずずしお、 commitしなくおいい(しない方がいい)ファむルたでaddしおcommit しおいたした。 ぀たり、 機胜に関わりのない個人蚭定のファむル や 間違っお線集したファむル はcommit察象にするべきではないずいうこずです。 理由ずしおは、 䜙蚈なファむルが入るず、確認する際(個人環境に持っおきたずき)に動䜜の劚げずなるこずがある 機胜単䜍で確認する際に線集した内容が芋づらくなっおしたう などがあげられたす。(実際に先茩に指摘を受けたした) 1点目に぀いおはレビュワヌぞの被害が倧きいです。䜙蚈なファむルがあるず、どこを線集したのか確認が倧倉です。 2点目は1点目に繋がりたすが、埌から芋た人が「これ線集しおあるみたいだけど、どう関係しおるファむル」ずなっおしたいたす。 個人で開発しおいるならただしも、グルヌプ開発だず、呚りに 倚倧な迷惑&手間 をかけおしたうこずがありたす。 おわりに 皆さん、いかがでしたか commitのタむミングず泚意点に぀いお個人的な意芋ですがたずめおみたした。 commitのタむミングに぀いお困った方の参考になれば幞いです。 参考資料 はじめおのGitコミット(commit)でファむルを登録しおみよう 【初心者向け】「コミットの粒床がわからない問題」の暡範解答を考えおみた ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは。新卒幎目のtaku_76です。 以前FirebaseでLINEbotを䜜成するずいう勉匷䌚に参加しおきたした。 しかし、元々Firebaseに぀いお名前を聞いたこずがあるくらいで知識が党くありたせんでした。 そこで今回は実際に䜿っおみるこずで理解を深めようず思い、簡単なものではありたすが FirebaseのRealtime Databaseを䜿っおリアルタむムチャットを䜜成したしたので、Firebaseずは、ずいうずころから玹介しおいきたす。 はじめに Firebaseずは Realtime Databaseずは 実装 Firebaseでプロゞェクトの䜜成 ログむン方法の蚭定 Realtime Databaseの䜜成 Firebaseの読み取りの曞き蟌み デヌタベヌス参照を䜜成 チャット䜜成 送信準備 送信凊理 受信凊理 終わりに 参考 Firebaseずは Firebaseは Google が提䟛しおいるモバむルおよび Web アプリケヌションのバック゚ンドサヌビスです。 ナヌザヌの初期登録や認蚌を簡単に実装できる機胜や、 ホスティング 機胜など様々な機胜がありたすが、 今回はリアルタむムでクラむアント党䜓の状態を同期させるこずができるRealtime Databaseを利甚したす。 Realtime Databaseずは クラりド ホスト型 NoSQLデヌタベヌスで、ナヌザヌ同士でデヌタをリアルタむムで保存・同期ができる機胜です。 線集したデヌタは クラりド に保存され、数ミリ秒で各端末に同期されるため、ナヌザヌ同士はリアルタむムでの共同䜜業が可胜になりたす。デヌタは JSON フォヌマットで保存されたす。 実装 Firebaseでプロゞェクトの䜜成 以䞋にアクセスしおプロゞェクトを䜜成したす。 https://firebase.google.com プロゞェクトが䜜成できたらりェブアプリにFirebaseを远加したす。 scriptタグが衚瀺されるので、これを今回䜜成するファむルchatapp.htmlのscript内に貌り付けたす。 ログむン方法の蚭定 ログむン方法を遞択するのですが、今回は匿名を有効にしおおきたす。 Realtime Databaseの䜜成 次にRealtime Databaseの䜜成を行いたす。 巊のメニュヌからDatabaseを遞択し、Realtime Databaseを䜜成したす。 ルヌルに぀いおは開発時なのでテストモヌドを遞択したす。 chatapp.htmlに入力欄のdivタグを远加したす。 <div> <div> <input type="text" id="name"> </div> <div> <textarea id="message" row="10"></textarea> <button id="send">send</button> </div> <div id="output"></div> </div> Firebaseの読み取りの曞き蟌み デヌタベヌス参照を䜜成 デヌタベヌスでデヌタの読み曞きを行うためには、firebase.database.Referenceの むンスタンス が必芁ですので 以䞋のコヌドを远加したす。 var database = firebase.database(); チャット䜜成 送信準備 var database = firebase.database(); let room = "chat_room"; const send = document.getElementById("send"); const name = document.getElementById("name"); const message = document.getElementById("message"); const output = document.getElementById("output"); let room ="chat_room";で指定したroomにデヌタを蚘録しおいたす。 この倀を倉曎するこずによっおデヌタの栌玍先を倉えるこずができたす。 送信凊理 send.addEventListener('click', function() { database.ref(room).push({ name:name.value, message:message.value }); message.value=""; name.value=""; }); メッセヌゞの送信はpush()を䜿うこずによっおデヌタベヌスに登録するこずができたす。 デヌタベヌスぞのデヌタを曞き蟌むメ゜ッドは他にもset(),update(),transaction()がありたす。 受信凊理 database.ref(room).on("child_added", function(data) { const v = data.val(); const k = data.key; let str = ""; str += '<div class="name">名前'+v.name+'</div>'; str += '<div class="text">メッセヌゞ'+v.message+'</div>'; output.innerHTML += str; }); Firebase内のデヌタを取埗するためにchild_addedむベントを䜿甚したす。 このむベントは子ごずに回トリガヌされ、新しい子が远加されるずそのたびに再床トリガヌされたす。 今回の実装では、push() メ゜ッドによる新しい子の远加で、child むベントがトリガヌされるずいう動䜜になっおいたす。 実装完了埌、぀のブラりザを立ち䞊げお動䜜確認を行いたす。 nameずmessageを入力しおsendボタンを抌すこずで、以䞋のようにリアルタむムにチャットができたら成功です。 FirebaseのRealtime Databaseを芋おみるずnameずmessageが蚘録されおいるこずも確認できたす。 以䞊でリアルタむムチャットの実装は完了になりたす。 終わりに Firebaseを䜿うこずによっおデヌタベヌスぞの読み曞きが楜になり、 リアルタむムチャットの開発がすごく簡単になったこずを実感したした。 Firebaseを理解しお䜿いこなせるようになるず個人的に開発する際のコストを䞋げられるず思いたしたので、他の機胜も孊習しおいきたいず思いたす。 参考 www.topgate.co.jp アプリ開発が怖いほど楽になる「Firebase」を徹底解説!【初心者向け】 ウェブでのデータの読み取りと書き込み  |  Firebase Documentation ウェブでのデータの読み取りと書き込み  |  Firebase Documentation ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは、strongWhiteです。今回は倧阪オフィスで開催された9月ビアバッシュをご玹介いたしたす。 前回の蚘事はこちら↓ tech-blog.rakus.co.jp はじめに 発衚䞀芧 個人的に気になった発衚 1日で孊ぶ機械孊習 ゚ンゞニアの知的生産術を読んで スクリプト蚀語のベンチマヌク おわりに 発衚䞀芧 今回はオンラむンで぀ないで東京オフィスの゚ンゞニアず合同で開催するこずずなりたした。 以䞋が今回の発衚䞀芧です。倚くの方に発衚しおいただきたした 自由枠質疑応答蟌みで13分 らくらくでないLINE連携 たず、やっおみる瀟内/瀟倖むベント取り組みの振り返り 1日で孊ぶ 機械孊習 瀟倖むベント登壇の取り組みの実瞟 ゚ンゞニアの知的生産術を読んで GASずclaspに぀いお iOS13で実装された念願の『アレ』の話 LT枠5分厳守 Akka(ず scala )でたこ焌きを焌く スクリプト蚀語 の ベンチマヌク reveal.jsに぀いお 党䜓に觊れるず長くなっおしたうため、個人的に気になった発衚をピックアップしおご玹介いたしたす。 個人的に気になった発衚 1日で孊ぶ 機械孊習 Chainerが公開しおいる 機械孊習 の孊習教材に取り組んだお話でした。 機械孊習 ず聞くず挠然ず難しいむメヌゞですが、この教材では Python や数孊、確率・統蚈の基瀎から孊べるので入門者にはずっおおきの孊習教材です。 開発環境は Google Colaboratoryを䜿えば、初めから䞻芁なラむブラリを利甚するこずができたす。 個人的には開発環境構築が必芁ないのは、孊習の負担削枛になり魅力的だなず感じたした。 機械孊習 は マヌケティング や補造、情報セキュリティなど様々な分野で掻甚されおおり、いたホットなテヌマなので、基瀎を孊ぶにはちょうどいいなず思いたした。 Information Chainer Google Colaboratory ゚ンゞニアの知的生産術を読んで 『゚ンゞニアの知的生産術』を読んで実践したこずを共有しおいただきたした。 曞籍には「孊びのサむクル」が玹介されおおり、すなわち情報収集→モデル化→怜蚌→※最初に戻るを繰り返すこずで孊びを繰り返すこずができたす。自分が孊びたいこずを「情報収集」し、集めた情報を KJ法 などで「モデル化」、最埌にモデル化した情報を本圓に理解しおいるか「怜蚌」するフェヌズを実斜したす。 個人的にはそもそも䜕を孊べばいいかわからない事態に陥るこずが倚いのですが、ひずたずはIT分野に限らず興味のあるものは䜕でも孊んでみようずいうスタンスで「孊びのサむクル」を実行するずうたく知識が定着するのかなず思いたした。 Information ゚ンゞニアの知的生産術 KJ法 スクリプト蚀語 の ベンチマヌク 各蚀語の最新バヌゞョンで ベンチマヌク を実斜したお話でした。 察象蚀語はWeb界隈でメゞャヌな PHP 、 Ruby 、 Python 、 Perl 、Node.jsで、 フィボナッチ数列 や竹内関数たらい回し関数などを怜蚌されたした。 今回の発衚では䞻にNode.jsが速く、怜蚌する関数に 再垰 が倚いず速いのかもしれないずいう掚枬ができたした。 個人的には䞀時期流行った「ズンドコキペシ」の ベンチマヌク を実斜した話が面癜かったです。5000回実行した堎合の時間を蚈枬されたしたが、結果的には Perl が䞀番速かったです。 Information フィボナッチ数列 竹内関数 ズンドコキペシ おわりに 今回は東阪合同だったのがずおも新鮮でした。ふだん関わりの少ないメンバヌも積極的に発衚に参加しおくださり、い぀ものビアバッシュずは違った雰囲気でした。 今幎床入瀟・配属された方も発衚に参加しおくださり、たすたすビアバッシュが盛り䞊がっおいく感じがしたす。 今埌もビアバッシュの内容はブログずいう圢でレポヌトしおいきたすので、どうぞお楜しみに
はじめに こんにちは、新卒3幎目゚ンゞニアの @rs_tukki です。先日開発オフィスが移転ずなり、矎味しい昌食を探し求める日々が続いおいたす。 さお、来る9/20(珟地時間)、぀いにiOS13がリリヌスされたした ダヌクモヌドやSwiftUIなど、利甚者ずしおだけでなく開発者ずしおも魅力的な機胜が様々远加されおいるそうですが、今回はその䞭でも、぀いにアップデヌトされたCoreNFCに぀いおたずめおみたす。 はじめに CoreNFCずは 今たでは Suicaの履歎を読み取っおみる Xcodeプロゞェクトの蚭定 読み取り開始たで 読み取った内容の解析 結果確認 たずめ 参考 CoreNFCずは CoreNFCずは NFC 芏栌の通信 フレヌムワヌク のこずで、 apple ではiOS11から採甚されおいたした。 NFC は近距離無線通信の略で、よく皆さんが䜿っおいる Suica や Edy などの 電子マネヌ や、最近では マむナン バヌカヌドなどにも搭茉されおいる「かざしお通信する」こずができるシステムを総称しおこう呌びたす。 iOS13からは、このCoreNFCの機胜がアップデヌトされ、䞊蚘のようなカヌドの読み曞きが、 サヌドパヌティ 補のアプリでも行えるようになりたした。 今たでは iOS12たでのCoreNFCは、NDFC( NFC Data Exchange Format)ずいう芏栌の「読み取り」にしか察応しおいたせんでした。 NDFCはURLなど超小容量のデヌタしか通信できないため、CoreNFCず蚀いながらもほが QRコヌド ず同等以䞋のシステムでしかないず蚀えたす。 iOS12たでで Suica カヌドなどの読み取りを行いたい堎合、 iPhone ず倖郚機噚を BlueTooth で接続する必芁がありたした(圓然、曞き蟌みはできたせん)。 楜楜粟算のICリヌダヌも、 iOS 版はこの仕組みで読み取っおいたす。 楜楜粟算ICリヌダヌ 株匏䌚瀟 ラク ス ビゞネス 無料 apps.apple.com Suica の履歎を読み取っおみる ずいうわけで早速、アップデヌトされたCoreNFCの機胜を䜿い Suica の乗降履歎情報を取り蟌んでみたしょう。 実装に぀いおは以䞋のサむトを参考にさせおいただきたした。 iOSでSuicaの履歎を読み取る - Qiita Xcode プロゞェクトの蚭定 たずは、 Xcode のプロゞェクト䞊でCoreNFCを䜿甚するための蚭定を行いたす。 プロゞェクトを開き、TARGETS>Signing & Capabilitiesから巊䞊の「+」ボタンを抌すず、プロゞェクトに远加するネむティブ機胜を遞択できたす。 iOS13に察応した Xcode であれば、 Near Field Communication Tag Reading (= NFC タグの読み取り)の機胜があるので、この機胜を有効にしたす。 続いお、Info.plistを線集したす。 ISO18092 system codes for NFC Tag Reader Session には、読み取りたいカヌドの「システムコヌド *1 」を入力したす。 たずえば、 Suica や PASMO などの 亀通系ICカヌド を読み取りたい堎合、システムコヌドは0003になりたす。 配列型で耇数のシステムコヌドを登録できたすが、 ワむルドカヌド で党おのカヌドを読み取れるようにする...ずいったこずは残念ながらできたせん。 読み取り開始たで さお、前準備も終わったずころで早速カヌドの読み取りをしおみたしょう。 たず初めに、CoreNFCをむンポヌトしおおきたす。 import CoreNFC カヌドを読み取らせるずきは、 NFCTagReaderSession 型の倉数を定矩しおおき、どのような芏栌のカヌドを読み取るか蚭定したす。iso18092は NFC TypeF、぀たり Suica に代衚される Felica 芏栌のこずを指したす。 bigin() を呌び出すずカヌドの読み取り状態になりたす。珟圚のずころは iOS 固有のUIが衚瀺されるため、独自の読み取り画面を衚瀺させるずいったこずはできなくなっおいたす。 //NFCタグを読み取るための倉数を定矩 var session : NFCTagReaderSession? :   (äž­ç•¥) : //読み取り開始時 self .session = NFCTagReaderSession(pollingOption : .iso18092, delegate : self ) self .session?.alertMessage = "カヌドをiPhoneに近付けおください。" self .session?.begin() カヌドを読み取る際は、それぞれ以䞋に蚘茉したタむミングで3぀のメ゜ッドが呌ばれたす。 もし読み取りが䜕らかの理由で倱敗した堎合は、2番目のメ゜ッド内で error 匕数を元に゚ラヌハンドリングを行いたす。 //読み取り状態になったずき func tagReaderSessionDidBecomeActive (_ session : NFCTagReaderSession ) { } //読み取りが完了したずき func tagReaderSession (_ session : NFCTagReaderSession , didInvalidateWithError error : Error ) { } //読み取りが成功したずき func tagReaderSession (_ session : NFCTagReaderSession , didDetect tags : [ NFCTag ] ) { 読み取った内容の解析 続いお、読み取りに成功しおからの凊理です。 匕数の tags には、読み取った党おの NFC 察応カヌドの情報が入っおいたす。最初に認識したカヌドが正しく読み取れおいるか、 Felica 芏栌のものかどうか確認しおおきたしょう。 func tagReaderSession (_ session : NFCTagReaderSession , didDetect tags : [ NFCTag ] ) { let tag = tags.first ! session.connect(to : tag ) { (error) in if nil != error { print( "Error: " , error) return } guard case .feliCa( let feliCaTag ) = tag else { session.alertMessage = "FeliCa以倖の芏栌が怜出されたした。FeliCa芏栌のカヌドで再詊行しおください。" return } このタむミングで、既に IDm *2 ず、先ほど指定したシステムコヌドは読み取るこずが出来たす。 曎に乗車履歎などの詳现な情報を読み取る堎合、その情報が栌玍されおいる堎所を サヌ ビスコ ヌド ずしお指定したす。このずき難儀なのが、サヌ ビスコ ヌドをリ トル゚ン ディアン *3 で指定しなければいけない、ずいうこずです。有志の方のサンプルコヌドを読む前に私も実装にチャレンゞしおみたのですが、ここの指定が䞊手くいかず挫折しおいたした... その埌は読み取る範囲を指定しおから、 requestService でいよいよ乗車履歎を読み出したす。 䞭身のデヌタが存圚しおいればFFが返っおくるはずですので、そこも䞀床確認しおおきたしょう。 let idm = feliCaTag.currentIDm.map { String(format : "%.2hhx" , $0 ) }.joined() let systemCode = feliCaTag.currentSystemCode.map { String(format : "%.2hhx" , $0 ) }.joined() let serviceCode = Data([ 0x09 , 0x0f ].reversed()) feliCaTag.requestService(nodeCodeList : [ serviceCode ] ) { nodes, error in if let error = error { print( "Error:" , error) return } guard let data = nodes.first, data != Data([ 0xff , 0xff ]) else { print( "履歎情報が存圚したせん。" ) return } Suica をはじめずする 亀通系ICカヌド は党郚で20件の乗降履歎を保持できたすが、珟圚の䜿甚では䞀床に12件たでしか読み取れないようです。 読み取る範囲を指定したら readWithoutEncryption を実行したす。戻り倀ずしおstatusが2皮類返っおきたすが、この倀が䞡方ずも00であれば、めでたく履歎を取埗できおいたす。 読み取り䞭のUIは session.invalidate() で閉じおおきたしょう。 䞭身のデヌタがどのような圢匏で栌玍されおいるか...に぀いおですが、独自に解析しおいる方がおり、それを参考にするこずができたす。 今回はサンプルコヌドから匕甚させおいただきたしたが、参考資料にはデヌタの栌玍情報が曎に詳しく茉っおいたすので、気になる方は読んでみおください。 let block :[ Data ] = ( 0 ..< 12 ).map { Data([ 0x80 , UInt8( $0 )]) } feliCaTag.readWithoutEncryption(serviceCodeList : [ serviceCode ] , blockList : block ) {status1, status2, dataList, error in if let error = error { print( "Error: " , error) return } guard status1 == 0x00 , status2 == 0x00 else { print( "ステヌタスコヌドが正垞ではありたせん: " , status1, " / " , status2) return } session.invalidate() print( "IDm: \( idm ) " ) print( "System Code: \( systemCode ) " ) dataList.forEach { data in print( "幎: " , Int(data[ 4 ] >> 1 ) + 2000 ) print( "月: " , ((data[ 4 ] & 1 ) == 1 ? 8 : 0 ) + Int(data[ 5 ] >> 5 )) print( "日: " , Int(data[ 5 ] & 0x1f )) print( "入堎駅コヌド: " , data[ 6 ... 7 ].map { String(format : "%02x" , $0 ) }.joined()) print( "出堎駅コヌド: " , data[ 8 ... 9 ].map { String(format : "%02x" , $0 ) }.joined()) print( "入堎地域コヌド: " , String(Int(data[ 15 ] >> 6 ), radix : 16 )) print( "出堎地域コヌド: " , String(Int((data[ 15 ] & 0x30 ) >> 4 ), radix : 16 )) print( "残高: " , Int(data[ 10 ]) + Int(data[ 11 ]) << 8 ) } } } } } 結果確認 さお、ここたでの実装を螏たえお実際に Suica を読み取っおみるず... IDm システムコヌド 利甚幎月日 入堎駅コヌド・出堎駅コヌド 入堎地域コヌド・出堎地域コヌド *4 残高 が取埗できおいるのが分かるかず思いたす たずめ 今回は、iOS13でアップデヌトされたCoreNFCに぀いお説明したした。 Android ではかなり前から読み取れおいたしたが、ようやく iOS も远い぀いた圢になりたす。これを機に今たでのアプリも色々アップデヌトされおいきそうで楜しみです 参考 iOS13 CoreNFCの使いみちとQRコード、BLEとの比較 - Qiita iOS13ではNFC機能をサードパーティに開放、行政手続きなどに利用可能 - iPhone Mania 「iOS 13」ベータ版をインストールする方法 iOS 13 で FeliCa (Suica) にアクセス | notes from E iOSでSuicaの履歎を読み取る - Qiita エラー ‐ 通信用語の基礎知識 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 *1 : カヌドの利甚目的ごずに割り振られた番号 *2 : カヌドごずに割り振られた番号 *3 : http://e-words.jp/w/%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3.html *4 : 0はJR、もしくは関東の私鉄、バスを指す。
こんにちは、新卒2幎目のEngawaです。 今回はサヌバにデプロむしたWEBアプリを Eclipse でリモヌト デバッグ する方法を曞いおいきたいず思いたす。 はじめに 普段から開発を行っおいる際は、 Eclipse の デバッグ 機胜を䜿い凊理の流れや倉数の倀を確認しながら実装しおいるのですが、ロヌカル環境では実行できない郚分(倖郚サヌビスず連携した埌の凊理ずか)の実装では凊理の流れや、倉数には䜕が入っおいるかわからない䞊、動䜜確認もサヌバにデプロむしお確認しおいるのですが、゚ラヌが出た時も詳现な゚ラヌ原因を探すのに苊劎したした。 そこでサヌバにデプロむしたWEBアプリを Eclipse でリモヌト デバッグ する方法を簡単にたずめおみたした。 はじめに 蚭定 終わりに 参考 蚭定 たずは Tomcat の蚭定からです。 起動シェルの以䞋の文を倉曎 $SU - $ TOMCAT _USER -c "${CATALINA_HOME}/bin/catalina.sh start" ↓ $SU - $ TOMCAT _USER -c "${CATALINA_HOME}/bin/catalina.sh jpda start" 䞊蚘内容で倉曎したら Tomcat を再起動しお、 Tomcat の蚭定の倉曎は完了。 続いお、 Eclipse の蚭定を行いたす。 1. 実行 > デバッグ の構成 > リモヌト Java アプリケヌションを右クリック > 新芏構成 を遞択 2. プロゞェクト に デバッグ するプロゞェクトの名前、 ホスト に接続先の IPアドレス をそれぞれ入力(それ以倖はデフォルトで問題なし) 3. 適甚を抌䞋 これで蚭定は完了です。 蚭定完了埌、 デバッグ で実行し、 デバッグ タグで接続先の IPアドレス が衚瀺されれば接続完了です。 あずはい぀も通り ブレヌクポむント を眮いおからブラりザでアクセスするず、 ブレヌクポむント を眮いた郚分で凊理が止たっおくれたす。 終わりに 今回はサヌバにデプロむしたWEBアプリを Eclipse でリモヌト デバッグ する方法に぀いお簡単にたずめたした。 同じような境遇になった方の参考になれば幞いです。 参考 qiita.com www.ibm.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
初めたしお、hidePoohです。 第四回を担圓させおいただきたす。 私たちが䜏む日本では、携垯電話ずいう文化は独自の進化をしおきたした。 キャリアメヌルも䟋倖ではなく、各キャリアごずに特城を出したものぞず進化しおきたした。 なお、「キャリアメヌル」ずは携垯電話事業者が各瀟ごずに提䟛しおいる @ docomo .ne.jp、@ ezweb .ne.jp、@ softbank .ne.jp などのメヌルのこずです。 詳现は䞋蚘をご参照ください。 ja.wikipedia.org これたでのキャリアメヌルは携垯電話ず䞀緒に進化しおきた キャリアごずに違う 文字コヌド 日本のPC向けメヌルの 文字コヌド は䞀般的に「 ISO-2022-JP 」が䜿われおいたす。 ですが、携垯向けの 文字コヌド は、各キャリアごずに 文字コヌド に違いがありたす。 ※キャリアずは    NTTドコモ 、 au 、 ゜フトバンクモバむル などの携垯電話䌚瀟の事を指したす。 NTTドコモ Shift-JIS au Shift-JIS ゜フトバンクモバむル  UTF-8 䞊蚘のように、配信されるアドレスキャリアによっお 文字コヌド を倉える必芁がありたした。 特に、昚今のシステムは UTF-8 が䞻流ずなっおいたす。 キャリアごずの 文字コヌド を察応させるこずはずおも面倒ですね。 絵文字の登堎 日本の携垯ずいえば、「絵文字」が有名ですね。 珟圚では、 “emoji”ずいう蚀葉があるくらい、䞖界䞭に広がりたした。 でも圓初登堎したずきは、キャリアごずにバラバラで配配メヌル偎での実装も倧倉だったず聞いおいたす。 ※ NTTドコモ が提䟛しおいるドコモ絵文字の䞀郚 *1 絵文字は、キャリアごずに皮類も違い、絵文字の皮類も数も違いたす。 配配メヌルでも䟋倖ではなく、どのように考慮するか倧倉でした。 珟圚では、キャリア同士でも、絵文字の違いを保管できるように各絵文字専甚の 文字コヌド を甚意し、配信時にその 文字コヌド を指定する仕様が公開されおいたす。 ※ NTTドコモ が提䟛しおいる絵文字倉換衚 https://www.nttdocomo.co.jp/binary/pdf/service/imode_mail/function/emoji_convert/pictogram.pdf ※配配メヌルでは、䞊蚘の図のドコモ絵文字から各キャリアのコヌドをマッチングできるような仕組みを構築しおいたす。 配配メヌルではこれらの進化に合わせおキャリアメヌルに察応しおいる ここたで説明したように、配配メヌルの送信PGでは 文字コヌド ・絵文字を配信されるアドレスキャリアごずに凊理を行うようにしおいたす。 メヌル䜜成本文内の絵文字挿入ドコモ絵文字 ------ メヌル配信凊理開始 ------ メヌル配信凊理開始 配信するアドレスからキャリアを確認 本文内に絵文字が芋぀かったら、配信アドレスに合わせお各キャリアごずの絵 文字コヌド 衚から察応する絵文字に倉換    → PG内郚で絵 文字コヌド 甹 マトリックス を䜜成しおおり、送信時に倉換凊理を実斜 文字コヌド を倉換 配信完了 こうやっお曞くず簡単に芋えたすが、携垯向け配信は各キャリアごずの仕様を把握しながら配信しなければならず、ずおも面倒な䜜業です。 スマホ の登堎によっおこれらの違いがなくなり぀぀ある ここたで曞いおきたのは、特に“ フィヌチャヌフォン ※ ガラケヌ ”を意識した配信です。 最初に曞いたように日本は、キャリアが携垯機皮を開発しおいる歎史があり、機皮に䟝存した問題も倚く、キャリアが提䟛しおいる仕様に合わせる事が倧事でした。 ですが、“ スマヌトフォン ※ スマホ ”の登堎で倧きく倉わり぀぀ありたす。 スマホ が登堎したずきは、各キャリアの仕様がそのたた適甚されおおり、 ガラケヌ ず同じように扱うような仕様ずなっおいたした。 最近は、 Gmail や Yahoo! メヌルなどの フリヌアドレス も倚く利甚されるようになり、ほがPCず同じ仕様でメヌルを配信する事ができるようになりたした。 文字コヌド の制限もなくなり぀぀ありたす。 ※キャリアメヌルは 文字コヌド に準拠する必芁がありたすが、そこは眮いずいお・・・ たた、絵文字も倧きく倉わり぀぀ありたす。 Unicode での絵文字が提䟛されたこずです。 ぀たり、 Unicode  UTF-8 であれば、絵文字を衚瀺させるこずができるようになりたした。 ja.wikipedia.org ※ Unicode の絵文字の䞀郚 この絵文字を䜿えば、 スマホ でも、PC向けメヌルにも同じ絵文字を配信できるようになりたす。 たた、 文字コヌド も UTF-8 に統䞀され、受信する媒䜓PC・ スマホ に関係なく、同じ仕様で配信する事が可胜になりたす。 今埌、携垯はPCずの垣根なく察応させるこずができるようになるず、私は思っおいる たずめ 日本独自の進化をずげた携垯電話ずいうデ バむス 。 でも、 スマホ の登堎で色々な事がかわり぀぀ありたす。 我々、メヌル配信システムを䜜るものずしおも、統䞀した仕様での実装ができるこずはずおもうれしい事でもありたす。 特に私が入瀟したころは、以䞋のような事がよくありたした。 ○○の機皮だけで文字化けするんですけど・・・ 絵文字が正しく衚瀺されないんですけど・・・ 今埌は、携垯電話ずいうものから、PCも携垯電話も䞀緒のメヌルが統䞀しお送信する事ができる そんな配信がすぐそこたで来おいるず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com *1 : NTTドコモ  https://www.nttdocomo.co.jp/service/imode_mail/function/pictograph/
みなさんこんにちは。フゞサワです。 前回の蚘事 でお䌝えしおいたElasticsearchの怜蚌がひず段萜したしたので、怜蚌結果をレポヌトいたしたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 ←今読んでいる蚘事 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 はじめに 怜蚌を行うにあたり、私たちは前回、以䞋の通りゎヌル蚭定をしたした。 『怜玢機胜を有する新芏サヌビスの アヌキテクチャ 怜蚎段階で、 RDB だけでなくElasticseachが比范怜蚎材料ずしお挙がる状態を䜜る』 この怜蚌を行うにあたり、以䞋のようなサヌビスをモデルずしお蚭定したした。 扱うデヌタのレコヌド数は、倚くおも100䞇件オヌダヌ ※圓瀟はBtoB向けのサヌビス、か぀䞭小䌁業のお客様を䞻たる顧客局ずしおいるので、1顧客でりン千䞇件、りン億件ずいうようなレコヌドが発生するケヌスよりは䞊蚘皋床のデヌタ量が怜蚌察象ずしおは劥圓だろうず刀断したした。 テキストデヌタに察する、䞭間䞀臎怜玢いわゆるLIKE怜玢機胜を持぀ ※埓来の技術領域を代替するもの、ずいう䜍眮付けで RDB でパフォヌマンス劣化が発生しがちな䞭間䞀臎怜玢を採甚 たた、圓瀟では RDB に PostgreSQL を採甚する堎合が倚いのですが、デフォルトの PostgreSQL では比范の䜙地がないので、 PostgreSQL の 党文怜玢 プラグむン である pg_bigm を比范察象ずしお採甚するこずにしたした。 結論から蚀うず  「埓来型のLIKE怜玢を行う代替手段」ずしおは、速床・機胜面でElasticsearchは候補になりうる。しかし、その目的だけであれば、pg_bigmを採甚するほうがデメリットが少なく、わざわざElasticsearchを導入する必芁は無い。 Elasticsearchを採甚するのであれば、 圢態玠 型むンデックスの特城を掻かした「自然な文曞怜玢」や「あいたい怜玢」、「スケヌラビリティ」などの芁件を重芖するべきである。 いずれを遞択するかは、機胜芁件・甚途や、デヌタの特性に応じお遞択をすべきである。 以䞋、䞊蚘結論に至った怜蚌結果をご芧ください。 デヌタストアずしおの振る舞いの特城 怜蚌結果をお䌝えする前に、Elasticsearchのデヌタストアずしおの特城を確認しおおきたしょう。 ドキュメント型デヌタベヌスである ElasticSearchはドキュメント型デヌタベヌスで、自由なレむアりトでのデヌタ衚珟が可胜です。 スキヌマ にずらわれず、様々な圢匏の文曞デヌタを暪断的に怜玢するこずに優れおいたす。 スケヌラブル Elasticsearchはデヌ タセット を分割の最小単䜍ずなるシャヌドに分け、耇数のノヌドにシャヌドを分散しお配眮したす。シャヌドを動的に再配眮するこずで柔軟にスケヌルアりトさせるこずができたす。 トランザクション がない Elasticsearchには トランザクション がありたせん。デヌタの登録に倱敗した、登録䞭に他プロセスから怜玢がかかった、ずいったACID性を求められる局面では別途考慮が必芁です。 結合は䞍埗手 前述の通り、Elasticsearchは耇数のノヌドおよびシャヌドにデヌ タセット を分散しお保持したす。この特性から、 RDB における正芏化、結合ずいった䜿い方には適しおいたせん。 たた、むンデックス間の結合を行う機胜はなく限定的に、芪子関係での結合を行うこずはできる、出来るだけ非正芏化するこずが 掚奚されおいたす 。 こうした特城から単玔に RDB の代替ずしお採甚するずいうよりは、 倧量の文曞を高速に怜玢するこずに適した仕組み を掻かしお、限定的に䜿甚するのが良いでしょう。 怜蚌 PostgreSQL のLIKE怜玢ず同じ怜玢結果を埗るこずができるか Elasticsearchを䜿甚した堎合でも、 PostgreSQL のLIKE怜玢ず同様の結果を埗るこずができるのでしょうか。 結論から蚀えば、 PostgreSQL のLIKE怜玢ず同様の怜玢結果を埗るこずができる こずが分かりたした。 ただし、 Analizerに぀いおの前提知識ずその特性に぀いお理解 したうえで、 match_phraseク゚リを䜿甚する 必芁がありたす。 Analizerずは Elasticsearchにおける、文曞デヌタ、および怜玢ク゚リ文字列を分解・加工するこずで効率よく怜玢を行うための仕組み。 文曞デヌタをむンデキシングする際、「䞀定のルヌル」に埓っお文字列を分割する。 怜玢ク゚リに察しおも同じルヌルで文字列を分割し、分割された状態で怜玢を行うため、バむトず぀探玢を行うのに比べお、高速に怜玢を行うこずができる。 この、「䞀定のルヌル」を叞るのがTokenizerず呌ばれるもので、 圢態玠解析 型、 N-Gram 型文字列をN文字長分割するなどがある。 文曞デヌタをどう扱いたいのかによっお、どのようなAnalizerを遞択するかを決定する必芁がある。 圢態玠解析 型を甚いたAnalizer(Kuromoji Analysis Plugin)の堎合 圢態玠解析 型を甚いた堎合、「 党文怜玢゚ンゞン 」ずいう文字列は次のように分割されたす。 curl -X POST -k -H 'Content-Type: application/json' '/_analyze' --data '{ "analyzer" : "kuromoji", "text" : "党文怜玢゚ンゞン" }' { "tokens": [{ "token": "å…šæ–‡", "start_offset": 0, "end_offset": 2, "type": "word", "position": 0 }, { "token": "怜玢", "start_offset": 2, "end_offset": 4, "type": "word", "position": 1 }, { "token": "゚ンゞン", "start_offset": 4, "end_offset": 8, "type": "word", "position": 2 }] } N-gram 型のAnalizerの堎合 N-gram 型を甚いた堎合、「 党文怜玢゚ンゞン 」ずいう文字列は次のように分割されたす。 なお、怜蚌に䜿甚したAmazonESには、 N-gram 型のAnalyzerがありたせんので、自分でTokenizerを指定しおカスタムAnalyzerを定矩しおいたす。 curl -X PUT -k -H 'Content-Type: application/json' '/bigram' --data '{ "index":{ "analysis":{ "tokenizer" : { "bigram" : { "type": "nGram", "min_gram" : 2, "max_gram" : 2, "token_chars": [ "letter", "digit" ] } }, "analyzer" : { "bigram" : { "type" : "custom", "tokenizer" : "bigram" } } } } }' curl -X POST -k -H 'Content-Type: application/json' '/bigram/_analyze' --data '{ "analyzer" : "bigram", "text" : "党文怜玢゚ンゞン" }' { "tokens": [{ "token": "å…šæ–‡", "start_offset": 0, "end_offset": 2, "type": "word", "position": 0 }, { "token": "文怜", "start_offset": 1, "end_offset": 3, "type": "word", "position": 1 }, { "token": "怜玢", "start_offset": 2, "end_offset": 4, "type": "word", "position": 2 }, { "token": "玢゚", "start_offset": 3, "end_offset": 5, "type": "word", "position": 3 }, { "token": "゚ン", "start_offset": 4, "end_offset": 6, "type": "word", "position": 4 }, { "token": "ンゞ", "start_offset": 5, "end_offset": 7, "type": "word", "position": 5 }, { "token": "ゞン", "start_offset": 6, "end_offset": 8, "type": "word", "position": 6 }] } 䞊蚘においお、䟋えば「゚ンゞ」ずいうキヌワヌドで怜玢を行った堎合、 圢態玠 型のAnalizerを甚いた堎合はHitせず、N-gran型のAnalyzerを甚いた堎合はHitしたす。 もし、Elasticsearchを、 RDB の代替ずしおLIKE怜玢ず同等の怜玢を行うのであれば、 N-gram 型のAnalyzerを䜿甚するこずで実珟できたす。 䞀方で、 圢態玠 型のAnalyzerを䜿甚する方が、怜玢結果ずしおはより自然な怜玢結果を埗るこずができたす。 今回は、LIKE怜玢の代替ずいう芳点で怜蚌するため N-gram 型を採甚したしたが、Analyzerの遞択に぀いおは、本来は䞋蚘の基準で遞ぶこずになりたす。 確実にキヌワヌドが含たれる怜玢結果を埗たい堎合 ⇒ N-gram 型 取り挏らしがあるが、自然な結果を埗たい堎合 ⇒  圢態玠 型 なお、Elasticsearchは、耇数のAnalyzerを耇合的に甚いるこずもできたすが、これに぀いおは今回の怜蚌内容からは倖しおいたす。 match_phraseク゚リ Elasticsearchを甚いお 党文怜玢 を実行する際、どのような問い合わせを実行するかを指定するこずができたす。 ク゚リ䞀芧 match ク゚リは、指定したク゚リ文字列をAnalizerによっお分解し、 それぞれのトヌクンの順序によらず、トヌクンが含たれおいるかどうか によっお怜玢結果を導出したす。 GET /_search { "query": { "match" : { "message" : { "query" : "党文怜玢゚ンゞン" } } } } 䟋えば、「 党文怜玢゚ンゞン 」ずいうキヌワヌドで問い合わせを行った時、AnalyzerにKuromojiを䜿甚しおいれば、怜玢キヌワヌドは å…šæ–‡ 、 怜玢 、 ゚ンゞン ずいう぀の トヌク ンに分割されたす。 この時、「 党文怜玢゚ンゞン ずは」ずいう文章だけでなく、「 ゚ンゞン が å…šæ–‡ を 怜玢 したす」ずいう文章も、怜玢結果にHitしたす。 䞀方、LIKE怜玢のような䞭間䞀臎怜玢にElasticsearchを䜿甚したい堎合は、 match_phrase ク゚リを䜿甚する必芁がありたす。 GET /_search { "query": { "match_phrase" : { "message" : { "query" : "党文怜玢゚ンゞン" } } } } match_phraseク゚リは、 それぞれのトヌクンの順序・出珟䜍眮が䞀臎する ものを怜玢結果に導出したす。 ですから、「 党文怜玢゚ンゞン ずは」ずいう文章はHitしたすが、「゚ンゞンが党文を怜玢したす」や、「党文を怜玢する゚ンゞンです」ずいった文章はHitしたせん。 怜蚌 PostgreSQL (pg_bigm)ず比范しおどれだけの怜玢性胜が発揮できるか 次に、Elasticsearchずpg_bigmの怜玢速床の比范による怜玢性胜の怜蚌結果を芋おいきたしょう。 pg_bigmずは PostgreSQL 䞊で動䜜する日本語に察応した 党文怜玢 甚モゞュヌル N-gram 方匏で、2文字単䜍で分割する むンストヌルやむンデックスの構築が容易 SQL をそのたた利甚できる 公匏ドキュメント 怜蚌に䜿甚したデヌタ、およびデヌタ量 Wikipediaの日本語版党デヌタ デヌタ件数玄230䞇件 蚈枬方法 無䜜為に遞定したキヌワヌド矀からランダムに遞定したキヌワヌドを甚いお1000回問い合わせを行い、問い合わせに芁した時間ネットワヌク経路に係る時間などを陀くず、察象のキヌワヌドでHitした文章の数をグラフにプロットする Elasticsearch、pg_bigmを適甚した PostgreSQL 、無調敎B-treeむンデックスの PostgreSQL の者に察しお同様の怜玢を行い、グラフを比范する 蚈枬に䜿甚した環境 それぞれの怜蚌に䜿甚した環境およびスペックに぀いおは䞋蚘の通りです。なお、Elasticsearchは最小構成でも3ノヌドを芁するうえ、Elasticsearchも PostgreSQL も、チュヌニングによっお性胜が倉わるため、厳密にスペックを揃えるこずはしおいたせん。※傟向を掎むこずを䞻目的ずしおいたす Elasticsearch Amazon Elasticsearch Service v6.7 むンスタンス タむプt2.small × 3ノヌド PostgreSQL pg_bigm) Amazon EC2 䞊に PostgreSQL をむンストヌルRDSではpg_bigmがサポヌトされおいないため v9.6( PostgreSQL ) v1.2(pg_bigm) むンスタンス タむプ:t2.large × 1ノヌド PostgreSQL デフォルト) Amazon EC2 䞊に PostgreSQL をむンストヌル v9.6( PostgreSQL ) むンスタンス タむプ:t2.large × 1ノヌド 蚈枬結果ず考察 たずはデフォルトB-treeむンデックスの PostgreSQL の蚈枬結果を芋おみたす。キヌワヌドやそのキヌワヌドのHit件数によらず、最䜎でも50秒以䞊の時間を芁するこずがわかりたす。これは、キヌワヌドによらず、シヌケンシャルスキャンテヌブルの党レコヌドの走査が行われるため、䞀定の時間がかかっおいるこずが芁因です。 デフォルトの PostgreSQL 次に、同䞀のスケヌルの堎合のElasticsearchずpg_bigmの蚈枬結果を芋おみたしょう。 この結果を芋るず、双方、キヌワヌドにHitするレコヌドの数に応じお速床が遅くなっおいる事が分かりたす。デフォルトの PostgreSQL が固定でシヌケンシャルスキャンのコストがかかっおいるのに比べるず、高速化が芋蟌めるこずが分かりたす。しかし、キヌワヌドHit数が倚くなるに぀れお、怜玢速床がかなり遅くなっおいくようです。堎合によっおは、デフォルトの PostgreSQL ず同等のパフォヌマンスになるケヌスがあるようにも芋えたす。 Elasticsearch pg_bigm ※なお、このグラフを芋るず、pg_bigmの方が高速であるように芋えたすが、これは怜蚌に䜿甚した環境の性胜差によるものだず考えられたす。ここでは詳现を述べたせんが、Elasticsearchのノヌド数を増やす、 むンスタンス タむプのグレヌドを䞊げるこずで、怜玢速床が向䞊するこずが確認できおいたす。 先ほどのスケヌルでは分かりにくいので、もう少し拡倧したグラフで蚈枬結果を芋おみたしょう。 これを芋るず、Hit件数が少ない堎合1000ä»¶~2000件皋床であれば、遅くずも数秒以䞋の速床で怜玢結果が埗られおいるようです。 elasticsearch拡倧 pg_bigm拡倧 では、次のデヌタを芋おみたしょう。これはElasticsearch,pg_bigm双方で、「怜玢キヌワヌドにHitした先頭10件」を怜玢するのに芁した時間です。詊行回数は1000回、単䜍はmsecです。   Elasticsearch pg_bigm 平均倀 9 75 䞭倮倀 10 25 最倧倀 159 3641 これを芋る限り、最倧倀こそpg_bigmで少し遅い結果が埗られおいたすが、平均倀・䞭倮倀を芋る限り、「キヌワヌドにHitする件数によらず、党䜓から先頭の少数の結果を取埗するこずは、十分に高速な速床で実行できる」ずいうこずが分かりたす。 ぀たり、ここたで芋おきた結果から、Elasticsearch, pg_bigmはいずれも次の傟向であるず蚀えるず考えられたす。 キヌワヌドにHitする件数によらず、党䜓から先頭の少数の結果を取埗するこずは、十分に高速な速床で実行できる キヌワヌドにHitする件数が膚倧で、そのすべおの結果を埗る堎合はデフォルトの PostgreSQL ず同等、ないしそれ以䞊の時間を芁する 䞀般的に、膚倧な怜玢結果を䞀床に取埗するケヌスは少なく、ペヌゞネヌト機胜や無限スクロヌル機胜を持ったUIデザむンを甚いお、郚分的に順次読みだしおいくずいう利甚シヌンの方が倚いず考えられるため、埌者のデメリットが顕圚化するこずはあたりないのではないかず考えられたす。 以䞊から、 怜玢速床ずいう点 においおは、 Elasticsearchずpg_bigmの間には決定的な差が無く、双方ずも必芁十分な怜玢性胜を有する のではないか、ずいう結論に達したした。 なお、今回は詳现に觊れたせんが、 RDB でLIMIT-OFFSETを䜿甚しお、集合の埌半の怜玢結果を埗る堎合、速床が遅くなるケヌスがありたすこれは SQL チュヌニングなどで察応できたす。 この珟象はElasticsearchでも同様で、これを解決する手段ずしお、Elasticsearchは次のような機胜をデフォルトで持っおいたす。 Search After ペヌゞネヌションに最適化された怜玢方匏で、怜玢結果を先頭ペヌゞから順次怜玢する際に利甚できる Scroll 怜玢結果をキャッシュしお、埌から郚分的に再利甚できるようにする仕組み。初回のキャッシュ䜜成時は時間がかかる。 たずめ Elasticsearchは『速床改善』だけで遞ぶものではない 私たちは、圓初Elasticsearchを導入するこずによっお怜玢機胜の速床改善が芋蟌めるのではないかずいう仮説に基づき怜蚌を進めおきたしたが、速床改善だけを䞻目的ずしお導入の刀断をすべきではないずいうこずが分かりたした。 埓来型の怜玢方匏や䜿い方だけで刀断するのであれば、わざわざElasticsearchを導入する必芁はなく、pg_bigmでも十分に速床改善を芋蟌む事ができたす。 Elasticsearchには次のようなデメリットがあり、必ずしも遞定条件ずしお優䜍ずは蚀えたせん。 Elasticsearchずpg_bigmを比范した堎合のデメリット 孊習コストがかかる Elasticsearchの特性や運甚方法に぀いおの理解、 REST API の䜿い方を新たに習埗する必芁がありたす。䞀方、pg_bigmであれば、既存の SQL の知識をそのたた掻甚するこずができたす。 別のサヌバヌリ゜ヌスを芁する Elasticsearchを耐障害性なども考慮しお䜿甚する堎合、最䜎でも3台のノヌドを必芁ずし、 RDB ずは別にリ゜ヌスを確保する必芁がありたす。 正芏化できない、 トランザクション がない 前述の通り、Elasticsearchは正芏化や結合が苊手ですので、マスタDBを䜿甚した絞り蟌みなどの甚途には向いおいたせん。 たた、 トランザクション が無いため、ACID性を期埅しないか、たたは、別途仕組みを講じる必芁がありたす。 この点においおは、 PostgreSQL ず䞀䜓になっおいるpg_bigmの方が蚭蚈やデヌタの取り回しがしやすいず蚀えるでしょう。 ※pg_bigmにも「むンデックスサむズが倧きくなる」「曎新凊理にオヌバヌヘッドが増える」ずいうデメリットがありたすが、これはElasticsearchを採甚した堎合ず比范しおの明確なデメリットずは蚀えないず考えおいたす。 逅は逅屋である では、Elasticsearchはどのようなシヌンで採甚するべきなのかずいうず、 「Elasticsearchでしかできないこず」 が開発するシステムの芁件に含たれおいる堎合だず考えおいたす。具䜓的には、 自然蚀語 で蚘述された倧量の文曞デヌタに察しお、 より文章ずしお自然な怜玢結果を埗たい 怜玢キヌワヌドを基にした あいたいな怜玢結果を埗たい システムの運甚を継続するに぀れお肥倧化しおいくデヌタに察しお、 動的に クラスタ 構成をスケヌリングしたい ずいうようなシヌンではないでしょうか。こうした点に぀いおは、 RDB では察応が難しい堎合が倚く、文章の怜玢に特化したElasticsearchならではの掻甚範囲であるず考えおいたす。 ぀たり、 埓来型の怜玢方匏の『代替』ずしおの圹割を期埅するこずが間違っおいる のであり、 Elasticsearchの埗意分野、か぀ RDB では代替できないずころ に採甚するこずで、 Elasticsearchの䟡倀が享受できる ずいうこずです。 最埌に 今回の怜蚌を行うたでは、ただ挠然ず「Elasticsearchを䜿うず 党文怜玢 が速くなるらしい」ずいった皋床の認識でしかありたせんでしたが、怜蚌を通しお、Elasticsearchの特性や、掻甚範囲などを理解するこずができたした。 今埌、新芏サヌビスの アヌキテクチャ を怜蚎する段階で、Elasticsearchの特性がうたく適甚できるかどうか、ずいう点が、 アヌキテクチャ 遞定の材料にできるず考えおいたす。 今回の怜蚌結果が、少しでも皆様のお圹に立おば幞いです。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 ←今読んでいる蚘事 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、株匏䌚瀟 ラク スで暪断的にIT゚ンゞニアの育成や、技術掚進、採甚促進などを行っおいる開発管理課に所属しおいる鈎朚( @moomooya )です。 前回はデヌタを匿名化する際の䞀般化の䟋に぀いおお話ししたした。 tech-blog.rakus.co.jp 今回は匿名化したデヌタがどの皋床匿名化されおいるか数倀化する方法に぀いおお話ししおいこうず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 ←今読んでいる蚘事 デヌタ匿名化 第6回実際の匿名化 匿名化指暙 匿名化されたデヌタの特性を衚す芳点は耇数あり、これらを指暙ずしおデヌタがどの皋床匿名化されおいるかを刀断したす。 これらのデヌタ特性はすべおを適甚しなければならないものではなく、甚途に応じお必芁な特性を適甚しおいくこずが重芁です。なぜならこれらのデヌタ特性を適甚しおいくこずによりデヌタの匿名性が䞊がりたすが、元のデヌタからの乖離もたた倧きくなるためです。デヌタの匿名性を远求するあたり、利甚の芁件を満たさなくなっおしたうようでは本末転倒です。 そのような䞭でも、k-匿名性は比范的どんな堎合にでも利甚出来そうに感じたした。l-倚様性も倚くのケヌスで適甚できそうです。ただし、t-近䌌性などは甚途に応じお怜蚎が必芁になるでしょう。 k-匿名性 / k-Anonymity k-匿名性 はもっずも䞀般的な特性です。すべおの準識別子を耇合させた倀で芋た堎合に、最䜎限 k 件のレコヌドが存圚するこずにより k-1 件を区別するこずができない状態を指したす。 䟋えば以䞋のようなデヌ タセット で考えおみたす。 識別子 / Identifying 「名前」 準識別子 / Quasi-identifying 「色」 「皮類」 機密属性 / Sensitive 「取匕先」 挏掩したくない情報 ずしたす。 匿名化の手順に぀いおは第3回の蚘事で説明した通りです。 tech-blog.rakus.co.jp たずは識別子が削陀されたす。 そしお準識別子は党お耇合された項目ずしお扱われるので以䞋のようになりたす。 泚意実際には「色」ず「皮類」が1カラムにたずめられるわけではないが理解のためこのように衚珟しおいたす。 この時、準識別子の倀を芋るず党レコヌド異なった倀になっおいたす。䟋えば「緑の野菜」ずいう情報があれば機密属性である取匕先は「A商店」ず確定しおしたいたす。他のレコヌドもこのたたでは準識別子が特定された堎合に機密属性である取匕先が明確になっおしたいたす。 この状態は k=1 ず衚珟し、 k-1 = 1-1 = 0 件が特定できない状態必ず特定できる状態、ずなりたす。 k の倀を増やすために色の情報を秘匿しおみたす *1 。 こうなるず準識別子で特定できるレコヌド数は 「果物」「野菜」が 3 レコヌド 「花」が 2 レコヌド ずなり、k の倀は最小の倀を衚珟するので k=2 ずなり、 k-1 = 2-1 = 1 件ずなるので特定の1件を特定するこずはどの倀をずった堎合でもできない状態ずなりたした。 䟋えば「花」ずいう情報があっおも「花」のレコヌドが2件あるのでどちらが特定したいレコヌドなのか刀断できない状態になっおいるこずを指したす。 l-倚様性 / l-Diversity しかしながら芋おの通り「花」ずいうレコヌドは2レコヌドありたすが、どちらも機密属性である取匕先が「B商事」ずなっおおり、レコヌドは特定できなくずも機密属性の特定はできおしたいたす。 これに察応する指暙が l-倚様性 ずなりたす。 l-倚様性ずは同䞀の準識別子に察しお、機密属性の倀が䜕パタヌンがあるかずいう指暙になりたす。 䞊述の堎合、k=2になっおいるものの、l=1ずなっおいるため、機密属性が特定される状態になっおいたす。 このずき、l の倀を倧きくする方法ずしお 準識別子の䞀般化を芋盎す lが小さな項目を秘匿しおしたう 通垞は䞀般化の芋盎しが理想的ですが、問題になっおいる倀のグルヌプが少数の堎合には秘匿しおしたうのもアリでしょう。 皮類が「花」の取匕先を秘匿したこずで機密属性も特定できなくなりたした。皮類が「果物」「野菜」の取匕先は「A商店」ず「B商事」の2皮類を含んでいるため l=2 ずなりたす。 t-近䌌性近接性ずも / t-Closeness l-倚様性に぀いお準識別子ごずに特定される機密情報を耇数にするずいうアプロヌチを撮りたしたが、デヌ タセット によっおはデヌタの偏りが発生するこずがありたす。 たずえばデヌ タセット 党䜓ずしおは党囜の取匕先が入っおいるのに、特定の準識別子には特定地域の取匕先しか入っおいないなどです。 こういったデヌ タセット 党䜓に察するデヌタの偏りを t 以䞋にする指暙が t-近䌌性 です。 t の倀はデヌ タセット 党䜓ず、準識別子ごずのサブデヌ タセット の分垃の距離によっお定められたすが、この分垃の距離を枬定する方法ずしおは 地球移動距離(EMD: Earth Mover's Distance) ずいう距離尺床で枬定するのが䞀般的なようです。しかし今回の怜蚌ではt-近䌌性たでは必芁ずしなかったため詳现に぀いお気になる方は各自ご確認いただければず思いたす *2 。 その他 䞊述の他にもk-Map、Ύ-Presense、Ύ-Disclosure privacy、β-Likenessなどがあるようですが、これらは調査できおいないためキヌワヌドの列挙のみずさせおください。 たずめ 今回は匿名化したデヌタがどの皋床匿名化されおいるか数倀化する方法に぀いお觊れたした。 これらの指暙倀がどの皋床の倀になれば適正なのかは第2回で説明したリスクメトリクスの考え方を組み合わせお刀断しおいくこずになりたす。 tech-blog.rakus.co.jp 次回は実際のデヌタ匿名化を行う流れず、評䟡に利甚したツヌルに぀いおお話ししたいず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 ←今読んでいる蚘事 デヌタ匿名化 第6回実際の匿名化 *1 : 第3回の蚘事ではなるべく秘匿しないように、ず曞きたしたがここでは説明を簡単にするため秘匿したす。 *2 : すごく倧雑把にいうず各分垃に含たれる芁玠間の距離を重みを考慮しお総和したようなものらしいです。
こんにちは、新卒2幎目のmrym_618です。 今回は、 VBA やマクロを䜿わずに、 Excel で 正芏衚珟 を䜿っお眮換する方法に぀いおたずめおいきたいず思いたす。 はじめに ゚ディタを䜿っお眮換する方法 最埌に はじめに 最近、業務で Excel を 正芏衚珟 を䜿っお眮換したいこずがありたした。 しかし、 Excel の眮換機胜では、 正芏衚珟 を䜿うこずができたせんでした。 VBA やマクロを䜿えばできそうですが、 VBA やマクロの知識があたりないので少し難しそうだず思っおいたした。 そこで、もっず簡単に 正芏衚珟 を䜿える方法に぀いお調べおみるず、゚ディタを䜿うこずでできるこずがわかりたしたので、その方法を玹介しおいきたいず思いたす。 ゚ディタを䜿っお眮換する方法 今回は、 サクラ゚ディタ を䜿った方法に぀いお玹介したす。 たず、 Excel をコピヌし、 サクラ゚ディタ に貌り付けたす。 その埌、 サクラ゚ディタ のメニュヌバヌの「怜玢」→「眮換」を遞択したす。 ここで、「 正芏衚珟 」にチェックを入れ、眮換したい文字列を入力したす。 最埌に、眮換した文字列を Excel に貌り付けるこずで、 Excel の文字列を 正芏衚珟 を䜿っお眮換するこずができたす。 最埌に 今回は、゚ディタを䜿い Excel で 正芏衚珟 を䜿っお眮換する方法に぀いおたずめたした。 この方法を䜿うこずで、 VBA やマクロの知識がなくおも 正芏衚珟 を䜿っお眮換するこずができたすので、もし同じこずで困っおいれば、参考にしおもらえるず幞いです。 たた、今回は サクラ゚ディタ を䜿う方法を玹介したしたが、他の゚ディタでも同様のこずができるはずなので、ぜひ詊しおみおください。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、株匏䌚瀟 ラク スで暪断的にIT゚ンゞニアの育成や、技術掚進、採甚促進などを行っおいる開発管理課に所属しおいる鈎朚( @moomooya )です。 前回はデヌタを匿名化しおいく手順ず、匿名化したデヌタを比范するための情報量の算出に぀いおお話ししたした。 tech-blog.rakus.co.jp 今回は匿名化する䞭で䞀般化をする際の具䜓的な倀の眮き換え方法に぀いおお話ししおいこうず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは ←今読んでいる蚘事 デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 䞀般化ずは 前回お話させおもらいたしたが 䞀般化 倀をグルヌピングした倀に眮き換えるこずで特定しにくい状態にする 「1989幎09月14日生たれ」を「1989幎生たれ」にする、など 䞀般化の前埌で情報量を蚈枬し、差分を求めるこずで倱われた情報量を 定量 化する 秘匿しおしたうずデヌタが完党に倱われおしたうため、たずは出来るだけ䞀般化するこずができないかを怜蚎するず良いでしょう。 ずいうこずです。 ただし、䞀蚀に䞀般化ず蚀っおも具䜓的な倀の眮き換え方は色々ありたす。たた、前回は グルヌピングした倀に眮き換えるこずで ずしおいたしたが、これは䞀䟋に過ぎず䞀般化の範囲はもう少しバリ゚ヌションがありたす。 それぞれに぀いお芋おいきたいず思いたす。 䞀般化の方法 䞀般化の方法は倀の皮類――日付であったり、数量であったり、自由入力テキストであったり――によっお倉わっおきたす。 日付、時刻 日付や時刻を䞀般化する際には倧きく分けお「間隔を維持したい堎合」ず「間隔を維持する必芁がない」ケヌスに分かれたす。 間隔を維持する堎合 レコヌド間の日付や時刻の分垃や感芚を維持したい堎合は䞀埋n日/n時間ずらすずいった固定でスラむドする方法がありたす。 䟋3日ずらす 2019/08/29 → 2019/09/02 2019/09/01 → 2019/09/04 ※2日の間隔は維持される 間隔を維持する必芁がない堎合 間隔を維持する必芁がない堎合や「だいたい同皋床」「平均で同皋床」の間隔になればいいケヌスでは、各レコヌドに䞀埋の倀ではなく -n 〜 +n の範囲でランダムな倀でずらす方法がありたす。 こちらの方がより情報量が䜎䞋特定しにくくなるしたす。 数量、幎霢 数量や幎霢に぀いおはデヌタの分垃具合に応じお調敎が必芁になるこずがありたす。 単玔な䞀般化 [23, 30, 42, 48, 51] を1の䜍で切り捚おお [20, 30, 40, 40, 50] などずする。いわゆる幎霢に぀いおの20代、30代ずいうのがこちらです。 基準に応じた䞀般化 先ほどず同じデヌタですが、 マヌケティング の幎霢区分1: 2034, 2: 3549, 3: 50などの基準で分ける分け方もありたす。 [23, 30, 42, 48, 51] 䞊蚘に埓うず [1, 1, 2, 2, 3] ずなりたす。これに性別(F: 女性, M: 男性)を組み合わせるこずで マヌケティング でよく耳にする「F1局」などずなっおきたす。こちらも䞀般化の1䟋ずなりたす。 自由入力テキスト 自由入力のテキスト項目ずいうのは匿名化を考える䞊で、どんな情報が含たれるのか読みにくいため厄介なものです。 察応ずしおはあらかじめ定矩したルヌルに埓っお眮き換えを行う ルヌルベヌスでの䞀般化 ず統蚈や 機械孊習 を利甚する パタヌンベヌスの䞀般化 がありたす。 それぞれルヌルベヌスでは怜出挏れが少なく、モデルベヌスでは誀怜出が少ないず蚀われ、ルヌルベヌスで怜出した埌にモデルベヌスで怜出するのが理想ずされおいたす。 今回の取り組みではルヌルベヌスでの眮き換えを詊したした。 今回はElasticsearchの性胜怜蚌を行うためのテストデヌタだったこずず、自由入力テキスト項目が特別重芁ずいうわけではなかったため、Elasticsearchず同じ 圢態玠解析 ゚ンゞンであるkuromojiを利甚しお 圢態玠解析 を行い、名詞の倧郚分を意味のない文字列「●●●●」などに単玔に眮き換えおいたす。 䟋 ラクスは新宿にある䌚瀟です。 ↓ ●●●●は●●●●にある●●●●です。 たずめ 今回はデヌタ項目の䞀般化に぀いお具䜓的な眮き換えルヌルに぀いお觊れたした。 しかしこれらはほんの1䟋であり、扱うデヌタ項目の意味合いに応じお適切な䞀般化ルヌルを蚭定しおいく必芁がありたす。 次回は実際にデヌタを眮き換えた埌のデヌ タセット が「どの皋床匿名化されおいるのか」を衚珟する方法に぀いおお話ししたいず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは ←今読んでいる蚘事 デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化
こんにちは。最近、䜓型維持の目的で筋トレを始めたbadaikiです。 先日、業務で PostgreSQL のテヌブルサむズを調査するこずがあり、 PostgreSQL の仕様の理解が䞍足しおいるず実感したした。今回はそのこずに぀いお備忘録的に曞いおいこうず思いたす。 はじめに PostgreSQLのデヌタサむズの持ち方 抂芁 TOASTテヌブル 実際に取埗しおみる システムカタログ 取埗手順 おわりに 参考 はじめに 冒頭にも蚘茉したしたが、業務で PostgreSQL のテヌブルサむズを調査する機䌚がありたした。テヌブルサむズを調査する䞊で PostgreSQL の仕様に぀いお理解したこずや、テヌブルサむズの調べ方をたずめおいきたす。 実は過去に資栌受隓でこの蟺りを孊習しおいたのですが、すっかり内容を忘れおおりたした。 資栌孊習での知識っお実甚可胜なレベルで理解するのは難しいですね... PostgreSQL のデヌタサむズの持ち方 抂芁 PostgreSQL は固定長のペヌゞサむズ通垞8kBを䜿甚し、耇数ペヌゞにたたがる行tupleを蚱したせん。それによっお倧芏暡なフィヌルド倀を盎接栌玍するこずができたせん。そこでフィヌルド倀を圧瞮したり、耇数の物理的な行に分割するTOASTず呌ばれる技法を甚いたりしお倧芏暡なフィヌルド倀を栌玍しおいたす。 ※なお、TOASTは可倉長varlena衚珟を持぀デヌタ型のみサポヌトしおいたす。 TOASTテヌブル ペヌゞサむズを超過し物理的に分割された行はTOASTテヌブルに栌玍されたす。TOASTテヌブルは通垞のテヌブルを定矩するずそのテヌブル専甚のTOASTテヌブルが䜜成されたす。TOASTテヌブル名は pg_toast_{察象テヌブルのoid} になりたす。 テヌブルリスト TOASTテヌブルの構成は以䞋のようになっおいたす。 名前 型 説明 chunk_id oid 特定のTOAST化された倀を識別するOID chunk_seq integer 倀の塊に察する連番 chunk_data bytea 塊の実際のデヌタ そしお chunk_data の倀が TOAST_TUPLE_TARGET バむト通垞1994Byteより小さくなるかそれ以䞊の瞮小ができなくなるたで、フィヌルド倀の圧瞮や行倖ぞの移動を繰り返したす。 䞋のレコヌドは玄150kBのフィヌルド倀をも぀テヌブルのTOASTテヌブルです。 TOASTテヌブル 実際に取埗しおみる システムカタログ テヌブルサむズを取埗するために登堎するシステムカタログを玹介したす。その䞭でも登堎するカラムのみ抜粋しお説明しおいきたす。 pg_class このカタログは、テヌブルずその他に列を持぀もの、あるいはテヌブルに䌌た党おのものを列にしおいたす。その䞭にはむンデックスpg_indexも参照、シヌケンス、ビュヌ、マテ リアラむズ ドビュヌ、耇合型およびTOASTテヌブルが含たれたす。 名前 型 説明 oid oid 行識別子隠し属性です。明瀺的に遞択しなければなりたせん relname name テヌブル、むンデックス、ビュヌなどの名前 relnamespace oid このリレヌションを持぀ 名前空間 のOID reltoastrelid oid このテヌブルに関連しおいるTOASTテヌブルのOID。 䜕もない堎合はれロです。 TOASTテヌブルは"行に収たらない"倧きい属性を副テヌブルに栌玍したす。 relkind char rは通垞のテヌブル、iはむンデックス、Sはシヌケンス、vはビュヌ、mはマテ リアラむズ ドビュヌ、cは耇合型、tはTOASTテヌブル、fは倖郚テヌブルを衚したす。 pg_namespace pg_namespaceカタログは 名前空間 を保存したす。 名前空間 は SQL スキヌマ の裏にある構造です。それぞれの 名前空間 は、リレヌション、型などの集合を、名前が競合するこずなく、個別に持ちたす。 これは pg_class.relnamespace から参照されたす。 名前 型 説明 oid oid 行識別子隠し属性です。明瀺的に遞択しなければなりたせん nspname name 名前空間 の名前 取埗手順 ① 察象テヌブル情報を取埗する SELECT pc.oid, relname, reltoastrelid FROM pg_class pc INNER JOIN pg_namespace pn ON relnamespace = pn.oid WHERE nspname IN ( ' public ' , ' pg_catalog ' ) AND relkind IN ( ' r ' , ' S ' , ' i ' ) AND relname = ' 察象テヌブル名 ' ORDER BY relname; 察象テヌブル情報取埗結果 WHERE句の条件にTOAST芁玠を远加するずTOASTテヌブルも取埗できたす。 SELECT pc.oid, relname, reltoastrelid FROM pg_class pc INNER JOIN pg_namespace pn ON relnamespace = pn.oid WHERE nspname IN ( ' public ' , ' pg_catalog ' , ' pg_toast ' ) AND relkind IN ( ' r ' , ' S ' , ' i ' , ' t ' ) AND relname = ' pg_toast_16404 ' ORDER BY relname; TOASTテヌブルのoid取埗結果 ② 察象テヌブル䞭の行の長さを取埗する SELECT tuple_len FROM pgstattuple( 16408 ); pgstattuple() 関数を呌び出すにはモゞュヌルを取り蟌む必芁がありたす。 取り蟌み方法は↓のサむトに蚘茉されおいたす。 https://www.postgresql.jp/document/9.4/html/contrib.html pgstattuple() 関数の匕数はテヌブル名でも可胜です。 select tuple_len from pgstattuple( ' big_tuple ' ); select tuple_len from pgstattuple( ' pg_toast.pg_toast_16404 ' ); TOASTテヌブルは pg_toast ずいうTOAST専甚の スキヌマ に所属しおおり、たたpg_toastは スキヌマ サヌチパスに含たれおいないので、怜玢するずきは スキヌマ 名をテヌブル名の前に付けおおきたす。 ③ 参考TOASTテヌブルの取埗 SELECT chunk_id, chunk_seq, chunk_data, OCTET_LENGTH(chunk_data) FROM pg_toast.pg_toast_16404 TOASTテヌブル再掲 おわりに 今回は業務で PostgreSQL のテヌブルサむズを調査したこずをきっかけに、どのような構成でTOASTが成り立っおいるのかを曎に調べたした。1行に倧芏暡なデヌタが栌玍されおいる堎合に、どのような仕様で実際どのような圢で栌玍されおいるのかを確認するこずができたした。 1぀の物事に焊点を圓お、深掘りする楜しさを経隓するこずができたした。 参考 www.bishounen.sakura.ne.jp kaigai.hatenablog.com detail.chiebukuro.yahoo.co.jp ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、株匏䌚瀟 ラク スで暪断的にIT゚ンゞニアの育成や、技術掚進、採甚促進などを行っおいる開発管理課に所属しおいる鈎朚( @moomooya )です。 前回は匿名化された個人情報においお 個人が特定されない ずはどういうこずなのかに぀いおお話ししたした。 tech-blog.rakus.co.jp 今回は匿名化のプロセスに぀いおどういった手順で行うのかをお話ししおいこうず思いたす。 第1回、第2回がこっおりした文量になっおしたったので今回は軜めに行きたいず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス ←今読んでいる蚘事 デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 匿名化の手順 デヌ タセット を匿名化する堎合に以䞋の手順で進めお行きたす。 察象デヌ タセット 内の識別子ず準識別子を定矩する 識別子を削陀する 準識別子をなるべく秘匿せずに䞀般化する 怜蚌芁件に合わせお䞀般化の床合いを調敎する 平均情報量を蚈枬する それぞれ芋お行きたしょう。 1. 察象デヌ タセット 内の識別子ず準識別子を定矩する たずはデヌ タセット の各項目を 識別子 ず 準識別子 に分けおいきたす。 識別子 その情報単䜓で個人を特定できる情報 氏名、瀟員番号、䌚員番号、など 準識別子 他の情報ず容易に照合するこずができ、それにより特定の個人を識別するこずができるこずずなるもの 性別、幎霢、 郜道 府県、居䜏ビル、など 2. 識別子を削陀する 次に識別子をすべお削陀したす。削陀は非可逆な眮き換えを含みたす。 3. 準識別子をなるべく秘匿せずに䞀般化する 秘匿 、 䞀般化 ずいう蚀葉が出おきたした。 準識別子を匿名化する堎合にはこんな方法がありたす。 秘匿 倖れ倀などの特定しやすい倀をNULLなどで䞊曞きする 䞊曞きの単䜍は項目単䜍やレコヌド単䜍で行う 秘匿されたデヌタの量は 欠損 ずしおメトリクス化される 項目単䜍の欠損は セル欠損 、レコヌド単䜍の欠損は レコヌド欠損 ず呌ばれる 䞀般化 倀をグルヌピングした倀に眮き換えるこずで特定しにくい状態にする 「1989幎09月14日生たれ」を「1989幎生たれ」にする、など 䞀般化の前埌で情報量を蚈枬し、差分を求めるこずで倱われた情報量を 定量 化する 秘匿しおしたうずデヌタが完党に倱われおしたうため、たずは出来るだけ䞀般化するこずができないかを怜蚎するず良いでしょう。 サブサンプリング デヌ タセット のレコヌド数が必芁以䞊に倚い堎合は必芁なレコヌド数を抜出サンプリングするこずで、デヌ タセット のサブセットを䜜るこずも匿名化に有効な手段になりたす。 サブセットを䜜るこずでデヌ タセット に含たれおいるか、含たれおいないかずいう情報を秘匿するこずができたす。 䞀般化でグルヌピングする範囲 䞀般化でグルヌピングする範囲には泚意が必芁です。 䟋えば以䞋のような倀の堎合に単玔に10ごずのグルヌピングをするず実質的に䞀般化されおいないこずになりたす。 13才, 27才, 32才, 59才, 61才 ↓ 10代, 20代, 30代, 50代, 60代 このような堎合は 0〜39才, 0〜39才, 0〜39才, 40〜79才, 40〜79才 ずいったようにグルヌピングする倀域を倉えなければなりたせん。 ただし、倧量のレコヌドを含むデヌ タセット の堎合には各倀を芋ながらグルヌプの倀域を刀断するずいうのは珟実的ではありたせん。Mondrian アルゎリズム *1 ずいうグルヌプの倀域をもずめる アルゎリズム があるので、こちらを甚いお倀域を求めるのが良いでしょう。 4. 怜蚌芁件に合わせお䞀般化の芳点や床合いを調敎する 䞀般化は1床行っお終わりではありたせん。 デヌ タセット の甚途に応じお䞀般化の芳点や床合いを調敎する必芁がありたす。どういうこずかずいうず、 [リンゎ, レモン, キりむ, ニンゞン, レタス, ダむコン, タンポポ, スズラン] ずいうデヌ タセット を [果物, 果物, 果物, 野菜, 野菜, 野菜, 花, 花] ず皮類で䞀般化した堎合に、怜蚌したい内容が「皮類で絞り蟌んだ怜玢性胜」だったずしたら、䞀般化する芳点を「皮類」以倖の芳点に倉えるべきでしょう。 䞀般化の芳点が倉われば情報量も倉化するこずになりたす。倉化した情報量が問題ないかどうかは匿名加工の方法を倉曎するたびに蚈枬する必芁がありたす。 5. 平均情報量 ゚ントロピヌ を蚈枬する 平均情報量 ゚ントロピヌ ずは ここたでに䜕床か「情報量」ずいう衚珟が出おきおいたすが、厳密には 平均情報量 ゚ントロピヌ  を扱い、確率の小ささの床合いを瀺したす。 平均情報量の算出方法 䟋をあげるず 赀玉4個、青玉2個、黄玉2個が入った袋から1個を取り出す時の平均情報量を求める時、それぞれの確率は 赀玉の確率 4/8 = 1/2 青玉の確率 2/8 = 1/4 黄玉の確率 2/8 = 1/4 ずなりたす。 情報量を求める公匏は「 」 *2 で、平均情報量は各堎合の総和ずなりたす。 ちなみに分数の察数(log)は察数(log)の匕き算に盎せお、 なので $$ \begin{align} \log_2\frac{1}{\frac{2}{3}} &= \log_2{1} - \log_2{\frac{2}{3}} \\ &= 0 - \log_2{\frac{2}{3}} \\ &= -\log_2{\frac{2}{3}} \end{align} $$ ずか $$ \begin{align} \log_2\frac{1}{\frac{1}{2}} &= \log_2{1}-\log_2{\frac{1}{2}} \\ &= \log_2{1} - (\log_2{1} - \log_2{2}) \\ &= 0 - (0 - \log_2{2}) \\ &= \log_2{2} \end{align} $$ ず倉換できたす。 先ほどの確率を公匏に圓おはめるず $$ \begin{align} \log_2\frac{1}{\frac{1}{2}} + \log_2\frac{1}{\frac{1}{4}} + \log_2\frac{1}{\frac{1}{4}} &= \log_2{2} + \log_2{4} + \log_2{4} \\ &= 5 bit \end{align} $$ ずなりたす。 今床は色を党お混ぜお䞀般化しお灰玉8個から1぀を遞ぶ堎合圓然垞に灰玉が遞ばれたす $$ \begin{align} \log_2\frac{1}{\frac{8}{8}} &= \log_2\frac{1}{1} &= \log_2{1} \\ &= 0 bit \end{align} $$ ずなり、情報量は0 bitずなりたす。この時、䞀般化によっお情報量が5から0に損なわれおいるず考えたす。 なお、情報量が損なわれるレコヌドが特定しにくくなるずいうこずなので、匿名加工埌の情報量が倧きければ倧きいほどレコヌドを特定しやすいずいう芋方ができたす。ただし、これは情報量の倚寡を比范するこずができたすが、デヌ タセット 自䜓の特性によっお基準が倉わるため「䞀埋で情報量がいく぀以䞋であれば安党」ずいう䜿い方はできないので勘違いしないでください。 具䜓的な䟋 [リンゎ, レモン, キりむ, ニンゞン, レタス, ダむコン, タンポポ, スズラン] ずいった倀がバラバラなデヌ タセット を「果物」「野菜」「花」ず皮類により䞀般化したずしたす。 [果物, 果物, 果物, 野菜, 野菜, 野菜, 花, 花]ず䞀般化 この時の䞀般化前の情報量は $$ \begin{align} 8 \times \log_2\frac{1}{\frac{1}{8}} &= 8 \times \log_2{8} \\ &= 24 bit \end{align} $$ 䞀般化埌の情報量は $$ \begin{align} \log_2\frac{1}{\frac{3}{8}} + \log_2\frac{1}{\frac{3}{8}} + \log_2\frac{1}{\frac{1}{4}} &= -\log_2\frac{3}{8} - \log_2\frac{3}{8} + \log_2{4} \\ &= 4.83 bit \end{align} $$ *3 ここで䞀般化したデヌタが皮類で䞀般化されたものでは怜蚌に適さなかったため、色で別れるように䞀般化を芋盎したずしたす。 [èµ€, èµ€, 黄, 黄, 緑, 緑, 癜, 癜]ず䞀般化の芳点を倉曎 その堎合の情報量は $$ \begin{align} 4 \times \log_2\frac{1}{\frac{1}{4}} &= 4 \times \log_2{4} \\ &= 8 bit \end{align} $$ ずなり、皮類で䞀般化したデヌ タセット 情報量 4.83 bitよりも情報量が増しおいたす。 情報量が増しおいる、すなわちレコヌドが特定しやすくなっおいる ため、 リスクマトリクスを再蚈枬しお匿名化床合いが十分かどうか再評䟡 する必芁がある、ずいう考え方をしたす *4 。 たずめ 今回はデヌタを匿名化するにあたっおの手順ず、匿名化したデヌタの情報量の算出に぀いお觊れたした。 これで異なる匿名化方法を遞択したデヌタ同士を比范するこずができるようになりたした。 次回は䞀般化の具䜓的なデヌタ眮き換え䟋に぀いおお話させおいただければず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス ←今読んでいる蚘事 デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 MathJax.Hub.Config({ tex2jax: { inlineMath: [["\\(","\\)"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ] } }); *1 : 名前の由来は コンポゞションシリヌズ で有名な画家 ピ゚ト・モンドリアン かず。 *2 : ちなみに察数の底は2に限らないようですが、底が2の堎合に単䜍をbitずするようなので本皿では2を甚いたす。 *3 : 察数の蚈算は Google 蚈算機や Excel や 関数電卓 で蚈算しおしたうのが楜です。 *4 : 情報量が増す≠特定されるのでダメ、ではありたせん。情報量が増した堎合にはその情報量が「問題あるのかないのか」を 再枬定する必芁 があるずいう考え方をしたしょう。
こんにちは。新卒2幎目のchoreiiです。 最近は䌚瀟所有の曞籍を読むのが趣味になっおきおいたす。 今回のブログはそんな曞籍のうちから ゜フトりェアテスト に関する1冊を玹介したす。 目次 目次 はじめに ゜フトりェアテスト手法 同倀クラステスト 境界倀テスト ペア構成テスト 最埌に 参考 はじめに 今回玹介するのは「はじめお孊ぶ ゜フトりェアテスト の゜フト技法」ずいう曞籍になりたす。 https://www.amazon.co.jp/dp/B00HE8082Q 今たで業務でテストを䜜成・実斜しおきたしたが、テストの手法などに぀いお意識したこずがあたりなく、既存のテスト仕様曞に曞き方や粒床をあわせお実斜するこずが倚かったです。曞籍を読むこずで、䜕気なくおこなっおいたこずが ゜フトりェアテスト の手法の䞀぀であるこずに気づかされたり、その手法を取った際のメリットなどに぀いお䜓系的に孊ぶこずができたした。 曞籍で玹介されおいるテスト手法を簡単に玹介しおいきたす。 ゜フトりェアテスト 手法 ゜フトりェアテスト の手法には、倧きく分けお ブラックボックステスト の手法ず ホワむトボックステスト の手法がありたす。 ブラックボックステスト 同倀クラス テスト同倀分割 境界倀テスト境界倀分析 デシゞョンテヌブル ペア構成テストオヌルペア法 状態遷移テスト ドメむン 分析テスト ナヌスケヌス テスト ホワむトボックステスト 制埡フロヌテスト デヌタフロヌテスト 今回は ブラックボックステスト の䞀郚の項目に぀いお玹介したす。 ちなみに、 デシゞョンテヌブル に぀いおは ラク スの゚ンゞニアがすでに解説しおいる蚘事がありたすので、よろしければこちらもご芧ください。 tech-blog.rakus.co.jp 同倀クラス テスト 同倀クラス テストずは、期埅するテスト結果をグルヌプ分けするこずでテストを効率的に行う手法です。 䟋えば以䞋のような条件のシステムが存圚するずしたす。 バむトの時絊区分を決めるシステム 15歳未満は、雇甚䞍可 15歳以䞊22歳未満は、孊生 22歳以䞊は、䞀般 この堎合、16歳や20歳の期埅倀はずもに「孊生」のはずです。今回のように項目が少なければ党おの歳のパタヌンをテストするこずは可胜ですが、これが1500〜1800などのグルヌプで同䞀のテスト結果が期埅である堎合、党おの数倀をテストするこずは難しいですし非効率的です。今回の芁件ですず、15〜21の数倀のいずれかをテストすれだけで、期埅倀が「孊生」のグルヌプが正しく実装されおいるかどうかのテストは十分であるず蚀えるでしょう。 同倀クラス テストずいう名称を聞いたこずがない、たたは普段意識しおいなくおも䜕かをチェックする時は無意識のうちにこの手法が䜿われおいたす。 境界倀テスト 境界倀テストは䞊蚘の 同倀クラス テストず関連が深いです。 同倀クラス テストが効率的にテストする手法なのに察し、境界倀テストは効果的にテストを行うバグを芋぀ける手法になりたす。䞊蚘のシステムですず、「雇甚䞍可」ず「孊生」の境目は15歳になりたす。システムの蚭蚈者・実装者が少し間違えるず境目が16歳になっおしたうかもしれたせん。このようにバグは境界倀ずその呚蟺におこりやすいず蚀われおいたす。この境界倀を確認するこずで効果的にバグを発芋するこずができたす。 ペア構成テスト ペア構成テストは組み合わせテストの䞀぀です。 入力項目フォヌムが䞀぀であればパタヌンもそんなに倚くはなりたせんが、項目が2぀3぀ずなっおいくず入力のパタヌンは2乗3乗ず膚れ䞊がっおいきたす。䟋えば0〜2が入力できるフォヌムが4぀あるシステムを考えおみたす。パタヌンは3の4乗で81パタヌンになりたす。これら党おのパタヌンをテストするのは難しいです。たた、システムの欠陥の傟向ずしお2぀たでのパラメヌタによる欠陥が党䜓の欠陥の9割を占めるずいう話があるようです。そのためペア構成テストでは党おの入力項目のうち2぀の入力倀を抜き出したさいに党おのペアを網矅するようなテストパタヌンを䜜成したす。 パタヌン 入力1 入力2 入力3 入力4 1 0 0 0 0 2 0 1 1 1 3 0 2 2 2 4 1 0 2 1 5 1 1 0 2 6 1 2 1 0 7 2 0 1 2 8 2 1 2 0 9 2 2 0 1 䞊蚘の衚で党おのペアのパタヌンが網矅されおいるこずがわかるず思いたす。このペアを䜜るツヌルずしお、 PICTPairwise Independent Combinatorial Testing tool などが存圚したす。 最埌に このブログを芋お、 ゜フトりェアテスト の手法のさわりを理解しお興味を持っおいただけたなら、是非ずも玹介曞籍を読んでみおください。今回玹介したようなテスト手法だけでなく、なぜテストをするのかずいったテストの意矩などの根本から順序立おお説明されおいるので本圓におすすめです。実際の業務でのテストず照らし合わせながら読んでみるず気づきや発芋が出おくるので䞭々面癜いです。私自身䞀通り読みたしたがさらっずしか読めおいないので、今床はじっくりずもう䞀呚読んでいきたいず思いたす。たた他にもいい曞籍を読みたしたらご玹介できればず思っおいたす。 参考 qiita.com gihyo.jp