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

第138回RITS技術交流会 / Why Go? How is Go?

第138回RITS技術交流会 / Why Go? How is Go?

以下勉強会の資料です。

第138回RITS技術交流会『なぜ私たちはGoを書くのか。今あらためて考えるGo言語の良さと実際』
https://rits-techforum.connpass.com/event/146462/

スライド中のリンク先も確認したい場合は、ブログの補足記事でご確認ください。
https://budougumi0617.github.io/2019/10/05/jrits-why-go-how-is-go/

Yoichiro Shimizu

October 04, 2019
Tweet

More Decks by Yoichiro Shimizu

Other Decks in Technology

Transcript

  1. なぜ私たちはGoを書くのか
    今あらためて考えるGo言語の良さと実際
    2019/10/04 第138回RITS技術交流会
    Yoichiro Shimizu @budougumi0617

    View Slide

  2. ● 清水 陽一郎 @budougumi0617
    ○ Backend Engineer
    ○ Go / Ruby
    ● Blog
    ○ 毎週書いてる
    自己紹介
    2

    View Slide

  3. 自己紹介
    ● 埼玉大学大学院数理電子情報系専攻 博士前期課程修了
    ● 2011年 リコーITソリューションズ株式会社入社
    ○ 商業印刷用プリンタの外部コントローラ開発 etc...
    ● Java研修/Java8研修/Go言語研修 受講
    3
    https://twitter.com/yoshiki_shibata/status/820074722700296193

    View Slide

  4. 自己紹介
    ● 2017年 freee株式会社
    ○ 電子証明書を利用したアカウントアグリゲーション用アプリ( Windows)
    ○ マイナンバーカードを利用した電子申告アプリ( macOS)
    ○ クラウド会計サービスのアカウントアグリゲーション機能のマイクロサービスの開発
    ○ 金融機関とのAPI連携のためのOAuth2.0認証・トークン管理マイクロサービスの開発
    4
    https://customers.microsoft.com/ja-jp/story/freee-professional-services-xamarin-azure-visual-studio-japanese-japan

    View Slide

  5. GoConference’19
    5

    View Slide

  6. 6

    View Slide

  7. 自己紹介
    ● 2017年 freee株式会社
    ○ 電子証明書を利用したアカウントアグリゲーション用アプリ( Windows)
    ○ マイナンバーカードを利用した電子申告アプリ( macOS)
    ○ クラウド会計サービスのアカウントアグリゲーション機能のマイクロサービスの開発
    ○ 金融機関とのAPI連携のためのOAuth2.0認証・トークン管理マイクロサービスの開発
    7
    https://customers.microsoft.com/ja-jp/story/freee-professional-services-xamarin-azure-visual-studio-japanese-japan

    View Slide

  8. 自己紹介
    ● golang.tokyo 運営
    ○ https://golangtokyo.connpass.com/
    ○ メルカリ、DeNA、eureka、freee、Wantedly etc...
    ○ 月イチで勉強会
    ○ 技術書典で合同誌の執筆
    ● Go Conference 運営
    ○ https://gocon.connpass.com/
    ○ 半年に一回カンファレンスを実施
    ■ google Goチーム、海外からの登壇も
    ○ Goのリリースに合わせたリリースパーティ
    8

    View Slide

  9. Go Conference 2019 Autumn
    ● https://gocon.jp/
    9

    View Slide

  10. 今日のテーマ

    Goの紹介

    実際に使ってみて

    10
    /

    View Slide

  11. アジェンダ
    ● 自己紹介
    ● Goとは
    ● Goが生まれた背景・設計思想
    ● 業務で利用して実感するGoの良さ
    ● 実際にGoを始めるための第一歩
    11

    View Slide

  12. アンケート

    12
    /

    View Slide

  13. Goを使ったことがある方?
    13

    View Slide

  14. merpay
    14

    View Slide

  15. kyash
    15

    View Slide

  16. Pairs(eureka)
    16

    View Slide

  17. Nature Remo
    17

    View Slide

  18. LOVOT (Groove X)
    18

    View Slide

  19. Wantedly
    19

    View Slide

  20. Go採用企業
    ● GAFA
    ● Uber
    ● Sony
    ● LINE
    ● DeNA
    ● CyberaAgent
    ● CookPad
    ● Preferred Networks
    ● バンダイナムコ
    ● etc...
    20

    View Slide

  21. Goで作られたOSS
    ● Docker
    ● Kubernetes
    ● Terraform
    ● Hugo
    ● Prometheus
    ● etc...
    21

    View Slide

  22. Goが活躍できる場所
    ● Linux / macOS / Windows
    ● Web
    ● IoT
    ● Mobileアプリ
    ● WebAssembly
    ● AWS Lambda / Google Functions
    ● Google App Engine
    22

    View Slide

  23. Goとは

    23
    /

    View Slide

  24. Goとは
    ● Googleで2007年に考案(OSS化は2009年)
    ○ Robert Griesemer
    ○ Rob Pike
    ○ Ken Thompson
    ● 半年に1度のリリース
    ○ 現在1.13.1が最新
    24
    The Go gopher was designed by Renee French.

    View Slide

  25. Goとは
    ● 強い静的型付け、型推論
    ● コンパイル言語
    ● 手続き型
    ● オブジェクト指向ではない
    ● ポインタがある
    25

    View Slide

  26. ● https://blog.golang.org/gopher
    ● マスコットキャラクター
    ● Go's New Brandの中で
    厳格な(?)仕様が
    The Go Gopher
    26
    Go Brand Book より

    View Slide

  27. 生まれた背景

    設計思想

    27
    /

    View Slide

  28. Goは何を目的に作られたのか?
    ● プログラミング言語には生まれた背景・言語哲学がある
    ● 例えばHaskell
    ○ 当時乱立していた関数型言語を統一するため
    ● 例えばRuby
    ○ ストレスなくプログラミングできる
    28

    View Slide

  29. Goは何を目的に作られたのか?
    ● Go
    ○ ソフトウェア開発の中で発生していた課題解決のため
    ● Go登場以前のGoogleのソフトウェア開発
    ○ C++, Java, Python
    ○ ビルド時間のコスト
    ○ プログラミングコードの安全性
    29
    https://talks.golang.org/2012/splash.article

    View Slide

  30. Goは何を目的に作られたのか?
    ● コンパイル速度が速いこと
    ● 安全に書けること
    ● 本質にフォーカスした開発ができること
    ● 「スマートさ」が目的ではない
    ○ ジェネリクス / モナド / ラムダなどはない
    ○ 例外機構もない
    30
    https://talks.golang.org/2012/splash.article

    View Slide

  31. ● スクリプト言語のプログラミングの容易さ
    ● コンパイル言語の効率と安全性
    ● ネットワークプログラミング
    ● マルチコアコンピューティング
    Goは何を目的に作られたのか?
    31
    https://golang.org/doc/faq#creating_a_new_language

    View Slide

  32. Simplicity - 徹底的な簡潔性
    ● GoのMission
    ○ Creating software at scale
    ○ Running software at scale
    ● システムは成長する際に、デザインの簡潔性を通してのみ、
    安定し、安全であり、首尾一貫したままでいられる
    32
    Go's New Brand の Mission, プログラミング言語 Go まえがき より

    View Slide

  33. ● 複雑性は明瞭性を失う例
    ○ No free, Only GC
    ○ 単純な並行処理
    ■ “go”と書くだけ
    ■ no ID
    ■ ステータス
    Simplicity is Complicated
    33
    Simplicity is Complicated より

    View Slide

  34. 安定した言語仕様
    ● Simplicityを体現するために
    ● Goは1.0(10年前)から言語仕様がほとんど変わらない
    ○ 予約語も25個から増えない
    ● 今後もGo1.Xのうちは言語仕様は変わらない
    ○ 変わるのはGo2から
    ○ Go 2は4年後(Go 1.20)くらい?
    34
    Go2については Toward Go 2 より 微妙な言語仕様の変更はたまに入る(例 :Go.1.10)

    View Slide

  35. ● https://blog.golang.org/toward-go2
    ● Go2に至る仕様策定プロセス
    ● Proposalは誰でも見れる
    ○ Go 2 Draft Designs
    ● Go Teamは意見を求めている
    開かれた仕様策定(Toward Go 2)
    35
    英語が難しかったら Gopher Slackの #japan などでも議論してます

    View Slide

  36. ● Goは身近なサービス・企業で使われている
    ○ 決済のようなミッションクリティカルなサービスにも
    ● Goはソフトウェア開発の課題解決を目指した言語
    ○ Creating software at scale
    ○ Running software at scale
    ● 単純さの中に生産性を見出している(UNIX思考的)
    ここまでのまとめ
    36

    View Slide

  37. 言語仕様詳細

    特徴

    37
    /

    View Slide

  38. 少ない予約語
    38
    https://golang.org/ref/spec#Keywords

    View Slide

  39. 複素数型
    ● プリミティブな型として
    複素数をサポート
    39
    https://play.golang.org/p/bm9P4fMInGE

    View Slide

  40. スライスとrange
    ● 可変長配列
    ● オブジェクトに対する反復処理
    40
    https://go-tour-jp.appspot.com/moretypes/16

    View Slide

  41. ポインタ
    ● ちょっとゆるい
    ● (*p).Xと書かなくても良い
    41
    https://go-tour-jp.appspot.com/moretypes/1

    View Slide

  42. interface
    ● ダックタイピングを採用
    ● 提供者ではなく利用者が定義する
    ○ 実装提供者に依存せずに利用できる
    42
    https://go-tour-jp.appspot.com/methods/9

    View Slide

  43. goroutineとchannel
    ● ランタイムが管理する軽量スレッド
    ● goroutine間を通信するパイプ
    43
    https://go-tour-jp.appspot.com/concurrency/2

    View Slide

  44. 多値とエラー
    ● 関数・メソッドは複数の値を返しうる
    ● 例外機構はない
    44
    https://go-tour-jp.appspot.com/methods/19

    View Slide

  45. Goの良さ

    45
    /

    View Slide

  46. ● gofmt
    ● linterの充実
    ○ 変な争いをしたり不毛な指摘をせずに済む
    ● ほぼDSLを覚えなくて良い
    ○ 脳内メモリをロジックに集中できる
    ● GoDoc
    業務で利用して実感するGoの良さ
    46

    View Slide

  47. ● 可読性
    ● 再配布の容易性
    ○ 各OS向けに簡単にビルドできる
    ● デプロイ容易性
    ● バイナリイメージの小ささ
    業務で利用して実感するGoの良さ
    47

    View Slide

  48. ● RailsのようなWAFを使ったスピードには勝てない
    ○ いろいろ選択する必要はある
    ○ 各社内製ライブラリを自作してカバー
    ● ビューの実装は苦手
    業務で利用して実感するGoの良さ
    48

    View Slide

  49. Goを始める

    49
    /

    View Slide

  50. ● Webブラウザ上でGoの仕様を一通り学べる
    ○ https://tour.golang.org/
    ● 日本語版あり
    ○ https://go-tour-jp.appspot.com
    Tour of Go
    50

    View Slide

  51. ● https://amazon.jp/dp/4621300253
    ● 日本語で書かれたGoの書籍の中で一番体系的な書籍
    ● なぜインターフェースは小さく作るべきか
    ● Goのカプセル化へのアプローチ
    ● なぜtesting pkgにはsetup/teardownやassertがないのか
    ● なぜ例外を持たないのか
    プログラミング言語Go(書籍)
    51

    View Slide

  52. ● https://amazon.jp/dp/4297107279
    ● 環境構築
    ● CLIツールの作り方
    ● テストの書き方
    ● DBを使ったWebサーバの構築
    ● まずなにか作ってみたい!という時に最適な一冊
    改訂版 みんなのGo言語(書籍)
    52

    View Slide

  53. ● Goはソフトウェア開発の課題解決を目指した言語
    ○ 単純さの中に生産性を見出している(UNIX的思考)
    ● 単純で高い可読性によるコーディングのしやすさ
    ● デプロイ容易性による活躍の場の広さ
    ○ マルチプラットフォーム
    ○ シングルバイナリ
    ○ 少ないビルド時間
    まとめ
    53
    ©tottie | Renee French ( original design )

    View Slide