rails-promptについて

September 18, 2021

最近のRailsにはrails new APP_PATH --minimalというコマンドが追加されました。

この--minimalというフラグ自体は便利なのですが、例えば--minimalだけどActiveStorageは使いたいという前回の投稿のようなものを作りたい場合はrails new APP_PATH --minimal --no-skip-active-storageというような組み合わせはうまく動作しません。

Something similar to eslint --init ?

もともとは簡単なシェルスクリプトを書く予定だったのですが、Interactive “rails new”のスレッドにあったESLintのような対話型のコマンドのこと?というコメントを見て面白そうだなと思いました。

https://github.com/eslint/eslint/blob/a79c9f35d665c2bcc63267bdf359a8176e0a84ce/lib/init/config-initializer.js#L16

確かにESLintのようなコマンドはどうやって実現しているのだろうと興味を持ったので、調べてみたのですがちょうどEnquirerというライブラリが使われていました。

const { prompt } = require('enquirer');

const response = await prompt({
  type: 'input',
  name: 'username',
  message: 'What is your username?'
});

console.log(response); // { username: 'nzwsch' }

質問形式をオブジェクトを渡せばいいだけなので簡単そうです。 複数の質問は配列で渡せばよいのでそこまで悩むこともありませんでした。

https://github.com/nzwsch/rails-prompt

このコード量なのでわざわざGitHubにプッシュしなくても良かった気もしますが、今後も使うことを考えるとやっぱり用意しておいてもよかったかなと思います。


Profile picture

Personal blog by Seiichi Yonezawa.