Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
270
Rubyエンジニア多めの現場での Vue.js1系 on Rails
hioki_daichi
5
1.3k
Other Decks in Technology
See All in Technology
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
280
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
専門領域のAIをどう評価するか
bengo4com
2
290
価値について
gree_tech
PRO
0
100
トークン化預金DCJPYの取り組みと活用ユースケース
finengine
0
160
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
その Valkey 使いこなしていますか?
onk
PRO
5
1.6k
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
190
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
120
古い指輪から広がった JAVA コミュニティ とのつながり
yamad
0
130
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.9k
Raft: Consensus for Rubyists
vanstee
142
7.8k
Statistics for Hackers
jakevdp
799
230k
Mobile First: as difficult as doing things right
swwweet
225
10k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Optimising Largest Contentful Paint
csswizardry
37
4k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
How to make the Groovebox
asonas
2
2.5k
Are puppies a ranking factor?
jonoalderson
2
4.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
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