エンジニアHubPowered by エン転職

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

料理も、睡眠も、仕事もハック! GunosyのCTOが教える開発効率を上げるメソッド

エンジニアなら誰もが効率よく開発を行いたいはず。でも、どうすれば?GunosyのCTOである松本勇気さんが、忙しさに負けず、開発効率を上げるための方法を教えてくれました。

開発支援・効率化ツールやChatOps等で業務ハックに余念のないエンジニアは多いでしょう。では、エンジニア視点で日常をハックすると、どのように生活が変化するのでしょうか。 株式会社GunosyのCTOの松本勇気さんは、若手ながらも10を超えるプロダクト、50人以上の開発メンバーを束ね、日々多忙に過ごしています。それだけでなく、業務で社内のインフラから機械学習基盤、広告配信、アプリ開発まで、全プロダクトの技術的な意思決定に携わりつつ、さらにはプライベートの時間もしっかり確保しているといいます。 松本さんが実践する、ライフハック術を綴ってもらいました。

こんにちは、Gunosyの松本@y_matsuwitterです。2013年ごろ、大学卒業前にGunosyに入社しまして、現在はCTOとしてインフラからネイティブアプリ、機械学習周辺に至るまでの社内全体の技術面をサポートしつつ、新規事業の立ち上げを担当しています。

担うべきタスクの多さゆえ、諸業務の効率化は自分にとっても非常に重要な要素です。今回は開発の効率化に関して、①ライフハック観点②開発業務観点の2つから、自分がやっていることや心がけを紹介していきます。新人・若手エンジニアの皆様に、少しでも役に立つことがありましたら嬉しいです。

開発効率、よくある課題

我々が開発するにあたってよく出てくる課題の一つがコンテキストスイッチ(短時間のうちに、異なるタスクへの思考切り替えが求められ、作業効率が低下する現象)かと思います。

自分もマネジメント業務が増えるにつれて毎日色々な会議が増えていき、集中できるまとまった時間の確保が難しくなってきました。

CTOという立場なので社内のさまざまなプロダクトについて日々相談を寄せられつつ、自分の大きなプロジェクトも進める。そんな中、コミュニケーションツールからもさまざまな通知が常に送られ、集中力を奪おうとしてきます。

一つの開発作業が細かく中断された結果、思ったように開発作業が進まない、いいコードが書けない等の問題に直面しました。

そのため、「開発効率をいかに向上させるかが会社の命運を左右する!」くらいの意気込みでこの課題に取り組みました。

開発効率を維持するための5つの施策

コンテキストスイッチに対しては①開発効率を維持するべく健康を(効率的に)維持すること②その上で時間あたりの生産性をさらに上げること③まとまった時間を確保することを重視しました。下記の5項目に分類し施策を立てて改善を図ったのです。

  • 食事
  • 運動
  • 睡眠
  • 集中力の持続
  • 意思決定の効率化

まずはライフハックの観点から、それぞれを見ていきましょう。

食事:効率よく栄養素を確保する

開発効率の話をするとツールの話が出てきがちです。しかしまずは健康を保ち、集中力を高めることが重要だと考えています。

特に食事は健康維持・集中力維持に大きく影響してきます。もちろん自分は栄養管理の専門家ではないので、文献を参考にしつつ自分なりの考え方で食事に向き合うことにしています。

仕事柄、週に数回会食が入るなど外食が多いため、他の日にケアする必要があるという条件下での取り組みになるのですが、

  1. できるだけ効率よく栄養素を摂取する
  2. 糖質の取り方に注意する

ということを重視しています。具体的にやっていることをご紹介しましょう。

1. 適当な食事ほど効率化する

仕事の合間に昼食を取ろうとすると、簡単な食事で済ませがちです。例えば野菜の少ない市販のお弁当や、カップ麺などです。

安価かつ手軽で利用しやすい反面、こうした食事は脂質や糖質、塩分量などが多く、栄養バランスが偏りがちです。特に糖質を急激に摂取すると眠気に襲われやすくなります。

こうした「簡単に済ませる食事」こそハックすべき対象だと考え、自分はいわゆるMRP(Meal Replacement Powder)系を利用し対策しています。国内の製品ですとCOMPが有名です。

MRPとは、例えばビタミンやミネラル、タンパク質等をバランスよく含んだシェイクで、短時間で十分な栄養を摂取できます。MRP製品のみの食事でも空腹感を感じることはそれほどなく、個人的に重宝しています。

