本連載について

本連載では少しづつES6について記載していこうと思います。 第四回はGeneratorを学びます。 発表されてから久しいですが、まだ習得されていない方は今からでも勉強してみてはいかがでしょうか。

Generator

Generatorとは「関数の途中で抜けて、また処理を再開して」を実現する機能です。一時停止と再生のようなものを想像してもらうとわかりやすいかもしれません。
処理を途中で抜ける回数はコードの書き方次第で何回でも可能で、そのたびに任意の値を取り出すこともできます。

ブラウザサポート

ブラウザサポートについては以下をご確認ください。

http://kangax.github.io/compat-table/es6/

Generator関数の使い方

通常の関数宣言文ではfunction() {}のように宣言されますが、Generator関数ではfunction* () {}のように*が追加されます。
まずはテストコードを記載しましょう。これが一番簡単なGeneratorの形になります。

function* genetatorFunc {
    yield 1;
    yield 2;
    return 3;
}

yieldという見たことない記述も現れました。こちらも合わせて以下で解説していきます。

Generator関数を呼び出すと、通常の関数とは違ってGeneratorオブジェクト(イテレータオブジェクト)というものを返します。
Generatorオブジェクトはnext()メソッドというものを持っていて、Generator関数内の一時停止と再生はこれを通して行えるようになります。 上記のコードに少し記述を追加してみましょう。

function* genetatorFunc {
    yield 1;
    yield 2;
    return 3;
}

var generator = generatorFunc();
console.log(generator.next()); // { value: 1, done: false }
console.log(generator.next()); // { value: 2, done:false }
console.log(generator.next()); // { value:3, done: true }
console.log(generator.next()); // { value: undefined, done: true }

変数generatorを宣言し、宣言したgeneratorFunc()関数を代入しました。これにより変数generatorにはGeneratorオブジェクトが格納されました。
さらに、console.log()の中でnext()を実行しているところに注目してください。
next()については次項で解説します。

next()

next()が実行されると、Generator関数の中にあるyieldの式まで評価し、評価結果を返します。つまり1度目のnext()ではyield 1;までが実行されたということです。
2回目のnext()ではyield 2;が実行されています。このようにnext()がyieldと紐付くことで一時停止と再生を実装しています。

next()が実行された場合の返り値にも注目してみましょう。返り値はvalueとdoneというプロパティを持ったオブジェクトになります。
上のサンプルコード内にある以下の部分をご覧ください。

console.log(generator.next()); // { value: 1, done: false }

valueにはyieldの評価式に記載した値が返ってきています。
doneというプロパティにはboolean型で値が入ります。
これらについて以下で説明いたします。

value

valueはyieldに記載した評価式の評価結果が出力される場所です。
サンプルコードでは以下になります。

function* genetatorFunc {
    yield 1;  // ここの評価結果がvalueの値として返る
    ~ 略 ~
}

yieldに記載した1がそのまま返ってきているというわけです。
また、評価式は「式」なので例えばyield 1 + 10;のようにすれば11が返るようになります。

done

doneはGeneratorオブジェクトから全ての値を取り出したかをboolean型で示します。
この値がfalseであればGeneratorオブジェクトの中にはまだ値が残っているということになります。そして、Generator関数の中でreturnすると値は全て返し終わったと処理され、doneはtrueになります。

function* genetatorFunc {
    yield 1; // 1度目ではここまで & done: false
    yield 2; // 2度目ではここまで &  done: false
    return 3;  // 3度目ではここまで &  done: true
}

それではreturnが記載されていない場合はどうなるのでしょうか。
以下をご覧ください。

// returnが記載されていない場合
function* generatorFunc() {
    yield 1;
    yield 2;
    yield 3;
}

var generator = generatorFunc();
console.log(generator.next()); // => { value: 1, done: false };
console.log(generator.next()); // => { value: 2, done: false };
console.log(generator.next()); // => { value: 3, done: false };
console.log(generator.next()); // => { value: undefined, done: true };

returnを記載せず全てyieldのみで記載した場合全ての値を取り出し終わったにも関わらずdoneはfalseになります。
returnで取り出し終わったことを名言する必要がありますのでyield 3;のタイミングではまだ取り出し終わったことになっていないのです。
4回目のnext()が実行された際にvalue: undefinedとなり、そこでdone: trueになりました。

続いて、returnの後でyieldを書いた場合はどうなるのでしょうか。
こちらも記載しておきます。

//returnの後でyieldを書いた場合
function* generatorFunc() {
    yield 1;
    yield 2;
    return 3:
    yield 4;
}

var generator = generatorFunc();
console.log(generator.next()); // => { value: 1, done: false };
console.log(generator.next()); // => { value: 2, done: false };
console.log(generator.next()); // => { value: 3, done: true };
console.log(generator.next()); // => { value: undefined, done: true };

