Slide 1

Slide 1 text

ࣗ෼ͷͨΊͷ code Λॻ͜͏ ࣗ࡞πʔϧ΍ϥΠϒϥϦʹ͍ͭͯ

Slide 2

Slide 2 text

ݩʑখ͞ͳϕϯνϟʔاۀͰPHPͳ࢓ࣄΛͯ͠ ͦͦ͜͜ʹຬ଍͍ͯͨࣗ͠෼͕ɺRubyΛ஌ͬͯ ͡Θ͡ΘͱපΈ͖ͭʹͳ͍͖ͬͯӬ࿨γεςϜ Ϛωδϝϯτʹೖࣾɺ೔தͷRubyͷ͓࢓ࣄͰ͸ ๞͖ͨΒͣ࣌ؒ͑͋͞Ε͹ݸਓతʹϓϩάϥϛ ϯάΛͯ͠ͱ͖Ͳ͖gemΛ࡞ͬͯެ։͢ΔΑ͏ ʹͳͬͨ؆୯ͳܦҢͱɺͦ͜Ͱ΍͍ͬͯΔ͜ͱ Λ͓࿩͠·͢ɻ

Slide 3

Slide 3 text

Rubyͱग़ձͬͯ ౰࣌ PHP Ͱ࢓ࣄΛ͍ͯͨ͠ͱ͖ʹ Ruby Λझ ຯͰॻ͖࢝Ίͯɺ৭ʑͳ΋ͷΛಘΔ͜ͱ͕Ͱ͖ ͨɻ ͖Ε͍ͳίʔυʹ͍ͭͯ౰࣌೰ΜͰ͍ͨࣗ෼ʹ ͻͱͭͷ౴͑Λࣔͯ͘͠Εͨ͠ɺϒϩοΫʹͭ ͍ͯཧղͨ͠ͱ͖਺೔ͷ͍͋ͩײಈ͍ͯͨ͠ɻ

Slide 4

Slide 4 text

“͜Ε͸͍͍΋ͷ͔ͩΒ ΋ͬͱ޿·Δͱ͍͍ͳ”

Slide 5

Slide 5 text

Rubyͱग़ձͬͯ Ruby ʹͱͬͯ + ʹͳΔ͜ͱΛ͍ͨ͠ ΋ͬͱ Ruby Λॻ͚Δ৔ॴ͕૿͑Δͱ͍͍ͳ Ruby ίϛϡχςΟʹ Contribute Ͱ͖ͳ͍͔ͳ

Slide 6

Slide 6 text

໿ 2 ೥ޙ

Slide 7

Slide 7 text

Contribution? ໨త͕΅Μ΍Γ͗ͯ͢͠ݴ༿͚͕ͩ࢒ͬͨ ΋ͬͱଞʹ΍Γ͍ͨ͜ͱ͕͋ͬͨ͸ͣ

Slide 8

Slide 8 text

Ruby Λ࢖ͬͯ ͜Ε·Ͱ׎͑ͨ๬Έͷ਺ ࣗ໰

Slide 9

Slide 9 text

ѹ౗తʹগͳ͍ɻ ࣗ౴

Slide 10

Slide 10 text

΋ͬͱͨ͘͞Μ ίʔυΛॻ͔ͳͪ͘Όɻ Ͱ΋ɺԿͷͨΊʹ?

Slide 11

Slide 11 text

ࣗ෼ ͷͨΊͷ code Λॻ͜͏

Slide 12

Slide 12 text

Ͳ͏ͯ͠? ͤΊͯࣗ෼ͷ๬ΈΛ׎͑ΒΕΔఔ౓ʹ͸ͳΓ͍ͨ Ϣʔβͷࢹ఺ʹཱͯΔ/Ϣʔβ͕͙ͦ͢͜ʹ͍Δ ໨తΛݟࣦ͍ʹ͍͘ ϞνϕʔγϣϯΛอͭ౒ྗ͕গͳͯ͘ࡁΉ ϦεΫ͕গͳ͍(΍Γ͍ͨΑ͏ʹ΍ΕΔ)

Slide 13

Slide 13 text

࠷ۙ΍ͬͨ͜ͱ

Slide 14

Slide 14 text

Retter ೔هΛॻ͘श׳͕อͯͳ͍ݪҼ͸ɺ೔هΛॻ͘ख ॱͷ໘౗͞ʹ͋Δͱ༧૝ɻ ೔هΛॻ͘ͱ͍͏ຊ࣭తͳ࡞ۀҎ֎ͷ໘౗ͳखଓ ΛͰ͖Δ͚ͩ؆୯ʹ͢ΔͨΊʹ։ൃɻ γΣϧ্Ͱ޷ΈͷΤσΟλΛ࢖͏͜ͱ͕Ͱ͖ɺΦ ϑϥΠϯͰ΋࢖͑ɺ؆୯ʹެ։Ͱ͖Δɻ https:/ /github.com/hibariya/retter

Slide 15

Slide 15 text

