The Go gopher was designed by Renée French.
The gopher stickers was made by Takuya Ueda.
Licensed under the Creative Commons 3.0 Attributions license.
そうだ、Goを始めよう
2018年1月16日(火)
@GDG Tokyo New Year Seminar 2018
自己紹介
上田拓也
@tenntenn
所属
コミュニティ活動
&
Go ビギナーズ
Go Conference
上田拓也
@tenntenn
ソウゾウ エキスパートチーム
技術をアウトプットするところに技術は集まる
■ エキスパートチームとは?
● 50%以上の時間を技術コミュニティへの貢献に充てる
■ エキスパートチームの役割
● 社内に新しい技術を取り取り込む
● 社外のコミュニティなどを通じて社会へ還元する
■ エキスパートチームの活動
● カンファレンス・勉強会の開催/運営
● 対外的な講演活動
● 執筆、雑誌への寄稿、インタビュー
● 社内外での担当技術の普及推進
@tenntenn
担当:Go・GCP
@mhidaka
担当:Android
メンバー
そうだ、Goを始めよう
Goとは?
■ Googleが開発したプログラミング言語
● 2009年11月に最初のバージョンをオープンソースで公開
○ 2012年3月に正式バージョンであるGo1.0を公開
○ 2017年12月の最新バージョンはGo1.9
● Robert Griesemer、Rob Pike、Ken Thompsonによって設計された
■ 特徴
● 強力でシンプルな言語設計と文法
● 並行プログラミング
● 豊富な標準ライブラリ群
● 周辺ツールの充実
● シングルバイナリ・クロスコンパイル
Goが開発された理由
■ Google内の課題を解決するために開発された
● 開発速度の低下
○ 超巨大なコードベース
○ 複雑な依存関係
● マルチコア時代のシステム言語
○ 並行処理とガベージコレクタを同時に採用
● 軽量プログラミング言語(LL, Light weight Language)の盛り上がり
○ 静的型付け言語だとコンパイル時にエラーが発見できる
○ 動的型付け言語だと書きやすい
○ いいところ取りの書きやすい静的型付け言語がない
Goを学ぶ理由
■ 多くのプロダクトで採用
■ メルカリ、メルカリ カウル
■ Docker、Kubernetes
■ AbemaTV、AWA
■ AndApp
■ ペアーズ
■ チーム開発に向いている
■ 静的型付け
■ 文法がシンプル
■ パフォーマンスが良い
■ ゴールーチンとチャネル
■ バイナリになる
スタートアップから
大規模開発まで対応できる
よし、Goを始めよう
でも、自前でサーバたてるの大変ですよね?
Google App Engineでも使えるよ
Google App Engineとは
■ Google が提供するPaaS
● 高いスケーラビリティ
● メンテナンスコストが低い
■ スタンダード環境とフレキシブル環境
● スタンダード環境
○ 従来からあるGAEの環境、SEとも
○ Go、Java8、Python 2.7、PHPが使える
○ Goはインスタンスの起動が恐ろしく早い
● フレキシブル環境
○ 旧MVMs、FEとも
○ Go、Java8、Python 2.7/3.4、Node.js、Ruby
11
簡単に始められる
※GopherConのパンフレットより
でも、サーバサイドの言語ですよね?
コマンドラインツールも作れるよ
標準パッケージが充実
■ コマンドラインツールに便利な標準パッケージ
flag コマンドライン引数
os, path/filepath ファイル操作など
strings テキスト処理
encoding JSON, XML, CSVなど
コマンドラインツールを作ろう
■ 環境変数のGOOSとGOARCHを指定する
 開発環境とは違うOSやアーキテクチャ向けにクロスコンパイルできる
16
シングルバイナリになるので
動作環境を用意しなくてよい
# Windows(32ビット)向けにコンパイル
$ GOOS=windows GOARCH=386 go build
# Linux(64ビット)向けにコンパイル
$ GOOS=linux GOARCH=amd64 go build
※ go build はGoのソースコードをビルドするコマンド
よし、Goを始めよう
でも、Androidエンジニアだし...
モバイルアプリも作れるよ
Go Mobile
■ Goでモバイルアプリを作るツール群
● iOS / Androidに対応
● golang.org/x/mobile
■ 2通りのスタイル
● Nativeアプリ
⇒ Goだけで書く
● SDKアプリ
⇒ Goで書いたライブラリを呼び出す
参考:https://github.com/golang/go/wiki/Mobile
よし、Goを始めよう
でも、フロントエンドエンジニアだし...
フロントエンド書けますよ
GopherJS
■ GoからJavaScriptを生成するツール群
● ゴールーチンとチャネルに対応
● ほとんどの標準パッケージに対応
● Node.JSでも動く
● Java(Nashorn)でも動く
デモ
https://gopherjs.github.io/playground/
でも、重いんでしょ?
WebAssemblyに対応が進んでる
■ WebAssembly
● ブラウザ上で実行できるバイナリ形式の言語
● ネイティブに近いパフォーマンスで動作する
● C/C++などをコンパイルする
■ Goの対応状況
● https://blog.gopheracademy.com/advent-2017/go-wasm/
● 実装が進み始めている
● まだJSとの連携を取る方法がない
デモ
https://blog.gopheracademy.com/advent-2017/go-wasm/
よし、Goを始めよう
どうやって勉強するの?
A Tour of Go
■ ブラウザ上で実行できるチュートリアル
● https://go-tour-jp.appspot.com
ドキュメントを読む
■ 言語仕様
● コンパクトな言語仕様なので簡単に読める
■ Go Code Review Comments (日本語訳)
● Goらしい書き方が学べる
■ Effective Go
● Code Review Commentsより詳しい内容
■ パッケージドキュメント
● ドキュメントをしっかり読む
Goをコミュニティで学ぶ
■ Goビギナーズ
● https://go-beginners.connpass.com/
● 初心者向けのGoのコミュニティ
■ golang.tokyo
● https://golangtokyo.connpass.com/
● Goの採用企業間で情報共有をするコミュニティ
■ Go Conference
● https://gocon.connpass.com/
● 日本最大のGoのカンファレンス
■ Gophers Slack
● https://invite.slack.golangbridge.org/
● 世界中のGopher(Goのユーザ)が集まる
Go ビギナーズ
Go Conference
大学で学ぶ
■ 2018年は大学で講義する予定です
● 集中講義を計画中
● おそらく2校くらい
● 他にも絶賛募集中
■ 学生のGoのコミュニティもあります
● 招待フォーム:https://goo.gl/vm7PpN
まとめ
■ Goでできること
● サーバサイドの言語として
○ Google App Engineではじめよう
● コマンドラインツールを作る
● モバイルアプリを作る [experimental]
● フロントエンドを書く
○ GopherJS
○ WebAssembly [experimental]
■ Goを学ぶ
● 公式チュートリアルやドキュメント
● コミュニティ
● 学校
Thank you!
twitter: @tenntenn
Qiita: tenntenn
connpass: tenntenn
36

そうだ、Goを始めよう