SlideShare a Scribd company logo
1 of 78
Download to read offline
この RSpec には 
夢があるッ!! 
inspire the るびま&ジョジョ 
今さらながら 
RSpecに入門してみた
さくらば@ZARU 
株式会社ベーシック&株式会社フルセイル 
TwitterとQiita、やってます。 
楽しいことは誰にも譲らないで、自分で楽しむタイプです。 
! カレーと寿司とラーメンが好き 
! プログラミングが好き 
! どんな言語も好きだけど、JavaScriptが大好き 
! 娘、産まれて育ってます
今日は 
Railsアプリで、RSpec使った 
テストに入門した話をします。
その前に…
宣伝!
今月もQiita投稿大会やってます! 
ルール 
! 月内に獲得したストック数が一番多いものが優勝 
! 月内に投稿された記事で咲いたストック数は優秀賞 
! 9月は優勝/優秀賞には天ぷら 
! さくらばが優勝したら、割り勘ね…
宣伝ここまで
はじめます
? 
そもそもテストって何?
…っていう話は今回はしません。
まず、テストコードを 
書けるようになってから考えよう。 
道具について語るには、まず道具を知ることから。
TDD is dead. Long live testing. 
Rails作者:David Heinemeier Hansson
偏った原理主義に走るなよ、環境は変わってきているんだし 
テストのあり方も変えていこうぜ。っていう話…と思ってます。
「磯野ー!テストしようぜ!」
テストの原則 
! テストは信頼できるものであること 
! テストは簡単に書けること 
! テストは簡単に理解できること 
RSpecによるRailsテスト入門より引用
前置きは終了。
この本を 
ベースに 
話します。 
分かりやすく 
とてもいい本です。 
RSpec3用にリニューアルも 
予定しているっぽいです。 
買いましょう。
RSpecに 
入門してみる
今日、話すこと 
! Gemfile + RSpec設定 
! モデルスペック 
! ファクトリ 
! コントローラスペック
Gemfile
group :development, :test do 
gem "rspec-rails", "~> 2.14.0" 
gem "factory_girl_rails", "~> 4.2.1" 
end 
group :test do 
gem "faker", "~> 1.1.2" 
gem "capybara", "~> 2.1.0" 
gem "database_cleaner", "~> 1.0.1" 
gem "launchy", "~> 2.3.0" 
gem "selenium-webdriver", "~> 2.39.0" 
end 
RSpec3が2014年6月くらいにリリースされているけど、今回は2系を使用。 
3については下記ページ参照。 
http://qiita.com/yujinakayama/items/a1d31b2caa35642e8e69 
http://nilp.hatenablog.com/entry/2014/05/28/003335
紹介
rspec-rails 
RSpec本体 + RailsでRSpec使うためのもろもろ。 
factory_girl_rails 
標準フィクスチャをもっと便利なファクトリとして提供してくれる。 
テストデータをさくっと作るのにイケてるガール。 
faker 
名前・メールアドレスなどダミーデータを作ってくれる。 
日本名に対応したFaker::Japaneseというのもある。 
capybara 
Webアプリテストをコードレベルで行うことができる。 
色々連携する。
database_cleaner 
まっさらな環境で、テストが実行できるように 
テストデータを消してくれる。 
launchy 
好きなタイミングでブラウザを開くことができる。 
selenium-webdriver 
Seleniumでブラウザ上テストを実行できる。 
他にもGuard・RuboCopとかテスト周りで便利なGemある
RSpecの設定
$ bundle exec rails g rspec:install 
create .rspec 
create spec 
create spec/spec_helper.rb 
.rspec 
--color 
--format documentation 
RSpecの実行結果を、見やすく楽しくしてくれる設定
こんな感じ
/config/application.rb 
config.generators do |g| 
g.test_framework :rspec, 
fixtures: true, 
view_specs: false, 
helper_specs: false, 
routing_specs: false, 
controller_specs: true, 
request_specs: false 
g.fixture_replacement :factory_girl, dir: "spec/factories” 
end 
ジェネレータで作成されるスペックファイルの設定。 
ビューはRSpecではテストしないので作らない。 
フィクスチャの代わりにファクトリを使う。
モデル 
スペック
名前とメールアドレスを持つContactという 
モデルがあったとして、Contactモデルの 
スペックを書いてみる。 
Contact 
name 
email 
さくっと、scaffoldしておく。 
$ bundle exec rails g  
scaffold contact  
name:string  
email:string:unique 
$ bundle exec rake db:migrate 
Rails4.1からdb:test:cloneなどは、自動で行われるので必要なくなった
テストって 
どう書くの?
モデルスペックを書いてみる
$vi /spec/models/contact_spec.rb 
require 'spec_helper' 
describe Contact do 
it "全てのデータが有効な状態であること" 
it "名前がなければ無効な状態であること" 
it "メールがなければ無効な状態であること" 
it "重複したメールアドレスなら無効な状態であること" 
end 
まず、期待する動作をアウトライン的に 
書き出してみる。
おもむろにテストを実行してみる。 
$ bundle exec rspec
scaffoldで勝手に作られた 
コントローラースペックが動いてます。 
+今作ったContactモデルのも。 
当然、テストの中身を書いてないので、 
pendingという状態になってます。
テストコードを書いてみる
require 'spec_helper' 
describe Contact do 
it "全てのデータが有効な状態であること" do 
contact = Contact.new( 
name: 'zaru', 
email: 'zaru@example.com' 
) 
expect(contact).to be_valid 
end 
end 
Contactモデルを作成する(DBには保存しない) 
expect(オブジェクト).to 期待するもの、でテストできる 
RSpec2.11から、オブジェクト.should が expect() に変更になりました
おもむろにテストを実行してみる。 
$ bundle exec rspec
テスト通ってる!
でも、実はこれ…
中身ないContactオブジェクト 
でもテスト通る!
require 'spec_helper' 
describe Contact do 
it "全てのデータが有効な状態であること" do 
contact = Contact.new() 
expect(contact).to be_valid 
end 
end 
通る!
なので、バリデーション設定しましょう。
$vi /app/models/contact.rb 
class Contact < ActiveRecord::Base 
validates :name, presence: true 
validates :email, presence: true, uniqueness: true 
end 
nameもemailも必須で、emailはユニーク扱い。
中身のないContactオブジェクトのまま… 
再度、実行!
失敗してる!
1個ずつバリデーションのテストしましょう
require 'spec_helper' 
describe Contact do 
it "名前がなければ無効な状態であること" do 
contact = Contact.new( 
name: nil 
) 
expect(contact).to have(1).errors_on(:name) 
end 
it "メールがなければ無効な状態であること" do 
contact = Contact.new( 
email: nil 
) 
expect(contact).to have(1).errors_on(:email) 
end 
end 
nameのデータを空にして 
エラーがでるかテスト
重複のテストもしましょう
require 'spec_helper' 
describe Contact do 
it "重複したメールアドレスなら無効な状態であること" do 
Contact.create( 
name: 'zaru', 
email: 'zaru@example.com' 
) 
contact = Contact.new( 
name: 'tofu', 
email: 'zaru@example.com' 
) 
expect(contact).to have(1).errors_on(:email) 
end 
end 
createは、テストデータを 
DBに登録をしてくれる。
CPC設定完了 
ニューラルリンケージ 
イオン濃度正常 
メタ運動野パラメータ更新 
原子炉臨界 
パワーフロー正常 
全システムオールグリーン 
ストライクフリーダム、システム起動
テストコードの書き方ポイント
! スペックはアウトラインと考える 
! describeでまとめて、itで期待する結果を書く 
contextは、状態の変化で使い分ける 
! itには1個につき、結果を1つだけ期待する 
! itは、◯◯である/◯◯すること、などの動詞にする 
! 起きてほしいことと、起きてほしくないことを書く 
! 境界値テストをすること 
◯文字以上~◯文字以内の場合、その前後の値で
ついでに、 
インスタンスメソッドをテストしてみる
名前付きメールアドレスを返すメソッド 
class Contact < ActiveRecord::Base 
def nameAddr 
"%s<%s>" % [name, email] 
end 
end
require 'spec_helper' 
describe Contact do 
it "名前付きメールアドレスを返すこと" do 
contact = Contact.new( 
name: 'zaru', 
email: 'zaru@example.com' 
) 
expect(contact.nameAddr).to 
eq 'zaru<zaru@example.com>' 
end 
end 
nameAddrを実行して、かえってくる文字列を比較する
テストコードをDRYに
beforeフックで、まとめる 
require 'spec_helper' 
describe Contact do 
before :each do 
@contact = Contact.new( 
name: 'zaru', 
email: 'zaru@example.com' 
) 
end 
end 
Contactオブジェクトをインスタンス変数に格納 
beforeは、describe中の各テストの前に実行される
ファクトリ
Factory 
Girl 
ひな形から 
テストデータを 
量産できる可愛い子
Contactファクトリ作る
$vi /spec/factories/contacts.rb 
FactoryGirl.define do 
factory :contact do 
name "zaru" 
sequence(:email) { |n| "zaru#{n}@example.com" } 
end 
end 
内部でインクリメンタルして、 
違うメールアドレスを作ってくれる
テストコードを書きなおしてみる
it "全てのデータが有効な状態であること" do 
contact = Contact.new( 
name: 'zaru', 
email: 'zaru@example.com' 
) 
expect(contact).to be_valid 
end 
it "全てのデータが有効な状態であること" do 
expect(FactoryGirl.build(:contact)).to be_valid 
end 
こうなる 
FactoryGirl.buildで、Contact.newと同様のことができる。 
FactoryGirl.createで、Contact.createと同じ。
FactoryGirlって 
打つの面倒
省略できます
$vi /spec/spec_helper.rb 
RSpec.configure do |config| 
config.include FactoryGirl::Syntax::Methods 
end 
it "全てのデータが有効な状態であること" do 
expect(build(:contact)).to be_valid 
end 
FactoryGirl省略できる
はい…
今日はここまで!
サンプルコードはGitHubにあります。 
https://github.com/zaru/rials_rspec_sample
次回
! コントローラースペック 
! Capybaraさん 
! REST WebAPIテスト
予定は 
未定…
$ shutdown -h now

