ライブラリを作るに至った経緯、公開して、それから

cUkfbDRc

こんぬづは、今週末は仙台に帰る用事と太極拳の講習会が重なったので武術してきます田中です。

今回のこの記事はSwift愛好会アドベントカレンダー10日目の記事です。年末振り返り企画「ライブラリ開発編」。
CocoaPods対応したiOSのScrollingFollowViewというライブラリを公開した経験を元に内容を書いていきます。

対象読者

  • ものづくりしてる人
  • これからライブラリを作って公開してみようかなと思っている人
  • 作っているものがあるけど公表するのが怖いと思っている人
  • IT業界の楽しい綺麗な面を見たい人

などなど。

もくじ

 

この記事で言いたいこと

  • ライブラリ、OSSの公開は難しくはない
  • 日々の開発、生活の中で感じる「ツラミ」を活かす
  • ライブラリを公開すると楽しい

 

公開してからの進捗・成果報告

祝100スター!!???

15194460_1179558675462534_503464188438228793_o

7月22日公開から約4ヶ月経った11月30日でこの結果となりました。これが早いのか遅いのかは比較対象がないのでわからないです。;^^)

 

ライブラリを作ろうと思った動機

案件で作りきれなかったUIへの悔しさ

「作りきれず悔しい」とか「UIKit(フレームワーク)柔軟性無さすぎなんだよおおおおおぉぉ!!!」という開発の中で感じるツラミが動機です。ツラミ駆動開発です。

背景は以下のスライドより。

このスライドをまとめるとこんなことを言っています。

  • 案件に取り入れたいUIがあった
  • 時間切れで妥協策をとった
  • 実装しきれず悔しかったので個人でライブラリとして作っていった
  • 元々の妥協策に問題が発生したので作っていたライブラリを案件に導入してみたら良いこといっぱいだった

先輩の存在

もとより「デキるエンジニアはOSSライブラリでスターをじゃぶじゃぶ稼ぐ」というイメージがあり、憧れていたのでライブラリを作ることに興味がありました。その思いから昨年はこんなイベントに出てみたりしました。

このイベントのメンターをしていたのがもともと自分がインターンをしていた会社の先輩で、Swiftで書いたUIライブラリのスター数が1000を超えて、大ヒットさせていた人でした。身近にそういう人がいたというのも大きな要因の一つでした。

 

ネタ探しの方法

日々の開発や生活の中で感じるツラミを見つけることがネタ探しの秘訣です。そのツラミの度合いや、同じように感じる人が多いほど作るものは広まると考えています。これはライブラリ開発でもそうだし、考えてみるとアプリ開発でも同じことが言えると思います。ツラミを解決してくれるライブラリ・ツール・アプリを作ればおk。

例えば自分の場合だとこんな感じ。

  • フレームワークに感じるツラミ
  • クリーンアーキテクチャでアプリを作るときにファイル数やコード量が増えるツラミ
  • ブログ書きのスピードが上がらなくてツラミ
  • Twitterでお気に入りの管理ができなくてツラミ
  • 寄り添うパートナーがいなくてツラミ

などなど。

 

公開してからの反応

海外との交流

一部海外っぽいアカウントからスターをもらったり、知らないところでforkされてたり、Issueをもらったり。

スクリーンショット 2016-12-07 14.44.46

スクリーンショット 2016-12-07 14.46.46

プルリクをもらえた

「ここのコードはこう書いた方が良い」、「Carthage対応した!」、「Xcodeの最新版で動かないから直した」などのプルリクをいただいて自分一人だと追いつかない改善に対応することができました。特にソースコードに対するツッコミは自分よりも良い例示がいただけるのでとても勉強になります。

スクリーンショット 2016-12-07 14.29.26

スクリーンショット 2016-12-07 14.30.38

スクリーンショット 2016-12-07 14.29.37

(Carthage実はまだ使ったことなくて...まだCarthage対応できてない...、プルリクもらったのに申し訳ない...!)

 

広報活動

ライブラリを作った後の話です。どんなに良いものを作っても人の目に触れなければ使ってもらえません。そのためにやった・これからやろうと思っている広報活動についても紹介してみます。

広報活動をする上で以下の資料を参考にさせていただきました。

勉強会での紹介

自分で作ったものを知ってもらうために、勉強会などに参加して紹介の発表をしました。直接足でスターを稼ぐ方法です。単純にスターを稼ぐということ以外にも良いことがありました。

