CTOとして、プログラマとしての2016振り返り

2016年、俺がCTOとして、一人のプログラマとしてやってきたことを振り返ろうと思う。結構雑に書いてるのでアレ。

CTOとして

インプットとアウトプットの促進

Qiitaアドベントカレンダーへの参加や、皆が書いた記事をSlackのチャンネルに自動ポストするようにbot作ったり(自分が書いた記事を皆が読んでフィードバックしてくれるの単純に嬉しいよね?)、自分が知った良さ気な情報を積極的にシェアしたり、インプット・アウトプットがされるように意識して行動した。

最近ではメンバーがつぶやき勉強会なるものを頻度高く開催していて、小さい技術ネタを気軽に話せる場ができたりして非常に良い雰囲気になっていると思う。

機械学習を扱えるようなエンジニアを増やすために、機械学習ハッカソンをやったりして、今すぐ業務では必要ないけれど、この先必要になるようなものにふれる機会を作ったりした。メンバーが興味はあるけれど、なかなかできないなーというのを解消していきたい気持ちがある。そしてそのパワーを業務に還元したい。

毎月やってる社内LT、年末には12人も登壇する感じで最高な雰囲気ある。内容も非技術からガチ技術までバラエティ豊か。

コードレビューファースト

メンバーに「コードレビューファースト」推進委員会がいて、彼に触発され全てのプロジェクト(たぶん10個以上ある)のGitHubでプルリクを見てコードレビューをするようにした。それで得られたものとして、自分が知らないコードの書き方や、メンバーの思想。後はあまりないけれど無意識な技術的負債。意識して負債産むのはまだマシで無意識だと後で詰む。

レビューを通して本当に痛感したのは、プログラマは皆フィードバックを求めているのだということ。それが自身の成長に大きく寄与すると分かっているんだろう。これはまだ組織としてちゃんとできている部分ではないので、どうにかしていきたいと思っている。

理想はメンバーが他のプロジェクトのリポジトリを覗いてちょっかいを出しに行けるような感じ。

新しい技術やツールの導入

プロダクトの成長を促進できるような技術やツールは積極的に取り入れていきたいので、色々調べたり実際に取り入れたりしてみた。

例えば、Re:Dashはよく企画から「◯◯の数字だして〜」とお願いされるようなことを避けるためのツールで、ブラウザ上でSQL書いてグラフ化できる。理想は企画がSQL書いて自分で分析できるようにすることなんだけど、そこまでは求められてない感じある。

他にCircleCIやSentry、Itamaeなどよくある定番系ツールを導入して社内標準化したりした。Itamaeに関してはChefと比べてサードパーティが貧弱なので、自分たちで必要なものは積極的にプラグイン化してOSSとして公開したりした。また、他の人が作ったプラグインにもプルリクを投げたりして運用できるようにした。

開発フローや言語・フレームワーク自体はRails・GitHub・AWS・CircleCI・RSpecとけっこう小慣れてきているようなきがする。次標準化していきたいのはインフラとフロント。インフラはDockerを中心にして、フロントはReactを一部のプロジェクトで導入しているけど、どうかなぁ。2017年にもう少し考える。

テストコードはJavaScript含めてもっとしっかりやっていきたい。

スーパーサブ

複数のプロダクトを少人数で回しているため、瞬間的に人員が足りない時がある。そんなときに、ヘルプとしてガツッとコードを書いていった。近い距離で一緒にコードを書くことでメンバーの育成もいっしょにやった感じだ。本来であれば人員計画と育成計画をちゃんとやらないと行けないところだったが、後手に回ってしまった感じでメンバーには申し訳ないと思っている。

CTOが前線でコードガリガリ書いているのどうなんだ?とか思うかもしれないけど、個人的にはまったくコードを書いてない人(技術者でないなら全然良い)があれこれ言ってくるの非常に嫌なので、なるべく書くようにしている。でもできればもっと良いコードを書ける人を増やしていった方が良いと思っているので、採用や育成を強化していく必要がある。

