IntelliJ IDEA
IntelliJ IDEA – the Leading Java and Kotlin IDE, by JetBrains
数字で見る 2020年における Java の現状
今年、Java は25 周年という素晴らしいマイルストーンを迎えました。 これを祝して開催したオンライン Java Day イベントでは、多数の専門家を講演者としてお迎えし、それぞれの体験談のほか、Java 言語の活用のヒントとトリックについてお話していただきました。
このイベントから思考を探る機会を得て、Java の一般的な現状を見出すため、そして皆さんの質問にいくつか答えられるよう、データを深く掘り下げて調べることにしました。 見つけ出したものの中にはそれほど驚く内容ではないものもありますが、まったく以って期待していなかったインサイトもあります。
Java 15 のリリースに続き、その内容をまとめ、Java の現状として公開することにしました。 この記事は、さまざまな情報源より得たデータに基づいて執筆したものであり、弊社のデベロッパーアドボケートである Trisha Gee の専門家としてのコメントも織り込んでいます。
世界における Java の利用状況
1 つ目の質問は、「Java 開発者が最も多い地域とそこに占める人数」でした。 これには、高い根拠のある推測値を得るために、入手することのできた最も正確な情報を取りまとめて推定することで解を導きました。
市場調査と分析チームによる開発者数推定モデルから得られた最も正確な推定値によれば、今日の世界には、520 万人のプロ Java 開発者が存在し、主なプログラミング言語として Java を利用していることが示されました。 さらに、ほかのプログラミング言語を主に使用しながら、セカンダリ言語として Java を少し扱うというプロフェッショナル開発者を含めれば、この数値はおそらく 680 万人近くまで登ると考えられます。
これらの Java 開発者の活動拠点に関しては、アジアに最も集中しており、約 250 万の開発者が主な言語として Java を使用していることがわかりました。 北米とヨーロッパのユーザー数は、アジアとは比較の対象にもならない程度でした。 その理由について気になるところでしょう。 私たちも驚きました。そこで、これらの地域をもう少し詳しく調べ、この数字の根拠を探ることにしました。
Java が多く利用されている地域
さらに調査を続ける過程で、Java 開発者人口が最も高かった国々を個別に取り上げ、プロフェッショナル開発に使用する言語として、ほかの言語よりも明らかに Java を好んだ理由を調べました。
以下のグラフでは、Java を主な言語として使用する開発者の割合を国別に示しています(このデータを収集するにあたって使用されたアンケートへの回答者は、最大 3 つの言語を選択できました)。 中国と韓国が最高値を示しており、順に 51%、50% となっています。 このデータは「2020 年開発者エコシステムの現状アンケート調査」から得られたものです。
専門家の分析
上位 6 か国において Java がこれほどにも高い人気を得ている理由には、Java を自由に利用できること、政府による支援、およびオープンソースであることが挙げられます。 特に中国、スペイン、およびブラジルにおいて、これが大きな原因であることが見られます。 中国とインドにおいては、Java は Android モバイル開発の基盤となっています。同言語での携帯アプリの構築には、オフショア開発人員を採用しているため、インドに関しての使用率の高さは、これに所以していると考えられます。 ドイツにおいても、多種産業におけるスケーラビリティに非常に優れたアプリケーションに Java が用いられていることから、ドイツのソフトウェアエンジニアの間で最も高い人気を誇る言語となっています。 ほとんどのエンタープライズサービスは、給与払い、在庫管理、レポート作成など、経営にかかわる日常的な業務の遂行を可能にするアプリケーションに Java を利用しています。 ドイツではまた、金融部門における Java の利用率が非常に高く、金融取引ボットやリテールバンキングシステム、そして企業の優位性を維持するために金融業界が必要とするアプリケーションなどの自社開発技術に使用されています。
米国の Java ユーザー層には高い率を予測していましたが、そうでないことにも非常に合理的な理由があります。 その地域では選択できる技術スタックは幅広く、多くのテクノロジー企業がそのスタックの最前線にいます。米国の開発者は Java の能力や安定性を必要とせず、ビルドとテストをより素早く行える言語を使用している可能性があります。
業界のインサイト
2020 年開発者エコシステムの現状アンケート調査によると、プロ開発者の 3 分の 1 以上が Java を主な言語として使用しているだけでなく、Java は JavaScript に続く第 2 の主な言語としての位置付けも維持しています。
専門家の分析
Java 開発者はフロントエンドや簡易スクリプトに JavaScript を使用する傾向が強いため、JavaScript と Java がペアとして上位を占めることは当然です。 Python が 3 位に上がっているのは、おそらく機械学習の浸透によるものです。 また、開発者エコシステムの大部分はウェブであるという一般的な考えに基づけば、JavaScript、HTML と CSS、および PHP が必ず上位を確保することでしょう。 SQL についても、データベースを必要としないアプリはほとんどないため、常に存在し続けると考えられます。 C++ についてもランキングから近々外れるようなことはありません。多くの組み込みアプリケーションで使用されており、信頼の高い言語となっています。 一方、C# はその安定した地位が揺るぎ始めているように見えます。Java と C# は機能性において非常に似通っていることから、おそらく Java の利用率が高まれば、C# が低下するということなのでしょう。 プロ開発の分野で Java が非常に高まっている理由としては、ドイツについて言及した内容に通じるものがあります。 ほとんどのエンタープライズビジネスサービスは Java によって頼っています。 これは IT 部門に限られたことではありません。物流部門、製造部門、あるいは金融部門など、ほぼすべての企業ではインフラストラクチャの一環として IT サービスを設置しており、給与払いや在庫管理などのサービスのバックエンドは Java で構築されていることが通例です。 そのため、こういった企業で勤務するプロ開発者の多くが Java を使用しています。
Java で開発されるソフトウェアの種類
Java で開発されたソフトウェアの種類をざっと見るだけで、使用方法に関する統計情報が明らかになります。 2020 年開発者エコシステムの現状の結果によると、Java が使用されている分野で最も高い数値を見せたのは、52% のウェブサービスです。
専門家の分析
ビジネスインテリジェンス / データサイエンス / 機械学習の分野は Python の領域だと思われがちなので、この分野で Java が強い勢力を見せていることには驚きました。 ほかの結果はそれほど驚くことではありません。ウェブサービスのバックエンドは Java であることが多く、そのバックエンドやデータベースと連携する必要のあるビジネスアプリケーションでも Java が使用されることは当然です。
Java を使用する業界ランキング
Java が多くのプロ開発者の間で使用されている理由が分かったところで、Java が使用されている業界を具体的に見てみましょう。
2020 年開発者エコシステムアンケートによると、Java プログラマーは主に IT サービス(42%)と金融およびフィンテック(44%)に従事していますが、ほかの業界で Java が使用されていないということではありません。
専門家の分析
金融およびフィンテック部門は、金融取引、リテールバンキングシステム、計算エンジンの構築、および自社製ツールとサービスの開発を中心に、市場における企業の優位性を確立することに注目しています。 金融とフィンテック業界はほぼ Java で確立しているため、驚くような結果ではありません。 非 IT 企業の多くの給与システムや在庫管理サービスも Java で構築されているため、IT サービスについても同様です。 ほかの業界については興味深い結果が出ています。 モバイル開発が高い割合を見せているのはおそらく Android に要因があり、つまり Java が利用されている理由です。 ビッグデータおよびデータアナリシスに関しては Python 主体の業界であるにもかかわらず非常に興味深い結果となっています。バックエンドで Java および JVM 言語がいくらか使用されているのでしょう。 ソフトウェア開発ツールも当然の結果です。 JetBrains IDE の構築には現在、Java が使用されています。 その他の業界は多少不可解であるため、こういった業界でどのように Java が使用されているのかを知ることができれば非常に興味深い結果を得られるのではないでしょうか。
Java ツール
Java のバージョン
Java 8 は相変わらず最も利用されているバージョンです。 Java を主な言語として使用するプロ開発者の 75% が Java 8 を使用しています。 以下のグラフでは、2020 年開発者エコシステムアンケートで開発者が複数の回答を選択した場合の、Java バージョンの配布数を示しています。
専門家の分析
Java 8 が多く利用されている理由を示す要因がいくつかあります。 まず、Java 8 には典型的な Java 開発者が言語に求めるものがすべて備わっており、ラムダとストリームを使用できます。全体的に使いやすいバージョンでもあります。 また、Java 9 への移行に大きな不安を抱えていることも要因と言えます。 Java 9 ではアーキテクチャが大きく変更されており、それによって Java 8 で構築したアプリケーションが機能しなくなってしまうことを恐れているのです。 さらに、Oracle が 2 年周期のリリース方式を導入したことで、長期間のサポートが得られないリリースが出てきました。これにより、Java 9、Java 10、Java 12、Java 13 のサポート期間はわずか 6 か月となったため、これらのバージョンのユーザー数が非常にわずかとなっているのでしょう。 Java 13 に人気が見られるのは、このアンケートが公開された時点で最新バージョンであったためです。したがって、数か月以内には減少することが予測されます。
長期間サポートされているバージョンの中では、2018 年に公開された Java 11 が最新のバージョンとなりますが、 多くのエンタープライズが依然として移行を足踏みしています。Java 9(アーキテクチャの変更)を飛び越えて移行すればすべて機能しなくなるのではないかと不安に思っているだけでなく、Java 11 で導入された新しいライセンスとサブスクリプション体系により、誤ったバージョンを誤った方法で使用すれば Oracle から罰金が科されるのではないかという恐怖感もあるためです。 また、魅力的な新機能がそれほどなく、言語の持つ能力によってアップグレードに伴うリスクが緩和されていないことも、Java 11 への更新を行わない Java 開発者が多い大きな要因です。 次期バージョンの Java 17 では長期サポートと新機能の大量追加が予定されていますが、Java 8 から Java 17 に直接バージョンアップすることにも問題が生じるでしょう。
私見として、次の長期バージョンとなる Java 17 は、前回の LTS(長期サポートリリース)の Java 11 よりも利用者が増え得ると思われます。 いずれにせよ、大きな問題を避けるためには、Java 17 への準備として、まずコードベースを Java 11 に更新した上で Java 17 に移行することを、これ以上強調できないほど強くお勧めします。
人気の高いアプリケーションサーバー
過去 3 年において、Apache Tomcat は人気アプリケーションサーバーのトップを維持してきました。一方、JBoss EAP と WildFly の使用は半分以下に落ちています。 このデータは、2018 年と 2020 年の開発者エコシステムアンケートにご協力いただいた、Java をプライマリ言語として使用するすべての開発者から得たものです。
専門家の分析
Jetty が 2 位に上がりましたが、驚くほど低い数字のようです。 Spring Boot とほかのマイクロサービスフレームワークを使用している一部の開発者が、内部的に何を使用しているのか分かっておらず、Tomcat か Jetty を使用していることに気づいてないのかもしれません。
ウェブフレームワークのランキング
2018 年には Spring MVC と肩を並べていた Spring Boot は、2020 年 には優勢となっています。 このデータは、Java を主な言語として使用するすべての開発者から得たものです。
専門家の分析
これは、Spring が市場を掌握していることの確証にすぎません。 以前として Struts 1 を使用しているユーザーがいますが、おそらくレガシーアプリケーションを維持するために使用しているのでしょう。
JVM プロファイラーのランキング
2020 年開発者エコシステムの現状アンケート調査では、24% のユーザーが VisualVM を使用している一方で、半数が何も使用していないと答えました。 このデータは、Java を主な言語として使用するすべての開発者から得たものです。
IDE/エディターのランキング
IntelliJ IDEA は、2018 年の 55% から 2020 年の 72% にそのシェアを伸ばしましたが、ほか 4 製品の利用状況は減少しています。これは、2018 年と2020 年の開発者エコシステムアンケート調査から得たデータです。
専門家の分析
JetBrains の開発者エコシステムの現状調査から得たデータであり、JetBrains の主力製品の 1 つが IntelliJ IDEA であることから、調査結果に重みづけをしてはいるものの、情報に多少の歪みがある感を拭えませんが、 まったく合理的な結果ではないということではありません。第三者のアンケート調査を見ても、IntelliJ IDEA が最も使用されている IDE であり、約 55~60% のユーザーシェアを保有していることが通例であるからです。 一方で、VS Code が伸びており、これには多少の懸念を感じます。この懸念は競合他社の観点からではなく、(IntelliJ IDEA だけではなく他も含めた)IDE が提供する価値に対する理解が明らかに欠けていると考えられるためです。 (私たちの理解では)VS Code は IDE に見られるいくつかの機能や追加機能を適用する拡張機能が備わったコードエディターです。そのため、開発ツールとして VS Code に目を向けるユーザーが増えているのであれば、開発者はフル装備の IDE が提供する価値に気づいていないことを暗示している可能性があると感じています。 ウェブ開発をするデベロッパーは通常、動的プログラミング言語を使用しており、ブラウザープラグインなどの他のツールを使用していることが多いため、エディターを使用することは理解できます。 しかし Java、特にプロ仕様の Java ともなれば、IDE の利用により、アプリケーションサーバーと統合する便利なツールの機能を活用でき、コード解析やリファクタリングなどあらゆる高度な機能を活用することができます。
専門家による上記コメントに関するアップデート
私が行ったデータ分析は、このブログ記事向けに要約・編集されています。本記事の一部をご覧になった方の間で、私の意図とは裏腹に混乱を生じているようですので、 開発者と IDE に関する私のコメントの意図を明らかにしたいと思います。 個人的に、IntelliJ IDEA がフル装備の IDE として提供する価値を開発者が理解していないのであれば、これは私たちの問題であると考えています。6 年間、IDE(特に IntelliJ IDEA)が実現できることを開発者に伝えるということを私の仕事としてきたからです。 製品を理解できないことについて、ユーザー、あるいは将来的にユーザーとなる方の所為にすることは、決して受け入れられないことだと思っています。
Java 開発者向けの IDE に対する私見は、私自身が 20 年以上もの間 Java 開発者として大なり小なり、Java 運用プロジェクトに従事してきたことに由来します。 私自身、IntelliJ IDEA のような IDE による膨大な支援なしに、複雑なエンタープライズアプリケーションを制作することは考えられません。 また、VS Code を使用する多くの開発者も見てきましたし、コードエディターが十分に対応できるユースケースがあることも十分に理解しています。 ユーザーが使用するツールは、必ずしも1つとは限らず、ツールの機能の特長を理解することで、適切な仕事に適切なツールを選択することが重要であると考えます。
最も言及される Java ツールとその他の言語
Java のディスカッションの場は IT コミュニティであり、その 1 つは Stack Overflow です。 「java」が最も使用されるタグを調べるために、Q&A のセクションからデータを収集しました。 縦軸は Java のメンションの数を示し、横軸はタグの合計発生回数を示します。
専門家の分析
このチャートは、適切なテクノロジーを使用していることを確認したいユーザー、または適切なツールを確認したいと考えているユーザーに有用かもしれません。 言語については興味深いものがありますが、ユーザーは Java とほかの言語との比較を検索しているわけですから、おそらくこうなっているのでしょう。 正規表現はユーザーが奮闘しているある種の特定分野のようですが、リストに含まれていても驚くことではありません。
Java コミュニティの注目のトピック
Java 関連ディスカッション
“java” subredditの投稿を分析し、Java ユーザーが Reddit で最も多く議論しているトピックを見つけ出しました。
専門家の分析
これらは私が見たいと思っていたトピックです。 たとえば、Java でコーディングするユーザーは必ず、その言語の需要がまだあるのかということに関心を持つでしょうし、結局のところ、そのトピックへの関心も少しずつ上がってきています。 Java は 25 周年を迎えたばかりであるため、Java が時代遅れやレガシーと化していないこと、そして依然として有効であることを確認したいのでしょう。 特に、大学をもうすぐ卒業する方がそれまでに学習した言語によって就職の機会を得られるかどうか、というところが気になるところです。 Java をコンテナにデプロイする方法というのも非常に注目を集めている話題です。これは、私を含め、皆が知りたがるトピックではありますが、ほとんど情報と呼べるものはありません。 パフォーマンス最適化についても当然のトピックと思っています。現実的に言って、ほとんどのアプリケーションは開発者が最適化を行うものではないため、この話題は多少冗長しているように感じますが、非常の多くの開発者は、重要なキャリアスキルと考えています。 バックエンドとフロントエンドをうまく連携させることは非常に複雑であるたえ、これに関する質問が多数上がっていてるのではないかと想像できます。