Slide 1

Slide 1 text

ςετʹ։ൃΛ ۦಈ͍ͤͨ͞ (ג) Ӭ࿨γεςϜϚωδϝϯτ ॾڮګհ @moro ΋ͬͱ

Slide 2

Slide 2 text

• MOROHASHI Kyosuke • @moro on Twitter and GitHub • works at @esminc

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

͖ΐ͏࿩͢͜ͱ •ςετΛॻ͜͏ͱͯ͠ɺ͔͑ͬͯ։ ൃ͕ਏ͘ײͨ͜͡ͱɺ͋Γ·ͤΜ? •ςετΛ͍͍ಋ͖໾ʹ͢ΔݟํΛ঺ հ͠·͢

Slide 7

Slide 7 text

Ͳ͏ͯ͠ςετΛॻ͘ͷ •ͦΕ͕ਖ਼͍͠΍Γํ͔ͩΒ •඼࣭͕޲্͢Δ͔Β •σάϨ࣌ʹ͙͢ؾ͚ͮΔ͔Β

Slide 8

Slide 8 text

͡Ό͋ςετΛॻ͘ͷ͸ɺ কདྷͷͨΊʹߴ͍อݥྉΛ ෷͏Α͏ͳ΋ͷͳͷ

Slide 9

Slide 9 text

http://flic.kr/p/zBdU7 ςετ͸։ൃΛ ۦಈ͢Δ ͓࡞๏ͱ͔ɺ ਖ਼͍͔͠Ͳ͏͔ͱ͔͚ͩͰͳ͘ ։ൃ͠΍͘͢͢Δ

Slide 10

Slide 10 text

ίʔυΛॻ͘ͱ͖ʹ ΍͍ͬͯΔ͜ͱ

Slide 11

Slide 11 text

think code run Programming workflow

Slide 12

Slide 12 text

think code run ίʔυΛॻ͍ͨΒ ಈ͔͍ͨ͠Ͱ͢ΑͶ?

Slide 13

Slide 13 text

SVO •ॻ͍ͨίʔυ͸ɺ࣮ߦͯ͠Έ ͳ͍ͱΘ͔Βͳ͍ •ॻ͍ͨΒ͙͢ʹಈ͔ͨ͘͠ͳ Γ·ͤΜ?

Slide 14

Slide 14 text

ಈ͔͢ if __FILE__ == $0 require 'pp' myobj = MyClass.new(:arg) p myobj.do_something pp myobj end ςετ࢖Θͣʹ࣮ߦ͢Δ

Slide 15

Slide 15 text

ಈ͔͢ % irb -r ./my_class > my_obj = MyClass.new > myobj.do_something > myobj ର࿩࣮ߦ؀ڥ΋͋Δ

Slide 16

Slide 16 text

w͙͢ʹಈ͔ͤΔ wͰ΋΋͏ͪΐͬͱෳࡶ ʹͳΔͱ

Slide 17

Slide 17 text

ಈ͔͢ if __FILE__ == $0 require 'pp' alice = Person.create(name: 'alice', age: 24) alisia = Person.create(name: 'alisia', age: 30) bob = Person.create(name: 'bob', age: 18) chris = Person.create(name: 'chris', age: 42) pp Person.name_like('ali') pp Person.younger_than(24) end ΋͏ͪΐͬͱෳࡶͳྫ

Slide 18

Slide 18 text

ಈ͔͢ $ rails console > alice = Person.create(name: 'alice') > alissa = Person.create(name: 'alissa') > bob = Person.create(name: 'bob') > chris = Person.create(name: 'chris') > > Person.name_like('ali') > Person.younger_than(24) ର࿩࣮ߦ؀ڥͰ΋ Ͱ͖Δͱ͍͑͹Ͱ͖Δ

Slide 19

Slide 19 text

࣮ߦ݁ՌΛ ݟΔͨΊʹ ඞཁͳ͜ͱ

Slide 20

Slide 20 text

