8
8

More than 5 years have passed since last update.

Ruby の Observable module で、今流行の Microservices ではなく Micromanager を表現してみる #ruby

Posted at

概要

Ruby の Observable module で、マイクロマネジメントをするマネージャーを表現してみます

仕様

  • Newcomer クラスが新人
  • Micromanager クラスがマイクロマネジメントをするマネージャー
  • 初期化時にマネージャーが監視をはじめる
  • Newcomer#action で行動
  • Newcomer#action をすると、マネージャーがしゃしゃりでて一言もの申す
  • 監視されるとモチベが下がる
  • 限界が来ると辞める

プログラム

require 'observer'

class Newcomer
  include Observable
  attr_reader :name, :motivation

  def initialize(name, manager)
    @name = name
    @motivation = 100
    add_observer(manager)
  end

  def action(description)
    before = "(´・ω・) #{@name}"
    puts "#{before}: #{description} しているよ"
    changed
    notify_observers(name, description)
    @motivation -= 10
    puts "(♯・ω・) #{@name}: ピキピキ"
    puts "辞めます" if (@motivation < 1)
  end
end

class Micromanager
  attr_reader :name
  RAMDOM_MESSAGES = %w(それは間違っている! 本当にできるのか? 勝手なことをするな! どうせ君は間違っているだろう 俺様が教えてしんぜよう)

  def initialize(name)
    @name = name
  end

  def update(subordinate, description)
    by = "(`・ω・) #{@name}"
    puts "#{by}: '#{description}' している?"
    puts "#{by}: #{subordinate} くん、 #{RAMDOM_MESSAGES.sample}"
  end
end

newcomer = Newcomer.new('優秀新人', Micromanager.new('マイクロ先輩'))
actions = %w(
  プログラムを実装
  業務を改善
  共通処理を作成
  自動化
  スニペットを作成
  Gitを導入
  ペアプロ
  便利ツールを作成
  ナレッジを共有
  社内政治を排除
)

actions.each do |action|
  newcomer.action(action)
  puts "#{newcomer.name} くんのモチべ: #{newcomer.motivation}"
end

実行

% ruby observable.rb
(´・ω・) 優秀新人: プログラムを実装 しているよ
(`・ω・) マイクロ先輩: 'プログラムを実装' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 どうせ君は間違っているだろう
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 90
(´・ω・) 優秀新人: 業務を改善 しているよ
(`・ω・) マイクロ先輩: '業務を改善' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 それは間違っている!
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 80
(´・ω・) 優秀新人: 共通処理を作成 しているよ
(`・ω・) マイクロ先輩: '共通処理を作成' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 本当にできるのか?
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 70
(´・ω・) 優秀新人: 自動化 しているよ
(`・ω・) マイクロ先輩: '自動化' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 勝手なことをするな!
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 60
(´・ω・) 優秀新人: スニペットを作成 しているよ
(`・ω・) マイクロ先輩: 'スニペットを作成' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 本当にできるのか?
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 50
(´・ω・) 優秀新人: Gitを導入 しているよ
(`・ω・) マイクロ先輩: 'Gitを導入' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 本当にできるのか?
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 40
(´・ω・) 優秀新人: ペアプロ しているよ
(`・ω・) マイクロ先輩: 'ペアプロ' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 勝手なことをするな!
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 30
(´・ω・) 優秀新人: 便利ツールを作成 しているよ
(`・ω・) マイクロ先輩: '便利ツールを作成' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 勝手なことをするな!
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 20
(´・ω・) 優秀新人: ナレッジを共有 しているよ
(`・ω・) マイクロ先輩: 'ナレッジを共有' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 俺様が教えてしんぜよう
(♯・ω・) 優秀新人: ピキピキ
優秀新人 くんのモチべ: 10
(´・ω・) 優秀新人: 社内政治を排除 しているよ
(`・ω・) マイクロ先輩: '社内政治を排除' している?
(`・ω・) マイクロ先輩: 優秀新人 くん、 どうせ君は間違っているだろう
(♯・ω・) 優秀新人: ピキピキ
辞めます
優秀新人 くんのモチべ: 0

外部資料

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8