読者です 読者をやめる 読者になる 読者になる

xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

C#もOK! paiza.IOでお手軽オンラインプログラミング

C# Tools

前回書いたオープンデータの記事 (オープンデータ先進県「福井」の残念なデータに思う) が大反響で、非常に多くの方に読んで頂けました。通常の 10 倍以上のページビューが出て、ただただ驚くばかりでした。

そのおかげもあり、偶然にも 1 年前に地元で一緒に食事をした @ryosuke_sato さんと Twitter で再開することができました。今回はそんな彼が開発に携わっているという paiza.IO をご紹介します。かなり便利!

paiza.IO って何?

簡単に言うと、ブラウザ上でコードを書いて即時実行できるオンラインのプログラム実行環境です。とても多くの言語に対応していて、スクリプト系の言語だけでなくコンパイル言語にも対応しています。もちろん .NET 系の言語 (C# / VB.NET / F#) も OK

paiza.IO

ちょっとコードを書いて実行するためだけに開発環境を準備するなんてとても面倒なわけですが、その必要がないお手軽さがとても良いです。エディターはフォントの変更もできますし、テーマ切り替えによるシンタックスハイライトにも対応しています。さらには簡単な IntelliSense も搭載しており、パッと使うには十分過ぎる機能です。他にも GitHub との連携や、複数人によるリアルタイム同時編集機能も搭載されており、至れり尽くせり感があります。

paiza.IO Editor

便利な埋め込み機能

さらに paiza.IO のすごいところは、書いたコードをサイト埋め込みできることです。しかもただの埋め込みではなく、その場で編集/実行することもできます。超便利!(なんだただの神か...)

動作環境を調べてみる

C# を自由に書けるということだったので、実行しているサーバー環境の情報を簡単に調べてみました。OS が Unix なので、.NET 環境ではなく Mono 環境で動作させていることが分かります。記事掲載時点では CPU は 8 つ搭載されており、結構パワーがある印象です。また、ネットワーク通信が利用できることもわかります。

ちなみに上記のコード例には出していませんが、ドライブの空き容量を取ったり、イーサネットの MAC アドレスを取ったりもできました。また、ファイルシステムにアクセスすることができるので、結構好き勝手に実行環境内をまさぐることができます。いろいろ遊んでみた範囲で分かったことは、以下のような感じ。

  • UNIX の種類は Ubuntu
  • Docker で動いている
  • 毎回実行ユーザーとか実行環境が変わる (Docker コンテナを毎回生成してるっぽい

利用可能なアセンブリ

C# を実行するにしても、paiza.IO がどれだけのアセンブリを参照可能なのかでできることが変わってきます。GAC (Global Assembly Cache) を確認してみたところ、以下のアセンブリが登録されていました。

Assembly Version
Accessibility.dll 4.0.0.0
FSharp.Core.dll 4.3.0.0
I18N.dll 4.0.0.0
I18N.West.dll 4.0.0.0
Microsoft.Build.Engine.dll 4.0.0.0
Microsoft.Build.Framework.dll 4.0.0.0
Microsoft.Build.Tasks.v4.0.dll 4.0.0.0
Microsoft.Build.Utilities.v4.0.dll 4.0.0.0
Mono.CompilerServices.SymbolWriter.dll 4.0.0.0
Mono.Data.Sqlite.dll 4.0.0.0
Mono.Data.Tds.dll 4.0.0.0
Mono.Posix.dll 4.0.0.0
Mono.Security.dll 4.0.0.0
Mono.Web.dll 4.0.0.0
Mono.WebBrowser.dll 4.0.0.0
Mono.XBuild.Tasks.dll 4.0.0.0
System.dll 4.0.0.0
System.Configuration.dll 4.0.0.0
System.Core.dll 4.0.0.0
System.Data.dll 4.0.0.0
System.Drawing.dll 4.0.0.0
System.EnterpriseServices.dll 4.0.0.0
System.Numerics.dll 4.0.0.0
System.Runtime.Remoting.dll 4.0.0.0
System.Runtime.Serialization.Formatters.Soap.dll 4.0.0.0
System.Security.dll 4.0.0.0
System.Transactions.dll 4.0.0.0
System.Web.dll 4.0.0.0
System.Web.ApplicationServices.dll 4.0.0.0
System.Web.Services.dll 4.0.0.0
System.Windows.Forms.dll 4.0.0.0
System.Xml.dll 4.0.0.0
policy.2.0.FSharp.Core.dll 0.0.0.0
policy.2.3.FSharp.Core.dll 0.0.0.0
policy.4.0.FSharp.Core.dll 0.0.0.0
policy.4.3.FSharp.Core.dll 0.0.0.0

これらのアセンブリに入っているクラスライブラリであれば利用することができそうです (未確認)。ちなみに Microsoft.CSharp.dll は含まれていないので、残念ながら dynamic キーワードを利用したコードは書くことができません。(async/awaitは使えます)

タイムアウトの制約

paiza.IO は、どうやら処理時間が長いと途中で処理を打ち切るように設計されているようです。実験した範囲では約 2 秒くらいでタイムアウトが発生しました。そもそもサーバーに負荷がかかるような処理は悪ですし、実際はたぶん無限ループの対策だと思います。

まとめ

ブラウザだけでサクッとコードが掛ける環境、マジ便利!「ダダダッ!と書いて Ctrl + Enter (ターン!!」が気持ちイイ!ぜひ使いましょう :)