純粋な Ruby プロジェクトのディレクトリ レイアウト
-
09-06-2019 - |
質問
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 タスクも得られました。
皆さん、ありがとうございました。