コマンドで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

※2015/1/9追記

現在ideone APIを利用するためには、ideoneのユーザパスワードとは別に、API passwordを登録する必要があります。
http://ideone.com/sphere-engine のページから、Pay-As-You-Goを選択してAPI利用登録を行うことで、1000回まで無料で利用できます。
なお、API登録ページにパスワード設定欄がありますが、うまく反映されないようです。登録後、my account → settings に API passwordを変更するためのフィールドが追加されますので、ここで一度変更を行えばAPIの利用が可能となります。

使い方

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が出てしまいました。