読者です 読者をやめる 読者になる 読者になる

2015年の振り返り

仕事

サービス開発

クックパッドに入社してもうすぐ丸二年になります。今期から会員事業部に移動しました。 この部署(にかぎらずですが)には優秀な人ばかりで、どの人との出会いもすごく刺激になりました。 特に森田さんという人がやばくて(褒め言葉)、ああどの職場にも何かしらやばい人はいるんだなと思いました。

でもやっぱり一番はTJさんとの出会いでした。 TJさんと一緒にサービス開発始めたのが今年のはじめぐらいです。その時はTJさんがオーナーで僕がエンジニアという役割です。最初の2、3ヶ月はどういうものを作るかというのを延々と話していました。会社に出社してから帰るまで本当に延々と話をしていました。僕は初めてサービス開発をするということもあり、途中話がふらふらしたこともありますが、本当に楽しかったし成長できた期間でした。その時は一切コードは書いてなかったですが、コードを書かないことのストレスはまったくありませんでした。

話がある程度まとまってきたらプロトタイプを作って、実際に動かして、社内の人にも見てもらいながら、方向性を固めていきました。そしてプロトタイプを捨てて実際にプロダクションのものを作るぞってなった時に、とある事情(ポジティブ)でTJさんはしばらく会社を休むことになりました。なので、僕がオーナーを引き継ぎました。その後に他のチームから一人移動してきてもらって、今はその人とサービスを作っています。

これまでは自分のことを技術志向だと思っていたので、何かサービスを考えるのは苦手でオーナーなんて絶対にやることはないだろうなと思っていました。でもどうやらそうじゃなくて、プロダクトを考えて作るのが好きらしいということがようやくこの歳でわかりました。確かに今思い返してみると、これまで個人でやってきたことは作りたいものがはじめにあって、そのために技術を使うという感じでした。僕が料理好きなので料理のサービスと相性がよかったというのも多分にあるとは思いますが。

なので今は、コンセプトやビジョンを示し、それらを実際の機能に落とすことを考え、スケジュール管理をし、コードを書き、ログ分析をするという感じでやっています。ペアを組んでいる人にはタスクの整理、デザイン、動作検証、部署外との調整、インタビューなどをやってもらっています。非常に優秀な方ですごく助かっています。

エンジニアリング

エンジニア的にはWebフロントエンドから離れて、いまはAndroidとRails(WebAPI)を書くことが多いです。 でも僕の技術力なんて、社内では全然たいしたことはなくて、平均より下だろうなーと思っています。 それと前述したように技術志向というよりも、プロダクト志向なのというのもあり、会社では技術的な挑戦は僕自身はしていません。むしろ僕なんかより圧倒的に技術に長けてる人はたくさんいるので、その人達に助けてもらっています。感謝してもしきれない程です。でも技術的な意思疎通は高いレベルでできる必要があると思ってるし、それが技術もわかるサービスオーナーの強みだと思うので、そこは意識していたつもりです。

こういう考えでもやっていけるのは会社の規模がある程度大きくて、役割分担ができていたり、技術者の多様性があるからだと思います。そういう組織を作って支えてくれている人にすごく感謝しています。ありがとうございます。

若者

アルバイトの若者技術者と一緒に仕事をしたり、話したりする機会が結構ありました。ふたりとも同年齢だった当時の自分と比較すると圧倒的に優秀ですごいなという感想をもたざるを得ません。というか今の自分と比べても優秀だなと思う部分は本当にたくさんあります。まあ、これは若者に限った話ではなく、一緒に働くすべての人に対して僕はいつも「この人優秀だなー」って思うのですが。そんなわけで来年は技術者なりたての若者がチームに入ってくるし、僕も30歳になるし、若い人に何か与えられれば良いなと思っています。若者に恩を売って将来返してもらえるチャンスです。本当なら若者には社内のスーパーエンジニアと一緒に働いてもらうのが良いですが、これも何かの縁だと思って一緒に頑張りましょう。

個人

考える技術・書く技術―問題解決力を伸ばすピラミッド原則は部長がおすすめしている本ということで読みました。まあなんというか、控えめに言っても最高でした。僕は今年初めにどういうものを作るのかというのを延々と考えていて、その時に考え方のフレームワークとして次のような方法にたどり着きました。

  • ある事柄について思いつく限り関連する事柄を洗い出す
  • それを何かしらの関連性によってグループに分ける
  • そのグループから一段抽象的な概念を取り出す
  • 取り出した概念を元にグループ内にかけている事柄を再度洗い出す
  • 概念同士をさらにまとめられる概念がないか考える
  • それらの概念や事柄をひと目で分かる図にする

