今朝同僚に話したら意外とみんな知らなかったので。

 

cp コマンドの -b オプションを使うと上書きするファイルがあったとき自動でバックアップを取ってくれる。

$ touch aaa
$ touch bbb
$ cp -b ./aaa ./bbb
$ ls
aaa  bbb  bbb~

そのままだとバックアップファイルは ~ がつくが、–suffix オプションで指定できる。

$ cp -b --suffix=.`date +%Y%m%d` ./aaa ./bbb
$ ls
aaa  bbb  bbb.20140325  bbb~

bashrc に alias を書いておくと便利。

alias cp='cp -ivb --suffix=.`date +%Y%m%d%H%M%S`'

おわり。

リリース手順について

大筋で同感だけども、リリースって全自動化もオール手作業もちょっと微妙なゾーンがあると思ってる。

テキストベースのリリース手順書は、

  • コピペする順番を間違える可能性がある。
  • コマンド実行後の確認を怠られるとつらい。
  • 手順書の作り手が思っている以上にリリース作業者は何も考えずに作業を行う。

と、自動化すべき理由がある一方、

  • きっちり構成管理できてないと、同じ機能のリリース作業でも毎回手順が微妙に変わったりする。
  • その割に、「特定のプロセスが動いていたら終了するまで待つ」みたいな自動化するにはプチ面倒な作業が多い。

といった、自動化を妨げる問題があったりする。。

リリース手順の半自動化

というわけで、、コピペの追放とコマンド実行後の確認の部分に主眼をおいて自動化することにした。

https://github.com/shitai246/shellutils/blob/master/bin/checkexec

  • 外部ファイルに定義した1行を1コマンドとして処理していく。
  • コマンド実行前に確認される。確認時のyesに相当するキーは毎回ランダムで変更される。
  • コマンド実行時の返り値が0じゃなかったら作業を中断する。
  • # で始まる行はコメントとして標準出力するのでコマンドの意味をリリース担当者が見ながら作業できる。

コマンド結果を利用するコマンドが実行できないとか、diff みたいなコマンドの返り値が0にならないけど異常系じゃないみたいなパターンとかがちょっとアレだけども、リリースに対するアプローチのひとつとして。

明けましておめでとうございます。

初詣のおみくじでは大吉が引け、幸先の良い年初めとなりました。今年も充実した年にすべく、去年のふりかえりと新年の抱負をまとめておきます。

2013年ふりかえり

スクラムと現場改善に取り組んだ1年だった。

2013年はスクラムの導入に費やした1年でした。2013年1月から自分の任せられている課をスクラムチームと見立て、手探りでスクラムを実践していきました。最初の半年はプラクティスに拘るあまり効率が非常に悪かったり、プロセスを再構築していく中で品質に悪影響が出て壊滅的なバグを混入させたり、あんまり思い出したくない出来事が多かったですね。。

それでも7月を過ぎたあたりから徐々にチームが上手く回り始め、部署全体にスクラムが波及するようになり、スクラムオブスクラムを導入したり、チームを課ごとではなく部門横断的に組むようにしたりと、部署全体の情報共有・協同作業という点で1年前からは想像つかないほどの改善ができました。

技術面でのインプットは少なかった。

スクラムを推進していたこともあり、2013年に読んだ本のほとんどがいわゆるアジャイルのレフトウィングにあたるものでした。2012年は Scala や TDD や CI など、技術面でいろいろやってたことを考えると2013年は全然やってなかったなー…。

勉強会の開催・参加も少なかった。

2012年はアジャイルサムライ読書会とか、Scalaの勉強会とかやってたんですけど、2013年は社内向けに色々やってました。

あとは3月に次女が生まれたこともあって、勉強会参加よりも家庭を重視していたところもあります。まぁ結局遅くまで仕事してたりはしたんですが…。

社外にまで目を向けられない人っていうのは一定数いる(各々事情があるので善し悪しとかではなく)ので、社外で得た知見を社内に還元していく仕組みをどう作っていくかが重要だと思ってます。具体的な解決案はまだないですが。。

2014年の抱負

Ruby を覚える

2014年はまず Ruby を覚えたい。個人的にはチームでコード書くなら静的型付けの方がいいと思ってるんだけど、やっぱり何かさらっと作りたいときは LL 使いたい。PHP はちょっと好きになれない。というのが1つ目の理由。

あとは Chef とか ServerSpec とか fluentd とかがことごとく Ruby なんですよね。ちょっとこれは Ruby 知っとかないとまずいよな。というのが2つ目の理由。

まぁ覚えると行っても高度に使いこなしたいわけではなくて、フルスクラッチで簡単な web サービスをさらっと作れるようになりたいレベルですね。

それとは別にプログラム言語を1つ覚える

Ruby はどちらかというと必要に駆られてやんなきゃ、というのが強いので、もう少し趣味的なところで1つ勉強しようかなと。仕事で役立てるなら Erlang かなぁ。Erlang VM で動く Elixir って名前がかっこいいよね。あとは GO とか。子供の教育のために Scratch を押さえておきたい気持ちも少しある。

DevOps 化

2013年にやりきれなかった現場改善のひとつが DevOps ですね。Dev と Ops との協調という部分では情報の可視化までしか出来ていません。理解は容易・習得は困難という意味でスクラムに通ずる部分があるような気はしてます。

というわけで

今年もよろしくお願いします。