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
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
1
500
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
610
What the customer really needed
kawaguti
PRO
3
230
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
310
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
110
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
6
760
データ_AIの事業の勝敗をわけるもの
nek0128
1
480
Hermes Agentで、AIが調べて記事を書くブログを作った話
blueb
0
110
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.7k
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1.6k
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
730
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
460
A better future with KSS
kneath
240
18k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
320
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Marketing to machines
jonoalderson
1
5.8k
Ruling the World: When Life Gets Gamed
codingconduct
0
360
How to Think Like a Performance Engineer
csswizardry
28
2.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Visualization
eitanlees
153
17k
So, you think you're a good person
axbom
PRO
2
2.2k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
WENDY [Excerpt]
tessaabrams
14
39k
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