Upgrade to Pro — share decks privately, control downloads, hide ads and more …

フロントエンドエンジニアがCLIを開発した話 〜TSの旨味ソースがけ〜

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

フロントエンドエンジニアがCLIを開発した話 〜TSの旨味ソースがけ〜

Avatar for MIERUNE

MIERUNE PRO

May 12, 2024
Tweet

More Decks by MIERUNE

Other Decks in Technology

Transcript

  1. ©Project PLATEAU / MLIT Japan 須田 峻宗 自己紹介 SUDA Takamune

    GWの戦歴は  海釣り: 3日  トラウト釣り: 2日  登山: 1日 GISエンジニア(フロントエンド)
  2. ©Project PLATEAU / MLIT Japan CLI(Command Line Interface): キーボード等からの文字列を入力とし、文字列が表示される ウィンドウや古くはラインプリンタで印字される文字などを

    出力とする、ユーザインタフェースの様式である。 wikipediaより ↔ GUI(Graphical User Interface) CLIとは CLIについて ←なんの温かみもない   こういう画面
  3. ©Project PLATEAU / MLIT Japan 目的 CLIについて 例えば、Linuxコマンド・AWS CLI・GitHub CLI

    基本的にGUIでも操作ができるが、シェルコマンドで操作できると - コマンド(処理)の再現ができる - アプリケーションレベルのスイッチングコストが減る - インターフェイスがキーボードに統一され入力・操作コスト↓ - より複雑な機能が使える
  4. ©Project PLATEAU / MLIT Japan ライブラリ CLI開発してみる ライブラリ commander.js :

    直感的で自由度の高いサブコマンド・オプション(直接型)の設定 説明・バージョンを設定しておくと 「-h --help」「-v --version」のよく使われるサブコマンドも 勝手にサポートしてくれる。 他ライブラリ: CLI・meowなど inquirer.js : オプション(対話型)の組み込み
  5. ©Project PLATEAU / MLIT Japan サンプル CLI開発してみる MIERUNE(ミエルネ)は一部固定席を除きフリーアドレスに しかし社員数に対して自由席の数が ギリギリであるため

    座席予約サイト 『SUWARUNE(スワルネ)』 が運用されている。 →やっぱりエンジニアならCLIで予約 したいっすよね(?)
  6. ©Project PLATEAU / MLIT Japan SUWARUNE CLI CLI開発してみる 機能 1.

    新規予約 2. 予約状況取得 3. 予約変更 4. 予約キャンセル
  7. ©Project PLATEAU / MLIT Japan 新規予約 CLI開発してみる 予約時にAPIに渡すパラメータ 1. 日付(デフォルトで当日)

    2. 座席番号 3. 名前 program .command('reserve') .description('Make a reservation') .option('-d, --date <date>', 'Enter date in yyyymmdd format') .option('-s, --seat <seat>', 'Enter seat number', parseInt) .option('-n, --name <name>', 'Enter your name') .action(async (options) => { // 予約するコード(APIなど)  } サブコマンドの説明・オプション(直接型)の記述 (キー,格納する変数,説明)はこれだけ
  8. ©Project PLATEAU / MLIT Japan 新規予約 CLI開発してみる オプション(対話型) const questions:

    any[] = []; if (!name) { questions.push({ type: 'input', // テキスト入力で name: 'name', // オプションの名前 message: 'Enter your name (up to 12 characters):', // 入力を促すメッセージ validate: input => input.length <= 12 ? true : 'up to 12 characters long.' }); // 入力値チェック&エラーメッセージ } const answers = await prompt(questions);
  9. ©Project PLATEAU / MLIT Japan 予約状況取得 CLI開発してみる 予約状況取得時にAPIに渡すパラメータ 1. 日付(デフォルトで当日)

    program .command('map') .option('-d, --date <date>', 'Enter date in yyyymmdd format') .action(async (options) => { // dateがundefinedなら当日の日付で補完 // 取得するコード(APIなど)  }
  10. ©Project PLATEAU / MLIT Japan 予約変更 CLI開発してみる 新規予約→すでに同日同席に予約入っているか確認 →入っていたら、横取り上書き(変更)するか確認 questions.push({

    type: 'confirm', // true or false name: 'force', message: `Already reserved by ${currentReservedUser}. Steal a seat?:`, }); true: UPDATE API実行 false: 終了
  11. ©Project PLATEAU / MLIT Japan 予約キャンセル CLI開発してみる 予約時にAPIに渡すパラメータ 1. 日付(デフォルトで当日)

    2. 座席番号 program .command('cancel') .description('Cancel a reservation') .option('-d, --date <date>', 'Enter date in yyyymmdd format') .option('-s, --seat <seat>', 'Enter seat number', parseInt) .action(async (options) => { // キャンセルするコード(APIなど)  } サブコマンドの説明・オプション(直接型)の記述 (キー,格納する変数,説明)はこれだけ
  12. ©Project PLATEAU / MLIT Japan 勧める理由 「理想的なUI」とは 1. 正しく使用する方が操作ミスをするより簡単 2.

    誤った使い方をすることが困難 『プログラマが知るべき97のこと』Kevlin Henney著 →デフォルト設定で一番いい感じに 迷わない・迷わせない
  13. ©Project PLATEAU / MLIT Japan 勧める理由 UIを設計・実装する上で 『UX/UI』U-site ビジュアルデザインが最低限しか 設定できない・見た目で誤魔化せない

    より本質的な設計をすることが求められる。 例: 応答性・効率性・明瞭性・アクセシビリティ  →そもそもの戦略・要件を詰める必要性