Trema のコミッタになるには?

あなたも Trema のコミッタに仲間入りしませんか?ふつうコミッタになるには Trema のパッチを書く必要があるわけですが、実はちっともむずかしくありません。ここで説明するのは Trema に詳しくなくてもすぐにできて、しかも貢献度が高く喜ばれるパッチの作りかたです。

 Trema をフォークする

まずは github のページで Trema をフォークして git clone します。

% git clone https://github.com/yasuhito/trema.git
Cloning into 'trema'...
remote: Counting objects: 13823, done.
remote: Compressing objects: 100% (3912/3912), done.
remote: Total 13823 (delta 10603), reused 13016 (delta 9857)
Receiving objects: 100% (13823/13823), 12.67 MiB | 1.27 MiB/s, done.
Resolving deltas: 100% (10603/10603), done.
% cd trema

開発用パッケージのインストール

README.md に従って依存パッケージをインストールしてください。加えて、テストを実行するのに必要な gem を bundle install コマンドでインストールしてください。

% sudo apt-get install gcc make ruby rubygems ruby-dev irb libpcap-dev libsqlite3-dev
% bundle install
Fetching gem metadata from http://rubygems.org/.......
Enter your password to install the bundled RubyGems to your system: 
Using rake (0.9.2.2) 
Using builder (3.0.0) 
Using diff-lcs (1.1.3) 
Using json (1.7.3) 
Using gherkin (2.11.1) 
Using cucumber (1.2.1) 
Using sexp_processor (3.2.0) 
Using ruby_parser (2.3.1) 
Using flay (1.4.3) 
Using flog (2.5.3) 
Using rcov (1.0.0) 
Using rdoc (3.12) 
Using redcarpet (2.1.1) 
Using ripper_ruby_parser (0.0.8) 
Using ruby2ruby (1.2.5) 
Using reek (1.2.12) 
Using roodi (2.1.0) 
Using rspec-core (2.10.1) 
Using rspec-expectations (2.10.0) 
Using rspec-mocks (2.10.1) 
Using rspec (2.10.0) 
Using trema (0.2.3) from source at /tmp/trema 
Using yard (0.8.2.1) 
Using bundler (1.1.4) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

パッチを書く

誰でも作れてしかも喜ばれるパッチのひとつに、ソースコードの行末の余分な空白を消すものがあります。たとえば私が書いたこのコミットを見てください。Trema はソースコードの見栄えにとてもこだわっているので、こういう単純なパッチも歓迎されます。

作り方はとても簡単です。行末に余分な空白のあるファイルを Emacs で開き、M-x delete-trailing-whitespace するだけです。さあ、これで最初のパッチができました!

 テストを実行する

コミットする前にパッチが Trema を壊していないか、必ずテストスクリプト ./cruise.rb を実行してください。実行には 15 分くらいかかりますが、テストにすべて成功すれば「テストされた正しいパッチ」と言えます。

% ./cruise.rb
mkdir /tmp/trema/objects
tar -xzf /tmp/trema/vendor/openflow-1.0.0.tar.gz -C /tmp/trema/vendor
cp -r /tmp/trema/vendor/openflow-1.0.0/include/openflow /tmp/trema/objects

(省略)

Summary
================================================================================

- Total execution time = 941 seconds
- Overall coverage = 68.9% (28/76 files not yet tested)

コミットして pull-request を出す

できあがったパッチをコミットします。コミットメッセージはこの場合 “Delete trailing whitespaces.” で良いでしょう。

% git commit -m "Delete trailing whitespaces."
[develop 83a4cec] Delete trailing whitespaces.
 1 file changed, 5 insertions(+), 5 deletions(-)
% git push

あとは Github 上で pull-request を出してください。Trema のメンバが精査したあと、Trema 本体にマージします。これで晴れてあなたもコミッタ入りです!

今回紹介したのはごく簡単なパッチでしたが、まったく同じ流れでより大きなパッチも作ることができます。まずは今回のような簡単なパッチ作成に慣れてもらうことで、「自分も Trema の開発に参加してみたい!」という人が増えるといいなと思います。

Leave a Reply