My Favorite Life

Go there and write simply with golang. Such a person I want to be.

Go言語記事〜超まとめ〜

先日書いたこちらの記事

abemotion.hatenablog.com

ホッテントリ入りし、ブックマーク数も80を超えた。

やっぱりフィードバックがあると嬉しいですね。本当に感謝...!

今日は上記でも触れた、手元でブクマしているGo言語関係の記事を、

自分の中での整理も兼ねて、まとめます。

※ あくまで自分にとっての「超まとめ」なので、全て網羅しているわけでなく、
足りない所などあるかと思います。どなたかの参考になれば幸いです。

入門

Go入門
Go For Perl Mongers - YAPC::Asia Tokyo 2014
実践Go言語 - golang.jp
Go言語を学び始める人へ ~2017冬~ – All YoU Need Is D*
「Go言語らしさ」とは何か? Simplicityの哲学を理解し、Go Wayに沿った開発を進めることの良さ - エンジニアHub|若手Webエンジニアのキャリアを考える!
パッケージ名 (Package names) | The Go Blog 日本語訳

context

Go1.7のcontextパッケージ | SOTA
Goの並行パターン:コンテキスト (Go Concurrency Pattern: Context) | The Go Blog 日本語訳

実例

マイクロサービスのための綺麗なAPI設計 | Wantedly Engineer Blog
GoでとあるAPIサーバを実装し直した話 - Mercari Engineering Blog
「Go + grpc-gateway で作る JSON API サーバ速習会」を開催しました | Wantedly Engineer Blog
US版Mercariのリニューアルと今後 (サーバサイド) - Mercari Engineering Blog
Go で API サーバーを開発してきて1年が過ぎました | カメリオ開発者ブログ
Golangを初めて本番投入したぜ! - ゆーすけべー日記
【go】FWに頼らないオレオレroutingを実装する - emahiro/b.log
GoでJWT認証するAPI Gatewayを作成する - Tech Blog - Recruit Lifestyle Engineer
実戦へのGo導入
kubernetesで変わる開発スタイル 〜マイクロサービスじゃなくてもいいじゃない〜 // Speaker Deck
Go APIサーバーの設計について、golang.tokyo#9で話しました。 - Gunosy Tech Blog
マイクロにしすぎた結果がこれだよ!
golangを使って開発したWebAPIを1年半運用して改善してきたことー月間20億PVのマンガサービス開発の裏側 | Nagisaのすゝめ
API GatewayによるMicroservices化
Go言語での決済システムとマイクロサービス化について – Eureka Engineering – Medium
Go開発で実際にやった事一通り - Speaker Deck
Goアプリのデーモン化とデプロイの仕組み - 暁
Go言語による開発ノウハウを学ぼう!導入企業3社の選定理由とは?実践Go言語勉強会レポート | geechs magazine
Golangで支えるハイパフォーマンスAPI - Speaker Deck
ぐるなびにおけるGo言語の活用 - ぐるなびをちょっと良くするエンジニアブログ
メルカリ・ソウゾウでは どうGoを活用しているのか?
Go言語を使ってみて、個人的に引っかかったところと対処法。 | ヌーラボ
Go言語による2年半の新規プロダクト開発とその総括 - Speaker Deck

パッケージ構成

第1回 Mercari Tech Conf を開催しました - Mercari Engineering Blog
Goのパッケージ構成の失敗遍歴と現状確認 – timakin – Medium
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
[JA] Golang Package Composition for Web Application: The Case of Mercari Kauru // Speaker Deck
【翻訳】【Golang】標準的なパッケージのレイアウト - AllIsHackedOff
Goのpackage構成と開発のベタープラクティス - Tech Blog - Recruit Lifestyle Engineer
Implementing Go Go Go - Speaker Deck
1 Entry per Day: golang.tokyo #1 行ってきたメモ
Goの実装パターン ~ Webサーバ編 ~ - Speaker Deck
20160526 依存関係逆転の原則

テスト