ಈ͔͢ if __FILE__ == $0 require 'pp' alice = Person.create(name: 'alice', age: 24) alisia = Person.create(name: 'alisia', age: 30) bob = Person.create(name: 'bob', age: 18) chris = Person.create(name: 'chris', age: 42) pp Person.name_like('ali') pp Person.younger_than(24) end σʔλͳͲͷ४උ લͷσʔλ͕࢒ͬͯͳ͍͔΋֬ೝ͠ͳ͍ͱΠΧϯ

Slide 21

Slide 21 text

ಈ͔͢ if __FILE__ == $0 require 'pp' alice = Person.create(name: 'alice', age: 24) alisia = Person.create(name: 'alisia', age: 30) bob = Person.create(name: 'bob', age: 18) chris = Person.create(name: 'chris', age: 42) pp Person.name_like('ali') pp Person.younger_than(24) end ݁ՌΛ໨ࢹ

Slide 22

Slide 22 text

ಈ͔͢ if __FILE__ == $0 require 'pp' alice = Person.create(name: 'alice', age: 24) alisia = Person.create(name: 'alisia', age: 30) bob = Person.create(name: 'bob', age: 18) chris = Person.create(name: 'chris', age: 42) pp Person.name_like('ali') pp Person.younger_than(24) end ݁Ռ͕࣮ߦॱʹґଘ ΠνΠνߟ͑ͳ͍ͱ͍͚ͳ͍

Slide 23

Slide 23 text

ಈ͔͢ if __FILE__ == $0 require 'pp' alice = Person.create(name: 'alice', age: 24) alisia = Person.create(name: 'alisia', age: 30) bob = Person.create(name: 'bob', age: 18) chris = Person.create(name: 'chris', age: 42) pp Person.name_like('ali') pp Person.younger_than(24) end ݁Ռ͕࣮ߦॱʹґଘ σʔλΛมߋͨ͠Γ͢ΔͱπϥΠ ༨ܭͩͱࢥͬͨ σʔλΛফͨ͠Β ผͷςετͰ ࢖͓ͬͯͨ...

Slide 24

Slide 24 text

•σʔλͱ͔Λ४උ͠ͳ͍ͱ! •݁ՌΛ໨ࢹ͠ͳ͍ͱ!! •࣮ߦॱʹ΋஫ҙ͠ͳ͍ͱ!!! ͔͠΋ςετ͕૿͑Ε͹૿͑Δ΄Ͳ େมʹͳΔɻ͏΁͐ ςετ࢖Θͣʹ࣮ߦ͢Δ ಈ͔͢

Slide 25

Slide 25 text

ͦ͜ͰςεςΟϯά ϑϨʔϜϫʔΫͰ͢Α • Arrange : σʔλ΍ίϯςΩετΛ༻ҙ • Act : ͦΕͧΕಠཱʹɺಈ͔ͯ͠ • Assert : ݁ՌΛࣗಈతʹνΣοΫ͢Δ

Slide 26

Slide 26 text

ಈ͔͢ ςετͱ࣮ͯ͠ߦ͢Δ describe Person do context '4 people with below' do let!(:alice) { Person.create(name: 'alice', age: 24) } let!(:alissa){ Person.create(name: 'alissa', age: 30) } let!(:bob) { Person.create(name: 'bob', age: 18) } let!(:chris) { Person.create(name: 'chris', age: 42) } describe '.name_like' do subject { Person.name_like('ali').map(&:name) } it { should =~ %w[alice alissa] } end describe '.younger_than' do subject { Person.younger_than(24).map(&:name) } it { should =~ %w[bob] } end end end

Slide 27

Slide 27 text

Arrange: σʔλͳͲΛ ମܥͩͬͯ४උ͢Δ

Slide 28

Slide 28 text

