22

rubyの勉強を始めました。私は日々の C++ 開発者でもあります。C++ プロジェクトの場合、通常、次のディレクトリ構造を使用します

/
 -/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.

Ruby (Rails 以外、Merb 以外) をきれいに、シンプルに、保守しやすくするために、どのようなディレクトリ レイアウトを提案しますか?

4

7 に答える 7

20

2011 年現在、newgem は実質的に放棄されているため、jewelerを使用するのが一般的です。

于 2011-08-15T02:00:43.053 に答える
13

Bundlerには、gemを生成するために必要なインフラストラクチャが含まれています。

$ bundle gem --coc --mit --test=minitest --exe spider
Creating gem 'spider'...
MIT License enabled in config
Code of conduct enabled in config
      create  spider/Gemfile
      create  spider/lib/spider.rb
      create  spider/lib/spider/version.rb
      create  spider/spider.gemspec
      create  spider/Rakefile
      create  spider/README.md
      create  spider/bin/console
      create  spider/bin/setup
      create  spider/.gitignore
      create  spider/.travis.yml
      create  spider/test/test_helper.rb
      create  spider/test/spider_test.rb
      create  spider/LICENSE.txt
      create  spider/CODE_OF_CONDUCT.md
      create  spider/exe/spider
Initializing git repo in /Users/francois/Projects/spider
Gem 'spider' was successfully created. For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html

次に、lib /で、必要に応じてモジュールを作成します。

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

、およびオプションの詳細については、バンドルgemのマニュアルページをお読みください。--coc--exe--mit

于 2008-09-15T13:41:54.313 に答える
13

標準的な 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/汎用の非 ruby​​ ファイル用です。ほとんどのプロジェクトでは必要ありませんlib/

TDD の代わりに BDD が使用されている場合、ディレクトリtest/が呼び出される可能性があります。spec/features/demo/

最近foo.gemspecは、.gemspec特に手動で維持されていない場合は特にそうです。

プロジェクトにコマンド ライン実行可能ファイルがある場合は、以下を追加します。

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

さらに、ほとんどの Ruby プロジェクトには次のものがあります。

  Gemfile
  Rakefile

GemfileBundler を使用するためのもので、Rakefileは Rake ビルド ツールを使用するためのものです。ただし、別のツールを使用したい場合は、他のオプションがあります。

それほど珍しくない他のいくつかのファイル:

  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/などのさまざまなタスクファイルを保持できます。git サブモジュールなど、他のプロジェクトのコピーが含まれています。最後に、プロジェクトの Web サイト ファイルが含まれます。foo.rakefoo.watchrvendor/web/

次に、比較的一般的ないくつかのツール固有のファイル:

  .document
  .gitignore
  .yardopts
  .travis.yml

それらはかなり一目瞭然です。

.index最後に、私は個人的にファイルとディレクトリを追加してvar/そのファイルを構築し (詳細については「Rubyworks Indexer」を検索してください)、多くの場合work、次のようなディレクトリを持っていることを付け加えておきます。

  work/
    NOTES.md
    consider/
    reference/
    sandbox/

開発目的のスクラップヤードのようなものです。

于 2012-12-24T09:23:29.497 に答える
2

@ Dentharg:「すべてのサブパーツを含めるために1つ含める」は一般的なパターンです。何でもそうですが、長所(必要なものを簡単に入手できる)と短所(多くのインクルードが名前空間を汚染する可能性があり、それらを制御することはできません)があります。パターンは次のようになります。

- 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
于 2008-09-11T12:46:05.807 に答える
1

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

モジュールが何を意味するのかわかりませんが、それが単一のクラスである場合、別のフォルダーは必要ありません。複数のファイルがある場合は、通常、module-1.rb ファイルを記述します (名前レベルでmodule-1 フォルダー) は、module-1/ 内のすべてを必要とするだけです。

ああ、管理タスクには (make の代わりに) Rakeを使用することをお勧めします。

于 2008-09-11T12:07:21.390 に答える
0

私はあなたが精通しているものに似たものに固執します:あなた自身のプロジェクトディレクトリで見知らぬ人であることに意味はありません。:-)

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

(私はこれらのモンスタージェネレーターが嫌いです。新しいプロジェクトで最初にやりたいことは、READMEやドキュメントなどを書くのではなく、コードを取得することです!)

于 2008-09-16T12:03:37.753 に答える
0

だから私はnewgemに行きました。不要な RubyForge/gem のもの (ホー、セットアップなど) をすべて削除し、git リポジトリを作成し、プロジェクトを NetBeans にインポートしました。すべてに20分かかり、すべてが緑色です。これにより、spec ファイルの基本的な rake タスクもできました。

皆さん、ありがとうございました。

于 2008-09-17T12:44:59.113 に答える