共通化言うなキャンペーン
『怪奇ゾーン グラビティフォールズ』の完結編にいたく心揺さぶられた kagata です。13歳の誕生日をぶじ迎えたディッパーとメイベル、和解したふたりの大おじさんを見ていると、わたしも早く大人にならないといけないんだな、と感じます。もう大人なんですけど。
さて、今回は弊社内のごく一部でバズったキーワード「共通化言うなキャンペーン」について簡単にご紹介します。
きっかけ
きっかけは社内の技術ネタ蓄積に使っている GitLab Issues で tanaka が紹介したある記事でした。
tanaka いわく
この記事を引き合いに出して tanaka は言いました。
共通化には2種類ある、よい共通化、悪い共通化だ…
kagata 答えていわく
それを見てわたしはこうコメントしました。
7種類ありまぁす
続けて、こうもコメントしました。
「共通化」というわかりやすいけれど意味の広すぎることばで語られてしまうのが誤解の元なのかな…(中略)「サニタイズ言うなキャンペーン」に似ているかもしれません。
したところ、tanaka に
「共通化言うなキャンペーン」でブログ書いたらバズりそう。
よろしくお願いします。
なんていわれてしまったので、こうして書いているしだいです。
バズるかどうかは怪しいところですが、がんばります。
「サニタイズ言うなキャンペーン」
「サニタイズ言うなキャンペーン」は、2005年ごろに高木浩光氏が使い始めたキーワードです。ざっと探して見つけられたいちばん古い記事がこちらでした。
セキュアなWebアプリ実現のために本来やるべきことは? - 高木浩光氏 | マイナビニュース
「『サニタイズ』はろくな対策をしていないことを一言で表現できる便利な言葉であり、現在『サニタイズって言うな』キャンペーンを行っているところ」
こちらの記事ではもっと詳細に解説されています。
高木浩光@自宅の日記 - 続・「サニタイズ言うなキャンペーン」とは
厳密な話はいろいろあるようですが、セキュリティ施策の用語として使われていた「サニタイズ」ということばはその意味するところが広がりすぎて問題を抱えるようになった、というのが今回大事なところです。
そういえば、「サニタイズ」ってあまり言わなく/聞かなくなったような気がします。キャンペーンの効果があったということなんでしょうか。最近の若い人[誰?]は「サニタイズ言うなキャンペーン」どころか「サニタイズ」という言葉自体知らなかったりするのでは…と今ふと不安になったので、用語自体の解説記事も紹介しておきます。
「共通化言うなキャンペーン」
高木氏は書きました。
「サニタイズ」という用語が、各人の都合でどんな意味にも解釈されるという、「汚れた言葉」になっており、専門用語として使い物にならなくなっているのだ。もはや、「サニタイズする」は「セキュリティ対策する」と同義でしかない。そういう言葉には存在価値がない。加えて、特定の意味を指して使っても別の意味で解釈されてしまうのだから、有害である。
「共通化」ということばが「よい共通化」と「悪い共通化」の両方を含むなら、状況としては「サニタイズ」ということばとよく似ていると思いました。そこで連想したのが「共通化言うなキャンペーン」です。
「共通化」という用語が、各人の都合でどんな意味にも解釈されるという、「汚れた言葉」になっており、専門用語として使い物にならなくなっているのだ。もはや、「共通化する」は「???」と同義でしかない。そういう言葉には存在価値がない。加えて、特定の意味を指して使っても別の意味で解釈されてしまうのだから、有害である。
…同義語のところは検討中です。
じゃあなんて言えばいいんだろうか
わかりません。が、いくつか候補はあります。
凝集度のレベル
凝集度は、あるコードがどれだけそのクラスの責任分担に集中しているかを示す尺度である。
凝集度が高いとは「関連の強いものがまとめられている」状態、凝集度が低いとは「関連の弱いものがまとめられている状態」です。
凝集度には7つのレベルがあるとされています。「共通化」といっしょくたに呼んでいたものを凝集度のレベルで区別してやれば、「よい共通化」と「悪い共通化」を区別して表現できそうです。
単一責任原則
「変更する理由が同じものは集める、変更する理由が違うものは分ける。」良いデザインの基本原則を1つあげるとすればこれでしょう。
こちらの考え方も使えそうです。見た目の似たものをなんでも集めて「共通化」すればよいわけではありません。「変更する理由が同じもの」を選んで集めるのが「よい共通化」のコツであるようです。
まとめ
「共通化」ということばは解釈が広すぎるからプログラミングの指針として使いにくい、先人の作ったより厳密で便利なことばがあるからそれを使っていきましょう、というお話でした。よそのシステム開発の現場でうまく共通言語にされている例があれば、教わりたいところです。