元々小さなベンチャー企業でPHPな仕事をしてそこそこに満足していた自分が、Rubyを知ってじわじわと病みつきになっていき永和システムマネジメントに入社、日中のRubyのお仕事では飽きたらず時間さえあれば個人的にプログラミングをしてときどきgemを作って公開するようになった簡単な経緯と、そこでやっていることをお話します。
ࣗͷͨΊͷ code Λॻ͜͏ࣗ࡞πʔϧϥΠϒϥϦʹ͍ͭͯ
View Slide
ݩʑখ͞ͳϕϯνϟʔاۀͰPHPͳࣄΛͯͦͦ͜͜͠ʹຬ͍͕ͯͨࣗ͠ɺRubyΛͬͯ͡Θ͡ΘͱපΈ͖ͭʹͳ͍͖ͬͯӬγεςϜϚωδϝϯτʹೖࣾɺதͷRubyͷ͓ࣄͰ͖ͨΒͣ࣌ؒ͑͋͞ΕݸਓతʹϓϩάϥϛϯάΛͯ͠ͱ͖Ͳ͖gemΛ࡞ͬͯެ։͢ΔΑ͏ʹͳͬͨ؆୯ͳܦҢͱɺͦ͜Ͱ͍ͬͯΔ͜ͱΛ͓͠·͢ɻ
Rubyͱग़ձͬͯ࣌ PHP ͰࣄΛ͍ͯͨ͠ͱ͖ʹ Ruby ΛझຯͰॻ͖࢝Ίͯɺ৭ʑͳͷΛಘΔ͜ͱ͕Ͱ͖ͨɻ͖Ε͍ͳίʔυʹ͍ͭͯ࣌ΜͰ͍ͨࣗʹͻͱͭͷ͑Λࣔͯ͘͠Εͨ͠ɺϒϩοΫʹ͍ͭͯཧղͨ͠ͱ͖ͷ͍͋ͩײಈ͍ͯͨ͠ɻ
“͜Ε͍͍ͷ͔ͩΒͬͱ·Δͱ͍͍ͳ”
Rubyͱग़ձͬͯRuby ʹͱͬͯ + ʹͳΔ͜ͱΛ͍ͨͬ͠ͱ Ruby Λॻ͚Δॴ͕૿͑Δͱ͍͍ͳRuby ίϛϡχςΟʹ Contribute Ͱ͖ͳ͍͔ͳ
2 ޙ
Contribution?త͕΅ΜΓ͗ͯ͢͠ݴ༿͚͕ͩͬͨͬͱଞʹΓ͍ͨ͜ͱ͕͋ͬͨͣ
Ruby Λͬͯ͜Ε·Ͱ͑ͨΈͷࣗ
ѹతʹগͳ͍ɻࣗ
ͬͱͨ͘͞ΜίʔυΛॻ͔ͳͪ͘ΌɻͰɺԿͷͨΊʹ?
ࣗ ͷͨΊͷ code Λॻ͜͏
Ͳ͏ͯ͠?ͤΊͯࣗͷΈΛ͑ΒΕΔఔʹͳΓ͍ͨϢʔβͷࢹʹཱͯΔ/Ϣʔβ͕͙ͦ͢͜ʹ͍ΔతΛݟࣦ͍ʹ͍͘ϞνϕʔγϣϯΛอͭྗ͕গͳͯ͘ࡁΉϦεΫ͕গͳ͍(Γ͍ͨΑ͏ʹΕΔ)
࠷ۙͬͨ͜ͱ
RetterهΛॻ͘श׳͕อͯͳ͍ݪҼɺهΛॻ͘खॱͷ໘͞ʹ͋Δͱ༧ɻهΛॻ͘ͱ͍͏ຊ࣭తͳ࡞ۀҎ֎ͷ໘ͳखଓΛͰ͖Δ͚ͩ؆୯ʹ͢ΔͨΊʹ։ൃɻγΣϧ্ͰΈͷΤσΟλΛ͏͜ͱ͕Ͱ͖ɺΦϑϥΠϯͰ͑ɺ؆୯ʹެ։Ͱ͖Δɻhttps://github.com/hibariya/retter
ClineϑΟʔυͷߪಡ࣌ؒΛ֬อ͢Δ͜ͱΛఘΊͨɻҰͰ࠷͘ʹ͍ͯ͠ΔλʔϛφϧͰɺৗʹ৽͍͠ใ͕ରྲྀ͍ͯ͠Δঢ়ଶʹ͠Α͏ͱࢥͬͨͷ͕͖͔͚ͬɻʹ͍ͭͨͱ͖ʹ͙͢ϒϥβͰ֬ೝͰ͖Δɻhttps://github.com/hibariya/cline
Reditorgem edit bundle open ͷΑ͏ʹɺRubyͰهड़͞Εͨඪ४ఴϥΠϒϥϦΤσΟλͰ؆୯ʹ։͖͍ͨͱࢥͬͯ։ൃͨ͠ͱͬͯখ͞ͳπʔϧɻhttps://github.com/hibariya/reditor
Hiwaiࣄதɺcline Ͱදࣔ͞ΕΔ௨ʹͱͬͯͻΘ͍ͳจࣈ͕ೖ͖ͬͯͯɺͳΜͱݴ͑ͳ͍ؾ࣋ͪʹͳΔͷͰΉͳ͘։ൃɻhttps://github.com/hibariya/hiwai
ࣗͷཉ͍͠ͷͰ͑͞ΈͲ͓Γʹͭ͘Δͷׂͱ͍ͨΜ
Ͳ͏ͯ͠?पลٕज़ͷࣝಘΒΕΔطଘͷϥΠϒϥϦΛΔ͖͔͚ͬʹͳΔಘΒΕͨݟனͷࣄʹཱͭ
Markdownͷه๏ɺparser (Redcarpet)ςϯϓϨʔτ (Tilt)Ϗϧυπʔϧ (Thor)ϑΟʔυͷੜ (Builder)ίʔυϋΠϥΠτ (Albino, Pygments.rb)૬ରͬΆ͍จࣈྻͷparse (Chronic)Ωϟογϡ (ActiveSupport)ڒ (Nokogiri)
طଘͷ code Λ͓͏
طʹ͋ΔͷΛ͏ͱָGitHubͷIssueͰղܾ͞Ε͍ͯΔ͔͠Εͳ͍طʹमਖ਼͕औΓࠐ·Ε͍ͯΔ͔͠Εͳ͍Ͱ͖Δ͜ͱͳΒύονΛૹΔ (औࠐ·ΕΔ͔!)Կ͔ʹͿ͔ͭͬͯ:
code Λެ։͠Α͏
ެ։ͨ͠ํ͕ྑ͍ཧ༝ެ։͢Δ(ݟΒΕΔ)͜ͱΛҙࣝ͢Δ͜ͱʹͳΔಉ͡ΈΛ࣋ͭਓ͕ډΔ͔͠Εͳ͍֎͔Βݟ͑ΔΞΫςΟϏςΟʹͳΔهͷछʹͳΔ
ΞΠσΟΞΛूΊΔ
@rubygems
GitHub ͷ Activity
͍͍ͩͨͷςʔϚΛܾΊΔγΣϧ͕͖ͰۃྗΩʔϘʔυͰࡁ·͍ͤͨਓ͚ʹͰ͖Ε cool ͰΑΓָͳੜ׆ΛૹΕΔΑ͏ͳͷΛͭ͘Γ͍ͨྫ͑:
ΞΠσΟΞ͕ු͔ΜͩΒѪணͷΘ໊͘લΛ͚ͭΔಉ໊͡લͷύοέʔδ͕ແ͍͔֬ೝ͢Δ࠷ݶͷ࣮Ͱखૣ࣮͘ɾެ։ͯ͠ΈΔ࠷ॳͷϢʔβͱͯ͠ҭͯଓ͚Δ
gem Λ࡞Ζ͏
gem Λ࡞Ζ͏gem Λ࡞Δͷͱͯ؆୯खݩͰࢼ͚ͩ͢ͳΒެ։͢Β͠ͳ͍͍ͯ͘ࠓ͙͢࡞ΓํΛ֮͑Α͏
bundle gem my_gem
gemmy_gem├── Gemfile├── Gemfile.lock├── LICENSE├── README.md├── Rakefile├── bin # 実行可能なコマンドを置く├── lib # ライブラリ本体│ ├── my_gem│ │ └── version.rb # バージョンを変えるときはここ│ └── my_gem.rb├── my_gem.gemspec # gemspec└── spec # test
gemspecGem::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::VERSIONend
ґଘؔόʔδϣϯͷࢦఆ# Ruby の versiongem.required_ruby_version = '>= 1.9.3'# 実行時の依存関係gem.add_runtime_dependency 'thor', ['>= 0.14.6']# 開発時の依存関係gem.add_development_dependency 'rspec', ['>= 2.9.0']
Πϯετʔϧ࣌ͷϝοηʔδ# 普段はあまり使わない。必要な時だけ。# install/update 時に端末に出力されるgem.post_install_message = '(::)(::)Hi(::)(::)'
࣮ߦՄೳͳίϚϯυgem.executables = %w(bin/foo)
࣮ߦՄೳͳίϚϯυίϚϯυͷͨΊͷίʔυ͚ͩΛॻ͘ຊ࣭తͳͷ lib/ ׂͱյ͍͢͠෦ͳΔ͘γϯϓϧʹ
README࠷ॳʹʹೖΔͷͳͷͰඞͣॻ͔͘Γ͢͞Λ༏ઌͳΔ͘ӳޠͰ...!
gem ͷੜɾެ։# gem の生成gem build my_gem.gemspec# gem の公開gem push my_gem.gem
ଈ࠲ʹެ։͞ΕΔ
ϦϦʔεͷͱ͖ʹΔ͜ͱςετ͕ green Ͱ͋Δ͜ͱΛ͏Ұ֬ೝAPI͕มΘͬͨͳΒREADMEͷߋ৽όʔδϣϯΛ্͛ͯɺλάΛ͚ͭΔखݩͷ gem ଈ࠲ʹ update ͯ͠ࢼ͢
gem ͷ໋໊ʹ͍ͭͯ(ਪ)http://blog.segment7.net/2010/11/15/how-to-name-gems୯ޠΛ۠Δ͚ͩͳΒΞϯμʔείΞΛ͏طଘͷͷʹػೳΛՃ͢ΔͳΒϋΠϑϯେจࣈΘͳ͍
gem ͷ໋໊ʹ͍ͭͯ(ਪ)gem: fancy_requirerequire: 'fancy_require'constant: FancyRequiregem: net-http-persistentrequire 'net/http/pipeline'constant: Net::HTTP::Persistent
͋ͦͿͱ͖(ਪ)冗談っぽい gem をつくるならpebbles というプリフィクスをつける。http://randd.kwappa.net/2010/12/19/192
͋ͦͿͱ͖(ਪ)$ 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)
·ͱΊ
ࣗͷͨΊͷ code Λॻ͜͏ࣗͷͨΊͷ code Λॻ͘ɺͱ͍͏ͷͱͯجຊతͳߦҝࣗͷͨΊͷΞΠσΞɺखೖΕ͕ԼखͰதʑރΕͳ͍২ͷΑ͏ʹҭ͍ͯ͢gemΛ࡞Δͷ͘͠ͳ͍