The Go Blog
Go Developer Survey 2019 の結果
すごい反響でした!
今年のアンケートにご参加いただいた何千人ものGo開発者の皆様に、まず心から
感謝いたします。
2019年には10,975件の回答があり、昨年のおよそ2倍でした!Goに関する皆様の経験について、時間と労力を費やしてご意見を寄せてくださったことに、チーム一同、深く感謝申し上げます。ありがとうございました!
これまでの年について
目の肥えた読者の皆様は、前年比の比較が過去に共有した数値と完全に一致しないことに気づかれるかもしれません。その理由は、2016年〜2018年の間、各質問のパーセンテージを、アンケートを開始した総人数を分母として計算していたためです。これは一貫性があって良いのですが、全員がアンケートを最後まで完了するわけではないという事実を無視していました。参加者の最大40%が最後のページに到達する前に中止しており、アンケートの後半に登場する質問は、単に後半であるという理由だけで結果が悪く見えることがありました。そのため、今年度は、すべての結果(この投稿に示されている2016年〜2018年の回答を含む)を再計算し、特定の質問に回答した人数をその質問の分母として使用しました。各グラフには、各調査結果の証拠の重みを読者の皆様がよりよく理解できるよう、「n=[回答者数]」の形式で、x軸上またはグラフの凡例に2019年の回答者数を記載しています。
同様に、以前の調査では、回答リストの早い段階に表示された選択肢が不均衡な回答率を示していることがわかりました。これに対処するため、調査にランダム化の要素を追加しました。一部の多肢選択式質問には、「Goで以下を作成します:[アプリケーションの種類のリスト]」のように、論理的な順序のない選択肢のリストがあります。以前はこれらの選択肢はアルファベット順に並べられていましたが、2019年には各参加者にランダムな順序で表示されました。これは、特定の質問に対する2018年→2019年の前年比比較が無効になることを意味しますが、2016年〜2018年の傾向は無効になりません。これは2019年のより正確なベースラインを設定するものと考えることができます。回答者が好みのエディターなどの特定の名前をスキャンする可能性が高い場合は、アルファベット順を維持しました。どの質問にこれが適用されるかについては、以下に明示的に記載しています。
3つ目の大きな変更は、自由記述式の質問に対する分析の改善でした。昨年は機械学習を用いてこれらの回答を大まかに、しかし迅速に分類しました。今年は2人の研究者がこれらの回答を手動で分析・分類し、より詳細な分析を可能にしましたが、昨年の数値との有効な比較はできませんでした。上記で議論したランダム化と同様に、この変更の目的は、2019年以降の信頼できるベースラインを得ることです。
前置きはこれくらいにして…
長い記事です。主要な調査結果の要約(tl;dr)は以下の通りです。
- 回答者の人口統計はStack Overflowの調査回答者と類似しており、これらの結果がGo開発者全体のオーディエンスを代表しているという確信を深めました。
- 回答者の大多数が毎日Goを使用しており、この数字は毎年増加傾向にあります。
- Goの利用は依然としてテクノロジー企業に集中していますが、金融やメディアなど、より幅広い業界でGoが使われるようになってきています。
- 調査方法の変更により、前年比の指標のほとんどが安定しており、以前考えていたよりも高いことがわかりました。
- 回答者は、API/RPCサービスやCLIの構築など、組織の規模に関わらず同様の問題を解決するためにGoを使用しています。
- ほとんどのチームは最新のGoリリースに迅速にアップデートしようとしますが、サードパーティプロバイダーが現在のGoリリースをサポートするのが遅れると、開発者にとって導入の妨げとなります。
- Goエコシステムのほぼ全員が現在モジュールを使用していますが、パッケージ管理に関する混乱は残っています。
- 改善すべき優先度の高い分野には、デバッグ、モジュールとの連携、クラウドサービスとの連携における開発者体験の改善が含まれます。
- VS CodeとGoLandの利用は増加し続けており、現在では回答者の4人中3人が好んで使用しています。
誰から意見を聞いたか?
今年度は、このアンケートに回答してくださった方々をよりよく理解するために、新しい人口統計に関する質問を追加しました。特に、プログラミング経験の期間と勤務先の組織の規模について尋ねました。これらはStackOverflowの年次調査で尋ねられる質問をモデルにしており、私たちが得た回答の分布はStackOverflowの2019年の結果と非常に近いものでした。ここから得られた結論は、この調査の回答者はStackOverflowの調査対象者と同様のプロフェッショナルな経験レベルを持ち、さまざまな規模の組織が比例して代表されているということです(Goを扱う開発者からの回答が主であるという明らかな違いはありますが)。このことにより、これらの調査結果を世界中の推定100万人のGo開発者に一般化する際の自信が高まります。これらの人口統計に関する質問は、将来、前年比の変化が、感情や行動の変化ではなく、アンケートに回答した人々の変化の結果である可能性があることを特定するのにも役立ちます。
Goの経験を見てみると、回答者の過半数(56%)はGoの利用が2年未満と比較的経験が浅いことがわかります。また、過半数(72%)が仕事でGoを使用し、62%が仕事以外でもGoを使用していると回答しました。プロフェッショナルとしてGoを使用している回答者の割合は、毎年増加傾向にあるようです。
下のグラフが示すように、2018年にはこれらの数値が急増しましたが、今年は増加が消滅しました。これは、2018年の調査に回答したオーディエンスが、他の3年間とは著しく異なっていたことを示唆する多くのシグナルの1つです。このケースでは、彼らは仕事以外でGoを使用する可能性が著しく高く、仕事では別の言語を使用している可能性が高いのですが、同様の例外が複数の調査質問で見られます。
Goを長く使っている回答者は、新しいGo開発者とは異なる背景を持っています。GoのベテランはC/C++の専門知識を主張する可能性が高く、JavaScript、TypeScript、PHPの専門知識を主張する可能性は低い傾向にありました。ただし、これは自己申告による「専門知識」であるという注意点があります。むしろ「精通度」と考える方が役立つかもしれません。Goの経験期間に関わらず、Pythonは(Go以外で)最も多くの回答者が精通している言語であるようです。
昨年、回答者がどの業界で働いているかを尋ねたところ、過半数がソフトウェア、インターネット、またはウェブサービス企業で働いていると報告しました。今年は、回答者がより幅広い業界を代表しているようです。ただし、私たちは潜在的に重複するカテゴリ(例:2018年の「ソフトウェア」と「インターネット/ウェブサービス」の個別カテゴリは、2019年には「テクノロジー」に統合されました)による混乱を減らすために、業界のリストを簡素化しました。したがって、これは厳密には同等比較ではありません。たとえば、カテゴリリストを簡素化したことの一つの影響として、明示的にリストされていない業界向けにGoソフトウェアを作成する回答者にとって、「ソフトウェア」カテゴリが包括的なものとして使用されることが減少した可能性があります。
Goは成功したオープンソースプロジェクトですが、Goを使っている開発者がフリーまたはオープンソースのソフトウェアも書いているとは限りません。以前の年と同様に、ほとんどの回答者はGoのオープンソースプロジェクトに頻繁に貢献していないことがわかり、75%が「めったにない」または「一度もない」と回答しました。Goコミュニティが拡大するにつれて、Goのオープンソースプロジェクトに一度も貢献したことのない回答者の割合が徐々に増加していることがわかります。
開発ツール
例年通り、調査回答者の大多数はLinuxとmacOSシステムでGoを扱っていると報告しました。これは、私たちの回答者とStackOverflowの2019年の結果との間に強い相違が見られる分野の1つです。私たちの調査では、回答者のわずか20%しかWindowsを主要な開発プラットフォームとして使用していませんが、StackOverflowでは回答者の45%が使用していました。Linuxは66%、macOSは53%が使用しており、どちらもStackOverflowのオーディエンスの25%と30%よりもはるかに高い割合でした。
エディタの集約化の傾向は今年も続いています。GoLandは今年、24%から34%へと最も急激な増加を見せました。VS Codeの成長は鈍化しましたが、41%で回答者の中で最も人気のあるエディタであり続けています。これらの2つのエディタを合わせると、現在では回答者の4人中3人が好んで使用しています。
他のすべてのエディターはわずかに減少しました。これは、それらのエディターがまったく使用されていないという意味ではなく、Goコードを書くために回答者が「好んで」使用すると言っているものではないということです。
今年は、gddoのような社内Goドキュメントツールに関する質問を追加しました。回答者の少数(6%)が、自社の組織が独自のGoドキュメントサーバーを運用していると報告しましたが、大規模組織(従業員5,000人以上)の回答者を見ると、この割合はほぼ倍増(11%)します。組織が独自のドキュメントサーバーの運用を中止したと回答した回答者への追加質問では、サーバーを停止した主な理由は、認識されるメリットの低さ(23%)と、初期セットアップと維持に必要な労力(38%)の組み合わせであったことが示唆されています。
Goへの感情
回答者の大多数は、Goがチームにとってうまく機能している(86%)こと、そして次のプロジェクトでもGoを使いたい(89%)ことに同意しました。また、半数以上の回答者(59%)が、Goが自社の成功にとって不可欠であると信じていることもわかりました。これらの指標はすべて、2016年以降安定しています。
結果の正規化により、以前の年のこれらの数値のほとんどが変更されました。たとえば、「Goが私のチームにとってうまく機能している」という記述に同意した回答者の割合は、以前は参加者の脱落のために50%台から60%台でしたが、質問を見なかった参加者を除外すると、2016年以降はかなり安定していることがわかります。
Goエコシステムにおける問題解決への感情を見てみると、同様の結果が見られます。回答者の高い割合が各記述に同意し(82%~88%)、これらの割合は過去4年間でほぼ安定しています。
今年は、ベースラインを確立するために、業界全体の満足度をより詳細に調べました。全体として、回答者は業界分野に関係なく、仕事でGoを使用することに肯定的でした。いくつかの分野、特に製造業で不満にわずかなばらつきが見られますが、これについては追跡調査でさらに詳しく調べる予定です。同様に、Go開発の様々な側面に対する満足度と重要性についても尋ねました。これらの指標を組み合わせることで、特に3つのトピックが浮き彫りになりました。デバッグ(並行処理のデバッグを含む)、モジュールの使用、クラウドサービスの使用です。これらのトピックはそれぞれ、回答者の過半数によって「非常に」または「極めて」重要と評価されましたが、他のトピックと比較して満足度スコアが著しく低いものでした。
Goコミュニティに対する感情に目を向けると、以前の年とはいくつかの違いが見られます。まず、「Goコミュニティに歓迎されていると感じる」という記述に同意した回答者の割合が82%から75%に低下しています。深く掘り下げてみると、「やや同意する」または「ある程度同意する」と回答した回答者の割合が減少し、「どちらでもない」と「強く同意する」の割合がそれぞれ5ポイント、7ポイント増加していることが明らかになりました。この二極化された傾向は、Goコミュニティでの経験が分岐している2つ以上のグループを示唆しており、これもまた私たちがさらに調査する予定の分野です。
その他の大きな違いは、「Goプロジェクトに貢献することを歓迎されていると感じる」という回答が明確な上昇傾向にあることと、Goプロジェクトのリーダーシップが自分たちのニーズを理解していると感じる回答者の割合が前年比で大きく増加したことです。
これらの結果はすべて、Goの経験が増えるにつれて同意度が高まるパターンを示しており、約2年からその傾向が始まります。つまり、回答者がGoを長く使用しているほど、これらの各記述に同意する可能性が高かったということです。
これはおそらく驚くべきことではありませんが、Go開発者調査に回答した人々はGoを好む傾向にありました。しかし、私たちは回答者が他にどのような言語での作業を楽しんでいるのかも理解したいと考えていました。これらの数値のほとんどは、過去の年から大きく変化していませんが、2つの例外があります。TypeScript(10ポイント増加)とRust(7ポイント増加)です。これらの結果をGo経験の期間別に分解すると、言語の専門知識で見られたのと同じパターンが見られます。特に、Pythonは、Go開発者が最も構築を楽しんでいる可能性が高い言語とエコシステムです。
2018年に初めて「推奨しますか…」というネットプロモータースコア(NPS)の質問を尋ねたところ、スコアは61でした。今年のNPSの結果は統計的に変化のない60でした(「推奨者」67%から「批判者」7%を引いたもの)。
Goを使う
API/RPCサービスの構築(71%)とCLI(62%)は、Goの最も一般的な用途として引き続き挙げられています。下のグラフは2018年から大きな変化を示しているように見えますが、これらはおそらく、以前はアルファベット順に並べられていた選択肢の順序をランダム化した結果です。'A'で始まる選択肢のうち3つが減少し、その他は安定しているか増加しました。したがって、このグラフは、2016年〜2018年の傾向と合わせて、2019年のより正確なベースラインとして解釈するのが最適です。たとえば、HTMLを返すウェブサービスを構築している回答者の割合は2016年以降減少していると考えていますが、この回答が常に長い選択肢リストの最後にあったため、おそらく過小評価されていた可能性があります。また、これを組織の規模と業界別に分類しましたが、 significantな違いは見られませんでした。回答者は、小さなテックスタートアップで働いているか、大規模な小売企業で働いているかに関わらず、ほぼ同様の方法でGoを使用しているようです。
関連する質問として、回答者がGoを使って取り組んでいるより大きな分野について尋ねました。最も一般的な分野は圧倒的にWeb開発(66%)でしたが、その他の一般的な分野にはデータベース(45%)、ネットワークプログラミング(42%)、システムプログラミング(38%)、DevOpsタスク(37%)が含まれていました。
回答者が何を作成しているかに加えて、彼らが使用する開発テクニックについても尋ねました。回答者の大多数がデバッグにテキストログに依存していると回答し(88%)、彼らの自由回答は、代替ツールが効果的に使用するのが難しいことが原因であることを示唆しています。しかし、ローカルでの段階的なデバッグ(Delveなど)、プロファイリング、レース検出器を使ったテストは珍しくなく、回答者の約50%がこれらのテクニックの少なくとも1つに依存していました。
パッケージ管理に関して、回答者の大多数がGoにモジュールを採用していることがわかりました(89%)。これは開発者にとって大きな変化であり、コミュニティ全体が同時にこれに取り組んでいるようです。
また、回答者の75%がGoの現在のリリースを本番環境での使用のために評価しており、追加の12%が1リリースサイクル待っていることがわかりました。これは、Go開発者の大多数が現在のまたは以前の安定版リリースを使用している(または少なくとも使用しようとしている)ことを示唆しており、Platform-as-a-ServiceプロバイダーがGoの新しい安定版リリースを迅速にサポートすることの重要性を強調しています。
クラウドでのGo
Goは最新の分散コンピューティングを念頭に置いて設計されており、Goでクラウドサービスを構築する開発者体験を改善し続けたいと考えています。今年は、クラウド開発に関する質問を拡大し、回答者がクラウドプロバイダーとどのように連携しているか、現在の開発者体験のどこが良いと感じているか、そして何が改善できるかをよりよく理解できるようにしました。前述したように、2018年の結果の一部は、自己所有サーバーの予想外に低い結果や、GCP展開の予想外に高い結果など、異常値であるように見えます。
2つの明確な傾向が見られます
- 世界の三大クラウドプロバイダー(Amazon Web Services、Google Cloud Platform、Microsoft Azure)はすべて、調査回答者における利用が増加傾向にある一方、他のほとんどのプロバイダーは毎年、より少ない割合の回答者によって利用されています。
- 自社所有または会社所有のサーバーへのオンプレミス展開は引き続き減少しており、現在ではAWS(44%対42%)と統計的に並び、最も一般的な展開ターゲットとなっています。
回答者が使用しているクラウドプラットフォームの種類を見ると、主要なプロバイダー間で違いが見られます。AWSとAzureにデプロイしている回答者は、VMを直接使用している可能性が最も高く(それぞれ65%と51%)、GCPにデプロイしている回答者は、VM(35%)よりもマネージドKubernetesプラットフォーム(GKE、64%)を使用している可能性がほぼ2倍でした。また、AWSにデプロイしている回答者は、マネージドKubernetesプラットフォーム(32%)を使用している可能性と、マネージドサーバーレスプラットフォーム(AWS Lambda、33%)を使用している可能性が同じくらいであることがわかりました。GCP(17%)とAzure(7%)は、サーバーレスプラットフォームを使用している回答者の割合が低く、自由回答は、主な理由がこれらのプラットフォームでの最新のGoランタイムのサポートの遅延であったことを示唆しています。
全体として、回答者の大多数は、3つの主要なクラウドプロバイダーすべてでGoを使用することに満足していました。回答者は、AWS(80%が満足)とGCP(78%)のGo開発について同様の満足度を報告しました。Azureは満足度スコアが低く(57%が満足)、自由回答では、Goがこのプラットフォームでファーストクラスのサポートを欠いているという認識が主な要因であることが示唆されています(自由回答の25%)。ここでいう「ファーストクラスのサポート」とは、常に最新のGoリリースに対応し、新機能がリリースと同時にGo開発者も利用できるようにすることを指します。これは、GCPを使用している回答者(14%)が報告した最大の課題と同じであり、特にサーバーレスデプロイメントにおける最新Goランタイムのサポートに焦点が当てられていました。対照的に、AWSにデプロイしている回答者は、SDKがより慣用的なものになるなど、改善が必要であると述べる可能性が最も高かった(21%)です。SDKの改善は、GCP(9%)とAzure(18%)の開発者にとっても2番目に一般的な要求でした。
懸念事項
回答者がGoをもっと利用できないと答える主な理由は、他の言語でのプロジェクトに取り組んでいること(56%)、別の言語を好むチームで働いていること(37%)、Go自体に重要な機能が欠けていること(25%)です。
これは、選択肢リストをランダム化した質問の1つであったため、前年比の比較は有効ではありませんが、2016年〜2018年の傾向は有効です。例えば、チームが別の言語を好むためにGoをより頻繁に使用できない開発者の数は毎年減少していると確信していますが、その減少が今年劇的に加速したのか、それとも常に2016年〜2018年の推定値よりも少し低かったのかはわかりません。
上位2つの導入阻害要因(既存のGo以外のプロジェクトに取り組んでいること、別の言語を好むチームで働いていること)には直接的な技術的解決策はありませんが、残りの阻害要因にはあるかもしれません。そこで、今年はGoの利用を増やすために開発者をどのように支援できるかをよりよく理解するため、詳細を尋ねました。このセクションの残りの図は、手動で分類された自由回答に基づいており、非常に裾野が長いです。各図において、全回答の3%未満を占めるカテゴリは「その他」カテゴリにまとめられています。1つの回答が複数のトピックに言及する可能性があるため、図の合計は100%になりません。
Goに必要な言語機能が欠けていると回答した25%の回答者のうち、79%がジェネリクスを重要な欠落機能として指摘しました。エラーハンドリングの継続的な改善(Go 1.13の変更に加えて)は22%によって挙げられ、13%はより多くの関数型プログラミング機能、特に組み込みのmap/filter/reduce機能を要求しました。明確にすると、これらの数値は、必要な重要な機能が1つ以上欠けていなければGoをもっと利用できると回答した回答者のサブセットからのものであり、調査回答者全体の人口からのものではありません。
Goが自分の仕事に適した言語ではない」と回答した人は、さまざまな理由とユースケースを挙げていました。最も多かったのは、ウェブ、デスクトップ、モバイル向けのGUIなどのフロントエンド開発に従事しているというものでした(22%)。また、すでにその分野で支配的な言語があるため、別の言語を使うのが難しいという回答も一般的でした(9%)。中には、どの分野について言及しているかを具体的に教えてくれた回答者もいました(あるいは、別の言語が一般的であることに言及せずに、単に分野を挙げた場合もありました)。これらを下の「私は[分野]に取り組んでいます」の行に示しています。回答者が挙げたその他の主な理由としては、特にリアルタイムコンピューティングにおけるパフォーマンスの向上へのニーズがありました(9%)。
回答者が報告した最大の課題は、昨年とほぼ一貫しています。Goのジェネリクスの欠如とモジュール/パッケージ管理が依然として上位を占めており(それぞれ回答の15%と12%)、ツール関連の問題を指摘する回答者の割合が増加しました。これらの数値は、この質問が最大のGo導入阻害要因が何であるかに関わらず、すべての回答者に尋ねられたため、上記のグラフとは異なります。これら3つすべてが今年のGoチームの重点分野であり、今後数か月で、特にモジュール、ツール、および開始体験に関する開発者体験を大幅に改善したいと考えています。
あらゆる言語において、障害やパフォーマンスの問題を診断することは困難な場合があります。回答者によると、これら両方の最大の問題は、Goの実装やツールに特有のものではなく、より根本的な問題であると述べています。それは、自己申告による知識、経験、またはベストプラクティスの不足です。今年の後半には、ドキュメントやその他の教育資料を通じて、これらの知識のギャップを埋めるのに役立つことを願っています。その他の主要な問題はツールに関連しており、特にGoのデバッグおよびプロファイリングツールの学習/使用における不利なコスト/ベネフィットのトレードオフ、およびさまざまな環境でツールを機能させる上での課題(例:コンテナ内でのデバッグ、または本番システムからのパフォーマンスプロファイルの取得)が挙げられています。
最後に、回答者の編集環境でGoのサポートを最も改善するものは何かと尋ねたところ、最も多かった回答は、言語サーバー(gopls)の一般的な改善またはより良いサポートでした(19%)。goplsが約80種類の既存ツールを置き換えるものであり、まだベータ版であるため、これは予想されていました。回答者が具体的に改善を望むものについて詳しく述べた場合、デバッグ体験(14%)と、より高速で信頼性の高いコード補完(13%)を報告する可能性が最も高かったです。また、多くの参加者がgoplsを使用する際にVS Codeを頻繁に再起動する必要があることを明示的に言及しました(8%)。この調査が実施されてから(2019年11月下旬~12月上旬)、これらのgoplsの改善の多くはすでに実施されており、これはチームにとって引き続き優先度の高い分野です。
Goコミュニティ
回答者の約3分の2が、Go関連の質問に答えるためにStack Overflowを利用していました(64%)。その他の主な情報源は、godoc.org(47%)、ソースコードの直接閲覧(42%)、golang.org(33%)でした。
前述のグラフの長い裾は、Goでの開発中に課題を克服するために回答者が頼りにしている、多種多様な情報源(ほぼすべてがコミュニティ主導)と様式を浮き彫りにしています。実際、多くのGopherにとって、これがより大きなコミュニティとの主な交流点の一つかもしれません。コミュニティが拡大するにつれて、Go関連のイベントに参加しない回答者の割合がますます高くなっています。2019年には、その割合は回答者のほぼ3分の2(62%)に達しました。
Google全体でプライバシーガイドラインが更新されたため、回答者が居住している国について尋ねることはできなくなりました。代わりに、Goの世界的な利用状況の非常に大まかな代理として、また潜在的なローカライズの取り組みのためのデータを提供するために、好みの話言葉/書き言葉について尋ねました。
この調査は英語で行われたため、英語を話す人や、英語が一般的な第二または第三言語である地域の人々に強い偏りがある可能性があります。したがって、非英語の数値は、Goのグローバルなオーディエンスの近似値ではなく、可能性のある最小値として解釈されるべきです。
回答者の12%が伝統的に過小評価されているグループ(民族、性自認など)に属すると回答し、3%が女性であると回答しました。(この質問は「female」ではなく「woman」とすべきでした。2020年の調査ドラフトでは修正済みであり、お詫び申し上げます。)この3%という数字は、Goコミュニティにおける女性の過小評価であると強く疑っています。たとえば、米国の女性ソフトウェア開発者は、StackOverflow開発者調査に米国の雇用統計に基づくと予想される割合の約半分(11%対20%)で回答していることがわかっています。米国内の回答者の割合がわからないため、実際の割合は3%より高い可能性が高いとしか言えず、これらの数字から安全に推測することはできません。さらに、GDPRにより、性別や伝統的に過小評価されているグループを含む機密情報の尋ね方を変更する必要がありました。残念ながら、これらの変更により、これらの数字を過去の年と比較することができなくなりました。
過小評価されているグループに属すると回答した回答者、またはこの質問への回答を希望しなかった回答者は、「Goコミュニティに歓迎されていると感じる」という記述に対する不同意の割合が、過小評価されているグループに属さない回答者よりも高かった(8%対4%)ことから、継続的なアウトリーチ活動の重要性が浮き彫りになりました。
まとめ
2019年開発者調査の結果にご満足いただけたでしょうか。開発者の皆様の経験と課題を理解することは、2020年の作業計画と優先順位付けに役立ちます。改めて、この調査にご協力いただいた皆様に心から感謝申し上げます。皆様からのフィードバックは、来る年以降のGoの方向性を決定する上で役立っています。