技術力のないCTOなんて精神論だけをかざすだけの人になるので、技術力を持ってヴィジョンを伝えられるようにしたい。両方大事。

炊飯器とコーヒーメーカーと酒の導入

炊きたてご飯が食べたかったので炊飯器をオフィスに導入した(メンバーが使ってないの持ってきてくれた!)。米を皆で買ってお昼に食べたりしてたけど、最近は使っていない。なぜなら…俺が炊くの面倒くさいから…。みんなもっと使ってもいいのよ。

あと挽きたて淹れたてコーヒーが飲みたかったので、全自動コーヒーメーカーを買って導入した。豆を挽く音がけっこうウルサイけど非常に美味しいコーヒーが飲める。最高。

オフィスの端っこでスーパーで買ってきた酒をチョット飲んだりしながら雑な技術トークやくだらない話をしたりした。雑っていうのが適度に良くて色んな人の意見を気軽に聞けたりする。面白い。

… 特にCTOとしての仕事というより個人的な趣味ではあるけど、こういった動きもまぁもしかしたらなんらかの雰囲気作りに寄与しているのかもしれない。

事業と技術

弊社のプロダクトは特定の技術によって成り立つような性質ではないので「この技術があるから他社に勝てる」とかではない。これは恐らくたいていのサービスはそうで「手段と目的の違い」的な話だろう。もちろん技術によって成り立つ機能でより良いサービスにできるのは事実だけど。

そういったわけで、ユーザの問題を解決するプロダクトそのものを成長させるために、必要十分な技術力を持った開発チームにしていく必要があると思っている。普通にちゃんと作れる集団。これが結構難しい。

メンバーのスキルを下支えして、各チームの中でも醸成されていくように技術リーダーを作っていったり、知見が共有されるように横の動きも出るようにキッカケ作りをしたり、ペアプロやレビューを通して思想を伝播させていったり。時間はかかるけれど、少しづつ進んでいる気がする。

みんなサービスをより良くしたい、開発環境を良くしたいというモチベーションは非常に高いので、あとは適切な機会提供と給与という報酬があれば問題なく成長していけると思っている。ここは改善していきたい。

社内ネットワーク改善

CTOとしてというか単純に社員としてって感じだけど、社内ネットワークの改善をしたりした。席替えとかレイアウト変更とかいろいろな歴史を経てこんがらがって変になっていたネットワークを調査したり、ルータとLANケーブルをベリベリバリバリやったり大変だったけど面白かった。ネットワークの基礎を改めて勉強できた気がする。手伝ってくれたメンバーにも色々と教えられたので良かった。

こういった普段の業務とは少し離れたところで技術について学べると、ちょっとラッキーみたいな感覚がある。面倒臭がっていると機会が減っちゃうんだろう。逆に損切りみたいのができないと面倒で面白くもない仕事ばかりが増えるから、そこは気をつけるポイントだと思う。

こういう風に知見を社内に共有できるし良い。

心理的安全性とコミュニケーション

メンバーがフラットにストレスなく自分の意見を言えるようにしたいと思ってて、相手の発言を否定から入らないように気をつけている。また、メンバーが「◯◯をやりたい」と提案してきたときも、「それいいね」と前向きに捉えて一緒にやるようにしている。

もちろん、訂正すべき意見や行動などはきちんと伝える。仕事であればなおさら。ただ、人格を否定されたと相手が感じるようなコミュニケーションは害悪でしかないと思っている。

一人のプログラマとして

個人サービスの開発

PushnateというWebブラウザ向けのプッシュ通知配信サービスを開発した。個人で開発しているので、当然全部一人で作らなきゃいけないし、インフラ費用だってお小遣いから。無料サービスなので収益も当然なし。でも、ブラウザ向けプッシュという新しいユーザコミュニケーションが出てきて今後一般的に使われていくであろう事を考えると、やって良かったと思っている。久しぶりに全部一人で作るという経験も単純に楽しかった。デザインはやっぱり苦労したけど。

個人プロジェクトをちゃんと形にするっていうのは本当に大変で、技術力とかとは別の力が必要だとおもった。

webpushというOSS開発

