Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 Productive Programmer | 仕事にあわせてツールを選択する

パンくず

書籍 Productive Programmer
仕事にあわせてツールを選択する

概要

ツール選択の重要性について

自動化とツール

プロジェクトにて自動化の需要が出た際、はじめは一度限りの利用や長期の利用想定がない場合でも
気づけばシステムの中核となる場合があります。

その場合、本格的なスクリプト言語を選ぶことで言語自体の生産性によって保守が容易になり
ユニットテストなどにより高い品質を保つことができます。

日本のSIerアンチパターン

・自動生成はなんでもExcel+VBA
Excel VBAの保守性が低いため、長年の運用に耐えない。
拡張性も低いため、楽をするための自動化であったはずが
自動化の仕組みを守るために妥協をする、というような状況に陥りがち。
コード管理も不便。
唯一のメリットはExcelとの連携。
まぁ、「Excel VBA」なので当然のメリットですが。

あぁ、仕事でYAMLやeRubyとRubyの自動化処理とか作りたい・・・

・シェル、Perlスクリプト
テスト、保守を顧みないコピペコード。
バージョン管理すらされていないことも。
Perl自体の言語が悪いというわけではなくたまたま自分が見た現場では
ひどい運用をされていただけなのでPerlをディスってるわけではありません。

個人的な答え

スクリプト言語を必要とするような要件が出た場合、
やはりRubyかなと。
しかし、ここで難題。一般的な日本のSIerで自動化スクリプト
保守まで考えた場合Rubyを選択させてくれるケースはレアケースだと思います。
自分だけが保守できればいいわけではないですからね・・・。

この辺は地味に「Ruby製のマイツール」を増やしてアピールしたり、
といった草の根運動が必要かな・・・。

まずは自分自身がRubyを使いこなすレベルまで達していないのでまずはそこから。

書籍 Ruby Cookbook | 配列のソート

パンくず

Ruby Cookbook
配列のソート

概要

配列のソート

サンプル

require "pp"

class Person
  attr_accessor:name,:age
  def initialize(name,age)
    @name,@age=name,age
  end
end

person_list = [Person.new("tanaka",23),Person.new("suzuki",30),Person.new("sato",6)]
pp person_list # => arrayに追加した順番のまま
puts "--------------------------------------------"
pp person_list.sort_by {|person|person.name} # => Personのname順
puts "--------------------------------------------"
pp person_list.sort_by {|person|person.age} # => Personのage順
puts "--------------------------------------------"
pp person_list.sort_by {|person|person.age.to_s.reverse.slice!(0,1)} # => Personのage下一桁でソート

出力

[#<Person:0x26b3740 @age=23, @name="tanaka">,
 #<Person:0x26b3668 @age=30, @name="suzuki">,
 #<Person:0x26b3500 @age=6, @name="sato">]
--------------------------------------------
[#<Person:0x26b3500 @age=6, @name="sato">,
 #<Person:0x26b3668 @age=30, @name="suzuki">,
 #<Person:0x26b3740 @age=23, @name="tanaka">]
--------------------------------------------
[#<Person:0x26b3500 @age=6, @name="sato">,
 #<Person:0x26b3740 @age=23, @name="tanaka">,
 #<Person:0x26b3668 @age=30, @name="suzuki">]
--------------------------------------------
[#<Person:0x26b3668 @age=30, @name="suzuki">,
 #<Person:0x26b3740 @age=23, @name="tanaka">,
 #<Person:0x26b3500 @age=6, @name="sato">]

書籍 Ruby Cookbook | 配列の最大値・最小値

パンくず

Ruby Cookbook
配列の最大値・最小値

概要

配列の最大値・最小値

サンプル

require "pp"

class Person
  attr_accessor:name,:age
  def initialize(name,age)
    @name,@age=name,age
  end
end

puts [12,11,13].min
puts [12,11,13].max
puts ["hage","hoge","hige"].min
puts ["hage","hoge","hige"].max
person_list = [Person.new("tanaka",23),Person.new("suzuki",30),Person.new("sato",6)]
pp person_list.min_by {|person|person.age} # => 最小の年齢
pp person_list.max_by {|person|person.age} # => 最大の年齢

出力

11
13
hage
hoge
#<Person:0x25d2bc0 @age=6, @name="sato">
#<Person:0x25d2c68 @age=30, @name="suzuki">