LoginSignup
30
14

More than 1 year has passed since last update.

Qiita Night〜これだけは伝えたい!Goのすごさとその将来性〜のイベントレポート

Posted at

概要

コンテンツ

  • LT
    • 弊社でのGoの取り組み〜どう広げたか、その後の人員戦略〜」/ @bikun_bikun
    • スケールするGo / @tenntenn
    • Googleソフトウェアエンジニアリングに沿った開発をするためのGoの利便性 / @po3rin
  • トークセッション / @tenntenn , @po3rin
    • Goはどんな風に使える?ここが便利!
    • Goを使う仲間をもっと増やしたい!Goの魅力と将来性

LT

弊社でのGoの取り組み〜どう広げたか、その後の人員戦略〜」

  • スピーカー:@bikun_bikun
  • 所属:ディップ株式会社(2018/05〜)
  • Go歴:
    • ディップ社入社後から触り始めた
    • Go製のプロダクトのチームビルディングやリード

メモ

  • ディップ社のGoの広がり
    • 当時の振り返り
      1. みんな初心者
        • OSSのコード読んだり、勉強会に参加し知見をためていった
        • Goに明るい方の参画でチームナレッジがたまった
        • つまづきそうな部分を抜き出し、チュートリアルを作り、新メンバーに解いてもらうようにし、ソフトランディングしやすくした
      2. ”正しい”書き方がわからない
        • OSSのコードを読んでブラッシュアップ
        • 良いところを取り入れながら自分たちのスタイルを作っていく
        • 1からは辛い、ディレクトリ構成などは「golang-standards/project-layout」に寄せる対応など
      3. リリースして終わりじゃない
        • 制約下でCI/CDを組んで解決
          • オンプレ中心からAWS中心になってきたため、Jenkinsやdrone.ioからCodeBuild、CodePipeline、CodeDeployなどで自動化加速
      4. リリース時にバイナリ再起動が必要
        • オンプレ環境だったので、1台ずつLB outして対応
          • コンテナベースの仕組み利用っで課題はなくなってきた
    • 時系列
      • 2017初めにデータ連携バッチをGoで実装したのがディップ社のGo文明の始まり
      • 2018アプリ向けGatewayAPIリリース、プロモーション向けAPIリリース、Goプロダクトの広がり
      • 2018下旬スマートフォンアプリで認証機能サービスをGoで実装
      • 2019サブシステム周りでGoの利用が活発化
      • 2021新規プロダクトのコア部分にGoを採用
  • 人員戦略
    • Goの採用が広がるにつれ、既存メンバーだけでは新規開発、運用が回らなくなってきた
      • 案①社内異動
        • 他チームでもやることがたくさんあり、非現実的
      • 案②採用
        • 正攻法だがすぐにどうかなるものでもない
      • 案③パートナーさんに頼る
        • Goできる人自体少ないので、一緒にGoやりたい、学びたいという人にも来てもらい一緒に高まった
          • パートナーさん含めみんなで高まる意識が増え、いい意識づくりもできたし、採用にもつながった
  • Goの魅力
    • 標準で用意されているツール群
      • Formatter、テスト、パッケージ管理などが標準で用意されている
      • gofmt、goimportsはバラバラになりがちなものを統一してくれる
    • シンプルな言語(not Easy)
      • 触り始めでも理解しやすく書きやすい
      • throw-catchがないので基本的には上から読んでいける
        • 例外でジャンプではなく都度エラー処理を行う
    • 並行処理の書きやすさ
      • シンプルな並行処理は書きやすい
      • 途中からでも特定の箇所を並行処理に直す、みたいなことのしやすさ
    • ワンバイナリ
      • ポータブル性
      • ビルドのおかげで事前にバグがわかるケースがある
    • Goユーザーの愛情深さ
      • Tour of Goを始めとしたチュートリアルの日本語資料の充実
        • Gopher道場のみなさまに大感謝

スケールするGo

  • スピーカー:@tenntenn
  • 所属:株式会社メルペイ
    • Google Developer Expert (Go)
    • 一般社団法人Gophers Japan代表
    • Go Conference主催者
  • 資料