Pushnateを開発する過程で得られたものをwebpushというgemで公開した。Rubyで簡単にWebプッシュが送れる。これ以前にもいくつかOSSで公開しているものは合ったけれど、これが今では一番使われている。いま時点だと46,000程度ダウンロードされているようだ。

ここでほぼ初めてOSS活動というものに本格的にふれることになった。公開後、色んな人からプルリクをもらったりして、不慣れで下手な英語でなんとかコミュニケーションを取り、ライブラリを進化させていくことができた。世界の色んなプログラマと非同期に仕事をしている感覚を得られて、大変だけど非常に楽しかった。

OSSは今後も積極的にやっていきたいと考えている。

Write Code Every Day

jQueryの作者であるJohn Resigさんが書いたブログ記事に感化されて始めた。完璧に毎日コードを書くということはできていないけれど、それでも意識してPCの前に座ってコードを書く習慣ができたと思う。

2016年の現時点の結果はこんな感じ。

2016.12.30 @zaru

4月末くらいから初めた。途中大きく空いているのはペルソナ5をやってたから。後悔はしていない。

やってみて思ったのは、毎日コードを書いても成長はしないが進捗は出るということ。単にコード書いてても成長なんてたかが知れてて、質が重要だと思った。でも、個人プロジェクトでの進捗は明らかに出るので、その点では非常に良かった。

なので趣味で何か作りたいけど、なかなか時間が作れない…とか完成までいかない…みたいな人にはトライしてみる価値があると思う。時間の使い方とかも意識が変わるので仕事にもいい影響がある気がする。

とはいえコードを書くスピードは上がると思う。素振り大事。

Qiita

いつの間にか9400コントリビュート。特に数字はどうでも良いけど継続してアウトプットはできたかなーという感じ。Qiita全体のユーザランキングで言うと25位らしい。今後も続けていきたい。

Tシャツ作った

服にはあまり興味がないけど、気に入らない服は着たくないという感じなので自分で作ればいいやと思って作った。安いし面白いし皆作ればいいと思う。Rubyとかいろんな言語のロゴが入ったTシャツ作りたいけど著作権的に駄目っぽいので我慢。

色々作った

コピーしたURLを即QRコードにできるMacアプリ

ActiveRecordをJSONでExport/Importできるgem

GitHubの通知をしてくれるMacアプリ(開発中)

ActionCableで某イカゲームっぽいの

GitHubのプルリクをリポジトリ跨いで取得できるgem

プルリクレビュアー抽選bot

Macアプリを人生初めて作った。iOSアプリとかは仕事でも作ったこと合ったけど。ちょっとしたアプリならけっこう簡単に作れたので良いかもしれない。でも本格的なものは正直趣味で作るにはハードワークだなと感じた。単純にSwiftへの慣れの問題なのかもしれないけど、UI設計が非常に難しい。今後も少しずつ小さくて自分がほしいアプリを作っていく予定。

ErgoDoxEZ買った

セパレートキーボードに憧れて買った。とてもいい買い物をしたと思う。そして何故か今はErgoDoxEZを3台所有している。なぜ…。でも新しいセパレートキーボードが欲しくなっている気持ちある。とても良いもの。

まとめ

仕事としては以前よりも組織や文化を作っていくというところに注力して動いていた気がする。自分が思っているような文化が醸成されてきた実感もある。でもまだ事業と技術がマージされたところまではいってない。もっと踏み込んでやる必要があるなとも感じている。

そして反動というわけではないが、一人のプログラマとしての情熱を燃やすため、色々とやっていたような感じがある。24時間という限られた時間の中で何に費やすのかは本当に考える必要があるなと思った。

俺は「世界一のプログラマ」になりたいので、それに一歩でも近づくためにはどうすれば良いのか考えた。まずはプログラマならだいたい知っているようなライブラリを作る。もしくはプログラマやクリエイターが日常的に使うようなサービスを作る。これを直近の目標とすることにした。がんばれ俺。

あ、クソコードを量産してた僕が少しだけマシなプログラマになるまでという記事も書いた。