My External Storage

Nov 16, 2019 - 11 minute read - Comments - Go report

Go Release 10 Year Anniversary Party in Tokyo参加メモ

メルカリさんで行われたGoリリース10周年パーティに参加したので、遅くなったが参加メモ。
Goは今年でOSS10周年!

Go Release 10 Year Anniversary Party in Tokyo
URL https://gocon.connpass.com/event/153665/
会場 株式会社メルカリ 東京都港区六本木6-10-1 六本木ヒルズ森タワー21F
日時 2019/11/11(月) 19:30 〜 22:00
ハッシュタグ #GoTurns10
Toggetter https://togetter.com/li/1429242

TL;DR

Goは10年前の2009年11月10日に世間へ公開された。
今回はGoが公開されて10周年ということで、(Go以前のプログラミング言語の歴史も含めた)Goの歴史や未来の話を聞くことができた。
お祝いということで、みなさん普段オープンな場所では言えないような貴重な話をしてくださった。
上記のとおりなので、書いていいことが少なかったりするのだが、とても良い回だったのでメモしておく。

History of Go by ymotongpoo

@ymotongpooさんの発表。

Go言語は2009年10月30日にRob PikeがGoogleの社内プレゼンで初めて登場した。

Goが生まれる前のプログラミング言語の歴史、Goの歴史、Goの未来の話。

Foundations 1960-2007

  • 1950年代 ハードウェアベンダー独自のプログラミング言語が主体。各ハードウェア専用の言語しかなかった。
  • 1958年ALGOLという統一言語が発表された。
  • 以降、様々なプログラミング言語が開発され、多くの系統図がある。

Concurrencyの進化 1964-2007

  • 多くのプログラミング言語が開発され、並行性のアプローチも数多く作られた。
    • Mutex、共有メモリベース、メッセージパッシング…
  • 78年にはTony HoareがGoの並行処理モデルの原型であるCSPを発表した。

Refraction 2009-2019

  • GoogleのRob PikeはC++のコンパイル時間(45分間)を待っている時間に考えた。
  • 今度発表されるC++11を使うようになったら何ができるようになるのか。
    • そんなに機能が増えても本当に必要なのか?今でもコンパイルに45分かかるのに?
  • たまたま自席の後ろにいたRobert Griesemerと話し、隣の部屋にいたKen Thompsonも加えて議論がはじまった。
  • そこにIan Lance Taylor、Russ Coxが加わりコンパイラも作成された。
  • Goはいろいろな言語から必要な言語仕様だけを抽出してできた。
    • 想像と収斂を大事にしていて、他の言語のような発展とか複雑化を避けている。
  • No is Temporary, Yes is Forever
    • 間違ったものは入れない。
  • 2009年からGenericsの話はあったけどずっと入れなかった。IanはGenericsのドラフトを7回書いて捨てている。

Goの発展と周辺環境

  • Goといえばgofmtがキラーツール。みんなが同じフォーマットで書く。
    • 最初から存在していた
    • Goのソースコードをコンパイルするとgoコマンドとgofmtコマンドがビルドされる。
  • Go1は2012年にリリース。が、その前からHerokuやApp EngineはGoをサポートしていた。
  • 2013年 PackerやCoreOS、DockerがGoで書かれ始めた。
  • 2014年 Kuberenetesも公開。その後もTerraformなどCNCFのツールの大多数がGoで書かれている。
  • 2014年頃Goは1.5に。ついにGOのコンパイラもGoで書かれるようになり、Goが読めればruntimeも読めるようになった。
  • 2016年 Go1.6になり、contextパッケージが標準パッケージに採用された。
  • 2017年にはGCが速くなり、2018年にはvgoも発表された。
  • 2019年はコントリビュータが2100人にもなっている。(前年度比30%UP)
  • Conference開催数も2018年の2倍になっている。

Future 2019

  • Goをどう勉強すればいいのか?Tour of Go以外の情報もどんどん提供して開発者を支援していきたい
    • 言葉の通り、2019/11/14にポータルサイトが公開された。その中に学習のための情報もまとめられている
  • Go1.13ではGo Proxyが導入されたり、Go1.14以降もモジュール対応がいろいろ入っていくだろう。
  • Go2はどうしても今ある言語仕様を破壊しても入れたい変更が入ったとき。明確にGo2の仕様やリリース時期があるわけではない。
  • TinyGoやGioなど今まで話題が少なかった分野へのアプローチも始まっている。
  • エッジコンピューティングでも使えるかな…?

感想

Goが生まれたときの背景は以前からGo at Googleなどを読んでなんとなく知っていた。

しかし、Rob Pike-sanのコンパイル待ちから始まっていたのは議論がはじめて聞いた。
なんともめぐり合わせだなと思った。隣の部屋にKen Thompsonがいて、しゅっとコンパイラを作ってしまう Ian TaylorがいるっていうGoogleがすごすぎる。
No is Temporary, Yes is Foreverの精神はなかなか強い信念と、自分たちの判断に自信がなくてはできないことだと思う。
こういったとてつもない偶然と、強い気持ちで支えられて発展しているGoはとても素敵だなと思ったし、もっと好きになった。

AppEngine Standard for Go の移り変わり sinmetalの思い出から by sinmetal

