rubyを道具として使う
何か仕事を自動化したいときに、最近Rubyを多用するようになってきた。これは、今のプロジェクトでRuby on Railsを使っていることにも起因している。もちろんWindowsのバッチやLinuxのシェルスクリプトでもいいんだけど、あえてRubyを使うことにメリットがあって、
- クロスプラットフォームにスクリプトを書ける。
そんなわけで最近はもっぱらRubyなわけだ。
Thor
gemのThorを使い始めた。使い方や入門編は以下の記事が詳しい。
qiita.com
ThorはCUIアプリケーションのフレームワークだ。
毎回Rubyスクリプトを書くたびに、引数の処理を各々のスクリプトで個別に書いていたんだけど、これが以外と厄介だったのだ。Thorを使うと引数のパースをある程度やってくれるし、使い方のDescriptionを書くように設計されているので、簡易なドキュメンテーションもこれで十分だ。たとえ公開するつもりがなくても、何かメモしておかないと、自分ですら使い方を忘れてしまう)
ミニマムなサンプルは以下のとおりだ。
require 'thor' class Command < Thor desc 'hello NAME', 'say hello to a given name' def hello (name) puts "hello, #{name}" end end Command.start
gemにする
これを以下の記事のとおりにgemにまとめ、社内のgitサーバに公開し、配布することもある。
qiita.com
こうすることで、ソースコード管理と配布を一元化できるし、バージョン管理も楽々になる。
gitサーバからgemインストールするには、bundlerを使うのがお手軽だ。一方でgem installのようにやりたければ、specific_install というgemでデフォルトのgemレポジトリ以外からインストールできる。一度導入すれば、bundlerを使うよりもお手軽だ。
github.com
とはいえ、ある程度のITリテラシが求められるよね、これじゃ.. そんなわけで、僕もまだ社内で啓蒙中だ。
gnuplot
こっちは割りと細かい話。
業務上よくあるのが、エクセルとの連携だ.. かならずどこかでエクセルによる作業がどうしても発生してしまう。確かにエクセルは便利なんだけど、大量にレコードがある場合、すぐにハングしてしまう(感覚的にいえば、1000行を超えるともう危ない。GUIが止まっているだけでしばらくするともとにもどることもあるが..)。また、ハングしなくとも、大量のシートやグラフを相手するときに、コピペ作業や、右クリックしてなんちゃらみたいな反復作業が非常に多く発生してしまう。プログラマにとってはいつまでたっても関わりたくない相手だと思う。
というわけで、なるべく作業フローからエクセルは排除したい。今まで表計算部分はcsvでなんとかすることができる。厄介なのはグラフ化だ。そんなときに便利だったのが、gnuplotのgemだった。
github.com
gnuplotは、ほとんど使ったことがない.. 大学でも、何やら複雑な関数のグラフ化はしたものの、実用上はあまりそういった使い方はせず、むしろcsvのプロットに使うわけで。Googleを検索しつつ、ぽちぽちとスクリプトを組んだ。
やってみると、タイムスタンプの処理なんかは割りと優秀で、案外使い勝手が良い。ただ、あまり色数が使えないのが玉にキズ。最近のエクセルのカラーパレットは小洒落ているからねえ。