9月 2019|sitateru tech blog

sitateru tech blog

シタテルの技術やエンジニアの取り組みを紹介するテックブログです。

2019年9月9日月曜日

SQLをつかってJSONで格納されたデータを検索してみた

こんにちは!

シタテルでエンジニアをしている建山です。

今回は、データベース(MySQL)にJSON形式で格納されているデータをSQLで検索する方法を紹介します。
シタテルでは、AWS上のデータベースに蓄積されたデータをredashというツールを使い、SQLでデータ抽出したあと、データ分析できるようになっています。

やりかた

今回はMySQLの


たとえば、格納データが以下の2レコードあったとします。

{"maxCount":1000,"targets":{"ladies":false,"mens":true,"kids":false,"baby":false}}

{"maxCount":50,"targets":{"ladies":true,"mens":false,"kids":false,"baby":false}}


ここで、maxCountが50のデータを検索したいときは、
JSON_EXTRACTを使用し、以下のように抽出できます。(テーブル名:table_a、JSON格納カラム名:detail)

select * from table_a where JSON_EXTRACT(detail, '$.maxCount') = 50


targetsのladiesがtrueの検索をしたいときは、以下のようになります。

select * from tablename where JSON_EXTRACT(detail, '$.targets.ladies') = true


# 感想
このように、```$.

のあとに、キーの名前を指定してあげれば、かんたんに、jsonが格納してあるカラムの中身を検索することができます。(表示の記述方法も同じ)

公式のドキュメントはこの辺あたりのようです。
https://dev.mysql.com/doc/refman/5.7/en/json.html

他にもいくつか関数があるようなので、いろいろ試してみたら、いいSQL+JSONライフが送れるかも知れません!

簡単ではありましたが、ご紹介でした!

RPA触ってみた

どうもお久しぶりです。シタテルの朝野です。

突然ですがRPAってご存知でしょうか?私は数週間前にまともに知りました🙄
"Robotic Process Automation" の略で、PC上での作業をソフトウェアロボットが行うよう自動化することです。

現在私のいるDevOpsチームでは単純な作業を自動化して時間と手間を節約できないかという取り組みを少しずつ進めています。
そんな中でRPAというものの存在を知り、簡単に無償で導入できるものを試してみたので、サンプルと共に紹介します。

今回やってみたサンプルは、シタテルの「マイアトリエ」をブラウザで開いてログインするというものです。
(※サンプル内のメールアドレスとパスワードはダミーの値です)

Javascript for Automation

MacOS Yosemite以降で使用可能なスクリプト言語です。
サンプルコードはこのようになります。

const DELAY = 3;
const Chrome = Application("Google Chrome");

const window = Chrome.windows[0];
const tab = Chrome.Tab({
  url: 'https://atelier.sitateru.com/login'
});
window.tabs.push(tab);

delay(DELAY);

inputText(tab, 'email', 'sample@sitateru.sample');
inputText(tab, 'password', 'sample_password');
submit(tab);

function inputText(tab, elementId, value) {
  tab.execute({ javascript: "document.getElementById('" + elementId + "').value =`" + value + "`;" });
}

function submit(tab) {
  tab.execute({ javascript: "document.forms[0].submit();" });
}

ブラウザ上での入力やクリックはjavascriptをブラウザ内で走らせることで行っています。

実行はコマンドで $ osascript -l JavaScript sample.js と打つだけです。
JavaScriptを書いてコマンド実行なので、RPAわからんけどJavaScriptチョットワカル!という私のような者にはありがたいです。

エンジニアで使う分にはハードルが低いと思うのですが、ノンプログラマーやMac使わない人がいると導入しにくそうなのが難点でしょうか。

SikuliX

http://sikulix.com/

JavaがあればWindowsでもMacでもLinuxでも使えるOSSのRPAアプリケーションです。
IDEを立ち上げて自動化プログラムを作成・実行します。

サンプルコード(コードと言っていいのかわかりませんが)はこのようになります。

自動化したい操作をスクリプトににしてIDE上で書いていきますが、マウスポチポチでもある程度作れるのでノンプログラマーにもいくぶんとっつきやすそうです。

画像処理で有名なOpenCVを使って作られているらしく、操作対象の認識を「デスクトップ画面の中で対象の画像を抽出する」ことで実現しています。
(サンプルコードの click() のカッコ内にあるのは操作したい要素のスクリーンショットなのです)
画面上の文字を認識するOCR機能も一応あるのですが試してみたところ精度が怪しく実用には難しいなという印象でした。

機能面はやや物足りない感触でしたが、OSをまたいで使えることと導入の難易度が低そうなのはメリットですね。

UiPath

https://www.uipath.com/ja/

こちらもIDEで作成・実行するタイプで、GUIでフローチャートを組み立てたりブラウザ操作を自動で読み取って操作を記録したりと、基本シェアウェアだけあって操作感や機能は充実しています。(そのぶん見た目は複雑なので最初は少し戸惑うかも)

個人や中小企業はCommunity Editionという無料版が使えますが、ある程度以上の規模の企業で使う場合は有料になるようです。
https://www.uipath.com/ja/freetrial-or-community

サンプルコード(これもコードと言っていいのかわかりませんが)はこのようになります。

作業の流れがグラフィカルに表示されるので大掛かりなようにも見えますが、Webページ上の要素を選択して操作しているというのは同じですね。

公式コミュニティがあるほかハンズオンセミナーなども開かれているようで、費用面とWindowsのみという点が問題なければ有力な候補になりそうだと思います。


というわけで、今回は無料で使えるRPAを簡単にお試ししてみました。

こういったRPAは使いようで色々な作業の手間を省けそうな予感がしているので、できることを把握してうまく活用していきたいですね。

この記事がRPAに手を出してみる取っ掛かりになれば嬉しいです🤗