Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDD will always be in your heart

TDD will always be in your heart

Niigata.rb #3 での発表資料です。

676954675cda206b7baae939a82a8ef4?s=128

Kenichi Takahashi

August 31, 2013
Tweet

Transcript

  1. ג Ӭ࿨γεςϜϚωδϝϯτ ∁ڮ݈Ұ LFOUBLBIBTIJ!FTNDPKQ IUUQTIVDSFBNOFU /JJHBUBSC ςετۦಈ։ൃ͸ ΈΜͳͷ ৺ͷதʹ͋Δ

  2. None
  3. ࣗݾ঺հ ,FOJDIJ5",")"4)* IUUQTIVDSFBNOFU UXJUUFS!LFODIBO HJUIVCLFODIBO 5IJOL1BE9 (FOUPP 'VOUPP -JOVY 5JMJOH8JOEPX.BOBHFS

    ,JOFTJT$POUPVSFE,FZCPBSE 7JN (BMBYZ/FYVT /FYVT
  4. JEPCBUBJP

  5. ࢲ͕ςετۦಈ։ൃΛͲͷΑ͏ʹ ଊ͍͑ͯͯɺԿ͕େ੾ͩͱײͯ͡ ͍Δ͔Λ঺հ͠·͢ɻͦΕΛ౿· ͑ͯɺ࣮ࡍʹίʔυΛॻ͘ͱ͖ʹ ԿΛߟ͍͑ͯΔ͔ΛTDDBC ௕Ԭ 1.0 ͷ͓୊Λྫʹ͓࿩͠·͢ɻ ࠓ೔ͷ͓࿩

  6. •ࢲͱςετۦಈ։ൃ •TDDBC ௕Ԭ1.0 Reloaded ࠓ೔ͷ͓࿩

  7. •ࢲͱςετۦಈ։ൃ •TDDBC ௕Ԭ1.0 Reloaded ࠓ೔ͷ͓࿩

  8. •؆୯ʹԿ౓΋ಈ͔ͤΔ •໰୊ΛҰͭͣͭղܾͰ͖Δ •ݱࡏ஍ΛݟࣦΘͳ͍ •ར༻ऀͷࢹ఺Ͱબ୒Ͱ͖Δ ࢲͱςετۦಈ։ൃ

  9. ؆୯ʹԿ౓Ͱ΋ಈ͔ͤΔ http://www.flickr.com/photos/thomashawk/2681744739/

  10. ೥ɺ+6OJUͱ ͷग़ձ͍ʹΑͬͯɺ ࢲ͸NBJOؔ਺ͷढ റ͔Βղ͖์ͨΕͨ

  11. +6OJUͱग़ձ͏લ  ϓϩάϥϜΛॻ͘  NBJOΛॻ͘  ໨ࢹͰ֬ೝ͢Δ  ϓϩάϥϜΛͪΐͬͱมߋ͢Δ 

    ໨ࢹͰ֬ೝ͢Δ  ϓϩάϥϜΛ݁ߏมߋ͢Δ  NBJOΛॻ͖׵͑Δ  ໨ࢹͰ֬ೝ͢Δ  SZ
  12. •ੲͷmainΛͲ͏࢒͔͢ •mainΛॻ͖׵͑Δखؒ •໨ࢹ֬ೝͷݶք खಈͰ໨ࢹ֬ೝ

  13. •܁Γฦ͠ಈ͔ͤΔ •؆୯ʹಈ͔ͤΔ •໨ࢹ֬ೝ͠ͳ͍͍ͯ͘ +6OJU ςεςΟϯάϑϨʔϜϫʔΫ

  14. ςεςΟϯάϑϨʔϜϫʔΫ ʹΑͬͯखಈͱ໨ࢹ֬ೝͷख ͕ؒͳ͘ͳΓɺϓϩμΫτ ίʔυʹूத͢Δ͜ͱ͕Ͱ ͖ΔΑ͏ʹͳΔɻ ؆୯ʹԿ౓Ͱ΋ಈ͔ͤΔ

  15. ໰୊ΛҰͭͣͭղܾͰ͖Δ http://www.flickr.com/photos/theotter/6590636397

  16. ϓϩάϥϚ͕ۀ຿Ͱղ͔ͳ ͚Ε͹͍͚ͳ͍໰୊͸ɺ FizzBuzzΑΓͣͬͱෳࡶͰ ೉͍͠ɻ ݱ࣮͸ݫ͍͠

  17. ෳࡶͱ͸ $PNQMJDBUFE $PNQMFY

  18. •Complex(ෳࡶ) •গͣͭ͠୳ࡧ͢Δ •Complicated(ೖΓ૊Μͩ) •1ͭ1ͭʹ෼ׂ͢Δ ෳࡶ͞ʹର͢ΔΞϓϩʔν

  19. •Complex(ෳࡶ) •গͣͭ͠୳ࡧ͢Δ •Complicated(ೖΓ૊Μͩ) •1ͭ1ͭʹ෼ׂ͢Δ ෳࡶ͞ʹର͢ΔΞϓϩʔν ଟ͘ͷ৔߹͸ ͪ͜Βͷෳࡶ͞

  20. ͋ΔαʔϏεʹHTTPͰΞΫηε ͯ͠औಘͨ͠JSONΛDBʹอଘ͠ ͯ΄͍͠ɻΤϥʔ͕ى͖ͨͱ͖ ͸ϩάΛग़ྗͯ͠ऴྃ͢Δɻ ෳࡶͳ໰୊Λ෼ղ͢Δ

  21. ͋ΔαʔϏεʹHTTPͰΞΫηεͯ͠ɺϨεϙ ϯεͷJSONΛDBʹอଘͯ͠΄͍͠ɻͨͩ͠ɺ JSONͷϑΥʔϚοτ͕ظ଴͢Δ΋ͷͱҧͬͨ ৔߹͸ϩάΛग़ྗͯ͠ऴྃͯ͠΄͍͠ɻ4XXΤ ϥʔͷͱ͖͸ϩάΛग़ྗͯ͠ϓϩάϥϜΛऴ ྃͯ͠΄͍͠ɻ5XXΤϥʔͷͱ͖͸ͯ͠ճ਺Ϧ τϥΠ͠ɺͦΕͰ΋ͩΊͳ৔߹͸ϩάΛग़ྗ ͯ͠ऴྃͯ͠΄͍͠ɻ ෳࡶͳ໰୊Λ෼ղ͢Δ

  22. describe SomeClass do context 'εςʔλείʔυ͕200' do context 'JSONͷϑΥʔϚοτ͕ਖ਼͍͠' do end

    context 'JSONͷϑΥʔϚοτ͕ෆਖ਼' do end end context 'εςʔλείʔυ͕4XX' do end context 'εςʔλείʔυ͕5XX' do context 'ϦτϥΠͯ͠੒ޭ͢Δ' do end context 'ϦτϥΠͯ͠΋5XX' do end end end ςετʹͯ͠ΈΔ
  23. ෳࡶͳ໰୊Λෳࡶͳ··ղ ͜͏ͱ͢Δͱɺςετ͕ॻ͖ ʹ͘͘ͳΔɻςετ͕ॻ͖΍ ͘͢ͳΔ·Ͱ෼ղ͠ͳ͍ͱ͍ ͚ͳ͍ɻ ໰୊ΛҰͭͣͭղܾͰ͖Δ

  24. ݱࡏҐஔΛݟࣦΘͳ͍ http://www.flickr.com/photos/justinph/3459757014/

  25. •޲͔͍ͬͯΔํ޲͸ਖ਼͍͔͠ •࣍͸ԿΛ͢Ε͹͍͍ͷ͔ •Ͳ͜·ͰऴΘͬͨͷ͔ ෆ͕҆͋Δ

  26. • ׬ྃ৚݅Λઌʹߟ͑Δ • ࠓ͸ςετίʔυΛॻ͍͍ͯΔ ͷ͔ɺϓϩμΫτίʔυΛॻ͍ ͍ͯΔͷ͔ • ࠓ·Ͱ΍͖ͬͯͨ͜ͱ͸ςετ Մೳͳίʔυʹͳ͍ͬͯΔ ςετۦಈ։ൃͳΒ

  27. ݱࡏ஍Λ೺Ѳ͢Δ ࢓༷Λ ߟ͑Δ ςετΛ ॻ͘ ϓϩμΫτ ίʔυΛॻ͘ ࣮૷Λ ߟ͑Δ 3&%

    (3&&/
  28. ͜Ε͔Βࣗ෼͕ॻ͘΋ͷ͕Ͳ ͏ಈ͍ͯཉ͍͔͠(ͱ͍͏ظ ଴ɺئ๬)͸ඞͣ͋Δɻ ςετϑΝʔετʁ

  29. ΰʔϧ͸ݟ͍͑ͯΔɻ ࣍ʹͲ͜΁ߦ͚͹͍͍ͷ͔͸ ܾ·͍ͬͯΔɻ ࠓ·Ͱ௨͖ͬͯͨಓ͸ςετ ίʔυͱͯ͠࢒͍ͬͯΔɻ ݱࡏ஍ΛݟࣦΘͳ͍

  30. ར༻ऀͷࢹ఺Ͱબ୒Ͱ͖Δ http://www.flickr.com/photos/samhines/1588018876

  31. “ ࣗ෼͕ίʔυΛॻ͘ͱ͍͏ ࢹ఺͚ͩͰ͸ͳͯ͘ɺίʔ υͷར༻ऀͱͯ͠ͷɺࣗ෼ ͕࠷ॳʹͦͷίʔυΛ࢖͏ ਓͩͱ͍͏ࢹ఺Λ࣋ͭ͜ͱ ͕Ͱ͖Δɻ t-wada gihyo.jp [ಈըͰղઆ]࿨ా୎ਓͷ“ςετۦಈ։ൃ”ߨ࠲

  32. “ ίʔυʹͨ͠΋ͷ ͱ͠ͳ͔ͬͨ͜ͱ ͕ϓϩάϥϛϯά Kakutani Shintaro - Developpers Summit 2012

    Agile Manifest Decade -
  33. •ม਺໊ •ϝιου໊ •Ϋϥε໊ •Ҿ਺ •etc... ϓϩάϥϛϯά͸બ୒

  34. ಡΈ΍͢͞ͱ࢖͍΍͢͞Ͱબ୒ Version.valid?('JDK7u40') JavaVersion.valid?('JDK7u40') 'JDK7u40'.valid_java_version? etc...

  35. ར༻ऀͷࢹ఺Ͱςετίʔυ Λબ୒͢Δɻ ςετΛյ͞ͳ͍Α͏ʹ։ൃ ऀͷࢹ఺ͰϓϩμΫτίʔυ Λબ୒͢Δɻ બ୒Ͱ͖Δ

  36. •؆୯ʹԿ౓΋ಈ͔ͤΔ •໰୊ΛҰͭͣͭղܾͰ͖Δ •ݱࡏҐஔΛݟࣦΘͳ͍ •ར༻ऀͷࢹ఺Ͱબ୒Ͱ͖Δ ςετۦಈ։ൃͷՁ஋

  37. ౰ͨΓલͷ͜ ͱΛ౰ͨΓલ ʹ΍Δ http://www.flickr.com/photos/evoo73/3222220257

  38. •ςετۦಈ։ൃͷՁ஋ •TDDBC ௕Ԭ1.0 Reloaded ࠓ೔ͷ͓࿩

  39. None
  40. Javaͷόʔδϣϯͷେখൺ ֱͱɺ࣍ʹϦϦʔε͞ΕΔ όʔδϣϯ൪߸Λௐ΂͍ͨɻ ͓୊

  41. 1.࢓༷ͷໃ६Λߟ͑Δ 2.TODOϦετΛ࡞Δ 3.ςετΛॻ͘ 4.ϓϩμΫτίʔυΛॻ͘ 5.ϦϑΝΫλϦϯά͢Δ 6.3ʙ5Λ܁Γฦ͢ 5%%#$Ͱͷεςοϓ

  42. 1.࢓༷ͷໃ६Λߟ͑Δ 2.TODOϦετΛ࡞Δ 3.ςετΛॻ͘ 4.ϓϩμΫτίʔυΛॻ͘ 5.ϦϑΝΫλϦϯά͢Δ 6.3ʙ5Λ܁Γฦ͢ 5%%#$Ͱͷεςοϓ

  43. None
  44. • ࣮૷ΛΠϝʔδͯ͠ॳΊͯݟ͔ͭΔໃ६΋͋Δ • ࠷ॳͷόʔδϣϯ͸ʮ̌ʯʮ̍ʯʁ • ٙ໰Λղফͯ͠ɺೲಘͯ͠ਐΊΔ͜ͱ͕Ͱ͖Δ • աڈͷ࣮੷΍ϦϦʔεͷίετɺϢʔβͷར ศੑΛߟ͑Δͱ༧ఆ֎ͷΞοϓσʔτ͸5ճ Ҏ಺ʹͳΔ

    • ʮސ٬ͷຊ౰ʹཉ͔ͬͨ͠΋ͷʯ໰୊ • ࣮͸ʮ͢΂ͯͷPCͷJavaΛৗʹ࠷৽ʹอͪ ͍ͨʯͱ͍͏͚ͩͩͬͨ ର࿩ͷͨΊʹߟ͑Δ
  45. 1.࢓༷ͷໃ६Λߟ͑Δ 2.TODOϦετΛ࡞Δ 3.ςετΛॻ͘ 4.ϓϩμΫτίʔυΛॻ͘ 5.ϦϑΝΫλϦϯά͢Δ 6.3ʙ5Λ܁Γฦ͢ 5%%#$Ͱͷεςοϓ

  46. Javaͷόʔδϣϯͷେখൺ ֱͱɺ࣍ʹϦϦʔε͞ΕΔ όʔδϣϯ൪߸Λௐ΂͍ͨɻ ͓୊

  47. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • ࣍ͷόʔδϣϯΛௐ΂Δ ෳࡶͳ໰୊Λ෼ղ͢Δ

  48. 1.࢓༷ͷໃ६Λߟ͑Δ 2.TODOϦετΛ࡞Δ 3.ςετΛॻ͘ 4.ϓϩμΫτίʔυΛॻ͘ 5.ϦϑΝΫλϦϯά͢Δ 6.3ʙ5Λ܁Γฦ͢ 5%%#$Ͱͷεςοϓ

  49. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • (࣍ͷόʔδϣϯΛௐ΂Δ) 50%0Ϧετ

  50. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • (࣍ͷόʔδϣϯΛௐ΂Δ) 50%0Ϧετ

  51. •ϝιου໊͸ʁ •γάωνϟ͸Ͳ͏͢Δʁ •ΫϥεΛ࡞Δʁ •Ϟδϡʔϧʹ͢Δʁ 5IJOL

  52. ·ͣ͸͍Ζ͍Ζॻ͍ͯΈΔ Version.valid?('JDK7u40') JavaVersion.valid?('JDK7u40') 'JDK7u40'.valid_java_version? etc...

  53. ·ͣ͸͍Ζ͍Ζॻ͍ͯΈΔ Version.valid?('JDK7u40') JavaVersion.valid?('JDK7u40') 'JDK7u40'.valid_java_version? etc... Ϋϥε໊͕ Ұൠత͗͢Δ ͓ᔬམ͚ͩͲจࣈྻ Λ֦ு͢Δͷ͸ʜ

  54. ςετΛॻ͘ require_relative '../lib/ java_version' describe JavaVersion do it { should

    be } end
  55. •ςετ͕ؒҧ͍ͬͯͳ͍͜ͱ Λ֬ೝ͢Δ •ޙ͔ΒςετΛॻ͍ͯҰൃͰ ௨ͬͨΒɺΘ͟ͱམͪΔΑ͏ ʹͯ֬͠ೝ͠·ͤΜ͔ʁ 3&%͔Β࢝ΊΑ

  56. ϓϩμΫτίʔυΛॻ͘ class JavaVersion end

  57. •ςετۦಈ։ൃͷ؀ڥ͕ ੔ͬͨ߹ਤ •ϥΠϒϥϦͳͲ etc... •σΟϨΫτϦߏ੒ ࠷ॳͷάϦʔϯ

  58. ςετΛॻ͘ describe JavaVersion do describe '.valid?' do subject { JavaVersion.valid?('JDK7u40')

    } it { should be_true } end end
  59. ϓϩμΫτίʔυΛॻ͘ class JavaVersion def self.valid?(str) true end end ͱΓ͋͑ͣGBLFJU

  60. ςετΛॻ͘ describe '.valid?' do context 'valid version string' do subject

    { JavaVersion.valid?('JDK7u40') } it { should be_true } end context 'invalid version string' do subject { JavaVersion.valid?('hoge') } it { should be_false } end end
  61. ϓϩμΫτίʔυΛॻ͘ class JavaVersion def self.valid?(str) str =~ /^JDK\d+u\d+$/ end end

  62. 1.ςετΛॻ͘ 2.REDΛݟΔ 3.ϓϩμΫτίʔυΛॻ͘ 4.GREENΛΈΔ ϦζϜ 3&%͔Β࢝ΊΑ

  63. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • ࣍ͷόʔδϣϯΛௐ΂Δ 50%0Ϧετ DONE

  64. •ϝιου໊͸ʁ •γάωνϟ͸Ͳ͏͢Δʁ •invalidͳจࣈྻͷͱ͖͸ʁ 5IJOL JOWBMJEͳঢ়ଶͳΦϒδΣΫτ͕࡞੒ Ͱ͖Δͱɺޙʑߟ͑Δ͜ͱ͕૿͑Δ͔ Βྫ֎ʹ͠Α͏

  65. ςετΛॻ͘ describe '.parse' do context 'valid version string' do subject

    { JavaVersion.parse('JDK7u40') } it { should be } end context 'invalid version string' do it { expect { JavaVersion.parse('hoge') }.to raise_error } end end
  66. ϓϩμΫτίʔυΛॻ͘ class JavaVersion ... def self.parse(str) raise "Invalid Version Format:

    #{str}" unless valid?(str) self.new end end
  67. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • (࣍ͷόʔδϣϯΛௐ΂Δ) 50%0Ϧετ DONE

    DONE
  68. •ϝιου໊͸ʁ •γάωνϟ͸Ͳ͏͢Δʁ •όʔδϣϯΛऔΓग़ͤͳ͍ͱ ·͍ͣͷͰ͸ʁ 5IJOL

  69. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • ΦϒδΣΫτ͔ΒόʔδϣϯΛௐ΂Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • (࣍ͷόʔδϣϯΛௐ΂Δ)

    50%0Ϧετ DONE DONE
  70. •ϝιου໊͸ʁ •γάωνϟ͸Ͳ͏͢Δʁ 5IJOL

  71. ςετΛॻ͘ describe '#family_number' do subject { JavaVersion.parse( 'JDK7u40' ).family_number }

    it { should == 7 } end
  72. ϓϩμΫτίʔυΛॻ͘ class JavaVersion VERSION_FORMAT = /^JDK(\d)+u(\d+)$/ def self.valid?(str) str =~

    VERSION_FORMAT end def self.parse(str) raise "Invalid Version Format: #{str}" unless valid?(str) self.new(str) end def initialize(version_string) @version_string = version_string end def family_number @version_string =~ VERSION_FORMAT $1.to_i end end
  73. ςετΛॻ͘ describe '#update_number' do subject { JavaVersion.parse( 'JDK7u40' ).update_number }

    it { should == 40 } end
  74. ϓϩμΫτίʔυΛॻ͘ class JavaVersion ... def update_number @version_string =~ VERSION_FORMAT $2.to_i

    end end
  75. ϓϩμΫτίʔυΛॻ͘ class JavaVersion ... def update_number @version_string =~ VERSION_FORMAT $2.to_i

    end end
  76. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • ΦϒδΣΫτ͔ΒόʔδϣϯΛௐ΂Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • (࣍ͷόʔδϣϯΛௐ΂Δ)

    50%0Ϧετ DONE DONE DONE
  77. Ұาཱͪࢭ·Δ class JavaVersion VERSION_FORMAT = /^JDK(\d)+u(\d+)$/ def self.valid?(str) str =~

    VERSION_FORMAT end def self.parse(str) raise "Invalid Version Format: #{str}" unless valid?(str) self.new(str) end def initialize(version_string) @version_string = version_string end def family_number @version_string =~ VERSION_FORMAT $1.to_i end def update_number @version_string =~ VERSION_FORMAT $2.to_i end end Ϋϥεϝιου͕ ͔̎ͭʜ ॏෳʜ
  78. ϦϑΝΫλϦϯά class JavaVersion VERSION_FORMAT = /^JDK(\d)+u(\d+)$/ attr_reader :family_number, :update_number class

    << self def valid?(str) str =~ VERSION_FORMAT end def parse(str) raise "Invalid Version Format: #{str}" unless valid?(str) self.new(str) end end def initialize(version_string) version_string =~ VERSION_FORMAT @family_number = $1.to_i @update_number = $2.to_i end end
  79. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • ΦϒδΣΫτ͔ΒόʔδϣϯΛௐ΂Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • (࣍ͷόʔδϣϯΛௐ΂Δ)

    50%0Ϧετ DONE DONE DONE
  80. •ϝιου໊͸ʁ •γάωνϟ͸Ͳ͏͢Δʁ •RubyͳΒԋࢉࢠΛΦʔόʔϥ Πυ͢Δͷ͕Αͦ͞͏ 5IJOL

  81. ςετΛॻ͘ describe '#<=>' do let(:v7u40) { JavaVersion.parse('JDK7u40') } let(:v7u51) {

    JavaVersion.parse('JDK7u51') } let(:v8u0) { JavaVersion.parse('JDK8u0') } context 'compare update number' do it { v7u40.should be < v7u51 } end context 'compare family number' do it { v7u40.should be < v8u0 } end end
  82. ϓϩμΫτίʔυΛॻ͘ class JavaVersion include Comparable ... def <=>(target) if (self.family_number

    <=> target.family_number).zero? self.update_number <=> target.update_number else self.family_number <=> target.family_number end end end
  83. • จࣈྻ͕ଥ౰͔Ͳ͏͔ௐ΂Δ • จࣈྻΛύʔεͯ͠ΦϒδΣΫτΛ࡞Δ • ΦϒδΣΫτ͔ΒόʔδϣϯΛௐ΂Δ • 2ͭͷόʔδϣϯΛൺֱ͢Δ • (࣍ͷόʔδϣϯΛௐ΂Δ)

    50%0Ϧετ DONE DONE DONE DONE
  84. 1.ςετΛॻ͘ 2.REDΛݟΔ 3.ϓϩμΫτίʔυΛॻ͘ 4.GREENΛΈΔ ϦζϜ 3&%͔Β࢝ΊΑ

  85. •ࢲͱςετۦಈ։ൃ •TDDBC ௕Ԭ1.0 Reloaded ࠓ೔ͷ͓࿩

  86. ࢲʹͱͬͯେ੾ͳςετۦಈ ։ൃͷ4ͭͷՁ஋Λ঺հ͠ɺ ͦͷ࣮ફྫͱͯ͠ TDDBC ௕Ԭ 1.0 ͷ՝୊Λ;Γ͔ ͑Γ·ͨ͠ɻ ࠓ೔ͷ͓࿩

  87. •؆୯ʹԿ౓΋ಈ͔ͤΔ •໰୊ΛҰͭͣͭղܾͰ͖Δ •ݱࡏ஍ΛݟࣦΘͳ͍ •ར༻ऀͷࢹ఺Ͱબ୒Ͱ͖Δ ࢲͱςετۦಈ։ൃ

  88. ςετۦಈ։ൃ͸৽͍֓͠೦Ͱ ͸ͳ͘ɺ౰ͨΓલͷ͜ͱΛ౰ͨ Γલʹ΍ΔͨΊͷεΩϧͰ͋ ΓɺͦΕΛࢧԉ͢Δڠྗͳπʔ ϧ͕ͨ͘͞Μ͋Γ·͢ɻ ࠓ೔ͷ͓࿩

  89. ਎ߏ͑Δ ඞཁ͸ͳ͍ http://www.flickr.com/photos/bezoire/232274310

  90. ౰ͨΓલͷ͜ ͱΛ౰ͨΓલ ʹ΍Δ͚ͩ http://www.flickr.com/photos/evoo73/3222220257

  91. “ ϘτϜΞοϓ͚ͩͰ͸ͳ͘ɺ τοϓμ΢ϯ͚ͩͰ΋ͳ͘ɺ ֎͔Β಺΁ɺ಺͔Β֎΁ɺς ετͱڞʹาΈɺΦϒδΣΫ τୡΛҭͯΔɻߟ͑ଓ͚Δ͜ ͱɺײ͡ଓ͚Δ͜ͱɻςετ ͱ͸ઃܭπʔϧͰ͋Γɺର࿩ πʔϧͳͷͰ͢ɻ t-wada

    - ࣮ફςετۦಈ։ൃ ਪનͷ͜ͱ͹ - FOKPZUFTUJOH