メモ

  • Goが開発された背景
  • リリースサイクルと後方互換性
    • Goは毎年8月と2月にリリースされる
      • マイナーバージョンがアップされる
      • リリース3ヶ月前からDevelopment Freezeに
      • バグ修正とドキュメント修正以外は基本的に行われない
      • リリース2ヶ月前からベータ版が、1ヶ月前からRC版がリリースされる
    • Go1の間は言語の後方互換が保たれる
      • 言語仕様に破壊的変更が基本的にはない(例外もあり)
  • Goが生み出したもの
    • Goとともに浸透した文化
      • コードフォーマット
        • gofmtによる書式(スタイル)の統一
      • インポートパス
        • ソースコードの中に依存関係が記述される
        • ホスティング場所もわかるので、ツールやライブラリを簡単に公開できる文化
    • GoチームとGoコミュニティの関係
      • コミュニティの意見を取り込んでくれる
        • プロポーザルの受け入れや、半年に1度のサーベイ
    • Goに入ってはGoに従え
      • ≠ Goに慣習に従いなさい
      • どの言語を学ぶ際にも必要な考え方
        • 自然言語でも同じ
      • なぜGoが開発されたのかを知ること
      • 1つ1つの言語機能には開発された背景がある
  • これまでのアップデート(すべて互換性を保ったままという点がすごく良い)
  • キャッチアップするには?

Googleソフトウェアエンジニアリングに沿った開発をするためのGoの利便性

  • スピーカー:@po3rin
  • 所属:エムスリー株式会社 AI・機械学習チームのソフトウェアエンジニア
    • 検索基盤周りの担当

メモ

  • エムスリーはGoを至るところで使っている
    • アプリケーション、検索、レコメンド、リランキングなど各種API
    • データ連携
    • Push通知基盤
    • 便利ツールの開発
  • エムスリーではMLエンジニアもGoが書ける

  • コードの一貫性の重要性
    • 無駄な議論を減らせる
    • スケーリングを可能にする
    • 時間に対する強靭性
  • Goの一貫性の例
    • インデントはタブに強制
    • スペースを入れるかどうか
    • セミコロン、ダブルコロン
    • 関数、テストファイル、テスト関数の命名規則
  • 学習の容易性
    • formatで書き方を強制してくれるので手を動かしながら学べる
    • GoもGoで書かれているのでコードリーディングから学べる
    • Go製のOSSのコードから設計を学べるのも勉強になる
  • 公式が提供していることの重要性
    • 複数のフォーマッターがあるとチームやプロジェクトごとにばらばらになる
      • Goはチームがスケールしやすい
  • 意外な構文は避けよ
    • 複雑性を理解しないと意外な構文はバグを招きやすい
    • レビューで書式の論争の時間削減ができる
  • ルールを適用する
    • コードレビュー
      • 読みやすいのでやりやすい
    • 自動化
  • エムスリーではgoaを使っている
    • OpenAPI仕様のファイルの生成が行えるためドキュメンテーションのハードルが下がる

トークセッション

スピーカー

セッションテーマ

  • Goはどんな風に使える?ここが便利!
  • Goを使う仲間をもっと増やしたい!Goの魅力と将来性

Goはどんな風に使える?ここが便利!

初めてGoに触れたときのこと

  • 触ったのは10年前、Googleが新しい言語作ったなという印象
  • 研究等用に書いていた
  • さわり心地よかった、型付言語触ったの初めて

逆に、「こんなこと困っていた」や「今困っている」ということ

  • チームへの浸透
  • 調べるのが大変、ソースコード読むしか無い
  • 日本語ドキュメント少ない

情報収集の仕方

  • 基本的には公式ドキュメント、ソースコード
  • 公式が出すブログ
  • Go Conference や golang.tokyo 等の勉強会

GoでAPI作りたいときに使うフレームワーク

  • net/http自体が高機能なのでフレームワーク使わずともいける
    • 他のフレームワークはnet/httpのwrapperであることがほとんど
  • gRPC、GraphQL

Goを使う仲間をもっと増やしたい!Goの魅力と将来性

Goの魅力

  • 並列処理
  • シンプルさ、扱いやすさ
  • コミュニティが充実している

Goをキャッチアップしやすい人のバックグラウンド

  • 基本的にはどんな人でもキャッチアップしやすいのでは?
  • C言語とか(もともとGoを開発したメンバーがCを開発してたことはある)

初学者の学習の始め方

  • Command Line toolとか
  • 小さいツールを自作してみるとか

今後、Go言語に期待していること

  • 後方互換を保っていて安定的に使えるのがいい、脆弱性DBに関してはより期待している
  • データ分析とか強くなると嬉しい(個人的に)
30
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
14