特集
業務Webアプリの作り方の基礎(前編)

業務アプリ開発で失敗しないコツ

尾崎 義尚
Microsoft MVP for Development Tools - Visual C# Oct, 2005 - Spt, 2008
2008/02/12
Page1 Page2

2.3. 命名のコツ

 業務アプリでは、業務の変更やユーザーの要望、考慮漏れなどによる仕様変更というものが必ずある。そういった場合に備えて、理解しやすい変数名やメソッド名を付けておくことは重要である。たとえ自分の書いたコードでも2週間もすれば忘れているのが普通である。このとき、理解しやすい名前を付けておくことで保守にかかる時間が短くて済む。

 まずは、一般的な開発者に多く見られるコードを見てみよう。以下のコードでは、業務処理の単位できれいにメソッドが分かれているが、メソッド名がシステム寄りになりすぎていて、何をしているのかが分かりにくい。メソッド名は分かりやすいように日本語にしてある。

public bool Regist受注(OrderInfo userInputData)
{
  if (!Regist受注データ(userInputData))
  {
    return false;
  }

  if (!Update在庫(userInputData))
  {
    return false;
  }

  if (!Regist発送(userInputData))
  {
    return false;
  }

  if (!Update残高(userInputData))
  {
    return false;
  }
  return true;
}
Public Function Regist受注(ByVal userInputData As OrderInfo) As Boolean

  If (Not Regist受注データ(userInputData)) Then
    Return False
  End If

  If (Not Update在庫(userInputData)) Then
    Return False
  End If

  If (Not Regist発送(userInputData)) Then
    Return False
  End If

  If (Not Update残高(userInputData)) Then
    Return False
  End If

  Return True
