1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Webの勉強はじめてみた その20 ~Node.js編 ライブラリの使い方~

Posted at

N予備校「プログラミング入門Webアプリ」コースを受講しています。
今回は第3章4,5節です。

ライブラリを利用する

:::note require: 必要なモジュールだけをメモリに記録する :::

CSVを読み込む

'use strict';
//FileSystem Module
const fs = require('fs');
//ReadLine Module
const readline = require('readline');
//ReadStream from CSV
const rs = fs.createReadStream('./popu-pref.csv');
//ReadLine from rs
const rl = readline.createInterface({input:rs, output:{}});
//DataMap key: 都道府県 value: 集計データのオブジェクト
const prefectureDataMap = new Map();
//line Event
// function(lineString){}
rl.on('line', lineString=>{
    //配列として取得
    const columns = lineString.split(',');
    //年
    const year = parseInt(columns[0]);
    //都道府県
    const prefecture = columns[1];
    //人口
    const popu = parseInt(columns[3]);
    //2010年 と 2015年を抽出
    if(year === 2010 || year === 2015){
        //DataMapに都道府県が存在するかチェック
        let value = prefectureDataMap.get(prefecture);
        if(!value){
            //存在しない場合、valueを初期化
            value ={
                //2010年人口
                popu10: 0, 
                //2015年人口
                popu15: 0,
                //変化率
                change: null
            };
        }
        if(year === 2010){
            value.popu10 = popu;
        }
        if(year === 2015){
            value.popu15 = popu;
        }
        //DataMap に追加
        prefectureDataMap.set(prefecture, value);        
    }
})
//close Event
rl.on('close', ()=>{
    //変化率
    for(let [key, data] of prefectureDataMap){
        data.change = data.popu15 / data.popu10;
    }
    //配列をソート 比較元(pair1)と比較先(pair2)
    const rankingArray = Array.from(prefectureDataMap).sort((pair1, pair2) =>{        
        //pair1[0], pair2[0]は都道府県(key)
        //pair1[1], pair2[1]は連想配列のオブジェクト
        //変化率を降順        
        return pair2[1].change - pair1[1].change;
    });
    const rankingStrings = rankingArray.map(([key, data], num) =>{
        let rank = num + 1;
        return `第 ${rank} 位: ${key} : ${data.popu10} => ${data.popu15} 変化率: ${data.change}`;        
    })
    console.log(rankingStrings);
})

onメソッド:関数をイベント登録する。AddHandlerみたいなもの?
parseInt: 整数値へ変換。CInt。
map: Array の要素それぞれを、与えられた関数を適用した内容に変換する。

yarn

:::note Node.jsのためのパッケージマネージャ 依存関係にあるパッケージのインストールも行ってくれる。 :::

インストール

curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.21.1

グローバルインストール: Node.js の実行環境自体に npm パッケージをインストール
ローカルインストール: 現在のディレクトリにのみインストール
他のディレクトリから利用することは出来ない。

パッケージ

``` yarn add パッケージ名 ``` npmパッケージのインストール。 ローカルのフォルダを指定してインストールできる。
yarn init

npmパッケージ化。package.jasonを作成する。

  • name : パッケージ名
  • version : バージョン
  • description : 説明
  • entry point : ライブラリとして読み込まれるJSファイル
  • repository url : Gitリポジトリに公開する際のURL
  • author : npmに登録された際の著者名
  • license : デフォルトはMITライセンス
  • private : npmパッケージを公開するかどうか

パッケージ化するスクリプト

'use strict';
function add(numbers){
    let result = 0;
    for(let num of numbers){
        result = result + num;
    }
    return result;
}
function multi(numbers){
    let result = 1;
    for(let num of numbers){
        result = result * num;
    }
    return result;
}

module.exports = {
    add, multi
};

module exports ={}
オブジェクトのプロパティとして関数を登録

まとめ

アロー関数にまだ戸惑う。 基本的には既存のライブラリを使いましょうということだけれど、そもそもフレームワークやAPIの違いってなんだろうかとふと思った。あとで調べたい。
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?