日々常々

ふつうのプログラマがあたりまえにしたいこと。

仕事を早く終える小手先芸

元々Qiitaに投稿していたものです。 関連書籍としてプロダクティブ・プログラマ

このブログに最近書いたのだと 量に量で対抗しない方法を身につける がちょっと絡む感じ。

以下は 2016-12-12 に書いたのそのままです。


システムエンジニア Advent Calendar 2016の12日目です。ふつうのプログラマとして書かせていただきます。

当初はSIな現場のドロドロした何かしらを書こうと思っていたのですが、 ネタが被ったので 現場で使える小手先芸のお話をしようと思います。単純作業に対する個人技の話です。

なぜ小手先芸なのか

SIの現場では膨大な単純作業が待ち構えていることも少なくありません。 それらは手作業で心を込めて行うこともできます。 ですが、手作業にはミスもありますし、単純作業に時間を割いていると、あっという間に納期は来てしまいます。単純作業は効率良く済ませて、早く帰るようにしましょう。

さて、なぜ小手先芸なのかですが、技術を身につけるには時間と覚悟が必要です。覚悟はともかく時間は誰も与えちゃくれません。時間を作るためにも、軽く始められる小手先芸が便利なのです。 時間の余裕ができると、次の仕込みができます。次の仕込みができると、より余裕を作れるようになります。この好循環の第一歩として、単純作業を効率化するのに意識を向けるのも良いんじゃ無いかなと。

小道具の紹介

Excel

何かとネタにされたり、悪いイメージと共に語られたりするExcelの登場です。ここではExcel方眼紙などの話はしません。

Excelを多少使えると格段に仕事は非常に早くなります。と言っても、高度で複雑なExcel関数やVBAマクロを活用すると言った話ではありません。あくまで使える多少レベル使えれば十分です。

例えばオートフィル。SIerの現場で稀によく見る連番付き名称ですが、名前の元ネタを作るのにはもってこいです。単純な連番だけでなく、繰り返しの数列(1,2,3,1,2,3...)を作るのにも便利です。 同じ文字列で埋めるには範囲選択してから1つのセルで文字を入力し、Ctrl+Enterで一発です。入力後なら普通にコピペでも構いません。 セル同士を文字列結合して、1つの文字列を作れるようになれば、例えば「コピペしてからルールに従って書き換える」と言った作業は逆転します。つまり「ルールに従ったデータから文字列を生成する」となります。

Excelは関数を一つ知れば一つできることが増えます。 「知っておくべきn個の関数」などを見るのも良いかも知れませんが、何か機会があるたびに一つずつ道具箱に追加する道もあります。 今日やった単純な繰り返し作業は、もしかしたらExcelの出番だったかもしれません。

テキストエディタ

正規表現

正規表現が使えるテキストエディタはそう珍しいものではありませんが、エディタによって多少使い勝手は違います。ここでエディタの宗教戦争をする気はありませんが、ご自身の使用しているエディタの正規表現の使い勝手は確認しておくと良いでしょう。 私は普段のエディタはvimですが、正規表現を使う時は別のエディタを使用することもあります。単にvim力が低いと言われればそれまでなのですが、小手先芸なので良いのです。

正規表現も多少使えれば十分です。膨大なテキストから文字列を抜粋、加工するのが目的です。 例えば「郵便番号にマッチする正規表現を書いてください」に対して、¥d¥d¥d-¥d¥d¥d¥dが思い浮かび、ハイフンの前後を入れ替えられるならば何とかなると思います。量指定子は+*が使えればまずは大丈夫。 この程度を調べながらでしか書けないのだと厳しいですが、それ以上は調べながら書ければ良いです。使ってるうちに調べずに書けるようになるので、まずは簡単なものを書けるようにして場数を踏みましょう。

正規表現の活用例はいくらでもあります。テキストなら何でも対象になります。微妙な例を挙げるならば、「コーディング規約通りのコメントが記述されているか」などをチェックし、場合によっては一律対応する……と言った作業が、一括置換で済むようになります。 「そんなこと手作業でやるわけないじゃん」と思うかもしれませんが、もしかしたら同じようなことを力技でやっているかもしれません。私はたまにあります。気づいた時の悔しさと言ったら、無い。

矩形選択

案外使ってる人が少ないのだけれど、多分想像以上に便利だから使えるようになっておきましょう。

コマンドプロンプト

私の経験では、Windowsを使用する現場が非常に多いです。 近年のWindowsにはPowerShellだったり、最近ではBashがどうこうって話も聞きはしますが、古来からずっと使えるのはコマンドプロンプトです。

コマンドプロンプトおよびバッチスクリプトは、お世辞にも使いやすいとは言えません。 しかしながら、ファイルの作成や移動、簡単な書き出しと言ったシンプルな作業をするには十分です。 ちょっとしたスクリプトが書けるようになっていると、格段に幅は広がります。

組み合わせ

Excelコマンドプロンプト

複数のファイルの名前を変更する必要がある場合。 変更前後をExcelのセルA1とB1に記述し、C1に="move "&A1&" "&B1と書きます。これを必要なだけ(数百から数千のようなこともある)オートフィルで並べて、あとはC列をコマンドプロンプトにコピペすれば完了です。

同じような感じで、マルチモジュールプロジェクトに仕損なったMavenプロジェクトのビルドコマンドを作成した記憶もあります。プロジェクト構成を直すべきだったとも思いますが、諸々の事情でできなかったので、小手先で切り抜けることにしました。

正規表現Excel

アプリケーションのログを適当に解析してExcelに貼り付けることも多いです。 あとは適当な設定ファイルの一覧化とか。XMLを表形式にするのに、面倒な時はタグ名と値をタブ区切りにして、そのままExcelにコピペするようなこともあります。何かしら適切なツールもあるでしょうが、この手の調査をする時は自分の端末じゃ無い時も多いので。そういう時でもすぐ使えるのは便利です。

とりあえずExcel

Excelは何かと組み合わせると大化けします。単純作業系では本当に強い。

まとめ

暗黙知的なのを形式にしようと試みてみました。 例はまだまだ挙げられるのですが、無限の組み合わせを書いてもキリはありません。また、私自身毎回違う方法でやっていて、鉄板的なものは無いと気づきました。我ながらどうよと思いました。 ここで挙げた道具はどれも磨けば一級の道具としても通じるものです。一方で、多くの場所で手軽に使えるものですし、特にイニシャルコストの低いものたちです。

小手先芸に「完璧な成果」を求めてはいけません。完璧を求め始めるとと、賄えない範囲が気になり、分析麻痺に陥ります。考えなしに体当たりするのもどうかと思いますが、8割くらいいけると思ったらやってしまって、残りの2割は他の道具や手作業で何とかするくらいの気持ちでやるのが良いと思うのです。

蛇足

これと似たようなことを書いた本もあります。もう少し抽象的でエモい感じかな。興味があればどうぞ。 開発現場に伝えたい10のこと