The Go Blog(Go ブログ)

Go 開発者調査 2019 の結果

Todd Kulesza
2020年4月20日

なんて素晴らしい反応でしょう!

今年の調査に参加してくださった何千人もの Go 開発者の皆様に、まずは心から感謝申し上げます。2019 年は、10,975 件の回答があり、昨年の約 2 倍でした!チームの他のメンバーを代表して、Go での経験についてお話しいただいた時間と労力に感謝の意を表します。ありがとうございます!

過去数年についての注意点

注意深い読者は、私たちが過去に共有した数字と、前年比の比較が完全には一致していないことに気付くかもしれません。その理由は、2016 年から 2018 年にかけて、各質問のパーセンテージを、調査を開始した人の総数を分母として計算していたためです。これは一貫性がありますが、全員が調査を完了するわけではないという事実を無視しています。最大 40% の参加者が最後のページに到達する前に停止するため、調査の後半に表示された質問は、後半にあるというだけでパフォーマンスが低いように見えました。そのため、今年は、すべての結果(この投稿に示されている 2016 年から 2018 年の回答を含む)を再計算し、特定の質問に回答した人の数をその質問の分母として使用しました。各チャートの 2019 年の回答数(x 軸またはチャートの凡例に「n=[回答者数]」の形式で)を含め、読者が各調査結果の根拠となる証拠の重みをよりよく理解できるようにしました。

同様に、以前の調査では、回答リストの最初に表示された選択肢の回答率が不均衡に高かったことがわかりました。これに対処するために、調査にランダム化の要素を追加しました。複数の選択肢から回答する質問の中には、「Go で次のようなものを書いています:[アプリケーションの種類のリスト]」のように、論理的な順序のない選択肢のリストを持つものがあります。以前はこれらの選択肢はアルファベット順に並んでいましたが、2019 年は各参加者にランダムな順序で提示されました。これは、特定の質問について、2018 年から 2019 年の前年比の比較が無効になることを意味しますが、2016 年から 2018 年の傾向は無効になりません。これは、2019 年のより正確なベースラインを設定するものと考えてください。回答者が特定の名前(例:好みのエディター)をスキャンする可能性が高い場合は、アルファベット順を保持しました。以下では、これが該当する質問を明示的に示しています。

3 つ目の大きな変更点は、自由回答形式のテキスト回答を含む質問の分析を改善することでした。昨年は、機械学習を使用して、これらの回答を大まかに(しかし迅速に)分類しました。今年は、2 人の研究者がこれらの回答を手動で分析および分類し、より詳細な分析を可能にしましたが、昨年の数値との有効な比較はできなくなりました。上記のランダム化と同様に、この変更の目的は、2019 年以降の信頼できるベースラインを提供することです。

前置きはこれくらいにして…

これは長い投稿です。主な調査結果の要約を以下に示します。

  • 回答者の属性は Stack Overflow の調査回答者と似ており、これらの結果がより広範な 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 年未満です。また、過半数が職場で Go を使用している(72%)、職場以外で使用している(62%)と回答しています。業務で Go を使用している回答者の割合は、毎年増加傾向にあるようです。

下のグラフからわかるように、2018 年にはこれらの数値が急増しましたが、今年はその増加がなくなりました。これは、2018 年に調査に回答した層が他の 3 年間とは大きく異なっていたことを示唆する多くの兆候の 1 つです。この場合、彼らは職場以外で Go を使用し、職場では別の言語を使用している可能性が有意に高かったのですが、複数の調査質問で同様の異常値が見られます。

最も長く Go を使用している回答者は、Go を使い始めたばかりの開発者とは異なる経歴を持っています。これらの Go のベテランは、C/C++ の専門知識を主張する可能性が高く、JavaScript、TypeScript、PHP の専門知識を主張する可能性は低くなりました。1 つの注意点は、これは自己申告による「専門知識」であるということです。代わりに「精通度」と考える方が役立つかもしれません。Python は、Go を使用している期間に関係なく、最も多くの回答者が精通している言語(Go 以外)のようです。

昨年、回答者がどの業界で働いているかについて質問したところ、過半数がソフトウェア、インターネット、または Web サービス企業で働いていると回答しました。今年は、回答者がより幅広い業界を代表しているようです。ただし、重複する可能性のあるカテゴリ(例:2018 年の「ソフトウェア」と「インターネット/ Web サービス」の別々のカテゴリは、2019 年には「テクノロジー」に統合されました)による混乱を軽減するために、業界のリストを簡素化しました。したがって、これは厳密には同等の比較ではありません。たとえば、カテゴリリストを簡素化したことの影響の 1 つとして、明示的にリストされていない業界向けの 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 人の組織)の回答者を見ると、この割合はほぼ 2 倍(11%)になります。独自のドキュメントサーバーの運用を停止したと回答した回答者へのフォローアップ質問によると、サーバーを廃止する主な理由は、認識されているメリットの低さ(23%)と、最初にサーバーをセットアップして保守するために必要な労力(38%)の組み合わせであることが示唆されています。

