Go学習ロードマップを完走!141時間かけて学んだこと

この記事は個人ブログと同じ内容です

www.ritolab.com


Go の理解を深めるために roadmap.sh を利用し学習したので紹介します。

roadmap.sh とは

roadmap.sh は、開発者向けの学習ロードマップを提供するオープンソースプロジェクトです。

フロントエンド、バックエンド、DevOps、データエンジニアリング、AI/ML など、さまざまな分野で必要なスキルを視覚的なロードマップとして整理し、学習の指針を示しています。

ユーザーはロードマップを参考にしながら、自分に必要なスキルを順序立てて学ぶことができるのが特徴です。

OSS のため料金は無料です。そして誰でもロードマップに貢献できます。

kamranahmedse/developer-roadmap - Github

Step by step guide to becoming a Go developer

roadmap.sh の中の、Go の学習ロードマップである Learn to become a Go developer に沿って学習を進めました。

ロードマップと学習内容

Go の学習ロードマップは以下で構成されており、これらについて学ぶことができます。

  1. 基礎を学ぶ (Learn the Basics)
    • 基本構文 (Basic Syntax)
    • 変数と宣言 (Variables and Declaration)
    • データ型 (Data Types)
    • 制御構造 (Control Flow)
    • エラー処理 (Error Handling)
      • Errors, Panic, Recover
    • モジュール管理 (Modules)
      • Go Modules
    • 条件分岐 (Conditionals)
    • 関数 (Functions)
      • 複数の戻り値 / 名前付き戻り値 (Multiple/Named Returns)
    • パッケージ管理 (Packages, Imports, and Exports)
    • 型システム (Type System)
      • 型キャスト (Type Casting)
      • 型推論 (Type Inference)
      • 配列 (Arrays)
      • スライス (Slices)
      • マップ (Maps)
      • 構造体 (Structs)
  2. 応用を学ぶ (Going Deeper)
  3. CLI ツール開発 (Building CLIs)
  4. ORM (Object-Relational Mapping)
  5. Web フレームワーク (Web Frameworks)
  6. ロギング (Logging)
  7. リアルタイム通信 (Realtime Communication)
  8. API クライアント (API Clients)
  9. テスト (Testing Your Apps)
  10. マイクロサービス向けツール (Tools for Microservices)

全学習にかけた時間

Go 学習ロードマップは、全 69 項目ありますが、その中の 55 項目を、 47 の学習機会に分けて進めていきました。

(大分類中の 9 項目は概要説明で手を動かしていないのでカウントから除外、他、スキップした 5 項目(これについては後述)を除く)

「47 の学習機会」は、「47 日取り組んだ」と同義です。

ちなみに 1 回の学習機会は約 2 〜 3 時間。

 \displaystyle
3h × 47 = 141h

およそ 141 時間かけたことになります。

詰め込むなら、1 日 8 時間学習する合宿形式にしたとして

 \displaystyle
141h / 8h = 17.625

18 日間の合宿になります。

私はこの 47 の学習機会を、5 ヶ月間かけて実施しました。平均すると 1 ヶ月 10 機会(30時間)程度です。

Go 学習ロードマップを活用して感じたメリット

1. 必要な知識が整理されている

新しいプログラミング言語を学習しようとしたとき、「この範囲についてはこれとこれだよ」がまとまっているのは学習しやすい点です。

例えば Go の型を学ぼうとしても、いくつ、どんな型があるのかまず自分で収集して、それに漏れがないか調べてやっと学習開始。

では次に制御構造を学ぶから、それをいくつどんなものがあるのかを調べて、、のようなことを毎回やっていると疲れます。

ここがすでにまとまっているだけでも、学習のしやすさは格段に違いました。

2. 全体像が見えるから計画が立てやすい

学習していく順序が示されているのも学習しやすい点です。

新しいプログラミング言語を学習しようとしたとき、どこから、何から学習していこうかに迷わなくなるのは意外と大きなモチベーションに繋がったりするものです。

また、全体の学習計画も立てやすくなります。

必要な知識が整理され、ロードマップとして並べられているからこそ、

「これくらいのペースでやっていく。そうするとこのくらいの期間で学習を終えられる」

「この日までに終わらせよう。それならこれくらいのペースでやっていこう」

のような見通しもつけられました。

3. 学習完了をマークできる UI

地味に推したいのが、学習を終えたトピックを完了にできる点。

サイトにログインすれば、以下のようにそのトピックやセクションを完了にできます。

意外とこういうのって励みになるんですよね。だって一人でロードマップ上を長距離走しているようなものですから。

一つ終了する度に、自分を「よくやった」と褒めて完了をマークしましょう。新しいことを一人で学び続けていくのは、エネルギーとモチベーションが要ることです。

ちなみにこうやってマークした自分の画面はシェアできます。以下は私の Go 学習ロードマップです。

https://roadmap.sh/golang?s=6705c620fb4be684db966395

Go 学習ロードマップを進める前に知っておきたいこと

ロードマップを進めていく上でいくつか気をつけるべき点もあります。

1. 解説は最小限。学習の指針として活用

ロードマップ一つ一つのセクション、トピックには、詳細な解説やサンプルコードがあるわけではありません。

各トピックの詳細画面では、概要の紹介と併せて、公式ドキュメントを中心としたリンクが貼られているだけです。

つまり、そこからは自分で情報を収集し、咀嚼し、理解する必要があります。