Cline ϑΟʔυͷߪಡ࣌ؒΛ֬อ͢Δ͜ͱΛఘΊͨɻҰ ೔Ͱ࠷΋௕͘໨ʹ͍ͯ͠ΔλʔϛφϧͰɺৗʹ৽ ͍͠৘ใ͕ରྲྀ͍ͯ͠Δঢ়ଶʹ͠Α͏ͱࢥͬͨͷ ͕͖͔͚ͬɻ ໨ʹ͍ͭͨͱ͖ʹ͙͢ϒϥ΢βͰ֬ೝͰ͖Δɻ https:/ /github.com/hibariya/cline

Slide 16

Slide 16 text

Reditor gem edit ΍ bundle open ͷΑ͏ʹɺRubyͰهड़ ͞Εͨඪ४ఴ෇ϥΠϒϥϦ΋ΤσΟλͰ؆୯ʹ։ ͖͍ͨͱࢥͬͯ։ൃͨ͠ͱͬͯ΋খ͞ͳπʔϧɻ https:/ /github.com/hibariya/reditor

Slide 17

Slide 17 text

Hiwai ࢓ࣄதɺcline Ͱදࣔ͞ΕΔ௨஌ʹͱͬͯ΋ͻΘ͍ ͳจࣈ͕ೖ͖ͬͯͯɺͳΜͱ΋ݴ͑ͳ͍ؾ࣋ͪʹ ͳΔͷͰ΍Ήͳ͘։ൃɻ https:/ /github.com/hibariya/hiwai

Slide 18

Slide 18 text

ࣗ෼ͷཉ͍͠΋ͷͰ͑͞ ๬ΈͲ͓Γʹͭ͘Δ ͷ͸ׂͱ͍ͨ΁Μ

Slide 19

Slide 19 text

ࣗ෼ ͷͨΊͷ code Λॻ͜͏

Slide 20

Slide 20 text

Ͳ͏ͯ͠? पลٕज़ͷ஌ࣝ΋ಘΒΕΔ طଘͷϥΠϒϥϦΛ஌Δ͖͔͚ͬʹͳΔ ಘΒΕͨ஌ݟ͸னͷ࢓ࣄʹ΋໾ཱͭ

Slide 21

Slide 21 text

Markdownͷه๏ɺparser (Redcarpet) ςϯϓϨʔτ (Tilt) Ϗϧυπʔϧ (Thor) ϑΟʔυͷੜ੒ (Builder) ίʔυϋΠϥΠτ (Albino, Pygments.rb) ૬ର೔෇ͬΆ͍จࣈྻͷparse (Chronic) Ωϟογϡ (ActiveSupport) ڒ (Nokogiri)

Slide 22

Slide 22 text

طଘͷ code Λ࢖͓͏

Slide 23

Slide 23 text

طʹ͋Δ΋ͷΛ࢖͏ͱָ GitHubͷIssueͰղܾ͞Ε͍ͯΔ͔΋͠Εͳ͍ طʹमਖ਼͕औΓࠐ·Ε͍ͯΔ͔΋͠Εͳ͍ Ͱ͖Δ͜ͱͳΒύονΛૹΔ (औࠐ·ΕΔ͔΋!) Կ͔໰୊ʹͿ͔ͭͬͯ΋:

Slide 24

Slide 24 text

code Λެ։͠Α͏

Slide 25

Slide 25 text

ެ։ͨ͠ํ͕ྑ͍ཧ༝ ެ։͢Δ(ݟΒΕΔ)͜ͱΛҙࣝ͢Δ͜ͱʹͳΔ ಉ͡೰ΈΛ࣋ͭਓ͕ډΔ͔΋͠Εͳ͍ ֎͔Βݟ͑ΔΞΫςΟϏςΟʹͳΔ ೔هͷछʹͳΔ

Slide 26

Slide 26 text

ΞΠσΟΞΛूΊΔ

Slide 27

Slide 27 text

@rubygems

Slide 28

Slide 28 text

GitHub ͷ Activity

Slide 29

Slide 29 text

͍͍ͩͨͷςʔϚΛܾΊΔ γΣϧ͕޷͖Ͱ ۃྗΩʔϘʔυͰࡁ·͍ͤͨਓ޲͚ʹ Ͱ͖Ε͹ cool Ͱ ΑΓָͳੜ׆ΛૹΕΔΑ͏ͳ΋ͷΛͭ͘Γ͍ͨ ྫ͑͹:

Slide 30

Slide 30 text

ΞΠσΟΞ͕ු͔ΜͩΒ ѪணͷΘ໊͘લΛ͚ͭΔ ಉ໊͡લͷύοέʔδ͕ແ͍͔֬ೝ͢Δ ࠷௿ݶͷ࣮૷Ͱखૣ࣮͘૷ɾެ։ͯ͠ΈΔ ࠷ॳͷϢʔβͱͯ͠ҭͯଓ͚Δ

Slide 31

Slide 31 text

gem Λ࡞Ζ͏

Slide 32

Slide 32 text

gem Λ࡞Ζ͏ gem Λ࡞Δͷ͸ͱͯ΋؆୯ खݩͰࢼ͚ͩ͢ͳΒެ։͢Β͠ͳͯ͘΋͍͍ ࠓ͙͢࡞ΓํΛ֮͑Α͏