この考え方が非常に僕にあってはいたんですが、これが良いものなのか悪いものなのか、一般的なのか属人的なのかというのがわかりませんでした。ですが、この本にはまさしく僕がやっていた方法が書かれていて驚いたと同時に自分の考え方が間違っていなかったことに感動しました(もちろん、僕がしらなかったこともたくさん書かれていました)。

ソフトウェア見積り 人月の暗黙知を解き明かすは見積もりについて一度ちゃんと勉強しておこうと思って読みました。今まではほぼ独学で次のような方法でやっていました。

  • 仕様をタスクに分解
  • あるタスクを基準にして各タスクに難易度のポイントをつける
  • 基準にしたタスクの工数を考え、1ポイントあたりの工数を計算する
  • その工数/ポイントを元に各タスクの工数を計算する
  • 合計工数をもとに、ガントチャートでスケジュールを引く
  • スケジュールを引くときは休日・稼働率・定例会議・割り込み・技術者のレベルなど予測可能なものはすべて考慮する
  • そして出た工期を最短工期として、最長工期を1.5倍でだす(工期 != 工数)
  • あとは実際に仕事を進めながら見積もりの修正や振れ幅を修正しつつ、着地日をコントロールしていく

エンジニアが1〜2人くらい、工数が60人日程度の規模なら自分で管理もしながらコードを書くというのをやっていて、まあまあうまく行っていました。ですが、独自の考えだったので、これで引かれたスケジュールを上司やチームの人に話す時にやや自信をもてなかったというのがあります。ですが、この本を読んで基本原則はあっているということが分かったので、今後は自信を持ってスケジュールの話をできます。

入門 統計学 −検定から多変量解析・実験計画法まで−は社内のエンジニアにおすすめされて読みました。サービス開発をしていると色々なログから数値を取り出して分析することがあるのですが、そのために統計学の基礎を学ぶために非常に役立ちました。これまでは平均や中央値、分布をなんとなく眺めるぐらいしかわかっていませんでした。ですがこの本を読めばそれらをきちんと学ぶことができますし、あるテストの結果に有意差があるのかどうかなどを測定する原理がわかります。ちなみに二項検定までしか読んでなくて、残りは必要になった時に読もうかと思っています。

NavyJS

NavyJSというWebフロントエンド向けのフレームワーク & 開発環境(簡易なIDE)を2012年からのんびり作っています。 ある程度作ったらコンセプトを維持したまま、次の世代を新しい技術で作るというのを繰り返しています。 基本的なコンセプトはAndroid FrameworkとAndroid StudioをJSの世界でも実装しようというものです。

  • レイアウト情報をJSONに書き込んでスタティックなものとする(AndroidのLayout XMLみたいな)
  • UIコンポーネントベースのGUI開発(AndroidのViewみたいな)
  • 1画面1クラスをルートとして実装してく(AndroidのActivityみたいな)
  • これらを開発するための専用の環境(Android Studioみたいな)
  • レイアウト情報やJSのコードはサーバからダウンロードしてブラウザのDBに保存

第1世代はレンダリングをCanvas、DBをオンメモリ、開発環境をJS/HTML/CSSで作っていました。 第2世代はレンダリングをDOM、DBをWebSQL、開発環境をQtで作っていました。 で、これの第3世代をES6、WebComponents、IndexedDB、Qtで作ろうと思って、パーツを作っていました。最初は非同期処理を扱うライブラリ、IndexedDBとManifestベースのファイルストレージライブラリなどです。それが今年の4月くらいまでです。

ESDoc

NavyJSのパーツのためのドキュメントを書こうと思ったのですが、JSDocがES6に対応してないことに気付きました。なので、JSDocをES6に対応させるためのコンバーターを書いたり、出力されるHTMLをもっとリッチにするためのプラグインを作ったりしていました。そんなことをしているうちにJSDocの実装があるわかってきて、これなら自分で作りなおしたほうが良さそうと思うようになりESDocの開発を始めました。それ以降はずーっとESDocを作っています。当初はNavyJSのドキュメントを書くことが目的だったのですが、NavyJSまあライフワークみたいなものだったのでいったんお休みしても良いかなという感じです。

このESDocが思いのほか良い感じでだきたのと、タイミングがよかったので、割りと使われるようになりました。issueに対応したり、機能拡張したりと忙しかったです。あとはそもそもドキュメントってなんだ?っていうのを深掘りして考えたりなどもしていました。結果、ちょっとずつ触ってくれる人が出てきました。

僕自身による情報発信も結構頑張りました。

