2
2

More than 3 years have passed since last update.

Qiitaに掲載されているプログラミング言語別の記事数を調べてみた

Posted at

はじめに

今年2020年に、Qiitaでどんなプログラミング言語の記事が書かれたか、興味本位で調べてみました。
せっかく調べたので、集計結果を紹介したいと思います。

その前に、TIOBE INDEXについて

TIOBE INDEXは、プログラミング言語の人気度を独自の集計法で、毎月発表しているサイトです。
あくまで一つの目安と思っていますが、ついつい見ています。

ちなみに、TIOBE INDEXでのD言語は、20位台を行ったり来たりです。
一時的に、2020年1月前後の数か月は10位台に入っていました。:wink:
tiobe202001.jpg
ただ、2020年12月時点では20位台に戻ったという状況です。
tiobe202012-1.jpg
tiobe202012-2.jpg

参考:TIOBE INDEXでのD言語の推移

TIOBE INDEXは、その時々の人気度を集計する仕組みだからか、毎月順位が大きく変動します。
よくよく考えると、数百種類あるといわれるプログラミング言語の中で、D言語が20位台とは結構な上位ですよね。
本当のところはどうなんだろう?
また、日本と海外とでは、人気度は違うのかなと思いました。
そんなこんなで、自分でも何か調べられないかと思い、この記事に至りました。

集計方法とソースコード

TIOBE INDEXで集計しているプログラミング言語とQiita Advent Calendar 2020にエントリーされたプログラミング言語を参考にQiitaでの記事数を取得する処理をD言語で書きました。
プログラミング言語ではないと思われるものは、対象外にしました。

検索条件のtag:にプログラミング言語が含まれるもの、さらにcreated:>2020-01を加えることで、今年の記事数に絞りました。
集計結果が0件となったものは、出力対象外にしました。

qiitacount.d
import std.algorithm.sorting;
import std.conv;
import std.net.curl;
import std.stdio;
import std.string;
import std.uri;

void main()
{
    string[] language = [
        "ABAP", "ABC", "ActionScript", "Ada", "Apex", 
        "Applescript", "Assembly/アセンブラ/アセンブリ/アセンブリ言語", "AutoLISP", "Awk", 
        "Bash/Shell", "Befunge", "C", "C#", "C++", "CL", 
        "Clojure", "COBOL", "CoffeeScript", "Common-lisp/Lisp", "Crystal", 
        "Dart", "Delphi/ObjectPascal/Pascal", "Deno", "Dlang/D言語", "Elixir", 
        "Elm", "Erlang", "F#", "Factor", "Forth", 
        "Fortran", "Go", "GoogleAppsScript", "Groovy", "Hack/Hacklang/HHVM", 
        "Haskell", "IchigoJam", "Icon", "Idris", "Io", 
        "J", "Java", "JavaScript", "Julia", "Kotlin", 
        "LabVIEW", "Logo", "Lua", "MATLAB/Simulink", "Mind", 
        "ML", "MQL4", "NATURAL", "Neon", "Nim", 
        "ObjectiveC/Objective-C", "OCaml", "OpenCL", "Oz", "Perl", 
        "PHP", "PLSQL", "PowerShell", "Prolog", "Python", 
        "Q", "R", "REXX", "Ring", "RPG", 
        "Ruby", "Rust", "SAS", "Scala", "Scheme", 
        "Scratch", "Smalltalk", "Solidity", "SPARK", "SPSS", 
        "SQL", "Stan", "Stata", "Svelte", "Swift", 
        "Tcl", "Transact-SQL", "TypeScript", "Vala/Genie", "VBScript", 
        "Verilog/SystemVerilog", "VHDL", "VisualBasic/VB/VB.Net", "Vvvv", "Wenyan/文言", 
        "なでしこ", 
    ];
    int[string] counter;
    foreach ( s; language ){
        int c = getCount(s);
        if ( c > 0 ){
            counter[s] = c;
        }
    }
    writefln("|プログラミング言語|件数|");
    writefln("|:-----------------|---:|");
    foreach ( lang; counter.keys.sort!((a, b){return counter[a] > counter[b];}) ){
        writefln("|%s|%s|", lang, counter[lang]);
    }
}

