give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

Qiitaに「テストコードの期待値はDRYを捨ててベタ書きする」という記事を書きました

お知らせ

昨日、Qiitaに「テストコードの期待値はDRYを捨ててベタ書きする ~テストコードの重要な役割とは?~」という記事を書きました。

テスト初心者の人が読むと役に立つかもしれません。
よかったら読んでみてください。

追記:さらに続編も書きました

上の記事で説明したテストコードをMinitestで書いたバージョンと、RSpecらしく書いたバージョンを説明している、続編の記事です。

この記事を書いた理由、もしくは「DRYを捨てる」という表現について

この記事を書いた理由は、テストコード内で変数や実装コード側のロジックを多用するコードを最近何度か目にしたからです。
たとえばこんな感じです。

given(:user) { create :user, name: 'Alice' }
scenario 'ユーザー詳細ページを表示する' do
  visit user_path(user)
  expect(page).to have_content "#{user.name}さん"
end

別の例を出すとこんな感じ。

class User
  def upper_name
    name.upcase
  end
end

let(:user) { create :user, name: 'Alice' }
describe '名前を大文字にする' do
  upper_name = user.name.upcase
  expect(user.upper_name).to eq upper_name
end

上のようなテストコードは次のように期待値をベタ書きするが望ましいです。

given(:user) { create :user, name: 'Alice' }
scenario 'ユーザー詳細ページを表示する' do
  visit user_path(user)
  expect(page).to have_content "Aliceさん"
end
class User
  def upper_name
    name.upcase
  end
end

let(:user) { create :user, name: 'Alice' }
describe '名前を大文字にする' do
  expect(user.upper_name).to eq 'ALICE'
end

なぜベタ書きした方がいいのかはQiita記事を読んでみてください。

ただ、熟練プログラマの人がこれを見ると「これはDRYとは関係ないんじゃないか?」と感じられる方もいるようです。
たしかに、実装コード側でよく言われるDRY原則と、期待値を変数や実装コードとほぼ同じロジックで書くことは、別物かもしれません。

とはいえ、僕がその人たちのコードを見ていると、「テストコードも1箇所の変更だけで済むコードが良いコード」だと考えているんじゃないかな?と感じました。

たとえば、AliceをBobに変更する場合、変数を使っていると1箇所の変更で済みます。

given(:user) { create :user, name: 'Bob' } # 変更1
scenario 'ユーザー詳細ページを表示する' do
  visit user_path(user)
  expect(page).to have_content "#{user.name}さん"
end

しかし、ベタ書きしていると2箇所の変更が必要です。

given(:user) { create :user, name: 'Bob' } # 変更1
scenario 'ユーザー詳細ページを表示する' do
  visit user_path(user)
  expect(page).to have_content "Bobさん" # 変更2
end

この「省エネ精神(?)」を一言で表現したい、と思ったときに「DRY原則が一番近いかな」と僕は思いました。
なぜなら、DRY原則も「コードの重複がなければ変更は1箇所だけで済む」という結果になるからです。

本当は「DRY」以外の言葉で表現すべきなのかもしれませんが、簡潔に表現できて、なおかつテスト初心者の人にも刺さるような言葉を思いつかなかったので、今回はDRYという言葉をタイトルや本文にちりばめています。

もし他に何かいい表現があれば、ぜひ教えてください m(_ _)m

まとめ

というわけで、今回はQiitaに書いた「テストコードの期待値はDRYを捨ててベタ書きする」という記事を紹介しました。
DRYという言葉が適切かどうかは記事の趣旨ではなく、僕が本当に言いたかったのは「実装コードでは良いとされているとプラクティスをテストコードに持ち込むと具合が悪くなる」ということです。

すべての人に「文句なし!」と言ってもらえる文章を書くのは難しいですが、内容自体はそれなりに読む価値があると思うのでぜひ読んでやってください。

あわせて読みたい

最近書いたその他のQiita記事を載せておきます。
まだ読んでない記事があれば読んでみてください。

  • 正規表現で名前付きキャプチャを使う方法を説明しました。

  • RubyGems.orgで発生した脆弱性に関する翻訳記事です。

  • 正規表現の\Aや\zの意味を詳しく説明しています。

Everyday Railsのチャリティセールが終了したので期間中の収益を報告します

このブログでも何度かお伝えしたように、熊本地震の災害支援のために2016年4月25日から2016年5月31日まで「Everyday Rails - RSpecによるRailsテスト入門」のチャリティセールを実施していました。

