Ruby(non-Rails/merb/etc)プロジェクトの理想的なプロジェクト構造の概要/明確化を求めています。
app/
bin/ #Files for command-line execution
lib/
appname.rb
appname/ #Classes and so on
Rakefile #Running tests
README
test,spec,features/ #Whichever means of testing you go for
appname.gemspec #If it's a gem
何か問題がありますか?逃した部分は何ですか?
私はそれがほとんどスポットだと思います。デフォルトでは、Rubygemsはlibディレクトリをロードパスに追加しますが、$:変数を使用して任意のディレクトリをプッシュできます。つまり.
$:.Push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
つまり、そのディレクトリにsurfer.rb
といえば、どこでもrequire "surfer"
でき、ファイルが見つかります。
また、慣例として、クラスとシングルトンはファイルを取得し、モジュールはディレクトリを取得します。たとえば、LolCatz
モジュールとLolCatz::Moar
クラスがある場合、次のようになります。
lib/
appname.rb
lolcatz/
moar.rb
ほとんどのライブラリはappname
名前空間にあるため、lib/appnameフォルダーがあるのはこのためです。
さらに、コマンドnewgem --simple [projectname]
を実行しようとすると、Rubyプロジェクト(および拡張によりa Ruby Gem)。これを行うツールは他にもありますが、newgemはかなり一般的で、通常はTODOファイルとすべてのスクリプトを削除します。
http://guides.rubygems.org/what-is-a-gem/ の次の例を参照してください
% tree freewill
freewill/
├── bin/
│ └── freewill
├── lib/
│ └── freewill.rb
├── test/
│ └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec
Railsプロジェクト構造を模倣しようとします。なぜなら、通常Railsを扱う私のチームは、他の構成よりも構造をよく理解するからです。
バンドラーを使用する場合、このコマンドを実行するbundle gem app_name
は、同じディレクトリ構造を提供します。
単体テストの代わりにrspecを使用する場合は、このコマンドを実行できますrspec --init
(必ずcd app_name
最初)