推奨される RubyGem の名前の付け方


RubyGem の名前をつけるときには推奨のつけ方があるんです.

Name your gem - RubyGems Guides によると, 次のようなものになります:

  • 複数ワードにはアンダースコアを使う

    メインのクラス名もしくはモジュール名が 2 ワード以上なら, その gem の名前はアンダースコアで区切ります.

    例えば ExampleGem という ExampleGem という 2 ワードを含んだクラス or モジュールを使う場合, gem の名前は example_gem になります.

    そしてその gem のメインのファイルパスは example_gem/lib/example_gem.rb になります.

    なので require 'example_gem' で読み込めます.

  • 他の gem のエクステンションにはダッシュを使う

    例えば example という gem があったとして, その gem の Example というクラス or モジュールに Ext というクラス or モジュールのエクステンションを追加したい場合 gem の名前は example-ext となります.

    そしてその gem のメインのファイルパスは example-ext/lib/example/ext.rb となります.

    なので require 'example/ext' で読み込めます.

    そしてクラス or モジュール名は Example::Ext となります.

  • アンダースコアとハイフンは適切に使い分ける

    例えば ExampleGem というクラス or モジュールに Ext というクラス or モジュールのエクステンションを追加したい場合, 上記 2 つのルールを組み合わせて gem の名前は example_gem-ext となります.

    そしてその gem のメインのファイルパスは example_gem-ext/lib/example_gem/ext.rb となります.

    なので require 'example_gem/ext' で読み込めます.

    そしてクラス or モジュール名は ExampleGem::Ext となります.

  • 全て小文字にする

    Gem の名前は全て小文字にします.

    というのも Windows と macOS は小文字と大文字を区別しないファイルシステムなので, 大文字を含んだ名前の gem でも require するときに小文字でその gem の名前を指定しても読み込めてしまうのですが Linux などの小文字と大文字を区別するファイルシステムでは require するときに同じように小文字でその gem の名前を指定しても読み込むことができません.

    なのでこのような事態を防ぐために gem の名前をつけるときは全て小文字にします.

まとめると次のようになります:

Gem の名前 ファイル名 require するとき クラス or モジュール名
example_gem example_gem.rb require 'example_gem' ExampleGem
example-ext example/ext.rb require 'example/ext' Example::Ext
example_gem-ext example_gem/ext.rb require 'example_gem/ext' ExampleGem::Ext

まとめ

このような gem の名前の付け方はしなければいけない決まりではなくあくまで推奨というものですが, このように名付けられた gem はその gem のメインファイルはどんなファイル名で, どんな階層にあって, どんなクラス, モジュール名なのかということを gem の名前から推測することができるようになります.

必ずしも全てのケースにおいてこのような推奨ルールに従って gem の名前をつけることはできないかもしれないですが, できるならばこのような推奨ルールに従って gem を名付けられると色々といいのではないかと思います.