@sinmetalさんのAppEngine(以下GAE)にまつわるGoの思い出。

  • 最初はApp Engine SDKにGAE専用のGoが同梱されていた。
  • 最初のApp EngineはGOPATH以下のソースを全部アップロードするヤバいやつだった。
    • みんなプロダクト別のGOPATHを設定したりしていた。
  • context.Contextが導入される前(Go1.7より前)からGAE/Goにはappengine.Contextがあった
  • Goは依存関係管理ツールが公式ではない時代があり、壊れていてもmasterをみてしまうのが辛かった
  • GAE用の依存関係管理ツールやテストツールがあったり、独自文化もあった。
  • urlfetchパッケージを使わないと外部APIにアクセスできず、内部的にhttpパッケージを使っているライブラリは(mattnさんのWindows対応並に)GAE/Go対応するPRをガシガシ投げていくしかなかった
  • 良くも悪くも今のGAE/GoはGAE固有機能はほぼ消滅して、2nd genでは単純なGoのhttp serverとしてのアプリケーションが作れるようになった

感想

GAEは始めよう始めようと思い全然さわれていなかったが、2nd genの話などうっすらとは聞いていた。
appengineパッケージを使わないといけない独自仕様がちょっとあるよ」というのは知っていたが、昔の苦労時代は全然知らなかった。
GAEは無料でも始められるので、2019年のうちに私もGAE初デプロイしておきたい。

Go beyond the frame of eureka by kaneshin

ネットにほとんどGoの情報がないころからEurekaでGoを使っていた@kaneshinさんの発表。

  • PairsとGoとモノレポの話。
  • GDB辛い問題。
  • (どこまで書いていいのかわからないclosedの話だったので詳細は割愛)

感想

モノレポの話は来月のアドベントカレンダーで執筆する予定とのこと。

私は2016年くらいのGoから知っているが、たしかにその頃でさえあまり情報がなくて業務で使うにはかなりのハードル(地雷は自分で踏んで自分で解決する)があったのかなと思う。 かねしんさんが10周年で公開してくださった電子書籍は以前に購入して読んでいるが本当にオススメ!

YourCastとHAROiDでのGo利用の遍歴とこれからの展望 by わんこ。

エンタメ業界でGoを使っている@わんこ。さんの発表。

  • 初めてGoで作ったのはソシャゲの詫び石高速付与ツール。
  • 現在はYourCastでTV事業をしている。
  • TVで利用していると、放送開始前は0rps(秒間リクエスト)がいきなり数万rpsになる。
  • 当然、放送中はSLA100%が絶対。
  • 全国5300万のTVがクライアントになる。
  • そのような環境でもGoは安心して使えている。
  • トリッキーな実装しなくても十分なパフォーマンスがでる。
  • 標準パッケージが最強。ベンチ・テストがあるのがいい。
  • TRiSH
    • 高負荷専用ETLサービス
    • json.RawMessageでの遅延評価
    • goroutineとchannelでファイル監視
  • 千手観音
    • 10万クライント 20万rpsのシミュレートを$2くらいでできる高負荷検証ツール
    • channelにresult summary
    • OSSにしたい
  • GoはCommunityがあるから発展する。Communityと一緒に発展していける。わんこ。さん自身もコミュニティを通して今の会社に務めている

感想

SLA100%のような超高可用性が求められる現場での活用事例を聞くことが出来てよかった。
テストツールなどでも利用されているとのことで、私もgoroutineを湯水のように使うツールを書いてみたいなと思った。
私自身も11月からコミュニティを通じて転職しているので、Goのコミュニティ活動の繋がり、広がりは非常に感じている。

Goコミュニティの振り返りとこれから by tenntenn

@tenntennさんの国内コミュニティについての発表。

  • 初めてGoを触ったのは学生の頃。まだ、golang.orgじゃなかった。
  • 日本初のGoの勉強会は?
  • 沖縄から北海道まで全国にGoコミュニティができている!
  • 各地と中継して勉強会も開催するようになってきた
  • いろんな人が参加できる勉強会を
    • Women Who Go Tokyo
    • 初学者向けのハンズオンやコードラボ
    • オンラインで参加できる勉強会
  • Go Conferenceの平日開催・有料化について
    • 無料で行なうのは限界が近づいてきた
    • さらに良くしてくために法人化、運営の増強、開催サイクルの見直しを考えている

感想

私もgolang.tokyoやGo Conferenceに運営として参加している。
Go Conferenceは様々な企業のみなさまにもスポンサーしていただけており、Goの広まりはすごいなと思う。
発表中にもあったが、百人規模のイベントをするのはなかなか大変なので運営に協力していただける方を募集中です。
(会場調整、各スポンサー様とのやりとり、Webサイトの更新など…)

終わりに

私がGoを初めて触ったのは、柴田さん(@yoshiki_shibata)が行なった社内Go研修だった。

バージョン的にはGo1.6が出たあたりで、まだcontext.Contextはなかった。
プログラミング言語Goの練習問題をほぼ全部書いて、チャットとかFTPサーバの実装をしていた。
私はもともとCからプログラミングを始めていて、「シンプルな並行処理、必要十分な標準パッケージ、これがAlternative Cだ!!!」とすごい感動した(C++はCとは書き味が全く異なる気持ち)。

その後Goを業務で書きたくて転職して、2018年くらいから業務でもGoを書いている。
Goを覚えた後C#、Ruby、React、PHP、Pythonも始めたのだけれど、今でも一番Goが好きだ。
私はあまりコードでGoに貢献できないので、golang.tokyoやGo Conferenceの活動でGoコミュニティに貢献している。
tenntennさんの発表の通り、今後もGoコミュニティが活発になり、いろいろな人、企業がGoを書くようになると嬉しい。

参考

関連記事