Slide 33

Slide 33 text

bundle gem my_gem

Slide 34

Slide 34 text

gem my_gem ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── Rakefile ├── bin # 実行可能なコマンドを置く ├── lib # ライブラリ本体 │ ├── my_gem │ │ └── version.rb # バージョンを変えるときはここ │ └── my_gem.rb ├── my_gem.gemspec # gemspec └── spec # test

Slide 35

Slide 35 text

gemspec Gem::Specification.new do |gem| gem.authors = ["hibariya"] gem.email = ["celluloid.key@gmail.com"] gem.description = %q{TODO: Write a gem description} gem.summary = %q{TODO: Write a gem summary} gem.homepage = "" gem.files = `git ls-files`.split($\) gem.executables = gem.files.grep(%r{^bin/}). map{ |f| File.basename(f) } gem.test_files = gem.files.grep(%r{^(test|spec|features)/}) gem.name = "my_gem" gem.require_paths = ["lib"] gem.version = MyGem::VERSION end

Slide 36

Slide 36 text

ґଘؔ܎΍όʔδϣϯͷࢦఆ # Ruby の version gem.required_ruby_version = '>= 1.9.3' # 実行時の依存関係 gem.add_runtime_dependency 'thor', ['>= 0.14.6'] # 開発時の依存関係 gem.add_development_dependency 'rspec', ['>= 2.9.0']

Slide 37

Slide 37 text

Πϯετʔϧ࣌ͷϝοηʔδ # 普段はあまり使わない。必要な時だけ。 # install/update 時に端末に出力される gem.post_install_message = '(::)(::)Hi(::)(::)'

Slide 38

Slide 38 text

࣮ߦՄೳͳίϚϯυ gem.executables = %w(bin/foo)

Slide 39

Slide 39 text

࣮ߦՄೳͳίϚϯυ ίϚϯυͷͨΊͷίʔυ͚ͩΛॻ͘ ຊ࣭తͳ΋ͷ͸ lib/ ΁ ׂͱյ͠΍͍͢෦෼ ͳΔ΂͘γϯϓϧʹ

Slide 40

Slide 40 text

README ࠷ॳʹ໨ʹೖΔ΋ͷͳͷͰඞͣॻ͘ ෼͔Γ΍͢͞Λ༏ઌ ͳΔ΂͘ӳޠͰ...!

Slide 41

Slide 41 text

gem ͷੜ੒ɾެ։ # gem の生成 gem build my_gem.gemspec # gem の公開 gem push my_gem.gem

Slide 42

Slide 42 text

ଈ࠲ʹެ։͞ΕΔ

Slide 43

Slide 43 text

ϦϦʔεͷͱ͖ʹ΍Δ͜ͱ ςετ͕ green Ͱ͋Δ͜ͱΛ΋͏Ұ౓֬ೝ API͕มΘͬͨͳΒREADMEͷߋ৽ όʔδϣϯΛ্͛ͯɺλάΛ͚ͭΔ खݩͷ gem ΋ଈ࠲ʹ update ͯ͠ࢼ͢

Slide 44

Slide 44 text

gem ͷ໋໊ʹ͍ͭͯ(ਪ঑) http://blog.segment7.net/2010/11/15/how-to-name-gems ୯ޠΛ۠੾Δ͚ͩͳΒΞϯμʔείΞΛ࢖͏ طଘͷ΋ͷʹػೳΛ௥Ճ͢ΔͳΒϋΠϑϯ େจࣈ͸࢖Θͳ͍

Slide 45

Slide 45 text

gem ͷ໋໊ʹ͍ͭͯ(ਪ঑) gem: fancy_require require: 'fancy_require' constant: FancyRequire gem: net-http-persistent require 'net/http/pipeline' constant: Net::HTTP::Persistent

Slide 46

Slide 46 text

͋ͦͿͱ͖(ਪ঑) 冗談っぽい gem をつくるなら pebbles というプリフィクスをつける。 http://randd.kwappa.net/2010/12/19/192

Slide 47

Slide 47 text

͋ͦͿͱ͖(ਪ঑) $ gem search -r pebbles- *** REMOTE GEMS *** pebbles-anti_hangover (0.1.0) pebbles-compgacha (0.1.0) pebbles-dajare (0.1.0) pebbles-fizzbuzz (0.1.1) pebbles-kenshiro (1.0.0) pebbles-rack-hanoi (0.1.0) pebbles-sl (0.9.1) pebbles-xmas (0.1.0) pebbles-zenra (0.1.1)

Slide 48

Slide 48 text

·ͱΊ

Slide 49

Slide 49 text

ࣗ෼ͷͨΊͷ code Λॻ͜͏ ࣗ෼ͷͨΊͷ code Λॻ͘ɺͱ͍͏ͷ͸ͱͯ΋ج ຊతͳߦҝ ࣗ෼ͷͨΊͷΞΠσΞ͸ɺखೖΕ͕ԼखͰ΋தʑ ރΕͳ͍২෺ͷΑ͏ʹҭͯ΍͍͢ gemΛ࡞Δͷ͸೉͘͠ͳ͍