Go の Test に対する考え方 - Qiita
go test で出来ること - Qiita
Advanced Testing with Go - Speaker Deck
実務で使える テストの話をしよう。golang.tokyo #2 in 株式会社はてな - Think - g.o.a.t
テストしやすいGoコードのデザイン
Golangにおけるinterfaceをつかったテスト技法 | SOTA
Big Sky :: golang で終了を確認するテストの書き方
Go Mockでインタフェースのモックを作ってテストする #golang - Qiita
もう一度テストパターンを整理しよう(WebApp編) - Speaker Deck

CI・デプロイ

自社のメインプロダクトにGoを導入したぞ++
Drone · Continuous Deliver
Go開発で実際にやった事一通り - Speaker Deck
CircleCIでDockerビルドしECRへpushする
CircleCI2.0を使ってGoで開発したツールをLint,UT,ビルドしてGithubにリリースする
circleci2.0でおもにgoをCIする · GitHub
CircleCI 2.0 で Go 1.10 の build cache をいい感じに効かせる · Hori Blog
lestrrat/go-server-starter: [MOVED] See github.com/lestrrat-go/server-starter
Goでstart_server (Server::Starter)とうまいことやる : D-7 <altijd in beweging>
Go言語でGraceful Restartをするときに取りこぼしを少なくする

バージョニング

Go & Versioning(vgo)を読んで大きな変更が入ったなと思った
Goにおけるバージョン管理の必要性 − vgoについて −
Golang — vgo vs dep — Dependency Management Tools Explained
依存関係管理ツールdep(golang)
Goオフィシャルチーム作成の依存関係管理ツール dep を試してみた | Developers.IO
Go 1.6 Release Notes - The Go Programming Language
ベンダリングのベストプラクティス - GolangRdyJp
Go1.11から試験導入されるバージョン管理機能(vgo)について

ログ

Goでのログ出力に標準logとcologを使う
Go言語のログ出力は標準logよりLogrus - HDE BLOG
logger のパフォーマンスについて [Go] - methaneのブログ
Let’s talk about logging | Dave Cheney
loggingについて話そう
Golangの高速なロガーzapとlumberjackでログを出力してrotateさせる - sambaiz-net
Gocon2017:Goのロギング周りの考察
go言語におけるロギングについて | さにあらず
Golang でのログローテション - Memo
golangの高速な構造化ログライブラリ「zap」の使い方
use zap instead of logrus by kazegusuri · Pull Request #44 · mercari/gaurun · GitHub
Goのアンチパターン - GolangRdyJp
zapはgoroutine safeなのか?? - DevDevデブ!!

エラー

Go言語のエラーハンドリングについて
Go言語におけるエラーハンドリングを今一度振り返る – Eureka Engineering – Medium
エラーは値 (Errors are values) | The Go Blog 日本語訳
Golangのエラー処理とpkg/errors | SOTA
Gocon Spring 2016
Golang の defer 文と panic/recover 機構について - CUBE SUGAR CONTAINER

ベンチマーク

Golangでベンチマークを取ってみた
Go でベンチマーク - Block Rockin’ Codes

ポインタ

#golang CodeReviewComments 日本語翻訳
golang の 引数、戻り値、レシーバをポインタにすべきか、値にすべきかの判断基準について迷っている - pospomeのプログラミング日記

middleware

Middlewares in Go: Best practices and examples
Writing middleware in #golang and how Go makes it so much fun.
GitHub - grpc-ecosystem/go-grpc-middleware: Golang gRPC Middlewares: interceptor chaining, auth, logging, retries and more.

最後に

現時点での、あくまで自分が触れた・興味ある分野での記事をまとめました。

今後も増えていくと思うので、本記事も定期的にアップデートできたらなと。

次は設計についての記事を書くぞ!

「エンジニアのアウトプット」について感じること

https://pepabo.com/recruit/interview/201506_01

ふとしたキッカケで上記の記事を目にし、 以下の2スライドを読んだ。

エンジニアになる
インフラチーム教育 Webオペレーションエンジニアの アウトプットと開発力

読んでいて、ふつふつと湧いてきた想いがあるので、
つらつらとここに記したい。

  • ぼんやりとした感情
  • なぜアウトプットに至らなかったか?
  • Go言語との出会い

ぼんやりとした感情

今年30歳になった。