Go に対する感情

回答者の大多数は、Go がチームにとってうまく機能している(86%)ことに同意し、次のプロジェクトで Go を使用したい(89%)と考えています。また、回答者の半数以上(59%)が、Go は企業の成功に不可欠であると考えていることがわかりました。これらの指標はすべて 2016 年以降安定しています.

結果を正規化すると、過去数年間のこれらの数値のほとんどが変わりました。たとえば、「Go は私のチームにとってうまく機能している」という記述に同意した回答者の割合は、参加者の脱落により、以前は 50% 台と 60% 台でした。質問を見たことがない参加者を削除すると、2016 年以降かなり安定していることがわかります。

Go エコシステムにおける問題解決に対する感情を見ると、同様の結果が得られます。回答者の大多数が各記述に同意しており(82%~88%)、これらの割合は過去 4 年間 largely 安定しています。

今年は、業界全体の満足度をより詳細に調査し、基準値を確立しました。全体的に、回答者は業界セクターに関係なく、仕事で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'で始まる4つの選択肢のうち3つが減少し、それ以外はすべて安定または増加しました。したがって、このグラフは2019年のより正確なベースラインとして、2016年から2018年までのトレンドを参考に解釈するのが最適です。たとえば、HTMLを返すWebサービスを構築する回答者の割合は2016年から減少していると考えていますが、この回答は常に長い選択肢リストの最尾にあったため、過小評価されていた可能性があります。また、組織の規模と業界別に分類しましたが、大きな違いは見られませんでした。回答者は、小さなテクノロジー系スタートアップ企業で働いていても、大規模な小売企業で働いていても、ほぼ同じようにGoを使用しているようです。

関連する質問として、回答者がGoで作業しているより大きな分野について尋ねました。最も一般的な分野はWeb開発(66%)でしたが、データベース(45%)、ネットワークプログラミング(42%)、システムプログラミング(38%)、DevOpsタスク(37%)も一般的な分野でした。

回答者が何を構築しているかに加えて、使用している開発手法についても質問しました。回答者の大多数は、デバッグにテキストログに依存していると回答し(88%)、自由回答では、これは代替ツールを効果的に使用することが難しいことが原因であることが示唆されています。ただし、ローカルでのステップワイズデバッグ(Delveなど)、プロファイリング、およびレースディテクターを使用したテストは珍しくなく、回答者の約50%がこれらの手法の少なくとも1つに依存していました。

パッケージ管理に関しては、回答者の大多数(89%)がGoのモジュールを採用していることがわかりました。これは開発者にとって大きな変化であり、コミュニティ全体がほぼ同時にこの変化を経験しているようです。

また、回答者の75%が本番環境での使用のために現在のGoリリースを評価しており、さらに12%が1つのリリースサイクルを待っていることもわかりました。これは、Go開発者の大多数が現在または以前の安定版リリースを使用している(または少なくとも使用しようとしている)ことを示唆しており、プラットフォームとしてのサービスプロバイダーがGoの新しい安定版リリースを迅速にサポートすることの重要性を強調しています。

クラウドにおけるGo

Goは最新の分散コンピューティングを念頭に置いて設計されており、Goを使用したクラウドサービスの構築における開発者エクスペリエンスを継続的に改善したいと考えています。今年は、クラウド開発に関する質問を拡大し、回答者がどのようにクラウドプロバイダーと連携しているか、現在の開発者エクスペリエンスについて気に入っている点、そして改善できる点についてより深く理解しました。前述のように、2018年の結果の一部は、自己所有サーバーの予想外に低い結果やGCPデプロイメントの予想外に高い結果など、外れ値のようです。

2つの明確な傾向が見られます

  1. 3つの主要なグローバルクラウドプロバイダー(Amazon Web Services、Google Cloud Platform、Microsoft Azure)はすべて、調査回答者における利用率が上昇傾向にある一方、他のほとんどのプロバイダーは、毎年より少ない割合の回答者によって利用されています。
  2. 自己所有または会社所有のサーバーへのオンプレミスデプロイメントは減少を続けており、現在、最も一般的なデプロイメントターゲットとして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が自分の仕事に「適切な言語ではない」と答えた回答者には、さまざまな理由とユースケースがありました。最も一般的なのは、Web、デスクトップ、またはモバイル用のGUIなど、何らかの形式のフロントエンド開発に取り組んでいることでした(22%)。もう1つの一般的な回答は、既に支配的な言語があるドメインで働いていると回答したこと(9%)であり、異なるものを使用することが難しいとのことでした。一部の回答者は、どのドメインを参照しているかについても教えてくれました(または、別の言語がより一般的であることを言及せずにドメインを単に言及しました)。これは、以下の「[ドメイン]で作業しています」行に示しています。回答者によって引用されたもう1つの上位の理由は、より良いパフォーマンスの必要性(9%)、特にリアルタイムコンピューティングのための必要性でした。

