Slide 1

Slide 1 text

よくあるJava IT企業で 新規プロジェクトをGoで立ち上げてみてる話 Nov 25, 2018 / Go Conference 2018 Autumn / #gocon 武田 洋平

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

3 今日の目標 Today’s goal 0

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

8 会社紹介 Introduction of Media Do 1

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

ストアシステム ( MDCMS ) 情報流通プラットフォーム 出 版 社 ・ 著 者 ソリューション コンテンツ 海外市場 国内市場 子供向 市場 デジタルコンテンツ 配信エンジン ( md-dc ) ビューア ( MDViewer ) 創作 流通 販売・読書

Slide 11

Slide 11 text

従業員数(単体):200名弱  うちエンジニア:約40名 基本的な技術スタック: Java, PHP, Oracle 当社エンジニアの話を少し 11

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

13 当社が抱える課題 2.1

Slide 14

Slide 14 text

ストアシステム ( MDCMS ) 情報流通プラットフォーム 出 版 社 ・ 著 者 ソリューション コンテンツ 海外市場 国内市場 子供向 市場 デジタルコンテンツ 配信エンジン ( md-dc ) ビューア ( MDViewer ) 創作 流通 販売・読書

Slide 15

Slide 15 text

15 当社が抱える課題 ● 機能追加・不具合修正が難しい ● フレームワークが使われず、ほぼ全ての機能を自前で実装 ● 10年前とほとんど変わらない技術スタック ● 運用にかかるコストが高い ○ 環境構築・維持のための費用 ○ 機能不足による運用回避のためのコスト 10年以上構造に変化がないプロダクト

Slide 16

Slide 16 text

16 当社が抱える課題 ● 全ての機能を一気に作り直そうとしてしまった ● 着地点が見えず、うまく進めることができなかった 何度か改革を試みるも…

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

19 そもそも何を実現したい? ● 今後10年は続くであろうサービス。安定した運用を行いたい ○ やたら高い運用費を下げたい ○ 機能追加も簡単にできるようにしてCS向上! ● エンジニアのモチベーションを上げたい ○ やっぱり人が大事。中の人のやる気無くしてサービス向上はない ○ 今は古い技術の運用、保守が多い。新しい技術でワクワクさせたい

Slide 20

Slide 20 text

20 取り組んだ内容 2.3

Slide 21

Slide 21 text

21 取り組んだ内容 同じ過ちを繰り返さない! ● 「せっかく作りかけがあるから使い回そうよ」にはさせない ○ Javaをやめよう! ○ 幸か不幸かサポートポリシーの色々があった、やめる好機! ● 全ての機能ではなく、優先度の高いものから置き換える ○ microservicesの導入

Slide 22

Slide 22 text

22 取り組んだ内容 Golangを導入してみよう! ● Not Java. Then what? ● Golang, Node.js, Python ○ 流行り、クラウドサービスとの相性からこの3つへ ● パフォーマンス、開発のしやすさからGolangを導入へ!

Slide 23

Slide 23 text

23 取り組んだ内容 経営層、マネジメント層への説明 ● 開発はできても運用・保守はできるのか? ● もう失敗ができないプロジェクト。リスクを高めてしまわないか? ● Golangが書けるエンジニアなんて採用できるのか? ● そんな変化は嫌だ!

Slide 24

Slide 24 text

24 取り組んだ内容 ● 開発はできても運用・保守はできるのか? JVM無い点でむしろ楽な部分もある。監視体制も含めて改善する ● もう失敗ができないプロジェクト。リスクを高めてしまわないか? むしろJavaで進める方が将来的にリスクが高い ● Golangが書けるエンジニアなんて採用できるのか? その必要がない。Javaが書ければGolangもすぐ書けるようになる ● そんな変化は嫌だ! ここはとにかく粘り強く&不要な説得は避ける 経営層、マネジメント層への説明

Slide 25

Slide 25 text

25 ポイント 1. 調整し過ぎない! 全員を説得するなんて無理!キーパーソンだけ説得 2. 実績をさっさと作ってしまう 論より証拠!動く実サービスに勝る説得材料はない 3. スモールスタート いきなり全部は無理、やれることから始める → 機能を絞ってスタート。microservices

Slide 26

Slide 26 text

