CRuby開発超入門

# あいさつ

全然関係ないんですが、猫背を直すためにパソコンいじる時に鳩胸を意識するとめちゃイイです. 

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/30440/1c0b5bd7-1890-d1fb-5c42-a0f13d77eefa.png)


偉そうに語れる立場では全然ないですがCRubyの寄与に関わる人がもっと増えたら良いと想い筆を執りました.


なお開発スタイルはGitを中心に使いパッチもGithubで管理する僕流なので皆さんよしなにやって下さい.

# 大体の事はbugs.ruby-lang.orgパイセンが教えてくれる


兎にも角にも[bugs.ruby-lang.org](https://bugs.ruby-lang.org/) へ

![Screenshot_2014-12-07_13_20_47.png](https://qiita-image-store.s3.amazonaws.com/0/30440/96a43050-352c-2bc8-7c03-8e3a4cccaa6e.png)

.
最初このページを見た時には若干のとっつきにくさを感じましたが、コレが宝の山でして幸いにも日本語のドキュメントも充実しており僕のクソみたいなQiitaの記事はなんかさっさと閉じてこちらを読みあさるのが良いかと.

# 最新のRubyをいじくる
報告するに足る内容か調べる時には最新のRubyで試してみましょう.
（もう直ってるみたいな事は往々にしてあります）

ビルドの仕方は大体[ココ](https://bugs.ruby-lang.org/projects/ruby/wiki/DeveloperHowtoJa)に書いてあります.


# なんか報告してみる（パッチなし）

色々と調べた上で「やはりこれはおかしい」や「これはどうか」みたいな事があればガンガン報告するのが良いと個人的には思っています.
（コミュニティの醸成においては各人間のRubyの事を考える時間の総和が大事だと思っています）

それでは以下手順

#### 0. 報告するに足る事柄を見つける
バグだ！良いアイディアを思いついた！

報告するに足るか調べる. まあ至らなければサクッとrejectされるだけです.


#### 1. とりあえずユーザー登録をする.

僕は[gogotanaka](https://bugs.ruby-lang.org/users/8176)にしました. （蛇足）

#### 2. ruby-trunk に行きましょう.

![Screenshot_2014-12-07_13_20_47.png](https://qiita-image-store.s3.amazonaws.com/0/30440/d594f477-712d-db36-eac8-decbc3bb8938.png)


バグ修正や新機能のパッチはとりあえずtrunkにぶちこまれ、各バージョンをメンテナンスする方がtrunkから各バージョンに入れてリリースするという感じです.

標準的なGitワークフローでいう`develop`ブランチ的な役割を果たす.



* Bug -> バグ報告
* Feature -> 新機能, 仕様変更
* misc -> それ以外

![Screenshot_2014-12-07_13_51_54.png](https://qiita-image-store.s3.amazonaws.com/0/30440/1feef4b3-c867-47a1-0b8e-6f6e5b7e8e1c.png)


#### 3. チケットを作る

New issues という所から（日本語設定だとまた違うのかも）チケットを作ります.

![aa.png](https://qiita-image-store.s3.amazonaws.com/0/30440/ec217673-5d23-c537-f9a5-3148e808d7a1.png)


必要事項を埋めます. 

日本語でも全然おk. むしろ拙い英語で意図が伝わらないよりも日本語の方が良い.
（個人的には両方書きたい）

![Screenshot 2014-12-07 13.58.00.png](https://qiita-image-store.s3.amazonaws.com/0/30440/137340cf-9ad8-666c-a822-8a325bb6cab0.png)


コードの埋め込みにはバッククオート３つのアレが使える.

![Screenshot 2014-12-07 14.01.36.png](https://qiita-image-store.s3.amazonaws.com/0/30440/d96ebb79-81a7-9567-2d9d-2da5709ce605.png)

#### 4. 送信して待つ

気長に適当に待ちましょう、

もし完全に忘れられてる事を危惧されたらなよしなに`ping`でもしておきましょう.


# なんか報告してみる（パッチあり）

#### 1. パッチを作る.

GitとGithubを中心に使う方法を紹介します.

Githubにソースコードがありますが、ソースコードの取得更新は`svn`でするのが吉だと思います（たまにビルド出来ない時とかある）

`svn co http://svn.ruby-lang.org/repos/ruby/trunk .`

で持ってきたソースコードに`git init` をして`Github`にでも`push`しておきます.

`master`ブランチは`svn update`をかけて`svn`で管理されているソースコードを常に追うだけ用にします.（`git hook`や`gitconfig`でショートカットしておく事をお勧めします）

何かパッチを作りたい時はブランチを切って、そこで作業をします.

良い感じの粒度でコミットしたら.

    $ git format-patch HEAD~2 --stdout -n --to https://bugs.ruby-lang.org/ --signature gogotanaka > your_patch.patch

を使ってパッチファイルを作ります. （`HEAD~2`と`gogotanaka`と`your_patch.patch`はよしなに変えてください！）

個人的にはこのパッチファイルごと最後にコミットしてフィーチャーブランチをGithubに上げて置くと管理しやすいと思います.

更にいうとfeatureブランチからPRを`master`に投げてパッチがマージされたら`close`て感じで回すといい感じです.

テストは通しておきましょう.


#### 2. なんか報告してみる（パッチなし）と同じ手順を踏む

チケットの題名に`[PATCH]` を付けるのが慣習？ぽい.

# 議論に参加してみる
チケットを作らなくとも https://bugs.ruby-lang.org/ では日々何かしらの議論が行なわれて居ますので目を通したり、

コメントしてみるのも立派なコントリビュートだと思います.

# CRubyの教材

日本語版は読んだ事がないのですが、

[Rubyのしくみ -Ruby Under a Microscope-](http://www.amazon.co.jp/Ruby%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF--Ruby-Under-Microscope--Shaughnessy/dp/4274050653/ref=sr_1_2?ie=UTF8&qid=1417992201&sr=8-2&keywords=Ruby+Under+a+Microscope)

の原著はすごく良かったです.

後はおなじみ

[Rubyソースコード完全解説](http://i.loveruby.net/ja/rhg/book/)
[Ruby Hacking Guide](https://ruby-hacking-guide.github.io/intro.html)

を強くお勧めします.

また、

[README.EXT.ja](https://github.com/ruby/ruby/blob/trunk/README.EXT.ja) / [README.EXT](https://github.com/ruby/ruby/blob/trunk/README.EXT) 

も良いです.

# 締め

僕が生まれた時にはもうこの世にRubyがあって、C言語などをいじる前にRubyに触れそれがプログラミングの当たり前だと思っていましたが

ソースコードなどを通して、その当たり前が数々の創意工夫の元で成り立っているんだなーという事を実感出来ました.




いい事言ったんじゃないかな俺