こんにちは。
composerで提供されているコマンドの中身を見ていたら
#!/usr/bin/env php
と書かれており、そのあとの行にはPHPのコードが。
$ ./shebang-php
のように、phpコマンドを使わずに直接PHPのコードが実行出来るようになっていました
この仕組みは シバン(shebang) というらしいです
シバン自体はBashのスクリプトで似たようなものを何度も見たことがあったのですが、おまじない的に捉えており意味を深く考えていませんでした
拡張子や実行コマンドに縛られず、何の言語で書いても良い実行可能なコードを作るのに適しているのでは? ?
と疑問が湧いたので、調べて理解したものを残しておきます
冒頭でも書きましたが、#!
で始まる行のことらしいです。
各種インタプリタのパスは環境によって変わることがあるので、環境によらず汎用的に動くようにするには#!/usr/bin/env {言語名}
と書くのが一般的なようです
#!/usr/bin/env php
<?php
echo "Hello, world!\n";
#!/usr/bin/env ruby
puts "Hello, world!\n"
#!/usr/bin/env node --harmony_proxies
// Harmonyのオプションを有効にすることも出来る模様
console.log('Hello, world!')
これってコンパイル型の言語、例えばGo
でも使えるのかな?
と調べてみたところ、ゴリ押しならやれそうでした。
//usr/bin/env go run $0 $@ ; exit
単にgoコマンドを実行しているだけなので、滅茶苦茶遅いです。
GoのCLIツールは早いのが大きな魅力なのに、遅いんじゃ使い物になりません。。。
シバンは分かってしまえば簡単なんですが、なかなか覚えようと思うきっかけがないと思います
もしシバン知らない人がいらっしゃったら、シバン便利なので広めてあげて下さい