回答者が報告した最大の課題は、昨年とほぼ変わりません。Goのジェネリクスの欠如とモジュール/パッケージ管理が依然として上位を占めており(それぞれ回答の15%と12%)、ツールに関する問題を指摘する回答者の割合が増加しました。これらの数値は上記のグラフとは異なります。なぜなら、この質問は、Go導入の最大の阻害要因として何を挙げたか regardless of に、*すべて*の回答者に尋ねられたからです。これら3つはすべて、今年のGoチームの重点分野であり、今後数か月で、特にモジュール、ツール、および入門体験を中心に、開発者エクスペリエンスを大幅に改善したいと考えています。

障害やパフォーマンスの問題の診断は、どの言語でも難しい場合があります。回答者は、これら両方の最大の課題は、Goの実装やツールに固有のものではなく、より根本的な問題、つまり自己申告による知識、経験、またはベストプラクティスの不足であると述べています。私たちは、今年後半にドキュメントやその他の教育資料を通じて、これらの知識のギャップを解消するのに役立ちたいと考えています。その他の主要な問題はツールに関連しており、具体的には、Goのデバッグおよびプロファイリングツールの学習/使用に対する費用対効果のトレードオフが不利であると認識されていること、およびさまざまな環境(例:コンテナ内でのデバッグ、本番システムからのパフォーマンスプロファイルの取得)でツールを動作させる際の課題です。

最後に、回答者の編集環境におけるGoのサポートを最も改善するものは何かを尋ねたところ、最も一般的な回答は、言語サーバー(gopls、19%)の一般的な改善またはより良いサポートを求めるものでした。 goplsは約80の既存ツールを置き換え、まだベータ版であるため、これは予想されていました。回答者が改善してほしい点を具体的に述べた場合、デバッグエクスペリエンス(14%)と、より高速または信頼性の高いコード補完(13%)を報告する可能性が最も高くなりました。多くの参加者は、gopls(8%)を使用する際にVS Codeを頻繁に再起動する必要があることを明示的に挙げていました。この調査が実施されてから(2019年11月下旬〜12月上旬)、これらのgoplsの改善の多くはすでに実現しており、これはチームにとって引き続き優先度の高い分野です。

Goコミュニティ

回答者の約3分の2(64%)が、Go関連の質問に答えるためにStack Overflowを使用していました。その他の主な回答元は、godoc.org(47%)、ソースコードの直接読み取り(42%)、golang.org(33%)でした。

前のグラフのロングテールは、回答者がGoでの開発中に課題を克服するために頼っている、さまざまな情報源(ほぼすべてがコミュニティ主導)とモダリティを強調しています。実際、多くのGopherにとって、これはより大きなコミュニティとの主要な交流ポイントの1つである可能性があります。コミュニティが拡大するにつれて、Go関連のイベントに参加しない回答者の割合がますます高くなっています。 2019年には、その割合は回答者の3分の2(62%)近くに達しました。

Google全体のプライバシーガイドラインの更新により、回答者の居住国を尋ねることができなくなりました。代わりに、Goの世界的な使用状況の大まかな目安として、また潜在的なローカライズ作業のためのデータを提供するという利点から、希望する話言葉/書き言葉を尋ねました。

この調査は英語で行われているため、英語を話す人や英語が一般的な第二言語または第三言語である地域の人々に強い偏りがある可能性があります。したがって、英語以外の数値は、Goのグローバルオーディエンスの近似値ではなく、最小値の可能性が高いと解釈する必要があります。

回答者の12%が伝統的に過小評価されているグループ(民族、性自認など)に属し、3%が女性であることがわかりました。(この質問は「女性」ではなく「女性」とすべきでした。この間違いは2020年の調査案で修正されており、お詫び申し上げます。)この3%はGoコミュニティの女性を過小評価している可能性が高いと考えています。たとえば、米国の女性ソフトウェア開発者は、Stack Overflow開発者調査に、米国の雇用統計に基づいて予想される割合(11%対20%)の約半分で回答していることがわかっています。米国の回答の割合がわからないため、これらの数値から実際の割合が3%よりも高い可能性があると推測することしかできません。さらに、GDPRにより、性別や伝統的に過小評価されているグループなど、機密情報の質問方法を変更する必要がありました。残念ながら、これらの変更により、これらの数値を前年度と有効に比較することができなくなりました。

過小評価されているグループに属している、またはこの質問に回答したくないと答えた回答者は、「Goコミュニティで歓迎されていると感じる」という記述に反対する割合(8%対4%)が、過小評価されていないグループに属している回答者よりも高く、継続的なアウトリーチ活動の重要性を浮き彫りにしています。

結論

2019年開発者調査の結果をご覧いただき、ありがとうございます。開発者の経験と課題を理解することは、2020年の作業を計画し、優先順位を付けるのに役立ちます。改めて、この調査にご協力いただいた皆様に深く感謝いたします。皆様からのフィードバックは、今後Goの方向性を導くのに役立ちます。

次の記事:VS Code Go拡張機能がGoプロジェクトに参加
前の記事:Go、Goコミュニティ、そしてパンデミック
ブログインデックス