ひとりじゃできない！始めようOSS開発！

> これは[Rakuten Advent Calendar 2016](http://qiita.com/advent-calendar/2016/rakuten) の9日目の記事です。

こんにちは、こんばんは、もしかしたら、おはようございます。
2009年度新卒入社7年生の佐藤です。
義務教育で言えば中等部１年生です。好きな言葉は、「カタツムリ:snail:、休まず登れ、富士の山:mount_fuji:」です。

今回はエンタープライズぼっちの話ではなく、自分のOSSの話を書かせていただきます。
ここでOSSは、お寿司:sushi:（OSuShi）のことではなく、オープンソースソフトウェアのことです。
3年前から自作OSSの開発しています。それを開発を継続していく中で、私が学んだことを紹介することで、少しでもOSS開発に興味を持ってくださる方が増えたら良いな、という思いでこの記事を書いております。

# `rakuten_web_service`: 楽天ウェブサービス Ruby クライアント

<img width="1131" alt="rakuten_web_service_top.png" src="https://qiita-image-store.s3.amazonaws.com/0/3662/c388e2f8-5aa1-3dd3-abc8-a572990981b9.png">

楽天ウェブサービスとは、弊社が提供する楽天市場の商品や楽天ブックスの書籍やDVDなどの商品を検索するためのウェブAPIです。自分が開発している[rakuten_web_service]( https://github.com/rakuten-ws/rws-ruby-sdk)は、この楽天ウェブサービスをRubyから検索しやすくするためのライブラリです。

開発を始めたきっかけは、自分が欲しいと思ったからです。気になったキーワードで商品を定期的に探したり、欲しい本の価格を定期的に確認したりするために、楽天ウェブサービスを使っていました。他にもいくつかライブラリはあったのですが、一部のAPIしかサポートしていなかったり、JSONレスポンスが単にHashとして返すだけだったりと、使いづらさを感じていました。これが開発の動機となりました。そして、弊社の公式SDKがPHPしかなかったのも動機の1つです。もっと、最新バージョンのAPI楽しく書けるようなライブラリを目指して開発をはじめました。開発者が楽しく書けるように、かゆいところに手が届くような仕組みを提供しています。例えば、「あるキーワードで一番最初に見つかった商品のジャンルのランキングTOP3」はこんな感じで書くことができます。

```ruby:sample.rb
RakutenWebService::Ichiba::Item.search(keywrod: 'BABYMETAL').
  first.
  genre.
  ranking.first(3)
```
￼
ここでは商品検索APIとジャンルAPI、そしてランキングAPIの3つのAPIを利用していますが、1つのメソッドチェーンで書けます。レスポンスから次のリクエストの値の引き渡しなどは、わざわざ書く必要も無く、よしなにやってくれるんです！という自分が欲しいものを自分で作って、OSSとして公開し、今では[弊社の公式SDK](http://webservice.rakuten.co.jp/sdk/)として掲載してもらえるようになりました:grin:

ですが、その開発もすぐに手が止まってしまいました。それは、業務としてやっているわけではないですし、自分が欲しいものを自分が満足する分だけ作りきってしまったからです。

# 再開のきっかけ

開発の手が止まってからおよそ1年が過ぎた頃に、OSS Hack 4 Beginners という採用イベントがありました。これは、クリアコードの須藤さんとSEゼミさんが開催した大学生向けのワークショップで、OSSに貢献したい学生に最初のコントリビュートを手助けするというものでした。そこに自分はメンターとして参加しました。ワークショップでは、学生が得意とするプログラミング言語ごとにテーブルが分かれており、自分はRubyグループのサポートをしました。その時に、題材とするOSSとして、自分のrakuten_web_service が使われました。
この時、「大したバグや不具合は見つからないだろう」と高をくくっていたのですが、お恥ずかしながら、色々見つけてもらいました。
見つけられた原因は、開発者である自分とは違う視点だったからです。彼らはREADMEを見ながら始めたのですが、そこに書いてあることが古いため、その通りにやっても動きませんでした。使い方を知っている自分には無い視点でした。この時コントリビュートしてくれた学生さんたちは、Rubyを始めてまだ1年足らずの人たちばかりでした。だからこそ見える視点というものがあったのだと思います。その様子は、個人のブログに書いたので、そちらをご参照ください。

* [SEゼミ OSS Hack 4 Beginners にメンターとして参加してきた。 Satoryu's Diary(2015-06-27)](https://satoryu-diary.herokuapp.com/20150627.html)

また当初は想定していなかった使われ方もしています。
[産業技術大学院大学のenPiTプログラム](http://enpit.aiit.ac.jp/)の演習課題で楽天ウェブサービスを利用したRubyのアプリケーションが作成されていたり、[TechAcademyが提供する技術研修](https://techacademy.jp/rails-bootcamp)の中で`rakuten_web_service`を利用したアプリケーションが題材として扱われています。たまたまTechAcademyさんとは共通の知り合いがいたので、使い心地やこうして欲しいリクエストなど無いかをメールで伺うことができました。この時も、自分だと気づきづらかった指摘を沢山いただきました。この時のフィードバックに可能な限り対応した結果、2年半ごしの念願であるversion 1.0をリリースできました :tada:

# OSS開発者の気持ち

私はもっとOSSに関わってくれる人が増えると良いと思っています。その方が世の中楽しくなりそうですし、何よりもコミットしていく中で得られるものがあります。そう思いながらも、躊躇してしまっている方も多いのではないかと推察しています。「ちゃんとしたレポートを送らないと、すぐにチケットが閉じられてしまうのでは…」とか「こんなコードをプルリクエストで送ってもすぐに却下されそう…」とか色々不安があると思います。ですが、そんな過剰にマッチョ :muscle_tone2: な開発者を想像する必要はありません。OSS開発者は常にフィードバックを歓迎します。むしろフィードバックを歓迎しないOSSはすぐに消えて存在しないと思います。

有名なOSSは開発者も多く、そして利用者も多いのでフィードバックが沢山得られます。しかし、そういったOSSになるまで、多くのOSSでは開発者が少なく、利用者も少ないものです。そんな小さいOSSの開発者は、新機能やバグなどを自分で探し、見つけなければいけません。そんな時、開発者は、利用者も少ない中で、

* 新機能は本当に求められているものだろうか？
* 自分の環境以外で本当に動いているのだろうか？
* このドキュメントで足りているのだろうか？

など、利用者がわからないことによる不安が常につきまとっているでしょう。ひとりで開発しているうちは、その個人の見える範囲での改善しかできません。それが一通り終わってしまったり、関心が別なところへ移ってしまったら、そこで開発は止まってしまいます。どのように利用されているか、グーグルでブログ記事などを検索したり、Githubで利用しているプロダクトのリポジトリを検索して、利用者の情報を得ることはできますが、なかなか見つからないものです。
そんなさなかに届けられるフィードバックは、砂漠をさまよっている時に得られる水のように貴重なもので、その大小にかかわらず開発者の次の一歩の力強い支えになります。

# OSS開発を始めてみよう！

このようにOSS開発はひとりではできません。OSS開発者は常に利用者の声を求めています。これは裏を返せば、普段からOSSに貢献するチャンスはあるということです。普段の業務やプライベートの開発で利用しているOSSで、「この機能はもっと○○だといいなぁ」や「このドキュメントに、この項目が欲しいなぁ」など思うことがないでしょうか？ それをそのままGithubのIssueで伝えたり、開発コミュニティのメーリングリストに投稿したり、ドキュメントのタイポを修正したものをプルリクエストとして送ったりするだけでも、とても感謝されるコントリビュートとなるでしょう。皆さんが気づいた小さなことが小さな貢献として、そして、いずれ社会の大きな貢献の1つとなるのだと思います。

「とはいっても、その最初の一歩をどう踏み出していいかわからない…」という方もいると思います。そんな方の最初の一歩を支援するワークショップ[OSS Gate](https://oss-gate.doorkeeper.jp/)に参加してはいかがでしょうか？
普段からOSSにコントリビュートしているメンター達が、ビギナーの皆さんの最初のレポートやプルリクエストの作成を手助けするワークショップです。次回は来年（といっても来月）の1月21日に札幌、28日に東京で開催されます。

ということで、みなさんの小さな気付きを伝えることが、OSSの発展を支えるものと信じています。この冬に、みなさんも何か気づいたことがあれば、それを伝えることからOSS開発を始めてみませんか？