ずっとWEBエンジニアとして働いてきたが、
あまりアウトプットはしてこず、
目の前のタスクに燃えて取り組んできた。

これまでどんな会社で働いてきても、
周りの人にだけは恵まれてきたので、出会ってきた人に感謝したい。

おかげさまで着実にスキルアップし、
ポジションや仕事内容という点でも、キャリアアップをしてきた。
(この業界すごい人はいくらでもいるけど)

ただ、ふと振り返ったときに

「さみしいなぁ」

という感情が芽生えた。

この気持ちを起点に、
今までどうしてアウトプットしなかったかと、
今回なぜアウトプットするに至ったかを深掘りし、
振り返って言語化してみたい。

なぜアウトプットしなかったか?

自分は承認欲求がそこまで高くないと自覚してきた。
アウトプットしてこなかった経緯を鑑みてもそうだと感じる。

なのでアウトプットのメリットとして謳われる
「自己アピール」という言葉に、
違和感にも似た感情を、無意識に抱いていたのだと思う。

仕事でいうと
「喜ばせたい、驚かせたい」という価値観を持っている。

同僚や先輩・上司、ユーザーまでは、
要望に応えたいし、困っていたら助けたい。
モチベートする。

ただアウトプットのメリットとして謳われる
「コミュニティへの貢献」だと
個人的には「遠い」と感じてしまう。

顔が見えないからなのか、フィードバックまで遅いからなのか、、、
違いは身近さなのだと思う。

では「アピール」でも「貢献」でもなければ、
今回なぜアウトプットに至ったか?

Go言語との出会い

今「API gatewayによるMicroservices化」プロジェクトを社内で進めている。

API gatewayには golang を採用した。

プログラミングそのものは好きなので、
リーダブルコード』などは嬉々として読んだが、
これまで特定の言語にロックインすることはなかった。

golang へはこれまで触ってきた言語にはない熱い想いを、自分の中に感じる。

Go言語関係の記事も、気がついたら100個ほどブクマしていた。。。
(後々ブログにまとめます)

これはまるで20代前半、がむしゃらにプログラミングしていた、あの時のような感覚…

以下は、自分が惹かれている具体的なポイント。

  • シンプルな哲学
    Think Simple』を読んで以来、Simple の虜なので、
    golang のシンプルな哲学を大変気に入っている。

  • go fmt によるコード整形
    自分が苦手と感じていた「自転車置き場の議論」が減るだろうという希望

  • 並列処理

golang には、デファクトスタンダードフレームワークがまだ存在せず、
今回標準パッケージのみで開発することに決定。

レイヤ構成のベストプラクティスを調べていくうちに、
設計・デザインパターンへの理解が深まった。

こういった気づきを、
自分の中で積み上げていきたい、残していきたいという想いが強くなった。

今回アウトプットに至った大きな理由はこれである。
(プレゼンスなど副次的なメリットも享受できたらという想いもあるが)

冒頭の「さみしい」というのは、
もし積み上げなかった時の、未来で振り返った時に感じる感情なのだと。

これまで本を読みクローズドで残してきたメモなども、
せっかくなら対外的な形で記録していこうと思う。

最後に

参考にさせて頂いたスライドから一部抜粋したい

エンジニアになる

  • エンジニアリングに関係ないことでも、深く、継続的に続けていればなんかの役にたつ
  • とにかくなんでもアウトプットしてみよう
  • 何かを始めるのに遅すぎることはない
  • ひとくちに技術力といっても、分解してみると、作る力・守る力・広げる力の3つがある
  • 強み、夢中になれることがあるなら、何の役に立つかどうかなど考えず、突き進もう
  • なんでもいいから、なにかを継続すること。アウトプットすること。仲間を見つけること。

インフラチーム教育 Webオペレーションエンジニアの アウトプットと開発力

  • 汎用的・抽象的な問題は社外にアウトプットしやすい
  • 新しい技術は注目度が高い
  • 汎用的・一般的な問題意識の持ち方や解決方法の一般化、新たなアイデアを生む力がつく
  • 技術力はアウトプットした内容や公開ソフトウェアから判断されやすい
  • 課題の一般化、一般化によるアウトプット継続による開発力の強化により化ける