あと、まだ公開されていませんがとある会社に4000文字程度の記事を寄稿したりもしました(年明けにWebで掲載される予定)。こんな感じで外でも色々紹介させてもらえました。これもひとえに声をかけてくださった方々のおかげです。ありがとうございます。あ、いま思い出したけど、YAPCにドキュメントの話を応募したのですが、落選してしまい非常に残念でした。喋ってみたかったな。

僕は前々からプロダクトの上から下まで全部やってみたいとおもっていました。上から下までというのは技術スタックじゃなくて、プロダクトのライフサイクルみたいな感じです。つまり、何を作るか、設計、実装、ドキュメント化、宣伝、運用保守、お金を稼ぐというところ全てです。ESDocでそれらが全て出来て非常によかったです。特にお金を稼ぐというのは無理だろうなーとは思っていたんですが、自分のプロダクトについての内容を執筆して寄稿するという形で達成できました。額は少額だけど、すごく達成感があります。それと宣伝、運用保守は思った以上に大変だなという感想です。

CodeLunch.fm

CodeLunch.fmはしばらくお休みしていたんですが、復活しました。今年は15本ほど公開できて非常にがんばりました。Rebuild.fmに比べるとめっちゃ少ないですけど、Rebuild.fmがバケモノなので比較してはダメです。出演してくれる方々は毎回非常に面白い話をしてくれて僕が一番楽しんでいると思います。中でもすごかったのは@t_wadaさん回(前編後編)です。長年一つのテーマを研究している人の話は幅も深さも半端ないなーというのを思い知りました。この回はCodeLunch.fmの中でもっとも視聴されていて、1万ダウンロードを超えています。全体の平均が4400ダウンロードなので圧倒的でした。

料理

弁当は年間で100日くらい作りました。2015年の平日を240日くらいとすると、週に2日くらい作ってる計算です。週に3日作れればいいかなという気持ちでやっていたので、ちょっと足らないですけどまあまあ良い気がします。土日もどちらか片方はちゃんと料理をするという感じで過ごしていました。

あとは偶然知り合ったカフェの店長さんに誘われて、二夜限定でお店で料理を作って出したりしてきました。他にも別のお店の店長さんにお願いして仕入れに同行させてもらったりも。どっちもすごく楽しかったです。とは言え飲食店は本当に大変だなと思いました。とくにお店で料理を作るのは自分でメニューを考えて、何度も試作して、原価と利益を考えて価格を決めて、仕入れ、仕込み、本番という感じですごく大変でした。実際はもっともっと考えることややることがあると思うので、僕がやったことはほんの一部です。それでもこんなに大変なんだーという。これがお客さんから直接お金をもらうことの大変さなんだなと。

料理をするのは相変わらず好きなので、家に友達をよんでごはん会をするのが僕にはちょうど良いんだろうなと思いました。

運動

今年のはじめは近所の小学校に水泳に行っていたんですが、一人で淡々と泳ぐのに飽きてしまってやめてしまいました。

その後は目黒の体育館のバドミントへ週1回行くようになりました。そこは参加者全員がレベル分け(初級・中級・上級)され、その中でランダムな感じでペアを組んでダブルスをします。なので知らない人とペアを組んだり対戦することになります。バドミントンは三重県で働いている時に3年ほどやっていたので飛び入りで参加してもなんとかなりました。今は同僚と一緒に中級クラスでやっています。他の体育館にも参加して、一時期は週2回にしていました。でも腰があまりよくないので、今はおとなしく週1回にしています。

あとは11月くらいからランニングも少し始めました。といってもまだ数回しか走っていません。始めた直後に体調を崩したり、執筆やらなんやらで忙しくなってしまって。

来年

仕事は今年に引き続きプロダクト志向でやってみようと思っています。エンジニアであることの利点も活かしていきたいので、少なくとも社内で活用されてる・されはじめている新しい技術については理解をしていきたいです。

個人ではドキュメントについてもっと考えるのと、ESDocをちゃんと保守していきたいです。11月くらいからはESDocの宣伝やら情報発信に時間を使っていて、コードを書いたりissueに対応したりというのができなかったので。とはいえ宣伝もしていきたいので、英語の記事を書いてみようかなと思っています。 CodeLunch.fmは月1回くらいのペースで継続していこうと思います。本はとりあえずあの三冊をもう一周していから、同僚におすすめを教えてもらおうと思います。運動はバドミントンを継続して、ランニングを週2回くらいを目標に走りたいと思います。

本当は明日の冬コミのお手伝いが残っているので、まだ2015年納まっていないですが今年を振り返ってみました。 2015年はぼちぼち頑張ったなという感じなので、2016年も頑張ろう。

以上。