私はいかにしてpull request を行ったか - あるいは social development について

78
私はいかにして pull request 行ったか あるいは Social Developping について よしだあつし

description

2011年9月10日に神戸大学で行われたRuby関西主催の「第51回Ruby/Rails勉強会@関西」で発表したgithubでpull requestを行った経験談の資料です。

Transcript of 私はいかにしてpull request を行ったか - あるいは social development について

私はいかにしてpull request を

行ったかあるいは Social Developping

について

よしだあつし

自己紹介

お名前: よしだあつし

Twitter ID: @yalab

職業: プログラマ兼ニート

興味: Rails 3.1、 scala、android

 

まずはGithubについて簡単に説明します

Github とは?

Github とは?https://github.com/

git リポジトリのホスティングサービス

wiki や Ticket などのプロジェクト支援ツール多数

コードコラボレーションのプラットフォーム

Github を使っているプロジェクト

Ruby On Rails

Rubygems

Node.js

jquery

その他多数...

言語の割合

Javascript 20%

Ruby 16%

Python 9%

Shell 8%

https://github.com/languages

 

github を使用した開発サイクル

1、プロジェクトをフォークする

1、プロジェクトをフォークする

2、プロジェクトを clone

3、fix->commit->push

4、pull requset

5、説得

5、説得後マージ or リジェクト

たまに放置

 

ここからが本題です

 ある日よしだ君は

当時最新版だったrails 3.0.0.beta3 を使って開発をしていました

 

「最新版のRailsを使ってアプリを作ってみるお」

 

カタカタカタカタ

 「よし、後はメールが送信できればおk」

 

カタカタカ.....

 「あれ?」

 

From: do-not-reply@localhostTo: test@localhostSubject: 縺皮匳骭イ縺ゅj縺後→縺_縺斐*縺_縺セ縺Date: Fri, 04 Jun 2010 21:00:00 +0900

縺薙_Γ繝シ繝ォ繧貞女菫。縺輔l縺滓凾轤ケ縺ァ縺ッ縺セ縺_

逋サ骭イ縺ッ遒コ螳壹@縺ヲ縺翫j縺セ縺帙s縲莉·荳九_Μ繝ウ繧ッ縺ォ繧「繧ッ繧サ繧ケ縺励_∫匳骭イ繧堤「コ螳壹@縺ヲ縺上□縺輔>https://localhost:3000/users/confirmation?confirmation_token=X4VLMPc4iqyyVzCTWOK3繧ゅ@縺薙_Γ繝シ繝ォ縺ォ隕壹∴縺檎┌縺_蝣エ蜷医_♀謇区焚縺ァ縺吶′[email protected]縺セ縺ァ縺秘_」邨。縺上□縺輔>縲_

 

「文字化け!?」

 「えっとどうすればいいんだ?」

 

カタカタカタカタ

 

「なんかActionMailerの基底がtmailじゃなくってmailってのになってる。」

 

「ってことはrails2のフィックスのさせ方じゃダメなのかな?」

 

Google様....

 

「....やはりググっても何も出てこないか」

 「よろしい。ならば戦争モンキーパッチ

ングだ」

モンキーパッチングとは?オリジナルのコードを変更することなく動的に格調したり変更したりする方法

class String def cat "nya~" endend# あるいはString.module_eval do def cat "nyan" endend

 

カタカタカタカタカタカタカタカタカタカタカタカタ

 できた

ブログで公開

 

ここから時間は 半年ほど進む

 

「さて久々にまた新しいRailsアプリでも作るかな」

 

カタカタカタカタ

 「よし、後はメールが送信できればおk」

 「あれ?」

 

From: do-not-reply@localhostTo: test@localhostSubject: 縺皮匳骭イ縺ゅj縺後→縺_縺斐*縺_縺セ縺Date: Fri, 04 Jan 2011 21:00:00 +0900

縺薙_Γ繝シ繝ォ繧貞女菫。縺輔l縺滓凾轤ケ縺ァ縺ッ縺セ縺_

