web-dev-qa-db-ja.com

理想的なRubyプロジェクト構造

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

何か問題がありますか?逃した部分は何ですか?

118
dylanfm

私はそれがほとんどスポットだと思います。デフォルトでは、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ファイルとすべてのスクリプトを削除します。

86
Chris Lloyd

http://guides.rubygems.org/what-is-a-gem/ の次の例を参照してください

 % tree freewill
    freewill/
    ├── bin/
    │   └── freewill
    ├── lib/
    │   └── freewill.rb
    ├── test/
    │   └── test_freewill.rb
    ├── README
    ├── Rakefile
    └── freewill.gemspec
9
Sam Shiles

Railsプロジェクト構造を模倣しようとします。なぜなら、通常Railsを扱う私のチームは、他の構成よりも構造をよく理解するからです。

6
berlin.ab

バンドラーを使用する場合、このコマンドを実行するbundle gem app_nameは、同じディレクトリ構造を提供します。

単体テストの代わりにrspecを使用する場合は、このコマンドを実行できますrspec --init(必ずcd app_name 最初)

1
8bithero