成果です。
github.com
ひょんなことから @udzuraさんとペアプロをする機会を得たのですが、成果は出るわ勉強になるわで最高体験でした。教えてもらうことが久しぶりで新鮮過ぎて
な感じでした。
awspecに追加された強力な実装についてはまたいつか紹介するとして、とりあえずいろいろメモを記録。
あ、
「メタプロRuby早く読んだほうがいい」と10回以上言われました。
まずは実装の方針について検討・共有
いきなりソースコードに向かうと思ったらそうではなかったです。
2時間のうち、1時間くらいは設計の話だったような気がします。SDKのドキュメントと、awspecのソースを表示しつつ、方針を決めました。
で、決まった今回の実装方針はこちら。
とてもわかりやすい!
特に緑でウニョウニョしている部分( ResponceReader
)が今回の実装のポイントです!(本人たちは議論しながらなのでばっちり)
「respond_to
がわからないなんてちょっと。。。」
respond_to
がぱっとでてきませんでした。これがレベル低いのかどうかすらわからないレベル。ちょっと能力差がありすぎました。
(ちなみに使っていました。。。)
Rubyに馴染んでいないのがまるわかり。
「メモ化してください」「え?」
def resource
@resource ||= Awspec::ResourceReader.new(Aws::S3::Bucket.new(@id))
end
||=
の部分ですね。まず「メモ化」の言葉の意味が出てこなかった(そういう言葉があるのは知っていた)です。
その後、説明をしてもらうとすんなり理解。シングルトンとの違いもすっきり。
テストは実装方針にしたがって順番に
今回は最終的に
describe s3_bucket('my-bucket') do
its('acl.owner.display_name') { should eq 'my-bucket-owner' }
end
のテストが通れば完成なので、自分はついつい上のテストが通ることを急ぎがちなのですが、
@udzuraさんはしっかりと、「順を追って」「まずは」といいながら
describe s3_bucket('my-bucket') do
its(:real_resource) { should be_an_instance_of(Awspec::ResourceReader) }
its('real_resource.name') { should eq 'my-bucket' }
its('real_resource.acl') { should be_an_instance_of(Awspec::ResourceReader) }
it 'should be a Exception when black list method is called' do
expect { subject.delete }.to raise_error(
Awspec::BlackListForwardable::CalledMethodInBlackList,
'Method call :delete is black-listed'
)
end
its(:acl) { should be_an_kind_of(Awspec::ResourceReader) }
end
と、実装を進めながら順にテストを追加していきました。
今回は特に基盤となる部分の機能追加でもあるので、「あーね!あーね!」と言いながら関心していたら「博多..」と言われました。
正しい値を知るために、テストREDの結果を利用する
自分はstubの値を知っているので、
describe s3_bucket('my-bucket') do
its('acl.owner.display_name') { should eq 'my-bucket-owner' }
end
とすぐ書いてしまうのですが、そこをあえて
describe s3_bucket('my-bucket') do
its('acl.owner.display_name') { should eq '' }
end
と書いて、一旦テスト結果をREDにし、さらにテスト結果から my-bucket-owner
というstubの値を知るということをしていました。
というかテストを書くとき、必ず結果をREDにするところからスタートしているのが、慣れているなーと思いました。
(ちょっとだけTDD?)
bin/console bin/setup と exe/ ディレクトリ とpry
@udzura さんに「あれ?」と言われて知った事実。
github.com
ちなみに bundle gem
で生成されたのは覚えているのですが「なんだこれ、知らんわ」と消していました。。。
あと「pryがないなんて耐えられないんで。。。」とpry
が追加されました。
対話インターフェースで確認する習慣がないです。。。どうやったらそういう習慣になるんだろう。
(こちら修正しました)
感想
- 教えてもらうのがめちゃくちゃ楽しい。最高体験。
- Ruby力足りない。でもそれが楽しい。最高体験。
- 他の人のコーディングを見るだけで勉強になる。最高体験。
- Emacs。最高。
また、是非やりたいです!
そんな豪華な体験ができる勉強会がFukuoka.rbです。みんなも来たほうが良いと思いました。
以上成果報告でした!