int getCount(string lang)
{
    lang = lang.replace("/", " OR created:>2020-01 tag:");
    string sUrl = "https://qiita.com/search?q=created%3A>2020-01+tag%3A" ~ lang.encodeComponent;
    auto http = HTTP();
    string response = cast(string)get(sUrl, http);
    string keyword1 = `<span class="badge">`;
    string keyword2 = `</span>`;
    int ind1 = indexOf(response, keyword1);
    int ind2 = indexOf(response, keyword2, ind1);
    return ( response[(ind1 + keyword1.length) .. ind2].to!int );
}

連想配列のソート

D言語は言語仕様として、連想配列が用意されています。
ソースコードqiitacount.dで宣言しているint[string] counterが連想配列です。プログラミング言語(string型)をキーに、記事の件数(int型)をとして、集計結果をセットしています。
連想配列をソートすることができます。
キーの昇順にソートする場合と、値の昇順にソートする場合の例を紹介します。

sample.d
import std.stdio;
import std.algorithm;

void main()
{
    immutable string[string] colors = [
        "red"       : "akairo",
        "pink"      : "momoiro",
        "yellow"    : "kiiro",
        "purple"    : "murasakiiro",
        "blue"      : "aoiro"
    ];
    auto keys = colors.keys;
    writeln("キー順にソート");
    keys.sort!("a < b");
    foreach ( key; keys ){
        auto value = colors[key];
        writefln("%-10s=> %s", key, value);
    }
    writeln;
    writeln("値順にソート");
    keys.sort!((a, b){return colors[a] < colors[b];});
    foreach ( key; keys ){
        auto value = colors[key];
        writefln("%-10s=> %s", key, value);
    }
}
実行結果
キー順にソート
blue      => aoiro
pink      => momoiro
purple    => murasakiiro
red       => akairo
yellow    => kiiro

値順にソート
red       => akairo
blue      => aoiro
yellow    => kiiro
pink      => momoiro
purple    => murasakiiro

集計結果

qiitacount.dの実行結果(2020/12/26 20:10頃実行)は、Markdownなので、そのまま貼り付けます。2020年はあと数日ありますが、傾向はつかめるかと思います。
私自身、プログラミング言語の種類には詳しくないです。ということもあって、プログラミング言語のタグが複数に分かれているとせっかくの記事が見つけられずにもったいないなと感じました。(VB.Netとか、アセンブラとか。他にも取りこぼしがありそう)
D言語では、dlangD言語DlanguageDd_langのタグが使われていましたが、最近の記事はdlangD言語のいずれかのタグが付いているようです。
改めてQiitaにはいろんな記事が書かれているんだなと、ただただ感心しました。世の中は広いです。

プログラミング言語 件数
Python 14926
JavaScript 9475
Ruby 7398
PHP 4433
Java 3562
Swift 3048
C# 2429
TypeScript 2414
Go 2009
C++ 1774
Kotlin 1310
SQL 1199
Bash/Shell 956
Rust 899
GoogleAppsScript 863
R 776
C 634
PowerShell 626
Dart 583
Elixir 408
MATLAB/Simulink 306
Scala 276
Julia 251
Haskell 193
Perl 174
Deno 156
ObjectiveC/Objective-C 133
VisualBasic/VB/VB.Net 133
SPARK 108
Apex 103
Elm 95
VBScript 93
Svelte 90
Delphi/ObjectPascal/Pascal 89
Assembly/アセンブラ/アセンブリ/アセンブリ言語 85
Fortran 84
Nim 75
Common-lisp/Lisp 74
ABC 69
Awk 64
F# 62
Verilog/SystemVerilog 61
Solidity 58
Lua 56
Scratch 54
Dlang/D言語 54
Applescript 50
なでしこ 49
Prolog 45
SAS 41
PLSQL 41
Scheme 41
SPSS 39
Erlang 36
Groovy 35
OCaml 33
Mind 32
Neon 30
COBOL 30
Stan 29
Clojure 27
ABAP 26
AutoLISP 26
VHDL 23
ML 22
J 20
OpenCL 19
MQL4 15
Tcl 14
Wenyan/文言 14
IchigoJam 13
Hack/Hacklang/HHVM 12
RPG 12
Icon 11
ActionScript 10
Crystal 10
CL 9
Vala/Genie 9
CoffeeScript 9
Forth 8
Smalltalk 8
Transact-SQL 5
Befunge 5
Io 5
LabVIEW 4
Idris 3
Logo 2
Q 2
Vvvv 1
Stata 1
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2