このエントリでは期間中の収益や売上の詳細、セールが終了した後の今後の進め方等についてお知らせします。

期間中の収益は1,436.98ドル(約15万3000円)!

期間中の収益は最終的に1,436.98ドル(約15万3000円)になりました!
当初の目標が500ドル(約5万3000円)だったので、3倍近い収益が上がったことになります。
また、購入数を集計すると148冊でした。

この結果には僕たち翻訳チームもビックリしています。
購入してくださったみなさん、本当にありがとうございました。

f:id:JunichiIto:20160606043605p:plain

期間中の売上詳細

期間中の売上は毎日トラッキングしていたので、その結果も公開しておきます。
売上がなかった日は5月22日と5月28日だけで、それ以外は毎日売上が発生している点にも注目してください。

日付 購入数 収益 累計額 備考
2016/04/25 9 $84.62 $84.62
2016/04/26 17 $167.93 $252.55
2016/04/27 16 $151.94 $404.49
2016/04/28 3 $22.80 $427.29
2016/04/29 3 $23.71 $451.00
2016/04/30 4 $31.31 $482.31
2016/05/01 4 $40.31 $522.62 目標達成!
2016/05/02 2 $16.11 $538.73
2016/05/03 1 $17.51 $556.24
2016/05/04 4 $30.40 $586.64
2016/05/05 1 $17.51 $604.15
2016/05/06 4 $30.40 $634.55
2016/05/07 2 $26.87 $661.42
2016/05/08 3 $22.80 $684.22
2016/05/09 3 $32.71 $716.93
2016/05/10 3 $32.71 $749.64
2016/05/11 2 $17.91 $767.55
2016/05/12 4 $41.27 $808.82
2016/05/13 2 $27.82 $836.64
2016/05/14 1 $7.60 $844.24
2016/05/15 5 $55.31 $899.55
2016/05/16 3 $48.93 $948.48
2016/05/17 2 $25.11 $973.59
2016/05/18 2 $16.11 $989.70
2016/05/19 3 $22.80 $1,012.50 目標の2倍!
2016/05/20 3 $42.62 $1,055.12
2016/05/21 2 $15.20 $1,070.32
2016/05/22 0 $0.00 $1,070.32
2016/05/23 4 $30.40 $1,100.72
2016/05/24 2 $25.11 $1,125.83
2016/05/25 4 $33.16 $1,158.99
2016/05/26 3 $24.62 $1,183.61
2016/05/27 2 $17.00 $1,200.61
2016/05/28 0 $0.00 $1,200.61
2016/05/29 4 $54.71 $1,255.32
2016/05/30 9 $88.22 $1,343.54
2016/05/31 12 $93.44 $1,436.98

 

参考:購入金額別の割合と平均購入金額

Everyday Railsを販売しているLeanpubというサービスでは、購入者が購入金額を自由に決められるのが特徴です。

f:id:JunichiIto:20160424053926p:plain

Everyday Railsではセール期間中、9ドルから40ドルまで購入金額を選択できるようになっていました。
参考までに、どれくらいの人がどういう金額を選択していたのか、集計を取ってみました。

以下は購入金額別の割合です。

最低金額の9ドルで購入 102件 68.9%
9.1ドル~16ドルで購入 22件 14.9%
16.1ドル以上で購入 24件 16.2%

7割近い方が最低購入金額の9ドルを選択されていますが、9.1ドル以上を選択している方も3割以上います。
16ドルを境に集計を分けたのは、通常の最低購入金額を16ドルに設定してあるためです。

また、セール期間中の平均の購入金額は11.3ドルでした。

おわび(?)

なお、これはあくまで購入金額の分布や平均値を見るためだけで、決して購入金額の大小で偉い・偉くないを評価しようとしているわけではありません。
また、誰がいくらで購入したのかは分からないようになっているので、「自分の購入金額がバレてる!?」と心配される必要もありません。
もし購入された方で「ぎくっ」と思われた方がいたらごめんなさい。。。

今後の流れ

冒頭で期間中の収益は1,436.98ドル(約15万3000円)と報告しましたが、実際に日本円としていくらになるのかはまだわかりません。
これはLeanpubの仕組み上、収益が確定するのが8月以降になることと、USドルから日本円に両替する際はそのときのPaypal上の為替レートが使われるためです。

