第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/

Eb6be531bcfaa99714d8d3b48665a5a9?s=128

Yoichiro Shimizu

October 04, 2019
Tweet

Transcript

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

  2. • 清水 陽一郎 @budougumi0617 ◦ Backend Engineer ◦ Go /

    Ruby • Blog ◦ 毎週書いてる 自己紹介 2
  3. 自己紹介 • 埼玉大学大学院数理電子情報系専攻 博士前期課程修了 • 2011年 リコーITソリューションズ株式会社入社 ◦ 商業印刷用プリンタの外部コントローラ開発 etc...

    • Java研修/Java8研修/Go言語研修 受講 3 https://twitter.com/yoshiki_shibata/status/820074722700296193
  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
  5. GoConference’19 5

  6. 6

  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
  8. 自己紹介 • golang.tokyo 運営 ◦ https://golangtokyo.connpass.com/ ◦ メルカリ、DeNA、eureka、freee、Wantedly etc... ◦

    月イチで勉強会 ◦ 技術書典で合同誌の執筆 • Go Conference 運営 ◦ https://gocon.connpass.com/ ◦ 半年に一回カンファレンスを実施 ▪ google Goチーム、海外からの登壇も ◦ Goのリリースに合わせたリリースパーティ 8
  9. Go Conference 2019 Autumn • https://gocon.jp/ 9

  10. 今日のテーマ
 Goの紹介
 実際に使ってみて
 10 /

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

    実際にGoを始めるための第一歩 11
  12. アンケート
 12 /

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

  14. merpay 14

  15. kyash 15

  16. Pairs(eureka) 16

  17. Nature Remo 17

  18. LOVOT (Groove X) 18

  19. Wantedly 19

  20. Go採用企業 • GAFA • Uber • Sony • LINE •

    DeNA • CyberaAgent • CookPad • Preferred Networks • バンダイナムコ • etc... 20
  21. Goで作られたOSS • Docker • Kubernetes • Terraform • Hugo •

    Prometheus • etc... 21
  22. Goが活躍できる場所 • Linux / macOS / Windows • Web •

    IoT • Mobileアプリ • WebAssembly • AWS Lambda / Google Functions • Google App Engine 22
  23. Goとは
 23 /

  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.
  25. Goとは • 強い静的型付け、型推論 • コンパイル言語 • 手続き型 • オブジェクト指向ではない •

    ポインタがある 25
  26. • https://blog.golang.org/gopher • マスコットキャラクター • Go's New Brandの中で 厳格な(?)仕様が The

    Go Gopher 26 Go Brand Book より
  27. 生まれた背景
 設計思想
 27 /

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

    ストレスなくプログラミングできる 28
  29. Goは何を目的に作られたのか? • Go ◦ ソフトウェア開発の中で発生していた課題解決のため • Go登場以前のGoogleのソフトウェア開発 ◦ C++, Java,

    Python ◦ ビルド時間のコスト ◦ プログラミングコードの安全性 29 https://talks.golang.org/2012/splash.article
  30. Goは何を目的に作られたのか? • コンパイル速度が速いこと • 安全に書けること • 本質にフォーカスした開発ができること • 「スマートさ」が目的ではない ◦

    ジェネリクス / モナド / ラムダなどはない ◦ 例外機構もない 30 https://talks.golang.org/2012/splash.article
  31. • スクリプト言語のプログラミングの容易さ • コンパイル言語の効率と安全性 • ネットワークプログラミング • マルチコアコンピューティング Goは何を目的に作られたのか? 31

    https://golang.org/doc/faq#creating_a_new_language
  32. Simplicity - 徹底的な簡潔性 • GoのMission ◦ Creating software at scale

    ◦ Running software at scale • システムは成長する際に、デザインの簡潔性を通してのみ、 安定し、安全であり、首尾一貫したままでいられる 32 Go's New Brand の Mission, プログラミング言語 Go まえがき より
  33. • 複雑性は明瞭性を失う例 ◦ No free, Only GC ◦ 単純な並行処理 ▪

    “go”と書くだけ ▪ no ID ▪ ステータス Simplicity is Complicated 33 Simplicity is Complicated より
  34. 安定した言語仕様 • Simplicityを体現するために • Goは1.0(10年前)から言語仕様がほとんど変わらない ◦ 予約語も25個から増えない • 今後もGo1.Xのうちは言語仕様は変わらない ◦

    変わるのはGo2から ◦ Go 2は4年後(Go 1.20)くらい? 34 Go2については Toward Go 2 より 微妙な言語仕様の変更はたまに入る(例 :Go.1.10)
  35. • https://blog.golang.org/toward-go2 • Go2に至る仕様策定プロセス • Proposalは誰でも見れる ◦ Go 2 Draft

    Designs • Go Teamは意見を求めている 開かれた仕様策定(Toward Go 2) 35 英語が難しかったら Gopher Slackの #japan などでも議論してます
  36. • Goは身近なサービス・企業で使われている ◦ 決済のようなミッションクリティカルなサービスにも • Goはソフトウェア開発の課題解決を目指した言語 ◦ Creating software at

    scale ◦ Running software at scale • 単純さの中に生産性を見出している(UNIX思考的) ここまでのまとめ 36
  37. 言語仕様詳細
 特徴
 37 /

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

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

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

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

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

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

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

  45. Goの良さ
 45 /

  46. • gofmt • linterの充実 ◦ 変な争いをしたり不毛な指摘をせずに済む • ほぼDSLを覚えなくて良い ◦ 脳内メモリをロジックに集中できる

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

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

  49. Goを始める
 49 /

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

    Go 50
  51. • https://amazon.jp/dp/4621300253 • 日本語で書かれたGoの書籍の中で一番体系的な書籍 • なぜインターフェースは小さく作るべきか • Goのカプセル化へのアプローチ • なぜtesting

    pkgにはsetup/teardownやassertがないのか • なぜ例外を持たないのか プログラミング言語Go(書籍) 51
  52. • https://amazon.jp/dp/4297107279 • 環境構築 • CLIツールの作り方 • テストの書き方 • DBを使ったWebサーバの構築

    • まずなにか作ってみたい!という時に最適な一冊 改訂版 みんなのGo言語(書籍) 52
  53. • Goはソフトウェア開発の課題解決を目指した言語 ◦ 単純さの中に生産性を見出している(UNIX的思考) • 単純で高い可読性によるコーディングのしやすさ • デプロイ容易性による活躍の場の広さ ◦ マルチプラットフォーム

    ◦ シングルバイナリ ◦ 少ないビルド時間 まとめ 53 ©tottie | Renee French ( original design )