あなたも 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 の開発に参加してみたい!」という人が増えるといいなと思います。