こうした製品を利用し糖質摂取量をコントロールした結果、集中力アップが実感できました。

Gunosy社内でもCOMPが非常に流行っています

集中力アップという観点では、MRPの導入に加え、日々2~3杯のコーヒーを必ず飲んでいます。カフェインは過剰摂取に注意すれば、集中力を高める素晴らしい燃料になります。エナジードリンクも流行っていますが、糖分が多いため自分は避けるようにしています。

普段はペーパードリップかネルドリップが多いですが、サイフォンで淹れるのも好きです

2. 低温調理器を使い、肉や野菜を摂取

自炊が好きなので、会食や飲み会がない日はできるだけ料理をするようにしています。

メニューは野菜と肉を中心に、炭水化物を少なめにするよう調整。特に最近は低温調理器が気に入っていて、週末になると大きな塊肉を低温調理器でじっくり加熱して、サラダや野菜多めのスープ等と共に食べています。

Anova Precision Cookerという調理器がおすすめです

低温調理とは、比較的低い温度で長時間熱し、肉から水分を失わせることなく熱を入れる調理法です。赤身の牛肉や鶏胸肉などのタンパク質をジューシーなまま美味しく摂取でき、非常に気に入っています。

最高です。ジューシーです。これぞ肉です

これは大きな牛肩肉を簡単な下味だけつけて低温で加熱し、表面だけガスバーナーで炙ったものです。鶏胸肉なども、低温調理器で加熱したのちにサラダに加えると非常にボリューム感もあり、食べごたえもバッチリです。タンパク質と野菜が摂取しやすい料理になるわけです。

半ば低温調理器の宣伝になってしまいましたが、野菜と肉を中心に栄養価の高い食事を実現するために、自炊は言うまでもなく優れた手段です。

