Slide 1

Slide 1 text

jnchito͞Μʹฉ͍ͯΈ͍࣭ͨ໰
 ʮ݁ہprivateϝιουͬͯ ɹςετॻ͍͍͍ͯͷʁʯ 2019.3.3 ΑͪΑͪ.rb ୈ143ճ / @highwide

Slide 2

Slide 2 text

ʮ݁ہprivateϝιουͬͯ ɹςετॻ͍͍͍ͯͷʁʯ https://qa.atmarkit.co.jp/q/2784

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

https://twitter.com/t_wada/status/12820254606491648

Slide 7

Slide 7 text

• ࿩͕ऴΘͬͯ͠·͏...͚ΕͲ΋ɻ • ͜ͷ΁Μͷ࿩͕ίϯηϯαεʹͳͬͯΔ(ͱࢥΘΕΔ)νʔ Ϝʹ͓͍ͯ΋ɺҙݟ͕෼͔ΕΔ͜ͱ͕͋ͬͨ • ཧ૝తʹ͸ॻ͔ͳ͍΄͏͕͍͍Μ͚ͩͲɺॻ͘ͷ΋ݱ࣮ղ ͱ͍͏͜ͱ΋͋ΔͷͰ͸ʁ • ϓϥΠϕʔτϝιουͷςετ͠΍͕͢͞ҧ͏ݴޠʹΑͬ ͯ΋ߟ͑ํ͕ҧ͏ͱ͍͏͜ͱ͸͋Δ͔΋ʁ • ҏ౻͞Μͷ͝ҙݟ΋ฉ͍ͯΈ͍ͨͰ͢ʂ

Slide 8

Slide 8 text

ࣗ෼͕೰ΉΑ͏ͳέʔε • όονॲཧͳͲͰɺʙʙ.rake ͔Βୟ͔ΕΔΑ͏ ͳϝιου • ྫ: σʔλετΞ͔ΒඞཁͳσʔλΛ͔͖͋ͭ ΊɺՃ޻͠ɺS3ʹஔ͘...ͱ͔ʁ

Slide 9

Slide 9 text

ͨͱ͑͹͜Μͳίʔυ namespace :hoge do desc 'Hogeに関するデータを送る' task send: :environment do |task| Tasks::Hoge::Sender.execute end end lib/tasks/hoge_send.rake module Tasks module Hoge class Sender def self.execute # まずはデータを集めてくる # そのあとにいい感じの加工をする # S3に置きにいく end end end end lib/tasks/hoge/sender.rb

Slide 10

Slide 10 text

͍͍ͩͨ ͜͏͍͏ίʔυ͸
 ॻ͍ͯΔ͏ͪʹ
 privateϝιου͕
 ૿͖͑ͯͯ... module Tasks module Hoge class Sender def self.execute data = aggretage_data processed_data = process_data(data) send_s3(processed_data) end private def aggregate_data # データを集めてくる処理 end def process_data(data) # データを加工する処理 end def send_s3(data) # s3に置く処理 end end end end lib/tasks/hoge/sender.rb

Slide 11

Slide 11 text

classʹ੾Γग़͢͜ͱ΋
 ΋ͪΖΜ͋ΔͷͰ͕͢... lib/tasks/hoge/sender.rb module Tasks module Hoge class Sender def self.execute data = Hoge::DataAggregator.aggregate processed_data = Hoge::DataProcessor.new(data).process Hoge::S3Sender.send(processed_data) end end end end

Slide 12

Slide 12 text

ҙ֎ͱେͨ͠ॲཧͰ΋ͳ͍ͷͰ ಉ͡classͷํ͕ݟ௨͕͠ྑ͘ࢥ͑Δ͜ͱ΋͋Δ lib/tasks/hoge/sender.rb module Tasks module Hoge class Sender def self.execute data = Hoge::DataAggregator.aggregate # データ加工といってもこの程度ならclass切り出さなくてもいいのでは? processed_data = data .group_by(&:first)
 .sort .map { |key, values| [values[0], values[1]] } Hoge::S3Sender.send(processed_data) end end end end lib/tasks/hoge/sender.rb

Slide 13

Slide 13 text

lib/tasks/hoge/sender.rb Ͱ΋Rubocopʹ͸ౖΒΕΔ(MethodLength΍AbcSize)ͷͰ
 ΍͸Γprivateϝιουʹ module Tasks module Hoge class Sender def self.execute data = Hoge::DataAggregator.aggregate processed_data = process_data(data) Hoge::S3Sender.send(processed_data) end private def process_data(data) data .group_by(&:first)
 .sort .map { |key, values| [values[0], values[1]] } end end end end lib/tasks/hoge/sender.rb

Slide 14

Slide 14 text

spec/tasks/hoge/sender_spec.rb ݁ՌprivateϝιουΛ
 ςετ͓͖͍ͯͨ͠ؾ࣋ͪʹͳΔ... require 'rails_helper' describe Tasks::Hoge::Sender do describe '#execute' do subject { described_class.execute } it '加工されたデータがS3に置かれること' do is_expected.to (期待する結果) end end describe '#process_data' do subject { described_class.send(:process_data, data) } let(:data) { (ダミーデータ) } it 'データが正しく加工されること' do is_expected.to (期待する結果) end end end

Slide 15

Slide 15 text

• (ίʔυαϯϓϧ༻ҙ͢ΔͬͯΊͪΌͪ͘Ό೉͍͠Ͱ͢Ͷ...ɻͦ ΋ͦ΋લఏ͕͓͔͔ͬͨ͠Γͨ͠Β͢Έ·ͤΜ) • ͦΕͧΕͷprivateϝιουͰ৚݅෼ذ͢Δͱɺͳ͓ͷ͜ͱ publicϝιου͚ͩͰςετ͢Δͱɺcontext͕૿͑Δ͔Βେ มͳΜͩΑͳ͍ͬͯ͏ͷ΋ࠓߋࢥ͍ग़͠·ͨ͠ɻ • ͜͏͍͏ؾ࣋ͪͱͲ͏΍ͬͯ޲͖߹͑͹͍͍͔...privateϝιο υʹςετॻ͍ͯ΋͍͍Μ͡Όͳ͍ʁͱ͔ɺ͜͏΍ͬͯϦϑΝ Ϋλ͢Δͳɺͱ͔ฉ͍ͯΈ͍ͨͰ͢ɻ • ͦͷଞ͜ΕҎ֎ͷέʔεͳΒɺprivateϝιουʹ΍Ήͳ͘ςε τॻ͍ͯ͠·͏ͱ͖΋͋Δͱࢥ͏Έ͍ͨͳ࿩΋ฉ͖͍ͨͰ͢ʂ

Slide 16

Slide 16 text

• ౰ॳupͯͨ͠εϥΠυ(2019/3/3)ͷίʔυʹ͸ओ ࢫͱؔ܎ͳ͍μϝͳͱ͕͋ͬͨ͜ͷͰमਖ਼ͯ͠࠶ up͍ͯ͠·͢(2019/3/4) • ৄ͘͠͸ http://highwide.hatenablog.com/entry/ 2019/03/03/220653 ʹॻ͖·ͨ͠