start golang project in java engineer team

80b0ac0000ae3fbf5834585620e2db14?s=47 Yohei Takeda
November 25, 2018

start golang project in java engineer team

goでプロダクトを作りたい!と思う方は昨今たくさんいると思いますが、実際に会社で導入するとなると色々ハードルが高いところもあるのではないでしょうか。 弊社もそんな会社の一つでしたが、なんとかgo導入に踏み切りました。その過程を、泥臭いような話も含めて紹介したいと思います。

80b0ac0000ae3fbf5834585620e2db14?s=128

Yohei Takeda

November 25, 2018
Tweet

Transcript

  1. よくあるJava IT企業で 新規プロジェクトをGoで立ち上げてみてる話 Nov 25, 2018 / Go Conference 2018

    Autumn / #gocon 武田 洋平
  2. 武田 洋平 新規サービス開発部 エンジニア 2012年3月 政治経済学部卒業 2012年4月 業務システム開発会社に       エンジニアとして入社       Javaとかフロントとか色々 2018年8月 株式会社メディアドゥ 入社 About Me

    2 株式会社メディアドゥ
  3. 3 今日の目標 Today’s goal 0

  4. 早速質問!! 4 自社でGolangで開発を行っているという方? 自社でGolang使いたいけどまだ導入できてない方?

  5. 早速質問!! 自社でGolangで開発を行っているという方? 5 自社でGolang使いたいけどまだ導入できてない方?

  6. 今日の目標 1. よくあるJava IT企業がレガシーシステムをGolangに置 き換えようとしてる事例を紹介して、Golangを導入し たい方の参考にしてもらいたい! 2. ひいては、この世界に一つでも多くのサービスに Golangが利用されることに貢献したい! 6

  7. 7 Agenda 会社紹介 1 Golang導入の軌跡 2 未経験者の修練の道のり 3 Golangを導入してみて 4

    まとめ 5
  8. 8 会社紹介 Introduction of Media Do 1

  9. ひとつでも多くのコンテンツを、 ひとりでも多くの人へ We deliver more content for everybody to enjoy

    !
  10. ストアシステム ( MDCMS ) 情報流通プラットフォーム 出 版 社 ・ 著

    者 ソリューション コンテンツ 海外市場 国内市場 子供向 市場 デジタルコンテンツ 配信エンジン ( md-dc ) ビューア ( MDViewer ) 創作 流通 販売・読書
  11. 従業員数(単体):200名弱  うちエンジニア:約40名 基本的な技術スタック: Java, PHP, Oracle 当社エンジニアの話を少し 11

  12. 12 Golang導入の軌跡 How we started to use Golang 2

  13. 13 当社が抱える課題 2.1

  14. ストアシステム ( MDCMS ) 情報流通プラットフォーム 出 版 社 ・ 著

    者 ソリューション コンテンツ 海外市場 国内市場 子供向 市場 デジタルコンテンツ 配信エンジン ( md-dc ) ビューア ( MDViewer ) 創作 流通 販売・読書
  15. 15 当社が抱える課題 • 機能追加・不具合修正が難しい • フレームワークが使われず、ほぼ全ての機能を自前で実装 • 10年前とほとんど変わらない技術スタック • 運用にかかるコストが高い

    ◦ 環境構築・維持のための費用 ◦ 機能不足による運用回避のためのコスト 10年以上構造に変化がないプロダクト
  16. 16 当社が抱える課題 • 全ての機能を一気に作り直そうとしてしまった • 着地点が見えず、うまく進めることができなかった 何度か改革を試みるも…

  17. 17 そもそも何を実現したい? 2.2

  18. 18 そもそも何を実現したい? 「Golangを導入したい」ではない! ビジネスとして成り立つサービスにしたい  → 特にビジネスサイドの方々を説得するのに重要な観点

  19. 19 そもそも何を実現したい? • 今後10年は続くであろうサービス。安定した運用を行いたい ◦ やたら高い運用費を下げたい ◦ 機能追加も簡単にできるようにしてCS向上! • エンジニアのモチベーションを上げたい

    ◦ やっぱり人が大事。中の人のやる気無くしてサービス向上はない ◦ 今は古い技術の運用、保守が多い。新しい技術でワクワクさせたい
  20. 20 取り組んだ内容 2.3

  21. 21 取り組んだ内容 同じ過ちを繰り返さない! • 「せっかく作りかけがあるから使い回そうよ」にはさせない ◦ Javaをやめよう! ◦ 幸か不幸かサポートポリシーの色々があった、やめる好機! •

    全ての機能ではなく、優先度の高いものから置き換える ◦ microservicesの導入
  22. 22 取り組んだ内容 Golangを導入してみよう! • Not Java. Then what? • Golang,

    Node.js, Python ◦ 流行り、クラウドサービスとの相性からこの3つへ • パフォーマンス、開発のしやすさからGolangを導入へ!
  23. 23 取り組んだ内容 経営層、マネジメント層への説明 • 開発はできても運用・保守はできるのか? • もう失敗ができないプロジェクト。リスクを高めてしまわないか? • Golangが書けるエンジニアなんて採用できるのか? •

    そんな変化は嫌だ!
  24. 24 取り組んだ内容 • 開発はできても運用・保守はできるのか? JVM無い点でむしろ楽な部分もある。監視体制も含めて改善する • もう失敗ができないプロジェクト。リスクを高めてしまわないか? むしろJavaで進める方が将来的にリスクが高い • Golangが書けるエンジニアなんて採用できるのか?

    その必要がない。Javaが書ければGolangもすぐ書けるようになる • そんな変化は嫌だ! ここはとにかく粘り強く&不要な説得は避ける 経営層、マネジメント層への説明
  25. 25 ポイント 1. 調整し過ぎない! 全員を説得するなんて無理!キーパーソンだけ説得 2. 実績をさっさと作ってしまう 論より証拠!動く実サービスに勝る説得材料はない 3. スモールスタート

    いきなり全部は無理、やれることから始める → 機能を絞ってスタート。microservices
  26. 26 未経験者の修練の道のり Road to Gopher 3

  27. 27 メンバーの選定 “順応できる”を優先。 変化に寛容なメンバーで最初は始める • リーダー陣以外は新卒2,3年目のメンバーが多い • 宗教論争は避けねばならない → Javaを愛し過ぎてる人を入れない

    ◦ 幸運にもこれはあまり意識しなかった ◦ 現場レベルではあまりgolangに反発はなかった • あまりたくさんの人は入れない。物ができてきたら増やす
  28. 28 教育 総じて、、大したことはやってません! やったこと • Golang標準のチュートリアル ( https://tour.golang.org ) •

    必要に応じてクラウドサービスのSDKを使ったチュートリアル • あとはひたすら実践! ◦ その分ソースコードレビューは結構細かくやっていると思う
  29. 29 教育 総じて、、大したことはやってません! やらなかったこと • 独自の教育コンテンツ作成 • array, sliceと向き合い過ぎる ◦

    メンバーがどハマりするだろうなーってポイントは一旦置いておく • pointerと向き合い過ぎる ◦ メンバーがどハマりする(以下略
  30. 30 教育コストを減らすために 迷う時間を減らす!! • フレームワーク(echo利用中)などはリーダー陣で決めてしまう • フレームワークを使ったスケルトンプロジェクトまで作る • Golangの採用自体が迷う時間を減らす ◦

    標準ライブラリが豊富 ◦ ソースの書き方が限られる
  31. 31 他にもいろいろ! 社外の人も招いてハンズオン会やってます https://techdo.connpass.com/event/106677/ ( 2018/11/27 19:00- ) Golang歴数ヶ月で登壇したり、積極的にチャレンジ! あとは勉強会参加費を経費で落とせるようにしたり

  32. 32 Golangを導入してみて What we learned from Golang 4

  33. 33 メリット Good Performance! • ビルド速い(Javaと比較) • 実行時(計測はしてないが、まだ不満はない) • IDEも割とサクサク(全員Visual

    Studio Code使用)
  34. 34 メリット みんなの開発が速い! • キャッチアップが速い! ◦ JavaだとSpring+Mavenだけでそれなりに時間かかりそう… • Golangの制約が強いのでみんな似たソースを書く ◦

    誰が書いたソースでもなんとなく何書かれてるか分かる • 日本語の記事も豊富なので情報が探しやすい
  35. 35 気付き • build生成物(docker image)が大きい… ◦ build時にのみ必要なモジュールも入れてしまっていた ◦ Docker multi-stage

    buildで解決!1GB → 20MB! • goroutineをまだ明示的には使ってない ◦ 普通のwebアプリの業務ロジック・あまりパフォーマンスが 気にならないバッチ処理ではそんなに考える必要ないのかも ◦ とはいえ必要になる時も来るかもなので知識はつけとく
  36. 36 気付き • 最初は過剰なフレームワーク・仕組みは使うべからず ◦ 「gRPCとか使わないの?」は棄却。社外システムからの呼び出しも 多く、影響範囲の大きい改修になってしまう ◦ micro過ぎるservicesにはしない!多分当社はk8sは要らない •

    話題のerror handling。どうしたら良いかは始めないと分からない ◦ 依存する外部リソースの種類、その性質などで何したいかは変わる ◦ ある程度実装してみて初めてパターンが見えてくる
  37. 37 今後の課題 本格的なサービスの運用はこれから! 成熟したコーディングにしていきたい • error handlingなど、いろいろな課題が改めて露呈するはず • コーディングのガイドライン的なものは作りたい →Golangはそもそも自由度が少ない・標準のlint機能も豊富なので

     あんまり頑張る必要はないと思ってる
  38. 38 今後の課題 現行製品開発メンバーのモチベーション • いずれみんなも新規側に移行することを伝える • 業務時間中のGolang学習を推奨する • 直接業務と関係ない活動(もくもく会など)は垣根を無くすことを 意識する

    Golang利用IT企業としてのブランディング!
  39. 39 まとめ Conclusion 5

  40. 40 なんだかんだGolang採用してよかった! 何よりエンジニアたちは楽しそう! • スケジュールも余裕って程ではないけど守れそう 技術は手段!”Golang”を使う、を目的にしない • お客様の為のサービスを楽しく・効率よく開発・保守! とにかく無理をしない。スモールスタートが大事!

  41. 41 というわけで…

  42. 42 簡単じゃないし道半ばだけど、よくあるJavaメインの IT企業である当社もGolang導入してます! だから皆さんもできます! 一緒にGolangを盛り上げていきましょう!!

  43. We’re Hiring ! • Gopher (Lead) Engineer • Frontend (Lead)

    Engineer • Engineering Manager • Product Owner https://www.mediado.jp/mediado/recruit/
  44. None