summaryrefslogtreecommitdiffhomepage
path: root/de-de/ruby-ecosystem-de.html.markdown
blob: e1f3c5e7b4475f5d10c0865375819faca951d174 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
---
category: tool
tool: ruby ecosystem
contributors:
    - ["Jon Smock", "http://github.com/jonsmock"]
    - ["Rafal Chmiel", "http://github.com/rafalchmiel"]
translators:
  - ["Christian Albrecht", "https://github.com/coastalchief"]
filename: ruby-ecosystem-de.html.markdown
lang: de-de
---

Hier gibt es einen Überblick über die gängigsten Tools zur Verwaltung  
von verschiedenen Ruby Versionen, Gems und Dependencies.  

## Ruby Managers

Einige Betriebssysteme haben bereits eine Ruby Version vorinstalliert  
oder bieten sie als Package zum Download an. Die meisten Rubyisten  
benutzen diese aber eher nicht und wenn, dann um damit einen Ruby  
Manager zu installieren. Damit kann man komfortabel zwischen den  
verschiedenen Versionen hin und herspringen.  

Dies sind die beliebtesten:

* [RVM](https://rvm.io/) - Installiert und wechselt zwischen rubies
  RVM kennt verschiedene Ruby Versionen und hat das Konzept der gemsets,  
  um gem Abhängigkeiten pro Projekt zu managen.  
* [ruby-build](https://github.com/sstephenson/ruby-build)  
  Installiert nur rubies, kann diese aber sehr gut verwalten
* [rbenv](https://github.com/sstephenson/rbenv) - Wechselt Ruby Versionen.
  Wird zusammen mit ruby-build benutzt. Hiermit kann man kontrollieren,  
  wie rubies laden.
* [chruby](https://github.com/postmodern/chruby) - Wechselt Ruby Versionen.
  Ähnlich rbenv.

## Ruby Versionen

Ruby wurde von Yukihiro "Matz" Matsumoto vor gut 20 Jahren veröffentlicht.  
Matz ist nach wie vor in die Entwicklung involviert. Daher kommt auch der  
Name der Referenzimplementierung: MRI (Matz' Reference Implementation).  

Die aktuellste Version ist **2.2.3** und wurde im August 2015 veröffentlicht!  

Hier eine kurze Versionshistorie:

* 2.0.0 - Release im Februar 2013  -- Release zum 20. Geburtstag der Sprache
  [Rubies are forever](http://www.heise.de/developer/artikel/Ruby-2-0-als-Geschenk-zum-20-Geburtstag-1808109.html)
* 1.9.3 - Release im Oktober 2011  
  [End of Life](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/)
* 1.8.7 - Release im Juni 2006  
  [End of Life](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/).

Die Veränderung zwischen 1.8.7 und 1.9.x war sehr groß und eine Migration  
nicht so einfach möglich. Der Versionssprung auf 2.0.0 war verglichen dazu  
weit weniger dramatisch.  
Beispielsweise hat 1.9. Encodings und eine Bytecode VM eingeführt.  
Es gibt immer noch Projekte die auf der stabilen Version 1.8.7 laufen,  
aber diese sind mittlerweile in der Minderheit. Die meisten Projekte  
laufen auf 1.9.x oder auf 2.x.

## Ruby Implementierungen

Das Ruby Ecosystem beinhaltet viele verschiedene Implementierungen von Ruby,  
jedes mit seinen eigenen Vorteilen und verschiedenen Graden von  
Kompatibilität. Auch wenn alle diese Implementierungen in verschiedenen  
Sprachen geschrieben sind, sind sie doch **alle Ruby**.  
Jede Implementierung bietet neben ihren speziellen Features immer auch  
die Möglichkeit normale ruby Dateien auszuführen.

Am ausgereiftesten und stabilsten:

* [MRI](https://github.com/ruby/ruby) - Geschrieben in C, das ist die Referenz Implementierung.
  Sie ist 100% kompatibel (mit sich selbst ;-). Alle anderen rubies 
  bleiben kompatibel mit MRI (siehe [RubySpec](#rubyspec) weiter unten).
* [JRuby](http://jruby.org/) - Geschrieben in Java and Ruby, Robust und ziemlich schnell.
  Der größte Vorteil von JRuby ist die Interoperabilität mit JVM/Java und damit die  
  Benutzung von Ruby im Java Ecosystem.
* [Rubinius](http://rubini.us/) - Geschrieben in Ruby mit C++ bytecode VM. 
  Auch sehr ausgereift und schnell. 

Mittel ausgereift / kompatibel:

* [Maglev](http://maglev.github.io/) - Baut auf Gemstone, ein Smalltalk VM.
  Dieses Projekt versucht das großartige Smalltalk Tooling in die Ruby Welt  
  zu bringen.
* [RubyMotion](http://www.rubymotion.com/) - Ruby in der iOS Entwicklung.

Weniger ausgereift/kompatibel:

* [Topaz](http://topazruby.com/) - Geschrieben in RPython (via PyPy)
  Topaz ist noch ziemlich jung und versucht die schnellste Implementierung  
  zu werden.
* [IronRuby](http://ironruby.net/) - Geschrieben in C# für die .NET Plaftform  
  Das letzte Release von IronRuby ist mittlerweile 5 Jahre her. 

Die Ruby Implementierungen haben ihre eigenen Versionsnummern, sind aber  
trotzdem immer zu einer MRI Version kompatibel.  
Viele können sogar zwischen verschiedenen Modi wechseln (1.8 mode -> 1.9 mode)

## RubySpec

Die meisten Ruby Implementierungen vertrauen der [RubySpec](http://rubyspec.org/).  
sehr stark. Da Ruby keine offizielle Spezifikation hat, hat die  
Community ausführbare Specs (in Ruby) geschrieben, um so die Kompatibilität  
zur MRI testen zu können.

## RubyGems

[RubyGems](http://rubygems.org/) ist der Community Paket Manager von Ruby.  
RubyGems kommt mit Ruby zusammen, so dass kein extra Tool nötig ist.  
  
Ruby Pakete werden "gems" genannt und könnten auf RubyGems.org  
veröffentlicht werden. Jedes Gem enthält den Source Code und Meta Daten,  
wie die Versionsnummer, weitere Abhängigkeiten, Autoren und Lizenzen.

## Bundler

[Bundler](http://bundler.io/) ist ein Tool um Abhängigkeiten zwischen  
Gems aufzulösen und zu managen. Dazu werden diese in einem gemfile  
zusammengefasst und Bundler kümmert sich darum die Abhängigkeiten  
untereinander rekursiv aufzulösen. Entweder es klappt und alle gems  
konnten runtergeladen werden, oder es wird abgebrochen und  
der Konflikt gemeldet.  
Zum Beispiel:  
Wenn Gem A die Version 3 oder höher von Gem Z braucht, aber Gem B  
von Gem Z die Version 2, dann ist das ein Konflikt.  

# Testing

Test-Driven Development ist ein essentieller Teil der Ruby Kultur.  
Ruby bringt sein eigenes Unit-Test framework mit, minitest. Darüberhinaus  
gibt es noch viele weitere Testframeworks mit unterschiedlichsten Zielen:

* [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Eingebaut in Ruby 1.8
  "Unit-style" Testframework
* [minitest](http://ruby-doc.org/stdlib-2.0.0/libdoc/minitest/rdoc/MiniTest.html) - Eingebaut in Ruby 1.9/2.0
  "Unit-style" Testframework
* [RSpec](http://rspec.info/) - Ein Testframework welches auf verständliche Testdefinition setzt
* [Cucumber](http://cukes.info/) - Ein BDD Testframework welches Gherkin tests parsen kann

## Be Nice
Die Ruby Community ist stolz darauf eine offene, vielfältige und einladende  
Community zu sein. Es gibt viele aktive Ruby User Gruppen und diverse  
Ruby Konferenzen. Matz selbst ist so oft es geht dabei.

* [Euruko](http://www.euruko2015.org)
* [User Groups](https://www.ruby-lang.org/de/community/user-groups/)