逋サ骭イ縺ッ遒コ螳壹@縺ヲ縺翫j縺セ縺帙s縲莉·荳九_Μ繝ウ繧ッ縺ォ繧「繧ッ繧サ繧ケ縺励_∫匳骭イ繧堤「コ螳壹@縺ヲ縺上□縺輔>https://localhost:3000/users/confirmation?confirmation_token=X4VLMPc4iqyyVzCTWOK3繧ゅ@縺薙_Γ繝シ繝ォ縺ォ隕壹∴縺檎┌縺_蝣エ蜷医_♀謇区焚縺ァ縺吶′[email protected]縺セ縺ァ縺秘_」邨。縺上□縺輔>縲_

 

ア〜〜〜〜

 「まだ直ってない」

 「モンキーパッチじゃだめだ」

 

「よろしい。ならば戦争pull requestだ」

pull request とは? github でパッチを取り込んでもらうためのアクション

 

pull requestを考えたものの

 ここで一つの葛藤が生まれる

葛藤

メンドくさ...誰かが直してくれるのを待ったほうがいいんじゃないか?

僕が書くようなコードを送ってもいいんだろうか?

っていうか僕英語できないんですけど (英検3級)

 「悩んだ結果」

 

送ってみた

送ってみた

「やぁマイケル。iso-2022-jpってエンコーディングでメール送りたかったけどなんか今のmail gemじゃ扱えなかったんだ。だから修正してみたよ。」

返事があった

「ありがとう。で、これってruby 1.8でも動くの?」

説明する

「ごめん動かない。Ruby 1.8はマルチバイト文字をサポートしてないからね。Ruby 1.8 で動かした場合単純に何もしないようにしてる。」

他の人のコミットで壊れた

「あそ。HEADをいじったらエラーになったんだ。ルイスってやつの最近のコミットが原因なんだけどrebaseして直して。その後にマージするか決めるわ」

rebase とは自分のコミットを載せる基準コミットを変更する作業

今回の件でいうとコミットの順番を並べ変えてルイスの変更の後に僕の変更を行ったことにした

修正する

「rebaseして直したよ」

野次がはいる

「ちょっと待って、iso-2022-jpってダミーエンコーディングだよ。Rubyがフルサポートしてないのにこのパッチを取り込むのってまずくない?」

反論する

「iso-2022-jpがダミーなんて知ってるよ。encodingが欲しいならgemを作れ。そこは問題なんじゃなくってascii非互換(とされている)とをmail gem がまったく使えない事が問題なんだよ」

そしてマージされる

「ありがとう。マージしたよ」

 

万歳

pull request をして得られるもの

自分のコードが認められた承認欲求

自信がつく

野良ビルドを作らなくていい

プレゼンでしゃべるネタになる

pull request 時の注意点 READMEにcontributeについて書いてある場合はそれに従う

テストは全て通す

インデントなどは元プロジェクトに従う

必要以上のことはしない(ファイル末尾に改行を加えるとか)

pull request 時の注意点pull request 後はそのブランチをいじってはいけない

リジェクトされても泣かない

マージされた暁には勉強会でプレゼンする

リジェクトされても勉強会でプレゼンする

 ソフトウェアは完璧ではなくバグや機能不足があります

 

OSSなプログラムならば自身の手で直すことが可能です

 

せっかく直した(あるいは回避した)のだったらその成果で世界に貢献するというのはどうでしょうか?

 なんちゃって英語でもわりといけました

まとめ

github で pull request をした経験をお話しました

あなたが見つけたバグは直されていないから見つかったものです

待っていても直らないので積極的に直しましょう(報告だけでも十分な貢献です)

まとめ英語のコミュニケーションも辞書やgoogle翻訳を使えばなんとかなります

何よりも我々にはコードというコミュニケーション手段がある

 ちなみに

 パッチを送る以外にもいろいろ出きることはある

出きること

利用して広める

不具合や改善案の報告をする

ドキュメントを書く

パッチを書く

 

RubyもOSSソフトウェアです

 

すでにOSSソフトウェアを利用してなにかしらの恩恵を受けています

 

OSSから受けた恩恵は是非OSSへ貢献することでかえしてください

 

ご清聴ありがとうございました