Qiitaは日本最大のプログラミング学習プラットフォーム

![Dream_TradingCard.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111223/fa28ed40-ca6d-bb29-1f90-1fd03f267d00.jpeg "qiita is a powerful programming educational platform")

## はじめに
　Qiita初投稿になります！
　
## 背景
　[タグ一覧](https://qiita.com/tags "タグ一覧")を見て、ここまで網羅されているとは！と驚きました。
　入門・解説記事も多く、無料の日本最大のプログラミング学習プラットフォームになっています。
　Qiita APIで分析してみました。

## 方法
1. ジャンルごとに記事(レッスン)がどれだけあるのかを調べる
2. 投稿者の数を調べる *閲覧数1000回以上(先生とみなしています)

　当初は、この方針で進めましたが、実装で取得できない項目がありました。※ソースコードの2.から3.へ変更しました。

## ソースコード
1. ジャンル(タグ)取得
    - GET /api/v2/tags?page=1&per_page=100&sort=count
2. 投稿者数取得
    - GET /api/v2/users
       - 取得件数1万件との制約があること、実際に投稿数0件のユーザが大半のため、記事(ite ms)から取得するように方針変更
3. 閲覧数1000以上の投稿者数取得
    - GET /api/v2/item?page=1&per_page=100&query=page:>1000

```js
const axios = require('axios');
const {createObjectCsvWriter} = require('csv-writer');
const tagCsvfilepath =  __dirname+'/tags.csv'
const userCsvfilepath =  __dirname+'/users.csv'
const _sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function main() {
    /*********************
     * 1.ジャンル(タグ)取得
     *********************/

    // CSV出力設定：ヘッダあり、"TAG,ITEMS_COUNT"
    const tagCsvWriter = createObjectCsvWriter({
        path: tagCsvfilepath,
        header: [
            {id: 'id', title: 'TAG'},
            {id: 'items_count', title: 'ITEMS_COUNT'},
        ],
        encoding:'utf8',
        append :false,
    });
    // 1.ジャンル(タグ)取得
    let tags_records = [];
    for (var i=1; i <= 100; i++) {
        let response = await axios.get('https://qiita.com/api/v2/tags?page=' + i + '&per_page=100&sort=count', {
            headers: {
                Authorization: `Bearer ${token}`,
            }
        });
        if(response.data != null){
            response.data.forEach(function( value ) {
                if(value.items_count > 100) {
                    tags_records.push({'id':value.id, 'items_count':value.items_count});
                }
            });
            await _sleep(1000);
        }

    }
    // CSV出力
    tagCsvWriter.writeRecords(tags_records)
        .then(() => {
            console.log('...Done[' + tagCsvfilepath + ']');
        });

    /*****************************
     * 2.閲覧数100以上の投稿者数取得
     *****************************/

    // CSV出力設定：ヘッダあり、"ID,PAGE_VIEW_COUNT,CREATED_AT"
    const userCsvWriter = createObjectCsvWriter({
        path: userCsvfilepath,
        header: [
            {id: 'id', title: 'ID'},
            {id: 'likes_count', title: 'LIKES_COUNT'},
            {id: 'created_at', title: 'CREATED_AT'},
            {id: 'url', title: 'URL'},
        ],
        encoding:'utf8',
        append :false,
    });
    // 3.閲覧数1000以上の投稿者数取得
    let users_records = [];
    for (var i=1; i <= 100; i++) {
        `rgb(255,0,0)`let response = await axios.get('https://qiita.com//api/v2/items?page=' + i + '&per_page=100&query=page:>1000', {
                headers: {
                Authorization: `Bearer ${token}`,
            }
        });
        if(response.data != null){
            response.data.forEach(function( value ) {
                // 注 page_views_count は null で返ってくる
                users_records.push({'id':value.user.id, 'likes_count':value.likes_count, 'created_at':value.created_at, 'url':value.url});
            });
            await _sleep(1000);
        }

    }
    // CSV出力
    userCsvWriter.writeRecords(users_records)
        .then(() => {
            console.log('...Done[' + userCsvfilepath + ']');
        });

```
|  タグ(ジャンル)  |  投稿数(レッスン)  |
| ---- | ---- |
|Python|62449|
|JavaScript|46943|
|Ruby|36730|
|Rails|34942|
|AWS|30207|
|PHP|25634|
|初心者|21615|
|Docker|20960|
|Java|19651|

## 結果と考察
　閲覧数1000件以上の投稿者(先生)の数 2000名程 と 100件以上の投稿(レッスン)があるジャンルの数 2000件強 から、
　日本最大といってよいボリュームだと思いました。python だと 62449 件投稿があります。

　 [Qiita10周年記念](https://qiita.com/qiita10th "Qiita10周年記念")では、ユーザー70万人です。
　最初は、API (users) で検討していましたが、制約・スキーマから、API (items) から
　閲覧数100件以上の投稿者を取得するように方針変更しました。
　*[【QiitaAPI】自分以外のユーザーの記事のPV数(page_views_count)が取得出来ない](https://qiita.com/mah666hhh/items/8013c2812229eda28447 "【QiitaAPI】自分以外のユーザーの記事のPV数(page_views_count)が取得出来ない")

## 結論
　投稿者(先生)も続々増えています、プログラミング学習プラットフォームとして発展しています。
　無料で学習できる優れたプログラミング学習プラットフォームで、一般社会人のリスキリングに、
　多大な寄与をしていると思います。
　「これ、どうするんだっけ？」と検索すると、すぐにQiitaで見つかるという具合です。
　また、さらなる、学び合いも起こっています。

## 感想
　一般社会人リスキリングについて考えてみました。
　ガイドとして、コースタグをつければ、取り組みやすいと思いました。
　たとえば、タグ名に”Javascript本格入門” "新人プログラマ応援" "入門" なんてありましたよ。
　
## 参考にした記事
1. [Qiita10周年記念](https://qiita.com/qiita10th)
2. [【QiitaAPI】自分以外のユーザーの記事のPV数(page_views_count)が取得出来ない](https://qiita.com/mah666hhh/items/8013c2812229eda28447)