Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
Xamarin逆引きTips

Xamarin逆引きTips

Xamarin Workbooksを使用するには?(REPL&リッチテキスト編)

2016年6月29日

C#のREPLアプリとして対話型でコード実行ができるだけでなく、そのコード実行をコンテンツに含めたリッチ文書が作成できるXamarin Workbooksの基本的な使い方を解説。

奥山 裕紳(@amay077
  • このエントリーをはてなブックマークに追加

 Xamarin Workbooks(ザマリン・ワークブック。以下、Workbooks)は、C#のREPL(Read-eval-print loop: 対話型評価環境)アプリケーションだ。以前紹介したXamarin Sketchesの後継に当たる。

 Workbooksアプリケーションを使うことで、ワークブック(=上記の用語と微妙な違いになるが、以下では「Workbook文書」と単数形で表記)が作成できる。Workbook文書とは、XcodeのPlaygroundのような対話型のコード実行(REPL機能)に加え、そのコード実行を同梱したリッチな文書も記述できる(リッチテキスト機能)、「実行可能なドキュメント」である。

Xamarin Workbooksのインストール

 Workbooksは単体のアプリケーションであり、Windows版とMac版が用意されている。現在のところ、Early Preview(早期プレビュー)版ということでMac環境を中心に開発されていることもあり、Mac版の方が安定して動作するようである。ここではMac版を対象に説明を行う*1

  • *1 もちろんWindows版でも、画面などの作りに違いはあるものの概念や基本的な操作手順はほぼ同じなので、以下の説明はある程度は参考にできるだろう。

 「Installation and Requirements - Xamarin」からインストーラーを入手できる。[Xamarin Workbooks & Inspector for Mac]のリンクからダウンロードしたインストーラーを実行して、Workbooksをインストールしよう。

Xamarin.iOSのWorkbook文書を作成する

 Workbooksを起動すると図1のようになる。

図1 Workbooksの起動画面
図1 Workbooksの起動画面

 まずはXamarin.iOS用のWorkbook文書を作成してみよう。「Xamarin.iOS」を選択して、[Create Workbook]ボタンを押す。

 しばらく待つと、図2のように、Workbook文書のエディターとiOSシミュレーターが起動する。

図2 Xamarin.iOSのデザイナー(左側)とiOSシミュレーター(右側)

WorkbooksのREPL機能を使用する

変数や式の即時プレビュー

 Workbook文書のエディターに、

C#
var a = 2;
var b = 5;
var c = a * b;
入力する変数や式のコードブロック

と入力して、CommandEnterキーを押してみよう(なお、このようなコード実行の固まりをコードブロックと呼ぶ。コードブロック内での改行はControlEnterキーで行える)。図3のように変数cの値10が表示される。

図3 WorkbooksのREPL実行例
図3 WorkbooksのREPL実行例

 このように、CommandEnterキーを押すと、コードブロック内の最後にある変数や式の内容が即時プレビューされる。

 この即時プレビュー機能(公式サイトには“inline live-diagnostics”と説明されている)は、さまざまな形式に対応している。図4は、

C#
UIColor.FromRGB(255, 255, 0);

new CGRect(10, 20, 30, 40);

new CoreLocation.CLLocationCoordinate2D(35.68d, 139.76d);
iOS向けAPIなども実行可能

をそれぞれ別々のコードブロックで記述し実行したものである。

図4 さまざまな形式に対応した即時プレビュー

即時プレビューのCGRectの横にある選択リストの値が「ToString()」となっている場合は、「Object Members」に切り替えるとこの画面例のように表示される。

 このように、色、画像、オブジェクトのメンバー、位置情報までもが即座にプレビューできる。

クラスや関数の使用

 またWorkbook文書のエディターでは、コードブロックでクラスや関数を定義して使用できる。図5は、コードブロックでクラスMaterialや関数Join(Material a, Material b)を定義し、実際にそれを使用している例である。

図5 REPLでクラスや関数を使用する

Workbooksのリッチテキストを使用する

 Workbook文書のエディターでは、上記のような各コードブロックの前後に、リッチな文書を記述できる。実際に記述するには、対象となる1つのコードブロックの右上(または右下)にマウスカーソルを当てると図6のように[+]/[”]アイコンが表示されるので、[”]をクリックする。すると、コードブロックの上部(右下のアイコンをクリックした場合は下部)に図7のようにテキスト入力フィールドが挿入される(ちなみに[+]をクリックすると新たなコードブロックが挿入される)。

図6 Workbooksのテキスト入力フィールド挿入(1)
図7 Workbooksのテキスト入力フィールド挿入(2)

 このフィールドは、WYSIWYGエディターであり、見出し1~5や太字、箇条書きなど、一般的な書式付き文章が記述できる(文字列選択したり右クリックしたりすることでコンテキストメニューが出てきて、書式設定などの各種操作が可能なので試してみてほしい)。図8は、図5のコードブロックに説明を記述した例である。

図8 リッチテキストコンテンツの入力例

Workbook文書の保存と読み出し

 記述したWorkbook文書は、メニューバーの[File]-[Save]で保存できる。保存されるファイルの拡張子は.workbookだ。このファイルは同じくメニューバーの[File]-[Open]で読み出せる。

 .workbookファイルの実体は、Markdown形式のテキスト文書だ。図8で記述した文書をSample.workbookとして保存し、そのファイルを任意のテキストエディターで開いてみよう(リスト3)。

Markdown
---
uti: com.xamarin.workbook
platform: iOS
packages: []
---

## 素材クラスの定義

* 素材クラスは数量(`Quantity`)を持ちます
* プレビューの為、`ToString`をオーバーライドする必要があります

```csharp
class Material
{
  public int Quantity { get; set; }
  public override string ToString()
  {
    return $"Quantity={Quantity}";
  }
}
```

## Join関数の定義

二つの`Material`を引数に取り、両者の数量を足しあわせて新しい`Material`を生成します。

```csharp
Material Join(Material a, Material b)
{
  return new Material()
  {
    Quantity = a.Quantity + b.Quantity
  };
}
```

## クラスの関数の使用

上部で定義したクラスと関数を使用してみます。

```csharp
var materialA = new Material() { Quantity = 2 };
var materialB = new Material() { Quantity = 3 };
Join(materialA, materialB);
```
リスト3 Sample.workbookファイルの内容

 このように、Workbook文書の実体はMarkdown文書であり、```csharp ~ ```で囲まれた各コードブロックがインタラクティブに実行される仕組みであることが分かる。実際に.workbookファイルをテキストエディターで編集し、Xamarin Workbooksで読み込んでも、正しい形式であれば実行できる。

まとめ

 このようにXamarin Workbooksは、C#のコードを即時実行・評価でき、さらにドキュメントを記述できるツールだ。C#プログラミングの学習やライブコーディング、単純なプログラムの評価などに活用できるだろう。

 今回はXamarin WorkbooksのREPL機能とリッチテキスト機能のみを紹介したが、次回以降、Xamarin.iOSやXamarin.Androidアプリのライブ実行について説明する予定だ。

 Xamarin Workbooksに関する公式情報およびサンプルは、以下を参照されたい。

 なお繰り返しになるが、Xamarin Workbooksは現在Early Previewであり、アプリケーションが不安定な場合や、ファイル形式に変更がある可能性があることに注意されたい。不具合などを発見した場合、可能であればフォーラム(英語)で報告するとよいだろう。

※以下では、本稿の前後を合わせて5回分(第62回~第66回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

Xamarin逆引きTips
62. Plugins for Xamarinを使いこなすには?(ファイルシステム編)

デバイス固有の機能に簡単にアクセスできるPlugins for Xamarinを複数回にわたって紹介していく。今回は、簡単にファイルの入出力が行える「PCL Storage」プラグインを説明する。

Xamarin逆引きTips
63. Plugins for Xamarinを使いこなすには?(GPS編)

デバイス固有の機能に簡単にアクセスできるPlugins for Xamarinを複数回にわたって紹介していく。今回は、GPSの機能を使える「Geolocator」プラグインを説明する。

Xamarin逆引きTips
64. Plugins for Xamarinを使いこなすには?(Device Motion ― 加速度センサー/ジャイロスコープセンサー編)

デバイス固有の機能に簡単にアクセスできるPlugins for Xamarinの一つ、「Device Motion Plugin」プラグインを紹介。今回は、Accelerometer(加速度)センサー、Gyroscope(ジャイロスコープ)センサーの機能を使う方法を説明する。

Xamarin逆引きTips
65. Plugins for Xamarinを使いこなすには?(Device Motion ― 磁気センサー/コンパス編)

デバイス固有の機能に簡単にアクセスできるPlugins for Xamarinの一つ、「Device Motion Plugin」プラグインを紹介。今回は、Magnetometer(磁気)センサー、Compass(コンパス)の機能を使う方法を説明する。

Xamarin逆引きTips
66. 【現在、表示中】≫ Xamarin Workbooksを使用するには?(REPL&リッチテキスト編)

C#のREPLアプリとして対話型でコード実行ができるだけでなく、そのコード実行をコンテンツに含めたリッチ文書が作成できるXamarin Workbooksの基本的な使い方を解説。

サイトからのお知らせ

Twitterでつぶやこう!