オンラインでプログラミング
先ほどの「週末スペシャル」でも紹介したが, paiza.IO を試してみる。
コードを試すだけならアカウントはいらないが,コードを再利用したり他のサービスと連携する場合はサインアップが必要。 GitHub アカウントと連携できるのでその辺は問題ないだろう。
まず「スタック追跡とパニック・ハンドリング」のコード例を paiza.IO で書いてみた。
こんな感じでコードと実行結果を埋め込むこともできる1。 また埋め込まれたコードはその場で編集して実行し直すこともできる。 試しに for 文の中を以下のコードに差し替えて実行してみて欲しい。
for depth := 0; ; depth++ {
pc, _, line, ok := runtime.Caller(depth)
if !ok {
break
}
fmt.Fprintf(log, " -> %d: %s: (%d)\n", depth, runtime.FuncForPC(pc).Name(), line)
}
paiza.IO で書いたコードは Gist と連携できる。 たとえば上のコードは
という感じで Gist に保存されている。 Gist との同期は自動ではなく明示的に指定する必要がある。
paiza.IO で書いたコードで他の(Twitter API などの)サービスと接続することも可能。 “The Go Playground” では外部との通信はできないので,これは嬉しい機能である。 たとえば「Git.io から短縮 URL を取得するコード」を参考に書いたコードがこれ。
実行をスケジューリングすることも可能なので,簡単なサーバ監視プログラムとか,色々な使い方ができそうである。
更に Twitter でコードを書くことも可能。 あらかじめ @paiza_run を follow しておいて
とコードを投げれば
と結果が返ってくる。 これはスクリプト言語でやったほうが面白いかな。
更に更に,他のユーザが書いたコードを fork することも可能。 またチャット等でリアルタイムにやり取りしながらコードを書くこともできるみたい。 遠隔ペアプログラミングとかできそうだよね。
ただし, paiza.IO では実行時間と使えるメモリに制限があって,大体どの言語でも2秒で512MBが制限になっている模様。 また Go 言語の場合は標準以外の外部パッケージが使えない。 たとえば以下は「文字エンコーディング変換」で書いたコードだが
package main
import (
"fmt"
"io"
"os"
"golang.org/x/text/encoding/japanese"
"golang.org/x/text/transform"
)
func main() {
reader := NewDecoder(os.Stdin)
writer := NewEncoder(os.Stdout)
if _, err := io.Copy(writer, reader); err != nil {
fmt.Fprintln(os.Stderr, err)
}
}
func NewDecoder(reader io.Reader) *transform.Reader {
return transform.NewReader(reader, japanese.ShiftJIS.NewDecoder())
}
func NewEncoder(writer io.Writer) *transform.Writer {
return transform.NewWriter(writer, japanese.EUCJP.NewEncoder())
}
paiza.IO ではコンパイル時にエラーになる。
欲を言えば “The Go Playground” にあるようなコードの整形機能が欲しいところである。
-
ただし埋め込んだコードを表示するにはブラウザ設定で third-party cookie を有効にする必要がある。 Firefox であれば例外設定をすることもできる。いや,こういうのマジ勘弁して欲しいんですけど。今時 third-party cookie とかありえない。 ↩︎