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

自分のための code を書こう

自分のための code を書こう

元々小さなベンチャー企業でPHPな仕事をしてそこそこに満足していた自分が、Rubyを知ってじわじわと病みつきになっていき永和システムマネジメントに入社、日中のRubyのお仕事では飽きたらず時間さえあれば個人的にプログラミングをしてときどきgemを作って公開するようになった簡単な経緯と、そこでやっていることをお話します。

Hibariya Hi

May 31, 2012
Tweet

More Decks by Hibariya Hi

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. ໿ 2 ೥ޙ

    View Slide

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

    View Slide

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

    View Slide

  9. ѹ౗తʹগͳ͍ɻ
    ࣗ౴

    View Slide

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

    View Slide

  11. ࣗ෼ ͷͨΊͷ code Λॻ͜͏

    View Slide

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

    View Slide

  13. ࠷ۙ΍ͬͨ͜ͱ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. ࣗ෼ ͷͨΊͷ code Λॻ͜͏

    View Slide

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

    View Slide

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

    View Slide

  22. طଘͷ code Λ࢖͓͏

    View Slide

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

    View Slide

  24. code Λެ։͠Α͏

    View Slide

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

    View Slide

  26. ΞΠσΟΞΛूΊΔ

    View Slide

  27. @rubygems

    View Slide

  28. GitHub ͷ Activity

    View Slide

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

    View Slide

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

    View Slide

  31. gem Λ࡞Ζ͏

    View Slide

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

    View Slide

  33. bundle gem my_gem

    View Slide

  34. 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

    View Slide

  35. gemspec
    Gem::Specification.new do |gem|
    gem.authors = ["hibariya"]
    gem.email = ["[email protected]"]
    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

    View Slide

  36. ґଘؔ܎΍όʔδϣϯͷࢦఆ
    # 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']

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  42. ଈ࠲ʹެ։͞ΕΔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  47. ͋ͦͿͱ͖(ਪ঑)
    $ 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)

    View Slide

  48. ·ͱΊ

    View Slide

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

    View Slide