Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Gopher道場#3を振り返る
Search
Daichi Hioki
September 18, 2018
Technology
2.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gopher道場#3を振り返る
https://mercari.connpass.com/event/101178/
の発表資料です。
Daichi Hioki
September 18, 2018
More Decks by Daichi Hioki
See All by Daichi Hioki
Rustで学ぶTOTP
hioki_daichi
0
1.3k
仕事でGoで書いたWindows向けの小さなアプリをAppVeyorを使ってCIした話
hioki_daichi
0
260
Rubyエンジニア多めの現場での Vue.js1系 on Rails
hioki_daichi
5
1.3k
Other Decks in Technology
See All in Technology
マルチアカウント環境での コーディングエージェントを使った障害調査が大変なので AIエージェントにReadOnly権限を付与してみた / ReadOnly AI Agents for Multi-Account AWS Incident Response
yamaguchitk333
2
120
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
540
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
260
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
180
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
140
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
130
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
4
580
インシデントレスポンス演習 I / Incident Response Exercise I
ks91
PRO
0
100
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
270
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
160
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
240
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
420
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
Embracing the Ebb and Flow
colly
88
5.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
The agentic SEO stack - context over prompts
schlessera
0
820
Tell your own story through comics
letsgokoyo
1
960
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
240
AI: The stuff that nobody shows you
jnunemaker
PRO
8
720
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
170
Transcript
Gopher道場#3を振り返る @hioki-daichi
自己紹介 兼 宣伝
- 最大週4リモート - 私は基本週4 - モダンな開発スタイル - GitHub, Slack, PivotalTracker,
esa, 2 人以上のレビュー体制 - 使用している言語やバージョン - Ruby on Rails + Vue.js (基本的に最新バージョン ) - 対応ブラウザは Google Chrome 最新版のみ クリニカル・プラットフォーム株式会社 https://clinical-platform.com/ エンジニア募集してます〜
本編
参加の動機を振り返る
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ - 好きなのは Haskell のような関数型言語だけれど・・ - 学習コストが高くて流行らない・・
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ - 現在仕事で使っている Ruby はというと・・ - 界隈の高齢化を感じるような・・ - Go
は若いイメージ - Ruby の懇親会で若い Gopher を見かけた - 「Go で API サーバーとか書いてますよー」といっていた
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ そんな時に「Gopher道場#3」の選考で Go の課題が存在することを知る
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ 『え !? Go 書いたらメルカリのエンジニアが見てくれるの !?』 『これをモチベーションにして Go 入門しよ
!!』
選考課題を振り返る
選考課題 7/27 - 8/4 - 当時の自分の Go 歴 - vim-go
チュートリアル をやった - ※ Vim のプラグイン vim-go のチュートリアル - A Tour of Go がバズった時にちょっとやったような・・うっすらとした記憶・・
選考課題 7/27 - 8/4 - 実装方法は・・ **ネタバレになるため公開時に削除されました**
選考課題 7/27 - 8/4 - これではまずそうなので追加で・・ **ネタバレになるため公開時に削除されました**
第1回を振り返る
第1回の講義 8/6 ~Goに触れる/基本構文/型と関数/コマンドラインツール ~ - 帰りに、道場生との間で選考課題の実装の話になった - @shuntaka9576 さんのコードを見せてもらった **ネタバレになるため公開時に削除されました**
第1回の講義 8/6 ~Goに触れる/基本構文/型と関数/コマンドラインツール ~ - 翌日からは @shuntaka9576 さんのコードを味わう日々 - 日記
- 『8/8 shuntaka9576さんのコードをもとにいちから書いてみてるけれど変 数を使い回すのだったり、for 文で index でたどっていったり、読み込ん だ分だけ引いていくところだったり、脳のワーキングメモリーを多く使うの ですごく疲れる。go は疲れる。でも面白い。試すたびに発見があるスルメ のようなコード。』 - 『8/8 shuntakaさんのリポジトリ、Makefileがある。初めてちゃんと見た 気がする。こうやって書くのか。テストコードもすごく参考になる。』
第1回の宿題 ~画像変換コマンドを作ろう~
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - いざ着手し始めると・・ - ImageMagick が不要なの不思議 - Ruby
の `File.exist?(path) -> bool` が Go にはない !? - REPL 欲しいな・・ - ※ 現在では gore を便利に使ってます
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - 一応できた・・が、もうひと工夫 - GIF 対応 - ファイル名が重複した時に上書きする
-f オプション - 冗長なログ出力をする -v オプション - ファイルの内容が期待するフォーマットかどうかのチェック - JPEG だったらファイルの内容が FF D8 FF で始まるかなど - ※ 後になって同様のチェックが標準パッケージ側でされていることが 判明 - https://github.com/gopherdojo/dojo3/pull/20#discussion_r21 4764456
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - いざ提出 (8/14)・・が・・ - osamingo さんから以下のアドバイスが -
『自力で作る => セルフレビュー => 昔の道場生の作品をみる => 書き直 す をすると、PDCA が回るはず。』
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - さっそく昔の道場生の作品を全部見てみた - https://github.com/gopherdojo/dojo3/pull/1#issuecomment-413155710 - この日の日記 -
『8/15 過去の道場生の作品から学ぶことが多すぎ』 - JPEG だったらファイルの内容が FF D8 FF で始まるかなどのチェック、昔の 道場生の @onoyama-git さんも同じことやっていて親近感を感じるなど
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - そこからコミットを 52 個積み・・・再提出 (8/19) !! -
ついでに昔の道場生 @int128 さんが実装していた画像変換時の品質等のオ プションも実装してみたり・・ - JPEG: Quality - GIF: NumColors - PNG: CompressionLevel
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - PR 提出したところ・・ - tenntenn さんから GOOD
ラベルを頂く
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - この日の日記 (※ エモ注意。会場限定コンテンツ) - 「8/20 tenntenn
さんに GOOD ラベルを頂けて感無量。しばらく尊すぎて説 明が頭に入ってこなかった。godoc も README も PR 本文もちゃんと書い たのが功を奏したと思われる。**これ以降は公開時に削除されました**」
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - その後、レビュー指摘事項を修正 (+20 コミット) - 合計: 89
コミット (+631 -0)
第2回を振り返る
第2回の講義 8/20 ~パッケージ/抽象化とエラー処理/テストとテスタビリティ ~ - 日記 - 『8/20 しかしこのクウォリティーを無料で4回も添削付きでやってくれるの、 ちょっと改めて太っ腹すぎる。』
第2回の宿題 ~第1回の宿題のテスト~
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 - 『8/23 テストカバレッジが 72 %
までいった。正常系は一通りやった気がする。 異常系をどうするかだな。』
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (その2日後) - 『8/25 テストカバレッジが 90
% 超えた。codecov が落ちてたから `$ make cov` でローカルに吐けるようにしたけど便利で最初からこれで確認すりゃよ かった。』
None
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (その夜) - 『8/25 カバレッジ 96.86%
までいったけれどもう無理そう・・』
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (翌日) - 『8/26 カバレッジ 98%までいった..!光が見えてきた!』
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (さらに翌日) - 『8/27 カバレッジ 100
% 達成 !!!』 - ※ main.go のテストを書いていなかった実は 100 % ではなかった
指定した回数だけ Seek を成功させるような Mock を作ったのが山場 ← 2 回目の Seek ←
1 回目の Seek
第2回の宿題 ~io.Reader と io.Writer が標準パッケージでどのように使われているか調べる~
第2回の宿題 8/20-9/3 ~io.Reader と io.Writer~ - アプローチの仕方が難しかった - ファイル名が reader.go
や writer.go で、かつ、Read や Write の実装を持つ ファイルを片っ端から読んでいくというアプローチをとった
第2回の宿題 8/20-9/3 ~io.Reader と io.Writer~ - 読むだけだと理解が怪しいためさらに片っ端からサンプルコー ドを書くなど・・ - kadai2/hioki-daichi-sandbox/main.go
第2回の宿題 8/20-9/3 ~io.Reader と io.Writer~ - iotest package が便利そうなことを知った -
主にテストに役立つ Reader や Writer を提供しているパッケージ - 例えば TimeoutReader ( src/testing/iotest/reader.go#L73-L88 ) は 2 回目 の Read でタイムアウトエラーを返すような Reader になっている - (どこかで聞いたような・・)
第3回を振り返る
第3回の講義 (9/3) ~ゴルーチンとチャネル ~ - 日記 (※ エモ注意。会場限定コンテンツ) - 『9/3
3回目が終わった。やはりてんてんさんは尊かった。とてもありがたい時 間。何かに向かって複数人で真剣に学ぶ経験は実は初めてかもしれない。そ ういえば**これ以降は公開時に削除されました**』
第3回の宿題 ~タイピングゲーム~
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - タイプする単語のソースはどうしよう? - 最近スプラトゥーンしてない・・ - 道場通い中はスプラトゥーンをしないという掟
- かといって溜まったスプラ欲を発散しないのは不健康・・ - タイプする単語のソースをスプラ関連にすることで昇華しよう - ソースをスプラトゥーンに出てくるブキ名に !!
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - 文字ごとのヒット数も出したいなー - 以下を出すことに - トータルのヒット数
- 文字ごとのヒット数 - 1 秒あたりのヒット数
None
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - 1 文字ごとにヒット判定したかったが・・断念 !! - ScanLines
なので Enter を入力するまでヒット判定ができない - https://github.com/pkg/term を使えば実現できそうなことはわかったが・・ - 実際にやってみると入力は一見上手く動いているように見えるが、表示が 少しずつズレれていく・・
第3回の宿題 ~分割ダウンローダー~
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - 動く実装はできたが PR 出せるレベルに至らず・・ - Context
もテストも間に合わず・・
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - レビュー後 - タイピングゲームの方は再び tenntenn さんに
GOOD ラベルを頂けました。 尊みが深い。
第4回を振り返る
第4回の講義 (9/10) ~HTTPサーバ・クライアント ~ - 後半内容が難しかった - あっという間に終わってしまった
第4回の宿題 ~おみくじAPIを作ってみよう~
第4回の宿題 9/10-9/18 ~おみくじAPIを作ってみよう~ - 工夫点 (1) - URLクエリパラメータとして name を指定できるようにした
- `?name=名前`
第4回の宿題 9/10-9/18 ~おみくじAPIを作ってみよう~ - 工夫点 (2) - name が 33
文字以上の時にバリデーションエラーになるようにした - ステータスコード: 400
以上、振り返りでした !! ありがとうございました !! - メルペイさま、複数回に渡って会場のご提供ありがとうご ざいました。 - 講師の皆さま、本当に貴重で素晴らしいお時間をありがと うございました。
- 道場生の皆さま、一緒に課題に取り組んでくださり、また、 Slack を盛り上げてくださり、ありがとうございました。 - 特に @shuntaka9576 さんは毎回の帰り道でお話 して楽しかったです。ありがとうございました。 - 昔の道場生の皆さま、コードたくさん参考にさせていただ きました。ありがとうございました。 - 課題1: 画像変換コマンドを作ろう - https://github.com/gopherdojo/dojo3/pull/1 - 課題2: 課題1のテスト・io.Reader と io.Writer - https://github.com/gopherdojo/dojo3/pull/20 - 課題3-1: タイピングゲーム - https://github.com/gopherdojo/dojo3/pull/42 - 課題3-2: 分割ダウンローダ - https://github.com/gopherdojo/dojo3/pull/50 - 課題4: おみくじAPIを作ってみよう - https://github.com/gopherdojo/dojo3/pull/65