📌

[corp-engr]プログラミングをしない技術

に公開

はじめに

もちろんプログラミングができる人にとっては、その人のメインソリューションはプログラミングということになる。プログラミングは万能だが、すべてのものに特徴がある以上、長所も短所も存在する。
例えばツールの開発依頼を受けた場合、以下のように対応することが多い。

  1. その業務自体に省略可能性があれば省略する
  2. spreadsheetで代替できるならspreadsheetの数式を使用する
  3. プログラミングを行う

1. その業務自体に省略可能性があれば省略する

「定期的にSalesforceからレポートを作成して報告する」という業務があったとする、しかし、そもそもSalesforceの分析画面で事足りることもある。
そういった場合、レポート作成を効率化しても無駄が増えるだけであり、その業務自体をなくすために業務をデータ視点から追っていったほうがいい。
ただし、業務自体を消せない場合にそういった提案してもコミュニケーションロスを生むので、ヒアリング中は素知らぬ顔で聞いていることが多い。

2. spreadsheetで代替できるならspreadsheetの数式を使用する

ここから先はツールを作成するフェーズになるが、すべてをプログラミングで解決するわけでもない。極力spreadsheetの数式で代用できるなら以下理由から代用するべきだ。

  • 学習コストが低い
    • そのため、壊れたときの修正工数も少ない
  • 表の変化(列の追加など)に対応できることが多い

フロー

  1. 月の部分をコピーして、空行にペーストする。月部分には「上のセルの1ヶ月後の日付」を示す数式が入っているために、上のセルの翌月が入る。
  2. 表のセルは「A列に情報があれば、結果を出す」というセルになっている。そのセルに示されている情報どおりに作業を行う。



このようなarrayformula数式は、他のシートでも使用できるため、

  1. シートAにSaaS_AからダウンロードしたCSVをインポートしてもらう
  2. シートBに数式でうまく設定した情報が出力される
  3. シートBをSaaS_Bでインポートしてもらう

と運用することも多い。

一部GASも入るが、カスタム関数を使うこともある。
https://developers.google.com/apps-script/guides/sheets/functions?hl=ja

例えばarrayformulaで一括変換を行おうとしていた数式で、arrayformulaと併用できない数式を使う場合など。
以下例のように、リストを引数で渡して処理する。

function EMPLOYED_LIST(list, ignoreList){
  return list.filter(row => !ignoreList.some(ignoreRow => ignoreRow[SHEET.ignoreCrew.column.empCode - 1] === row[SHEET.crew.column.empCode - 1])
    && row[SHEET.crew.column.status - 1] === CREW.status.employed
  );
}

神エクセルの弊害

spreadsheetで代用できるならそうしたほうがいいが、spreadsheetには危険な沼がある。数式の追加を繰り返すうちに、誰も触れない「神エクセル」になることだ。
そうなった場合ツールではなく、組織の技術的負債そのものになる。ちょっとの仕様変更にも関係者は疲弊するだろう。spreadsheetはなるべく単一責務まで絞るほうが望ましい。

3. プログラミングを行う

業務は絶対に消せず(変更できず)、Spreadsheetの手には負えない。そんなときはプログラミングの出番になる。

  • 数式では解決できない(例:slackへメッセージを送信する)
  • シート負荷を軽減する(大負荷の数式を大量につかう場合はプログラミングをすることがある。例えば1セルごとにimportxmlがあるような数式など)
  • 外部とAPI接続する
  • 複雑な業務ロジックや状態管理が必要である

終わりに

プログラミングは目的ではなく、手段の一つであり、私達はそれが最も得意なだけである。スポーツカーで田畑は耕せないように、適切(かつ安価)なツールを選ぶことがとても大事であり、心に留めておく必要がある。

Discussion