miyatsu's blog

なんか勢いでかいてます。

gaien.rb#9に参加しました。

こんにちは。みやつです。

本日も社内でやってる勉強会gaien.rb#9に参加してきました。 一緒にやってる同僚がちょっと仕事ではまってて最初は1人でだいぶ心が折れそうだったんですが、るびまRubyist Hotlinks読んだり*1twitter上からも応援してくれる人*2がいたりで、なんとか心折れず待つことが出来ました。

第5章 レイアウトを作成する をやった。

前回第4章が綺麗に終わったので今回はその続きの5章から。 layoutファイルをちゃんと作って、bootstrap入れて見た目を綺麗にするところまでやった。 あと、partialに部品切り出して、layoutファイルをスッキリさせるところもやった。 このpartialという文化はいろんなところで見るようになってきた印象。sassに然り、昨日もbackbone.jsで見たような気がする。 アンダースコアをつけるのはプライベートメソッドぽいよね。という話も2人でしてphper感が溢れました。

まとめ

といったところで今日やったことをまとめておきます。

  1. layoutファイルを作った
  2. bootstrap-sassを入れて見た目を綺麗にした
  3. partial機能を利用してlayoutをスッキリさせた
  4. assets pipelineの素晴らしさを知った。
  5. sassの書き方(ネスト)を学んだ

以上が今日の成果です。

*1:大場さんはjavaからrubyの人だったんですね。

*2:ppさん、iwhurtaflyさん、kattonさん、超元気でました。ありがとうございます。

rails tutorial 4章をやった。

こんにちは。みやつです。

最近は遺跡後とか原生林とか氷海や火山洞窟に行ったりで忙しいわけですけど、今日はgaien.rb#8に参加してきました。 前回は1人参加だったのでブログをサボってしまったわけですが、今回は2人だったので今日やったことをまとめておきます。

チュートリアル第4章

第4章 Rails風味のRubyを2人で読みました。この章はRubyのことを勉強する章です。

Rubyはあらゆるものがオブジェクトとのことです。メッセージを受け渡しながら処理を行うのです。メッセージってなんかおしゃれですよね。 ここではメッセージとはメソッドのことで関数のことと書いてあります。 Rubyではメソッドと関数はなんの違いもないという注意書きがありました。そんなもんなんですかねぇ。

Wordクラス作ったり、Stringのサブクラス作ったり、Stringクラスを拡張したり。組み込みクラスを拡張できるのがRubyのすごいとこですね。 この自由度がいいんだろうなぁ。

あと、配列とかハッシュとかシンボルとかそこら辺をひと通りお勉強しました。

これで僕もRuby初心者になれたので次はRails初心者を目指します。

(うーん。なかなか有意なことが書けないなぁ)

追記

そうだそうだ、今日2人で話してて話題になったことだけ書いておきます。 Array.pushが<<演算子で書けるんだけど、この<<演算子ってビット演算ぽいよねって話をしました。で、RubyさんはFixnumクラスに<<演算子を使うとビット演算できるんですね。

irb(main):001:0> 1.class
=> Fixnum
irb(main):002:0> 1<<1
=> 2

なんか”ぽいよね”って感じがだいたいあるのがRuby書いてて気持ちいところだったりするんだろうなぁって思いました。あんまり使うことないんだろうけど、こういうところはやっぱすげーわ。

Sporkも設定したよ

こんにちは。みやつです。

sporkの設定についてもまとめておきます。

Spork

Sporkとは

Railsチュートリアルから引用してみます。

Sporkは環境を1回だけ読み込み、今後実行するテストのためのプロセスを管理します。

テスト実行時に毎回環境を読み込んでると一回のテストに時間がかかっちゃうから一度だけ読み込んで使い回しましょう。ということなんでしょうね。

設定

詳しくはチュートリアルに書いてあるのですが、せっかくなので手順を抽出して後から参照しやすくしてみます。

  • Gemfileに追記
group :development, :test do
  gem 'spork-rails', github: 'sporkrb/spork-rails'
  gem 'guard-spork', '1.5.0'
  gem 'childprocess', '0.3.6'
end
  • インストール
 bundle install
  • bootstrapの実行
bundle exec spork --bootstrap
  • spec/spec_helper.rbの中身を編集

Spork.preforkのブロックに設定を記述します。ここは本家を参照ください。

  • sporkを起動します。
bundle exec spork

