N予備校 プログラミングコース 第23回
あなたは2019年の目標って立てましたか?
どんな目標を立てたか覚えていますか?
私は2018年末に2019年の目標を立てました。
その一つにプログラミングを学び仕事として使えるようにすることをあげました。
そして、思い立ったが吉日と「N予備校のプログラミングコース」を申し込みました。
そして受講と同時に自身の振替と、これから始めようと考えている人の参考になればとブログを書き始めました。
今回ブログの移設にともない、再度そのブログを読み返しながら、今思うことを加えて記載していきたいと思います。
また私が受講したのは【2018年度】で、現在公開されている【2019年度】との違いについても書いていきたいと思います。
このブログは、初心者が学びながら書いているため、間違っている場合があります。
分かり次第修正していくつもりです。
そのあたりも含め楽しんでいただければと思います。
最後に進めていてわからなかったところや気になったところをまとめています。
プログラミング入門 webアプリコース 第23回
作成したボットを再起動する度に情報が失われないようにする際に必要な、同期I/Oと非同期I/Oについて学びました。
今回再起動しても情報が保持されるプログラムを作成していきます。
- 今回の内容まとめ(第3章 10)
・情報を永続化するプログラムの作成
-
今回の目標
ファイルの読み込みと書き込み機能を利用して、再起動後にも情報が保存されるプログラムを作成する。
- 今回新しく扱っているコマンド等
・JSON
・try-catch文
情報の永続化プログラム作成
情報を永続化する機能には、ファイルの書き込みと読み込みの機能が必要になります。
今回ファイルの書き込みと読み込み機能を実装するのに使うのがJSONとtry-catch文です。
JSON
先ほどのコードの中に出てきたJSONとは、JavaScript Object Notationの略です。
JSONは、JavaScriptのオブジェクトと同じ記法で書かれたテキスト情報です。
try-catch文
try-catch文を使用することで、tryのあとの{ }で囲まれた処理でエラーが発生した場合に、catch( )のあとの{ }で囲まれた処理を実行することが出来るようになります。
try-catch文には、エラーが発生しても発生しなくても必ず実行される処理を追加することが出来ます。それをfinally句と言います、
finally句
エラーが発生してもしなくても必ず実行される処理
try {
//tryの処理
} catch (ignore) {
//catchの処理
}finally{
//finallyの処理
}
上記で、tryの処理とcatchの処理でエラーが発生してもしなくても、finallyの処理は必ず実行されるようになります。
このErrorとtry-catch文を使った処理のことを例外処理といいます。
ファイルの書き込み機能
情報を保持するためのプログラムを実装します。具体的には、情報をファイルと書き出して保存します。
const fs =require(‘fs’);
const fileName = ‘○○’;
function saveTasks() {
fs.writeFileSync(filename, JSON.stringify(Array.from(tasks)), ‘utf8’);
}
1行目で、ファイルシステムのモジュールを読み込み
2行目で、保存するファイルのファイル名を設定し、それを定数fileNameとしています。○○には、保存するファイルの場所とファイル名を指定します。
3~5行目で、saveTasksはファイルに保存する関数を設定しています。
その中身が、tasksという配列をArray.fromで配列に変換した後、JSON.stringify関数でJSONの文字列に変換しています。さらに、それをfilenameで指定したファイルに書き出します。
上記のプログラムで、情報を保存することができるので、再起動しても情報が保持されます。
ファイルの読み込み機能
ファイルの書き込みにより再起動前の情報を保存できるようになりました。
続いて、保存したファイルを読み込む機能を作成します。
ファイルを読み込むことで、再起動後にも情報が保持されるようになります。
ここで使うのが、先ほどのtry-catch文です。
try {
const data = fs.readFileSync(fileName, ‘urf8’);
tasks = new Map(JSON.parase(data));
} catch (ignore) {
console.log(fileName + ‘から復元できませんでした’);
}
1行目で、情報を保存したfileNameを指定し、readFileSyncでファイルの内容を文字列として読み込み、その文字列を定数dataと名前を付けています。
2行目で、それをJSON.parse関数でJavaScriptの値とし、それを下に連想配列のMapのオブジェクト作成しています。その連想配列の名前をtasksとしています。
4-5行目で、先ほどのfileNameの読み出しがうまく行かない時には、「fileNameから復元できませんでした」と表示するように設定しています。
上記のようにプログラムを実装することで、ボットを再起動しても情報が保持されるようになります。
今回記載したように、Slackで動作させるボットプログラムを作成し、さらに同期I/Oと非同期I/Oを学んだ上で、再起動しても情報が保持されるボットプログラムを作成しました。