More Related Content

What's hot

JobsToBeDone/ジョブ理論をまとめてみた
JobsToBeDone/ジョブ理論をまとめてみたJobsToBeDone/ジョブ理論をまとめてみた
JobsToBeDone/ジョブ理論をまとめてみたYusuke Hisatsu
 
Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜Tatsuhiko Kubo
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - 健人 井関
 
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safetyTokoroten Nakayama
 
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術div Inc
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創Itsuki Kuroda
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について健一 辰濱
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術Preferred Networks
 
AWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメするAWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメするTaichi Inaba
 
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャJJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャKaname Motoyama
 
プロダクトマーケティングマネージャーの役割
プロダクトマーケティングマネージャーの役割プロダクトマーケティングマネージャーの役割
プロダクトマーケティングマネージャーの役割Yuzo Shigematsu
 
Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話Masaaki Kakimoto
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)Koichiro Matsuoka
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)Toru Makabe
 
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装Yuta Suzuki
 
コミュニケーションロボットへの言語学の応用
コミュニケーションロボットへの言語学の応用コミュニケーションロボットへの言語学の応用
コミュニケーションロボットへの言語学の応用1→10
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Masashi Umezawa
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割Recruit Lifestyle Co., Ltd.
 

What's hot (20)

JobsToBeDone/ジョブ理論をまとめてみた
JobsToBeDone/ジョブ理論をまとめてみたJobsToBeDone/ジョブ理論をまとめてみた
JobsToBeDone/ジョブ理論をまとめてみた
 
Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
 
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
 