このケースの場合、他のjavascriptの処理と同様、return以降は値を書いていたとしても読み込まれることはありません。そのため4回目のnext()ではyieldは記載されているにも関わらずvalueの値にはundefinedが返ってきています。

上記のケースはあまりおすすめできるコードではありませんが、tipsとして仕様を把握するためにご紹介させていただきました。

yield*

Generatorオブジェクトの中でyield*を使用すると、値をそのまま返すのではなくiterableとして扱うことが可能です。

iterable
イテレータとは、一連の処理中において現在の処理位置を把握しつつ、コレクション中のアイテムへ一つずつアクセスする方法を備えたオブジェクトのことです。JavaScript においては、イテレータは一連の処理中の次のアイテムを返す next() メソッドを提供するオブジェクトです。このメソッドは done と value という 2 つのプロパティを持つオブジェクトを返します。
イテレータとジェネレータ - JavaScript | MDN

イテレータはつまり反復可能なオブジェクトとして捉えていただければ問題ありません。 コードを見たほうがわかりやすいため、まずは下のコードをご覧ください。

function* count(n) {
    yield n;
    yield* count( n + 1 );
}

var generator = count(10);
console.log(generator.next()); // => { value: 10, done: false };
console.log(generator.next()); // => { value:11, done: false };
console.log(generator.next()); // => { value: 12, done: false };

yield*を使用すると何度も同じ処理を続けることが可能になります。このサンプルコードの場合、作成したcount()自体もイテラブル(反復可能)なため、next()で何度も呼び出しつつカウントアップすることができました。

エラーハンドリング

