Meblog

このブログ記事は個人の見解であり、所属する組織の公式見解ではありません

rubyを道具として使う

f:id:gntm_mdk:20170809205057j:plain

何か仕事を自動化したいときに、最近Rubyを多用するようになってきた。これは、今のプロジェクトでRuby on Railsを使っていることにも起因している。もちろんWindowsのバッチやLinuxシェルスクリプトでもいいんだけど、あえてRubyを使うことにメリットがあって、

  • 文法が明快。Windowsのバッチで複雑なことをさせるのは無理がある。。
  • 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を検索しつつ、ぽちぽちとスクリプトを組んだ。

やってみると、タイムスタンプの処理なんかは割りと優秀で、案外使い勝手が良い。ただ、あまり色数が使えないのが玉にキズ。最近のエクセルのカラーパレットは小洒落ているからねえ。

ほかにもいろいろ

基本的に書捨てのアプリでもThorを使って書くようになった。社内Git(というより部内Gitサーバ)とはいえ、ちょっと全てを上げるのは気が引けるものばかりだ.. まあ、プライベートリポジトリにして他人からは見えなくするのアリだけどね(そもそもITリテラシが低くてGitがマトモに使うのは僕だけというのは内緒だ)。