ロボットアームをPythonで動かす
ロボットアームをPythonで動かすロボットアームをPythonで動かす
ロボットアームをPythonで動かす
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術
 
AWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメするAWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメする
 
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャJJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
 
プロダクトマーケティングマネージャーの役割
プロダクトマーケティングマネージャーの役割プロダクトマーケティングマネージャーの役割
プロダクトマーケティングマネージャーの役割
 
Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)
 
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装
 
コミュニケーションロボットへの言語学の応用
コミュニケーションロボットへの言語学の応用コミュニケーションロボットへの言語学の応用
コミュニケーションロボットへの言語学の応用
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 

Viewers also liked

正規表現勉強会
正規表現勉強会正規表現勉強会
正規表現勉強会zaru sakuraba
 
初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編shinta rock
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへアプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへTomohiro Yamasaki
 
WEBページを表示するまで
WEBページを表示するまでWEBページを表示するまで
WEBページを表示するまでShoichi Kakizaki
 
少し未来のコードレビュー
少し未来のコードレビュー少し未来のコードレビュー
少し未来のコードレビューzaru sakuraba
 
エンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザインエンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザインshinta rock
 
スマホフロントエンド最速化手法
スマホフロントエンド最速化手法スマホフロントエンド最速化手法
スマホフロントエンド最速化手法zaru sakuraba
 
非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1Karino Kyohei
 
アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話shinta rock
 
ほんわかSwift勉強資料
ほんわかSwift勉強資料ほんわかSwift勉強資料
ほんわかSwift勉強資料kouhei kawamata
 
0528 kanntigai ui_ux
0528 kanntigai ui_ux0528 kanntigai ui_ux
0528 kanntigai ui_uxSaori Matsui
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版MOCKS | Yuta Morishige
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識Tsutomu Sogitani
 
どうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのかどうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのかMasahito Zembutsu
 
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘swwwitch inc.
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】MOCKS | Yuta Morishige
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座Mariko Yamaguchi
 

Viewers also liked (20)

正規表現勉強会
正規表現勉強会正規表現勉強会
正規表現勉強会
 
初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへアプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
 
WEBページを表示するまで
WEBページを表示するまでWEBページを表示するまで
WEBページを表示するまで
 
少し未来のコードレビュー
少し未来のコードレビュー少し未来のコードレビュー
少し未来のコードレビュー
 
エンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザインエンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザイン
 
スマホフロントエンド最速化手法
スマホフロントエンド最速化手法スマホフロントエンド最速化手法
スマホフロントエンド最速化手法
 
ワクワク電子工作
ワクワク電子工作ワクワク電子工作
ワクワク電子工作
 
非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1
 
アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話
 
ほんわかSwift勉強資料
ほんわかSwift勉強資料ほんわかSwift勉強資料
ほんわかSwift勉強資料
 
0528 kanntigai ui_ux
0528 kanntigai ui_ux0528 kanntigai ui_ux
0528 kanntigai ui_ux
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
 
どうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのかどうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのか
 
社内勉強会を継続成長させる方法
社内勉強会を継続成長させる方法社内勉強会を継続成長させる方法
社内勉強会を継続成長させる方法
 
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座
 

Similar to 今さらながらRSpecに入門してみた

魂のコーディング
魂のコーディング魂のコーディング
魂のコーディングDaisuke Tasaki
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1sunotora
 
CakePHP Kansai 2008-12-12
CakePHP Kansai 2008-12-12CakePHP Kansai 2008-12-12
CakePHP Kansai 2008-12-12Yasuo Harada
 
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜Chihiro Fukazawa
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsqlToshi Harada
 
JJUG CCC 2017 Spring LT about JPA
JJUG CCC 2017 Spring LT about JPAJJUG CCC 2017 Spring LT about JPA
JJUG CCC 2017 Spring LT about JPANaoya Kojima
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだNarami Kiyokura
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編Masatoshi Itoh
 
私のSql -My Sql
私のSql -My Sql私のSql -My Sql
私のSql -My Sqlstiq 2e
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documentsbleis tift
 
Stan勉強会資料(前編)
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編) daiki hojo
 

Similar to 今さらながらRSpecに入門してみた (20)

魂のコーディング
魂のコーディング魂のコーディング
魂のコーディング
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1
 
Haikara
HaikaraHaikara
Haikara
 
CakePHP Kansai 2008-12-12
CakePHP Kansai 2008-12-12CakePHP Kansai 2008-12-12
CakePHP Kansai 2008-12-12
 
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
Rspec
RspecRspec
Rspec
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
JJUG CCC 2017 Spring LT about JPA
JJUG CCC 2017 Spring LT about JPAJJUG CCC 2017 Spring LT about JPA
JJUG CCC 2017 Spring LT about JPA
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
 
私のSql -My Sql
私のSql -My Sql私のSql -My Sql
私のSql -My Sql
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
 
Stan勉強会資料(前編)
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編)
 

More from zaru sakuraba

WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有zaru sakuraba
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門zaru sakuraba
 
CarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスCarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスzaru sakuraba
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいzaru sakuraba
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見zaru sakuraba
 
スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?zaru sakuraba
 
GitHub Appsの作り方
GitHub Appsの作り方GitHub Appsの作り方
GitHub Appsの作り方zaru sakuraba
 
Railsモデル設計ケーススタディ
Railsモデル設計ケーススタディRailsモデル設計ケーススタディ
Railsモデル設計ケーススタディzaru sakuraba
 
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門zaru sakuraba
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知zaru sakuraba
 
良いプログラマーとは
良いプログラマーとは良いプログラマーとは
良いプログラマーとはzaru sakuraba
 

More from zaru sakuraba (11)

WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
 
CarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスCarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラス
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
 
スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?
 
GitHub Appsの作り方
GitHub Appsの作り方GitHub Appsの作り方
GitHub Appsの作り方
 
Railsモデル設計ケーススタディ
Railsモデル設計ケーススタディRailsモデル設計ケーススタディ
Railsモデル設計ケーススタディ
 
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知
 
良いプログラマーとは
良いプログラマーとは良いプログラマーとは
良いプログラマーとは
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (10)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

今さらながらRSpecに入門してみた