SI におけるパラメータシートとは何か

パラメータシートという言葉をよく聞くが、いまいち理解してなかった。また自動化や IaC が当たり前な昨今でも「パラメータシートは撲滅できない(すべきではない)」とする意見が多く、なぜなのかがわからなかった。

このあたりの疑問を解消するべく、会社で尋ねたり資料漁ったりググったりしたので、まとめる。

パラメータシートとは

パラメータシートとは SI(の環境構築)における「この機器の、ここの値は、これこれの理由でこれにする」を集めたシートのこと。

大まかなフロー

  • 設計
    • パラメータシートをつくる
    • 1: 必要な設定を洗い出す
    • 2: 洗い出した設定の設定値を確定する
    • 3: パラメータシートに記入する
  • 手順書作成
    • 構築手順やテスト手順をつくる
  • 環境構築
    • パラメータシート(と手順)を見ながら手作業で設定を変えていく
    • 環境は本番かつ高セキュリティで触れるチャンスは少ない傾向
  • テスト
    • ちゃんと設定できてるか設定値を見たり軽く動かしたりする
    • 大体テスト仕様書に従ってやる

運用の現実

パラメータシートの書き方

  • Excel で列挙ゲー
  • フォーマットは各社各チームガラパゴス
  • 各社各チームの既存フォーマットを使い回す

手順書の作り方

  • つくらない派
    • 「パラメータシート見たらわかるやろ」
    • 構築時の主観が強くなるため、あまりない(と思う)
  • パラメータシートとは別につくる派
  • パラメータシート中に手順も書く派

環境構築時の制約

  • お客さん環境なので気軽に触れない
  • お客さん環境なので気軽に改善を試せない
  • 自席未満の劣悪な環境 + 制限時間や立ち会い付のプレッシャー

作業者のリテラシー

  • 可読性や保守性といった概念を知らない
  • バージョン管理を知らない
  • 自動化を知らない

近年の自動化や IaC ブームに対して、SIer は?

  • パラメータシートは撲滅できないという認識
    • 手順書作成と環境構築 → IaC できる
    • テスト → 自動テストできる
    • パラメータシート → 無理くね?

なぜパラメータシートを撲滅できないのか?

Ans: そもそも自動化や IaC のスキル・やる気・機会が無い から。

ただし真面目に検討している事例として NTT データの SlideShare があった。これによると、パラメータシート(的な設定マスタ)の撲滅は難しい との結論。

  • そもそも本番環境には気軽にアクセスできないので「本番環境の設定がどうなってるか」は別途手元で持っておくしかない
    • この時点で二重管理確定
  • 「Excel パラメータシート見て手作業で頑張れ」は撲滅できうる
    • IaC と自動化で構築とテストは自動化できる
    • 設定マスタはコード
    • コードだと読みづらいので、コードから「見やすいビュー」を生成して、普段はこのビューを見る

もっと撲滅するために

では上記の NTT データの例以上に撲滅をすすめることはできるだろうか。机上だがアイデアを。

環境情報取得ツールで二重管理を廃止する

仮に本番環境から設定情報すべてを吸い出すツールがあるなら、(吸い出したデータをこちら側で持っておくことは必要だが)二重管理は廃止できる。なぜなら、本番環境から吸い出せば常に寸分たがわぬ最新データが手に入るから。

もっとも実現は簡単ではない。以下が必要となる。

  • 本番環境(に存在する設定対象)すべてから設定情報をプログラマブルに吸い出せること
    • 機器・ネットワーク・ルール次第では仕様的に無理なことも……
  • 吸い出しは定期的に行い、吸い出したデータはバージョン管理すること
  • 設定の根拠や背景を記したドキュメントを整備し、漏れなくメンテすること
    • さすがに本番環境に埋め込むのは無理だろう
    • そもそもプログラミングでも内部的な話はコメントではなく外(別ドキュメント)に出す

……無理そう。

パラメータシート改めパラメータコードを導入する

SIer には以下が当てはまると思ってる。

  • 「コードは読みにくい」という思い込みを持っている
  • リーダブルなコードを書くという心がけがない(or リーダブルという概念を知らない)
  • スラスラ読めるレベルにまで(コードを記述した)言語に習熟していない or 機会がない or やる気がない

これらすべてを解消すれば、シート(リテラシーが無くても読めるけど連携とメンテがクソな表文書)を使わずともコードだけでパラメータを記述できるはず。今は YAML のようなリーダブルな記法もあるし。

参考