自分のための code を書こう

自分のための code を書こう

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

E39aeab4407ea02102f75584618549a4?s=128

Hibariya Hi

May 31, 2012
Tweet

Transcript

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

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

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

    ͍ͯཧղͨ͠ͱ͖਺೔ͷ͍͋ͩײಈ͍ͯͨ͠ɻ
  4. “͜Ε͸͍͍΋ͷ͔ͩΒ ΋ͬͱ޿·Δͱ͍͍ͳ”

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

    Contribute Ͱ͖ͳ͍͔ͳ
  6. ໿ 2 ೥ޙ

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

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

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

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

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

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

  13. ࠷ۙ΍ͬͨ͜ͱ

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

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

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

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

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

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

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

  21. Markdownͷه๏ɺparser (Redcarpet) ςϯϓϨʔτ (Tilt) Ϗϧυπʔϧ (Thor) ϑΟʔυͷੜ੒ (Builder) ίʔυϋΠϥΠτ (Albino,

    Pygments.rb) ૬ର೔෇ͬΆ͍จࣈྻͷparse (Chronic) Ωϟογϡ (ActiveSupport) ڒ (Nokogiri)
  22. طଘͷ code Λ࢖͓͏

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

  24. code Λެ։͠Α͏

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

  26. ΞΠσΟΞΛूΊΔ

  27. @rubygems

  28. GitHub ͷ Activity

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

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

  31. gem Λ࡞Ζ͏

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

  33. bundle gem my_gem

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

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

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

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

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

    の公開 gem push my_gem.gem
  42. ଈ࠲ʹެ։͞ΕΔ

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

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

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

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

  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)
  48. ·ͱΊ

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