表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
29/44

鹿ビックリ作戦

 さて、作戦はこうです。


 畑の近くの木から、金だらいをロープで吊り下げます。そのロープはアピちゃんチームの作業小屋の近くまで張ります。作業小屋には新たなレバーを用意し、アピエッタちゃんがそのレバーを操作することでロープが切れます。そして、金だらいが落ち、その音で鹿を追い払うという寸法です。


「エイヤ、アンカーにロープを結びつけてください」

「はーい」


 ですが、次の瞬間。


 バゴーン! ゴンゴロゴンゴロ……


 金だらいが、ぼんやりと立っていた近衛兵のヘルムに落下しました。金だらいは大音を響かせながら草むらを転がっていきます。


 直撃を受けた近衛兵は、頭を抱えてその場にしゃがみ込みました。


「ごめんごめん、手が滑った」


 エイヤがてへへと舌を見せます。


「お怪我はありませんか?」


 わたくしは近衛兵に駆け寄ります。


「……はい! 頭を守ってくれた、こちらのヘルム! 傷一つ入っておりません! 今年度最後の特別価格、何と銀貨三枚九十八セント、銀貨三枚九十八セントでのご提供です。金利手数料は近衛長官が負担いたします。近衛兵の紋章もお付けして、お値段変わらず銀貨三枚九十八セント! 銀貨四枚を切っておりますよ! 今年度最後の特別価格。 今すぐお伝令を! 無料伝令♪ 0120~」

「……念のため診療所へお連れしてください」

「はっ」

「伝令オペレーターを増員してお待ちしておりま~す!! 」


 近衛兵は同僚に連行されていきました。


「エイヤ、後で見舞いに参りましょう」

「……はい」


 とにかく今は、作業を続行しましょう。


 ロープを切断する装置として、鼠捕り用の小型のギロチンを使用します。予定外ですが、ロープ以外の物は切れないよう、端材で保護カバーを作って付けておきましょう。このままでは、けが人がさらに増ええしまいそうな気がします。


「これで完成です!」

「ぽふぃ!」

「はぁぴ!」

「はぴっ!」


 では、わたくしのスキルの出番です。


「スキル〝C#〟日没後から夜明けまでの間に最初に動体検知した時にアピエッタちゃんお手」


 我ながら長々しい名前ですね。


 しかし、あの「動体検知しました」の連続では、アピエッタが疲弊してしまいます。そして、この仕掛けは、一度使ってしまえば修理するまで使えません。アピエッタが複数回レバーを押さえても、それは無駄な労力となってしまいます。


 アピエッタの労力を考えれば、多少の複雑さはやむを得ません。


 光る文字が宙に浮かびます。



``` csharp


var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSwibo();

builder.Services.AddSkillDiscoveryMetadataGenerator();

var app = builder.Build();


app

.ExposeSkillDiscoveryMetadata("csharp.日没後から夜明けまでの間に最初に動体検知した時にアピエッタちゃんお手")

.WithSwiboEventHook("/");


var resetTime = DateTime.MinValue;


app.MapPost("/", async ([FromBody]SwiboEventNotification notification, ISwiboContext context, CancellationToken cancellationToken) =>

{


var now = DateTime.Now;

var sunsetHour = 18;

var sunriseHour = 6;


if(notification.EventType == SwiboEvent.ChangeReport &&

notification.TryParseContextData<SwiboCameraEventData>(out var data) &&

data.DetectionState == SwiboDetectionState.Detected &&

resetTime <= now &&

(now.Hour >= sunsetHour || now.Hour <= sunriseHour))

{

var アピエッタ = context.Swibos.OfType<SwiboBot>().First(x => x.Name == "アピエッタ");

await アピエッタ.PressAsync(cancellationToken);


if(now.Hour <= sunriseHour)

{

resetTime = now.Date.AddHours(sunsetHour);

}

else

{

resetTime = now.Date.AddDays(1).AddHours(sunsetHour);

}

}


return Results.Ok();

});



app.Run();


```



 予想通り、なかなか複雑になりました。特にifの部分が。elseなどというものまで新登場しています。とはいえ、基本的な部分は変わりません。


``` csharp

await アピエッタ.PressAsync(cancellationToken);

```


 PressAsync、つまり「お手」という命令のための条件やお膳立てが変わっているということなのです。


「では、夕方にアピィちゃんと、アピエッタちゃんは交代してください。アピエッタちゃんは、命令があったときにこのレバーを押してくださいね」

「ぽふぃぽふぃ」

「はぁぴ!」

「はぴっ」


 さて、鹿を追い払うことはできるのでしょうか。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