本連載は、「 エキスパートへの道しるべ(Load to Expert) 」をテーマとして、初級者がエキスパートになるためのヒントを、日本を代表するエキスパートの方々に伺う企画です。
Googleが生み出したプログラミング言語Goは、後方互換性の高さや開発のしやすさから、多くの企業や開発者に愛されています。本記事では、newmo株式会社所属でGophers Japan理事やGo Conferenceの主催など幅広い活動を行っているtenntenn(上田)さんへのインタビューを通じて、Goの概要や魅力、学習のコツや最新動向、さらにはこれからGoを学ぶ方へのメッセージまでを掘り下げます。

tenntennさんをTechFeed上でフォローしよう!
Go言語の概要と魅力
――自己紹介と簡単なプロフィールをお願いできますでしょうか。
tenntenn: 上田と申します。アカウントはtenntennという名前で活動していて、今ははnewmo株式会社というスタートアップに所属しています。そのほかには、Gophers Japanという一般社団法人の理事を務めていたり、以前はGo Conferenceも主催していました。また、Google Devleopers Expertも務めています。
――Goの概要や魅力について教えてください。
tenntenn: Goは2009年にグーグルが公開したオープンソースのプログラミング言語です。
Goの特徴の一つに 安定性 がありまして、後方互換性を非常に重視しています。1.0が2012年に出てから現在に至るまで、新しい大きな機能も入りつつ、破壊的変更が非常に少ないというのは、素晴らしい点だなと思います。
あと、 並行処理を簡単に書ける というのも大きな特徴です。ゴルーチンやチャネルという仕組みが言語機能に備わっていて、誰でも容易に、安全に並行処理を記述することができます。
他には、 開発者体験に最初から配慮していた というのも特徴ですね。
ガベージコレクションや高速なコンパイル、直接マシン語にコンパイルされることなど、Goには様々なポイントがあります。もともとGoはGoogle社内の問題を解決するために開発されたと言われていて、 簡単に書けてコンパイルが高速、実行速度も速い…そんな言語を最初から目指していた ようです。
またGoのコマンドには最初からコードフォーマッターが付属していました(go fmt)。言語仕様のシンプルさも相まって、少し学べば誰でも一定以上の品質のコードを書けるようになる、というのも良い点だと思います。
Goエキスパートになるまでの道のり
――tenntennさんがGoに出会ったのはいつ頃だったのでしょうか。
tenntenn: 私がGoを始めたのは、まだ正式版1.0がリリースされる前の2010年頃だったと思います。ちょうど「Googleが新しい言語を作り始めたらしい」という噂を聞いたのがきっかけで興味を持ちました。大学時代に独学で触ってみるうちに、この言語のアップデートや新機能を追いかけるようになりました。
実は最初の就職先ではGoを業務で使う機会がなかったんですが、その次に転職した会社でGoを導入して、開発を行うようになりました。それまでは言語の機能やアップデートを個人的に追っていただけでしたが、業務として使う上で直面する課題や、その解決法を実体験できたのは非常に大きかったです。
Go Conferenceの主催をやっていたこともあって、色々な人の発表を聞いたり、自分で登壇して反応をもらったりする中で理解が深まったと感じています。
――人に教える機会も多いとお伺いしましたが、それはどのような形で行われているのでしょうか。
tenntenn: 例えばいろんな大学で講義をやりましたし、地方自治体に呼ばれて講師を務めることもありました。企業の技術顧問としてGoの勉強会や新卒研修を行うこともありますし、自分でコミュニティを運営しているので、そこで教える機会も多いです。人に教えるために調べたり整理したりするプロセスは、私自身の知識を定着させるのに非常に役立ちました。

