カテゴリー
[Deno事始め] Denoでコマンドラインから動く対話型アプリケーションを作成する
※ 当ページには【広告/PR】を含む場合があります。
2020/10/30
準備編
$ curl -fsSL https://deno.land/x/install/install.sh | sh
$ deno --version
deno 1.4.6
v8 8.7.220.3
typescript 4.0.3
$ deno run https://deno.land/std/examples/welcome.ts
Download https://deno.land/std/examples/welcome.ts
Warning Implicitly using latest version (0.75.0) for https://deno.land/std/examples/welcome.ts
Download https://deno.land/std@0.75.0/examples/welcome.ts
Check https://deno.land/std@0.75.0/examples/welcome.ts
Welcome to Deno 🦕
DENO_DIR
$ deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
コードの実装
main.ts
import { readLines } from "https://deno.land/std/io/mod.ts";
async function main() {
for await (const line of readLines(Deno.stdin)) {
console.log(">", line);
if (/quit/.test(line)) {
console.log("Bye!");
return true;
}
}
}
console.log("Type 'quit' when you want to close the app.");
console.log("Reading line from stdin:");
await main();
$ deno run main.ts
Type 'quit' when you want to close the app.
Reading line from stdin:
hoge #👈hogeを入力
> hoge
fuga #👈fugaを入力
> fuga
piyo #👈piyoを入力
> piyo
quit #👈quitを入力
> quit
Bye!
deno run <ソースコード>
quit
for await
return
for await ~ of
Promise.all()
質問内容をjsonで抽出する
deno-prompt
main.ts
import Prompt from "https://deno.land/x/prompt/mod.ts";
import PromptError from "https://deno.land/x/prompt/src/errors/PromptError.ts";
const answers = await Prompt.prompts([
{ type: "text", name: "name", message: "Please input your name" },
{
type: "text",
name: "sex",
message: "Please input your sex(male or female)",
validate(result: string) {
if (!["male", "female"].includes(result)) {
throw new PromptError("input must be [male] or [female]");
}
},
},
{ type: "number", name: "birthYear", min: 1900 },
{ type: "number", name: "age", min: 1, max: 100 },
{ type: "confirm", name: "agree", defaultValue: true },
]);
console.log(answers);
$ deno run main.ts
? Please input your name: Hoge Piyo
? Please input your sex(male or female): male
? BirthYear (>=1900): 1999
? Age (1-100): 21
? Agree (Y/n): true
{ name: "Hoge Piyo", sex: "male", birthYear: 1999, age: 21, agree: true }
まとめ
package.json
node_modules
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー