就活の面接の練習をする友達がいなかったので、自動でランダムの質問をしてくれるプログラムを作ってみた。
準備
% npm init
% npm install typescript ts-node process
tsconfig.json
に以下を追加する。
"moduleResolution": "node"
"resolveJsonModule": true
コード
ディレクトリはこんな感じ。
.
├── index.ts
├── types.ts
├── json
│ └── mensetsu.json
├── node_modules
├── package-lock.json
├── package.json
└── tsconfig.json
質問内容のデータはJSONでこんな感じに用意する。
json/mensetsu.json
{
"mensetsu": [
{
"question": "自己PR",
"answer": [
"私の強みは、学ぶことが好きであるということです。",
"自分のまだ知らないことを知りたいという知的好奇心が高く、中学や高校、医学部での座学や実習も全て面白く感じ、楽しんで自ら学んできました。",
"医学の発展は日進月歩であり、生涯学び続けることが必要な医師として働く上で、非常に大きな強みであると考えております。"
]
},
{
"question": "当院を志望した理由",
"answer": [ ... ]
},
...
]
}
中身はこんな感じ。
switch文でデータ切り替えられるので、就活終わった後も他のことに使えるかも。
index.ts
import readline from "readline"
import { Question } from "./types"
import Mensetsu from "./json/mensetsu.json"
/**
* 環境変数で扱うデータを切り替える
*/
let array: Array<Question>
const obj: string | undefined = process.env.OBJ
switch (obj) {
case 'mensetsu':
array = Mensetsu.mensetsu
}
/**
* 標準入力を取得する
*/
const question = (question: string): Promise<string> => {
const readlineInterface = readline.createInterface({
input: process.stdin,
output: process.stdout
})
return new Promise((resolve) => {
readlineInterface.question(question, (answer: string) => {
resolve(answer)
readlineInterface.close()
})
})
}
async function prompt(msg: string): Promise<string> {
const answer: string = await question(msg)
return answer.trim()
}
const main = async () => {
console.log('');
console.log('↓↓↓Enterキーを押して操作してください↓↓↓');
console.log('');
for (;;) {
const dialog = array[Math.floor(Math.random() * array.length)]
await prompt('\x1b[36mQ.'+dialog.question)
console.log('\x1b[35mA.\x1b[0m');
dialog.answer.forEach((answer: string) => {
console.log(answer);
})
console.log('')
}
}
// 起動
(async () => {
await main()
})()
types.ts
export type Question = {
question: string
answer: Array<string>
}
yarnのscriptsにコマンドを追加しておく。
package.json
"scripts": {
"start": "OBJ=mensetsu ./node_modules/.bin/ts-node index.ts"
}
実行するとこんな感じ。
% yarn start
yarn run v1.22.19
$ OBJ=mensetsu ./node_modules/.bin/ts-node index.ts
↓↓↓Enterキーを押して操作してください↓↓↓
Q.大学生活の一番思い出深いこと
A.
まとめ
ちょっとした単語帳とか作りたいなってときに使えそう。
ちなみに面接本番は準備不足で爆死。