26 未経験者の修練の道のり Road to Gopher 3

Slide 27

Slide 27 text

27 メンバーの選定 “順応できる”を優先。 変化に寛容なメンバーで最初は始める ● リーダー陣以外は新卒2,3年目のメンバーが多い ● 宗教論争は避けねばならない → Javaを愛し過ぎてる人を入れない ○ 幸運にもこれはあまり意識しなかった ○ 現場レベルではあまりgolangに反発はなかった ● あまりたくさんの人は入れない。物ができてきたら増やす

Slide 28

Slide 28 text

28 教育 総じて、、大したことはやってません! やったこと ● Golang標準のチュートリアル ( https://tour.golang.org ) ● 必要に応じてクラウドサービスのSDKを使ったチュートリアル ● あとはひたすら実践! ○ その分ソースコードレビューは結構細かくやっていると思う

Slide 29

Slide 29 text

29 教育 総じて、、大したことはやってません! やらなかったこと ● 独自の教育コンテンツ作成 ● array, sliceと向き合い過ぎる ○ メンバーがどハマりするだろうなーってポイントは一旦置いておく ● pointerと向き合い過ぎる ○ メンバーがどハマりする(以下略

Slide 30

Slide 30 text

30 教育コストを減らすために 迷う時間を減らす!! ● フレームワーク(echo利用中)などはリーダー陣で決めてしまう ● フレームワークを使ったスケルトンプロジェクトまで作る ● Golangの採用自体が迷う時間を減らす ○ 標準ライブラリが豊富 ○ ソースの書き方が限られる

Slide 31

Slide 31 text

31 他にもいろいろ! 社外の人も招いてハンズオン会やってます https://techdo.connpass.com/event/106677/ ( 2018/11/27 19:00- ) Golang歴数ヶ月で登壇したり、積極的にチャレンジ! あとは勉強会参加費を経費で落とせるようにしたり

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

34 メリット みんなの開発が速い! ● キャッチアップが速い! ○ JavaだとSpring+Mavenだけでそれなりに時間かかりそう… ● Golangの制約が強いのでみんな似たソースを書く ○ 誰が書いたソースでもなんとなく何書かれてるか分かる ● 日本語の記事も豊富なので情報が探しやすい

Slide 35

Slide 35 text

35 気付き ● build生成物(docker image)が大きい… ○ build時にのみ必要なモジュールも入れてしまっていた ○ Docker multi-stage buildで解決!1GB → 20MB! ● goroutineをまだ明示的には使ってない ○ 普通のwebアプリの業務ロジック・あまりパフォーマンスが 気にならないバッチ処理ではそんなに考える必要ないのかも ○ とはいえ必要になる時も来るかもなので知識はつけとく

Slide 36

Slide 36 text

36 気付き ● 最初は過剰なフレームワーク・仕組みは使うべからず ○ 「gRPCとか使わないの?」は棄却。社外システムからの呼び出しも 多く、影響範囲の大きい改修になってしまう ○ micro過ぎるservicesにはしない!多分当社はk8sは要らない ● 話題のerror handling。どうしたら良いかは始めないと分からない ○ 依存する外部リソースの種類、その性質などで何したいかは変わる ○ ある程度実装してみて初めてパターンが見えてくる

Slide 37

Slide 37 text

37 今後の課題 本格的なサービスの運用はこれから! 成熟したコーディングにしていきたい ● error handlingなど、いろいろな課題が改めて露呈するはず ● コーディングのガイドライン的なものは作りたい →Golangはそもそも自由度が少ない・標準のlint機能も豊富なので  あんまり頑張る必要はないと思ってる

Slide 38

Slide 38 text

38 今後の課題 現行製品開発メンバーのモチベーション ● いずれみんなも新規側に移行することを伝える ● 業務時間中のGolang学習を推奨する ● 直接業務と関係ない活動(もくもく会など)は垣根を無くすことを 意識する Golang利用IT企業としてのブランディング!

Slide 39

Slide 39 text

39 まとめ Conclusion 5

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

41 というわけで…

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

We’re Hiring ! ● Gopher (Lead) Engineer ● Frontend (Lead) Engineer ● Engineering Manager ● Product Owner https://www.mediado.jp/mediado/recruit/

Slide 44

Slide 44 text

No content