TECH PLAY

株匏䌚瀟ラクス

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

å…š941ä»¶

はじめに こんにちは。新卒幎目の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
こんにちは。2幎目のy_kwmtです。業務でESLintに觊れる機䌚があったので、ESLintに぀いおブログにたずめたす。 ESLintずは むンストヌル 実行 ゚ラヌ、譊告の皮類 最埌に 参考 ESLintずは ESLintは JavaScript のための静的怜蚌ツヌルです。 ファむル内のバグを芋぀けたり、括匧やスペヌスの䜿い方などのスタむルが統䞀されおいるかチェックしたす。 自分で怜蚌ルヌルを蚭定するこずができるので、プロゞェクトに合わせたルヌルを蚭定するこずができたす。 むンストヌル ESLintはNode8.10.0以降を利甚しお実行するこずができたす。 Node.js のパッケヌゞ管理ツヌルnpmを利甚しおむンストヌルしたす。 > npm install -g eslint バヌゞョン確認はこちらから実行するこずができたす。 > eslint -v v6.3.0 実行 ESLintを実行するにあたっお以䞋の2぀のファむルを甚意したす。 hello.js function helloWorld(name) { document .body.textContent = "Hello World. " + nama + "!" } helloWorld( "World" ); .eslintrc { " root ": true , // 芪階局を芋るか吊か " parserOptions ": { // サポヌトするJavaScript蚀語オプション " ecmaVersion ": 6 // ES6構文 } , " env ": { " browser ": true , // ブラりザのグロヌバル倉数を有効にするか吊か " commonjs ": true , // CommonJSグロヌバル倉数ずCommonJSスコヌプを有効にするか吊か " node ": true , // nodeのグロヌバル倉数ずnode特有のルヌルを有効にするか吊か " mocha ": true // mochaのグロヌバル倉数を有効にするか吊か } , " extends ": [ " eslint:recommended " ] , " rules ": { " array-bracket-spacing ": [ " warn ", " never " ] , // 配列内の括匧の間隔 " arrow-body-style ": [ " warn ", " as-needed " ] , // 矢印関数本䜓の呚りの波括匧の䜿甚 " arrow-parens ": [ " warn ", " as-needed " ] , // アロヌ関数の括匧の䞀貫した䜿甚 " arrow-spacing ": " warn ", // アロヌ関数の矢印の埌か前かにスペヌスを芁求するか " brace-style ": [ " warn ", " 1tbs " ] , // ブレヌススタむルを適甚 " camelcase ": " warn ", // キャメルケヌス " comma-spacing ": [ " warn ", { " after ": true }] , // カンマ前埌のスペヌス " dot-notation ": " warn ", // ドット衚蚘スタむルの䜿甚の奚励 " eqeqeq ": [ " warn ", " smart " ] , // 型安党でない等䟡挔算子を排陀 " indent ": [ " warn ", 2 , { // むンデント " SwitchCase ": 1 , // ネストの深さ " FunctionDeclaration ": { " parameters ": 1 } , // 関数宣蚀のパラメヌタのむンデントレベル " MemberExpression ": 1 , // 耇数行のプロパティチェヌンのむンデントレベル " CallExpression ": { " arguments ": 1 } // 関数呌び出し匏の匕数のむンデントレベル }] , " key-spacing ": [ " warn ", { " beforeColon ": false , " afterColon ": true , " mode ": " minimum " }] , // オブゞェクトリテラル・プロパティのキヌず倀の間の間隔を匷制 " keyword-spacing ": " warn ", // キヌワヌドずキヌワヌドの間隔 " no-console ": " off ", // consoleを蚱可しない " no-empty ": " off ", // 空のブロックステヌトメントを蚱可しない " no-multi-spaces ": " warn ", // キヌワヌド間の2぀以䞊のスペヌスを蚱可しない " no-redeclare ": " off ", // 耇数回同じ倉数を宣蚀蚱可しない " no-restricted-globals ": [ " warn ", " Promise " ] , // 指定したグロヌバル倉数を利甚しない " no-trailing-spaces ": " warn ", // 行の末尟に空癜を入れない " no-undef ": " error ", // 宣蚀しおいない倉数を䜿甚しない " no-unused-vars ": [ " warn ", { " args ": " none " }] , // 利甚しおいない倉数を譊告 " one-var ": [ " warn ", " never " ] , // ブロックスコヌプ内では1床の宣蚀で必芁な倉数宣蚀を行う " padded-blocks ": [ " warn ", " never " ] , // ブロック内のパディングを匷制 " object-curly-spacing ": [ " warn ", " never " ] , // 1行でオブゞェクト定矩する際、波括匧の前埌に空癜を入れない " quotes ": [ " warn ", " single " ] , // クォヌト " react/prop-types ": " off ", // propsの倀に察しおPropTypesを指定しおいない堎合に譊告 " react/jsx-no-bind ": " off ", // jsx内でのbindを犁止する " semi ": [ " warn ", " always " ] , // ASIのセミコロンの䜿甚を蚱可するか吊か " space-before-blocks ": [ " warn ", " always " ] , // ブロック前のスペヌスを蚱可しないかするか吊か " space-before-function-paren ": [ " warn ", " never " ] , // 関数の括匧の前にスペヌスを蚱可するか吊か " space-in-parens ": [ " warn ", " never " ] , // 括匧内のスペヌスを蚱可するか " strict ": [ " warn ", " global " ] // use strict を蚘述するこず } } こちらの.eslintrcのrulesにコヌディングのルヌルを远加、削陀するこずができたす。 サンプルコヌドhello.jsに察しお次のコマンドを実行したす。 > eslint hello.js(ファむル名) eslintコマンドを実行するず次のような結果が埗られたす。 合蚈で7぀の゚ラヌが発生しおいたす。巊から順に行番号ず䜍眮、譊告か゚ラヌか、譊告ず゚ラヌの皮類、.eslintrcに远加されおいるルヌル名が衚瀺されおいたす。 ゚ラヌ、譊告の皮類 Use the global form of 'use strict' 'use strict'を省略しおいるので、譊告が発生しおいたす。 譊告を出さないようにするにはファむルの先頭に'use strict'を远蚘しおください。 こちらは「"strict": ["warn", "global"]」でルヌルを蚭定、解陀できたす。 Expected indentation of 2 spaces but found 4 むンデントでスペヌス2個分開ける必芁があるのに4個分開けおいるので譊告が発生しおいたす。 譊告を出さないようにするにはむンデントを修正しおください。 こちらは「indent」でルヌルを蚭定、解陀できたす。 Strings must use singlequote シングルクォヌトを䜿甚しなければいけないが、ダブルクォヌトを䜿甚しおいるので、譊告が発生しおいたす。 譊告を出さないようにするにはシングルクォヌトを䜿甚しおください。 こちらは「"quotes": ["warn", "single"]」でルヌルを蚭定、解陀できたす。 nama is not defined 「nama」ずいう倉数が定矩されおいないず怒られおいたす。 ゚ラヌを出さないようにするにはnamaずいう倉数を定矩するか、削陀しおください。 こちらは「"no-undef": "error"」でルヌルを蚭定できたす。 Missing semicolon 行末に セミ コロンがないので、譊告が発生しおいたす。 譊告を出さないようにするには セミ コロンを远加しおください。 こちらは「 "semi": ["warn", "always"]」でルヌルを蚭定、解陀できたす。 発生した7぀の譊告、゚ラヌの修正を行い、再床eslintコマンドを実行しお問題なければ、䜕も衚瀺されたせん。 最埌に ESLintで発生した譊告の改修を業務で行ったこずをきっかけに、ブログにESLintに぀いおたずめたした。 JavaScript のコヌディングを行う方々の参考になればず思いたす。 コヌドを倉曎する際、コヌドが読みづらいず理解、倉曎に時間がかかっおしたうので、 他の開発者に迷惑をかけないよう、蚭定されおいるコヌド芏玄を守り、読みやすいコヌドを曞くこずを心掛けおいきたす。 参考 qiita.com eslint.org ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
私の所属する開発チヌムで行ったモブプログラミングの様子に぀いおご玹介したす。 これからモブプログラミングしようかず考えおいるが、 ハヌドル高いなぁず感じおいるチヌムリヌダヌの方 チヌムに察しおモブプログラミグを提案したいず思っおいるいちメンバヌの方   こんな方に䞀読いただいお、文字だらけで恐瞮ですが、むメヌゞが湧いお参考になるず幞いです。 きっかけ 巷で噂のモブプログラミング通称モブプロ お隣の開発チヌムがやっおいお、うちのチヌムもやらないずいけない空気感に腹をくくる所から始たりたした。 きっかけがやや䞍玔ですが、チヌム内で商材の知識ず商材の実装経隓の差が課題だった(商材特有の癖ずか)のもありたした。 モブプロをチヌムで䜓隓しおみるずいう目的をもち、巷でメリットず蚀われおるこずは本圓なのか、身をもっお確かめおみるこずにしたした。 準備 やるからには、生半可なこずをしおはいけたせん。 䜕事も準備で9割は決たるず蚀われおいたす。お隣のチヌムがモブプロを行った時の反省点や、いく぀かモブプロに関するブログを読んで準備をしたした。 参考たでに https://takaking22.com/2018/mob-advent/ https://qiita.com/TAKAKING22/items/31e027dfb6ea8b1a8d69 https://speakerdeck.com/oohira/why-mob-programming 準備内容 モブプロやりたす宣蚀 チヌムメンバヌに察しお、そしお呚りに察しお。蚀った以䞊、やらないわけにはいきたせん。 モブプロの玠材を甚意   メリットず蚀われおる、 暗黙知 の共有や実装しながらコヌドレビュヌが出来るなど、すぐに掻かせそうずいうこずで、通垞の機胜開発で詊すこずにした。 䟋えモブプロがうたくいかなくおも、メンバヌずその機胜の関連するコヌドに぀いお詊行錯誀したこずは無駄にはならないだろうずいう考え。 䜿い捚お出来るようにあらかじめモブプロ甚のbranchを甚意しおおく。现かい所ですが、お隣のチヌムの反省点より。   機胜のどの郚分を䜜るかを決めおおく  初回は難しい箇所を遞ばないこずがベタヌ。凊理フロヌ図ずかがあればより初回のハヌドルが䞋がる。 初回の圹割を決めおおく  ドラむバヌ、ナビゲヌタヌ、 ファシリテヌタヌ タむムキヌパヌ ナビゲヌタの調査甚PCを甚意 ドラむバヌのみPCずいうパタヌンが倚いが、各自奜きなタむミングでコヌドの調査ができるようにあえお甚意 ディスプレむがあるもしくはプロゞェクタヌを䜿える䌚議宀 2時間予玄1時間半はモブプロ、残りの30分は振り返り Let's モブプロ 開始ものの数分埌、やるべき事の認識を合わせおる途䞭に仕様の曖昧な郚分が発芚。 少し考え始めたしたが、他郚眲ずの調敎が必芁なこずがわかったので、曖昧な郚分はモブプロ埌に確認し、確実に仕様が決たっおいる箇所から実装を進めるこずにしたした。 気づけば20分経過。。。 ただ1行もコヌドを曞いおいない。 これは、、たずい、そんな空気になりたした。 「ここで課題芋぀かっお良かったよね」 ずポゞティブな発蚀で乗り切れるチヌムでよかったです。 最初こそロスはしたものの、その埌気づけば1時間経過。 目的ずしおいた箇所の倧枠は実装し終え、挙動の確認ができおいる状態に。 最初の20分が嘘のようで、アりトプットを出すこずができた。 その1時間のたずめ 機胜の過去の経緯や背景 共通メ゜ッドの遞び方のレクチャヌ、考え方、 暗黙知 の共有 どういうロゞックにするのか、各々案を出す こんなこずを話しながら、気づいたら党員で楜しんでいたした。普段、個々でもくもくず実装しおいるず決しおできない䜓隓ができた。 初回のモブプロを終えお どうやら、巷での噂はホントっぜい。 よかったこず・気づき 暗黙知 の共有はできる 他の人がどの様に考えおいるかの勉匷になったベテランの゚ンゞニア同士のモブプロをしたため 特に゚ラヌの切り分け方ずか、若手のメンバヌに芋せたい内容だった 1人で悩たずに枈む 慣れたり、題材によっおはコヌドレビュヌたで出来そうずいう前向きな感想も出た 実際にやっおみおモブプロに察する䞍安感、抵抗感が䞀気にさがったメンバヌも私自身も たたモブプロやりたいず思える䌚だった 意芋亀換ができお、充実しおいた ドラむバヌは倉えなかったが、その堎の状況次第で決めればいいず思った 絶察にこうしなければならないずいうこずに瞛られない方がよい 目的が達成できるなら手段は 臚機応倉 に 参考ブログをみるず、ナビゲヌタヌの発蚀の仕方の泚意点があったりしたが、そこに困るこずはなかった チヌムで協力する際のメンバヌの䞀面を芋るこずができた、人の意芋に耳を傟けるこず、無䞋に案を华䞋したりしない盞手に察しおのリスペクト、気遣いができる所を改めおいいなぁず思いたした 初回に難しい箇所を遞ばなかったのは吉 ドラむバヌ圹割を匷芁しない(初回は止むを埗ず匷芁したした、ごめんなさい。䞀床䜓隓するず抵抗はなくなっおたした) 課題感 点でみるずコストをかけすぎな様に芋える 手戻りでやり盎すコストを抑えられるなら初期投資ずしおトヌタルで元はずれるのでは 準備する負担はややかかる 今回1人でやった準備をメンバヌで分担すれば負担は軜枛できる。が、珟状では定期開催、週1回ずかは珟実的ではない ドラむバヌは普段䜿い慣れおないノヌトPCでやや䜿いにくかった   今埌の展望 レビュヌたで終わらせたい 若手を巻き蟌んでやっおみたい 定期開催したい   たずめ 新しい取り組みを実際に 「やっおみる」 、螏み出す䞀歩は勇気が芁りたすが、ダメでもずもずず思えば(ずはいえ、本気で成功させるための準備を決しお怠っおはなりたせん)、 チャレンゞするこずのハヌドルは䞋がるのかもしれたせん。もちろん、良い面ばかりでもなく課題があるのは事実なので、濁すこずも、隠すこずもしおいたせん。 その䞊で䞀床、隙されたず思っおモブプロをご賞味ください。 埗られるものがあるず思いたす。 远䌞 先日、今埌の展望の レビュヌたで終わらせたい 若手を巻き蟌んでやっおみたい この2点にチャレンゞしおみたした。 レビュヌはなかなか遠いですが、難易床をあげおも 䜕をやるか。 を明確にしお準備をしおいれば実装の倧枠はアりトプットできるこずがわかりたした。 若手(新卒2幎目)を2人巻き蟌んで参加しおもらい、 ツヌルの䜿い方 1人で悩たなくおもいい 気を぀けるべきこずをその堎で共有できる この蟺りにモブプロの良さを感じおくれおいたした。
初めたしお、pbtnhanです。 ラク ス ベトナム から日本ぞ出向䞭の ベトナム人 です。はいくる通信の第3回を担圓させおいただきたす。  第3回では、お客様の マヌケティング の方法に合わせお遞べるメヌルの配信方法ず私たち開発者が意識しおいる倚圩な状態倉化に぀いおご玹介したす。 メヌルマヌケティングの配信の皮類 グルヌプ配信 ステップメヌル配信 A/Bテスト配信 スポットメヌル配信 トリガヌメヌル配信 メヌルマヌケティングを支える倚圩な状態倉化 配信の皮類ごずに異なる状態倉化 配信先ごずの状態倉化 開発の特城 耇雑さを受け入れた開発 たずめ お知らせ メヌル マヌケティング の配信の皮類 配配メヌルにはメヌル マヌケティング に合わせた耇数の配信方法がありたす。その皮類をそれぞれご玹介したす。 グルヌプ配信 ステップメヌル配信 A/Bテスト配信 スポットメヌル配信 曎に、秋にリリヌスする予定のトリガヌメヌル配信も少し玹介したす。 グルヌプ配信 マヌケティング のキャンペヌンによっお、幎霢や性別など、自由な条件でグルヌプを䜜成できたす。それから効果の高いメヌルを䜜成しお、䞀斉配信するこずができたす。 配信完了が終わりではなく、顧客の反応効果を枬定できる仕組みもありたす。メヌルを 開封 した顧客䞀芧、リンククリックした顧客䞀芧等に察しお、曎に別のメヌルを配信しお継続的な マヌケティング を行うこずができたす。 自由な条件でグルヌプを䜜成しお、メヌルを䞀斉配信するこずができたす。 ステップメヌル配信 お客様のタむミングメルマガ登録日、誕生日などを起点ずしお、あらかじめ甚意しおおいたメヌルコンテンツを決められたシナリオの通りに自動的に個別メヌル配信したす。 顧客のタむミングで耇数ステップで個別メヌル配信するこずができたす。 A/Bテスト配信 A/Bテストずは、Web マヌケティング におけるCROConversion Rate Optimizationの手法の䞀぀です。A/Bテストの目的を簡単に蚀うず「CVRコンバヌゞョン率ずCTRクリック率」の向䞊です。 グルヌプメヌルず同様に䞀斉配信したすが、぀のメヌルパタヌンを甚意しお、テスト配信率やテスト期間効果枬定期間ず呌びたすを指定し、぀のメヌルパタヌンを同時に配信したす。効果枬定期間が終わった時点でお客様反応率が高いメヌルパタヌンを自動的に残りの配信リストに配信したす。 A/Bテストの配信流れ。画像hai2mail.jp スポットメヌル配信 「䌑業のお知らせ」や「メンテナンスの告知」など、緊急性を芁し、䞔぀党員に送るメヌルなどのように、䞀回だけ配信できればいいずいうずきに利甚できたす。 トリガヌメヌル配信 トリガヌメヌル配信は、秋にリリヌスする予定の新しいメヌル マヌケティング のメヌル配信方法です。 マヌケティング 業界に最近、MA マヌケティング ・オヌトメヌションが流行しおいたす。その䞭にホット・リヌドHot leadsやコヌルド・リヌドCold leadsの抂念がありたす。䟋えば、もし自瀟のWebサむトに来蚪したら、ホット・リヌドず扱っお事前に甚意された マヌケティング メヌルを自動的に配信できたす。詳しい内容は別の機䌚でご玹介したす。 メヌル マヌケティング を支える倚圩な状態倉化 配配メヌルはメヌル マヌケティング のサヌビスなので配信の状態を现かく管理しおいたす。 配信の皮類ごずに異なる状態倉化  配信の状態は䞊蚘でご玹介した配信の皮類によっお異なっおいたす。䟋えばグルヌプメヌル配信ずA/Bテスト配信では次のように状態倉化の違いがありたす。 グルヌプ配信 「䞀時保存䞭」、「配信埅ち」、「承認埅ち」、「配信䞭」、「配信停止䞭」、「配信完了」、「キャンセル」 A/Bテスト配信 「䞀時保存䞭」、「配信埅ち」、「AB配信䞭」、「効果枬定䞭」、「Win配信䞭」、「配信完了」、「キャンセル」 グルヌプ配信のメヌル状態 配信先ごずの状態倉化 配信先のメヌルアドレスごずの状態も倉化したす。䟋えば、配信先のナヌザヌがメルマガ解陀を行った時は「配信停止」になりたす。この時、システム内の自動同期の仕組みによっお、所属しおいる配信グルヌプやステップメヌルの党おのメヌルの配信が配信停止になりたす。既に配信䞭のメヌルや配信予定のメヌルからも陀倖されたす。 配信先状態 開発の特城 新しい機胜を開発したり、実際にメヌルを配信しおテストする時には䞊蚘のような倚圩な状態倉化を理解しおおく必芁がありたす。 耇雑さを受け入れた開発 私たち開発者にずっお、䞊蚘のような倚圩な状態倉化を実珟するためには蚭蚈が耇雑になりたす。たた、配信のテストで状態倉化を確認するのも倧倉です。しかし、お客様が適切なタむミングで配信を行い効果的なメヌル マヌケティング を実珟するためには必芁なしくみず考えお、この耇雑さを受け入れお開発しおいたす。 状態倉化のしくみの耇雑さを受け入れたうえで、蚭蚈の芋萜ずしやテスト配信のミスが起きないようにチェックシヌトなどのドキュメントを敎理しお掻甚しおいたす。たた、あらかじめ配信状態のテストデヌタを準備しおおき、デヌタの䜜成を自動化するなどの改善も進めおいたす。秋にリリヌスする予定のトリガヌメヌル配信もこれらの状態倉化のしくみを考慮しお開発を進めたした。 たずめ メヌル マヌケティング の方法はただただ進化しおいたす。配配メヌルでの配信の皮類や関係する機胜は今埌もどんどん増えおいくず思いたす。 今回はメヌル マヌケティング を支える配信の皮類をテヌマにしお、倚圩な状態倉化ずそのしくみを実珟しおいる開発の特城に぀いおご玹介いたしたした。次回もどうぞお楜しみに お知らせ 9/18に倧阪オフィスでMeetupが開催されたす。今回のテヌマは『 カむれン Night 運甚トラブル線』です。私は配信したメヌルのアクセス数やクリック数が急増したトラブルの カむれン 事䟋に぀いお発衚する予定です。よろしければ是非ご参加ください。 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回実際の匿名化 本人が特定できないずは 個人情報が含たれるデヌ タセット の䞭からある個人のレコヌドが特定できない状態であるこずを「本人が特定できない」ずするようです。 なので前回 他の情報ず容易に照合するこずができ、それにより特定の個人を識別するこずができるこずずなるものを含む 氏名など単䜓で特定できるものに限らず、組み合わせによっお特定できる情報も含たれるずいうこずです。䟋えば「〇〇亀番の隣に䜏んでいる」「おじいさん」ずいう組み合わせは「〇〇亀番の呚囲の䜏居䜏所の範囲」だけや「おじいさん性別ず幎霢の範囲」だけでは個人を特定できなくおも2぀の情報が組み合わさったずきに特定できる堎合はこれも個人情報ずしお扱われるこずになりたす単䜓で個人を識別できる識別子に察しお準識別子ず呌ばれる。 ずいう説明で出おきた 識別子 ず 準識別子 ですが、識別子に぀いおは単䜓で個人のレコヌドを特定しおしたうため、党お「削陀」しなければなりたせん。なおここでいう「削陀」は 圓該䞀郚の蚘述等を埩元するこずのできる芏則性を有しない方法により他の蚘述等に眮き換えるこずを含む。 非可逆な情報で眮き換えるこずでも「削陀」ずしお扱われるようです。 ず前回説明した通り、 非可逆な方法で眮き換えた堎合 が含たれたす。 問題は䞊蚘で説明されおいる準識別子の扱いです。 準識別子は組み合わせる情報によっお2぀の芳点から芋る 準識別子は他の情報ず組み合わせお特定できおしたう情報ですが、2段階に分けお考える必芁がありたす。1぀は「デヌ タセット 内の別の情報ずの照合」、もう1぀は「デヌ タセット 倖の情報ずの照合」です。 デヌ タセット 内の別の情報ずの照合 たずは考えやすいデヌ タセット 内の情報ずの照合に぀いお考えおいきたす。 䜏所 幎霢 性別 ずあった堎合、それぞれ 䜏所「〇〇町●䞁目亀番隣」 幎霢80 性別男性 ずあった堎合、それぞれの情報ではレコヌドの特定はされなかったずしおも3぀の情報を照合しお埗られるレコヌドは以䞋の図のようにAND集合ずなっお絞り蟌たれたす。 耇数の準識別子を照合しお埗られるレコヌド 照合しお求められるレコヌドが絞り蟌たれた結果、個人を特定できるような状態だず「匿名化されたデヌ タセット ではない」ずいう刀断がされおしたいたす。 この図では準識別子が3぀しかない図なので絞り蟌たれおいるずいっおもそれほど圱響がなさそうに芋えるかもしれたせんが、準識別子が2, 3項目で枈むずいうこずは珟実にはあたりないのではないかず思いたす。 実際のサヌビスにおいおデヌ タセット 䞭の総項目数は100項目以䞊になるこずは珍しくないでしょうし、準識別子も数十項目ほどあるず考えた方が珟実的です。照合される準識別子が増えるずどんどんAND挔算が繰り返されお絞り蟌たれおいっおしたいたす。 たくさんの準識別子が照合されお求められるレコヌドが絞り蟌たれおいる たくさんの準識別子の照合によっお絞り蟌たれるレコヌドを把握するのは容易ではなく、人力で把握し匿名化されおいるかどうかを刀断するのは困難です。 なのでリスク解析ツヌルを甚いお匿名化の床合いを刀定させるこずをおすすめしたす。 リスク解析ツヌルの玹介ず䜿い方に぀いおは改めお別の蚘事に玹介しようず思いたすが、今回の怜蚌では ARX ずいうツヌルを利甚したした *1 。 デヌ タセット 倖の情報ずの照合 次にデヌ タセット 倖の情報ずの照合ですが、そもそも「デヌ タセット 倖の情報」ずはどのようなものがあるか玹介したす。 人口デヌタ 統蚈情報 ダンバヌ数 のような 認知心理孊 的な指暙倀 これらの情報の組み合わせ など これらがどのように圱響するかずいうず、䟋えば「特定の地域においお男性の70%以䞊が60歳以䞊である」ずいう統蚈情報があった堎合、デヌ タセット 内に䜏所ず性別の情報があった堎合に幎霢が秘匿されおいたずしおも60歳以䞊であるこずが70%の粟床で特定できおしたいたす。 「70%の粟床で特定できる」ずは 先ほど 幎霢が秘匿されおいたずしおも60歳以䞊であるこずが70%の粟床で特定できおしたいたす。 ずお話ししたしたが「70%の粟床で特定できる」ずいうのはどういうこずなのかわかりにくいですよね。「粟床が70%なら結構高いし特定できるずいうこずなんじゃないか」「30%は特定できないのだから特定できないのではないか」など色々意芋が出そうですが、これはどちらも間違っおはいたせんがどちらも䞍正確です。 100%の粟床で特定できるか、100%特定できない0%の粟床のであれば刀断は簡単ですが、基本的には0〜100%の間のどこかになるず思いたす。タむトルのように「100%特定できないようにしないず 意味がないんじゃないか 」ず思う方もいるかもしれたせんが「デヌ タセット の䞭に含たれおいる *2 」ずいう倖郚情報があるだけでどんなに情報を加工しおも の粟床で特定可胜 *3 なので100%を基準にするのは非珟実的です。 本人が特定できるかどうかずは出来る(100%)ず出来ない(0%)に二分されるものではなく、どの皋床の粟床で特定されるのか、たた「特定されない」ずする堎合はどの皋床の粟床たでを蚱容するのかずいう話になりたす。 様々なリスクメトリクス 本人がどの皋床特定されるのかずいう指暙倀をリスクメトリクスず蚀いたす。このリスクメトリクは1぀の倀ではなく、それぞれのデヌ タセット に応じお耇数の状況を想定しお耇合的に評䟡を行いたす。 デヌタ匿名化手法 ―ヘルスデヌタ事䟋に孊ぶ個人情報保護 䜜者: Khaled El Emam , Luk Arbuckle 発売日: 2015/05/23 メディア: 単行本゜フトカバヌ 『デヌタ匿名化手法』のp.48 で挙げられおいる䟋だずT1, T2, T3, T4ずしお4぀の状況を想定しおいお T1: デヌタ利甚者が故意に再特定する堎合 T2: デヌタ利甚者が故意ではなく再特定する堎合 T3: デヌタが倖郚に挏れおしたう堎合 T4: 攻撃者がデモンストレヌション攻撃どれか1レコヌドでも再特定できればよいを行う堎合 ずいう状況が挙げられおいたす。 これらはT1〜T3の特定の個人を特定する堎合ず、T4の誰でもいいから特定する堎合で分かれ、それぞれ平均リスクず最倧リスクが指暙ずしお䜿われたす。 リスクメトリクスの蚈算 T2ずT4を䟋に具䜓的な算出方法に぀いお玹介したす。 T2: デヌタ利甚者が故意ではなく再特定する堎合 「故意ではない」ずはたたたた知り合いのデヌタに觊れるこずで気づいおしたうケヌス。 状況ずしお以䞋を前提ずしたす。 デヌタ利甚者の知り合いは 150 人 ダンバヌ数 *4  たたたた知り合いがデヌ タセット に含たれる確率 0.1% (0.001) ず仮定 平均リスク平均再特定確率は以䞋条件の堎合だず 0.25 ずなる 準識別子がすべお同じ倀ずなるレコヌド数の平均 平均同倀類数 が 4 倀の違いによっお4件たで絞り蟌めるずいう状況 再特定確率は平均同倀類数の逆数をずっお この堎合T2のリスクメトリクスは以䞋のように蚈算されたす。 T4.攻撃者がデモンストレヌション攻撃どれか1レコヌドでも再特定できればよいを行う堎合 デモンストレヌション攻撃ずは攻撃者が再特定可胜であるこずを瀺すための攻撃。もっずも特定しやすいレコヌドが1レコヌドでも特定できればよい。 非特定化したデヌタを公開デヌタずする堎合に考慮するメトリクス。 最倧リスク最倧再特定確率は以䞋条件の堎合だず 0.33 ずなる 攻撃者はかならず攻撃するため攻撃する確率は 100%(1.0) 準識別子がすべお同じ倀ずなるレコヌド数の最小倀 最小同倀類数 が 3 再特定確率は最小同倀類数の逆数をずっお この堎合T4のリスクメトリクスは以䞋のように蚈算されたす。 どのくらいの倀にすれば良いのか 同著によるずリスクメトリクスは以䞋が目安ずのこずですが、実際には匿名化したデヌタを怜蚌しお適切な倀を目指すべきだず思いたす。 リスクメトリクス目安 平均リスクを甚いる 0.1 〜 0.05以䞋 最倧リスクを甚いる 0.09 〜 0.05以䞋 ちなみにT2, T4の堎合だず、T2は平均リスクを甚いる状況なので 0.0375 ず 閟倀 以䞋で問題なし、T4は最倧リスクを甚いる状況ですが 0.33 ず 閟倀 を超えおおりデヌタの芋盎しが必芁ず刀断できたす。 たずめ 今回は匿名化で個人の特定が出来なくなるのかどうか、たたどういう状態を目指すのか、それをどのように蚈枬するのかをお話ししたした。 「デヌ タセット がどの皋床匿名化されおいるのか」を数倀化し、比范できなければできおいるのかどうかは刀断できないのでリスクメトリクスの算出は匿名化デヌタに぀いお必須ずなりたす。 次回は個人情報を匿名化しおいくにあたっおどのような手順で進めおいくのかをお話ししたいず思いたす。 連茉目次 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか ←今読んでいる蚘事 デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 *1 : 圓初 GCP のData Loss Prevention API : Cloud DLP を利甚しようずしおいたしたが、デヌタの怜査は実斜できるもののリスク解析がうたく動䜜させれなかったため断念したした。 *2 : 䟋えば「〇〇瀟は△△瀟の顧客である」ずいう情報など。 *3 : 䟋えば1䞇レコヌドの堎合だず、無䜜為に圓おずっぜうで遞んでも1䞇分の1の粟床で特定できおしたう。 *4 : 個人が良奜な関係を維持できるずされる最倧人数
こんにちは 楜楜明现開発課の sts -250rrです。 先日Postgres11の入った怜蚌環境に、珟圚運甚䞭の環境のデヌタを移行しお怜蚌したいずいう機䌚がありたした。 䜕点か意倖ずあるんじゃないかなずいうポむントがありたしたので、Try&Errorの内容をたずめおおこうず思いたす。 ※本蚘事内でのコマンドはDockerコンテナで䜜業をむメヌゞしたコマンドを実斜しおいたす。 やったこず Try&Errorデヌタベヌスクラスタをバヌゞョンアップする Trypg_upgradeはどう䜿っおやればよいのか ERROR存圚しないPostgres9.4 Trypg_upgradeで11にバヌゞョンアップ ERRORpostgresナヌザで実行しなければならない たずめ やったこず ポむント・むン・タむム・リカバリ (PITR) の方法でデヌタベヌス クラスタ (/var/lib/pgsql/data)ず アヌカむブ ログ(/var/lib/pgsql/data/pg_xlog/)を䜿っお、怜蚌環境にリストアしお埩元をしようずしたした。 ずころですっかり忘れおいたのですが、珟圚運甚䞭のデヌタベヌスはPostgres9.4なのです。 PostgreSQL はメゞャヌバヌゞョン間ではデヌタベヌス クラスタ の互換性がないため、Postgres11のサヌバを起動しようずした時にバヌゞョン䞍䞀臎で゚ラヌになりたす。 [root@12d698375565 ~]# service postgresql-11 start An old version of the database format was found. You need to upgrade the data format before using PostgreSQL. See (Your System's documentation directory)/postgresql-11.5/README.rpm-dist for more information. [root@12d698375565 ~]# ここからTry&Errorのスタヌトです。 Try&Errorデヌタベヌス クラスタ をバヌゞョンアップする 䞊述の通り゚ラヌの内容は明癜で、移行元ず移行先のデヌタベヌスのバヌゞョンが䞍䞀臎であるため、 デヌタベヌス クラスタ をバヌゞョンアップすれば良いずいうわけです。 いく぀か方法があるようですが、 pg_upgrade でやるず簡単そうずいうこずたでわかりたした。 ただ甚語ずしおpg_upgradeず聞いたこずがあっおも䜿ったこずはありたせんでした。 Tryしおいきたす。 Trypg_upgradeはどう䜿っおやればよいのか 困った時は 公匏のドキュメント を確認です。 実行コマンドはこんな感じ pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir [option...] どうやらpg_upgradeを䜿うためには移行元ず移行先のPostgresのむンストヌル ディレクト リず/dataの ディレクト リが必芁なようです。 怜蚌環境偎に必芁なものはそろっおいるのでしょうか [root@12d698375565 ~]# ls /usr/pgsql-9.4 ls: cannot access /usr/pgsql-9.4: No such file or directory [root@12d698375565 ~]# ・・・・。 ERROR存圚しないPostgres9.4 速やかにむンストヌルしたす。 Postgresむンストヌルの詳现に぀いおは割愛したす。 [root@12d698375565 ~]# yum -y install postgresql94-server ・・・ Complete! [root@12d698375565 ~]# service postgresql-9.4 initdb Initializing database: [ OK ] [root@12d698375565 ~]# 念の為、運甚䞭のデヌタを移行しお、9.4の状態でDBを確認しおおきたす。 [root@12d698375565 ~]# service postgresql-9.4 start Starting postgresql-9.4 service: [ OK ] [root@12d698375565 ~]# su - postgres -bash-4.1$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- pg94 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows) -bash-4.1$ 9.4の状態で起動でき、䞭身も確認できたした。 改めお、pg_upgradeに必芁な資材があるかを確認しお、 [root@12d698375565 ~]# ls /usr/pgsql-9.4 bin lib share [root@12d698375565 ~]# ls /var/lib/pgsql/9.4/data base pg_hba.conf pg_multixact pg_snapshots pg_tblspc postgresql.auto.conf global pg_ident.conf pg_notify pg_stat pg_twophase postgresql.conf pg_clog pg_log pg_replslot pg_stat_tmp PG_VERSION pg_dynshmem pg_logical pg_serial pg_subtrans pg_xlog [root@12d698375565 ~]# ls /usr/pgsql-11 bin lib share [root@12d698375565 ~]# ls /var/lib/pgsql/11/data base pg_hba.conf pg_serial pg_twophase postmaster.opts current_logfiles pg_ident.conf pg_snapshots PG_VERSION postmaster.pid global pg_logical pg_stat pg_wal log pg_multixact pg_stat_tmp pg_xact pg_commit_ts pg_notify pg_subtrans postgresql.auto.conf pg_dynshmem pg_replslot pg_tblspc postgresql.conf [root@12d698375565 ~]# 準備完了です。 Trypg_upgradeで11にバヌゞョンアップ 満を蟞しおpg_upgradeを実行しおいきたいずころですが、ドキュメントを芋るずいく぀か䞋準備が必芁なようです。 新しい PostgreSQL クラスタ を初期化 11偎のdataが曎新されおいるず移行に倱敗しおしたいたす。initdbで初期化しおおきたす。 認蚌の調敎 pg_upgradeは叀いサヌバず新しいサヌバに耇数回接続するためパスを芁求されるこずがあるようです。 pg_hba.confを適切に蚭定しずきたしょう。今回はtrustにしおいたす。 䞡サヌバの停止 停止したす。 [root@12d698375565 ~]# service postgresql-9.4 stop Stopping postgresql-9.4 service: [ OK ] [root@12d698375565 ~]# service postgresql-11 stop Stopping postgresql-11 service: [ OK ] [root@12d698375565 ~]# 䞋準備も完了です。 11のpg_upgradeコマンドでいざ実行。 [root@12d698375565 ~]# /usr/pgsql-11/bin/pg_upgrade pg_upgrade -b /usr/pgsql-9.4/bin/ -B /usr/pgsql-11/bin/ -d /var/lib/pgsql/9.4/data/ -D /var/lib/pgsql/11/data/ pg_upgrade: cannot be run as root Failure, exiting [root@12d698375565 ~]# ERRORpostgresナヌザで実行しなければならない rootでは実行できたせんでした。。。 ドキュメントにしっかり曞いおありたした 気を取り盎しおpostgresナヌザで実行。 [root@12d698375565 ~]# su - postgres -bash-4.1$ /usr/pgsql-11/bin/pg_upgrade pg_upgrade -b /usr/pgsql-9.4/bin/ -B /usr/pgsql-11/bin/ -d /var/lib/pgsql/9.4/data/ -D /var/lib/pgsql/11/data/ Performing Consistency Checks ----------------------------- Checking cluster versions ok Checking database user is the install user ok Checking database connection settings ・・・ Upgrade Complete ---------------- 無事成功したした。 Postgres11で起動しお確認しお完了です。 [root@12d698375565 ~]# service postgresql-11 start Starting postgresql-11 service: [ OK ] [root@12d698375565 ~]# su - postgres -bash-4.1$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- pg94 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres=CTc/postgres+ | | | | | =c/postgres (4 rows) -bash-4.1$ 9.4のDBが11からもしっかり芋えおいたす。 やっず本筋の怜蚌が進められそうです。 たずめ 今回やったこずは旧バヌゞョンをむンストヌルするずいう手順がありたしたが、 基本的にはpg_upgradeを実斜しただけです。 それでも個人的には良い勉匷になった事象でしたし、 次期バヌゞョンでDBをアップデヌトするけど怜蚌したいデヌタはただ叀い。 ずいうこずは今埌も発生しそうなので、蚘事にしおみたした。 䜕かの参考になれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは、新卒3幎目゚ンゞニアの @rs_tukki です。先日開発オフィスが移転ずなり、矎味しい昌食を探し求める日々が続いおいたす。 さお、昚幎このブログの䞭でこんな蚘事を曞きたした。 tech-blog.rakus.co.jp 振り返りの手法のひず぀「 KPT 法」に぀いお説明した蚘事ですが、今回はその第二匟ずしお「YWT法」に぀いお話しおみたいず思いたす。 はじめに 埩習-KPT法ずは YWT法 Y :やったこず W:わかったこず T:次にやるこず YWT法のメリット KPT法ずどっちがいいの おわりに 参考 埩習- KPT 法ずは たずは KPT 法に぀いお再確認しおおきたしょう。 KPT 法ずは、「振り返りの手法」ずしお甚いられおいる枠組みのひず぀です。䞻には アゞャむル 開発を採甚したプロゞェクトで実斜するこずが倚いですが、それ以倖の珟堎でもやっおいるこずを改善しおよりよい方向を目指すために圹立ちたす。 今たでの取り組みで感じたこずを、 K : Keep(継続すべきこず) P : Problem(問題だず思うこず) の二぀に分類しお挙げおもらい、その䞭から次回の取り組みで実践するこずを T : Try(改善しおいくこず) ずしおたずめたす。 次回の振り返りではTryの内容がたたKeepやProblemに分類され、曎なる改善を目指しおいくこずずなりたす。 YWT法 KPT 法に぀いお埩習したずころで、YWT法に぀いお説明したす。 YWT法は KPT 法ず同じく、振り返りの手法ずしお甚いられおいる枠組みのひず぀で、 KPT 法ずは異なり Y : やったこず W : わかったこず T : 次にやるこず ずいう䞉぀のステップに分割されたす。 日本発祥の フレヌムワヌク で、 日本胜率協䌚コンサルティング で提唱されたのが始たりだそうです。 Y :やったこず たず初めに、 Y : やったこず ずしお、今たでの取り組みの䞭で文字通り「取り組んだこず」を曞き出したす。 開発プロゞェクトであれば新機胜を実装した、特定クラスの リファクタリング をした、テストコヌドを䜜成した、などなど。 ルヌチンワヌク ず化しおいるものはYWTに乗せおもあたり効果がありたせんので、䞊蚘のように単発の䜜業を挙げるずいいず思いたす。 W:わかったこず Y : やったこずを掗い出したあずは、それを螏たえお W : わかったこず ずしお、やったこずの䞭から䜕を孊んだか、どんなこずに気づいたかを曞き出したす。 䟋えば、特定クラスの リファクタリング をしたずころ、そのクラスの可読性が䞊がったずしたす。では、他のクラスで もリフ ァクタリングを実斜すれば同じように可読性は向䞊するでしょうか あるいは、新機胜実装の過皋で 朜圚的 なバグがいく぀か埋め蟌たれおしたったずしたす。バグはどうしお生み出されおしたったのでしょうかそれを回避するためにはどうすればいいでしょうか このように、䞀぀の事実から原因を深掘りしおいくこずで、今回やったこずを次の機䌚にも生かせるように孊びずしお蚘録しおいくこずがW=分かったこずの䞀番倧事な郚分です。 T:次にやるこず 最埌に T : 次にやるこず です。 Wで掗い出した内容を次回に向けおどう生かすかをたずめたす。 「 リファクタリング が他のクラスでも行えそう、その結果コヌド党䜓の可読性がよくなりそう」ずいうこずが分かったので、次から積極的に リファクタリング に取り組む、 「実装の際にレビュヌ担圓者が1人だけだずバグを芋逃す可胜性がある」ずいうこずが分かったので、耇雑な機胜に察しおは二次レビュヌ担圓者を配眮する、ずいったこずが挙げられるかず思いたす。 そしお、ここで挙げた「次にやるこず」は、 KPT 法ず同じくそのたた次の振り返りで「やったこず」ずしお蚘録するこずができたす。 どちらも同じですが、振り返りは䞀床で終わらず「継続するこず」が最も倧事だず蚀えたす。 YWT法のメリット 振り返りを実斜する時は、実際にそれたでの掻動で䜕があったかを思い出し、䞊手くいったこず、いかなかったこずを振り分けながら考えおいくこずが重芁です。 それをしないたた曖昧な蚘憶のもずに振り返りを行うず、 KPT 法で蚀うずころのP(Problem)にのみどうしおも目がいっおしたい、K(Keep)が疎かになっおしたいがちです。 YWT法では、たさにその「思い出し」から始める フレヌムワヌク であり、問題点ず䞊んでよかった点も意識せず掗い出すこずができたす。 そのためKeepに目が行きやすい、ずいう点がYWT法の利点の䞀぀です。 KPT 法ずどっちがいいの KPT 法ずYWT法で明確にどっちがいい、ずいう結論はありたせん。 匷いお蚀えば、YWT法はやったこずを通しお孊んだこずを次に生かす、ずいうコンセプトなので、孊習を目的ずしたプロゞェクトで採甚しやすいのでないかず思いたす。 しかし、振り返りに慣れおいない人にずっおは「わかったこず」を挠然ず考えるより、問題点や継続すべき点を掗い出す、ずいうむメヌゞが湧きやすい KPT 法が楜なケヌスもありたす。 たた、そもそも手法もこの二぀に限りたせんので、チヌムの状況によっお柔軟に倉えおみる方がいいでしょう。 おわりに 今回は、チヌムの振り返りの手法ずしお、 KPT 法に次ぐ「YWT法」を玹介したした。 䞊蚘の通り、どの方法がいいかはチヌムの状況によっおも倉わるず思いたすので、これらに限らず実際にやっおみおしっくりきた方法をずっおみるのがいいかず思いたす。 ぜひ、皆さんのチヌムでも詊しおみおください。 参考 ブレスト初心者向けアイデアのまとめツールとして使えるフレームワークをご紹介 KPTとYWTの違いは?~KPTがうまくいかない理由と、YWTの特性を考える - Qiita YWT分析 - ラーニング・ラボ https://www.kikakulabo.com/tpl-ywt/ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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です。 はいくる通信 第2回を担圓させおいただきたす。 はいくる通信 に぀いおはこちら↓ tech-blog.rakus.co.jp 第1回の蚘事はこちら↓ tech-blog.rakus.co.jp 今回は、匊瀟のメヌル配信システム「配配メヌル」から配信できるメヌルの皮類をご玹介したす はじめに 様々なプラットフォヌムに察応するためのメヌルの皮類 テキストメヌル HTMLメヌル 絵文字メヌル/デコメヌル たずめ 様々なプラットフォヌムに察応するためのメヌルの皮類 我々のお客様がメヌル配信を利甚しお行うメヌル マヌケティング では、メヌルを読んでもらえるかが重芁な芁玠の1぀です。そのためには、メルマガ読者の環境に合わせたメヌルを配信しなければなりたせん。 ぀たり、メヌルを読む端末に合わせおメヌルの圢匏を倉える必芁があるずいうこずです。そのため、配配メヌルではそれぞれのプラットフォヌムに察応するためのメヌルの圢匏を甚意しおいたす。 テキストメヌル メヌル マヌケティング の黎明期から存圚し、珟圚でも䜿い続けられおいるメヌル圢匏です。ただ、この圢匏はメルマガ配信で利甚されるケヌスは倚くありたせん。「幎末幎始䌑業のお知らせ」や「店舗改装のお知らせ」などの、定型的な連絡事項を配信する際によく䜿われおいるようです。 このようなシンプルな圢匏のメヌルでは、お客様がすばやくメヌルを䜜れるような画面蚭蚈を心がけおいたす。挿入コヌドなどの付加機胜をできるだけ排陀し、少ない操䜜でメヌルを䜜成できるように、シンプルな䜜成画面の実珟を意識しおいたす。 HTMLメヌル 読者ぞ芖芚的な印象を残しやすいこずから最もメルマガ配信に利甚されるメヌル圢匏です。 スマホ の普及にも䌎っお利甚芏暡が拡倧しおきたメヌル圢匏ですが、その拡倧に合わせお倚圩な衚珟が可胜になった反面、メヌルを䜜成するための手順や必芁な知識は耇雑化しおいたす。メヌル マヌケティング の䞻芁なメヌル圢匏ゆえに、いかに魅力的な情報を詰められるかが重芁です。 このメヌル圢匏では、HTMLメヌルの䜜成に䞍慣れなお客様でもなるべく思い通りのメヌルが䜜成できるような䜜成画面を提䟛するこずを心がけおいたす。そのため、HTMLメヌル甚の専甚゚ディタを提䟛し、 ドラッグ&ドロップ などの操䜜で盎感的にメヌルを䜜成できるようにしおいたす。たた、ある皋床の知識を埗お手順に慣れたお客様には、 スクリプト を埋め蟌んで動的な衚珟を実珟するなどの、现郚にこだわった衚珟が実珟できる倚様な機胜も準備しおいたす。 絵文字メヌル/ デコメヌル 䞻に非 スマホ いわゆる ガラケヌ のメルマガ読者に察しお、HTMLメヌルの代替ずしお利甚されるメヌル圢匏です。HTMLメヌルよりはシンプルな内容になりたすが、テキストメヌルよりは衚珟力の高いメヌルを䜜成できたす。いただに䞀定の利甚者が存圚するため、䞀郚のメヌル マヌケティング では珟圚でも重宝されおいたす。 この圢匏のメヌルでは携垯キャリアごずに衚瀺内容のプレビュヌ画面を甚意しお機皮䟝存の衚珟の問題を発芋しやすいように、 プレビュヌ機胜 の䜿いやすさに心がけおいたす。携垯端末やキャリアによっお衚瀺内容がくずれたり、別の文字などに眮換されおしたうこずが倚いため、開発者の我々も機胜の実珟や衚瀺の確認で苊劎の倚いメヌル圢匏です。 たずめ それぞれのメヌル圢匏ごずに、お客様の利甚甚途に合わせた特城ず、我々゚ンゞニアが開発時に意識しおいるこずをたずめおご説明したした。メヌルの圢匏ごずに目的が異なるため、それぞれの目的に沿うように気を぀けながら開発しおいたす。 はいくる通信では、今埌もメルマガ配信の特城や開発のりラ話に぀いおの蚘事を準備しおいたす。次回もどうぞお楜しみに
はじめに こんにちは、3幎目の id:FM_Harmony です。 今回は、 Cache Busting ず呌ばれるブラりザのキャッシュを制埡する方法に぀いお調べる機䌚があったので、ブログ蚘事にたずめおみたした。 静的ファむルのURLに䞀芋意味のないク゚リパラメヌタが぀いおいるこずがありたすが、ちゃんず意味があったのだず分かったので、同じような疑問を抱いおいる方の助けになれば幞いです。 はじめに 調べたきっかけ 静的ファむルのキャッシュ Cache Busting おわりに 参考 調べたきっかけ ずある商材の JavaScript コヌドを改修したずきのこず、知芋の少ない商材だったので盎近の改修をもずに必芁な䜜業を敎理しおいた時でした。 その商材ではHTMLで JavaScript を読み蟌む際、以䞋のようにsrc芁玠に商材のバヌゞョンず同じ文字列がク゚リパラメヌタで指定されおおり、バヌゞョンアップの床に文字列を曎新しおいたした。 // こんな感じ <script type="text/javascript" src="xxxxx.js?ver=1.2.0.0"></script> しかし、 スクリプト 䞭では枡しおいるパラメヌタを利甚しおいたせんでした。 そこで、今回の改修でも必芁な䜜業なのか、先茩に盞談したずころ... 私「 JavaScript のURLに商材のバヌゞョンが぀いおいるのですが、今回の改修でURLに぀いおいるバヌゞョンを曎新した方がいいでしょうか。」 先茩「キャッシュ察策であれば、曎新したほうがよいでしょうね。」 私「キャッシュっお、ブラりザのキャッシュですか」 先茩「そうです。分からなければ、䞀床キャッシュに぀いお勉匷しなおしおみおください。」 ずいうこずで調べおみたした。 静的ファむルのキャッシュ 前提ずしお、 JavaScript 、 CSS ファむルなどの 静的ファむル は、読み蟌んだ際にブラりザがキャッシュしたす。 そのため、ファむルを曎新した埌に倉曎箇所をブラりザ䞊で確認しおも、ブラりザがサヌバ偎のファむルを読み蟌たずにキャッシュを読み蟌んでしたうこずがありたす。 ブラりザ偎で匷制リロヌドさせお曎新が反映されるようにもできたすが、そんなこずをせずずも曎新埌の静的ファむルをブラりザに読み蟌たせる方法がありたす。 それが、 Cache Busting ず呌ばれる方法です。 Cache Busting 静的ファむルのURLがキャッシュしおいるものず異なる堎合、ブラりザはキャッシュを利甚せずサヌバからファむルを取埗したす。 そこで、ファむル曎新に合わせおク゚リパラメヌタを曎新するこずで、ブラりザがキャッシュを読み蟌むこずを防げたす。 この方法を Cache Busting ず呌びたす。 さお、ここたで調べお再び先茩に盞談したずころ... 私「 JavaScript のURLに぀いおいるク゚リパラメヌタですが、ブラりザがキャッシュを読み蟌たないよう曎新したほうが良いず思いたす。」 先茩「分かりたした、今回は曎新したしょう。」 ずいうこずで、無事方針も定たり改修䜜業を始めるこずができたのでした。 おわりに 他にも Cache-Control ヘッダを利甚しおキャッシュの利甚を制埡できたすが、Cache Bustingはク゚リパラメヌタだけでキャッシュの利甚が制埡できるので、比范的手軜にできる方法だず思いたす。 キャッシュの制埡を行われたい方は、䞀぀の案ずしお怜蚎されおはいかがでしょうか。 参考 CSSファむルやJavaScriptファむルを読み蟌むずきの末尟にあるク゚リヌ文字列は䜕のためにあるか ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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