ghq でリポジトリを管理するなら peco は必須

ghq で管理しているローカルリポジトリに移動するのを楽にするために、peco を導入することにした。

go get github.com/peco/peco/cmd/peco

でインストール。

ghq list -p | peco

ghq で管理しているローカルリポジトリインクリメンタルサーチできた。

peco で選択したリポジトリに移動したい場合は、

cd $(ghq list -p | peco)

を実行すればいい。

このコマンドを毎回入力するのはダルイので、エイリアスをつけておく。

alias g='cd $(ghq list -p | peco)'

g コマンドを実行するだけで、 ghq 管理下のローカルリポジトリを peco で選択し移動できるようになった。 便利。

ghq を使ってローカルリポジトリのディレクトリ構成を Go 準拠に移行してみた

ローカルリポジトリを $HOME/Projects 直下にすべて置いていたけど、 それをやめて、ghq を使って Go の流儀で管理することにした。

ghq は go だけでなく、git と mercurial も必要としているので、 インストールしていなければ homebrew でインストールしておく。

$ brew install git
$ brew install mercurial
$ brew install go

$HOME/src 下にリポジトリをすべて置きたいので、.zshrc で GOPATH を指定する。

export GOPATH=$HOME

ghq をインストール。先ほど設定した $HOME/src 下にインストールされる。

$ go get github.com/motemen/ghq

ghq のバイナリは $HOME/bin にあるので、呼び出せるように .zshrc で PATH に追加する。

export PATH="$HOME/bin:$PATH"

ghq でダウンロードするリポジトリを $HOME/src 下に置くために、git の設定が必要。

$ git config --global ghq.root ~/src

これで準備完了。試しに設定ファイルを管理しているリポジトリをダウンロードしてみる。

$ ghq get github.com/tnakamura/dotfiles

ダウンロードしているリポジトリの一覧を見てみる。

$ ghq list
code.google.com/p/goauth2
github.com/codegangsta/cli
github.com/daviddengcn/go-colortext
github.com/google/go-github
github.com/google/go-querystring
github.com/motemen/ghq
github.com/motemen/go-colorine
github.com/tnakamura/dotfiles
github.com/tnakamura/tnakamura.github.io

go get でダウンロードしたやつも上がってきている。

リポジトリに移動したい場合は look コマンドを使う。 試しに、先ほどダウンロードした dotfiles に移動。

$ ghq look dotfiles

これでローカルのリポジトリを go の流儀で管理できるようになった。 ただ、リポジトリの一覧から目的のものを探したり、リポジトリを移動するのが、まだ面倒。 そこらへんを解決するために、次は peco をインストールしてみようと思う。

兼虎

最近つけ麺にハマっているので、 赤坂にあるつけ麺屋『兼虎』に行ってみた。

f:id:griefworker:20140802183645j:plain

『濃厚つけめん』と『辛辛つけめん』で悩んだけど、 初回なので『味玉濃厚つけめん(900円)』を選択。 麺は無料で中盛にできた。

f:id:griefworker:20140802184814j:plain

魚介とトンコツの濃厚なつけ汁。 濃厚だけど、どこか洗練されている感じ。

f:id:griefworker:20140802184752j:plain

麺はつけ麺にしては細いほう(それでもラーメンよりはかなり太いが)。 自分はこのくらいの太さが丁度いい。

最後に和風だしのスープでつけ汁を割って飲むと、ほっと胃が休まる。 つい飲み干してしまった。 ご飯を入れて雑炊にするのがオススメらしい。

あと嬉しいのが、つけ汁を温めなおしてくれるサービス。 つけ汁が冷めるのを気にする必要がない。 つけ麺屋はみんなやってほしい。

気に入ったので、次回はもう1つの看板である、辛辛つけめんも食べてみたい。 サイドメニューの炙り豚ご飯も気になるけど、それまで食べたら胃袋がはち切れてしまうかもな。

Mac で MOV ファイルをアニメーション GIF に変換

iPhone で撮影した動画 (MOV ファイル)をアニメーション GIF に変換する Mac アプリを探したけど、 フリーで丁度良いのが見つからなかったので、ffmpeg と gifsicle を組み合わせることにした。

ffmpeg と gifsicle は Homebrew でインストールできる。

$ brew install ffmpeg
$ brew install gifsicle

ffmpeg で MOV ファイルを GIF ファイルに変換し、GIF ファイルを gifsicle でまとめてアニメーション GIF に変換。

$ ffmpeg -i input.mov -s 400x600 -pix_fmt rgb24 -r 10 -vf "transpose=1" -f gif - | gifsicle --delay=3 --optimize=3 > output.gif

西日本大濠花火大会

f:id:griefworker:20140803162711g:plain

5年ぶりに大濠花火大会に行ってみた。会場で見る花火は、その迫力もさることながら、身体に振動が伝わってきて、沁みた。まるでアーティストのライブに行ったみたいだった。祭りはライブに限る。

