kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Gophercises: 実践的な20種類のエクササイズで Go を学ぼう

もっと Go を学びたくて学習コンテンツを探しているぞー👀という人におすすめできる「Gophercises」を紹介する❗️計20種類あるエクササイズ(どれも楽しい🌸)をほぼ全て動画を観ながら写経して,とにかく楽しかったのでまとめることにした💡

  • 動画を観ながらコードを写経できる
  • エクササイズは計20種類もある
  • どのエクササイズもすぐに使えそうなテーマで楽しい
  • 無料で学べる

A Tour of Go の次に取り組むのも良いし,構文を学ぶより実践的なテーマで実装しながら学びたいけどネタが思い付かないときに取り組むのも良いと思う👌

\( 'ω')/ Gophercises! Gophercises!

gophercises.com

エクササイズ一覧

Gophercises には「計20種類」のエクササイズがある❗️参考までに日本語概要も載せておく.

CLI 実装・API 実装・PDF 生成など,どのエクササイズも幅広く活用できるテーマで楽しめる.特に良かったエクササイズを選ぶとするなら Exercise 12「File Renaming Tool」と Exercise 15「Recover Middleware w/ Source Code」と Exercise 20「Building PDFs」あたりかなぁ✌️

逆に Exercise 10,11 はあまり楽しめなかった💨(個人的な理由だけどブラックジャックを知らなくて...)

  • Exercise 1: Quiz Game(計算クイズ CLI を実装する)
  • Exercise 2: URL Shortener(短縮 URL からリダイレクトする Bitly のような API を実装する)
  • Exercise 3: Choose Your Own Adventure(選択式の物語を作る Choose Your Own Adventure アプリケーションを実装する)
  • Exercise 4: HTML Link Parser(HTML の中から a tag を抽出するパーサーを実装する)
  • Exercise 5: Sitemap Builder(Exercise 4 のパーサーを活用してウェブサイトのサイトマップを生成する)
  • Exercise 6: Hacker Rank ProblemHackerRank の問題を解く)
  • Exercise 7: CLI Task Manager(TODO アプリ CLI を実装する)
  • Exercise 8: Phone Number Normalizer(電話番号を正規化するアプリケーションを実装する)
  • Exercise 9: Deck of Cards(トランプのデッキ機能を実装する)
  • Exercise 10: Blackjack(Exercise 9 を活用してブラックジャックを実装する)
  • Exercise 11: Blackjack AI(Exercise 10 のブラックジャックをリファクタリングする)
  • Exercise 12: File Renaming Tool(複数のファイル名を一括変更する CLI を実装する)
  • Exercise 13: Quiet HNHacker News API を活用して Hacker News の記事一覧を実装する)
  • Exercise 14: Recover Middleware(API 用のリカバリーミドルウェアを実装する)
  • Exercise 15: Recover Middleware w/ Source Codechroma を活用してエラー情報のシンタックスハイライトを実装する)
  • Exercise 16: Twitter Retweet Contest CLI(Twitter API を活用して RT 情報を取得する)
  • Exercise 17: Secrets API and CLI(HashiCorp Vault のようなクレデンシャル管理 API と CLI を実装する)
  • Exercise 18: Image Transform ServicePrimitive を活用して画像変換をする)
  • Exercise 19: Building Images (png & svg)(Go の image package と svgo を活用して画像を生成する)
  • Exercise 20: Building PDFsgofpdf を活用して PDF を生成する)

注意: Exercise 16「Twitter Retweet Contest CLI」は Twitter API の有料化に伴って実装できなくなっていた💣

おすすめ理由 1

\( 'ω')/ 実践的なテーマで学べる!

実践的なテーマで学びつつ,例えば CLI を実装するときは flag package を使ったり,ファイルパスを操作するときは path/filepath package を使ったり,API のリカバリーを考えるときは runtime/debug package を使ったり,標準ライブラリの理解を深められたのは良かった❗️また negroni / chroma / gofpdf など,今まで使ったことがなかったライブラリに出会えたのも良かった❗️

個人的に実践的なテーマだからこそ記憶に残りやすく感じていて,実際に仕事中に「こういう実装をしたいんだけど...そういえば Gophercises にあった気がする💡」と思い出す場面もあって効果を感じられた💪

github.com

github.com

github.com

おすすめ理由 2

\( 'ω')/ ボーナス課題でさらに楽しめる!

基本的には動画を観ながら写経して取り組んだけど,闇雲に写経をしてるだけでは理解度が浅いままになってしまう可能性があった.Gophercises の一部のエクササイズには「Bonus(ボーナス課題)」があって,エクササイズの拡張に挑戦できる❗️今回は Exercise 1, 2, 4, 17, 18 のボーナス課題に取り組んだ.

あと GitHub に公開されている通り,Gophercises 自体は2017-2018年頃に公開されたコンテンツになっているため,多少古くなっているところはある.今回は Go 1.20 で実施して全然問題はなかったけど,例えば io/ioutil package の deprecated の件は自分で書き換えてみたりした.そのあたりは前向きに取り組めば良いと思う.それもまたボーナス課題になるはず👌

github.com

少し気になったところ

Gophercises の前に「Learn Go with Tests」を実施したという背景もあるけど,Gophercises にはほとんどテストコードがなく,動作確認をしながらトライアンドエラーをする流れになっている.最低限の流れは収録前に決めているとは思うけど,実際に動画を観てるとアドリブでトライアンドエラーをしてそうな場面も多々あったりした.写経をしながら「テストコード書きてぇ〜」と思ったりしていた(少しは書いてみたりした👌).

kakakakakku.hatenablog.com

ちなみに Gophercises の作者 Jon Calhoun の他のコンテンツとして「Test with Go」もあって,テストコードに関してはこっちで詳しく学べるようにコンテンツの分割がされていそうな気がする(あくまで予想).Test with Go も気になる👀

testwithgo.com

参考 : 所要時間

今回 Gophercises は朝活(1日1時間~1時間半ほど)で取り組んでいて,期間的には3ヶ月(3/8 ~ 6/8 まで)だった.しかし,期間内で26日間は朝活をできてなく(海外旅行・国内旅行・体調不良・障害対応など),実質は「2ヶ月」と言えそう.よって,所要時間の参考としてはザッと「60~70時間ぐらい」だと思う.ちゃんと考えながら写経して Gophercises のエクササイズを全て実施しようとすると結構時間はかかってしまうけど楽しかったからヨシ!!!

まとめ

Gophercises は実践的に Go を学べる素晴らしい学習コンテンツだった👏

3ヶ月も取り組んでいたから先生 (Jon Calhoun) と毎日会っていたような気持ちになった.エクササイズ序盤では先生の部屋にいる犬に癒やされたし,エクササイズ後半では収録中に先生が大あくびをすることが数回あって,疲れていそうで心配にもなった💧

ちなみに Exercise 20「Building PDFs」では Gophercises の修了証 (PDF) を自分で実装した❗️笑

Exercise 20 で実装した修了証 🏆