エンジニアHubPowered by エン転職

若手Webエンジニアのための情報メディア

学び、開発し、発信せよ。iOS-Samplerの作者・堤修一がOSS開発で得た、スターよりも大事なもの

ブログ、書籍、そしてOSS。iOSエンジニアの堤修一さんは、常に「発信」のこだわり続けてきました。数多くのスターを獲得した『iOS-Sampler』シリーズも、発信活動の一環だと説明します。なぜここまで発信にこだわるのか、堤さんに聞きました。

「昔は、他のエンジニアと会話するのも怖かった。やりとりされる言葉の意味すら分からなかったので」

iOSエンジニアの堤 修一(つつみ・しゅういち/ @shu223さんは、駆け出しだった過去を振り返ってこう言います。30歳を超えてから本格的にプログラミングに取り組み、あるときは「できないやつ」と見なされ、窓際も経験した堤さんを磨いたのは、強い学習意欲と学習したものを様々な形でアウトプットする、発信力。そして発信から次のミッションを獲得するという、サイクル作りにありました。やがて、獲得したスター数が2万を超え、iOSエンジニアコミュニティにおいて大きな存在感を放つほどに。

大きな反響を獲得したOSS『iOS-Sampler』は、こうした学習〜開発〜発信というサイクルの中から偶発的に生み出されたものだと、堤さんは言います。世界のiOSエンジニアから参照される、iOS-Samplerの裏側にある、エンジニアの成長と生存のための戦略を聞きました。

朝・昼・晩ひたすらコードを書き、腕を磨いた日々

──まずは堤さんがプログラマになった経緯について教えてください。

 僕、プログラマとしては相当に遅咲きだったんです。情報系の大学を卒業しているものの、あまり勉強熱心な学生ではなかったので、プログラムを書くことは本当にできなかった(笑)。大学卒業後に結構大手の技術系の会社に就職したんですが、肩書き上はエンジニアだったもののプログラムを書く仕事はしていないんです。そりゃあ、プログラムを書けないやつにエンジニアの仕事は与えられませんよね。ですから、当時は外部との調整役のような仕事がほとんどでした。

何年か経つとだんだん物足りなくなってきて、週末にスクールに通ってはプログラミングを勉強し、ある本をきっかけに知った面白法人カヤックにプログラマとして転職しました。その頃、年齢は31歳でしたね。

堤 修一さん:大学卒業後、大手通信会社や大手メーカー勤務を経て、面白法人カヤックに入社。iOSエンジニアとしてのスキルを積み、その後、長年の夢であったアメリカ企業への転職を果たす。現在はフリーランスのエンジニアとして、数多くの開発案件に携わる。「BONX」や「Moff」など多数のアプリ開発を手がける。著書に『iOSアプリ開発 達人のレシピ100』、共著書に『iOSxBLE Core Bluetooth プログラミング』『iOS 11 Programming』がある。

──言葉の通り、遅咲きですね。相当に努力してiOSアプリ開発の技術を身につけたのでは?

 カヤック入社後は、とにかく朝から晩まで毎日ずっとコードを書いていました。スキルがない焦りもありましたが、当時はコードを書くのがとにかく楽しかったんです。当時、すでに結婚していたのですが、オフィスから徒歩5分の家に住んで、通勤にかかる時間を短縮して、その分プログラミングに取り組む時間を最大化するようにしていました。

一回すごく悔しかったことがあって。人気マンガの『ワンピース』をテーマにしたアプリ開発案件がカヤックに来たんです。当時ジャンプの誌面ではちょうど頂上決戦の連載中で僕もめちゃくちゃハマってて、「やりたいです!」と担当ディレクターにメールしたんですけど、すでに他の人がアサインされていたんです。

すごくショックで、会社に入ったiOS関連の仕事はまず自分に振られるようなポジションにつかないと、と思ってさらに努力するようになりましたね。

──そもそも、なぜiOSに本腰を入れて取り組もうと考えたのでしょうか。

 本当は、僕はFlasherになりたかったんです。大企業時代にスクールに通ってAction Scriptを勉強して、カヤックに二度目の応募をした、という経緯があります。しかし、当時のカヤックにはすでにFlasherがいて、初心者Flasherは必要なかったわけです。

iOSはFlashと同じように成果物がエンドユーザーから見えるプログラミングなので、そちらにも興味はありました。カヤックにもiOSを書けるエンジニアはいたのですが、みんなFlashやサーバーサイドなど、それぞれの専門で忙しく、僕はちょうどサーバーサイドエンジニアとして使えなさすぎて仕事がはがされた状況だったので、iOSに専念することができた。だから、ひたすらiOSの勉強をして、「カヤックに来たiOSアプリの案件は全部担当したい」くらいの気持ちで働いていましたね。

おりしも、スティーブ・ジョブスがFlashはiPhoneで動かさない、とコメントしたころです。僕にとってはしめたもんです。なにしろ、これで凄腕のFlasherはiOSの世界には来にくい、となったわけですから。多くの人にとってジョブスの判断はいい迷惑だったでしょうが、僕にとってはラッキーでした。元寇で神風が吹いて強力なモンゴル軍が退却していったような感じです(笑)。

──時代も味方したと(笑)。とはいえ、なんのお手本もない状態から技術を学ぶのは難しいと思います。iOSアプリ開発の技術を習得するため、参考にしたコードはありますか?

 それに関しては良い話があって。僕がカヤックで最初に担当した案件は、とある大手デリバリーフードチェーン店のアプリだったんですね。注文すると、iPhoneのGPS機能を使ってメニューを現在位置に配達してくれるというものでした。

僕はアプリの機能改修を担当していたんですが、バージョン1のソースコードはなんと当時外部からiOSエンジニアとして開発に参加していた岸川克己さんが書いていたんです。

──なんと! ここで岸川さんと繋がってくるんですね。不思議な縁というか。

 コードにはiPhoneアプリ開発のエッセンスが詰まっていました。画面がたくさんあって、GPSやフォーム入力、決済、ゲームなど多種多様な機能が網羅されている。まるでiOSアプリ開発のサンプルコード集みたいでした。僕にとっては教科書のような存在だったんです。

嫌々ながらスタートした情報発信が、人生を変えることに

──堤さんは情報発信やOSS開発を積極的に行っていますが、何をきっかけにそれらを始めたんですか?

 最初は嫌々ながらのスタートでした。カヤックでは期ごとの目標を立てる必要があったんですが、どんな内容にしようかと先輩エンジニアに相談したら、「プレイヤーとしてずっとやっていきたいなら、特定の分野で頭角を現すぐらいでないと厳しい」「手始めにOSSでも出してみたら?」と。いやいや自分のソースコードを晒すなんて怖すぎるし全然やりたくない、と返すと、「じゃあまずはブログでも書き始めたら?」と言われて、それでブログを始めたんです。

──そこがスタート地点なんですね。

 最初は内容に自信がないからとにかく数を書くことにしたんです。3か月くらいは毎日書いていたかな。1つひとつの記事クオリティーはたいしたことないけれど、数がたくさんあるからまあいいでしょう、みたいな(笑)。

でも、3か月も書いていたら徐々にクオリティも伴ってきて、はてなブックマークも少しずつ付くようになって。だんだんと発信者としての自我が芽生えてきたという感じですね。

──その流れで、GitHubにOSSをアップするようになったのでしょうか。

 初めてアップしたのは、ブログを執筆する過程で書いたサンプルコードでした。当時はGitの使い方にも全然慣れていなかったし、GitHubがGitをHubする場所だということすら分からないまま使っていたくらいですから(笑)。慣れない手つきで、チュートリアル通りにサンプルコードをアップしました。それが最初ですね。

──そこから徐々に、OSS開発に乗り出していったのですね。手応えを感じてアップしたのはどんなものだったのでしょうか?

 メモリの消費量をUI上に表示してくれるStatsというライブラリです。当時はXcodeでその値を見られる機能がなかったんです。自分で使いたくて作ったものですが、数十スターほどついて、当時としては手応えを感じました。

Statsのデモ画像。

他には、RPGゲームのようなUIやエフェクトを生成できるUIKitForGameとか。エゴサーチするとけっこう評判が良くて、嬉しかったですね。

▲UIKitForGameのデモ。こうしたRPGゲームの動きを生成できるOSSだ。

勉強がてらアップしたiOS-7-Samplerが意図せず大ヒット作に

──その後、堤さんの大ヒット作である『iOS-Sampler』シリーズが生まれます。

 僕が出したOSSで世の中に大きなインパクトを残せたのはiOS-7-Samplerが初めてで。まさか自分が影響力のあるリポジトリを作れると思っていなかったので、びっくりしました。「うおっ、何千スターもついてる!」みたいな。

──iOS-7-Samplerは、どのような経緯で誕生したんですか?

 当時の僕はとある海外スタートアップで働いていたんですが、その会社での仕事は「最新技術を追いかける」というタイプではなかったんです。それに仕事が忙しかったので、プライベートで新しいiOSの情報を学ぶ時間もありませんでした。

その後、日本に戻ってきたのと時期を同じくしてiOS 7がリリースされたんです。サンプルを作りつつiOS 7の新APIについて学んでいたんですが、せっかく作ったんだから、ついでにそのサンプルコードを公開しようと考えたんです。そうして世に出たのがiOS-7-Samplerでした。

▲iOS-SamplerはこうしたiOSの新機能のデモが動く、文字通りのサンプラーだ。こちらはMetalによるリアルタイム画像認識機能のデモ。画像はiOS-10-Samplerより。

▲iOS-Samplerには多数のサンプルコードが含まれる。こちらはUIViewPropertyAnimatorの新機能のデモだ。「面倒でもデモ画面のスクショやgifを付ける」と堤さんは言うが、これも発信を適切な形で行うための、大事な作業だと続ける。画像はiOS-10-Samplerより。

──そのリポジトリに、ものすごい数のスターが付いたと。

 僕の場合、新たな仕様のドキュメントとか読んでも、あまりイメージできないので、実際に動くものを作って理解しようとします。言ってしまえば、僕の勉強のために作ったOSSだったのですが、意外と需要があったんです。

iOS-8-Samplerもやっぱり自分の勉強のためにコードを書いてアップしたものでした。これもヒットして。「7も8もすごく好評だったから、次もやるでしょ」という流れで、iOS-9-SamplerやiOS-10-Samplerを出していったんです。

──iOS-11-Samplerは出していないですが、それには何か理由があるんですか?

 他の仕事にどうしても集中したかったんです。具体的には、書籍執筆の仕事に。 iOS 11が出たとき、僕はアメリカの会社に就職してフルタイムで働いていました。その頃に、『iOS 11 Programming』という書籍のARKitとMetalの章を執筆することになって。

▲『iOS 11 Programming』は、堤さんをはじめ数多くの著名iOSエンジニアたちが共同執筆した1冊だ。岸川克己さんも著者として名を連ねる。iOS 11について必ず押さえておくべき要素を網羅した内容となっている。

僕はその時点でARKitはまったく触ったことがない、Metalもほぼ初心者、という状況でした。ただ、そのどちらにもすごく興味はある。ここで本を書きながら勉強していけば、これらの分野のスキルがついて、さらにその本の内容が良ければ「ARKit、Metalといえば堤さん」という権威になれる可能性もある。逆に中途半端に書けば勉強にもならないしその分野の権威にもなれない。これはベットするところだ、と考えて、会社の有休を全部使って、iOS-11-Samplerの制作を見送って、書籍執筆にできる限りのリソースを投入することにしたんです。

書籍執筆のためにサンプルコードを書いたのですが、本を買った人にしか届かないのはもったいない。だったら横展開しよう、とコードを1つにまとめて公開したリポジトリがARKit-Samplerでした。

スターの数よりも重要なOSSの価値

──ご自身の興味や仕事の中から生まれたものをOSSとして公開されてきたのですね。そしてそれがエンジニアとしてのステップアップにつながっていった、と。

 そうですね。ただ、今はあまりリポジトリのスター数を増やすことを重視していないんです。手前味噌になりますが、僕が個人で獲得している合計スター数は2万3000を超えています。でも、これが2万6000になっても、もうそれほどインパクトはない。スター数よりもむしろ、発信した情報が「その後、何に結びつくのか?」の方が重要だと思っています。

例えば、iOS-Samplerシリーズは確かに多くのスターが付いたわけですが、それらが直接的に何かの仕事に結びつく可能性は低いです。なぜなら、掲載されているのはあくまでシンプルなソースコードで記述されたサンプル集であって、言ってしまえば誰でも書けるものですから。

一方で、たとえスター数は少なくても、特定の技術に特化したものの方が仕事に結びつく可能性は高いです。たとえば僕がアップしている他のリポジトリでSlowMotionVideoRecorderというものがあって、付いているスター数はiOS-Samplerシリーズよりずっと少なく、数百スターくらいですが、お問い合わせをもらうきっかけになっています。おそらくiOSで同様の機能を実現しようとしてそのリポジトリに行き着いた方々から「スローモーション撮影機能の実装を仕事として頼めないか」という案件の相談が海外から何度も来たことがあります。ARKit-SamplerやwatchOS-2-Samplerも、iOS Samplerシリーズよりはスターは少ないですが、それぞれ海外からの案件獲得に繋がっていますね。

だから最近は、「GitHubにアップしたソースコードは、今後どんな仕事に結びつくか?」を考えながらやっています。

自分が過去にとった行動は、必ず何かの形で“その後の仕事”につながってきます。OSSでの活動も、本を書く作業も、仕事でソースコードを書くことも。だからこそ、「今後自分はどうなっていきたいのか」「将来的にどのような形でリターンを得たいのか」を考えて行動するようにしています。

▲堤さんはベストな学習方法や情報発信方法をいつも模索し続けているそうだ。そんな彼が「技術の発信でも収入が得られる時代が到来しつつあるのではないか?」と課題提起したブログ記事「技術書でご飯は食べられるのか? #技術書典」は、SNS上で大きな話題となった。

自己実現のためのOSS。そんなスタイルがあってもいい

──堤さんにとっての情報発信やOSSは、自分の望む環境を実現するためのものなのですね。

 そう、自己実現するための手段なんです。「ある時期」に「ある情報」を世の中にプッシュすることで、何か起きてほしいことがある。だからこそ行動しています。こう言うと語弊があるかもしれませんが、「コントリビュートしたい」という気持ちよりも、OSSをツールとして活用し、自分の人生を謳歌したい気持ちの方が強いんです。

──情報発信やOSSの活動は、堤さんのキャリア形成に寄与してくれましたか?

 はい、大いに。僕は今でも、自分のエンジニアとしてのスキルは飛び抜けて高いわけではないと考えています。他の方が作ったOSSはどれを見ても勉強になると感じますし、とてもじゃないけど自分で作れるイメージがない(笑)。じゃあ他のエンジニアの方と何が違うかというと、発信を軸に勉強をしていったことや、発信を軸に自分のイメージを作ってきたこと、そして発信を軸に魅力的な仕事を呼び寄せるようにしてきたこと。発信こそ、自分が他のエンジニアと差別化できている部分なんです。

過去から現在に至るまで、OSS、ブログ、書籍とコンスタントにアウトプットを続けてきました。それができたのは、情報発信こそが自分のエンジニアとしての生命線だという自覚があったからなんです。

──忙しくて情報発信をやめてしまうエンジニアが多いなか、堤さんが情報発信を続けられる理由はそこにあったのですね。

 よく「ブログを書いたほうがいいとは思いつつも、書く時間がない」と聞きますが、それは僕からすれば「仕事をしたけど請求書を書く時間がない」と言っているのと同じように感じます。「今月は時間がないから、100万円分の請求書を出しませんでした」っていう人は絶対にいないでしょう(笑)。それと同じ感覚で、面白い仕事を経験したり、新しい技術を身に付けたらそのことを世に発信するのは、僕にとっては明確に実益を伴うことなんです。僕はブログを書くために仕事を断ってでも時間を確保することもあります。

せっかく自分が努力したのだから、なんらかのリターンを得た方がいい。勉強したことや作ったプロダクトを世の中に発信していくことで、キャリアを自分の力で切り拓いていけます。実際に、僕はそうやってたくさんのリターンを得てきました。

もちろん情報発信の優先度はエンジニアごとに違うと思います。でも、もし自分の興味のある仕事を呼び寄せたいなら、ぜひ勉強と発信の両方を続けてみてください。自分のやりたい仕事を自分で呼び寄せられるようになれば、絶対にもっとエンジニアの仕事が楽しくなるはずです。

関連記事

取材・執筆:中薗昴

取材協力:FARO神楽坂