monolog

monora log #=> ものろーぐ

2016年3月の投稿

shotgun じゃなくて rerun を使おうという話

Programming

Ruby で Rack アプリケーションを書いているときに、コード変更したら自動的にサーバー再起動したいという話。

今までは shotgun でやっていたのだけれど、これは毎回リクエストする度に変更の有無に関係なくサーバーを立ち上げ直すので、遅いという欠点があった。
副次的な問題として、better_errors で REPL が無効になるという欠点があった。(レスポンスを返すとそのコンテキストを捨ててしまうから?)

ずっと前からどうにかならないかなーと思っていたのでググったら rerun というものを見つけた。
Rack とか関係なくもっと汎用的なやつで、ファイル変更検知してサーバー上げ直すぞ! みたいなプロダクトらしい。

入れたら下のような感じで使える。便利。

RACK_ENV=development rerun -- rackup -o 127.0.0.1

調子に乗って通知有効化するぞ! というノリで terminal-notifier を入れてみたらサーバーが上がらなくなった。何事かと思ったら tmux 上で使おうとすると一癖あるらしく、こういうIssue が立っていたので適当に読んだら解決した。

要するに、brew なりなんなりで、reattach-to-user-namespace をインストールして、.tmux.conf に下を書き加えるという話。

set -g default-command "which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL -l"

再起動に掛かる時間が体感で倍ぐらいになったけれど、better_errors使えることで圧倒的効率アップみたいなところがあるので、トータルで幸福度が向上した気がする。

Sinatra Modular-Application で configure が上書きされる問題の対処

Programming

Ruby の Siantra で、Modular-Application を書いていたら良く分からない挙動にぶち当たって気が付いたら朝になっていたのでメモ。

app.rb

require_relative "hoge"

class App < Sinatra::Base
  configure do
    disable :protection
  end

  use HogeRoutes
end

hoge.rb

class HogeRoutes < Sinatra::Base
  get "/" do
     ...
  end
end

みたいな事をしていた。
disable :protection をしているのにどうしても Rack::Protection が有効になるので、どうしてこうなるんだとあちこちのコードを追いかけたりした結果、HogeRoutesApp とは別にもう一度 session, protections 等のセットアップが行われるので、以下のように、 use HogeRoutesconfigure より上に持ってくる必要があった。

app.rb

require_relative "hoge"

class App < Sinatra::Base
  use HogeRoutes

  configure do
    disable :protection
  end
end

HogeRoutes 内の configuredisable :protection とやってもいいが、こうするとクラスが増えた際にその分だけ書かないといけなくて大変。セッションみたいなアプリケーション全体で統一的な設定を持つ部分は親の App でやって良いんじゃないかと思う。

2016年3月あたりの今日このごろ

雑記

春休みになった。大学生の春休みはきっと長いのだろうなと思っていたが、やりたいことは積もり積もっていて、中々暇にならない。でもここ数日はこんな時間まで起きて12時まで寝るような生活をしていて大学生の春休みっぽい。暇なら仕事でもなんでもしろという感じである。

まず、春休みに入って初っ端に ICTSC5 という大会があった。正式名称は「cloudpack杯 第5回ICTトラブルシューティングコンテスト」といって、ネットワークやサーバーといった所謂インフラに属する部分のトラブルを学生が作って学生が解決する大会である。
今回、僕は学生の運営委員としてこの大会に参加していて、2月の中旬から東京ミッドタウンにあるシスコの東京本社に篭って、問題を作ったり、ネットワーク設計をみてフンフン言ったり、DMM.comラボ様からお借りしたGaffGun で光ファイバーやらなんやらを養生したり、ラッキング (画像左)したり、パトライト光らせたり、パトライトを Webhook するような API サーバーをサクっと書いたり、ansible の praybook を書いて200台以上のVMに対して🙏 pray 🙏 したり、突然秋葉原の愛三に行って1000A測定可能なクランプメーターを買ったり、受付したり、Redmine で参加者から続々と立てられる質問のチケットを100件以上クローズして指揮官の気持ちになったりということをしていた。日頃中々得られない大規模な大会運営に携われたというのは本当に良い経験で、それだけでなくてネットワークであったり、大量VMへの展開であったり、技術な学生との会話であったり、本当に得られたものは大きかったと思うし、それが終わって2週間経った今でさえ、心にぽっかり穴が空いたような気分だ。
次回の ICTSC6 は大阪開催のようだし、おそらくまた運営委員としてひたすら祈り続ける日々が始まるのもそう遠くないと思っている。楽しみだ。

それが終わったあとは、割とバイトに行く日々を繰り返している気がする。
週2, 3程度でバイトに行っているので、決まった曜日がないとはいえ、2週間もあけるとそれなりにタスクも溜まるようで (実際緊急の案件で呼び出されて ICTSC5 中にも一度出社して徹夜で勤務していた)、ひたすら溜まったタスクをこなしつつ、iOS アプリの画面を組んだりコード書いたりといったことをしていた。そういえば最近は Photoshop 使った画像切り出しやらリサイズやらも定常タスクに入ってる気がする。まあ自動化してるからサクっと終わるんだけど、まさか今までこれを手で切り出してたなんて言わないよね……?
まあ、このあたりの話題は秘密保持のこともあるのであまり語れなくて、強いて言うなら学生を使うと安く済むんだなぁという事実から目を背けられなくて、やっぱり給料上げてほしいなあみたいな気持ちになった。粘り強く交渉していきたい。あと iOS 7 は絶対に潰す。絶対にだ。

このあたりはもう一つ書いておきたいことがあって、最近別の会社でもバイトを始めたということを書いたのだけれど、未だに全然仕事できていない。というか時間を割けていない以前にどこから手を付ければ良いのか分からなくてつらい。頑張りたい。

あと、先週はサークルの先輩としまなみ海道を自転車で渡る旅行に行った。しまなみ海道に行くのは2回目なのだけれど、今回は尾道から今治へ渡った。前回とは逆向きで、行きは新幹線で福山経由で行って、帰りは高松からサンライズに乗って帰った。この辺の話はTwitterで書いたとおり。やはりしまなみ海道は走りやすくて良い。ついでに自分の体力の無さが身にしみたので頑張っていきたい。もうちょっと乗ろうな……。ついでに香川のうどん屋は異様に閉まるのが速い。またリベンジするぞ。

今週はまた旅行に行きます。旅行といっても突発的なバイトついでという感じで、敦賀へ1泊2日の作業をしに行く。そのまま名古屋で1泊して、凪のあすからの聖地巡礼をしに紀伊半島、紀勢本線の波田須の方へ行こうと思う。紀伊半島は鉄道の僻地という感じで、こんな時間までジョルダンの18きっぷ検索と格闘していた。週末にスケジュールが入っているということもあってなんやかんやと5時間ぐらい悩んで、帰りは高速バスに乗って帰ることにした。朝が厳しい。

本当に朝に弱いので普通に早起きしようとして起きたら12時とかあるのだけれど、多分旅行のときぐらいは7時とかに起きれるんじゃないかと自分に淡い期待を抱いている。

とかこんなことを書いている暇があったら寝たほうが良さそう。寝る。(2016/3/15 執筆)