セール期間中の収益が確定し日本円への両替が完了次第、熊本地震の災害支援への募金・義援金とさせてもらいます。

ただし、どういった団体に募金・義援金を送るのかはまだ決まっておりません。
様々な団体があって、様々な目的でお金が使われるので、「じゃあここで」と単純に決めづらいんですよね・・・。

思ったよりも額が集まったので、複数の団体に分散させるのがいいかなとは思っていますが、具体的な送付先はまだ未定です。
もし何か良い情報をご存知の方がいたら、教えてやってください。

募金・義援金の送金が完了したら、またこのブログ上で報告させてもらいます。

まとめ

というわけで、このエントリではEveryday Railsのチャリティセールの収益を報告しました。
繰り返しになりますが、購入してくださったみなさん、どうもありがとうございました。

なお、Everyday Railsはチャリティセールが終了しても引き続き販売中です!
Railsでテストコードが書けるようになりたい、と考えている方には打ってつけの一冊ですので、今後とも「Everyday Rails - RSpecによるRailsテスト入門」をよろしくお願いします。

Everyday Rails - RSpecによるRailsテスト入門
f:id:JunichiIto:20160424081240p:plain

あわせて読みたい

以下はこのチャリティセールに関するエントリです。

5月下旬~6月下旬が見頃!兵庫県西脇市のホタルスポットと、家族で楽しめるオススメスポットを紹介します

2017.5.31追記:2017年もホタルを見に行きました

今年も家族でホタルを見に行きました。
たくさん飛んでいてキレイでした。

西脇市観光協会のFacebookページを見に行くと、ホタル情報のアップデートをこまめにやってくれているので参考になると思います。
ぜひチェックしてみてください!

西脇市観光協会 | Facebook

今年(2016年)もホタルを見に行きました

去年に引き続き、今年も地元・兵庫県西脇市のホタルを見に行きました。
いやあ、近くに野生のホタルが見られる場所があるのはいいですね。
子どもたちもとても喜んでいました。

ただ、例によってホタルの写真を撮るのは非常に難しいです!
iPhoneとかだと、かなり近寄って撮らないとホタルの光は写真に写りません。

一番キレイに撮れた写真でこれかな?
こちらは足下の草むらで光っていたホタルです。

f:id:JunichiIto:20160528052958j:plain:w350

とはいえ、こんな素人が撮った写真だとイメージがわかないと思うので、西脇市のFacebookページに載っていた写真を紹介します。

f:id:JunichiIto:20160528093708j:plain
Photo: 西脇市 - 〔畑谷川でホタルが舞い始めました〕... | Facebook

こんなふうに「よく探さないと見つけられない」とかではなく、かなりたくさん飛び交っています。
この時期であれば苦労することなくホタルに会えると思います。

どこで見られるの?

兵庫県西脇市中畑町にある畑谷川の周辺にいくとホタルが見られます。

僕が見に行ったのは双葉小学校の近くです。

大阪や神戸からだと車で1時間半~2時間ぐらいだと思います。

見頃はいつなの?

ホタルが飛ぶ時期は5月下旬~6月下旬です。
去年(2015年)は6月2日~7日頃がピークだったそうです。

蛍が良く飛ぶ時間帯は日没から夜9時頃までだそうです。
なので8時前後が一番よく見られるのではないでしょうか。
僕もそれぐらいの時間に見に行きました。

その他、西脇市の詳しいホタル情報はこちら

西脇市のホタル情報はこちらのページにまとめられています。
鑑賞時の注意事項等も書いてあるので、見に来られる場合は一通り目を通しておきましょう。

にっぽんまんなか紀行(西脇市観光協会) |にっぽんまんなか紀行(西脇市観光協会)
f:id:JunichiIto:20160528061508p:plain

また、去年書いたこちらのブログも参考にしてみてください。

ホタルだけじゃない!西脇周辺の家族向けオススメスポット

ところで、僕は大阪生まれ・大阪育ちなのですが、西脇に来るまで野生のホタルは一度も見たことがありませんでした。
都会に住んでいると野生のホタルを見る機会はまずないと思うので、お子さんと一緒に見に来るといい思い出作りになると思います。
(カップルで見に来てた人もいたので、デートコースにするのもアリかもしれませんが・・・)

せっかく遠くに来るんだから、「ホタルを見て帰るだけ」はもったいないです。
というわけで、西脇周辺のオススメスポットを紹介します。

公園で遊ぶ