ribe Person do ntext '4 people with below' do let!(:alice) { Person.create(name: 'alice', age: let!(:alissa){ Person.create(name: 'alissa', age: let!(:bob) { Person.create(name: 'bob', age: 18 let!(:chris) { Person.create(name: 'chris', age: describe '.name_like' do subject { Person.name_like('ali').map(&:name) } it { should =~ %w[alice alissa] } end describe '.younger_than' do subject { Person.younger_than(24).map(&:name) } it { should =~ %w[bob] } end

Slide 29

Slide 29 text

Act: ͦΕͧΕ ಠཱʹಈ͔͢

Slide 30

Slide 30 text

ibe Person do text '4 people with below' do et!(:alice) { Person.create(name: 'alice', age: et!(:alissa){ Person.create(name: 'alissa', age: et!(:bob) { Person.create(name: 'bob', age: 18 et!(:chris) { Person.create(name: 'chris', age: escribe '.name_like' do subject { Person.name_like('ali').map(&:name) } it { should =~ %w[alice alissa] } nd escribe '.younger_than' do subject { Person.younger_than(24).map(&:name) } it { should =~ %w[bob] } nd

Slide 31

Slide 31 text

Assert: ݁ՌΛ ࣗಈతʹݕূ͢Δ

Slide 32

Slide 32 text

let!(:alissa){ Person.create(name: 'alissa', age let!(:bob) { Person.create(name: 'bob', age: 1 let!(:chris) { Person.create(name: 'chris', age: describe '.name_like' do subject { Person.name_like('ali').map(&:name) it { should =~ %w[alice alissa] } end describe '.younger_than' do subject { Person.younger_than(24).map(&:name) it { should =~ %w[bob] } end d

Slide 33

Slide 33 text

ςετ͕։ൃΛۦಈ͢ΔϙΠϯτ ίʔυͷ࣮ߦΛߏ଄Խ͢Δ • ςεςΟϯάϑϨʔϜϫʔΫ͕ɺίʔυ ࣮ߦΛॿ͚ͯ͘ΕΔ: • ίϯςΩετͷηοτΞοϓ • ಠཱ࣮ͯ͠ߦ • ݁Ռͷݕূ

Slide 34

Slide 34 text

͜ ͜ · Ͱ ͷ · ͱ Ί ‣ ͪΐͬͱେ͖͍ίʔυΛɺ ςετ࢖Θͣʹಈ͔͢ͱେม ‣ ςετΛ࢖͏ͱɺॻ͍ͨίʔυ Λ͙͢ʹɺ҆৺ͯ͠ಈ͔ͤΔ

Slide 35

Slide 35 text

΋͏ͪΐͬͱ೉͍͠ ໰୊ʹऔΓ૊Ήͱ͖ Ͳ͏͢Δ? http://flic.kr/p/5xKFpY

Slide 36

Slide 36 text

͜Μͳ͜ͱΛ ߟ͍͑ͯΔ͸ͣ •ࣄલ৚݅͸ͲΜͳ͔ͳ? •݁Ռ͸Ͳ͏ͳΕ͹͍͍Μͩ? •Ͳ͏͍͏࡞Γ͕͍͍ͷ͔ͳ?

Slide 37

Slide 37 text

think code run Programming workflow

Slide 38

Slide 38 text

think code run Programming workflow ౰ͨΓલ͗ͯ͢Θ͔Βͳ͍͚Ͳ ·ͣɺߟ͍͑ͯ·͢ΑͶ?

Slide 39

Slide 39 text

wͳʹΛ͢Δ͔ wͲ͏͢Δ͔

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

Ϣʔβͱͯ͠γεςϜʹ ʮͳʹΛʯͯ͠ཉ͍͔͠

Slide 42

Slide 42 text

։ൃऀͱͯ͠ ʮͲ͏ʯಈ͔͍͔ͨ͠

Slide 43

Slide 43 text

։ൃऀͱͯ͠ ΦϒδΣΫτʹʮͳʹΛʯͯ͠ཉ͍͔͠

Slide 44

Slide 44 text

͍··͞ʹ࣮૷͍ͯ͠Δ։ൃऀͱͯ͠ ͜ͷΦϒδΣΫτΛʮͲ͏ʯ࡞Δ͔

Slide 45

Slide 45 text

͍··͞ʹ࣮૷͍ͯ͠Δ։ൃऀͱͯ͠ ͜ͷϝιου͸ʮͳʹΛʯ͢Δ͔

Slide 46

Slide 46 text

͍··͞ʹ࣮૷͍ͯ͠Δ։ൃऀͱͯ͠ ͜ͷϝιουΛʮͲ͏ʯ࡞Δ͔

Slide 47

Slide 47 text

ͳʹΛ͢Δ͔Λ ߟ͑ͯ ςετʹॻ͘

Slide 48

Slide 48 text

͍ΖΜͳࢹ఺ͰʮͳʹΛʯ͢Δ͔

Slide 49

Slide 49 text

wϢʔβͱͯ͠γεςϜʹʮͳ ʹΛʯͯ͠ཉ͍͔͠ w։ൃऀͱͯ͠ΦϒδΣΫτʹ ʮͳʹΛʯͯ͠ཉ͍͔͠

Slide 50

Slide 50 text

Cucumber •ࣗવݴޠ(΋ͪΖΜ೔ຊޠ΋!!)Λ ࢖ͬͯʮͳʹΛʯ͢Δ͔Λॻ ͚Δςετπʔϧɻ •cucumber-jvm͍ͬͯ͏Javaα ϙʔτ΋

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

5%%ϑϨʔϜϫʔΫ •jUnitͱ͔ɺRSpecͱ͔ •։ൃऀͱͯ͠ɺΦϒδΣΫτ ʹԿΛ͍͔ͤͨ͞Λهड़͢Δ

Slide 54

Slide 54 text

Ϣʔβc։ൃऀ ͱͯ͠ γεςϜc͜ͷΦϒδΣΫτ ʹ ʮͳʹΛʯͯ͠ཉ͍͔͠ߟ͑Δ

Slide 55

Slide 55 text

͜ ͜ · Ͱ ͷ · ͱ Ί ‣ ࢲͨͪ͸ߟ͍͑ͯΔ ‣ ʮͳʹΛʯ͢Δ͔ͱʮͲ͏ʯ ࡞Δ͔Λ෼͚ͯߟ͑Δ ‣ ʮͳʹΛʯ͢Δ͔Λςετͱ ͯ͠ॻ͘

Slide 56

Slide 56 text

Α͋͘Δײ͡ͷ ݕࡧϑΥʔϜ

Slide 57

Slide 57 text

wΑ͋͘ΔݕࡧϑΥʔϜ w໊લͷ෦෼Ұக w೥ྸͰͷൺֱ wझຯͰͷݕࡧ Person - name (str) - age (int) Hobby - name (str) Interest - person_id(fk) - hobby_id(fk) 1 * * 1

Slide 58

Slide 58 text

ߟ͑Δ • ActiveRecord ͷscopeΛఆٛ ͠·͠ΐ͏ • (࣮͸΋͏લͷྫͰͰ͖ͯ·ͨ͠ :-) ) ·ͣ͸؆୯ͳͱ͜Ζ͔Β

Slide 59

Slide 59 text

describe Person do context '4 people with below' do let!(:alice) { Person.create(name: 'alice', age: 24) let!(:alissa){ Person.create(name: 'alissa', age: 30) let!(:bob) { Person.create(name: 'bob', age: 18) } let!(:chris) { Person.create(name: 'chris', age: 42) describe '.name_like' do subject { Person.name_like('ali').map(&:name) } it { should =~ %w[alice alissa] } end describe '.younger_than' do subject { Person.younger_than(24).map(&:name) } it { should =~ %w[bob] } end end end

Slide 60

Slide 60 text

class Person < ActiveRecord::Base scope :name_like, ->(name) { where("#{table_name}.name LIKE ?", "#{name} } scope :younger_than, ->(age) { where("#{table_name}.age < ?", age.to_i) } end

Slide 61

Slide 61 text

ߟ͑Δ •ྫ͑͹: είʔϓ໊͸... `has_at_least_one_hobby'. •hobbyΛ഑ྻͰऔΔͱ͍͍͔ͳ? `%w[programming BBQ travel]` . •ͱɺߟ͑ͨ͜ͱΛςετʹॻ͘ hobby͸Ͳ͏͠Α͏

Slide 62

Slide 62 text

ribe Person do ntext '4 people with below' do # snip describe '.has_at_least_one_hobby(hobbies)' do let(:hobbies) { %w[programming BBQ travel] } subject(:people) do Person.has_at_least_one_hobby(hobbies) end end d ͏ʔΜɺ໊લ͕௕͗͢ΔɺΑ͏ͳ...

Slide 63

Slide 63 text

ߟ͑Δ • தؒςʔϒϧ'interests'ͬͯͷ͕͋Δ! • Ruby ͩͱ `#any?`ϝιου͕͋Δͳɻ • ͡Ό͋͜ΜͳͷͰͲ͏͔: Person.interest_in_any(ho bbies) ΋ͬͱྑ໊͍લ͸ͳ͍͔ͳ

Slide 64

Slide 64 text

describe Person do context '4 people with below' do # snip describe '.interest_in_any(hobbies)' do let(:hobbies) { %w[programming BBQ travel subject(:people) do Person.interest_in_any(hobbies) end end end end Αͦ͞͏!

Slide 65

Slide 65 text

ߟ͑Δ • ֬ೝ͢ΔͨΊʹϢʔβ2ਓҎ্΄͍͠ • ৚݅ʹϚον͢Δਓͱɺ͠ͳ͍ਓͱ • ͜͏͍͏ͷΛbefore {} (RSpec)΍ setup {} (test/unit)ʹॻ͘ ࣄલ৚݅ͳΜ͚ͩͬ

Slide 66

Slide 66 text

describe '.interest_in_any(hobbies)' do let(:hobbies) { %w[programming BBQ travel] } before do hobbies.each do |hobby_name| Hobby.create!(name: hobby_name) end Hobby.create!(name: 'baseball') alice.hobbies << Hobby.where(name: 'travel'). bob.hobbies << Hobby.where(name: 'programmi chris.hobbies << Hobby.where(name: 'baseball' end subject(:people) { Person.interest_in_any(hobbi end

Slide 67

Slide 67 text

ߟ͑Δ •ͪΌΜͱɺϚον͢Δ͸ͣͷ ਓ͚ͩϚονͯ͠ΔΑͶ...? ͳʹΛݕূ͢Δ͔

Slide 68

Slide 68 text

Hobby.create!(name: hobby_name) end Hobby.create!(name: 'baseball') alice.hobbies << Hobby.where(name: 'travel') bob.hobbies << Hobby.where(name: 'programm chris.hobbies << Hobby.where(name: 'baseball end subject(:people) { Person.interest_in_any(hobb it { should =~ [alice, bob] } end

Slide 69

Slide 69 text

http://flic.kr/p/4rxk3X ࠷ॳͷΰʔϧ͕ ݟ͑ͨ

Slide 70

Slide 70 text

describe '.interest_in_any(hobbies)' do let(:hobbies) { %w[programming BBQ travel] } before do hobbies.each do |hobby_name| Hobby.create!(name: hobby_name) end Hobby.create!(name: 'baseball') alice.hobbies << Hobby.where(name: 'travel').first bob.hobbies << Hobby.where(name: 'programming').first chris.hobbies << Hobby.where(name: 'baseball').first end subject(:people) { Person.interest_in_any(hobbies) } it { should =~ [alice, bob] } end ͜ͷςετ͕௨ͬͨΒҰ൪؆୯ͳਖ਼ৗܥ͸Ͱ͖ͨ

Slide 71

Slide 71 text

͜ ͜ · Ͱ ͷ · ͱ Ί ‣ ߟ͑ͨ͜ͱΛςετʹॻ͘ ‣ ςετʹॻ͔ΕͨίʔυΛ ݟͯ೰ΜͩΓۛຯͨ͠Γ͢Δ ‣ ςετ͕௨ΔΑ͏ʹίʔυΛॻ͘

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

ߟ͑Δ •Railsͩͱೖྗ஋͸จࣈྻͷ Hashͱͯ͠औΔͷ͕Ұൠత • ϑΥʔϜΦϒδΣΫτͱ࣮ͯ͠૷͢Ε ͹Αͦ͞͏!! • PeopleQueryͱݺ΅͏ ৄࡉݕࡧ

Slide 74

Slide 74 text

require 'spec_helper' describe PeopleQuery do include_context \ '4 people: alice(24), aliass(30), bob(18), chris(42)' describe '.new(name_like: "ali", younger_than: 25)' do let(:query) { PeopleQuery.new(name_like: 'ali', younger_than: 25) } subject { query.people } it { should == [alice] } end end

Slide 75

Slide 75 text

ߟ͑Δ PeopleQueryͷAPI • ίϯετϥΫλͰɺHashͰෳ ਺ͷ৚݅ΛऔΓ • PeopleQuery#people Ͱ ActiveRecord::Relation Λฦͤ ͹Αͦ͞͏

Slide 76

Slide 76 text

require 'spec_helper' describe PeopleQuery do include_context \ '4 people: alice(24), aliass(30), bob(18), describe '.new(name_like: "ali", younger_than let(:query) { PeopleQuery.new(name_like: 'ali', younger_than: 25) } subject { query.people } it { should == [alice] } end end Act

Slide 77

Slide 77 text

require 'spec_helper' describe PeopleQuery do include_context \ '4 people: alice(24), aliass(30), bob(18), describe '.new(name_like: "ali", younger_than let(:query) { PeopleQuery.new(name_like: 'ali', younger_than: 25) } subject { query.people } it { should == [alice] } end end Arrange

Slide 78

Slide 78 text

describe PeopleQuery do include_context \ '4 people: alice(24), aliass(30), bob(18), describe '.new(name_like: "ali", younger_than let(:query) { PeopleQuery.new(name_like: 'ali', younger_than: 25) } subject { query.people } it { should == [alice] } end end Assert ͜Ε͕࣍ͷΰʔϧ

Slide 79

Slide 79 text

http://flic.kr/p/4rxk3X ࣍ͷΰʔϧ΋ ݟ͑ͨ

Slide 80

Slide 80 text

require 'spec_helper' describe PeopleQuery do include_context \ '4 people: alice(24), aliass(30), bob(18), chris(42)' describe '.new(name_like: "ali", younger_than: 25)' do let(:query) { PeopleQuery.new(name_like: 'ali', younger_than: 25) } subject { query.people } it { should == [alice] } end end FAQ: ςετ͸ ͲΕ͘Β͍ॻ͘΂͖? A; ΰʔϧͩͱࢥ͏ͱ͜Ζ·Ͱॻ͘ͱΑ͍

Slide 81

Slide 81 text

͜ ͜ · Ͱ ͷ · ͱ Ί ‣ ೉͍͠໰୊΋ɺ·ͣʮͳʹΛʯͯ͠ ཉ͍͔͠Λߟ͑Δ ‣ ςετΛ࢖ͬͯɺΰʔϧΛઃఆ͢Δ

Slide 82

Slide 82 text

ߟ͑Δ • Person.interest_any?()Λ͏·͘ ϥοϓͰ͖ͳ͍͔ • Railsͷ࢓૊ΈΛߟ͑Δʹ: • ίϯτϩʔϥ͔Βݺ͹Εͦ͏ • ͦͷ࣌͸ύϥϝʔλ͸จࣈྻͰ͖ͦ͏ hobby;ͨͨͼ

Slide 83

Slide 83 text

describe '.new(name_like: "ali", hobbies: "baseball")' d include_context \ 'there are 4 hobbies: programming, travel, BBQ and b let(:query) { PeopleQuery.new(name_like: 'ali', hobbies: 'baseball travel') } before do alice.hobbies << Hobby.where(name: 'BBQ') alissa.hobbies << Hobby.where(name: 'baseball') end subject { query.people } it { should == [alissa] } end 3ͭͷ৚݅Λ૊Έ߹Θͤ͸ɺ ͜Μͳ;͏ʹಈ͍ͯʮ΄͍͠ʯ

Slide 84

Slide 84 text

cribe '.new(name_like: "ali", hobbies: seball")' do nclude_context \ 'there are 4 hobbies: programming, travel, BBQ baseball' et(:query) { PeopleQuery.new(name_like: 'ali', hobbies: 'baseball travel') efore do alice.hobbies << Hobby.where(name: 'BBQ') alissa.hobbies << Hobby.where(name: 'baseball') nd ubject { query.people }

Slide 85

Slide 85 text

class PeopleController < ApplicationController def index @query = PeopleQuery.new(params[:q]) @people = @query.people end end

Slide 86

Slide 86 text

͜ ͜ · Ͱ ͷ · ͱ Ί ‣ ࿅Δͱ͖͸ɺ࢖ΘΕํ΋ ߟ͑Δ Ϣʔβͱ͔ϑϨʔϜϫʔΫͱ͔ ‣ ςετͰͷ"DUͱɺϓϩ μΫτίʔυ͸Α͘ࣅΔ

Slide 87

Slide 87 text

ςετۦಈ։ൃͷਐΊํ • ख͕͚͍ͯΔΦϒδΣΫτͷৼΔ෣͍Λ ߟ͑Δɺϝιου໊ɺҾ਺ɺ໭Γ஋ͳͲ • ؔ࿈͢ΔσʔλͳͲɺৼΔ෣͏ͨΊͷࣄ લ৚݅Λߟ͑Δ • γϯϓϧͳݕূΛॻ͘ • ಈ͔͢

Slide 88

Slide 88 text

ςετ͕։ൃΛۦಈ͢ΔϙΠϯτ τϥΠΤϥʔ͢Δ৔ʹͳΔ • ίʔυΛॻ͍ͯɺಡΜͰɺͦͯ͠ߟ͑ Δ৔ʹͳΔɻ • νʔϜϝϯόʔʹ΋ɺϗϯϞϊͷίʔ υͰ૬ஊͰ͖Δɻ • ࣮ߦ·ͰͰ͖Δ!!

Slide 89

Slide 89 text

think code run Programming workflow ςετ͸ɺ࣮ߦ͢Δ͜ͱͱߟ͑Δ͜ͱͱɺ ྆ํΛαϙʔτͯ͠։ൃΛۦಈ͢Δ

Slide 90

Slide 90 text

Ԟ͕ਂ͍ ྑ͘΋ѱ͘΋ • ͍ΖΜͳςΫχοΫ͕͋Δ • ϑΣΠΫ΍ࡾ֯ଌྔ • σʔλੜ੒ύλʔϯ • ϞοΫ΍ελϒ • assert͔Βॻ͘͜ͱ΋Α͋͘Δ • ͪΐ͏೉͍͠ϩδοΫͷςετͱ͔

Slide 91

Slide 91 text

ૉৼΓॏཁ •͚ͬ͜͏୾ྗ͕͍Δ • ࣮૷ͷৄࡉΛߟ͍͑ͨؾ࣋ͪΛ ͙ͬͱת͑Δ •ྔ͸࣭ʹసԽ͢Δ

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

ςΫχοΫΑΓ΋ େࣄͳ͜ͱ ࠶ܝ

Slide 96

Slide 96 text

http://flic.kr/p/zBdU7 ςετ͸։ൃΛۦಈ͢Δ • run: ࣮ߦΛߏ଄Խ͢Δɻ • think: τϥΠ&Τϥʔͷ৔ʹͳΔɻ • ΋ͪΖΜɺϦϑΝΫλϦϯάΛॿ͚ͨΓ σάϨͷ๷ࢭʹ΋໾ཱͭ

Slide 97

Slide 97 text

think code run Programming workflow

Slide 98

Slide 98 text

think code run Programming workflow ໰୊͕೉͚͠Ε͹ͦΕ͚ͩɺ ಈ͔͠ͳ͕Β࡞ΕΔςετ͕໾ʹཱͭ

Slide 99

Slide 99 text

Thank you for listening. - May it be a light for you in dark places, when all other lights go out. - May it be a light for you in dark places, when all other lights go out.