Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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