技術分野は成熟が進み、新しい領域が急激に増えています。本コーナーでは技術へのタッチポイントを増やすことを目標に、各分野で活躍されている方をお迎えします。
今、Go言語は広く受け入れられています。しかし専門外の立場からは実際の使い勝手は意外とわかりにくいものです。言語の強みや利用の指針を知るために、Goコミュニティで活躍して普及に尽力されている白川さんへインタビューしました。等身大の魅力をうかがいます。
Goとの出会い
日高: まずGo言語に触れた経緯についてお聞きしたいと思います。
白川: うまく話せるか不安ですが6年ぐらい前が最初の一歩でした。当時在籍していた会社ではボランティアプロジェクトがあり、バッチ処理を作ったのですよ。Goで。
日高: じゃあ、たまたま選んだと。慣れた言語でやることもできたと思いますが何か理由があったんですか?
白川: そのころの私はPHPを10年ぐらいやっていたのですが、言語は何でもいいよって言われたのがきっかけで、私もちょっと違うものにチャレンジしたいな、という気持ちがありました。
日高: なぜそこでGoに行き着いたんですか? 光るものがあったとかでしょうか。興味がでてきました。
白川: あまり覚えてないですがキャラクターが可愛いかったのが印象に残っています。多分Twitterか何かを見ているときに目についていたんでしょうね。
日高: センスを感じますね。可愛い……なるほど。あのキャラクターの元になったのは……。
白川: ネズミですかね。彼はホリネズミ(英語でGopher)です。はい。
日高: Go言語のファーストインプレッションはどうでしたか。
白川: PHPをずっと書いていて、開発チームの中でスタンダードなコーディングルールを作ることにすごい苦しんでいたんですよね。Javadocのルールをまねて、チームに導入したり。でもGoは言語仕様もシンプルで、最初からこう書けばいいんだ、と理解できるし、gofmtでコードフォーマットをかけられる、めっちゃいいじゃんって思いました。
日高: 苦しんでいたことが簡単に実現できるのを見てしまうと、めちゃくちゃ響きますね。
白川: そうです。バッチで書いた業務処理のパフォーマンスも良くて。
日高: あー、業務向けだし、バッチは決められた時間内に終わるのも要件だったんですね。パフォーマンスも確認できたのか。バッチでGo言語を始めたというのも多分、良かったんでしょうね。最初からプロダクトにっていうよりは試行錯誤する時間もあったってことですか。
白川: 確かにそうですね。全然詳しくなかったのでゴルーチンをなんとなくで導入していたりと、今振り返ってみるとひどいコードだったと思うのですが、体験が良かったです。
シンプルに書ける魅力
日高: さらにGo言語を触ってみよう、詳しくなりたいと感じた経験は何かあったんでしょうか。業務だとPHPを使っていたというお話だったので。
白川: 勉強会にたまたま参加して、そのあとにのめり込みました。Women Who Go Tokyoというコミュニティが毎月開かれていて、なにかしらのテーマがありました。そこからGo言語に定期的に触れるようになりました。
日高: 6年前だから、多分2015年から2016年ぐらいのころの出来事でしょうか。興味が出たときにコミュニティがあったのは良かったですね。そのころのGo言語って今と比べてもっとシンプルだったんですか? それともほとんど変わらない体験が実現できてたんですか?
白川: プロダクトで深くGoに触れる経験は今までになく、踏み込んだ開発ではわからないのですが、バッチを書いたり、コマンドラインツールを作ったり、ちょっとした開発ツールを書いている範囲では大きな違いはありませんでした。ただ最近はベンダリングツール[1] も整っていて、現在のほうがずっと便利に感じます。
日高: Go言語のファーストインプレッションのくだりでも開発ツールにちょうど良かったと出てきていましたが、利用歴が長くなるにつれて使い方も変化がでてきたりしましたか?
白川: 最初のうちは手元で便利なことをしようと思うとすぐPHPを選んでいたんですよね。PHPもすごく好きだったので。でも、もうここ数年はずっとGoを使ってます。環境構築が楽なんですよ。
日高: 詳しく知りたいですね。僕はAndroidエンジニアですが、開発にはAndroid Studioなどの統合開発環境がやっぱり必要です。そのへんの事情の違いが気になります。
白川: 過去に仕事で使ったPHP以外にRubyなどもちょっと触っていたのですが、私にとってはGoとVimがあればそれだけですぐに開発がはじめられる、というのがシンプルでよかったです。前述のコードフォーマットのgofmtも標準の開発ツールですし。
日高: すばらしい。ご自身の開発スタイルに合っていたんですね。
白川: そうですね。GoにもGoLandという統合開発環境があります。でも私はターミナルで操作しちゃうことが結構多い。ちゃんと環境を整えるよりも思いついたときにサッと使いたいんだろうなと。
日高: 開発環境自体も整理されているけど自分のスタイルにGo言語が合っていたというのが大きそう。この6年間の経験を通してGo言語の一番の魅力的だなっていう点を挙げるとしたら何がありそうですか?
白川: 私は、最初に出会ったコミュニティであるWomen Who Go Tokyoのオーガナイザーになったのですが、そこではプログラミングの勉強会も開催しています。ライフワークとして数年間続けているのですが、そのとき思うのは、書き方がシンプルなのでレビューがしやすい。正解だって感じるパターンがある程度わかる感じがあります。
日高: ひとつのことを実現するのに、コダワリみたいなのが入りにくい、単一に近い書き方になるということでしょうか?
白川: そうです。そこが結構いいなと。同じ言語を使っているけど所属や人によって音楽性の違いをたまに感じるんです。Go言語の世界では音楽性の違いが起きにくい気がします。また、私が過去に触れた言語よりは型が強いので、余計にちゃんとしていると感じました。だから初学者が自分で間違いに気付きやすい、教えていて手がかからない、そういう点で学び始めに合っているなと感じています。
日高: 音楽性の違いっていう比喩はおもしろいですね。今お聞きした中に初学者に教えるとありましたが、社内教育などでGo言語のメリットを感じたきっかけがあったんですか?
白川: 自分と同じように大学でコンピュータサイエンスを学んでいない女性などの採用に力を入れていたことがあります。プログラミング未経験であっても、その方と一緒に立ち上がって仕事をしていこう、という活動をしていました。はじめはPHPやJavaScriptなどでやっていたのですが、Go言語を知ってからはかなり効果的だと思いました。特にGo言語の学習用のコンテンツを作って公開してくれていた人がいたことが大きいと思います。すごく良い題材を作ってくださっていて。
日高: Goが自分の活動に合っていて使いやすい言語だったと。Go言語の誕生が2009年なので、そろそろ10年、直近もGenerics導入の議論が進んでいるようです。どんどん進化して複雑に感じるようなシーンはありましたか。
白川: うーん、ない。ないかもしれません。私はWomen Who Go Tokyoの仲間たちと初学者にむけて技術書典で技術書を書いたりしています。年に2冊ぐらいのペースで、毎回異なるテーマの記事を集めていますが、特別大変だなぁと思ったことはないですね。Goは後方互換性に優れていて助かっています。Genericsについては、自分自身がそれを導入しなければならないような開発を担当していないため、そこには言及できません。
聞き手 日高正博
日高: ないんですね。素人考えだとバッチみたいな処理でパフォーマンスを求めようと思ったら複雑になりそうな気もします。
白川: Goは標準でベンチマークツールが存在しているので、まずは計測をすることを意識すると良さそうです。また、それらの情報は調べやすい状態にあります。Goのポータルサイトgo.devがあるので、だいたいの情報はそこで得られます。基本的にGoはGoで書かれているので、よく読むことは実装のヒントにつながります。
今まで経験した言語で嫌いなものはないのですが、いくらでも難しく書くことができると思うんですよね。Go言語を使い出した背景には、開発にシンプルさを求めていることが多いんじゃないかなと。読みやすい書きやすいっていうのは強調していいメリットだと思いますね。
コミュニティの存在
日高: 言語のコミュニティがあって良かったと感じたところは?
白川: Go Conferenceっていう開発者会議をだいたい年に2回ずつ開催しています。昨年はちょっとお休みしたんですけれど。Go Conferenceも気が付いたらいろんな地域の人たちが手伝ってくれるようになっていて、ご当地Goという取り組みが生まれています。福岡、大阪、京都、仙台など地域コミュニティが増えています。
地域コミュニティの人たちどうしでの連携も増えていて、Goを書く人って増えてる、めっちゃいるんだなーっていうのが実感できました。
今はカンファレンス自体はオンラインになったので、ご当地の人たちが集まって、たとえば秋のGo Conferenceは関西在住のみんなにリードしてもらおうという取り組みもしています。
日高: オンラインになって会えないのは寂しいけど、距離が関係なくなった点でうまく連携してるんですね。
白川: そうですね、こうした取り組みはオンライン化がなかったら難しいですよね。誰しもが行きたいときに行けるとは限らないので。
言語の広がり
日高: 将来、Go言語がこうなっていくとうれしいとか、こういう風になってほしいっていう希望はありますか?
白川: どうなんでしょう。私はそんなに大きく変わらなくても別にいいかなって思っています。そのときに必要なものを見つけてきてシンプルに終わらせたいので、その時々のスタンダードを取り入れていきたいと考えています。複雑な要素をなるべく回避したいんですよね。
結局メンテナンスも大変ですし、後方互換性がどんどん失われていくと、どこかで勇気を出してリプレースすることや破壊的な変更をしたくなることもあるはずです。その回数は可能な限り少ないほうがいいかなと思ってます。
日高: Go言語のシンプルさが設計を支援してくれているんだなぁとわかってきました。逆に、ここは気になるんだよな~、という弱点はないんですか?
白川: データベースの取り扱いやロガーはちょうどいいのがなかった時期があって悩んでいましたね。クエリを書くときとかログ周りは本当にこれでいいのかな?と構えるときがありました。エコシステムが広がっていて、ログのケースではサードパーティのパッケージを使って解決していました。
日高: なるほど、エコシステムが広がるにつれて足りないパーツが補われていったんですね。
白川: それは、すごく感じています。ベンダリングなどはGo Modulesが出てきて、依存性管理(ライブラリバージョンなど)もいい感じで解決をされてしまいそうです。
さらに、Go言語ってバージョンアップがあるとパフォーマンスも改善され続けているんですよね。毎回ちゃんと改善してくるの、すごいなと思っていて。逆に、よく友達に言われるのは「リストの取り扱いとかは結構めんどくさいじゃん!」とかですね。全方位にいい顔はできないので、PythonとかRubyのほうが向いてるときがあるかもしれません。自分がシンプルな解決方法で、そのときにあるものを使う考え方だから気になっていない、ということもあります。
写真1 取材時は白川さんのTシャツも話題になりました。
Goという選択肢
日高: 振り返ってみてGoはご自身にとってベストな選択肢でしたか?
白川: 私の人生では、この選択肢はベストだったなと思っています。今まで選択してきた他の言語も好きなので、その経験があって今Go言語を使っていることがベストだと思ってます。楽しんでやったほうがいいよって言いつつ、技術書の執筆では締め切りとかあるので苦しんでますけどね。
日高: いい選択だ。Go言語がシンプルに書けるといっても奥は深そうだなと感じました。
白川: シンプルさは毎回苦しみながら試行錯誤しています。なるべく嘘なくシンプルを追求した形でアウトプットを出していきたいと思い続けてはいます。
日高: アウトプットの中のひとつ、Women Who Go Tokyoの活動も毎月続けられているんですか?
白川: そうです。毎月やってます。みんなで読書会やハンズオンをこつこつと進めたりと楽しんでいます。Go Conferenceも今年の秋と来年の春もやります。ぜひ参加してください。
特集1
仕様ファーストでいこう!
実践API設計
堅牢で、保守性に優れたWebサービスの実現
特集2
はじめての画像回帰テスト
Storybook&Chromaticで品質も生産性も向上!
特集3
画像生成AIのしくみ
Stable Diffusionの内部を探る