コマンドでideone.comにソースを送信・実行
普段あまり使わない言語で書かれたコードをちょっと実行してみたい、あるいは、実行環境を持っていない人にもコードや実行結果を共有したい、といったとき、Web上で60以上の言語処理系を試せるideone.comが便利です。
一方、手元でコードを書いている場合など、Web上にコードをコピペするのではなく、ファイルを送信できたらと思うことがあります。そんなときのために、ideone.comにはAPIが用意されています(APIリファレンス)。月1000回まで無料(※現在は合計で5000回まで無料になった模様)で利用可能です。個人で上記のような目的で使う場合にはまず超えない量です。
このAPIを使って、ファイルを指定するとそれをideone.comに送信し、実行結果を取得するコマンドを作ってみました。なお、ファイルの送信時にはプライベートモードで送信しますので、URLを知らない他人には閲覧できません。
コード
以下のPerlスクリプトをideoneという名前でパスの通った場所に配置し、実行権限を付与して使います。
実行前に、ideoneにユーザ登録をし、ユーザ名・パスワードをソースファイル中に記入する必要があります。(※)
また、SOAP::Liteを使っていますので、無い場合はcpan等でインストールが必要です。
https://gist.github.com/NeoCat/11020320
使い方
ideone <言語名> <ソースファイル> [<stdinに与えるファイル>]
です。言語名は、ideone listを実行すると出てくる一覧から選んで指定します。最初の単語(C++とかrubyとか)やコンパイラ名(spidermonkeyとか)だけでOKです。ソースやstdinのファイル名の代わりに「-」を指定すると、標準入力からソースやstdinに与える内容を読み取らせることができます。
使用例
stdinから読み取った数値を足し算するrubyスクリプト「add.rb」を、実行時に数値を入力して動かしてみた例。
なお、出力はoutput部分のみがstdoutに出され、それ以外の表示は全てstderrに出ているので、「2>/dev/null」 等を追加すれば実際のソースからの出力だけが表示されます。
% ideone.pl ruby add.rb - Language: Ruby (ruby-1.9.3) reading from stdin: 123 ← 実行時に入力 456 ← 実行時に入力、最後にctrl-Dで入力終了 done! [15: success] --- output --- 579 ←この部分だけがstdoutに出ている(他はstderr) --- stderr --- --- cmpinfo ---
ソースを標準入力から与えることもできます。*1
% ideone.pl C - Language: C (gcc-4.8.1) reading from stdin: main() { ← 実行時に入力 puts("Hello, World"); ← } ← 入力後に ctrl-D done! [12: runtime error] --- output --- Hello, world! --- stderr --- --- cmpinfo ---
*1:return 0; しなかったので runtime errorが出てしまいました。