気が向いたらあとで書くかもしれない。
2015年 6月 の投稿一覧
Google docsのスプレッドシートで集計する際にSQLっぽいクエリを使う
最近業務でgoogle docsやExcelで管理されたシートの内容を集計したいことがあって、基本google docsのスプレッドシートでゴニョゴニョすることがあるのですが、例えば
の様なものがあって、上の例だと各ユーザのポイントの合計を集計したいなと考えた時にExcelに慣れている方だとExcelの関数が浮かんで集計できるのかと思うのですが自分だとSQL文のイメージが先に出るのでよしなにできないかなと思っていたら、Google docsだと QUERY
という関数を使うことで実現できることを知ったのでメモエントリです。
上の例だと D1
のセルに以下の様な内容を記述します。
=query(A2:B9, "select A, sum(B) group by A")
1番目の引数にデータの範囲を指定し、2番目にそのデータ範囲でのクエリを記述します。
SQLを触ったことがある方ならなんとなくわかる記述内容かと思います。入力を完了するとすぐにセルに集計結果が反映されます。
なるほどとても便利。Google docs初期からの機能だった様なのですが本格的に最近触る様になったのでやっと便利さに気づけました。
参照
loopback-testingを利用してloopbackで作成したAPIのテストを書く
loopbackでAPIのテストを書く際にloopback-testingを利用してAPIのテストを書いてみたのでその際のメモ。
まずは必要なnpmパッケージをloopbackアプリケーションに導入します。loopbackアプリのルートで以下のnpmコマンドを実行。
$ npm install loopback-testing --save-dev $ npm install chai --save-dev
これで準備完了。加えて npm test
でテストを実行できる様に package.json
内のscriptsの定義を以下の様に書き換えます。*1
"scripts": { "test": "NODE_ENV=\"testing\" ./node_modules/loopback-testing/node_modules/.bin/mocha -R spec --recursive" }
上記の意図は npm test
が実行された際に testing
環境としてnode_modules配下のmochaを利用してテストを実行します。
それにともなってtesting環境でloopbackアプリが実行された際のデータソース(DB接続先)を定義しておきます。Circle CI等のCI環境でもすぐに実行できる様に、memoryを指定します。
~/server/datasources.testing.js
というファイルを用意して以下の様にデータの保存先をmemoryに指定します。
module.exports = { db: { connector: "memory", defaultForType: "db" } };
これでテストが実行できる様になりました。expressの流儀と同様にプロジェクト直下の test
ディレクトリに現在開発しているloopbackアプリケーション(API)のテストを書いてみます。
例えばユーザ登録(メールアドレスとPWをPOSTするとユーザ登録できる)のAPIのテストであれば、
var lt = require('loopback-testing'); var chai = require('chai'); var assert = chai.assert; var app = require('../../server/server.js'); describe('/api/users', function() { var newUser = {email: "tester1@remp.jp", password:"tester1remp"}; describe('ユーザ登録', function() { lt.describe.whenCalledRemotely('POST', '/api/users', {}, function() { it('ユーザ登録の際にメールアドレス、パスワードのパラメータは必須', function() { var codes = this.res.body.error.details.codes; assert.include(codes.password, 'presence'); assert.include(codes.email, 'presence'); assert.include(codes.email, 'format.null'); }); }); lt.describe.whenCalledRemotely('POST', '/api/users', newUser, function() { it('メールアドレス, パスワードを与えるとユーザ作成できる', function() { assert.equal(this.res.statusCode, 200); }); }); }); });
といった具合に記述することができます。
ほぼコードを読んだままなのですが、 lt.describe.whenCalledRemotely
の記述で指定のエントリポイント下へ指定のメソッド及びパラメータでアクセスがあった場合のテストを書くことができます。
また、アクセスするユーザにロールや状態をもたせた状態のテストも同様に記述ができ、例えばログインを行ったユーザによるAPIへのアクセスを想定したテストは
var user = { id: 2, email: "tester2@remp.jp", username: "tester2", password: "tester2remp" }; // (snip) describe('ユーザによるプレイリスト操作', function() { lt.describe.whenCalledRemotely('GET', '/api/users/2/playlists', function() { it('未ログインユーザはユーザのプレイリストは取得できない', function() { assert.equal(this.res.statusCode, 401); }); }); lt.describe.whenCalledByUser(user, 'GET', '/api/users/2/playlists', function() { it('ログインしたユーザ自身のプレイリストは取得できる', function() { assert.equal(this.res.statusCode, 200); }); }); });
の様に lt.describe.whenCalledByUser
という記述で実現することができます。他にも各種ロールを割り当てた上での記述が行える様になっています。
こういった形でテストを用意した上で npm test
で実行してみると...
といった具合にmochaによるテストが実行できています。
loopbackで作成したAPIであれば、loopback-testingを用いることでアクセスするユーザの各種ロールを想定したテストが記述できて便利ですというお話でした。
まとめ
- loopbackアプリケーションでのテストを行うために
loopback-testing
を導入しました npm test
でテストを実行できる様にpackage.jsonの一部を修正しましたwhenCalledRemotely
,whenCalledByUser
等 loopback-testingを利用することで用意に各種ロールを想定したテストが書けました
あわせて読みたい
- loopbackでアプリケーションを作成してユーザ登録APIを作るまで - テノニッキ (@hideack 's diary)
- loopbackでMongoDBを利用する - テノニッキ (@hideack 's diary)
- loopbackでAPIにアクセスした際のACLの適用状況を確認する - テノニッキ (@hideack 's diary)
- loopbackでモデルのrelationを定義する - テノニッキ (@hideack 's diary)
- loopbackで作成されたAPIのアクセスコントロールを設定する - テノニッキ (@hideack 's diary)
- strong-pmを稼働させてloopbackアプリをデプロイする - テノニッキ (@hideack 's diary)
*1:loopbackのscafold(slcコマンド)で作成された場合は仮のpretestの定義が書いてあります
githubで管理されているnpmパッケージをnpmコマンドでインストールする
メモエントリ。
npmパッケージを npmjs.com で管理されているものではなくgithub上に管理されているものを直接npmコマンドでインストールする方法。
例えば、evacの場合、
$ npm install hideack/evac
とすることで、github上のmasterから直接インストールすることができる。npmコマンド奥が深い。
併せて読みたい
2015年5月に読んだ本を振り返る
技術書が無いぞ技術書が。
とはいえ、いろいろ思うところが現れている読書ログ。
家庭用ゲーム機興亡史 はとても面白かった。各時期における家庭用ゲーム機メーカーのとった商品戦略や営業戦略によってここまで市場が変化するのかというのがわかる。また10年後ぐらいに更にこの本に記載された内容からどの様な追記がされるかとても興味がある。
果たしてそのとき所謂家庭用ゲーム機は残っているのだろうか。
ナマコ は相変わらずの椎名誠の世界でどーだどーだ的に面白く、ビールをぐいぐいと呑みたくなるのだ。
最近のコメント