質問

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 以外) をクリーン、シンプル、保守しやすく保つためにどのようなディレクトリ レイアウトをお勧めしますか?

役に立ちましたか?

解決

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"

のマニュアルページを読んでください。 バンドルジェム 詳細については、 --coc, --exe そして --mit オプション。

他のヒント

2011 年の時点では、次のように使用するのが一般的です。 宝石商 newgem の代わりに、後者は事実上放棄されたためです。

標準の 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/, ただし、これはおそらくベストプラクティスではありません。

test/ ディレクトリと呼ばれる可能性があります spec/ TDD の代わりに BDD が使用されている場合は、次のように表示される場合もあります。 features/ キュウリを使用する場合、または demo/ QED が使用されている場合。

最近 foo.gemspec ただあり得る .gemspec --特に手動でメンテナンスされていない場合。

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

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

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

  Gemfile
  Rakefile

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

それほど珍しくないその他のファイルもいくつかあります。

  VERSION
  MANIFEST

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

他に表示される可能性がありますが、使用方法は散発的です。

  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 Indexer」を検索してください) があり、多くの場合、 work ディレクトリ、次のようなもの:

  work/
    NOTES.md
    consider/
    reference/
    sandbox/

まさに開発目的のスクラップ置き場です。

@デンサーグ:「すべてのサブパーツを含めるには 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

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

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

ああ、それを使うことをお勧めします レーキ (make の代わりに) 管理タスク用。

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top