Qiita/Qiita:teamの記事をJSON Lines形式で取得するqiitadumpを作った

最近ははてなブログに引っ越したのでQiitaをあまり使わなくなってしまったけど、過去に書いた記事や、社内で利用しているQiita:teamの記事をElasticsearchに入れて遊んだりするときに便利そうだと思ったので作ってみました。

github.com

使い方

準備

Qiitaのアクセストークンが必要なので、このあたりを参考に。権限は read_qiitaread_qiita_team があればいいでしょう。

qiita.com

インストール

$ go get -u github.com/ariarijp/qiitadump

実行

アクセストークンを指定して以下のように実行します。

$ qiitadump -token YOUR_ACCESS_TOKEN > dump.json

デフォルトでは20件取得しますが、 -limit オプションで件数を変更できます。

Qiita:teamの記事を取得する場合は以下のように -host を指定して実行します。

$ qiitadump -token YOUR_ACCESS_TOKEN -host teamname.qiita.com > dump.json

出力されるJSONの形式はQiitaのAPIドキュメントのとおりです。

qiita.com

この他にもいくつかオプションがありますが、詳しくはREADMEをご覧ください。

SQL書き方ドリルのサンプルDBをre:dashで遊べるようにするVagrantfile

最近は社内でSQLの啓蒙活動をしています。

幸いにも何人か興味を持ってもらったので、一通りSQLを学べそうな「SQL書き方ドリル」を会社で買ってもらったので、 SQLとあわせて啓蒙中のre:dashから、書籍付属のサンプルDBを使って、手を動かしながら勉強できるような環境を作ってみました。

改訂第3版 すらすらと手が動くようになる SQL書き方ドリル (WEB+DB PRESS plus)

改訂第3版 すらすらと手が動くようになる SQL書き方ドリル (WEB+DB PRESS plus)

前提

お使いの環境でVagrantが使えるようになっている環境を前提とします。

Macで動作確認していますが、Windows, Linuxでも動くと思います。

準備

re:dashをGitHubからcloneします。

$ git clone https://github.com/getredash/redash.git
$ cd redash

次に、Vagrantfileを以下のように書き換えます

gist.github.com

MySQLrootユーザーがパスワードなしであったり、redashユーザーのパスワードが雑だったりしますが、ローカル環境での利用を想定しているためご了承ください。

最後に、SQL書き方ドリルのCD-ROMのデータをVagrantfileと同じ階層にSQL_DRILLという名前のディレクトリを作成し、その中に入れておきます。

起動

準備が終わればVMを起動するだけで、勝手にプロビジョニングされます。re:dashのVagrant Boxが事前にダウンロードされていない環境では、少し時間がかかると思います。

$ ./bin/vagrant_ctl.sh start

動作確認

上記のコマンドでVM起動すると、 http://localhost:9001 でre:dashにアクセスすることができます。

re:dashの使い方については割愛しますが、クエリを実行して、サンプルDBのデータを参照できていることを確認します。

現時点では、re:dashのデータソースについては手作業で設定することになります。

f:id:ariarijp:20160905140107p:plain

(念のため上記の画像ではデータをマスキングしています)

まとめ

SQLの入門書として評判のいい書籍の内容をre:dashで勉強できるようにしたので、社内でもっとSQLに興味を持つ人が増えてくれるといいなと思っています。

(追記)worldデータベース

こちらの記事でちょっと言及していただいたので、影響を受けて追記してみました。

kakakakakku.hatenablog.com

SQL書き方ドリルをお持ちでなくても、MySQLのworldデータベースを使用できるようにしました。Gistの Vagrantfile も変更済みです。

worldデータベースを使用する場合は、Vagrantfileと同じ階層にworld.sql.gzを配置してください。

Pagila Databaseをインポート済みのre:dashのVMを5分ぐらいで起動するスクリプトを書いた

まえがき

re:dashは頻繁にアップデートされるので、最新のバージョンを試ししたいときによくVagrantを使います。

Vagrantを使ったVM起動についてはre:dash標準の手順があるのでいいのですが、re:dashから利用するデータソースの準備はすこし面倒です。

ということで、re:dashのVMにサンプルデータベースを追加してくれるスクリプトを書きました。

github.com

Pagila

サンプルデータベースとして、MySQL用サンプルデータベースSakilaのPostgreSQL版のPagila Databaseを使用しています。

pgFoundry: Sample Databases: Project Home

各テーブルにどのようなデータが入っているかは、Sakilaのドキュメントを参考にすると良いでしょう。

MySQL :: Sakila Sample Database :: 5 Structure

手順

READMEの手順どおりにやれば、5分もかからずセットアップが終わります(Vagrant Boxのダウンロード時間を除く)

$ # READMEから抜粋
$ git clone https://github.com/ariarijp/redash-pagila-setup-script.git
$ cd redash-pagila-setup-script
$ git clone https://github.com/getredash/redash.git
$ cd redash
$ cp ../redash-pagila-setup.sh ./
$ vagrant up
$ vagrant ssh -c "bash /vagrant/redash-pagila-setup.sh"
$ ./bin/vagrant_ctl.sh start

起動したあとの動作確認