このへんは田舎なので大きな公園がいっぱいあります。
駐車場も無料なので、時間を気にせずいっぱい遊ぶことができます。
ちょっと大きなお子さんがいる場合はバトミントンやサッカーボールなんかを持ってきて、芝生で遊ぶのもいいと思います。

播磨中央公園(と、おもしろ自転車)

西脇市の隣町、加東市にある大きな公園です。
「子どもの森ゾーン」に行くと、お子さんの楽しめる遊具がたくさんあります。

f:id:JunichiIto:20160528063652p:plain
Photo: 緑の樹林に囲まれた丘や大小の池が散在する自然ゆたかな、兵庫県立播磨中央公園

また、こちらは有料ですが、同じ公園内にある「おもしろ自転車」コーナーはその名の通り、面白い自転車にたくさん乗れます。

f:id:JunichiIto:20160528064105j:plain:w350

詳しい情報はこちらをどうぞ。

西脇市茜が丘複合施設 Miraie(みらいえ)

西脇には去年オープンしたMiraieという複合施設があります。
屋外だけでなく、屋内にも遊具があるのが特徴です。

f:id:JunichiIto:20160528064805j:plain

f:id:JunichiIto:20151026133008j:plain:h180 f:id:JunichiIto:20160528065044j:plain:h180
Photo: http://www.city.nishiwaki.lg.jp/miraie/kodomoplaza/jidoukan/jidoukan_annnai/1440114461800.html

また、施設内には図書館もあるので、お父さんお母さんは本を読みながら休憩、なんていうこともできます。

f:id:JunichiIto:20160528065923j:plain
Photo: 西脇市 - いいろな世代が本を一緒に楽しめる施設です | Facebook

詳しい情報はこちらをどうぞ。

日本へそ公園

西脇市は東経135度・北緯35度の交差点があり、ここが「日本列島の中心」に当たることから、「日本のへそ」のまちとしてPRしています。
f:id:JunichiIto:20160528070150g:plain
Photo: http://www.city.nishiwaki.lg.jp/shiseijyoho/shinogaikyo/nihonnoheso.html

そして、その「へそ」にちなんだ「日本へそ公園」があります。
変わった名前ですが、こちらも子ども向けの遊具がたくさんある大きな公園です。

f:id:JunichiIto:20160528070446j:plain
Photo: 西脇市 - 西脇市さんが写真を追加しました — 場所: 日本へそ公園 | Facebook

子どもが大喜びするジャンボ滑り台もあります。(お父さんお母さんは上るのが大変ですが・・・)
f:id:JunichiIto:20131123144238j:plain
Photo: http://www.kansai-odekake.com/hyogo-park-heso.html

詳しい情報はこちらをどうぞ。

おいしいものを食べる

西脇にはおいしいお店もいっぱいあります!
ぜひランチや夕食を食べて帰ってください。

播州ラーメン

西脇市の代表的な地元グルメは甘いスープが特徴の「播州ラーメン」です。
中でも「大橋ラーメン」が一番有名です。

f:id:JunichiIto:20151018054707j:plain

http://tabelog.com/hyogo/A2804/A280404/28001391/

市内には他にも「播州ラーメン認定店」があります。
詳しくはこちらをどうぞ。

www.nishiwaki-kanko.jp

西脇ローストビーフ

西脇には神戸ビーフとしても認定されている、黒田庄和牛というブランド牛があります。
最近、この黒田庄和牛をローストビーフにし、そのローストビーフを使ったメニューが市内各地のカフェやレストランで提供されています。

f:id:JunichiIto:20160528075305j:plain
Photo: 【グルメ情報】新登場!「西脇ローストビーフ」〜黒田庄和牛を使ったご当地グルメ |にっぽんまんなか紀行(西脇市観光協会)

ローストビーフが食べられるお店は多数あるので、詳しくはこちらのページをチェックしてみてください。

美味しくてオシャレなカフェ

西脇には美味しくてオシャレなカフェが多いです。
先ほど紹介した「西脇ローストビーフ」のメニューもあります。
こちらは先日僕が食べてきたカフェ・モモンスランのローストビーフサンドです。
美味しかった~!

f:id:JunichiIto:20160528080559j:plain

こちらの2店舗は禁煙になっているので、小さなお子さんがいても安心して食べられます。

http://tabelog.com/hyogo/A2804/A280404/28040269/ http://tabelog.com/hyogo/A2804/A280404/28043754/

お買い物をして帰る

