この記事はalias go='go1.18'
でお送りしています。
Money ForwardでGoエンジニアをしている @yoskeoka です。
Go1.18がついにリリースされましたね!
特に注目度の高いGenericsやFuzzingのような言語の新機能、Go tool chain, standard packageの拡張などなど・・・、あなたのチームで開発しているプロダクトで早速活用してみたいのではないでしょうか。
でも、ちょっと待ってください。 Go公式からのリリース発表だけを見て早速新機能を使ったコードを書いてしまっていいのでしょうか?
いきなりアップデートしてしまう前に、新しいバージョンのGoの新機能が手元の開発PCから本番環境まで対応済みかどうか、丁寧に確認してから計画的にアップデートしましょう。
TL;DR
今回注目度の高かった新機能を含むGoのリリースに合わせて、関連ツールなどの対応状況を簡単に調べてみましたが、以下のようなGoコミュニティの対応の良さを感じました。
- ほとんどのGoのツール・環境が公式リリースと同日に新機能に対応している
- 一部対応がまだなものもあるが、温度感高く新機能をサポートしようとしている
これからも安心してGoを使っていけそうです!
Goのリリース
Beta、RC版を経て、Go Teamから正式なリリースがアナウンスがされます。 Twitterのアナウンスで知る人も多いのでは。
🎊 Go go1.18 is released!
— Go (@golang) March 15, 2022
📝 Release notes: https://t.co/UFumhMjcOL
⬇️ Download: https://t.co/fnDCVVhJXK#golang pic.twitter.com/uWNSy5V7nv
毎回しっかりとRelease Notesが書かれているので、変更を確認してからアップデートしたいですね。
Release NotesにBreakingChangesがなければ、実はGoのバージョンはアップデートしてしまっても基本的に互換性が保たれているため問題は起こらないと思います。
ですが、新機能を使うことを目的としてアップデートする場合は話が変わってきます。 あなたの手元で書いた、新機能を使ったGoのコードが、チームでの開発プロセスを経て、プロダクション環境で動くか?までを考えておく必要があります。
新バージョンをサポートしているか確認していく
以下でそれぞれのツール、環境のGoサポート状況を確認していきますが、v1.18リリース当日(2022/03/16)の情報です。 後ほどアップデートされている可能性はありますし、見逃しもあるかもしれません。
Goのインストール方法
バイナリインストール
公式リリースからダウンロードするか、アナウンスについているgo install golang.org/dl/go1.18@latest
のコマンドでインストールする一番確実で、リリース直後から使える方法です。
Goを公式リリースのバイナリからインストールしていない人もいると思います。 チーム開発しているなら、チームメンバー全員が新機能に対応したGoのバージョンを使う必要があるのでいくつか環境構築に使われているものを調べました。
Go Playground
Goのちょっとした動くコードを共有するのにGo Playgroundを使うと思いますが、これもRelease版でGenericsを含むコードが動くようになっていました。 試しにGenerics TutorialのコードをGo Playgroundで動かしてみましたが問題なし。
エディタ
vim, VSCodeといったよく利用されるエディタでは、Goのサポートのために内部的にgopls (GoのLanguage Server Protocol)を使用しています。
- gopls
- v0.8.0で爆速対応済み
- リリース日にもv0.8.1で追加の修正をおこなっていました
- GoLand
- Go Genericsについてはサポート状況をしっかりと告知している様子でした。(実際の動作までは確認できてません)
lint
数が多いので主に使っているものだけ調べました。
- go vet
- 公式のtoolなので問題なし
- x/tools/go/analysis
- linter作成に有用なpackageですが、go vetにも内部で使われているものなので対応済
- staticcheck
- generics branchで対応中
- 1週間後くらいにGenerics対応が終わると告知をしていました
CI/CD
コンテナ系
Money Forwardではローカルの開発環境以外ではGoコンテナで動かしているので
- docker official image golang
golang:1.18.0
のtagで爆速対応済みでした!
- ko
- 対応中のようです
その他
- AWS Lambda Go
- go1.18に対して、特別対応が必要な設計になっていなかったので問題なく使えるようです
調べてみた結果
Goのエコシステムは多くのコントリビューターの手で支えられているんだなぁ(小並感) と感じました。 これからもたくさんお世話になって、こちらからもコントリビュートしていきたいです!
マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。
【サイトのご案内】 ■マネーフォワード採用サイト ■Wantedly ■福岡開発拠点 ■京都開発拠点
【プロダクトのご紹介】 ■お金の見える化サービス 『マネーフォワード ME』 iPhone,iPad Android
■ビジネス向けバックオフィス向け業務効率化ソリューション 『マネーフォワード クラウド』
■だれでも貯まって増える お金の体質改善サービス 『マネーフォワード おかねせんせい』