最後のコマンドでre:dashが起動したら、 http://localhost:9001 にアクセスするとログイン画面が表示されるので、デフォルトの admin / admin でログインし、

f:id:ariarijp:20160812215633p:plain

「New Query」をクリックして

f:id:ariarijp:20160812215742p:plain

適当なSQLを実行すると、結果が表示されます。

SELECT film.title,
       COUNT(film.film_id) cnt
FROM rental
JOIN inventory ON rental.inventory_id=inventory.inventory_id
JOIN film ON inventory.film_id=film.film_id
GROUP BY film.title
ORDER BY cnt DESC LIMIT 50;

f:id:ariarijp:20160812215848p:plain

まとめ

re:dashの最新版をカジュアルに試したいというモチベーションで書きましたが、Rebuildなどをきっかけにre:dashに興味を持たれたかたにも使っていただけると思います。よろしければ使ってみてください。

rebuild.fm

表参道.rb #14 でDigdagについてLTしてきました

8/4に開催された表参道.rb #14でLTさせていただきました。

omotesandorb.connpass.com

ビアガーデン風ということで、会場提供していただいたSansan株式会社様のGardenというイベントスペースで開催され、飲み物、食べ物も無料提供していただきました。ごちそうさまでした。写真とっておけばよかった。

発表資料

Rubyを触る機会が以前にもまして減っているのですが、最近使ったDigdagにRuby APIがあったので、Ruby APIについてLTしました。

懇親会でもいろいろお話を伺いましたが、みなさんバッチ処理ではそれなりに困りごとがあるようだったので、興味を持って聞いていただけたのかなと思っています。

ひさしぶりのLT登壇で緊張しましたが、いくつか笑いも起こっていたので、自分も楽しんでLTできました。

資料はこちらです。

speakerdeck.com

追記

資料中に「Ruby APIから設定した配列をYAML側でfor_eachを使って処理するのはできなさそう」というようなことを書きましたが、loopでできるのではというアドバイスをいただきました。

参考として教えていただいたGistの通りにやってみたところ、lYAML内で配列を扱うことができました。

gist.github.com

@hiroysato さん @smdmts さんありがとうございました!

このようにいろいろな方から反応をいただけるのも、ちょっと勇気をだしてコミュニティで発表することの利点ですよね。

mackerel-agent-pluginsにmackerel-plugin-php-fpmが含まれてないんだけど?と言われて調べた

まえがき

mackerel-plugin-php-fpm使いたいんだけど、CentOS使ってるんだけどまだyumで入ってこないんだよねー?と言われたので、ちょっと気になったので調べてみました。

このプラグインは私が作ったものなのですが、私の場合はgo buildしたものを/usr/local/binに置くような雑運用かつUbuntu環境なのですが、実際のところどうなんでしょうか。

確認方法について

CentOSの環境が無いのでDockerで確認することにしました。Docker for Macがリリースされてから、よりDockerが気軽に使えるようになりましたね。

gist.github.com

今回はmackerel-plugin-php-fpmのインストールだけを確認したいので、mackerel-agentはインストールしていません。

確認のための準備

準備と言ってもdocker buildだけです。イメージ名は何でもいいです。

$ docker build -t centos7-mackerel-agent-plugins .

確認してみる

無事にビルドできたら、さっそくdocker runしてみます。

docker run -it --rm centos7-mackerel
Usage of mackerel-plugin-php-fpm:
  -metric-key-prefix string
        Metric key prefix (default "php-fpm")
  -tempfile string
        Temp file name
  -timeout uint
        Timeout (default 5)
  -url string
        PHP-FPM status page URL (default "http://localhost/status?json")

あら?インストールされているようですね。

もうちょっと確認してみる

インストールディレクトリを見てみましょう。

ここで察しがついているかたもいるかもしれませんが、もう少々お付き合いください。

docker run -it --rm centos7-mackerel ls -la /usr/local/bin
---snip---
lrwxrwxrwx  1 root root   33 Jul 21 14:55 mackerel-plugin-php-apc -> ../../bin/mackerel-plugin-php-apc
lrwxrwxrwx  1 root root   37 Jul 21 14:55 mackerel-plugin-php-opcache -> ../../bin/mackerel-plugin-php-opcache
---snip---

おや。リンクになっていますね。/usr/binに実体がありそうな雰囲気です。

docker run -it --rm centos7-mackerel ls -la /usr/bin
---snip---
-rwxr-xr-x  1 root root 5131476 Jul 14 07:30 mackerel-plugin-php-apc
-rwxr-xr-x  1 root root 4787124 Jul 14 07:30 mackerel-plugin-php-fpm
-rwxr-xr-x  1 root root 5131476 Jul 14 07:30 mackerel-plugin-php-opcache
---snip---

実体はここにあって、ここにはmackerel-plugin-php-fpmもありますね。

なぜ/usr/local/binにインストールされないのか

0.19.4で変わったみたいです。

mackerel.io

今までのものは互換性を保つために/usr/local/binにもおいてくれるようですね。

まとめ

インストールされてないと言っていたのが、インストールディレクトリが変わったこと以外の問題だったらちょっとわかりませんが、

Mackerelのように定期的にアップデートがあるプロダクトは、リリースノートもかかさずチェックしていくのがいいのかもしれませんね。