学習のコツとしては、そのトピックのリンク先の内容を読み解きつつ、他にもそのトピックについての解説や記事を調べて読んでいくと理解が深めやすいです。

その上で、自分で手を動かして動くコードを書いてみる。

リンクのみは簡素と言われれば簡素ですが、誰の解説であってもハマらないものはハマりませんし、この形態で私は十分でした。

なんだかんだ、公式ドキュメントのリンクは探す手間が省けてありがたかったです。そのトピックについて、学習のスタート地点を示してもらえている感覚でした。

2. 必ずトレンドに沿っているわけではない

ここでいうトレンドは、例えばパッケージや FW で「多くの人に使われている(Githubのスター数、ダウンロード数など)」「開発・メンテナンスが活発である(最終コミット日時)」を満たしていたらトレンドだよね。という観点です。

Go のロードマップは、前半は言語自体の仕組み(型や制御構造など)を学習しますが、後半からパッケージや FW が多くなります。

このとき、各ラインナップは必ずしも現在トレンドであるものではないことには注意が必要です。メンテナンス(最終コミット)が 1 年無いものなどもあります。

つまり、トピックで扱う FW やパッケージについて本当に学習をするかどうかは自分で判断したほうがよいです。

オープンソースのプロジェクトである以上、善意で成り立っている学習プログラムですので、ここについては更新されるタイミングによりますが、学習前に一度そのパッケージについて調べてみてください。

(前述の「全学習にかけた時間」で 5 つのトピックを skip しているのはこの理由からです)

例えば FW であれば、そのトピックで扱っている FW がトレンドであるかは確認しつつ、現在トレンドの FW は何であるか調べると学びの幅も広がります。

Go 学習ロードマップの振り返り

roadmap.sh のトピックは基礎が網羅されているため、しっかり足元を固められます。型や制御構造など、なんとなく使えるよりも、一度体系的に学んでおくことで、自信を持って実装できるようになります。

また、知識を整理しておくと、実装時にも「この記述のほうが適切かもしれない」「このアプローチも考慮すべきか」「本当にこれでいいのか」といった視点を持ちやすくなります。例えば、型アサーションを理解しておけば、interface{} を扱う際に適切なキャスト方法を選べますし、コンテキスト管理を知っていれば、適切なタイミングで処理をキャンセルしたり、タイムアウトを設定したりできるようになります。

加えて、Go の並行処理や Web フレームワーク、ORM などの応用的な知識に触れることで、実際の開発現場でも「より適した手法」を選べる引き出しが増えます。特に、GORMgqlgen, Protocol buffers など、実務でよく使われるツールに触れられるのは大きなメリットです。

全体として、Go の基本から応用までしっかりと学べる内容であり、Go での開発スキルを一段階引き上げるのに最適なカリキュラムだと感じました。

また、前述の通り内容が公式ドキュメントや著名な記事のリンクが中心であることで、自分で学びと理解を探しに行く必要こそあるものの、"陳腐化しない" のは良点です。公式ドキュメントの解説は常に最新バージョンとリンクしています。

昨今、動画による学習も学びの手段の一つとなっています。Go は ver 1.18 を堺に Go Modules が完全に標準化され、GOPATH に依存しなくてもプロジェクトを管理できるようになりましたが、ある有料の動画学習プログラムでは ver 1.18 以前のものであったため、環境構築の方法が古い GOPATH ベースの手順で解説されており、現在の推奨方法と異なっていて困惑した経験があります。Go に限らず、例えば Python の学習動画もパッケージなどのバージョンによる "動かない問題" が結構あったりする印象もありますし、そういった面で見れば少なくとも「この情報は鵜呑みにしてよいのか」の判断が 1 つ少ないのは「知らない者」が「知る者」になるための嬉しいポイントでもあります。

Go 学習の次のステップ

私自身、業務で Go を使用していますが、言語構造の理解を深めそれらを "インプット" することで増える "選択肢" は、実装判断にスピードをもたらしています。レースコンディションの制御や並行処理など、実際に必要になった場面で素早く導入し、より堅いアプローチで実装することができました。

また、包括的に Go に触れられたことでその全体像の輪郭が以前よりは格段に見えるようになりました。この「輪郭」に確固たるラインや数値があるわけではないのですが、ここの輪郭が見えてくるようになると今度は「デザインパターン」であったり「アーキテクチャの設計思想(DDD, Clean Architecture)」に触れていくモチベーションが生まれてきます。現在私の興味関心はこれらです。

Go のエコシステムは日々進化しており、新しいライブラリやツールも次々と登場していますが、本カリキュラムを通じて得た知識は、今後の開発において確実に活かせています。Go を学び始めたばかりの方はもちろん、ある程度の経験がある開発者にとっても、基礎を見直しながら応用力を高められる内容になっています。なぜならば、トピックに対して何を学びとするかは自分自身で決めるからです。

特に Go のようにシンプルながら奥深い言語では、基礎をしっかり押さえた上で、実践の中で適切な選択をする力が求められます。文法はシンプルでも、並行処理、エラーハンドリング、アーキテクチャ設計などを適切に扱うには、深い理解が求められます。このロードマップは、そのための道標として非常に有効でした。学びを積み重ねながら、これからも Go の設計思想や最新のエコシステムに触れ、より良いコードを書けるよう成長していきたいと思います。