粒度 (プログラミング)

粒度（りゅうど、granularity）は、プログラム（ソースコード）について、プログラマーの頭の中で問題となる箇所や用途と関連のある箇所をピックアップしやすい状態に保守し続けることを意図する文脈の用語である。

概要
コンピューター・プログラミングでは、利用者は用件に合わせて、関数、オブジェクト、メッセージ、スクリプトなどの達成方法を選び、また、用意されている様々な各種機能の中からいくつかを選んで組み合わせて用いることになる。この際、1つの用件に合わせて1つの達成方法をピックアップしやすかったり、または各種機能の選び方や組み立て方が、複雑であっても全用途の組み合わせ的に見てピックアップしやすく厳選されている場合、粒度が高いという。

逆に粒度が低いとは、1つの手続きで済むことを2つにも3つにも分けていたり、または1つの機能を実施すると要求していない作業も一緒に行ってしまうことをいう。また変わった例としては、1用件1機能を満たしている機能を作り続けたにもかかわらず、全体的に見ると各種機能の数量が手に負えないほど増えてしまって、整理分類が細分化した結果　数の中に埋もれその機能を選びにくくなると、結局　粒度は低いといえる。

粒度を高める方法として、一粒のようにまとめ、一粒のように分離する目安がある。
 機能をまとめること　…凝集度を高める
 関連を分離すること　…結合度を低める（結合を疎にする）
その用途からみて過剰にデータや機能が分割、分配されて細々になっていると、粉々であり一粒としての粒度は低くなる。
データや機能は用途に合わせて、1つの用件だけを済ます単位に分割する。
データや機能は過剰に分割せず、粉々ではないある程度の大きさ（一粒）に束ねる。

また粒度は、基本的に機能の分割に対して使われるが、汎用的に用いることもできる概念である。凡そ分割を行い単位を作る事柄には、分割が度を過ぎて行われたり、行う余地がある際に粒度という性質が問題となることがある。例えばオブジェクト指向プログラミングでは　クラスを分割する粒度を意識することもできる。

 対象 
 モジュール 
モジュールも分割し単位にされる。モジュールの単位とは、要素となる各手続きを集めた1目的分の1ステップをさす。この例のように分割されていれば粒度は高い。

次に例を挙げるが、粒度の決定は各利用者の主観的な判定であるので、あくまで事実の定義ではなく、粒度という用語の定義の使用例に過ぎない。
 例　銀行のATMでの通帳残高照会の場合
 利用者の用件は通帳の残高を調べたいことだから、1手続きで通帳の残高を調べることだけを行える場合は粒度が高い。細かすぎず粗すぎない。
 例　数学のsin、cosの場合
 利用者の用件は座標x、yのどちらかに角度と長さを当てて、対となるもう片方のx、y座標を調べることである。1行で記述できるので粒度は高い。細かすぎず粗すぎない。
 オブジェクト 
オブジェクトは分割された単位である。オブジェクトは、オブジェクト指向プログラミングにとってはそれ自体が単位である。オブジェクトの粒度の高さは、少なくともそのオブジェクトが案件の内容寄りの抽象的なものなのか、あるいはユーティリティーなど具体的な部品寄りなのかによって判定が異なる。
 例　ファイルチューザー（コンピューター内のファイルを選ぶダイアログボックス; file chooser）の場合
 利用者の用件は、主にコンピューター内のどこかにあるファイルを見つけ出し選ぶことである。ファイルチューザーの場合、利用者自らフォルダーを開いて階層を辿っていくという手法を取る。その手法が用件を満たす最善の方法とは限らないが、少なくとも用件は満たせ、用件以外の機能はあまりないので粒度は低くない。
 関連項目 

 結合度
 凝集度
 トレードオフ

Category:プログラミング