川獺の外部記憶

なんでも残しておく闇鍋みたいな備忘録

品質向上のための手順書撲滅運動

この記事はフィクションです。実在の人物や団体などとは関係ありません。

手順書撲滅運動

世の中には「XXXX手順書」というものが存在する。

2回以上繰り返される作業の知識体系を財産化し、非属人化することによって組織として安定した品質を供給することを目的とするアレのことである。

余談だが、ググってみるとサーバ構築の手順書がxlsxで書かれているとかの凄惨な現場が多いらしく、少し元気づけられたりする。

この品質向上のためのアレであるが、私のようなせっかちで鳥頭で、コーディングしかできることのない人間からしたら天敵である。

これは私だけではなく、世の中のITエンジニアの多くがそうであると信じているが、IaCの思想が持て囃され、数多の構成管理技術や仮想化技術が構築の自動化を謳っているあたり、あながち間違っていないと思っている。

とはいえ、世の中の現場すべてが最新の思想をそのまま享受できるわけではない。 *1

では、諦めて人間様が機械の前で紙の手順書をペラペラしながら、目を傷めて、ミスの危険を常に抱えながら作業をしなければいけないのだろうか。そんなことはないと断言する。

理想的な構成管理の世界からの隔絶

構成管理ツールは世の中には色々ある。有名所ではChefやAnsible等、喉から手が出るほど飛び込みたい綺麗な世界である。

一方、前述のように現実の世界ではこれらのツールはそのまま導入できない場合が多い。

では諦めるのか。

無いなら作ってしまえ

ハードウェアの場合だと、手順自動化にはコストがかかる場合が多い。一方、ソフトウェアやデジタルシステムの場合、微小なコストと技術者の腕で自動化が可能な場合が多い。

無いなら作ってしまえばいい。その技術は多くの技術者は持っているはず。

RPAでの実現を阻む壁

世の中には「RPA *2」という言葉がある。 構成管理を使えない世界であっても、小規模なRPA程度であれば動かせる場合があるそうだ。

ただし、RPAの思想はそのままでは構成管理には足りない。

構成管理の世界では担保されている冪等性やセルフチェックなどが単体だと保証できないのがその理由とされる。

また、構成管理のきれいな世界では「管理のためのファイル」単体で手順書の代わりになるほど可読性が高い場合が多い。Ansible Playbookやdocker-compose、Dockerfileなどを見ても明らかである。

中途半端な可読性のRPAシステムを作ると、そのRPAシステムを作ったものにしかメンテナンスができない代物が出来上がってしまう。

RPAの思想に構成管理に必要な思想を付け加え、更にそれ単体で手順書としても読める(もしくは手順書を自動で排出する)、自製システムを作り上げる必要がある。

「無いなら作ってしまえ」を実現するために

下記はWindowsを対象。XP程度ならなんとかなるはず。

実装レベルの技術

これらはOSSだが、GPLv3+ライセンスが混入している。成果物を配布する際には、配布先に対して必ずソースコードを同時に配布すること。*3

思想レベルの技術

  • システムの状態を変数とし、操作を関数とし、システム全体の時間遷移を数理的に捉える。常に状態を可観測とし、できるだけ可制御な領域に落とし込もうとする。定量的に観測できないものを制御しようとするのは愚の骨頂。
  • 「手順書」に相当する部分は可読性、抽象度ともに高く記述する。「コード自体がドキュメントである」必要がある部分がここ。
  • 上記部分とは別に、ライブラリラッパーを作り、複雑性の除去を担当させる。
    共有モジュールとしてこの部分を堅牢に設計する。
  • 手順 + テスト(+手順の逆操作)の組み合わせを意識し、サポートする。
  • テスト結果は絶対にどこかに残し、RPAシステムのバージョンと合わせて版管理する。
  • 作ったシステムは関係者の目に触れるところに置き、コードの腐敗が起きにくいようにする*4

「無いなら作ってしまえ」を実現する前に心が折れないために

どうしたらいいんでしょうね。

つづくのか

この技術に将来性がありそうならきっとつづきます。

以上


追記

全く同じ思想で全く同じことを志している人がいて勇気づけられる。きっと間違ってはいない。

https://qiita.com/aimof/items/e25caece5cf8378045a8

*1:噂ではなんとかというOSのXPを未だにサポートしないといけない環境や、インターネットに接続することすら許されない環境、なぜかGUIでヒトが応答しないとインストールしてくれないインストーラや、DVDメディア以外のメディアを環境に投入することができない環境などがあるそうだ。この世のものとは信じたくないが、きっと何かの思想があってそういう状態になっているのだろう。

*2:私はRPAが好きではない。本来はRPAしないといけないシステムの設計自体がアレである。まあ自分がシステムを作る側に回ったときに返ってくるブーメランでもある。

*3:この配布は静的リンク、動的リンクにより結合しているところまでが範囲となる。基本的にRPAでは外部リソースとはプロセスコールのような形で結合するため、「手順書」以上の情報を配布することにはならない。問題となることは少ないだろう。

*4:コードに触れるために3クリック以上かかったり、物理的な移動が必要だと腐敗が起きやすくなる気がする。