また効率的に調理を進めていくことは、業務での作業計画を立てるイメージトレーニングにもなりオススメです。自炊する時間があまりないような日も、栄養効率の高いBASE PASTA(パスタ状のMRP。詳しくはこちら等を食べ、できるだけ栄養効率を高く保つようにしています。

食事に注意することで、日々の集中力を高めつつ、健康に過ごす。普段の食生活を見直すことは、簡単かつ実に効率のいいハックなのでオススメです!

運動:良いコードは良い筋肉から

Gunosyでは「良いコードは良い筋肉から」という標語を(半ば勝手に)掲げ、筋トレや運動を推奨しています。実際、平日早朝から野球の試合をして出社するメンバーや、嘔吐直前まで追い込むようなハードな筋トレを楽しんでいるメンバーもいます。

自分も最近は出社前にボルダリングやジムに通っています

筋トレというのは非常に重要です。開発者の仕事はディスプレイに向かって長時間姿勢を固定する作業なので、肩こり等の筋肉の緊張からくる不調に悩まされがちです。自分も、トレーニングを始める前まではひどい肩こりとそこからくる極度の眼精疲労や頭痛に悩まされ、ひどい日は涙が出る・吐き気がして全く仕事が手につかないこともありました。肩こりは開発効率を著しく下げる、我々の敵です。

そこで筋トレ、特に適度な負荷のウェイトトレーニング(ベンチプレス、スクワット、デッドリフト、TRXの組み合わせなど)を実施したところ、大きく改善しました。以来、できる限りウェイトトレーニングや、最近ではボルダリングに取り組み筋肉量が減らないように注意しています。

開発中に正しい姿勢をとる重要性

開発時の姿勢も非常に重要です。一つの体勢で丸一日作業するので、できるだけ良い姿勢に近づける必要があります。

自分はGunosyに入社した頃から4年間、ずっとバランスボールを愛用していまして、バランスボールに正座するスタイルでいつも開発しています。

正座は足が痺れますが、背筋が伸び胸を開くことができるので、背中がこわばらず、肩こりを軽減できると感じています。また、バランスボールに座ると体のバランスを保つため、体幹が鍛えられ、こちらも肩こり等の悩みを軽減してくれます。

姿勢をサポートするため、キーボードはKinesisを利用しています。エルゴノミックキーボードを使うことで、最良なポジションでタイプでき、結果として手首の疲労をおさえつつ、背筋を伸ばした姿勢を保つ補助となるのです。

一方、適度に姿勢を変えることも必要です。Gunosyでは昇降式のスタンディングデスクが設置されており、私自身も立ったままでの開発を適度に組み合わせています。

大抵は集中力が切れてきたタイミングでスタンディングデスクを利用しています

適度なトレーニングと正しい姿勢が、肩こり等の不調を遠ざけ、集中力を高め、開発効率の向上につながります。ぜひ取り組んでみてください。

睡眠:適切な長さで、良い目覚めを

睡眠を削ってでも開発を進めるなどの話をよく聞きますが、自分はできるだけ睡眠を確保するようにしています。睡眠不足は開発効率に多大な悪影響を与えるので避けるべきです。

ただし「十分な睡眠時間」には諸説あり、また個人差もあります。一概にこれが答えだということはできないため、計測をもとに自分にとっての十分な睡眠時間を探っています。

自分の場合、WithingsやFitbitのヘルストラッカーを利用し、日々の睡眠時間を計測しています。現状ではだいたい平均して6時間ほど寝ていれば自分的には十分。5時間を切ると開発効率に深刻な影響が出始める(日中眠い、ミスが発生しやすい等)という結果が見えていまして、少なくとも6時間の睡眠を確保しています。なお、朝起きる時間は大体7時ころですが、就寝、起床時間は固定していません。「6時間の睡眠確保」という指標から逆算し、起床時間を微調整しています。

こちらはWithings Activite Steelのログ画面です。いくつか端末を使ってきましたが、脈拍計測が可能なトラッカーが一番精度が高く計測できました。

環境を整えて眠りの質を高める

睡眠の環境を整えることも重要です。

睡眠の質を上げるには、枕とベッドマットについてはできるだけケチらず納得いく品質のものを買うべきかと思います。考えてみれば1日の25%以上をその寝具の上で過ごすわけです。寝具の良し悪しが体や睡眠の質に与える影響は無視できないでしょう。

自分に合う寝具は人によってさまざまなので、いくつか店をまわりつつ、納得いくものを見つけるのがオススメです。また周囲の環境によっては耳栓の利用も考えたいところです。自分は開発合宿や出張に必ず耳栓を持っていき、音の環境によっては耳栓をして寝るようにしています。

意外とおろそかにされがちなのですが、目覚め方も非常に重要だと思っています。スッキリ起きられる朝は起床タイミングと睡眠周期が合っていることが多いです。ヘルストラッカーを使い、周期に合わせてアラームを鳴らしてくれる機能を利用してみるのも手です。

自分にとって、効果的だったと感じるのが、Phillips Hueを使った光の目覚ましです。時刻を設定しておくと、設定時刻の30分ほど前からじんわりと明るくなり、設定時刻に一番明るくなるという仕組みです。

Philips Hue スターターセット v2

朝日と同等の緩やかな目覚めを得ることができ、ここ数ヶ月はなんの苦もなく朝目覚めています。「目覚ましのイノベーション」と感じるほど素晴らしいです。少々値の張る電球ですが、APIも用意されているので、家をコードで改造するついでだと思って導入してみるのをオススメします。

質の高い適度な睡眠時間を確保し、朝快適に目覚めるのは、「ひたすら寝るだけ」よりも充実した1日を送ることにつながります。

集中:一つの仕事に集中する

健康で身体的に十分に仕事に向き合う体制ができたら、あとは集中するための時間をいかに確保するかが問題でしょう。

どうしても避けられないミーティングやコミュニケーション等に対して、メリハリをつけていくために①意思決定の場面を削る②作業とコミュニケーションにメリハリをつけるという点に注意しています。

一番わかりやすい「どうでもいい意思決定」の例は、「今日着る服を選ぶ」場面です。自分は服に対するプライオリティがあまり高くないため、ここでの選択肢を極力削っています。だいたいUNIQLOの500円の無地Tシャツばかりで、他に選ぶ余地がない状態です。

その他、どこでどんな端末を使っても、同じように仕事ができる状態をつくるように心がけています。例えば、EvernoteやDropbox paperといったツールや各種開発ツールなどの環境をそろえておくのです。ファイル置き場をできる限り統一することで、どの端末を使ってもいつものツールでいつもの場所のファイルをいじればよい、というわけです。

こうした仕事環境の設定によって、「どのようにこなすか」を考え意思決定する作業を削減しています。意思決定をする、というのは案外とコストと時間を使うので、できる限り「重要な意思決定」の場面にリソースを集中できるようにしています。

もう一つ、作業とコミュニケーションのメリハリをつけるという点も意識して業務に取り組んでいます。

コミュニケーションは仕事に不可欠ですが、反面、多くの場面で作業を中断させ、集中を途切れさせるものにもなります。そのため、自分はコミュニケーションを含む外からの刺激をできるだけ減らして作業するような工夫をしています。

例えばSNSやSlackについては、普段は必ずログアウト、もしくはウィンドウを最小化し通知がこないような状況にし、特定の時間にまとめてチェックすることで効率化を図っています。とはいえ、立場上、急を要するコミュニケーションが求められることがあります。このような場合に備え、Slackではメンション、もしくはダイレクトメッセージのみ受け取るようにしており、なにかあった場合はこうした経路でコミュニケーションを行っています。

SNSについてはコミュニケーションというよりニュース収集の意味合いが大きいので、弊社のアプリであるグノシーはもちろん、それ以外にもNuzzel等のサービスを活用しています。効率よく投稿されたリンクを確認したり、SlackではAll Unreads機能でまとめて確認するなどで効率化を図っています。

Nuzzel: News for Busy Professionals

本当に集中したいタイミングでは、口頭でのコミュニケーションもできるだけ避けます。ノイズキャンセリングイヤホンを使って音を遮断しつつ、オフィスの一角にある集中スペースやフリースペースに移動して作業し、一気に作業を片付けるようにしています。

外からの刺激を減らしてまとまった作業をすると、短時間ながら作業が効率化されます。コミュニケーションの時間と自分の作業時間とのメリハリをつけることで、毎日何件もミーティングが入る状況でも開発を推進してきました。

開発業務を効率化していくための取り組み

ここまでライフハック的な観点で開発効率をいかに上げていくかをご紹介してきました。次は実際の開発業務において、個人、または周辺チームとどのように取り組んでいるかについて、一部お伝えしていきます。

意思決定の効率化

生産性や開発効率の話をするときに大切なのが、「何をやるか」と「どうやるか」という問題について向き合うことだと思っています。後者についてはこれまでライフハック的な観点でさまざまな施策を書いてきましたが、「何をすべきか」という意思決定こそ開発効率に大きな影響を与えます。そして影響範囲の大きさから考えて、決断はエネルギーのいる作業です。

意思決定自体を効率化するために、社内では「数値が神より正しい」というモットーを掲げています。

実際の開発においては「これをやればもっと伸びるのになぁ」と思う施策が100も200も上がってくるものです。そのアイディアを全部こなしていては開発は間に合いませんし、果たして本当に成果を生むかはわかりません。また、もし何らかの施策が有効だったとしても、その後の再現性がなければ、一発屋で終わってしまいます。

こうした問題を避けるため、すべての施策が与えるインパクトを数値で計測し、可視化しています。可視化することで、知見として蓄積し、新しい施策を実施する際、その施策がどれほどのインパクトがあるものなのかを、チーム全体で共通の基準で話せるようにしています。インパクト計測のための指標数値はDAU(Daily Active Users)やRetention Rateのような単純な結果指標だけではありません。それらの数値を構成するさらに細かいレベルの数値に分解し、各施策がどの指標にどのような効果があるかを見積もるのです。

こうして各施策が全体ではどういった効果を上げるのか比較できるようになるのです。弊社のエンジニアチームでは、こうした見積もりと結果の相関性を日々検証しています。

数値をベースに会話することで、何をすべきかという観点でチーム内に共通の指標ができます。そして指標に基づき意思決定することで決断のためのエネルギーを最小化でき、集中して開発ができるという構図ができあがるのです。

新規事業立ち上げの効率化

新規事業や大きな新規プロジェクトを立ち上げることは、サービスや会社の成長には欠かせません。

新規の開発の際はいかに早く信頼の置けるものを実現するかが重要な鍵になります。しかし、Gunosyにはすでに50名を超える開発者が在籍し10以上のチームが開発にあたっています。各エンジニアがどのような技術を使っているかを、それぞれが詳細に把握するには大きなサイズになってきました。事業軸でチームを分けており、各チームが同じような開発レイヤを抱え日々改善しているため、実は類似した開発がそこかしこで行われている可能性があります。

そこで社内では、どのチームが新規開発を行おうとも、重複した開発、いわゆる車輪の再発明を回避するべく、①開発指針をまとめたWikiやコードの整備 ②社内向け技術発信を重視し、会社が保有するの技術情報の共有の2つを推進しています。こうすることで、社内の技術アセットが有効活用され、新規開発をスピーディに進められるのです。

開発指針をまとめる

Infrastructure as Code(IaC:インフラの構成をコードを使って管理する)などの概念が広まった昨今ですが、我々のチームでもChefとAWS Opsworksを中心にしたコード化を進めています。結果、さまざまな言語・ツールでの開発環境が社内のベストプラクティスを踏襲した形でサクッと立ち上げられるようレシピが整えられています。

また、iOS/Android等の開発においても、どのようにAPIと連携し、どのような設計指針でいくのかをベストプラクティスとして、文書や社内ライブラリにまとめつつ、新規開発時にはそれらを踏襲し、効率化を図っています。さらに、これを改善してベストプラクティスにフィードバックするような流れを整えました。データ分析においても、分析内容の多くがJupyter Notebookなどで共有され、次の分析がスムーズになるよう共有がなされています。

Infrastructure as Code - Wikipedia

Project Jupyter | Home

こうした社内の情報のレール整備を進めていくことで、次のプロジェクトやプロダクト開発が最速で、かつ安定して進むよう運用しています。

社内向け技術発信

上記のレールが整ったとしてもそれらが利用されなければ意味がありません。またチームも大きくなってきたため、ノウハウが共有されやすい土壌/風土の整備を進めています。

最近では、社内の有志が率先して毎月末にGunosy TECH NIGHTという社内勉強会を開催しています。チーム持ち回りで「そのチームはどのような方針で開発を進めているのか」「どのようなツールを使っているのか」「最近、新規に取り入れた技術」といった話題を中心にビールを飲みつつ共有会を開いているのです。

TECH NIGHTではちゃんとバナーも作っています(笑)。あくまで社内向けの共有会で、残念ながら社外の方は参加できませんので、あしからず。

また、こちらも社内有志ですがGunosy.fmとしてポッドキャストを配信しており、例えば海外カンファレンスや学会での見聞を共有しています。

こうした社内の技術発信と共有された開発指針の2つが組み合わさることで技術が標準化し、さらに改善が進む流れを作っています。

コミュニケーションツールの効率化

コミュニケーションツールは先にも述べたとおり、通知等で我々の集中力を奪っていく存在であるとともに、効率化することで最適な情報交換ができるツールでもあります。

まず、さまざまなコミュニケーションツールをすべてSlackに集約する形になっています。例えばGitHubのPull Requestの通知や、お客様からの問い合わせ、サーバーアラートなどです。こうしたものはすべてIntegrationを利用してSlackに投げ込み、まとめて確認するようにしています。メールもすべてSlackで通知を確認し、不要なメールから順にフィルタで自動アーカイブするようにしています。

画像出典:Gunosyデータ分析ブログ

データの確認もできるだけSlack上で可能にしています。Redashを使って、前日のKPIのグラフを画像として毎朝/reminder経由で投稿させ、すぐに確認できる体制を取っています。自分も、最低限の確認に必要なRedashダッシュボードを自分の分報チャンネルに毎朝/reminderで通知するようにしており、出社してすぐ確認すべき項目がわかるようにしています。

Make Your Company Data Driven | Redash

最後に

つらつらと自分のやっていることを並び書き立ててみたのですが、開発効率向上という目的のために取り入れている施策は、これがすべてではありません。もしかすると人やチームによっては合わない、もしくは間違ったものもあるかもしれません。

ただ、食事・運動・睡眠というのは少なくとも生きる上で最低限必要なものですし、毎日行うことです。我々エンジニアとしては全力でハックしてみると色々な効率化が生まれ、仕事上の生産効率にもプラスになるかと思います。また、時間は使い方を工夫することで、いくらでも捻出できるものだと感じています。

開発効率は工夫次第でいくらでも向上します。自分のやっていることが誰かのヒントになれば幸いです。

以上、長いですが、お読みいただきありがとうございました。

執筆者

松本 勇気(まつもと・ゆうき) @y_matsuwitter

@y_matsuwitte
東京大学工学部在学中から複数のスタートアップを立ち上げ、Webサービスやアプリを開発。2013年よりGunosyに参画。iOS、Androidなどのクライアント開発、Go言語をはじめとしたAPIからインフラ(AWS)まで幅広い領域の開発を担う。2014年6月に執行役員に就任し、現在はCTOとして新規事業開発を担当。直近ではVRやMR、音声インターフェイスといった領域の開発も始める。