ここではGenerator関数の中でエラーが発生した場合の処理方法を解説します。 Generator関数内で発生したエラーは、`next()=の呼び出し元で受け取ることができます。
下のコードをご覧ください。

// yieldの評価結果をthrow文で返す
function* generatorFunc() {
    throw new Error(エラーメッセージ);
}

var generator = generatorFunc();
try {
    generator.next();
} catch(e) {
    console.error(e); // Error: エラーメッセージ
}

このようにGenerator関数の中で例外(throw文)が発生した値をtry~catch文で受け取ることが可能です。
エラーハンドリングが必要な場合、基本はこの書き方をすればよいでしょう。

for~of文との組み合わせ

同じくES6で実装された構文にfor~of文があります。
for~of文はプロパティや配列の値を取得してくるものです。for~in文ですとオブジェクトのプロパティ名を取得してきたものに対し、こちらは値を対象としているわけです。
また、for~of文はiterableなオブジェクトに対し実行することを前提として仕様策定されているため、Generatorオブジェクトに対しても問題なく動作します。

function* generatorFunc() {
    yield 1;
    yield 2;
    return 3;
}

var generator = generatorFunc();
for(var n of generator) {
    console.log(n);
}

これを実行するとconsoleには以下のように出力されます。

1
2

return文で返り値にした3が出力されていませんね。これはfor~of文がdoneプロパティの値がtrueの場合、値を取得しないように設計されているからです。使用する際はこの点に注意してください。

Generator関数へ値を渡す

今まではnext()を使用してgeneratorオブジェクトから値を受け取る方法をご紹介しました。それでは逆にgeneratorオブジェクト側で値を渡したい場合はどうしたらよいのでしょうか。
この場合は、next()の引数として値を渡すことで実装できるようになっています。渡された値は、generator関数の中で変数を設定することで任意の変数に代入することができます。渡したい変数には以下のようにyieldを代入しておいてください。

var a = yield;

続いて、下のコードをご覧ください。

function* generatorFunc() {
    var first = yield 1;
    console.log(first);
    var second = yield 2;
    console.log(second);
}

var generator = generatorFunc();
generator.next();
// { value : 1 , done: false }
generator.next(first message);
// { value: 2, done: false } & consoleに「first message」
generator.next(second message);
// { value: undefined, done: true } & consoleに「second message」

上のコードを実行するとそれぞれコメントアウトで記載したように出力されます。 少し処理の順序が複雑になりますので順を追って説明してみます。

1回目のnext()

1回目のnext()では処理は下のコードの位置までしか進んでいません。 処理的には最初のyieldの式が評価され、値として返ってきただけになります。 1回目のnext()ではまだyieldの式を評価するだけになりますので、ここで引数として何かを渡しても処理されません。
そのため引数は2回目から入力しています。

function* generatorFunc() {
    var first = yield 1;
}

var generator = generatorFunc();
generator.next();
// { value : 1 , done: false }

2回目のnext()

2回目のnext()では以下の位置まで処理が進行します。
まず引数として渡されたfirst messagevar firstに代入されます。そしてconsoleに出力されyield 2まで進み、式を評価して値として返しています。

function* generatorFunc() {
    var first = yield 1;
    console.log(first);
    var second = yield 2;
}

var generator = generatorFunc();
generator.next();
// { value : 1 , done: false }
generator.next(first message);
// { value: 2, done: false } & consoleに「first message」

3回目のnext()

そして3回目でここまで処理が進みます。
引数として渡されたsecond messagevar secondに代入され、consoleに出力されています。次に処理すべきyieldがないため返り値のvalueプロパティにはundefinedが返ります。

function* generatorFunc() {
    var first = yield 1;
    console.log(first);
    var second = yield 2;
    console.log(second);
}

var generator = generatorFunc();
generator.next();
// { value : 1 , done: false }
generator.next(first message);
// { value: 2, done: false } & consoleに「first message」
generator.next(second message);
// { value: undefined, done: true } & consoleに「second message」

値を渡す際には、このようにgenerator関数の中で処理の順序を意識するとしっかりコードの設計ができるようになります。

Promiseとの連携

generator関数は任意のタイミングで一時停止・再開を行うことができるものでした。そしてここまででGenerator関数の説明は完了しています。
本項ではこの機能を使って非同期処理を同期的に扱う方法をご紹介します。ES6の非同期処理といえばPromiseになりますが、これとGenratorを組み合わせてコードを書いてみようと思います。

ここで解説を進行したいところなのですが、ここで先に少し補足をさせてください。

ES7のasync/awaitについて

今回解説しているのはES6になりますが、ES7についても仕様策定が着々と進んでいます。その中でもasync/awaitは今回解説する機能をよりシンプルにできる機能で、これがトランスパイラであるbabelが対応したことにより、どれがベストプラクティスかはコードによって検討する余地が残っています。

qiita.com

Generatorもあくまで処理の一時停止と再生を実現する機能であり、Promiseとの連携はあくまでもコードのデザインパターンとして存在しているだけです。
何が言いたいかというと、上述の通り本項で解説するコードをベストプラクティスと呼ぶには疑問の余地が残るということです。あくまでもそれらを考慮した上で、読み進めていただければと思います。

Promiseを同期処理する

改めてここからGeneratorとPromiseの連携を説明します。
APIのような機能を想定してコードを記載しますが、あくまでサンプルのため実際のサーバー通信処理部分は割愛してコードを書いていきますのでご了承ください。

今回は、あるショッピングサイトでカートの中身を表示させる機能を想定します。 処理はシンプルに以下のような流れを想定しています。

  • getUserIDでIDを取得
  • IDをもとにgetUserCartでカートの中身をcartListとしてjsonで取得
  • cartListをreturn

最終的に取得できるcartListは以下のようなフォーマットと仮定します。

var cartList = fetchUserCart(ID);
console.log(cartList);
// [
//     {
//         "name": "あいてむ1",
//         "price": "10,000"
//     },
//     {
//        "name": "あいてむ2",
//        "price": "100"
//     }
// ]

前置きが長くなりましたがそれではコードを書いていきます。
まず大枠としてGenerator関数を作成しましょう。

function* fetchUserCartList(name) {
    var id = yield getUserID(name);
    var cartList = yield getUserCartList(id);
    return cartList;
}

function getUserID(name) {
    return new Promise(function (resolve, reject) {
        // ~ 略 ~
        resolve(res);
    });
}

function getUserCartList(ID) {
    return new Promise(function (resolve, reject) {
        // ~ 略 ~
        resolve(res);
    });
}

こんな感じになります。 yieldにそれぞれ記載されているgetUserID();getUserCartList()はともにPromiseで処理が記載されているものと仮定してください。 Promiseだけで非同期処理を長く書くよりかなりシンプルにできています。
次にGeneratorオブジェクトを取得する方法です。

var generator = fetchUserCartList(yt_ymmt);
var generatorResult = generator.next(); // { value: Promise, done: false }
var promiseID = generatorResult.value;

このようにyieldの評価式にPromiseオブジェクトを返すようにすると、valueの値としてPromiseオブジェクトをそのまま受け取ることが可能です。
promiseIDには関数getUserID()のpromiseオブジェクトが格納されています。非同期通信で取得したIDを受け取るために、このpromsieがFullfilledになった場合の処理を記載します。

promiseID.then(function(id) {
    var generatorResult = generator.next(id);
});

Promise.then()を使って、promiseIDがFullfilledになったら(IDが取得できたら)コールバック関数内でGenerator関数をnext()します。コールバック関数の引数にはresolve()からIDが渡ってきています。Generator関数にIDを渡す必要があるため、next()をする際にIDも忘れずに引数として渡します。こうすることでGenerator関数内のvar IDにIDを渡しつつgetUserCartList(id)を実行することができます。

getUserCartList(id)でもPromiseが返ってきますので受け取る変数promiseCartを用意しておきます。

promiseID.then(function(id) {
    var generatorResult = generator.next(id);
    var promiseCart = generatorResult.value;
    return promiseCart;
});

そしてpromiseCartに格納されているPromiseオブジェクトがFullfilledになった場合の処理を追加します。ここまでくれば後は簡単で、単純にcartListの値を受け取るだけです。

promiseID.then(function(id) {
    var generatorResult = generator.next(id);
    var promiseCart = generatorResult.value;
    return promiseCart;
}).then(function(cartList){
    var generatorResult = generator.next(cartList);
    console.log(generatorResult);
    // generatorオブジェクトのvalueの値にカートの中身が出力されたjsonが表示される
});

求めていた情報を取得することができました。 このようにnext()を処理の進行係にすることで非同期処理を同期的に処理することができるようになります。

まとめ

generatorは単体でも機能しますが、最後にご紹介させていただいたように他のプログラム処理と組み合わせて使うことでさらに利便性の向上が期待できます。ぜひ使いこなしてより見通しのいいコードを書けるようになりたいですね。

TDLでびゅ

2018/07/06

全部としまえん基準で評価するのやめれ


冬休み、もう数回図書館に行ってます。

年中が喜んでる絵本をまとめてオススメ!
まずは馬場のぼるさんの、ねこシリーズ。家にも数冊あります。シリーズものは、家にないとこを借りてくると外れなくはまりますが、へんな〜が楽しい年中(とくに男子
にオススメ。


11ぴきのねことへんなねこ (11ぴきのねこシリーズ)

それから、鈴木のりたけさん。
ぼくのおふろ (わたしのえほん)

どこかでみたような??
と思ったら、しごとば、の作家さんでした。スカイツリーの絵本、もってる男子の家は多いのでは。。。

こんもりくんも、面白いようです。

こんもりくん

こういう絵本は、幼稚園でみんなで読んだりして、楽しいだろうな〜と思います。
いまは幼稚園に文庫があって借りられたり、読み聞かせがあったり、羨ましいな〜と思います。

くんちゃんシリーズもすきです。


くんちゃんのだいりょこう

絵本というと、やたら動物が主人公で、あまり小さい子にくまちゃんやうさぎちゃんの絵本はどうか?と思ってましたがくんちゃんは私もすきだなー。と思ってます。
ひとつひとつの体験や、お母さんの優しさなんかがいいのかな。。。

園児のオススメはまた書きたいです。

f:id:yunawakuwaku:20170306205759j:plain

こんばんは


今朝は長い髪をキリッと結び一日がスタートしました。

ハチマキをしたい気分だったけど、それやっちゃうとポカーンな人が続出するのでやめました。

何をしたくて?

いや、別にこれといって頑張る作業はないのだけれど、なんとなく張り切りたい自分がいたワケです。


昨夜、テレビ朝日『神様に選ばれた試合』を観ました。

2009年第2回WBC大会決勝 vs韓国の模様が特集されていたのですが、もうね、この試合はね、感動的過ぎて昨夜も流れはわかっているのに、イチローさんの打席の場面は手に汗握る展開!

ファールで粘るイチローさん。

当時も打つ度ファールで良かったーーってテレビの前でキャーキャー言いながら観てたものです。

8球目だったかな、キタキタここで打つんだよセンター前に!って昨日も当時と同じぐらいドキドキ。

ドキドキドキドキ…

はい、打ったーーーー!感動ーーーー!

*****

イチローさんはこの大会調子がイマイチだったんですよね。それが、この最後の大一番で結果出すんですよ?……神だわ。

こうなったらイチローさんの本を読まずにはいられません。

本棚に2冊ありました。

『なぜイチローはチャンスで最高の実力を出せるのか』

著者 児玉光雄

え?

この人、さんまさんのテレビ番組に出てた人じゃない?いじられキャラの?…大丈夫か?…(汗)

本の内容は、まぁ、省略(え)

再読したけど、結構付箋貼ってました(笑)
結局言いたい事は、

「自己実現の鍵は、才能ではなく自己イメージ」

だそうです。

読みながら、さんまさんに突っ込まれる児玉さんの顔が浮かんで、カッコイイこと書いてるけど内容が頭に入ってこないっていうジレンマ(笑)


もう一冊はトップアスリートの言葉を集めた本。

『勇気がもらえる145の言葉』

テレビ朝日『Get Sports』編

あら、またテレビ朝日。

この本は2010年発行の本で、各方面で活躍してるアスリートの言葉が書かれています。

イチローさんを始め、野球、サッカー、水泳、ゴルフなどほんとにたくさんの方たち。

例えば、

「普段から自分がガッツポーズしている場面や喜んでいる姿とかをイメージしています 北島康介」

「どんなに難しいコースでも自分のゴルフっていうのを忘れちゃいけない 石川遼」

とかね。


「面白い選手でいたいよね イチロー」


難しい言葉を使ってない分重みを感じます。

必勝!侍ジャパン!

*****

◆今日のよかった

225はひと休み?押し目?

任天堂のおかげか今日もワタシのゲーム銘柄は上昇。塩漬クンも前日比+7%。突如上昇してきた塩漬け一歩手前クンはなんとストップ高まで行きました。凄いねー。出来れば4桁行ってほしい。それからガーラさんも+5。なんかカワイイ(笑)ガーラさんにはお世話になったから最後まで見届けるよーー。

期待の星クンも良い。動かない新人クンを見切って枚数増やして良かった。それでも低位株なので急変に注意なのです。


◆今日のカレンダー

『もし好機が到来しなかったならば自ら好機を創り出せ』

スマイルズ 1812〜1904 イギリスの著述家

あ〜〜この人既に書いてます。
一昨日書いた竹内均サンという方がこの人の本を翻訳してますよ。


同じチャンスが二度来るとは限らないから、目の前にきたチャンスは逃したらダメです。が、

ワタシは結構後先考えて行動するタイプなので(笑)
闇雲に動く事はしません。でも、だから慎重なのかというとそうでもなく。

壊してはいけない壁は理解してるつもりなので、それを越えない範囲で暴れています。内側の壁はあと何枚残っているかしら。



今日は昨日より寒かったですね。

首元温めて風邪退散です。


では、また明日

おやすみなさい

f:id:yunawakuwaku:20170416232337j:plain

こんばんは


今日はお天気良すぎでした。

暑っ…

そんな復活祭の日曜日いかがお過ごしでしょうか。

え、お仕事?
一緒ですー。
ワタシも書類の山と闘っておりました。

そうです。また、山を作ってしまいました…

いつも優先順位を考えて一日を過ごしているのですが、まとめてやった方が楽なものは、ある程度集まるまで待つんです。

そしたら待ちすぎてこの有り様(笑)

いや、笑い事ではないのでね。

今日お仕事だったあなたもワタシもお疲れ様ー。

*****

◆今日のよかった

昨日、山Pが「ドレス・ド・オムライス」を作るとき、華麗に卵を片手で割ってるのを見て、ワタシにも出来るに違いない!と思いチャレンジしましたよ。(実はやったことないんです)

先ずは、何も調べずに自分の思うようにやってみたわけです。

卵を適当に持って、ボウルの縁で卵を割ったら卵の殻が中に入ってあらららら〜〜〜と思ってたらその間に卵の中身が出そうになったので慌てて殻を割ろうとしたら黄身が傷ついてボウルの中は悲惨な状態。


不器用か。


もう〜〜〜〜〜(笑)

それで、やっぱりちゃんと調べないと!と検索したらたくさんあるんですねー片手で卵を割る方法。

まず、あれです、卵の持ち方ですよ。

卵の先が尖った方を上にして野球のボールを握る感じで持つ

平らなところで卵をコンコンして割れ目をつくる

手を上下(左右?)に開く感じで殻を割る

綺麗に割れた!
不器用(そうでもないよ?笑)なワタシでも完璧。


感動ー。今までやってなかったっていうのが不思議だけど、ここにきて一つマスターしましたよ。

で、この卵で何を作ったかというと、だし巻き玉子。今日のだし巻きは簡単に白だしを使って作りました。卵2個に対し白だしを小さじ1弱入れるだけ。うん、美味しい。白だしって優秀です。

写真がないけど、ホントに完璧だったからね!(笑)

*****

◆今日のカレンダー

『成功の秘訣は断固とした決意にある』

ディズレーリ 1804〜1881
イギリスの政治家


この名言はこのまんまかな〜。
絶対やるぞ!という決意があれば目標に向かって頑張る事が出来ますもんね。

と、ここでまた思い出しましたよ。松下幸之助さんの言葉を。

少し書いてみますね。

『人生心得帖』著者 松下幸之助よりーーーーー

「地位や名誉や財産といった基準に重きを置きすぎて、自らの天分を生かし、使命に生きることの大切さが忘れられている傾向が、会社や団体にも学校にも少なからず見られるようです。それが、不満や悩みを増やすことに結びついているのではないかと思うのです。」

「自分に与えられた天分を完全に生かしきる。そこに自他ともに満足し得る人間としての正しい生き方があり、成功がある。」

ーーーーー

天分を生かしきる、か…。

ワタシの天分とは。

うぅ〜〜〜〜〜また宿題もらっちゃったー(笑)

でもね、この天分は日常生活の中から見いだせるんだって。

そして、必要なものは

【強い願いと素直な心】

納得だわ。

日々、自分の強みを知るためにアンテナを張り巡らせ、やってきたチャンスは逃さない。

素直な心があれば、物事を正しく判断し行動することが出来る。



って書いてみたけどわからない。

天分なんてあるかしらワタシに。

ずっと探してるんだけどねー。



明日は月曜日

新しい一週間の始まり

頑張りますか!


では、また明日

おやすみなさい

f:id:yume-oi:20170508170638j:plain

 

私は確かに、統合失調が寛解している。

家事も、人付き合いも、お金の計算も

全部ふつうにできる。

 

第三者からみて、私が統合失調症の患者だったことがある、などとは

誰一人思わないだろう。

 

けれども何となく重い心、必要最低限の家事しかしたくないし

必要最低限の家事しかやってこなかった。

 

だからといって、家がメチャメチャ、とかそういうことではない

一応片付いているし、洗濯も毎日のようにしている。

 

けれども、もう一歩踏み込んだ家事

例えば、古着を始末する、とか

ガス台の下をきれいにする、とか

オーブントースターの下を掃除するとか

 

そういったことがやりたくない

目に見えるところは一応きれいになってはいるが

細かいことはやりたくない、という具合である。

 

ところが、この数日、やる気が起きている。

理由はわからない。

 

植物を植え替えたり、新しい花の苗を買ってきたり

何だか生き物も買いたい気分になってきたり。

 

本当は手乗り文鳥が買いたいのだが、

金魚を飼ってみようかな、と思ったり。

 

自分の気分の変化に驚いている。

もしかして躁状態なのだろうか?

 

 

先週は毎日浴びるほど美味しいクラフトビールを飲んでいたからさ。

今じゃ飲まないと手が震えるようになっちゃったんだ。

それでもビールに手を出す気になれないのはやっぱりきみが僕の世界から消えてしまったから。

あの日の最後の一杯を飲んでから僕は一滴もアルコールを口にしていないし食欲も無くなってしまったんだよ。情けないね。

あの日は夕方から突然の豪雨に見舞われた。

きっと浦和の空もきみがこの世界から消えてしまうのが悔しくて泣いているんだろうなって僕は思ったんだ。

f:id:kun-maa:20170729155709j:plain

スポンサーリンク

前夜に「それじゃ明日は午後4時にここ集合ね!」って勢いで約束をした僕を含めた常連のために開店と同時に混み合っていたのにカウンターの奥の一列をきみは確保してくれていた。

正式に予約をしたわけでもないのにこんなふうにさりげなく僕たちの居場所を用意して待っていてくれる。そんなゆるい優しさがきみの魅力だったし最後の日までそんな迎え方をしてくれて本当にうれしかったんだ。

 

それしても最終日って言葉の持つ破壊力はすごい。

普段は空いている時間帯から常に満席状態が続いていたから。

いつもこんな感じだったらもしかしてきみがいなくなることもなかったのかな...なんてぼんやりと考えたりしたんだ。

常連さんたちとおしゃべりしながら美味しいビールを飲み続けてまだ外が明るいうちから大騒ぎしちゃってさ。

そんな大騒ぎもきみがいなくなっちゃうことを嘘にしたいような、もしかしたらこうやって楽しく騒ぎ続けていればこの空間と時間がずっと続くんじゃないかってみんなどこかで思っていたんじゃないかな。少なくとも僕はそんなふうに感じていた。

f:id:kun-maa:20170731174244j:plain

あの日の料理は注文しなくてもまだ食べてなかったものや最後に食べたいと思っていたものが勝手に出てきたよね。ちょっと驚いちゃって、僕の心が読めるんだろうかって割と本気で思ったんだよ。

f:id:kun-maa:20170729162333j:plain

f:id:kun-maa:20170729175519j:plain

f:id:kun-maa:20170729170905j:plain

その場にいたみんなで何回も乾杯したね。すごく楽しかったな。

f:id:kun-maa:20170729203800j:plain

f:id:kun-maa:20170729203821j:plain

僕は午後4時集合仲間のひとりから大きなマースジョッキでビールをご馳走になったりして。ずっとガヤガヤと賑やかな店内で時間を忘れるくらい本当に心の底から楽しかった。きみがいなくなっちゃうなんて嘘みたいだ。

f:id:kun-maa:20170729200407j:plain

あんまり楽しすぎて僕はずっとあの場を離れがたくなっちゃってさ。

自分でもマースジョッキをお代わりしちゃった。そういえばいつもパイントグラスばかりでマースで飲んだのは初めてだった。

f:id:kun-maa:20170729213129j:plain

新しい知り合いができたり常連さんたちの名前を知ることができたりしたのはとてもうれしかったんだけど飲むほどに時間が過ぎるのが早くなっていって、それが辛くて月並みだけど時間が止まればいいのにってずっと思ってた。

f:id:kun-maa:20170729231652j:plain

気づくと一人減り二人減り......みんなが名残惜しそうに帰っていくの見ているとだんだん考えたくないことが頭を離れなくなってきてね。

もっと酔っ払ってしまいたかったんだけど僕はどんなに飲んでも完全に酔うことができなくて。

終電もビールもなくなってさえ僕は席を立つことができなくて。

楽しい時も辛くて泣きそうな時も好きな人を連れてきた時もいつも温かく迎えてくれたきみとの時間が一斉によみがえってきて僕は不意に泣きそうになっちゃったんだよ。

ああヤバいな...泣いちゃうなって思ったら僕よりも先に午後4時集合仲間の女性のひとりが泣き出しちゃって。

f:id:kun-maa:20170731174031j:plain

みんなが彼女に注目していたから僕がこらえきれずに零した涙は誰にも気づかれなかったはず。そりゃおっさんの涙より女性の涙の方が注目に値するよね。

店長と看板娘からそれぞれ最後のあいさつがあって最後まで残った人たちで記念写真を撮って僕らは解散した。

f:id:kun-maa:20170731173958j:plain

最後は笑顔で別れることができて本当によかった。

とぼとぼと歩く深夜の浦和の街はとても静かだったよ。周囲の風景はまるで目に入ってこなくて僕は他のお客さんとぽつぽつと話しながらきみと過ごした時間のことをずっと考えていた。

もうきみはこの世界に存在しないんだと思っても全然実感がわかなくてさ。それなのになんだかとても虚しくて。

 

僕は失恋すると好きだった人のことを思い出して胸がギュッて痛むんだ。そんな経験は何度もしてきて慣れているのにきみを失った後の空虚さには不思議と痛みがない。

まるで命の一部を気づく間もなくスッと抜き取られていつの間にか大きな穴があいてしまったような感覚と恒久的な喪失感に包まれてしまって僕は途方に暮れているんだよ。

ここから立ち上がってちゃんと自分の脚で歩き出さなきゃって思いながら惰性で仕事に行き、作り笑いで無為に時間を過ごして何もする気にならない虚ろな自分に戸惑ったままだ。

そして不意に襲いかかる静かだけど深く切ない悲しみに涙をこらえて抗いながらきみの姿や空気やすべての想いがフラッシュバックする中で僕は本当にきみのことが大好きで僕の居場所はきみだったんだなって思う。

いままでありがとう。さよなら僕の CRAFT BEER BABY !

きみのいない世界は本当につまらなくてさ。

いつかこんな世界にも僕は慣れてしまうんだろうか。

f:id:kun-maa:20170729160056j:plain

スポンサーリンク

このブログを気に入っていただけたら、ちょくちょくのぞきに来ていただけるとうれしいです。そして、とっても励みになります。

RSS登録していただける方はこちらのボタンをご利用ください。 

follow us in feedly    

クリス・ハート 新曲「 I LOVE YOU」公式YouTubeフル動画PVMVミュージックビデオ

 

クリス・ハートとは

アメリカ・サンフランシスコ出身の歌手。

日本テレビ系列のテレビ番組「のどじまん ザ!ワールド」に出演して注目を集めた。

24歳で来日、自販機のセールスマンをやっていた。

 

スポンサーリンク

 

I LOVE YOU

I LOVE YOU

  • クリス・ハート
  • J-Pop
  • ¥250
  • provided courtesy of iTunes

 

 

I LOVE YOU

I LOVE YOU

  • アーティスト: クリス・ハート,H.U.B.,田中琴乃,田中秀典,秦基博,坂詰美紗子,福田貴史,飛内将大
  • 出版社/メーカー: ユニバーサル ミュージック
  • 発売日: 2014/02/26
  • メディア: CD
  • この商品を含むブログ (1件) を見る
 

 

 

 

知人の親戚などを含め、立て続けに亡くなった。
「えっ?入院?」と驚いている間に亡くなった人が多く
本人を含め、親戚や友人も慌てただろうなぁ、と思う。

ということで、「私のお葬式に流す曲を決めたから!」と
夫に宣言し、
「はぁ?」と、いつものように呆れられた。

正直、信仰心はあまり持ち合わせておらず、
直葬(病院から火葬場へそのまま行くこと)でも
全く気にならない!
お金は生きている人に使ってこそ意味がある!と思っているけれど、
お葬式は生きている人のためにするんだなぁ、と思わされる
お葬式にもいくつか参列した。
それなら、私のリクエストも少々、取り入れていただければ…。

曲は断然、”Your song"。
しかも、エルトン・ジョンではなく、
イギリスのThe X Factor(アメリカンアイドルのようなもの)で
Your songを歌ったあの人のバージョンで!と指定が細かいのは
ご愛嬌。
いい声なんです。

www.youtube.com


Your song,歌詞を説明するまでもなく、なのですが、
”How wonderful life is while youre in the world"
(あなたがいる世界に生きられるなんて、なんて素敵なことなんだろう)
という歌詞に、毎回、「本当にそうよね~」と相槌を打つ。
いま仲良くしているパルたちも、同じ時代を生きているからこそ
文通ができるわけで、
「この時代でよかった!」と思う。ちょっとのすれ違いがあれば
きっと文通してなかっただろう国や地域の人々。
「出会いに感謝!」なんて、どっかの居酒屋かラーメン屋に
書いてにありそうなことを言おうとは思わないけれど、
”How wonderful life is while youre in the world"とは思う。

もう一曲はThe X Factor USAから。Feeling Good.
いろんな人がカバーしているけれど、この子の歌い方が一番好き。

www.youtube.com

Birds flying high you know how I feel
Sun in the sky you know how I feel
Breeze driftin on by you know how I feel.

(鳥たちも高く飛び、私がどれだけいい気分か
空にある太陽、私がどれだけいい気分か、
そよ風が流れ、私がどれだけいい気分か)

Its a new dawn
Its a new day
Its a new life for me yeah
For me
And Im feeling good

(新たな夜明け、
新たな一日、
私の新しい人生、
私にとっての
それにすーっごく気分がいいのよ)

闘病した人、急に体調を崩してそのままになった人、
ロッククライミングするほどの元気と若さがあったのに
心臓発作で帰らぬ人になった人、
死の間際は苦しかったかもしれないけれど、
きっといまは”feeling good” (いい気分)と肉体を離れて
思っていると葬式に参列するたびに思っていた。
私なら絶対にこの歌を歌っている気がする。

Its a new dawn
Its a new day
Its a new life for me yeah
For me
And Im feeling good

Oh freedom is mine
And I know how I feel

(ついに自由になった
それをいま感じている)

 

地酒のススメ

2018/03/10

Qです。 このまま暖かくなるかとおもいきや、また寒くなりましたね~。 寒い+花粉のダブルパンチにやられてます さて、まだまだ寒いこの時期は、鍋と日本酒が合う季節 日本酒って苦手な人が多い気がしますが、おいしい日本酒を飲むと好きになれると思います。 「純米酒」であることと、そこそこ「精米歩合」が低いことに注目して、 飲み比べ をしてみることがお勧めであります。 そうしているうちに、素敵な逸品に出会えるんじゃないでしょうかね。 はい。 で、今回、飲み比べるのは、地元滋賀県のお酒。「松の司」でございます。 DCIM0292.jpg 左2本は冷酒で飲むために購入したモノ。値段は1本4000円ちょっとと、3500円ぐらい。 DCIM0294.jpg 左のモノ。俗にブルーと呼ばれている人気のお酒です。 精米歩合が50%ってことは、半分削って捨てているってことですね。 このくらいの精製歩合だと、かなり透き通る味わいになります。 右のモノ。精製歩合55%なのでちょっと格は落ちますが、 普段飲むならこれで充分。 これらは大量に飲む酒ではなく、 おちょこに2杯ぐらい飲むのが、贅沢な気分を味わえて良いかと思います。 4本のうちの右側2本は熱燗で飲むために購入したモノ。1本2500円ぐらい。 DCIM0295.jpg 熱燗だと辛口になるけど、まろやかさも出るのよね。。。 これらは1合ぐらい飲みたいかな。 地酒を飲むのって、地域の経済にも貢献するので、大切なことかな~と思います。 それに、地酒ってのは、作られた地域の料理に合うようにできていると感じます。 だから、滋賀県では滋賀県の地酒を飲むのがいいのかな。 家族での飲み比べのあとは、食洗機が… DCIM0447.jpg 計画的に飲まないと洗えなくなりますね~ 当ブログを応援していただけるみなさま、 下記リンクのうちのどれか1つをクリックしていただけると嬉しいです にほんブログ村 住まいブログ 一戸建 一条工務店へ
にほんブログ村 にほんブログ村 住まいブログ 一戸建 平屋住宅へ
にほんブログ村 にほんブログ村 花ブログ 芝生・芝生管理へ
にほんブログ村 人気ブログランキング

にほんブログ村 トラコミュ 一条工務店 収納へ
一条工務店 収納