Slide 1

Slide 1 text

rubygemsೖ໳

Slide 2

Slide 2 text

ΈΜͳgem޷͖Ͱ͢ΑͶ??

Slide 3

Slide 3 text

gemΛ࢖͏ਓ͸ଟ͍͚Ͳ࡞Δਓ͸গͳ͍

Slide 4

Slide 4 text

gem࡞ΔͷͬͯࢥͬͨΑΓ΋ ؆୯ ͳΜͰ͢Αͱ͍͏࿩Λ͠·͢

Slide 5

Slide 5 text

࡞Δલʹɺ·ͣ࢓૊ Έʹ͍ͭͯͬ͘͟Γ ղઆ͠·͢

Slide 6

Slide 6 text

ͦ΋ͦ΋gemͬͯͲ͏͍͏࢓૊Ͱ ಈ͍͍ͯΔͷ https://github.com/rubygems/rubygems » ΈΜͳ͓ͳ͡Έgem installͳͲͷίϚϯυ » gemͷrequireͷڍಈΛఏڙ͍ͯ͠Δ

Slide 7

Slide 7 text

rubygemsΛrequire͢Δͱɺ require͕ஔ͖׵ΘΔ 1.·ͣ͸ී௨ʹrequire($LOAD_PATHΛ୳͢) 2.ͳʹ΋ݟ͔ͭΒͳ͔ͬͨΒɺաڈʹgem installͨ͠gemΛ୳͠ ͯɺݟ͔ͭͬͨΒ$LOAD_PATHʹͦͷgemͷpathΛ௥Ճͯ͠ require͢Δ

Slide 8

Slide 8 text

rubygems͸ࣗಈͰrequire͞ΕΔ » Ruby1.9͔Β » ࣗಈͰrequireͨ͘͠ͳ͍ͱ͖͸RubyͷϏϧυ࣌ʹexport RUBYOPT='--disable gems'͓ͯ͘͠ඞཁ͕͋ΔΒ͍͠

Slide 9

Slide 9 text

Ͱ΋๻ͨͪΏΔ;Θ Rails࢖͍ͬͯ΄ͱ ΜͲgemΛrequire͠ ͳ͍ΑͶʁ

Slide 10

Slide 10 text

Bundler

Slide 11

Slide 11 text

Gemfile ྫ gem ‘rails’, ‘>~ 5.2.0’ gem 'bootsnap', '>= 1.1.0', require: false

Slide 12

Slide 12 text

Bundler.setup && Bundler.require ͜ΕΒ͸Rails؀ڥΛϩʔυ͢Δͱ͖ʹඞ࣮ͣߦ͞ΕΔ # config/boot.rb require 'bundler/setup' # config/application.rb Bundler.require(*Rails.groups)

Slide 13

Slide 13 text

Bundler.setup Gemfileʹఆٛ͞Ε͍ͯΔgemΛͥΜͿ$LOAD_PATHʹ௥Ճ͢Δ

Slide 14

Slide 14 text

Bundler.require(*Rails.groups) Gemfileʹఆٛ͞Ε͍ͯΔgemΛrequire͢Δɻͨͩ͠ » Ҿ਺ͷgroupʹଐ͍ͯ͠ͳ͍gem͸require͠ͳ͍ » gem 'bootsnap', '>= 1.1.0', require: falseΈ͍ͨʹ require: falseͱͳ͍ͬͯΔgem͸require͠ͳ͍ » ։ൃ༻ͱ͔ςετ༻ͷgemͩͱҰ୴require: falseͱ͓͍ͯ͠ ͯɺಛఆͷίϚϯυͷͱ͖͚ͩ໌ࣔతʹrequire͢Δɺͱ͍͏gem ͕࣌ʑ͋Γ·͢

Slide 15

Slide 15 text

࣍ʹ࡞Γํ

Slide 16

Slide 16 text

budler͕gemͷ౔୆࡞Γ༻ͷίϚ ϯυΛఏڙ͍ͯ͠Δ bundle gem gemͷ໊લ ͰOK

Slide 17

Slide 17 text

ࢼ͠ʹhelloworld gemΛ࡞ͬͯΈ ·͢ bundle gem helloworld Creating gem 'helloworld'... MIT License enabled in config Code of conduct enabled in config create helloworld/Gemfile create helloworld/lib/helloworld.rb create helloworld/lib/helloworld/version.rb create helloworld/helloworld.gemspec create helloworld/Rakefile create helloworld/README.md create helloworld/bin/console create helloworld/bin/setup create helloworld/.gitignore create helloworld/.travis.yml create helloworld/.rspec create helloworld/spec/spec_helper.rb create helloworld/spec/helloworld_spec.rb create helloworld/LICENSE.txt create helloworld/CODE_OF_CONDUCT.md Initializing git repo in /Users/shinichi.maeshima/tmp/helloworld Gem 'helloworld' was successfully created. For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html

