###制作物
バッチファイルを実行すると、チャットツールの使用履歴が指定期間分、テキストで取得できる。
チャットルームは必要に応じて作成し、使用しなくなれば削除する仕様です。
###開発環境
Windows10(1803)
サクラエディタ
VisualStudioCode(1.32)
(Prettierなどの拡張機能インストール済み)
Node.js(10.15.3)
requestモジュール(6.7.0)
###ソースコード
//Promiseオブジェクト生成:各関数の処理結果や状態を保持してくれる
var promise = Promise.resolve();
//requestモジュールを読み込む
//http通信を行う際に必要なモジュール
var reqM = require('request');
//Fsモジュールを読み込む
//外部ファイル操作に使用する。
var fs = require("fs");
var dataBaseIds = [];
var count = 0;
var promise = Promise.resolve();
promise = promise.then(login)
.then(cHistory)
.then(function loop(databaseIdUrl){
return new Promise(function(resolve, reject){
if(count>=dataBaseIds.length){
console.log("終了しました。");
process.on('exit', () => {
process.exit(1);
});
}
var promise2 = Promise.resolve(databaseIdUrl);
promise2 = promise2.then(setBody)
.then(call)
.then(write)
.then(function increase(completeData){
return new Promise(function(resolve2, reject){
count++;
resolve(databaseIdUrl);
})
})
})
.then(loop)
})
.catch(onRejected);
###各関数の処理内容
基本的に処理した結果をPromiseオブジェクトで返し、次の関数に引き渡す形式を取っています。
1.ログイン:login()
2.データベースID一覧取得:cHistory()
3.データベースIDごとにチャットルームの詳細情報を取得して、テキストファイルに書き込む
−3.1.オプション定義:setBody()
−3.2.WebAPIへPOST:call()
−3.3.テキストファイル書き込み:write()
###まとめと感想
作業時間としては、50h程度です。
作業開始当初は「WebAPI一覧(と機能の簡単な概略)」が唯一の頼りで、私自身ProgateでJavaScriptとjQueryを終わらせた程度の知識量しかありませんでした。WebAPIやNode.jsに知見のある方がまわりにいないので、基本一人でモクモクと作業しました。
中でも非同期処理のループは、実装に時間がかかりました。Promiseを使う前のコードはsetBodyからwriteの流れをfor文で回していました。その結果として、本来時系列順にテキストファイルへ吐き出されるはずの詳細情報が、毎回(時系列)バラバラに吐き出されるという事態に。。。そこからPromiseへ行き着き、可読性やエラー対策などを考えて、制作物を全て作り直しました。
Promiseに関しては、最初はサンプルコードに対してVSCodeのデバッグ機能やconsole.logを使って処理の流れを理解するところから始めました。応用するのにも、グローバル変数がカウンターに使えなかったり、色々苦労しました。Promise理解から全面改修が完了するまでに5h〜6hはかかりました。。。
Promiseに関しては、別記事で触れようと思います。
個人的には悩む時間の方が長いプロジェクトでしたが、結果的に実用性に足ると評価をいただく事ができたので、非常に有意義なプロジェクトでした。同時に自分の中で「プログラム楽しいな」と感じることができたプロジェクトでした。