106

10〜20のクラス/ファイルで小さなRubyプロジェクトを作成したいと思います。いくつかのgemが必要で、RSpecをテストフレームワークとして使用したいと思います。

後で宝石を作りたいと思うかもしれませんが、それは確かではありません。

プロジェクトの基本構造を設定する方法を示すハウツーまたはガイドはありますか?

私が持っている質問は次のとおりです。

  • すべてのカスタムエラー/例外はどこに配置しますか?
  • lib、bin、srcなどのディレクトリに名前を付けるための規則はありますか?
  • テストデータやドキュメントはどこに置きますか?
  • プロジェクトですべてのファイルにアクセスできるようにするには、どこですべてのファイルが必要ですか?

ゼロからすべてを行うことができることは知っていますが、いくつかのガイダンスが必要です。コピーできる優れた宝石がいくつかありますが、本当に必要なものと削除できるものはわかりません。

http://gembundler.com/を見ましたが、Bundlerを設定すると停止します。

4

4 に答える 4

159

良いスタートを切るために、bundle gemコマンドとを使用することができますrspec --init

~/code $ bundle gem my_lib
      create  my_lib/Gemfile
      create  my_lib/Rakefile
      create  my_lib/LICENSE.txt
      create  my_lib/README.md
      create  my_lib/.gitignore
      create  my_lib/my_lib.gemspec
      create  my_lib/lib/my_lib.rb
      create  my_lib/lib/my_lib/version.rb
Initializating git repo in /Users/john/code/my_lib
~/code $ cd my_lib/
~/code/my_lib $ git commit -m "Empty project"
~/code/my_lib $ rspec --init
The --configure option no longer needs any arguments, so true was ignored.
  create   spec/spec_helper.rb
  create   .rspec
  • コードが入りますlib
  • スペックが入るspec
  • テストデータまたはドキュメントが入りますspec/fixtures/
  • 内のすべてのrubyファイルを要求しますlib/my_lib.rb。自分の好みに応じて、そのファイルまたは独自のファイルで例外を定義することもできます。
  • Cソースファイルが入りますext/my_lib
  • シェルスクリプトと実行可能ファイルが入りますbin

疑わしい場合は、他の宝石がどのように配置されているかを見てください。


さらに詳しい情報:

他の開発者が物事を簡単に行えるように、gemspecに開発依存関係としてrspecを追加する必要があります

  1. my_lib.gemspecを編集し、下部に追加gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'ます。
  2. スペックを実行するときにgemの依存関係が確実に読み込まれるように、spec/spec_helper.rbの先頭にBundler.setupとを追加します。require 'my_lib'
  3. Rakefileにとを追加require "rspec/core/rake_task"して、実行すると仕様が実行されるようにします。task :default => :specrake

最新の作成に取り組んでいる間、guard-rspecは、ファイルの変更時にスペックを自動的に実行し、スペックの失敗を警告することで、時間と手間を節約できます。

~/code/my_lib $ git add spec/spec_helper.rb
~/code/my_lib $ git commit -am "Add RSpec"
~/code/my_lib $ vim my_lib.gemspec # add guard development dependency
~/code/my_lib $ bundle
~/code/my_lib $ bundle exec guard init
~/code/my_lib $ vim Guardfile # Remove the sections below the top one
~/code/my_lib $ git add Guardfile
~/code/my_lib $ git commit -am "Add Guard"

作成に満足したら、それをgithubにプッシュします

# create a github repository for your gem, then push it up
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}' 
~/code/my_lib $ git remote add origin git@github.com:myusername/my_lib.git
~/code/my_lib $ git push

次に、Rubygems.orgでgemをリリースする準備ができたら、を実行rake releaseします。これにより、手順が説明されます。

~/code/my_lib $ rake release

その他の参考資料

于 2012-03-03T20:17:18.343 に答える
11

rubygems.orgには、いくつかの規則とその背後にある理由を紹介する素晴らしいガイドがいくつかあります。一般に、Rubygemsの命名規則とディレクトリ規則は、ほとんどのRuby開発者によって守られています。

エラーの説明に適合する標準ライブラリのクラスが見つからなかった場合にのみ、カスタム例外クラスを作成します。エラークラスを、それを発生させるクラスまたはモジュールの下にネストします。

class Parser::Error < RuntimeError; end

begin
  Parser.new(:invalid).parse!
rescue Parser::Error => e
  puts e.message
end

ユニットテストは、を使用している場合は、、またはを/test使用している場合はになります。後者をお勧めします。Test::Unit/specRSpec

Bundlerロードパスを管理するための優れた方法です。に指定された依存関係のみを使用して環境を自動的にセットアップし、Gemfileオプションでgemspecrequireまた、宝石にすることなくコードを簡単に作成することもできます。

ただし、将来的にコードをgemにバンドルする可能性があるため、gem仕様の作成方法を調査することをお勧めします。仕様は手動で作成する必要があります。いくつかのツールを使用して自動的に生成しないでください。私の意見では、これらは情報を不必要に複製し、ソース管理で使用すると大混乱をもたらすブルートフォースアプローチです。

私はあなたが役に立つと思うかもしれない宝石を作りました。ファイルを指定すると、 gemを操作するためgemspecの多くの便利なタスクが定義されます。これには、自動バージョンタグ付けを使用Rakeして、gemをビルド、インストール、rubygemsおよびリポジトリにリリースするためのタスクが含まれます。また、またはセッションgitでコードをロードする簡単な方法も提供します。irbpry

# Rakefile
require 'rookie'

# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
于 2012-03-03T20:32:22.100 に答える
6

これが私が最もよく見た規則です(あなたのプロジェクトの名前が「foo」であると仮定して):

  • /lib/foo.rb-プロジェクトのトップレベルの名前空間とそのバージョンを定義します。必要なファイルが必要です。
  • / lib / foo /-エラー関連のクラスを含む、プロジェクトのすべてのクラスが含まれます。
  • /test/-プロジェクトのテストが含まれています。
  • /spec/-プロジェクトの仕様が含まれています。
  • / bin /-プロジェクトがバイナリ(JARファイルなど)に依存している場合、それらは通常そこにあります。

lib /内では、通常、最上位の名前空間内にサブ名前空間ごとにフォルダーを作成するのが慣例です。たとえば、クラスFoo :: Bar :: Bazは通常、/lib/foo/bar/baz.rbの下にあります。

Foo :: VERSION定数を設定するためだけに/lib/foo/version.rbファイルを作成するのが好きな人もいますが、これが/lib/foo.rbファイルで定義されているのをよく見かけます。

また、gemを作成する場合は、次のファイルが必要になります。

  • / Rakefile-rakeタスク(gemのテスト、ビルド、プッシュのタスクなど)を定義します。
  • / Gemfile-gemのソースを定義します(他の可能なものの中でも)。
  • /foo.gemspec-gemについて説明し、依存関係のリストを提供します。
于 2012-03-03T20:16:33.980 に答える
6

Rubyプロジェクトを構築する方法については、インターネット上にいくつかのガイドがあります。その上、これを解決する最善の方法は、githubに向かい、有名なRubyプロジェクトを探して、「それらの」構造を確認することだと思います。

一般的なRubyGemの要件に加えて、ワークフローを改善するために次のツールをお勧めします。

  • editorconfigは、開発者が異なるエディターとIDE間で一貫したコーディングスタイルを定義および維持するのに役立ちます。
  • rubocop、rubyの静的コードアナライザー、rubyコミュニティでリンターするdefac。
  • ガードは、プラグインの束と一緒に、コードが変更されたときに好きなように自動的に任意のコマンドを実行できます。
  • rake、次のようなさまざまなプロジェクトタスクのユニバーサルドライバー:
    • package:gemパッケージをビルドする
    • clean:生成されたファイルをクリーンアップする
    • test:テストを実行する
  • ヤード、人気のあるルビーのドキュメントツール。

そして、上記のすべてのツールに加えて、それらはルビープロジェクトのためのいくつかのオンラインサービスです:

また、オープンソースプロジェクト用にhttp://shields.io/を介してバッジを生成することもできます。

それは私の経験です、それが誰かのために役立つことを願っています。

于 2016-01-05T08:59:15.047 に答える