utility 系の名称の意味の個人的な線引

ドメインに依存しない汎用的な機能を utility と呼ぶことが多いと思うが、個人的に似たようなものとして

  • utility
  • helper
  • lib
  • module
  • shared

といった名称のものを見てきた。
しかし、これらの境界線を曖昧にしすぎて、雰囲気で shared だったり helper だったり lib といった使い方をしてきてしまった。  
そのため改めて意味を調べ直すとともに、これらの意味の線引をしていきたいと思う。

utility

ユーティリティソフトとは、コンピュータや OS、アプリケーションソフトなどの機能を補い、使い勝手や性能などを向上させる単機能あるいは小規模なソフトウェアのこと。それ自体を目的に使用することはほとんどなく、コンピュータ利用の補助のために用いるためのソフトである。単に「ユーティリティ」と略されることも多い。
ユーティリティソフトとは - IT 用語辞典 e-Words

よく見かける名称。
それ単体で機能としては完結しているが、他の機能と組み合わせることで進化を発揮する。
汎用的な機能を提供しているため、ドメインに依存していない。そのため比較的テストが容易である印象がある。

helper

助ける人、手伝い人、助手、救助人
helper の意味・使い方・読み方 | Weblio 英和辞書

utility と同じだと思っている。
検索でヒットしたこの issue によると、
Looks to me like /utils is a place where you can place small snippets you can use throughout the application. Small functions to build bigger things with. /helpers is more of a place where you store code architectural snippets in my view. Things essential for bootstrapping components and developer ergonomics.

utility は小さなコードスニペットを配置できるところ。
helper はコードアーキテクチャスニペットを配置するところ。コンポーネントのブートストラップと開発者の人間工学に不可欠。
What’s the differences between helpers and utils? · Issue #808 · erikras/react-redux-universal-hot-example · GitHub
つまり、helper はファイルの scaffold や script を配置しておくような場所。
toolsというディレクトリと似ている気がする。

lib

IT の分野では、ある特定の機能を持ったコンピュータプログラムを他のプログラムから呼び出して利用できるように部品化し、そのようなプログラム部品を複数集めて一つのファイルに収納したものをライブラリという。
ライブラリとは - IT 用語辞典 e-Words

library の短縮形。ESLint が lib を src のような扱いで使っていたので、これ単体で機能として完成しているようなイメージ。
eslint/lib at master · eslint/eslint · GitHub
lib、または libs として使われているのをよく見かける。汎用的な機能を入れておくという意味では用いる印象はない。どちらかというと、app のようなもっと大きい単位な気がしている。

module

モジュールとは、機能単位、交換可能な構成部分などを意味する英単語。機器やシステムの一部を構成するひとまとまりの機能を持った部品で、システム中核部や他の部品への接合部(インターフェース)の仕様が明確に定義され、容易に追加や交換ができるようなもののことを指す。
モジュールとは - IT 用語辞典 e-Words

utility と似ている気がするが、utility よりは使い道がはっきりしており、汎用的というよりはある機能を機能として成立させるための部品というイメージ。

shared

(一人の人が持つ)分け前、取り分、(一人の人が持つ費用・仕事・責任などの)出し分、割り当て、負担、(一人の人が持つ)役割、参加、貢献、株、株券
share の意味・使い方・読み方 | Weblio 英和辞書
Angular で初めて見かけた名称。shared module と呼ばれている。
スタイルガイドによると、
コンポーネント、ディレクティブ、およびパイプが再利用され、他の機能モジュールで宣言されたコンポーネントによって参照される場合は、 共有モジュールの中で宣言します。
サービスを提供せずに、アプリ内で使用する共通部品を管理するモジュールのことらしい。
Angular 日本語ドキュメンテーション #共有機能モジュール
utility の抽象的な名称のイメージ。

個人的線引

naming-conversation-utility
src の中に shared があり、shared 内の modules、utilities は src 内の様々な箇所に依存するイメージ。
helpers は src の外にあり、ファイルの生成や、script の実行など、開発者体験を高められるようなツールを置いてあるイメージ。