web-dev-qa-db-ja.com

基本的なRubyプロジェクトを設定するにはどうすればよいですか?

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

後でgemを構築したいかもしれませんが、それは確かではありません。

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

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

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

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

http://gembundler.com/ を見ましたが、Bundlerのセットアップ後に停止します。

96
ayckoster

良いスタートを切るには、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. Bundler.setuprequire 'my_lib'をspec/spec_helper.rbの先頭に追加して、仕様の実行時にgemの依存関係が確実にロードされるようにします。
  3. require "rspec/core/rake_task"task :default => :specをRakefileに追加して、rakeを実行すると仕様が実行されるようにします。

最新の作成に取り組んでいる間、 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 [email protected]:myusername/my_lib.git
~/code/my_lib $ git Push

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

~/code/my_lib $ rake release

さらなる参考文献

151
John Douthat

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およびオプションでgemspecに指定された依存関係のみを使用して、環境を自動的にセットアップします。また、コードをgemにせずに簡単にrequireすることができます。

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

私はgemを作成しました これは便利だと思うかもしれません。 gemspecファイルを指定すると、gemをRakeおよびrubygemsリポジトリにビルド、インストール、リリースするタスクを含む、gemを操作するための多くの便利なgitタスクを定義します自動バージョンのタグ付け。また、irbまたはpryセッションでコードをロードする簡単な方法も提供します。

# Rakefile
require 'rookie'

# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
11
Matheus Moreira

私が最もよく見た慣例は次のとおりです(プロジェクトの名前が「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について説明し、依存関係のリストを提供します。
6
user2398029

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

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

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

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

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

それが私の経験です。それが何らかの助けになることを願っています。

4
Xiao Hanyu