手ぶらで帰るのはもったいないので、何かお土産を買って帰るのもいいんじゃないでしょうか?

道の駅 北はりまエコミュージアム

北はりまエコミュージアムは西脇の特産物が集まる道の駅です。
また、こちらでも西脇ローストビーフを使ったローストビーフバーガーが食べられます。

f:id:JunichiIto:20160528082629j:plain
Photo: 西脇ローストビーフ提供店舗|西脇いちおしグルメ

もちろん地元の特産物販売コーナーもあります。

f:id:JunichiIto:20160528082548j:plain:h180 f:id:JunichiIto:20160528082618j:plain:h180
Photo: http://www.city.nishiwaki.lg.jp/kankotokusan/tokusanhingourmet/1359450251212.html

詳しい情報はこちらをどうぞ。

北はりま旬菜館

北はりま旬菜館は地元で採れた旬の野菜や農産物が集まる直売所です。
安くて美味しい旬の食材を買って帰るのはいかがでしょう?

f:id:JunichiIto:20120622101725j:plain:h180 f:id:JunichiIto:20150425101803j:plain:h180
Photo: 北はりま農産物直売所 北はりま旬菜館/西脇市ホームページ

詳しい情報はこちらをどうぞ。

美しい播州織ショール・tamaki niime(たまきにいめ)

西脇市は昔から播州織という先染めの綿織物が有名です。
その播州織を使って一点物の美しいショールを作られている、玉木新雌(たまきにいめ)さんというデザイナーさんのお店が市内にあります。

f:id:JunichiIto:20160528084351j:plain
Photo: tamaki niime |にっぽんまんなか紀行(西脇市観光協会)

奥さんや彼女へのプレゼントとして買ってあげると喜ばれるかもしれませんよ?

f:id:JunichiIto:20160528084810j:plain
Photo: web shop lotta

詳しい情報はこちらをどうぞ。

のんびりお風呂につかってから帰る

少し遠いところからホタルを見に来ると、家に帰る時間が遅くなると思います。
小さなお子さんは早く寝たいと思うので、家に帰ってからお風呂に入るよりも、先にお風呂を済ませてから家に帰り、家に着いたらすぐ寝る、というプランの方がいいんじゃないでしょうか?

ホタルスポットから車で10分ぐらいのところに「官兵衛の湯(かんべのゆ)」という入浴施設があります。
天然温泉ではなく、天然温泉を科学的に分析・研究した「人口温泉」だそうですが、お風呂は広くて露天風呂もあり、ゆったり過ごせる入浴施設になっています。

f:id:JunichiIto:20160528113826j:plain
f:id:JunichiIto:20160528113830j:plain
Photo: 官兵衛の湯 - 楽しむ|道の駅 北はりまエコミュージアム

詳しい情報はこちらをどうぞ。

日帰りホタル観光プランの例

大阪や神戸にお住まいの方はこんなプランでホタルを見に来るのはいかがでしょうか?

  • 09:00 自宅を出発
  • 10:00 播磨中央公園で遊ぶ
  • 12:00 カフェ・モモンスランでランチ
  • 13:00 Miraieで遊ぶ
  • 15:00 道の駅でお買い物
  • 16:00 へそ公園で遊ぶ
  • 18:00 大橋ラーメンで夕食(週末は並んでるかも?)
  • 19:30 ホタルスポットを散策~ホタル観賞
  • 20:30 官兵衛の湯で入浴
  • 21:30 帰路につく

まとめ

というわけで、今回は西脇市内のホタルスポットと周辺のオススメスポットを紹介してみました。
西脇は何にもない田舎・・・と見せかけて、大きな自然や公園、おいしい食べ物なんかは意外とたくさんあるので、日帰りで遊んで帰るにはなかなかいいところですよ。
他にも「こんなお店ない?」といった疑問や質問があればコメント欄等で質問してください。

家族で楽しい思い出作りをして帰りましょう~!

f:id:JunichiIto:20160528110714j:plain
Photo: http://www.nishiwaki-kanko.jp/blog/2016/05/20160509.html

まだまだある西脇市の観光スポット

西脇市内にはこのエントリで紹介していない観光スポットや美味しい飲食店がまだまだたくさんあります。
興味がある方は以下のページもぜひ見てください。


あわせて読みたい

日帰りドライブではなく、西脇に移住したらどうなるの?という情報も過去にいろいろ書いています。
こちらもよかったらどうぞ。