これでsporkが起動しました。後はテストを実行するだけです。 ただし、実行する際に--drbオプションを付けなければいけません。

bundle exec rspec spec/requests/static_pages_spec.rb --drb

しかし、.rspecファイルを用意してあげればオプションを明示的につける必要がなくなります。内容は以下

--color
--drb

.rspecファイルはプロジェクトごとでもいいですが、home配下に置いちゃってもいいと思いました。こうすればどのプロジェクトでも使えますもんね。 これで明示的にオプションを指定しなくても大丈夫になりました。

guardとsporkの連携

guardとsporkは連携できるみたいです。その設定もまとめておきます。

  • 連携の初期化処理を実行します。
 bundle exec guard init spork
  • Guardfileを編集します。

ここも詳しくは本家を参照。

  • Guardを起動
 bundle exec guard

これでguard起動時にsporkも起動してくれます。

ハマったところ

手順どおり進めていったにもかかわらず最初設定した際エラーが出てしまいました。こんな感じで。

-[1536]% bundle exec guard
00:54:10 - INFO - Guard is using Tmux to send notifications.
00:54:10 - INFO - Guard is using TerminalTitle to send notifications.
00:54:10 - INFO - Guard::RSpec is running
00:54:10 - INFO - Running all specs
No DRb server is running. Running in local process instead ...
/Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/configuration.rb:867:in `re$uire': cannot load such file -- b (LoadError)
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/configuration.$b:867:in `block in setup_load_path_and_require'
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/configuration.$b:867:in `each'
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/configuration.$b:867:in `setup_load_path_and_require'
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/configuration_$ptions.rb:25:in `configure'
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/command_line.r$:21:in `run'
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/runner.rb:77:i$ `rescue in run'
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/runner.rb:73:i$ `run'
        from /Users/kubota/.rbenv/versions/2.0.0-p247/gemsets/railstutorial4/gems/rspec-core-2.14.5/lib/rspec/core/runner.rb:17:in
 `block in autorun'

何が悪いのかなぁと探っていったところ

guard 'rspec', after_all_pass: false, cli: '--drb' do

としなければいけないところを'-drb'とハイフンを一つ少なく記述していたことが原因でした。*1 なかなかエラー内容からはわかりづらいですよね。

終わり

guardとsporkの設定をまとめました。やっとこ快適なテストライフを手に入れました。最近の自動化ってすごいですよね。

*1:これは今回gaien.rbに来てくださった外部の方のアドバイスにしたがって見つけることが出来ました。ありがとうございました!

guardを設定した。

こんにちは。みやつです。

本日もgaien.rbに参加してきました。今回で6回目を迎えました。順調に回を重ねております。 今回もrailsチュートリアルを写経したわけですが、guardを使ったテストの自動化と、sporkを使ったテストの高速化について学んだのでここでまとめておきます。

guard

guardとは、ファイルの変更を監視し、変更があった場合に自動的にテストを実行してくれるgemです。

これを使うためには以下の手順で設定をします。

  • guard-rspecをGemfileに追加します。
group :development, :test do
  gem 'guard-rspec
end
  • インストールします
bundle install
  • guradを初期化してrspecが動くようにします。
bundle exec guard init rspec

これでGuardfileができます。

  • 必要に応じてGuardfileを編集します。今日習ったのは失敗したテストが後にパスしたとき、他の余分なテストが実行されないようにするために以下を設定するといいよってことでした。
guard 'rspec', all_after_pass: false do
  • 最後にguardを実行します
bundle exec guard

以上の手順でguardが動いてテスト対象のファイルを監視して自動でテストが実行されるようになります。またmacの場合はgrowlでテスト結果を通知してくれるgemがありますので、それを入れるとテスト結果が見やすくなりそうです。

group :development, :test do
  gem 'growl'
end

つづきます。

と、ここまで書いてみましたが眠くなってしまったので、sporkの設定方法は明日まとめます。 おやすみなさい。

gaien.rbという勉強会

こんにちは。みやつです。

9/3にgaien.rb第五回に参加してきました。とは言っても2人だけの社内勉強会。と思いきや、今回はなんと外部の方が2人も参加してくれました。なんといつもの倍!

 gaien.rb

はやいもんでもう五回目となる本勉強会ですが、ぼんやりと方針が固まってきました。 
 

せっかく1人じゃないので1人じゃできない事をやる。

 
これがこの会の1番のポリシーなのかなと。もう、もくもくなんてさせない!(ごめんなさい。いま思いつきました。

今日やった事

1人でやらないというポリシーをもとに何をやったかといいますと。
Railsチュートリアル3章

これは勉強会のメインコンテンツ、みんなでわいわい進めました。丁度切り良く3章が終わるとこまで進めることができました。

Rspecの語彙の話し

チュートリの第3章はテスト駆動開発から始まります。静的ページなんだけどテスト書くんですね。そこでRspecのソースを見ていたら、「今はインテグレーションテストの語彙が変わりつつあるみたい」という話に派生して「describeがfeature、itがscenarioに変わってる。」ということを教えてもらいました。

BasicObjectの話し

続けて「昔はpage.shouldって書いてたけど特定のケースで問題があるんですよ」という話になり、「どういうときですか?」とどんどん脇道にそれていきました。お話をお伺いしたところ、このshouldというのはObjectに生えていて、BasicObjectを継承したクラスをテストする場合には存在しないから問題になるとのこと。「どっちで書いてもいいんだけど今はexpect(page)って書きますね。」だそうです。なるほどねー。

みんなの開発環境の話し

代表でコードを記述してくれてた同僚はvimを使っているんですけど、今回の参加者の方はruby mineだったり、僕はsublime textだったりでみんな開発環境違うんですねー。っていう話を合間にした。他人の環境って見ることあまりないからこういうの知るのも面白い。

コミットの粒度の話し

と、なんだかんだ話しながら3章を終えたのですが、チュートリアルだとこのタイミングでコミットしましょうということになってました。で、「この粒度でコミットなんですか?」みたいな質問をしたところ、やっぱりこの粒度では大きいみたい。コミットはかなり細かくしてもよくって、例えば、空白を削除してコミット、タイポ直してコミット、フォーマット整えてコミット、みたいにやっても良いみたい。

でも、viewの部分に関しては若干違って、多少粒度が大きくなる傾向があるとのこと。こういうところの経験者の話はためになります。やはりみなさん試行錯誤しているんですね。

gitの話し

最終的にgithubにpushしたんですが、branchを同期とってなかったためにrejectされてしまい、こういう時はfetchしてマージするというケースを実践することに。無事コンフリクトを解消してマージコミットしたものの、pushをするとまた同じrejectの文字が。古いgitのバージョンだとローカルにあるbranchすべてをリモートにpushするようで、それが今回効いておりました。なんかいろいろやってとりあえず解決。たくさんサポートしてもらいました。

apple tvの話し

最後にapple tvあると便利だよねって話をしました。もはやruby関係ない。

 

他にもいろいろ話して、テストの話とか、なんとなくcircleafのコミュニケーションルームにメモりました。

 所感

rubyをだしにみんなでワイワイやるっていうのはすごいリッチな時間だった。社内じゃ解決しないことも外部の方に聞けばだいたい答えてくれるからすごい勉強になったし。
最後は見積もりの話とかして、やっぱ課題なんだなぁ。という印象。
なんかずっとしゃべってる勉強会だった。勉強になりました。
参加して頂いた方、ありがとうございました!!

勇気をもってつぶやいたんだよ。

こんにちは。みやつです。

sendagaya.rb

今日はgaien.rbのコンサル@ppworksさんが主催する、sendagaya.rbに参加してきました。 内部的にちょっとお手伝いをするみたいな話をしていたので意気込んで行ったんですが、なんと共同主催者の@tkawaさんに伝わってないという事件があり、おとなしく座ってました。

pjax

本日のsendagaya.rbはSonicGarden Study #4のパブリックビューイングを行いました。 pjaxとはなにかといいますと。

HTTPリクエストでページ全体を更新するのではなく、Ajaxリクエストでページの一部を更新&それに応じてURLもpushStateで書き換える仕組み。

とのことです。詳細は本家資料をご参照ください。

質問したよ。

今回SonicGarden Studyを初めて拝見したのですが、毎回最後に質問コーナーがあって、つぶやくとそれに答えてくれるようでした。そこで思い切って質問をしてみました。

実はこの質問をするにあたって、ものすごい葛藤がありました。 というのも、SonicGardenさんといえばすごい人の集まりであり、今回参加しているsendagaya.rbに集まっている人も僕からみたらやっぱりすごい人たちなわけです。そんななか、こんなしょぼい質問してもいいのかなぁ。とか、笑われたらどうしよう。とかいろいろ考えたわけです。 震える手をこらえながらPCのエンターキーを押してつぶやいてみました。

そしたら、この質問に関して画面の向こう側ではブレイクダウンしてすごく丁寧に回答をしてくれたんですね。こんな一言でしたけど、

Q「PCのブラウザでは使えますか?」

A 「大丈夫ですね。」

Q 「ではスマフォでは?」

A「大丈夫です。」

Q「じゃあガラケーでは?」

A「pjaxが動かなくても遷移しますので、問題ないんじゃないですかね」

みたいな感じで。 これはちょっとテンションが上りまして、質問してよかったな。と思いました。

思ったこと。

家に帰ってきて思ったのは、勇気をもってつぶやくのも良いことなんだなと。 自分は引込み思案な方で、ハッシュタグつけてつぶやくのも結構気が引けちゃうんですよね。こんなしょぼい発言が人の目に触れるなんて。とか思って。まあ、でも今日はつぶやいてよかったなと。疑問に思ってることも解消されたし。それにこういうふうに質問できたのってコミュニティの雰囲気の良さもあったのかなと思いました。そういう雰囲気作りは大事なんですよね。gaien.rbでも参考にしなきゃ。

最後に

で、テンション上がったのは良かったんですけど、勉強会会場に忘れ物しまして、それが奥さんの誕生日プレゼントっていうね。最初から買ってませんよっていう態度を貫いてますけどね。もうなんか残念な感じですよね。明日取り行ってきます。

伝えたいこの思い

こんにちは。みやつです。

今日は仲間について。

gaien.rbっていう勉強会をいま主に2人でやってるんですけど、何がいいって、たった2人だけど1人じゃないってとこです。
 
ぼくともう1人の同僚はあまり同じプロジェクトで仕事しないし、席も遠いんだけど結構仲良しで技術のこととか話したりします。gaien.rbも彼が誘ってくれました。
 

gitをこっそりいれた話。

今勤めてる会社の開発プロセスっていろいろ前時代的で、今流行のモダンなプロセスと比べると溜息が出ちゃう感じなんですね。バージョン管理もsvnを使ってて。まぁそうなっちゃってるもんは文句いってもしょうがないってことで、僕とそのもう一人の同僚は諦めずにちょっとづつでも改善しましょうって、個人的にgit-svnいれてローカルでgitを使い始めたんです。
きっかけはなんだったか忘れちゃいましたが、
同「今のイケてる開発者たちはみんなgitつかってるみたいですね。」
み「そうなんすか、じゃあ僕らだけでも使いましょうか。」
 みたいな結構軽いノリではじめた気がします。で、しばらく二人でターミナルで使ってたんですが、guiクライアントのsource treeを見つけて
み「source treeってすごいよくできてますよね。」
同「ほんとそうですよね。」
み「これだったらみんな使えるんじゃないかなぁ。」
同「ですよね。ちょっと若い子*1たちに使ってもらいましょうか。」
み「いいですね。2人で社内説明会開いて覚えてもらいましょう。」
こんな感じで話し合って、すごいいいバージョン管理システムguiクライアントを見つけたんですよー。とかちょっとぼかしつつこっそりgit-svnを社内の一部に導入しちゃったんです。*2
もちろん社長の合意は得た上でやってますけど、彼がいなかったらちょっとできなかったように思います。
(そして本日なんとデザイナーの人にもsource treeを使ってもらうことに成功しました!

1人じゃないってこと。

gaien.rbもgitの話もそうですけど、1人じゃないってことがポイント。

やっぱり1人じゃめげちゃう時とかあるし、どっかで諦めて最後までやりきれない時ってあると思うんですけど、こういうモチベーション高くてやる気のある人と一緒だとあーだこーだいいながら結構できちゃうと思うんですよね。

僕らはまだまだ遅れてて、キラキラしたwebの有名な会社のすごいプロダクトとかの足元にも及ばないんだけど、仲間*3がいれば、いつかは彼らに追いつくんだって気持ちを忘れないで、あきらめずにちょっとづつ前進していけるって思うんですよ。

 

 はて。

と、勢いでここまで書いてみたんですが、何を伝えたかったのかよくわかんなくなってしまったので、ポエムを終わります。

*1:若いってのがポイント

*2:大したことじゃないかもしれませんが、うちの会社ではこんなことでも結構大変だったんですよ...

*3:もちろんその同僚だけじゃないんですよ。