これで終わればよかったんだけど、会場東側の道が超混雑していて、ドミノ倒しになるんじゃないか心配するレベルだった。もう二度と会場に行きたくない、とその瞬間思うほどには悲惨だった。

今回で満足したし、しばらく花火大会はいいや。でも何年かしたら、また見に行きたくなるだろうな。 そのときはお金を払って、平和台陸上競技場舞鶴公園西広場で見ようと思う。さすがに大濠公園の人混みは懲りた。

Heroku でマルチテナントな Rails アプリを実現する

はじめに

Web アプリでマルチテナントをやる場合、 すべてのテーブルに tenant_id を追加してデータを分けるのではなく、 テナントごとにデータベースを分けたい。

データベースを分けておけば、バグで他のテナントのデータまで変更してしまう可能性を減らせる。

データベースを分けたマルチテナントをサポートする、 『Apartment』という gem を使った記事を以前書いた。

Heroku 上での運営を考えているので、 Heroku 上でもテナントごとにデータベースを分けたマルチテナントが可能か試してみた。

なお、Heroku Postgres を使うから、厳密にはテナントごとにスキーマを分けることになる。

Heroku にデプロイ

Rails + Apartment でマルチテナントな Web サービスを作る - present で作成した Rails プロジェクトを使うことが前提。 git で Heroku に push する。

$ git remote add heroku git@heroku.com:tnakamura-sandbox.git
$ git push heroku master

テナント作成

テナントを登録するテーブルが必要なので、まずマイグレーションを実行する。

$ heroku run bundle exec rake db:migrate

Heroku 上で rails console を実行し、テスト用のテナントを登録する。

$ heroku run bundle exec rails console
irb(main)001:0> Tenant.create(name:"foobar")
irb(main)002:0> Tenant.create(name:"hogefuga")

テナントのスキーマを作成

テナントを登録したので、各テナントのスキーマを Heroku Postgres 上に作成。 その後、各スキーママイグレーションを実行する。

$ heroku run bundle exec rake apartment:create
$ heroku run bundle exec rake db:migrate

今回は rake タスクで実行したけど、スキーマの作成と削除は Tenant のコールバックにしたほうが良さそうだ。

サブドメインを登録

Qiita::Team みたいに、テナントごとに異なるサブドメインを使いたい。

テナントが増えるたびにサブドメインを登録するのは手間なので、 例えば次のような、ワイルドカードサブドメインを登録する。

cname *.yourdomain.jp tnakamura-sandbox.herokuapp.com.

自分はバリュードメインを使っているので、バリュードメインで設定した。 末尾のピリオドは必須。これを忘れたせいで、1日潰してしまった。要注意。

Heroku にドメインを追加

バリュードメインで登録した、ワイルドカードサブドメインを Heroku に追加する。

$ heroku domains:add *.yourdomain.jp

これで、例えば foobar.yourdomain.jp と hogefuga.yourdomain.jp で、 Heroku 上の Rails アプリにアクセスできる。

Heroku 上でテナントごとにスキーマが違っているか確認

Web ブラウザで、まず foobar のサブドメインにアクセス(実際のドメイン名は都合により隠している)。

f:id:griefworker:20140725215141p:plain

サインアップしてみる。

f:id:griefworker:20140725215209p:plain

ログイン後のトップページにユーザーの一覧が表示された。

次に hogefuga のサブドメインにアクセス。

f:id:griefworker:20140725215238p:plain

サブドメインが違うので、こちらではまだログインしていない状態になっている。

こちらでもサインアップしてみる。

f:id:griefworker:20140725215320p:plain

すると、ユーザー一覧にはサインアップしたユーザーだけが表示された。

f:id:griefworker:20140725215353p:plain

ちゃんとテナントごとにスキーマが分かれているようだ。

まとめ

ワイルドカードサブドメインを使っているので、 テナントごとに異なるサブドメインを使える。

また、Apartment を使っているので、サブドメインごとにスキーマを分けることができた。 結果、テナントごとにスキーマを分けることに成功。

ワイルドカードサブドメインと Apartment を使うことで、 Heroku でもマルチテナントを実現できた。

死にたくないのでエチケットカッターを買った

Wikipedia によると、鼻毛を抜くと死ぬ可能性があるらしい。

鼻毛は脳に近い場所にあるため、鼻毛を抜くと毛根が黴菌により炎症し化膿、脳に影響が及んで死亡する場合がある

死因が「鼻毛を抜いたから」というのは勘弁。エチケットカッターを買うことにした。

買ったのは、ネットで評判が高かったパナソニック製のエチケットカッター。

届いたので早速使ってみたけど、予想外にくすぐったかった。 自分が敏感なだけかも。 鼻の中央側はハサミで切りにくくて神経使っていたけど、エチケットカッターだと簡単。

あと、眉を整えるのにも使えるのも嬉しい。 鼻に使ったやつを眉にも、ってのは抵抗あるけど、水洗いすれば気にならない。 最低でも月に1回掃除した方がいいらしい。

2160 円と値段は高くないし、買ってよかった。オススメ。