Slide 18

Slide 18 text

ͨ͘͞ΜϑΝΠϧ͕ੜ੒͞Εͨ . !"" CODE_OF_CONDUCT.md !"" Gemfile !"" LICENSE.txt !"" README.md !"" Rakefile !"" bin # !"" console # $"" setup !"" helloworld.gemspec !"" lib # !"" helloworld # # $"" version.rb # $"" helloworld.rb $"" spec !"" helloworld_spec.rb $"" spec_helper.rb

Slide 19

Slide 19 text

཈͓͑ͯ͘΂͖͸͜ͷ̎ͭ » lib/helloworld.rb » gemΛrequireͨ͠ͱ͖ͷى఺ʹͳΔϑΝΠϧ » helloworld.gemspec » gemͷઆ໌΍ґଘؔ܎Λఆٛ͢ΔϑΝΠϧ

Slide 20

Slide 20 text

lib/helloworld.rb ྫ require "helloworld/version" module Helloworld def self.say puts 'hello world!' end end

Slide 21

Slide 21 text

helloworld.gemspec ྫɻҰ෦লུͯ͠·͢ Gem::Specification.new do |spec| spec.name = "helloworld" spec.version = Helloworld::VERSION spec.authors = ["willnet"] spec.email = ["[email protected]"] spec.summary = %q{TODO: Write a short summary, because RubyGems requires one.} spec.description = %q{TODO: Write a longer description or delete this line.} spec.homepage = "TODO: Put your gem's website or public repo URL here." spec.license = "MIT" spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } end spec.bindir = "exe" spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] spec.add_development_dependency "bundler", "~> 1.17" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "rspec", "~> 3.0" end

Slide 22

Slide 22 text

TODO: ͱͳ͍ͬͯΔͱ͜ΖΛॻ͍ͯͳ͍ͱౖ ΒΕΔͷͰͪΌΜͱॻ͖·͠ΐ͏ ྫͷsummaryͱdescriptionͱhomepageΛमਖ਼ Gem::Specification.new do |spec| spec.name = "helloworld" spec.version = Helloworld::VERSION spec.authors = ["willnet"] spec.email = ["[email protected]"] spec.summary = %q{Hello World} spec.description = %q{Hello World gem for sample} spec.homepage = “https://github.com/willnet/helloworld” spec.license = "MIT" spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } end spec.bindir = "exe" spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] spec.add_development_dependency "bundler", "~> 1.17" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "rspec", "~> 3.0" end

Slide 23

Slide 23 text

ґଘ͍ͯ͠Δgem͕͋Δͱ͖͸ helloworld.gemspecʹॻ͖ ·͢ ྫ spec.add_dependency ‘rails’ spec.add_development_dependency ‘gimei’

Slide 24

Slide 24 text

ϩʔΧϧ؀ڥʹΠϯετʔϧ͠ ͯಈ࡞Λࢼ͍ͨ͠ rake install require 'helloworld' #=> true Helloworld.say #=> nil hello world!

Slide 25

Slide 25 text

ςετͷৄࡉͳॻ͖ํ͸লུ͠ ·͢ ςετ༻ͷσΟϨΫτϦ͕ੜ੒͞Ε͍ͯΔͷͰɺ͙͢ʹ͍ͭ΋ͷΑ͏ʹॻ ͚·͢

Slide 26

Slide 26 text

ςετॻ͖·͠ΐ͏ Ͷ ❤

Slide 27

Slide 27 text

gem͕׬੒ͨ͠

Slide 28

Slide 28 text

rubygems.orgʹϦϦʔε͢Δ ͧʂ ࣄલʹrubygems.orgͰΞΧ΢ϯτ࡞͓ͬͯ͘ඞཁ͋Δ͸ͣ rake release

Slide 29

Slide 29 text

ࣾ಺Ͱ͔͠࢖Θͳ͍gemͬͯͲ͏ ϗεςΟϯά͢Δͷʁ » github΍gitlabʹίʔυΛϗεςΟϯά » Gemfileʹ࣍ͷΑ͏ʹॻ͍͓͚ͯ͹OK gem ‘helloworld’, git: ‘https://github.com/willnet/helloworld.git'

Slide 30

Slide 30 text

gemʹ੾Γग़ͤͦ͏ ͳίʔυɺͲΜͲΜ ੾Γग़͍͖ͯ͠·͠ ΐ͏!!!1