いろんな言語をCLI引数でちょこっと実行する

CLIの引数でコードを実行

php コマンドには便利な引数があって、 php -r '何かしらのPHP処理' とシェルから実行すると、その引数に渡したコードの文字列がPHPコードとして実行される。 インタラクティブシェルを起動しないでもコマンドラインからそのまま実行できて、ちょっとした真偽値のチェックや関数の動きを見たい時に大変便利である。

特にNode.jsやRubyについてはこれまでメインで使ってきたPHPと比べ、知らない書き方をすることも多いのでちょっと動かしたいことはよくある。

この記事ではPHP、Node.js、Rubyでそれぞれどう実行したら良いのかをまとめる。

PHP

マニュアルより引用

php [options] -r code [[--] args...]

例:

$ php -r 'echo "Hello world\n";'
Hello world

> php -r '$a = ["PHP", "Node.js"]; var_dump($a);'
array(2) {
  [0]=>
  string(3) "PHP"
  [1]=>
  string(7) "Node.js"
}

Node.js

マニュアルより引用

node [options] [v8-options] [-e string | script.js | -] [--] [arguments ...]

要するに、 node -e 'nodejsの処理' としてあげれば良い。

例:

$ node -e 'console.log(process.version)'
v12.13.1

$ node -e 'console.trace("Hello world")'
Trace: Hello world
    at [eval]:1:9
    at Script.runInThisContext (vm.js:116:20)
    at Object.runInThisContext (vm.js:306:38)
    at Object.<anonymous> ([eval]-wrapper:9:26)
    at Module._compile (internal/modules/cjs/loader.js:959:30)
    at evalScript (internal/process/execution.js:80:25)
    at internal/main/eval_string.js:23:3

Ruby

マニュアルより引用

 ruby [--copyright] [--version] [-SUacdlnpswvy] [-0[octal]] [-C directory] [-E external[:internal]] [-F[pattern]] [-I directory] [-K[c]] [-T[level]] [-W[level]] [-e command]

Node.jsと同じく、 -e 'Rubyの処理' で実行できる。

例:

$ ruby -e 'unless(false) then puts "Hello world" end'
Hello world

$ ruby -e 'p nil == 1'
false

Rubyは他の言語と違って別の行で then やら end やらを書くことが多いのでちょいと戸惑った。

Rails Runner

RubyRailsを使う他にも、Runner を使う方法がある。 取引先の上長の方に教えてもらった。感謝感激。

$ bundle exec rails r 'puts "Hello world"'
Hello world

さいごに

以上である。

ちょっとしたテクニックではあるが、だれかの参考になったら嬉しい。