2008-09-11 12 views
19

私はRubyを学び始めています。私はまた、日々のC++開発者です。私は通常純粋なRubyプロジェクトのディレクトリレイアウト

/ 
-/bin <- built binaries 
-/build <- build time temporary object (eg. .obj, cmake intermediates) 
-/doc <- manuals and/or Doxygen docs 
-/src 
--/module-1 
--/module-2 
-- non module specific sources, like main.cpp 
- IDE project files (.sln), etc. 

ルビー(非Railsの、非Merbの)ためにどのようなディレクトリレイアウトあなたは、きれいなシンプルかつ保守それを維持することをお勧めディレクトリ構造を次のように行くC++プロジェクトの場合 ?

+1

最新のnewgemはずっと少ないクルフトを生み出します。 –

答えて

11

あなたはnewgem RubyGemをインストールすると、それはあなたのためのレイアウトを生成させることができ、あなたのパターンは次のようになります。私はあなたが精通しているものと同様のものに固執するだろう

lib/ 
    spider/ 
    base.rb 
    crawler/ 
    base.rb 
    spider.rb 
    require "spider/base" 
    require "crawler/base" 
1

同じレイアウトを使用してみませんか?コンパイルのステップがないので通常はビルドする必要はありませんが、残りはわかりやすいようです。

私はあなたがモジュールで何を意味しているのか分かりませんが、単なるクラスであれば、別々のフォルダは必要なく、複数のファイルがある場合は通常module-1.rbファイルを書きますmodule-1 /にあるすべてのものを必要とするだけのことではありません)。

ああ、私は管理タスク(makeではなく)にRakeを使用することをお勧めします。

2

@Dentharg:あなたの「すべてのサブパーツを含める」は、共通のパターンです。他のものと同様に、それは利点(あなたが望むものを得るのは簡単です)とその短所(多くのものが名前空間を汚染する可能性があり、あなたはそれらを制御できません)。私はもう少しコントロールを許可するようにこれをお勧めかもしれません

- src/ 
    some_ruby_file.rb: 
     require 'spider' 
     Spider.do_something 

+ doc/ 

- lib/ 
    - spider/ 
     spider.rb: 
     $: << File.expand_path(File.dirname(__FILE__)) 
     module Spider 
      # anything that needs to be done before including submodules 
     end 

     require 'spider/some_helper' 
     require 'spider/some/other_helper' 
     ... 

- src/ 
    some_ruby_file.rb: 
     require 'spider' 
     Spider.include_all 
     Spider.do_something 

+ doc/ 

- lib 
    - spider/ 
     spider.rb: 
     $: << File.expand_path(File.dirname(__FILE__)) 
     module Spider 
      def self.include_all 
      require 'spider/some_helper' 
      require 'spider/some/other_helper' 
      ... 
      end 
     end 
0

を::

$ gem install newgem 
$ newgem spider 
     create 
     create config 
     create doc 
     create lib 
     create script 
     create tasks 
     create lib/spider 
     create History.txt 
     create License.txt 
     create Rakefile 
     create README.txt 
     create PostInstall.txt 
     create setup.rb 
     create lib/spider.rb 
     create lib/spider/version.rb 
     create config/hoe.rb 
     create config/requirements.rb 
     create tasks/deployment.rake 
     create tasks/environment.rake 
     create tasks/website.rake 
    dependency install_test_unit 
     create test 
     create test/test_helper.rb 
     create test/test_spider.rb 
    dependency install_website 
     create website/javascripts 
     create website/stylesheets 
     exists script 
     exists tasks 
     create website/index.txt 
     create website/index.html 
     create script/txt2html 
     force tasks/website.rake 
    dependency plain_theme 
     exists  website/javascripts 
     exists  website/stylesheets 
     create  website/template.html.erb 
     create  website/stylesheets/screen.css 
     create  website/javascripts/rounded_corners_lite.inc.js 
    dependency install_rubigen_scripts 
     exists script 
     create script/generate 
     create script/destroy 
     create script/console 
     create Manifest.txt 
     readme readme 
Important 
========= 

* Open config/hoe.rb 
* Update missing details (gem description, dependent gems, etc.) 

