照明
夜。
王宮には無数のろうそくの火が灯ります。
壁の燭台や、机の燭台に揺らめく無数の火を見ていると、少し物悲しい気分になります。感傷ではありません。寝る前には、この数のろうそくを消さなければならないという事実に悲しくなるのです。
普通の王族なら、侍女が消してくれるのでしょう。しかし、権力から距離を置くわたくしは侍女達に相手にされていないので、自ら消さなければならないのです。
わたくしは、寝るまでの時間を見越して、ちょうど良い時間で燃え尽きるように、ろうそくを切っておいたりもするのですが、燃え尽きたら燃え尽きたで、翌朝には、この本数のろうそくを交換しなければなりません。
「……スローライフからは程遠いですね」
明日に備えて、大量のろうそくを熱したナイフで切りながらそうぼやきました。
「ぽふぃ……」
せっかくですから、この機会に解決策を考えましょう。
「発光石を使ってみましょうか」
二号君の作業小屋には発光石を使いました。
スイの前に大きな発光石を置くと、眩い光を発し、それ一つだけで部屋全体が真昼のように明るくなりました。
「ぽふぃ♪」
しかし、スイが喜んで泳ぎ回ると、たちまち光を失ってしまいます。
「ぽふぃ!?」
スイは頭を傾けます。
「この発光石は、スイちゃんの吐く息に反応しているのです」
正確には、幻生生物から漏れ出る幻素の流れが、この石の蛍光物質に衝突することで光を放ちます。つまり幻素水晶を近づけたり、滞留した幻素の中に放り込むだけではほとんど光を放ちません。
スイが再び発光石の近くで傘をパタパタとさせると、再び石は部屋を照らしました。
「ぽふぃ♪」
「けれど、スイちゃんが石から離れられなくなってしまいますね」
「ぽふぃ……」
それが問題でした。
発光石は幻獣をテイムしている貴族が、夜道を歩くときランタン代わりに使うものです。固定照明に使うものではありません。
「ぽふぃ!ぽふぃ!」
「何かアイデアがあるのですか?」
「ぽふ!」
スイは幻空間に潜り、一匹のスイボを連れて帰ってきました。わたくしの頭をすっぽりと包めそうなほどの大きさです。
「きゅい!」
二号君とはまた別のスイボのようです。スイや二号君の口腕は短く外側にカールしていますが、この子は八本の腕にシュシュのようなひだを巻きモコモコとした見た目です。やや褐色がかった白色の傘は、紺色に縁取られていました。
スイはその子の傘の頂点に口腕を乗せ、テイムします。身体の大きさが違いすぎて、まるでスイがたんこぶのようです。
この子は仮に三号君と呼びましょう。
「お初にお目にかかります。スイをテイムしているスタッカです。以後お見知りおきを」
「……きゅい?」
三号君も二号君と同じく人の言葉は分からないようです。ゆらりゆらりと、ぼんやりとした表情で漂っていました。知能の高さや、テイムの難易度は身体の大きさに比例しないようです。
「ぽふぃ」
「きゅい?」
スイが発光石を差し出すと、三号君はそれを食べ始めました。やがて口腕の先が光り始めます。おそらく、腕先に発光石の成分を集めたのでしょう。その光が身体の中で反射し、ランタンのように周りを明るく照らしているのです。その様子はまるで小さなシャンデリアのようでした。
「ステータスオープン」
三号君のクラスは、「シーリングライト」のようです。確かシーリングは、古代語で天井という意味です。
「ぽふぃ~」
「きゅい!」
三号君が傘をぱたぱたとさせて空中を泳ぎ、上昇します。天井に達すると、オレンジがかった優しい光で部屋が包まれました。
「すごいです。でも、明かりを消せるのですか?」
「ぽふぃ? ぽふぃ~」
スイには分からないようです。
「スキル〝C#〟消灯」
``` csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSwibo();
builder.Services.AddSkillDiscoveryMetadataGenerator();
var app = builder.Build();
app.ExposeSkillDiscoveryMetadata("csharp.消灯");
app.MapPost("/", async (ISwiboContext context, CancellationToken cancellationToken) =>
{
var swibo = context.Swibos.OfType<SwiboCeilingLight>().First();
await swibo.TurnOffAsync(cancellationToken);
return Results.Ok();
});
app.Run();
```
「きゅい!」
三号君は、腕を幻空間に沈め、部屋がふわりと暗くなります。
「スキル〝C#〟点灯」
``` csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSwibo();
builder.Services.AddSkillDiscoveryMetadataGenerator();
var app = builder.Build();
app.ExposeSkillDiscoveryMetadata("csharp.点灯");
app.MapPost("/", async (ISwiboContext context, CancellationToken cancellationToken) =>
{
var swibo = context.Swibos.OfType<SwiboCeilingLight>().First();
await swibo.TurnOnAsync(cancellationToken);
return Results.Ok();
});
app.Run();
```
「きゅい!」
幻空間から腕を出した三号君が、ぼんやりと光り、その後部屋を照らすほどに明るくなりました。
「素晴らしいですね。スイちゃんも、三号君もありがとうございます」
「ぽふぃ!」
空中に書かれた光る文字に目を遣ります。お手と似ていますが、どこか違います。
「スキル〝C#〟発動履歴を見せて」
スキルの力で、今まで空中に書かれた光る文字を浮かべ、それらを見比べます。
――お手
``` csharp
await swibo.PressAsync(cancellationToken);
```
――スイちゃんお手
``` csharp
await スイ.PressAsync(cancellationToken);
```
――消灯
``` csharp
await swibo.TurnOffAsync(cancellationToken);
```
――点灯
``` csharp
await swibo.TurnOnAsync(cancellationToken);
```
何となくですが、この記法のパターンが見えてきました。
swiboの部分は対象のスイボで、PressやTurnOffやTurnOnは古代語の命令です。ピリオドは対象と命令を区切る意味があるようです。awaitやAsync、cancellationTokenの意味は分かりません。「頼もう」「どうれ」「者共出会え」みたいな感じでしょうか。最後のセミコロンは、どうやら文の終わり、もしくは区切りのように見えます。
古代言語で書かれた意味不明のレシピの類だと思っていましたが、似たようなパターンが繰り返されるところをみると、むしろ数式のように形式化された命令書のようです。であるならば、スキル〝C#〟は意図通りの命令書を生成する生成系スキルと、それを実行させる執行系スキルの二つの構成要素から成っているのでしょう。もしかすると、この記法をマスターして自力で命令書を書けば、スキルの枠を超えて、もっと複雑な制御ができるのかもしれません。
ですが、スローライフ。急ぐ必要はありません。そのうち習得すればよいのです。
「ぽふぃ?」
「今日は楽しかったですね」
「ぽふぃ!」
「さあ寝ましょう。スキル〝C#〟消灯」
「きゅい!」
「おやすみなさい、スイちゃん」
「ぽふぃ~」
スイと一緒に眠りにつきました。