RDoc の オプションで :nodoc: が指定されてたので見つからなかった話

def self.convert_to_original_url(omission_url, limit = 10)
  raise ArgumentError, 'http redirect too deep' if limit == 0

  response = Net::HTTP.get_response(URI.parse(omission_url))
  case response
  when Net::HTTPSuccess then
    omission_url
  when Net::HTTPRedirection then
    convert_to_original_url(response["location"], limit - 1)
  else
    response.error!
  end

るりま見ながらこんなソースを書いてて、response.error ! が何をしているかを知りたくて、 Web上のドキュメントなんかをググって見てたんだけどどこにもない!!!

[10] pry(main)> n = Net::HTTPResponse.new('aaa', 'bbb', 'ccc')
=> #<Net::HTTPResponse bbb ccc readbody=false>
[11] pry(main)> n.method(:error!).source_location
=> ["/Users/***/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http/response.rb", 118]

Net::HTTPResponse クラスってことは分かってたので、 source_location メソッドを使って error! メソッドが記述されている場所を探す。

def error!   #:nodoc:
  raise error_type().new(@code + ' ' + @message.dump, self)
end

で見つけました。

これよく見ると #:nodoc: って記述があります。

この記述があるとドキュメントに書かれないみたいですね。

作成者があまり使用してほしくないという意図があるとかないとか。

まぁドキュメントに出てこないんだからソース読まないと見つからないか。

kanazawa.rb スライドまとめページ 作った

背景

  • クックパッドの発表者資料のページ(http://techlife.cookpad.com/presentations/)を見て、kanazawa.rb にもスライドまとめページ欲しいなと思った。
  • 以前に発表を聞いたあの資料が見たい!って時に、あれ meetup 何回目だったかなーってことがよくあった。

作ったもの

課題

  • ローカル環境ででスクレイピングして、スライドのページを作っている
    • Rake ファイルでだれでもスライドページを自動で作成できるようにしたい
  • 同じスライドが出てしまってる

AWS 入門しよう

ドットインストールでAWSの動画見てる

ドットインストール

いやードットインストール便利

EC2

  • リージョンは日本人向けサービスなら Tokyo にする
  • Avaliability Zone はリージョン内でデータセンターが分かれているイメージ
  • Termination Protection にチェックを入れておけば、簡単にインスタンスが削除されなくなる
  • Stop はインスタンスを停止する
  • Terminate はインスタンスを削除する(ここで Termination Protection が効いてくるのかな)
  • イメージを作成するとシャットダウンされる
  • シャットダウンするとアドレスが変わってしまう
  • Elastic IPs を使用してIPを割り振る
  • EC2 に結びついていないIPアドレスは課金されるので、Release しておく
  • Snapshots からインスタンスを立ち上げる場合は、Create Image from Snapshot で Image からインスタンスを立ち上げる
  • EC2 の変更をしたい場合(高負荷対策etc)State が stopped になってから
  • 変更後に start する

rails.vim を使った時に、エラーが出た時の対処法

vim から rails.vim を使用したらエラーが出たので、対処法をメモしておきます。

たとえば、vim から :Rails new hoge ってコマンド実行すると、

Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.

えええ、rails インストールされているんですが。。

既存の rails のプロジェクトを vim で開いて、 :Rserver ってコマンド実行すると

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- bundler/setup (LoadError)

う〜ん、どうも rbenv のruby じゃなくて、Mac に標準インストールされている ruby 使っちゃってる感じがする。。

vim から !echo $path でパスを確認

/usr/bin /bin /usr/sbin /sbin /usr/local/bin /Applications/MacVim.app/Contents/MacOS /Users/xxxxx/.rbenv/shims /Users/xxxxx/.rbenv/bin /Users/xxxxx/.nvm/v0.8.2/bin /Users/xxxxx/bin

ターミナルから echo $path でパスを確認

/Users/xxxxx/.rbenv/shims /Users/xxxxx/.rbenv/bin /Users/xxxxx/.nvm/v0.8.2/bin /Users/xxxxx/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin

やっぱり path がおかしい。
少し調べてみたら、macvim のページに解決方法ありました。
https://github.com/b4winckler/macvim/wiki/Troubleshooting#for-zsh-users
どうも path がリセットされてるみたい。

$ sudo mv /etc/zshenv /etc/zprofile

したら path がちゃんとなった。

kanazawa.rb meetup #14 で「RSpecはじめました」を発表してきた

kanazawa.rb meetup #14 でミニコーナー「Test ! Test !! Test !!!」がありました。
そこで「RSpecはじめました」ってタイトルで発表してきたのでまとめておきます。

当日の様子

経緯

少し前から Ruby on Rails の勉強をしてて、その際に RSpec が気になり、少しづつ勉強してました。
今回、@wtnabeさんからお誘いをいただき、発表させてもらいました。
wtnabe さんには twitter で何回か RspecRuby について色々教えていただいてました。
ありがとうございました。

発表まで

最初スライドを作り始めた時は、

みたいな感じで、RSpec について話しようとしてたんだけど、そういうのはもう既にネットや書籍でたくさんあるしと思い、
kanazawa.rb でしか聞けないオリジナルを発表しようと路線を変更しました。
(これは wtnabe さんにも言われたこと)

で、自分が RSpec を勉強していた中できっかけになったのが、meetup #12@Yukimitsu_Izawaさんの 「Ruby で作るDSL」っだったので、 その発表をきっかけに自分が RSpec を学んだことを交えて伝えようとスライドを作り直しました。

発表したスライド

伝えたかったこと

RSpec や DSL のことをスライドには書いてあるけど、
一番伝えたかったことは、自分が RSpec を学んだ過程で、その中にkanazawa.rbがあるよってことです。
「kanazawa.rb がきっかけで理解が進んだ」ってことを伝えたかった。

実際に伝えれたかは分からないけど、初めての発表の経験が出来たことは良かった。
でも人に伝えることはやっぱり難しくて、「淡々とした斬新な発表」と言われたw
こういう話し方のところは直していきたい。経験を積むしかない。

ってことでまた、発表したい!!

rspecのcontextはdescribeのalias

最近、rspecでテストを書きながらrailsの勉強をしています。

contextはdescribeのaliasということは分かったんですが、 定義も見てみようと。

で、ここで定義されていました。

https://github.com/rspec/rspec-core/blob/master/lib/rspec/core/example_group.rb#L285

class << self
  alias_method :context, :describe
end

ExampleGroupクラスのクラスメソッドにdescribeのaliasを定義してるんですね。

proxy環境でbundlerを使う

今日、proxy環境でbundlerを使っててハマったのでメモ。

bundle install

したら、

Network error while fetching

って出る。

あ、proxyだなー。と思って、設定方法を色々調べてたら、 .gemrcに

http_proxy: http://example.proxy.com:8080/

って書けばいいよ。みたいな記述を見つけて試してみたんだけど、

同じエラーが出続けてる。。。

どうやら、bundlerは.gemrcは使ってないみたい。

じゃあどうするか?

環境変数をセットする。

export http_proxy=http://proxy.example.com:8080/

ってすることで、出来ました。

もう少し調べてみたら、.gemrcが使用されていないってIssueがあがってたみたい。

https://github.com/bundler/bundler/issues/1009

で、対応済みの様子。

https://github.com/bundler/bundler/commit/d80077386db82ad97fad8499ec0f2524132eeef0

でも、ver1.4からの対応なのかな。