必要に応じて次に、/ libに、あなたはモジュールを作成し、独自のプロジェクトディレクトリに見知らぬ人であることはポイントがありません。 :-)

私が常時持っている典型的なものはlib | src、bin、testです。

0

だから私はnewgemと一緒に行きました:

(私は新しいプロジェクトをやりたいまず最初にダウンいくつかのコードを取得している、README、ドキュメントなどを記述していない私は、これらのモンスターの発電機が嫌い!)。 不要なRubyForge/gemのもの(hoe、setupなど)をすべて削除し、git repoを作成し、プロジェクトをNetBeansにインポートしました。すべては20分かかり、すべては緑色だった。 それは私にspecファイルのための基本的なレーキタスクを与えました。

ありがとうございます。

20

2011年現在、後者が効果的に放棄されるため、newgemの代わりにjewelerを使用するのが一般的です。

+16

またはBundler新しい宝石を作るためにあなたに "バンドル宝石の宝石名"を与えます。 –

10

標準Rubyプロジェクトのコア構造は基本的に:

lib/ 
    foo.rb 
    foo/ 
    share/ 
    foo/ 
    test/ 
    helper.rb 
    test_foo.rb 
    HISTORY.md (or CHANGELOG.md) 
    LICENSE.txt 
    README.md 
    foo.gemspec 
share/

はまれであり、時には代わりdata/呼ばれます。一般的なルビファイルではありません。ほとんどのプロジェクトはそれを必要としませんが、何度も何度もすべてがlib/に保存されていますが、これはおそらくベストプラクティスではありません。 QEDが使用されている場合は、また、キュウリが使用されている場合features/を参照するか、demo/かもしれませんがBDDは、代わりにTDDの使用されている場合

test/ディレクトリがspec/と呼ばれるかもしれません。

最近ではfoo.gemspec.gemspecになります。特に手作業で管理されていない場合は特にそうです。

プロジェクトは、コマンドライン実行を持っている場合は、追加します。また

bin/ 
    foo 
    man/ 
    foo.1 
    foo.1.md or foo.1.ronn 

を、ほとんどのRubyプロジェクトのき:

Gemfile 
    Rakefile 

Gemfileはバンドラーを使用するためのもので、Rakefileは熊手のためでありますビルドツール。しかし、別のツールを使用する場合は、他にもオプションがあります。

他のいくつかのそれほど珍しいことではありませんファイル:

VERSION 
    MANIFEST 

VERSIONファイルはちょうど現在のバージョン番号が含まれています。 MANIFEST(またはManifest.txt)には、プロジェクトのパッケージファイル(例:gemパッケージ)に含めるファイルのリストが含まれています。

他に何あなたが見るかもしれないが、使用方法は散発的である:

config/ 
    doc/ (or docs/) 
    script/ 
    log/ 
    pkg/ 
    task/ (or tasks/) 
    vendor/ 
    web/ (or site/) 

config/は、さまざまな設定ファイルが含まれています。 doc/には、生成されたドキュメント(例: RDoc、またはマニュアルで管理されているマニュアル。 script/には、プロジェクトで使用するためのシェルスクリプトが含まれています。 log/には、生成されたプロジェクトログが含まれています。テストカバレッジレポート。 pkg/は、生成されたパッケージファイルを保持する。 foo-1.0.0.gem; task/は、foo.rakeまたはfoo.watchrなどのさまざまなタスクファイルを保持できます。 vendor/には他のプロジェクトのコピーが含まれています。 gitサブモジュール;最後にweb/にプロジェクトのWebサイトファイルが含まれています。

その後も比較的共通しているいくつかのツールの特定のファイル:

.document 
    .gitignore 
    .yardopts 
    .travis.yml 

は、彼らはかなり自明です。

最後に、私は個人的にそのファイルを構築するための.indexファイルとvar/ディレクトリを追加することを追加します(これについての詳細は、「Rubyworksインデクサー」で検索)、しばしばworkディレクトリを持っている、のようなものになります。

work/ 
    NOTES.md 
    consider/ 
    reference/ 
    sandbox/ 

ちょうど開発のためのscrapyardの並べ替え。

関連する問題