SEゼミをやったら♥OSSになった

学生向けに勉強会や開発イベントを開催していたら、♥OSSになった人がやったことや思ったことなどを書くことにしました

GitHubでライブラリを公開したら★300以上がついて海外からも注目された学生にインタビューしてみた!

前年開催したリーダブルコード勉強会やアプリコンテストに参加いただいた大学院生 kentya6 (Kengo Yokoyama) · GitHub さんが、Swiftで作った以下のライブラリをGitHubで公開したところ、★300以上ついた! というお話を聞きつけ、その経緯やどんなことが起こったのか、インタビューしてきました!

github.com

-まずは自己紹介ということで、普段行っている研究や開発で、どんなことをされているか、教えてもらえますか?
私の在籍している 筑波大学高度ITコース では、研究ではなくPBL形式のチーム開発を行っていて、顧客の要望をヒアリングして実装に落とし込み、最後に納品するというシステム開発を行っています。
修士2年になってからは別のプロジェクトが始まりましたが、修士1年では施設内ナビゲーションアプリCampusAR を作成していました。
(補足: CampusAR は幾つかのアプリコンテストで表彰されていますe-ZUKAスマートフォンアプリコンテスト2014でグランプリを受賞 | enPiT BizApp × 筑波大学

-開発では普段どのような言語やツールOSSを使ってらっしゃいますか?
言語としては、iOS開発でSwiftObjective-CAndroid開発でJava、 Web開発でHTML5、CSS3、JavascriptPHPScalaを主に使っています。
ツールとしては、Yeoman, Gulp, npm, Bower, CocoaPodsなどで色々自動化しています。また、画像はImageAlphaやImageOptimなどを使って容量を削減してから開発に使ってます。(WebPやBPG形式にもチャレンジしたいです。)

OSSは、AngularJS, Angular-Material, TwitterBootstrap, AFNetworking, SwiftyJSON, Volley, GSONなど、あとはインフラ周りでVagrantやDocker、Ansibleなども使ってます。

 

自作アプリと同様のものがOSSで公開され、バザール形式の開発でどんどん高機能化していくところを見て、OSSの魅力を感じた

-そもそも、このライブラリを作られたモチベーションはどういうものだったのでしょう?
2011年にGPUを使った自作のリアルタイム画像処理アプリ RECamera をAppStoreにリリースしたのですが、2012年に BradLarson/GPUImage · GitHub というOSSGitHubに登場しました。

当時は「競合が出てきたけどまだ大丈夫だなー」と余裕があったのですが、1・2ヶ月経つと多くの開発者がGPUImageにコミットするようになり、あっという間にRECameraで書いてきたコードよりも高機能なライブラリができあがっていきました。

このときにOSSの強さと魅力を実感したことで、前々から私もOSSとして何かライブラリを公開したいとは思っていたところ、去年の夏頃、とあるインターンシップで自身のプロダクトをブラッシュアップするという機会があり、このライブラリを作成しました。

-まさに「伽藍とバザール」を、身をもって体験されたのですね。
このライブラリの開発にはどの程度の期間かけられたのでしょうか?

インターンの応募用に開発して、その期間は、構想2日・実装1日ってとこです。電車で移動時などの隙間時間でやってました。

-では、そのライブラリをGitHubで公開しようと思ったモチベはどういうものだったのでしょうか?
ここ数年のGitHubの利用者数や、私自身が今までGitHubを使っていた(といっても当時は気になるリポジトリに★をつけたりクローンして実行するだけでしたが)こともあり、OSSとしてライブラリを公開するなら、まずGitHubだなーと思っていたので、公開する場所はGitHubしか考えていませんでした。
また、そろそろ私が★をつけるのではなく、★をつけられる側になりたいという思いがありました。

ライブラリ公開後、AppleGoogleSkypeCookpadなどのエンジニアが★をつけてくれて、海外からもオファーがきた!

-★をつけられる側になりたいとはいいですね。
実際にライブラリを公開後、時系列で、どのようになりましたか?

リポジトリを作成して公開した当初は、特に誰からも注目された様子はなく、友達の★が1個つく程度でした。
ですが、今回作成したライブラリはiOSということもあり、最初から CocoaControls
Custom Controls for iOS - Cocoa Controls での掲載を考えていました。
そして1~2週間後に審査が通り、掲載されたところ、そこからユーザがきて★が増えていきました。

授業の休み時間毎に★がどんどん増えていき、テンションがあがったのを覚えています。

CocoaControlsに掲載されて1週間くらいは毎日★20ぐらい増えていて、多い時は一日で★60ぐらい増えたりもしました。
2~3週間もすると★は200個程になり、GitHubSwift部門でトレンド一位をとったり、海外のブログQiitaの記事 でも紹介されるようになりました。
1ヶ月もすると★は300個程になり、iOSBytesというPodcastで紹介されたり、StackOverflowでも 投稿 されていたりするので、世界のどこかのiOS開発者が私のライブラリを使ってくれています。

公開から半年たった今では★370を超え、GitHub AwardsのSwift部門で日本6位、世界52位になってます。

また、海外の会社から一緒に開発をやらないかと誘われたり、フリーランスの招待などが届いたりしました。あとGitHubで公開しているアドレスへのスパムメールも増えました(笑)

-海外からオファーがくるとか、GitHubに世界920万人の開発者がいることを感じますね。ちなみに、★が300以上つくと、どんな気持ちになりましたか?
まずは素直に嬉しいです。また、300以上の★の数や、Issueが飛んでくることで、作成したライブラリを使ってくれている人がいることを実感します。
ですので、もっといいライブラリを作ろう!という気持ちになります。

また★を付けてくれた人の中にはAppleGoogleSkypeCookpadと所属が書かれていたりして、そういう人達からも★をいただけたことがとても嬉しかったです。

公開するにあたって、READMEを充実させ、読みやすいコードを意識した

-公開してからライブラリが使われるように工夫した点はありましたか?
★が多くつくことで、多くの人に見られているという実感がわき、読みやすいコードを書こうという気持ちがより強くなりました。なので、Web上にいくつかあるSwiftのコーディング規約に則ってコードを書くことを意識するようになりました。

また、GitHubで公開するにあたり、READMEを充実させることを第一に考えました。
内容が分からないライブラリを毎回クローンして手元のPCで実行して初めて結果が分かるよりは、ライブラリのページにきた段階で全容を把握できたほうが第三者から見て分かりやすいと思いました。

なので、まずREADMEにデモ用のGIFアニメーションを置き、さらにライブラリでできることの機能一覧、ライブラリの使い方、インストールの仕方を書きました。また、今後開発していく内容も書いたりしました。
(補足 この記事 わかりやすいREADME.mdを書く | SOTA を参考にしていました。)

また、ライブラリのデザイン面も意識しました。様々なアプリのデザイン案投稿サイトなどを見ていると、グラデーションがかかった半円などのプログレスバーを多く見かけました。今回開発したライブラリはグラデーションやプログレスバーの形状指定を1行で簡単に指定できることをアピールポイントとしました。

ちなみに、一度OSSとしてライブラリを公開すると、次は何を公開しようかという気持ちが自然と芽生えてくるようになります。
今では、普段の開発からライブラリ化できるところは切り離し、GitHubに公開するということを考えています。既にいくつかライブラリのストックはあるので、準備ができ次第新たなライブラリを公開する予定です。

現在、注目しているOSSプロジェクトとコントリビュート方法は?

OSS活動に浸かりつつあるkencha6さんが今、注目しているOSSプロジェクトはありますか?
OSSプロジェクトでは、
ResearchKit/ResearchKit · GitHub
angular/material · GitHub
atom/atom · GitHub
facebook/react · GitHub
GoogleCloudPlatform/kubernetes · GitHub
などです。

特にFacebookが公開しているプロジェクトでは
facebook/react-native · GitHub
facebook/hhvm · GitHub
などが興味深いです。

あわせて、mixiのトレーニング系OSS や、デンキヤギ株式会社の就業規則をGitHubに公開する といった動きもいいなと思います。

-挙げていただいたOSSプロジェクトに対して、どんなコントリビュートをお考えですか?
大体以下の順序でやっていけたらと思っています。

  1. コメントの誤字脱字などの修正
  2. マジックナンバーを無くすなどの簡単な修正
  3. 冗長な部分をリファクタリング
  4. この3つをやっていくなかでプログラムを把握して、新機能をコミット

-お手本のようなコントリビュート方針、ありがとうございます!!
最後に、今後どんな開発や技術領域に携わっていきたいとお考えですか?

世の中で広く普及する「前の」分野の開発をしていきたいです。
最近だとIoTが注目されてますが、その分野にもとても興味があり、実際に iOSからLED電球をいじったりBLE - スマートLED電球をiOSから制御してクリスマスな雰囲気を演出する - Qiitaもしています。
また、昨年のSEゼミさんの ウェアラブルガジェットパーティー でGoogleGlassアプリを開発できたことは、まさしく私がやってみたかったものの一つでとてもいい経験でした。

携わっていく技術領域としては狭い範囲では特に決めておらず、まずはネイティブ領域を一番の得意分野とした上で、Web系やインフラ周りもやっていきたいです。

-G.W.中だったにも関わらず、ご協力ありがとうございましたー!!
(インタビュー終わり)


SwiftiOSそのもののオープンソース化は予定がない現状ですが、先日の Rebuild: 88: Five Years Of Terrible Coding (Brian Gesiak) でもSwiftのテスティングフレームワーク、Quickの作者が登場され、周辺のOSSプロジェクトの状況をお話されていたので、本体はOSS/フリーソフトでなくてもOSS活動できる時代になりました。


というわけで、学生のOSS活動に関するインタビューはいかがでしたでしょうか?

私どもは今回のインタビューを聞いていて、先日、YARV等の開発者・笹田耕一さんからOSS Hack Weekendシリーズに参加される学生の方々に向けていただいたメッセージと、ピタリ符合していたことに感動していました!

OSSの世界には、興味深い課題がたくさんあります。
そして、OSSへの貢献は、世界中の利用者へ、すぐに届きます。
それはつまり、皆さんのコードが、
世界を(ちょっとかもしれないけど)変えるということです。
これまで学んできたことを活かしてみませんか?
世界はあなたの挑戦を待っています。”

Ruby 処理系開発者
株式会社セールスフォース・ドットコム、Heroku SMTS
笹田耕一 さま より-


OSS開発に興味のある学生の皆さま、OSS開発のお作法を知る3つの勉強会、リーダブルコード / GitHub / OSS Hack 4 Beginners と、実際にOSSプロジェクトに対してコントリビュートする2日間の開発イベント、OSS Hack Weekend の公式サイトを先週4/27よりオープン&受付開始していますので、ご参加ぜひぜひお待ちしております!

[勉強会]
プログラミングが好きな学生のためのリーダブルコード勉強会 2015 | SEゼミ
プログラミングが好きな学生のためのGitHub勉強会 2015 | SEゼミ
プログラミングが好きな学生のための勉強会 OSS Hack 4 Beginners | SEゼミ

[開発イベント]
プログラミングが好きな学生のための成果発表 OSS Hack Weekend | SEゼミ


また、もしOSS活動をされている学生の方が周りにいらっしゃれば、インタビューしたいと思っていますので、自薦他薦問わず、ぜひお声掛けくださいませー!