学習方法と情報収集について
――Goをこれから学びたいという方に向けて、おすすめの学習法を聞かせていただけますか。
tenntenn: どのレベルでも言えるのですが、まずは公式情報(例: 公式サイト、ブログ)をチェックするのが一番だと思います。 英語の情報が中心にはなってしまいますが、今はLLMを使って翻訳や要約を助けてもらえますし、昔と比べるとハードルが下がっているので、ぜひ公式ドキュメントに触れてみてほしいです。
このやり方は、初学者から上級者までずっと有効ですし、何より最初にそういった公式情報にあたる癖をつけておかないと、なかなか急にはできないものです。日本語の資料もいいですが、まずは公式情報にあたるのが一番ですね。
日本語の資料としては、私も「プログラミング言語Go完全入門」というものを用意しているので、是非活用してください。こちらは 全部で千枚くらいある 長いドキュメントなのですが、最初からゆっくり読んで、触っていただければ、基礎的なところから一歩ずつ追えるように作ってあります。
――プログラミング自体が初心者の方もいるかもしれませんが、そういう方でも学べる方法はあるのでしょうか。
tenntenn: その場合はGo公式のツアーや、マイクロソフトが提供しているチュートリアルなどを利用するといいかもしれません。あとはProgateにもGo言語の入門コースがあって、そこは私も初学者向けとして良いと感じています。
――ありがとうございます。では情報収集に関しても伺いたいのですが、tenntennさんはどのようにGoに関する最新情報をキャッチアップしているのですか。
tenntenn: 本の刊行はどうしてもタイムラグがあるので、私は GitHubやコミュニティでの議論のプロセスの段階から追いかける ようにしています。
例えばGoは、次期バージョンがリリースされる1〜2年前から議論が行われているので、その段階で議事録やIssueを見ています。
また毎週水曜日にGoogleの社内ミーティングがあって、そこでGoの仕様に関する議論が行われています。その結果が木曜日の朝くらいに議事録として公開されるので、それを毎週チェックするのを習慣にしています。
また私の場合は、GitHub上でGo関連の議論に動きがあるとメール通知が来るようにしていて、暇な時にそのタイトルや内容をざっと眺めています。Goの場合、タイトルに機能のプリフィックスがついているので、どんなことについての話なのかが非常にわかりやすいんです。コンパイラの話なのか、標準ライブラリなのかなど、タイトルで興味のありそうなものを選んで、Issueを読みに行くなどしています。

――それ以外では、情報収集として心がけていることや、見ておくべきサイトやアカウントはありますか?
tenntenn: 僕はかなり珍しい部類だと思うんですけど、RSSとかブックマークとか使わないタイプなんです。あえて挙げるとしたら、 GoogleのGoチームの人のアカウント、それもGitHubのアカウント ですね。最近面白いことやってないかなとか思いながらアクティビティを見ています。例えば、元テックリードのRuss Coxっていうエンジニアの方とかですね。
それから、GoのGithubリポジトリでコミット履歴を見るっていうのも好きです。面白い機能だなと思ったもののコミット履歴をひたすら見るとか、そういう情報収集の仕方をしてますね。
他には仲が良い人、有名なエンジニアの方を、Xでフォローしているというのはあります。
あとは、社内の勉強会で話すというのはあります。社内で情報を持ち寄る場がありまして、そこで新しいことを知るっていうのが結構あります。身近な人達で集まって、自分の持っている情報や、他の人の情報を交換し合えるような環境が身近にあるといいのかもしれません。私の場合、会社がそれをやってくれてるので、非常にありがたいですね。
注目しているトピックと今後の展望
――Goに限らず、tenntennさんが現在注目されているトピックを教えてください。
tenntenn: 私はこの数年間、 静的解析の分野にずっと注目しています。 Goの静的解析ツールを自作することにも興味がありますし、一番プライオリティ高く勉強している感じがありますね。
Goに関してだと、イテレーターやジェネリクスなど新しめの機能には興味があります。最新バージョンで出た、並行処理をテストするsynctestというパッケージに関しても、まだ実験段階で制約が多いものの面白くて、挙動を追ったりはしていますね。
それ以外のトピックだと、 初学者のための情報をLLMを活用して提供できないか、 というようなことを考えています。最初に紹介したスライドとか千枚くらいあるし、関連する動画も10時間分くらいあるんですね。そういう資料を使って、私が答えなくてもすむようなシステムが作れたらいいなと思って色々調べています。
tenntennさんをTechFeed上でフォローしよう!
初心者の方々に向けたメッセージ
――では最後に、これからGoを学ぼうと思っている読者にメッセージをお願いします。
tenntenn: Goは結構安定している言語で、利用している企業もかなり増えてきています。最近だとTypeScriptコンパイラがGoで書きなおされる、みたいなニュースが話題でしたが、Goが利用される場面が非常に増えてきています。勉強して損はない言語なので、ぜひ勉強していただけるといいかなと思います。
Go言語の最先端情報を知りたい方は以下のTechFeedチャンネルをフォローしよう!