End Function
一般的な開発者に多く見られるコード(上:C#、下:VB)
処理の分割はできているが、その処理が何をしようとしているのかがメソッド名から分かりにくい。

 筆者がこれまで見てきたコードの中で最も多いのが、このような書き方をしているものである。メソッドの分割単位はきれいにできているのだが、業務上のどんな処理をしているのかがメソッド名から読み取れない。

 上記のコードを改善したのが以下のコードである。

public bool Regist受注(OrderInfo userInputData)
{
  if (!Regist受注データ(userInputData))
  {
    return false;
  }

  if (!在庫引き当て(userInputData))
  {
    return false;
  }

  if (!発送準備(userInputData))
  {
    return false;
  }

  if (!引き落とし(userInputData))
  {
    return false;
  }
  return true;
}
Public Function Regist受注(ByVal userInputData As OrderInfo) As Boolean

  If (Not Regist受注データ(userInputData)) Then
    Return False
  End If

  If (Not在庫引き当て(userInputData)) Then
    Return False
  End If

  If (Not発送準備(userInputData)) Then
    Return False
  End If

  If (Not 引き落とし(userInputData)) Then
    Return False
  End If

  Return True
End Function
メソッド名を改善したコード(上:C#、下:VB)
メソッド名が業務処理名になっているため、処理の流れが分かりやすい。

 このコードは前のコードと違って、業務上でどのような処理をしているかが明確である。このように、メソッドの中で何をしているかではなく、業務として何をしようとしているのか、または呼び出す側が何をしようとしているのかを考えて、その内容を示す言葉をメソッド名に付けることで、処理の流れが分かりやすくなる。

 理解しやすい変数名やメソッド名というのは「可能な限り業務名を付けることだ」と筆者は考える。業務上で行おうとしている内容がソース・コード上にも記載されていれば、「何をしているのか」を考える時間が短くて済む。業務アプリを作っているのだから、基本的に業務の名前が付けられるはずである。

 また、これも実際に多く見られる例なのだが、例えば「職員検索」画面などで、検索結果のリストに“searchResult”(検索結果)のような変数名を付けているケースが多い。だがメンテナンス性を考えると“foundEmployees”(検索で見つかった職員)のように画面上や業務上で使われている名前を付けた方が、後から見たときに何をしているのかが明確になる。

 ただし、コンピュータ上で業務アプリを作成しているので、必ず業務以外のコードも記述する必要が出てくる。そのため、優先順位を次のように考えて命名すると分かりやすい。

「業務名」→「システム名」→「型名」

 「業務名」とは、いまの例で書いた“foundEmployees”や“Apply”、“stock”など業務で使われている名前か、それを連想することができる名前である。可能な限り業務名を使用する。

 次の「システム名」というのが、“searchResult”や“Update”、“rowIndex”など、システム上で行う処理である。業務的な名称が付けられない場合は、こちらで付けられることが多い。

 ただし、基盤機能などの汎用的な処理の場合、システム的な名称さえも付けられないことがある。その場合に限って、DataSet(データセット)の変数を“ds”にしたり、インデックスとして使用する変数を“i”にしたりするなど、型名や処理上で意味を持たない名前を付ける。

業務名(意味) システム名(意味) 型名(意味)
foundEmployees(見つかった職員) searchResult(検索結果) ds(DataSet)
stock(在庫数) maxValue(最大値) i(int値)
Apply(申請) Regist(登録) -
メソッド名や変数名の名前付けの例
型名、システム名よりも業務名が付いている方が、何をしているのかが分かりやすい。

 名前の付け方は必ずしも機械的にできるものではなく、コード内部、外部の両方の視点で考慮する必要がある。ここには経験が必要になるため簡単ではないが、名前を付けるときにはさまざまな視点から考慮することを意識してみてほしい。

2.4. コメント記述のコツ

 筆者は実際に開発者が書いたソース・コードをレビューすることが多いのだが、ほとんどの開発者のコメントが、読んでみても実際にどんな処理をしているのか想像しづらいということである。具体的には、コメントは書かれているのだが、「入力値をチェックする」「データベースに変更を反映する」など、そのコードで何をしているのかということしか書かれていないことが多い。

 これでは後から見たときに、何をしているのかを理解するのに、全体を読んで頭の中で組み立てていかなくてはならない。例えば、一般的な開発者が記述したコードとコメントの例を見てほしい。

// チェックボックスがチェックされている場合、
if (chkSelect.Checked)
{
  // 対象リストに選択されたIdを追加する。
  targetList.Add(selectedId);
}
' チェックボックスがチェックされている場合、
If(chkSelect.Checked) Then
  ' 対象リストに選択されたIdを追加する。
  targetList.Add(selectedId)
End If
一般的な開発者が書いた分かりにくいコメントの例(上:C#、下:VB)

 この例では、この一部だけでは何をしているのかが分かりにくく、コード全体を読んで理解する必要がある。これを業務上で使われている単語に置き換えるだけで、画面上でどんな操作をしているのか、または業務上のどんな処理をしているのかがより明確になる。

// 賞与支払い対象者として選択されている場合、
if (chkSelect.Checked)
{
  // 賞与支払い対象者リストに選択されている社員のIdを追加する。
  targetList.Add(selectedId);
}
' 賞与支払い対象者として選択されている場合、
If chkSelect.Checked Then
  ' 賞与支払い対象者リストに選択されている社員のIdを追加する。
  targetList.Add(selectedId)
End If
コメントを業務の言葉に置き換えた例(上:C#、下:VB)

 このように、コメントでどのような操作をしているのかを記述することによって、プログラムで書かれている処理が業務上のどのような作業を実現しているのかが分かりやすくなる。

 こんなことをしなくても、コードを上から順に読んでいけば分かると思うかもしれないが、機能変更などで後からコードの変更が必要になった場合には、上からコードを読むのではなく、必要個所を探して変更できた方が速い。そのような場合、最初の例では変更が必要な個所を見つけるのに時間がかかってしまう。変更に強いアプリを作るためにも、分かりやすいコメントを記述することが必要である。

 以上、今回は業務アプリを開発するうえで知っておくと役立つさまざまなコツを紹介した。

 次回後編では今回の内容を踏まえたうえで、実際にVisual Studio 2005を使用して3階層の業務Webアプリの開発を行う。End of Article


 INDEX
  [特集]
  業務Webアプリの作り方の基礎(前編)
  業務アプリ開発で失敗しないコツ
    1.クラス分割のコツ、メソッド分割のコツ
  2.命名のコツ、コメント記述のコツ
 
  業務Webアプリの作り方の基礎(後編)
  基本的な業務Webアプリの開発手順
    1.業務Webアプリの構造パターン
    2.各層の開発


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH