Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サービス開発初期の「時間を金で買う」技術

 サービス開発初期の「時間を金で買う」技術

ウェブサービスをゼロから開発して徐々に規模を大きくしていく過程では、CI環境の準備などサービス開発を続けていく上で開発チーム自身が準備をしなくてはいけないツール群が多くあります。これらの問題は多くのチームで共通にみられることから、世の中には様々なSaaSツールが用意されています。優れたサービスはそれなりの価格設定がされているものですが、場合によっては有料サービスを利用することにより、チームがサービス開発に集中できる時間を増やすという戦略も取ることができます。この発表では、私自身が仕事やプライベートで使っている開発支援系のツールに関する紹介と導入する場合の考え方や検討事項などについてお話します。

Masatoshi Iwasaki

March 23, 2019
Tweet

More Decks by Masatoshi Iwasaki

Other Decks in Technology

Transcript

  1. 株式会社クリプラ
    岩崎 匡寿
    Rails Developer Meetup 2019 Day 2

    View full-size slide

  2. 岩崎 匡寿(いわさき まさとし)
    • Rails 2.x系からRailsエンジニア
    やってます。
    • 以前は10年弱フリーランスの
    Railsエンジニアやってました。
    • 現在は株式会社クリプラで働い
    ています。
    • 旧社名:クリニカル・プラット
    フォーム株式会社

    View full-size slide

  3. 会社PR
    株式会社クリプラはRails DM 2019のワインスポンサーです。

    View full-size slide

  4. 今日お話しすること
    サービス開発初期の
    「時間を金で買う」
    技術
    Railsを利用している小規模チーム、かつ
    サービスが初期段階にあるチーム向けに、
    サービスの機能追加・改善を優先するため、
    社内で説明が必要となる有償の開発ツー
    ル・サービスを、
    どういう観点で選び、導入していくかに
    ついて、
    個人や組織での経験を踏まえて
    お話しします。

    View full-size slide

  5. 発表の主な対象
    • Railsで書かれていて、主に自社サービスのような継続的な開発が必要
    なサービスを担当しているチーム
    • かつ、会社自体もそれほど大きいわけでなく、サービス開発をする
    チームをサポートする別の開発チームがあるわけでもない状況
    • 特にサービス本体が(もしくは会社も)始まったばっかりの状況

    View full-size slide

  6. 発表で取り扱わない対象・事項
    • 大規模なチーム or 大きい会社の中での小規模チーム
    • もしかしたら役立つ要素はあるかもしれません
    • 個人でのサービス開発
    • 予算制約が厳しくなければ参考になるところもあるかもしれません
    • 個々のサービスの詳細説明
    • サービス間比較や事例のためにいくつか具体例を出す程度にとどめます
    • 各業界ごとに求められるコンプライアンス上の制限
    • サービス選定に影響しますが業界それぞれであり、カバーしきれないため。
    • 今回は自由にいろいろ選べる状況を想定。

    View full-size slide

  7. ※開発系サービス=Rails開発していく上で、開発者や開発チームを対象と
    した様々なウェブサービス群(IaaSは除きます)

    View full-size slide

  8. (たぶん)
    使っていないチームのほうが少数
    • Rails開発の場合ソースコード管理はgitが標準。
    • GitHubやGitLabの利用が多い印象。
    • 他にも様々な有償のサービス・ツールを利用しているところが多いはず。
    • CI
    • プロジェクト管理ツール
    • IDE(サブスクリプション型)
    • 監視 etc

    View full-size slide

  9. サービス開発初期あるある
    • 人員は増やしたいけど簡単に増えない
    • 度重なる方針転換
    • 少しでも早くより良いサービスを提供したいという焦り
    • とにかくやらなきゃいけないことが多数で手が回らないことばかり
    エンジニアは新機能の追加や既存機能の改修にフォーカスさせたい

    View full-size slide

  10. 金だけで解決できるものはあるか?
    有償の開発系サービスを利用してエンジニアが機能追加・改修に
    集中できる開発環境を作ることは金で解決できる(可能性がある)
    • 人員は増やしたいけど簡単に増えない
    • 度重なる方針転換
    • 少しでも早くより良いサービスを提供したいという焦り
    • とにかくやらなきゃいけないことが多数で手が回らないことばかり
    最終的には金だが時間もかかる
    ある意味新規サービスの宿命
    焦ってもどうにもならないのであきらめましょう
    開発系サービスで
    一定の範囲を省力化

    View full-size slide

  11. 開発系サービスで
    「時間を金で買う」場合の考え方
    チームのエンジニアが行っている、
    • 顧客へのサービスという点において本質的ではないが、
    • 開発を進めるうえで重要なタスク・要因を、
    • SaaS(およびその中にいるプロ)にアウトソースすることで、
    開発チーム全体がサービス開発に集中できる「時間」を増やす

    View full-size slide

  12. よくある開発系サービス導入の理由
    • 社内に十分な知識やスキル、体制がない
    • 自社で構築するより各種コストが低い
    • 短期的に必要なもので、社内のリソースを使いたくない
    • チームの生産性を向上させる
    • 属人化を避けたい

    View full-size slide

  13. 「時間を買う」アプローチでの
    達成事項
    • 社内に十分な知識やスキル、体制がない
    • 自社で構築するより各種コストが低い
    • 短期的に必要なもので、社内のリソースを使いたくない
    • チームの生産性を向上させる
    • 属人化を避けたい
    あまり解決されない問題
    あくまで開発チームが自社のサービス開発に集中できる「時間」を
    増やし、スケールしやすい状況を整える。

    View full-size slide

  14. 5つのステップ
    1. サービスを知る
    2. コストとメリットを把握する
    3. 正式導入の意思決定
    4. 導入・運用

    View full-size slide

  15. 何事も情報収集から
    • 解決したい問題が自明なら能動的に検索すればいい。
    • 自分が全く知らない分野のサービスなどは受動的に情報に触れる機会を増
    やす
    • SNSやニュースサイト
    • 勉強会やコミュニティに顔を出す
    • 企業が主催するセミナーに出るのも有効

    View full-size slide

  16. 検討すべき3つのコスト
    • 導入時のコスト
    • 運用時のコスト
    • 解約・変更時のコスト

    View full-size slide

  17. 導入時のコスト
    • 既存サービスから乗り換える場合
    • サービスが変わると環境も変わるので、一定の作業が必要
    • アカウントの権限設定
    • チームの実情に合わない管理モデルだと導入を諦めたほうがいいことも
    • アカウント管理
    • 外部のIDサービスを使うのか、サービスごとにアカウントを使うのか
    • SSO対応のプランはエンタープライズ的な位置づけでお値段高めのケースも

    View full-size slide

  18. 運用時のコスト
    • 料金体系を把握する
    • 従量制なのか、固定金額か。従量制ならどの数量が影響するのか
    • サービスのモニタリング方法
    • どうやって監視をするか
    • 継続的に使い続けるための手間
    • 導入してそのまま放置できるようなサービスは少ない

    View full-size slide

  19. 代表的な課金体系の⾧所・短所
    金額固定 従量制
    (アカウント数)
    従量制
    (時間・データ量等)
    ⾧所 ランニングコストが読み
    やすい
    人数に応じた課金で無駄がない 利用した分だけの課金なので利
    用料を最適化しやすい
    短所 チームの規模に合わない
    と割高になりがち
    サービスが増えてくると合計
    金額が積みあがる
    最終的には使ってみないと金額
    が読めなかったり、変動要素が
    大きい

    View full-size slide

  20. 解約・変更時のコスト
    • ウェブサービスはアップデート頻度が高い
    • 料金プランの変更もよくあるので、プラン変更が可能かどうかを把握しておく
    • 年間契約は一見安いが…
    • 利用解除時の条件(キャンセルフィー)をよく確認しておく

    View full-size slide

  21. ほんとに欲しいメリットが得られるか
    • トライアル期間中にある程度使い倒すのが望ましい
    • トライアル開始したらすぐに使ってみる
    • トライアル期間延⾧は対応してくれることも多い
    • 「使ってみたらイメージと違う」ことはよくある
    • サービスの機能不足、設計思想の違い
    • 想定していた料金プランより高いプランにせざるを得なかったり
    • データ量に応じた課金はかなり細かい計算が必要
    • 運用が回らないような複雑なサービスだとあまり意味がない

    View full-size slide

  22. まずは開発チームでの合意
    • 導入の目的や期待するメリット・効果をチームメンバーと共有
    • 開発者同士だと話が早い傾向がある(と思う)
    • この段階で見落としていたコストや追加のメリットなども把握できる
    • 運用できなければ意味がない
    • チームとして無理のなく運用できることが重要
    • 場合によってはここで料金プランのグレードを上げるなどの判断が必要

    View full-size slide

  23. たまにイベントで聞く話
    開発系サービス
    使いたいけど高い
    開発系サービス使いたいと社⾧に言っ
    たけど、お金出してもらえなかった

    View full-size slide

  24. 開発チーム外との調整
    • 開発系サービスは確かにそれなりの値段がする(ように見える)ので、社内で
    説明が求められるのは想像がつく。
    • 一方で、ちゃんと開発系サービスを活用することで、チームのアウトプットを
    高めることが可能であり、自社サービスや会社にメリットがある
    ステークホルダーに説明をして理解を得る必要がある

    View full-size slide

  25. 代表的なステークホルダー
    • 決定権者(決裁権者)
    • この人がOKを出せば決定する、という人
    • 開発チームのリーダーが決定権を持っていれば何の問題もない
    • 往々にしてコストとメリットのバランスについて数字が必要
    • 経理担当
    • 契約するサービスの目的や支払いタイミングなどの説明が必要
    • 支払い手段や通貨についての説明と合意
    • 税務的な調整(消費税のリバースチャージ方式とか)
    代表的な対応策は後述

    View full-size slide

  26. 導入時の注意事項
    • サービス乗り換え時は特に入念な準備が必要
    • アクセス権限の設定
    • 管理者アカウント(特にオーナー権限)は常用しないなど
    • 導入直後には細々と問題が起きがち
    • 自社サービスの大きなリリースがあるときは避け、余裕を持つ
    • 芋づる式的に利用中のサービスについても権限や設定見直しが必要になるこ
    ともある(例:Slack)

    View full-size slide

  27. 様々なモニタリングが必要
    • アクセス数で金額が変動する場合などはモニタリング必須
    • 通知や時系列のデータを追えるようにする
    • サービスアップデートに注意を払う
    • サービスのバージョンアップに追随しないといけないケースが多く、そのために一定のコスト
    がかかる
    • プラン変動
    • 料金プランが変わることもあり、たまに新たに出てきた安いプランのほうがチームの利用実態
    に即しているケースもある
    • 経費申請を考えると支払い方法や請求書を経理担当者に渡すなどの部分について要ルール化

    View full-size slide

  28. 代表的なステークホルダー(再掲)
    • 決定権者(決裁権者)
    • この人がOKを出せば決定する、という人
    • 開発チームのリーダーが決定権を持っていれば何の問題もない
    • 往々にしてコストとメリットのバランスについて数字が必要
    • 経理担当
    • 契約するサービスの目的や支払いタイミングなどの説明が必要
    • 支払い手段や通貨についての説明と合意
    • 税務的な調整(消費税のリバースチャージ方式とか)

    View full-size slide

  29. 代表的な「No!」の理由
    • 利用料が高い!
    • 必要な理由を決裁権者に理解してもらえない。
    • 内製ツールで回っているので必要性を感じてもらえない
    数字に落とし込むことで「No」が出づらい状況にする

    View full-size slide

  30. 基本的な方針
    1. 「導入することによるメリット」を明確にし、
    2. そこにかかるコストについて金額をつけていって、
    3. 最終的にサービス導入のほうがメリットがあるよ
    うに説明していく

    View full-size slide

  31. 基本的な方針
    1. 「導入することによるメリット」を明確にし、
    2. そこにかかるコストについて金額をつけていって、
    3. 最終的にサービス導入のほうがメリットがあるよ
    うに説明していく

    View full-size slide

  32. 開発系サービス導入の理由(再掲)
    • 社内に十分な知識やスキル、体制がない
    • 自社で構築するより各種コストが低い
    • 短期的に必要なもので、社内のリソースを使いたくない
    • チームの生産性を向上させる
    • 属人化を避けたい
    これらの中から必要なものを組み合わせて説明

    View full-size slide

  33. 基本的な方針
    1. 「導入することによるメリット」を明確にし、
    2. そこにかかるコストについて金額をつけていって、
    3. 最終的にサービス導入のほうがメリットがあるよ
    うに説明していく

    View full-size slide

  34. エンジニアの時給単価で考える
    • エンジニアの時給単価をベースに、自社内でやった場合にどれだけの金額になるか
    を比較する
    • 例
    • 額面年収600万のエンジニアが月に8時間(1人日)稼働した場合のざっくりな時給計算
    • 600 / 12 / 20(営業日ベース) = 2.5万円
    • 2.5 / 8 = 3,125円/h
    • 同じサービスを社内で構築・運用して上記のエンジニアが月に合計1日分(8時間)を割い
    ている状態で、これが月に1時間程度になる場合、25,000 – 3,125 = 21,875円以下のサービ
    スなら導入するメリットのほうがコストを上回る。

    View full-size slide

  35. 作業時間数の割り出し方
    • 正確に記録できていればいいが、ざっくりでも構わない
    • 日報をつけているチームであれば、後からおおよその時間を追うことが可能
    • PR/MRでの経過日数などを見てもいいかもしれない
    • 細かく時間を取られる作業がもっとも読みづらい
    • そして着実にチームメンバーの時間を奪っていく怖い存在
    • 予め注意して作業時間を計測するほうがいい

    View full-size slide

  36. 基本的な方針
    1. 「導入することによるメリット」を明確にし、
    2. そこにかかるコストについて金額をつけていって、
    3. 最終的にサービス導入のほうがメリットがあるよ
    うに説明していく

    View full-size slide

  37. 基本的でないアプローチ:
    採用コストと割り切る
    •「魅力的な労働・開発環境を作ることが結果的に採
    用コストを抑える」と説得。

    View full-size slide

  38. 昨今のエンジニア需給バランス
    • エンジニア不足は世界的に叫ばれている
    • 日本が単純に少子高齢化しているからというだけではない。
    • 今後も給与水準は上昇し続け、さらに採用コストも上昇
    • エージェントや求人媒体に支払う金額もかなりのものになる
    「普通それ使うよね」という開発系サービスを利用していない
    ことが応募者の会社選定に大きく影響を与えることも。

    View full-size slide

  39. 開発系ツールは安い
    (採用コストと比べて)
    • エンジニア1人取るためにかなりの費用がかかる
    • 数百万はざらなので、開発ツールの費用なんか比べ物にならない
    • リファラル採用を進めたい企業が多いが、そのためにはサービスや開発体
    制が魅力的であることが重要
    現在のメンバーの労働環境を改善することは、
    将来のメンバー獲得にも直結して一石二鳥!
    ということをうまく言葉にして説得しましょう

    View full-size slide

  40. Disclaimer
    • あくまで自分がRails開発でよく聞くものをまとめてあります
    • 自分で使ったことのないサービスもあるので、抜け漏れがあるかもしれま
    せん。
    • 定番サービスも多く取り上げてますので、導入済みの場合は振り返り程度
    にとらえてください。

    View full-size slide

  41. ソースコード管理(SCM)
    • GitHub
    • 多くのOSSプロダクトがホスティングされており、業務とは関係なく使い慣れている開発者も
    多い。
    • GitLab
    • ソースコード管理だけでなく、プロジェクト管理やCI、リリースに関する機能も提供されてい
    る。
    • どちらのサービスもアカウント数ベース課金
    • Self-managedは小規模チームでは検討対象外のことが多い
    • 自前でgit用にサーバーを立てるという選択肢もあるが、サービス開発初期に有効な選
    択肢かどうかは微妙

    View full-size slide

  42. CI
    • コンテナ上でテストを実行するサービスが主流
    • 料金体系は様々
    • GitLab: ソースコード管理サービスの一部として提供。アカウント数ベースの課
    金。
    • CircleCI: 利用するコンテナ数に応じた課金
    • TravisCI: プランごとに利用可能なコンテナ数が決まっている月額課金
    • Buildkite: アカウント数ベースの課金+自社AWSアカウント上での利用料金

    View full-size slide

  43. Buildkiteの課金体系
    • テスト実行インスタンスにエージェントを入れてテスト実行や結果の一元
    管理が可能
    • テスト実行のインスタンスはAWS上でEC2等を利用可能。
    • どれだけのインスタンスをどのくらいの時間使うかについての制限がない
    • 当然AWS使用料は別途かかる
    • 「月額プランでは夜間や休日分が遊んでいる」という見方ができる
    • テスト実行時間が⾧くなってくると、実行速度改善の観点で効果が高い。

    View full-size slide

  44. プロジェクト管理ツール
    • SCM付属の機能を利用(GitHub Project, GitLab)
    • Pivotal Tracker
    • メンバー数、プロジェクト数、ストレージ容量それぞれに制限がある料金プラン
    • BackLog
    • プレミアムプランより上はプロジェクト数、ユーザ数が無制限
    • Redmine
    • 自前でサーバー用意か、ホスティングを利用するか

    View full-size slide

  45. バグ管理(BTS)
    • プロジェクト管理とBTSを別に分けるかどうか問題
    • 個人的には最低限プロジェクトは分けたほうが運用がスムーズと考えている
    • 例:サポートの優先順位と開発の優先順位が異なる
    • サポートや企画もBTSを使う場合は日本語対応が重要(なことが多い)
    • 社内エンジニアの助けがなくても自走できるようにすることで、エンジニアの手
    間を減らす

    View full-size slide

  46. IDE
    • JetBrainsの製品は現在サブスクリプションベースが主流
    • Rubymineは高機能なIDE
    • 静的解析機能が強力なので、非Railsエンジニア(フロントエンド等)が一部の
    ソースコードを追うときに役立つ。
    • DataGrip(SQL用ツール)相当の機能もあり、SQLクエリを書きたいときにも便
    利。
    • 極めなくても使える便利機能で時間効率が上がるなら検討を。

    View full-size slide

  47. パフォーマンスモニタリング(APM)
    • サービスによって課金体系が違う
    • NewRelic, DataDog(ホスト台数に比例)
    • SkyLight(月間リクエスト数に応じたプラン制)
    • 運用は目的を明確にしたほうがいい
    • パフォーマンスのボトルネック(N+1とか)を見つけるためか
    • リアルタイムでパフォーマンス劣化を検知するためか
    • インフラ側のサービス監視とも重複する

    View full-size slide

  48. テストカバレッジ取得
    • SimpleCovの結果をCI上で都度確認するだけならCIの設定でも十分だが、時系列的
    な変化を追いづらい
    • CIでファイルをアップするだけにしてもYAMLいじってる時間が無駄と感じたら検討の価
    値あり
    • Coveralls: リポジトリ数ベースの月額プラン
    • CodeCov: リポジトリ数ベースの従量制と見せつつ、一定数ごとのプラン制限
    • CodeClimate(後述)も対応している

    View full-size slide

  49. コード品質管理
    • RubocopやBrakemanなど各種OSSを組み合わせて計測してくれる
    • 自前でやろうとするとPRごとに差分を取得してチェックすることになり、それな
    りに手間がかかる
    • SideCI, CodeClimate
    • どちらもユーザー数ベース課金
    • SideCIは国内サービスで日本語対応している上、国内開発者のお気持ちにフィッ
    トしている気がする

    View full-size slide

  50. Gem更新
    • 継続的に更新されるサービスであれば、やむを得ない事情がない限りはgemのバー
    ジョンロックをしないほうが結果的にサービスの寿命が延びる
    • 自動でgem更新されるのが望ましい
    • Dependabot(リポジトリ数ベースのプラン制)
    • PRベースで更新を出してくれる
    • GitHub Marketplaceで契約できるので請求一元化が可能
    • Ruby以外の言語にも対応
    • Deppbotは2018末でサービス終了した模様

    View full-size slide

  51. (備考)IDaaSやSSOについて
    • IDaaSやSSOはいろいろコストがかかる
    • サービスによって対応しているIDaaSがあったりなかったり
    • SSO対応は企業しか欲しがらないので、enterprise plan扱いでお値段も
    enterpriseなことが多い
    • ただし、後から入れるよりは最初から入れるほうがいいのでいずれ必要になるな
    ら最初から検討するのが良い。

    View full-size slide

  52. 攻めの開発サービス導入を
    • 適切な開発サービス導入は開発チームが自分たちのサービス開発に集中で
    きる時間を増やすことができる
    • 一方で、導入にコストがかかる可能性もあり、導入前に見極めが必要
    • 決裁権者との調整はエンジニアにとって不得手かもしれないが、チームの
    開発環境を整えることは現在のメンバーだけでなく将来のメンバー獲得に
    もつながる
    • 定番サービスは比較的簡単に導入ができることが多い

    View full-size slide

  53. しかし、
    • なかなか開発系サービス導入についてチームメンバーの関心が得られない
    • 決裁権者が合理的でない理由で導入を認めてくれない
    • 自分自身、快適な環境で働きたいのに….
    どうしてもそういうこともある。
    そんなときは….

    View full-size slide

  54. いい会社があります!(PR)
    https://clipla.jp/recruit/
    • 休日の勉強会参加は業務扱い(代休取得可能)
    • Rails DM / RubyKaigi 等は希望者全員参加(チケット費用・宿泊費・交通費支給)
    • 最大週4日リモート
    • 開発標準機はMacbook Pro 15inch 2018 メモリ32GB(色・キーボード選択可)
    • 積極的に開発系サービスを利用
    ※2019/03/23時点

    View full-size slide