「ちょうどツラミを感じていた部分だよ!」と役立ててもらえそうな声、「同じようなものをプロジェクトの中で実装していたよ」というやはり同じところにツラミがあるのだという確認。そういう生の声が聞けるのはライブラリを作っていくうえで良いモチベーションアップにつながりました。

awesome-iosに追加してもらう

iOSのエコシステムに則ったすごいものをキュレーションしたリポジトリであるawesome-iosに作ったものを追加してもらうようにプルリクを投げて、マージしてもらいました。

スクリーンショット 2016-12-07 14.25.55

ついでにそれまでなかった「UIScrollView」の項目も追加してもらう流れになった。

スクリーンショット 2016-12-07 14.26.09

これからやろうと思っていること

すでに追加してもらったawesome-ios同様、ライブラリをまとめて紹介しているものが他にもいくつかあるので、そこに追加してもらうよう働きかけることを今後やっていこうと思っています。

 

まとめ

ライブラリ、OSSの公開は難しくはない

OSSライブラリを公開するということは、実際にやってみるまでハードルの高いものだと自分も思っていました。しかし「めちゃくちゃ便利なものを作る」、「素晴らしいコードでソフトを作る」ということと切り離して考えるならばライブラリを作って公開すること自体はハードルの高いものではありませんでした。GitとGitHubの使い方がわかって、iOSならばCocoaPodsへの公開方法を調べて学べばそれだけでオーケーです。その方法を解説する記事も数多く公開されています。

iOSのライブラリネタに関しては、UIKitフレームワーク周り向けのライブラリが比較的作りやすいのかと思いました。

例えばUITabBarController, UITableViewControllerなどのよく使うUI要素を考え直してみると、デザインのカスタマイズがとてもしづらいと感じたことのある人は少なくないのではないでしょうか。
例えばUIScrollView, UICollectionViewを考え直してみるのであれば、iOSに慣れた人間でもたまーにハマったり、やりたいことを実現するための計算処理が面倒くさかったりなど感じたことがあるのではないでしょうか。

そういう箇所がライブラリ化する良い着眼点なのではないかと自分は考えます。

日々の開発、生活の中で感じる「ツラミ」を活かす

ただ出すだけではなく「めちゃくちゃ便利なものを作る」、「素晴らしいコードでソフトを作る」ということをしていくにはひたすら作って公開していくのが良い方法です。そうしていくほどに、さらに日々の生活や開発の中での「不便」や「ツラミ」に気づくことができます。それに気づくことが良いものを作る上で必要なのだと、作ってみて知りました。負の要素が大きいほど、その問題を解決してくれるライブラリやソフトの価値は高まります

ライブラリを公開すると楽しい

自分では持っていなかった着眼点を得られたり、より良いコードの書き方を他者から得ることができるのでこんなに楽しいことはありません。そして自分が作った物を題材に勉強してくれる人がいたり、プロダクトに組み込んでみてもらったりするのは言うまでもなく幸せです。ライブラリ化しなくても、サンプルコードを公開したり、Gistにコード片を書いてネットに流すだけでも様々な意見をもらえたりするのはこの業界の良いところに思います。

そしてマサカリは怖がらなくていいと個人的には思います。言い方が怖い人は確かにいるけれど、そのことに対して感情的になる必要はなくて、良くないと言われる理由を理解して、新しい知識を得られる有益な機会だと考えると宝になります。

ライブラリ開発を通した自分を振り返る

こんな記事書いちゃうくらいだし自分は自己顕示欲とか承認欲求が強いのです。「構ってちゃん」だと言っても過言ではないかもしれません。

ですが、それは良くも悪くも認識していてそういう欲求を満たすためにライブラリを作って公開して、意見をもらうのは性に合っていたと感じました。まず初めに、自分の作ったものを見て、使って欲しいという、ヒトなら誰しもが持つ欲望をさらけ出してください。

星を集めることの意味はそういう欲求を満たすためのものでもありますが、「そのライブラリが信頼して使えるものだ」ということを表す指標である認識も忘れてはいけないと思いました。人のためになるものを作って、その期待に応える体制を持って、意味のある星を集めていきたいですね。

以上、長くなりましたがお付き合いいただきありがとうございました。m(_ _)m

 

参考・関連

AWS Cloud Roadshow 2017 福岡