ぼくLog

子持ち、車持ち、マンション持ちの僕の日常を綴ります。車と、ラクをしたい一心で覚えたエクセルVBAを中心になりそうです。

Timer関数を使ったストップウォッチ|エクセルVBA

f:id:yt4u:20160704215724j:plain

エクセルVBAで経過時間を計測するには2つ。

  • Timer関数を使う
  • Windows API の timeGetTime を使う

Windows API を使ったストップウォッチはこちらの記事をご参照ください。

yt4u.hatenablog.com


今回はTimer関数を使ったストップウォッチを作ってみました。

Timer関数とは?

午前 0 時からの経過秒数を表す単精度浮動小数点数型 (Single) の値を返します。
Microsoft Windows では、Timer 関数は秒の小数部を返します。Macintosh では、タイマー刻みは 1 秒です。

Windowsであればミリ秒の計測も可能です。ただ、APIのtimeGetTimeと比較すると計測の正確性がやや劣るとの指摘が散見されます。


実行用標準モジュールを用意

さっそく試してみます。

標準モジュール「blMdlTimer」

Option Explicit

Sub サンプル1()
  Const cRow            As Long = 1000
  Const cCol            As Long = 100
  Dim dblTimer          As Double
  Dim lngR              As Long
  Dim lngC              As Long
 
  dblTimer = Timer
 
  With ActiveSheet
 
    For lngR = 1 To cRow
    
      For lngC = 1 To cCol
      
        .Cells(lngR, lngC).Value = lngR * lngC
      
      Next lngC
    
    Next lngR
  
  End With
  
  
  MsgBox Timer - dblTimer
  

End Sub

最初に、処理開始時の時間をdblTimerに格納します。

その後、1~1,000行、1~100列に適当な数字を入れるようにしています(この処理自体はなんの意味もありません)。

最後に、その時点の時間から処理開始時点の時間を差し引くことで、処理に掛かった時間を取得しています(ここではメッセージボックスで表示しています)。


はい、以上です。

そうなんです。Timer関数は非常にお手軽に使える関数なんですね。APIのtimerGetTimeと比べると圧倒的に簡単に使えます。

時間計測の正確性にやや難ありなんて話もありますが、ミリ秒単位のシビアは時間計測が必要でなければTimer関数で十分なんですね。


ニケシュ・アローラの退任劇きっかけでソフトバンクの株主総会の動画見たら孫さんすげぇーってなった話

孫さんの後継候補だったにも関わらず突然の退任となったニケシュ・アローラに対してSECが調査に乗り出してるとか。

www.nikkei.com

退任から遡ること今年の1月、とある投資家グループからアローラ氏の適性や利益相反を問う書簡がソフトバンクに送り付けられていて、6月20日にソフトバンクの特別調査委員会は「シロ」判定を下したわけですが、その翌日にアローラ氏の退任発表。

代表取締役の異動(退任)に関するお知らせ | プレスリリース | ニュース | 企業・IR | ソフトバンクグループ

翌22日の第36回定時株主総会には代表取締役副社長として席に座るものとして事前に株主に通知が行っていた中での退任劇だったので、誰しもが「あやしすぎる、、、」と思わざるを得ないところ。アローラ氏がシニア・アドバイザーを務めるシルバーレイクというPEを手掛ける会社との関係を指摘する報道なんかもあったりしますが、真相はなんともわからないところであります。

・・・といった中で、なんとなくソフトバンク株主総会の動画を見始めたら、面白すぎて孫さんすげぇーってなった話です。


ひとまず動画はこちらです

第36回定時株主総会 | ソフトバンク

動画の長さは2時間23分と映画一本分以上!実際の開催時間は2時間51分で過去最長を記録したとか。

冒頭、ニケシュのお別れの挨拶から始まります。

ソフトバンクは素晴らしかった、と。

退任理由の詳細について触れられることはなかったわけですが、挨拶が終わって立ち去るニケシュに孫社長が小さい声で「サンキュ、ニケシュ」と呟く横顔にはなんとも言えない哀愁を漂わせています。

朝起きたらニケシュに電話して、夜寝る前にもニケシュに電話して、っていうオシドリ夫婦生活を送っていたにも関わらず別れなくてはならなくなったわけですから、思うところがたくさんあるのでしょう。


そこから足もとのソフトバンクグループの説明に入ります。

国内通信事業に関して特筆すべきはフリーCF創出力の高さ。

f:id:yt4u:20160701235118j:plain

事業セグメントがFY15Q3に少し変更になったので過去との比較がやりくくスライドの通りFY14との比較しか見れないわけですが、国内通信事業は安定した収入がある一方で、設備投資が一巡したことから利益が出やすい体質になってきている、という流れは変わらないようです。

この安定収益源があるから孫さんは傍目から見ると博打にも映る大型投資ができるわけですね。


次にスプリント。

これまでみんなの席を回ってゴミを回収してくれていた清掃員に辞めてもらって各自でゴミ箱に捨てに行くようにしたとか、最初からそうしてろよ的な取り組みを積み重ねてコスト削減を進めたことも相まって営業利益は黒字化。純利益の黒字化も近い。

f:id:yt4u:20160702002847j:plain

Tモバイル買収失敗で全米進出の出鼻を挫かれて一時意気消沈していた孫さんですが、やっと光が見えてきた。おかげで孫さんの頭のテカリも絶賛回復中。


次にヤフー、ペッパーに触れたのち、アリババに始まる投資実績へ。snapdealなどいくつか取り上げてその絶大な伸び具合を、いかにもソフトバンクらしい絶対値を示さず伸び率だけを強調するスライドでご紹介。

とはいえ、こうした過去の投資があったからこそ、この6月に立て続けに発表していた投資資産の資金化という果実が得られたわけです。

f:id:yt4u:20160702002851j:plain

ガンホー株の売却なんかも騒がれていましたけど、こうしてみると小粒ですね。

これまでアリババ株なんて特にそうですけど、含み益すげぇー、でも売ることないんでしょ、なら含みは含みでしかないよね、ってちょっと冷めた目で見る向きもあったわけです。でも、こうして実際にキャッシュ化したとなると見る目も変わりますね。

注目されるのは今回キャッシュ化した2兆円弱を何に使うのか? そもそも'16年3月末時点で約2.5兆円の現預金を持っていたところに2兆円追加で都合4.5兆円。何もしないはずもないですが、今のところ特にアナウンスもないのでどうなるのかは分かりません。債務の返済に回すのか、はたまた大型投資が出てくるのか。

ニケシュの退任発表と同時にリリースされた顧問就任のリリースを見ると、「いくつかのクレイジーな構想も実現したい」って孫さん言ってますので、なーんか飛び出してくるんでしょうね。


そのクレイジーなのってナニ?ってことになると、次に続く「Singularity(シンギュラリティ)」というのがヒントになるのでしょうか。

f:id:yt4u:20160702221327j:plain

「人類史上最大のパラダイムシフト」

・・・かなり気合を感じる入り方です。

そして孫さんは「この『シンギュラリティ』が何かご存知ですか?」。
会場に問いかけます。

およそ3%の人の手が挙がったようですが、残念ながらぼくは知りませんでした(汗)


ここでの「シンギュラリティ」は技術的特異点のことで、それが何かというと、、、

f:id:yt4u:20160702221643j:plain

そう、人工知能が全人類知能を超えるときを指しています。

孫さんは言います。「Google検索などに代表されるように知識の面では既に人間を超え始めている。今度は知恵の面でも人間を超え始めるんです。」

ここ数年、ロボットだ、自動運転だ、VRだ、ディープラーニングだとなんだと、非常に盛んになってきています。そういったAIといったものに未来を感じる機会が多くなってきてはいますが、その知能水準は言ってしまえばまだ小鳥程度といった印象です。まだまだ人間の知能水準には到底及ばない。

それが近い将来、人間の知能、それも人間ひとりの知能だけでなく、全人類の知能を凌駕する人工知能が形成されるというのです。

このシンギュラリティを提唱する人の中で有名なのがレイ・カーツワイル*1。彼は、人工知能が全人類知能を超えるとき、つまりシンギュラリティは2045年に来ると予測しているようです。その世界は、たとえばヒトの頭脳はすべてデジタル化可能、ヒトの臓器はナノロボットで代替可能になっていてヒトの「死」がなくなっていたり、完全なVRの世界にヒトが存在するとか。完全にマトリックスとかターミネーターの世界ですね。本当にそんなときは来るのでしょうか?


孫さんは来ると信じています。そして、人工知能と人類が共存する世界を作るために人生を捧げると。


そして、社長続投を決意した理由もここにあると語ります。

「60歳の誕生日パーティーで、乾杯のあと『明日からニケシュが社長になる』。そういって皆を驚かせるつもりだった。でもシンギュラリティを前にして、もう少し社長でいたいという妙な欲が出てきた。それでニケシュに『申し訳ない』と伝えた。」と。

突然の退任劇は、ニケシュ・アローラに起因する部分もあるのかもしれませんが、孫さんの心変わりの要因の方がより強そうです。そして孫さんは社長を「最低でも5年、長くて10年」やるようです。つまり69歳まで。

およそ1年前、スプリントの再建が完了したら社長の座を譲ることを示唆していたことを思うと、かなり話が変わってきてますね。

スプリントを再建したら孫さんは引退ではなかったのか?のちの質疑応答でも明らかになるのですが、シンギュラリティと通信の関係について孫さんは、通信網は人間でいう神経なんだといいます。つまり人工知能は単独で存在するのではなく、あらゆるものに神経を張り巡らせるかの如く繋がって存在することになるので、その繋がりを支える通信網が重要なんだと。

こうなると今でこそスプリントの再建に注力しているわけですが、孫さんが見ているのはそれよりももっと先なんだということを思い知らされます。ソフトバンクもスプリントも通信業界でトップに立つとかが目的ではなく、通信はあくまでも手段に過ぎないわけです。

でも、そうなると今のソフトバンクグループに足りないのは何なのか?それは「AI」ということになるのでしょうか。つまり、神経はあるけど頭脳がない。だとすれば、孫さんが次に買収をするとすれば、その「AI」関係のところになるのかもしれませんね。

しかし、孫さんは尽きることがないですね。10年後にはまた「やっぱり社長を続ける」と言ってそうな気がします。株主総会の席上、日本電産の永守会長も言い放っています。

「孫さんは、ホラとウソが混ざったような人間だ」
「69歳になったらまた10年やるって言いますよ」


トコトンやって、そしていよいよ孫さんが社長を引退するとなったとき、こう言うのかもしれません。

「明日から社長はpepperです。でもこのpepperには僕がインストールされています。」




孫さんの目指すところが果てしなすぎて、ぼくはただただ指を咥えて見てしまうだけですが、次の2冊を読むと孫さんの行動力や発想の源泉に触れることができます。そして間違いなくモチベーション上がります(笑)

志高く 孫正義正伝 新版 (実業之日本社文庫)

志高く 孫正義正伝 新版 (実業之日本社文庫)

孫正義の焦燥 俺はまだ100分の1も成し遂げていない

孫正義の焦燥 俺はまだ100分の1も成し遂げていない


株主総会の孫さんのプレゼン。新商品発表会とか新ビジョン発表の場とは違って、盛り上がるような場の雰囲気ではないのですが、孫さんのしゃべり口、間の取り方、テンポのつけ方は流石。ぐいぐい惹き込まれていきます。プレゼンの心の持ち方あたりは、この本が参考になります。

孫正義 奇跡のプレゼン (単行本)

孫正義 奇跡のプレゼン (単行本)

*1:レイ・カーツワイルは、ひと昔前はそれこそ変人扱いだったようですが、2012年にGoolgeに入社。現在はAI開発の総指揮を執っているようです。

クラスとCollectionを使ったストップウォッチ|エクセルVBA

f:id:yt4u:20160629211204j:plain

エクセルVBAで経過時間を計測するには2つ。

  • Timer関数を使う
  • Windows API の timeGetTime を使う

Timer関数を使ったストップウォッチはこちらの記事をご参照ください。

yt4u.hatenablog.com


今回は、Windows API の timeGetTime を使って、クラスとCollectionを活用したストップウォッチを作ってみました。


なお、Collectionの使い勝手いいんですよ、っていう話はこちらの記事をご参照ください。

yt4u.hatenablog.com


APIを用意

まず、APIを記述するための標準モジュールを用意。

ここでは、その標準モジュールを「blAPI」とする。
("bl"はBokuLogから取ったものです)

標準モジュール「blMdlAPI」

Declare Function timeGetTime Lib "winmm.dll" () As Long


クラスを用意

ストップウォッチ機能を持ったクラスを用意します。

ここでは、そのクラスモジュールを「blClsStopWatch」とする。

クラスモジュール「blClsStopWatch」

Option Explicit

Private mlngStartTime             As Long             'スタートした時間(ミリ秒)
Private mlngQuitTime              As Long             'ストップした時間(ミリ秒)
Private mlngRap                   As Long             'ラップタイム(ミリ秒)
Private mcolRaps                  As Collection       'ラップタイム(秒)コレクション
Private Const mcdblConvRatio      As Double = 0.001   'ミリ秒を秒に変換するための掛け目


Private Sub Class_Initialize()

  Set mcolRaps = New Collection

End Sub


Private Sub Class_Terminate()

  Set mcolRaps = Nothing
  
End Sub


'=========================================================
'スタート時間
'=========================================================
Public Sub Start()

  mlngStartTime = timeGetTime

End Sub


'=========================================================
'ラップタイム
'Rap を返すとともにラップタイムコレクションに格納
'=========================================================
Public Function Rap() As Double
  Dim dblRap            As Double

  If mcolRaps.Count = 0 Then
  
    mlngRap = timeGetTime
  
    dblRap = ((mlngRap - mlngStartTime) * mcdblConvRatio)
             
  Else
      
    dblRap = ((timeGetTime - mlngRap) * mcdblConvRatio)
              
    mlngRap = timeGetTime
              
  End If

  mcolRaps.Add dblRap

  Rap = dblRap

End Function


'=========================================================
'ストップ時間
'=========================================================
Public Sub Quit()

  mlngQuitTime = timeGetTime
  
  mcolRaps.Add (mlngQuitTime - mlngRap) * mcdblConvRatio
   
End Sub


'=========================================================
'経過時間(ミリ秒)
'=========================================================
Public Property Get ProcessingTime() As Double

  ProcessingTime = (mlngQuitTime - mlngStartTime) * mcdblConvRatio

End Property


'=========================================================
'ラップタイムコレクションを返す
'=========================================================
Public Property Get Raps() As Collection

  Set Raps = mcolRaps

End Property

これでストップウォッチクラスが完成です。


実行用標準モジュールを用意

では、作ったストップウォッチクラスの動きを確認してみます。

標準モジュール「blMdlTest」を用意します。

標準モジュール「blMdlTest」

Sub testStopWatch()
  Dim stopWatch         As blClsStopWatch
  Dim colRaps           As Collection
  Dim lngR              As Long
  
  Set stopWatch = New blClsStopWatch
  
  stopWatch.Start
    
  MsgBox stopWatch.Rap
  MsgBox stopWatch.Rap
  MsgBox stopWatch.Rap
  MsgBox stopWatch.Rap
  MsgBox stopWatch.Rap
    
  stopWatch.Quit
  
  Debug.Print stopWatch.ProcessingTime

  
  Set colRaps = stopWatch.Raps
  
  For lngR = 1 To colRaps.Count
  
    ActiveSheet.Cells(lngR, 1).Value = colRaps(lngR)
  
  Next

  Set stopWatch = Nothing
  Set colRaps = Nothing

End Sub

これを実行すると、次々にラップタイムがメッセージボックスに表示されていきます。


最初のメッセージボックスは、「Start」してすぐなのでほぼ0秒と表示されます。

その次からは、前のメッセージボックスが表示されてから、次のメッセージボックスが表示されるまでの時間が表示されます。なので、前のメッセージボックスをじっくり見ていた場合、その時間も加算されていくことになります。

「Quit」でストップウォッチを止めて、そのあと「ProcessingTime」で総経過時間を取得。

あわせて、ラップタイムコレクションを取得し、アクティブシートに出力しています。


ストップウォッチはいつでも使えるようにしておく便利です

時間を計りたいっていう場面は多くはないかもしれません。
(少なくともサンプルコードのようなただラップタイムを表示するだけという使い方はまずないですよね)

とはいえ、処理するデータ量や計算量が多くてちょっと時間が掛かりすぎるなー、っていうときがあると思います。そのとき、どこで時間が掛かっているのかを調べるために、こうしたストップウォッチ機能をいつでも使えるようにしておくと便利だと思います。


ストップウォッチを作るにあたってクラスを使いましたが、クラスって何?というときはこちらの本がオススメです。

そこが知りたい!Excel VBAプロの技 Excel97/2000/2002/2003対応!

そこが知りたい!Excel VBAプロの技 Excel97/2000/2002/2003対応!

エクセルVBAのクラスについて触れているサイトって数少なく、理解しようにも情報が不足しています。それだけでなく、書籍でもクラスに触れているものってあまりないんですよね。その点、この本はクラスを扱う数少ない本です。VBAを書くにあたって検索すれば大体のことが分かるこのご時世、わざわざ指南書を買うことは基本的にぼくはしていませんでしたが、この本は別でした。クラス以外でも内容が充実していて、ぼくが曖昧な理解でコードを書いていたことを反省させられました。2003年発売の本ですが、今でも十分通じます。


Collectionは強い味方|エクセルVBA

f:id:yt4u:20160711215232j:plain

Collection は強い味方です

エクセルVBAで、配列はスタメンです、と言っていましたが

yt4u.hatenablog.com

配列の存在価値を脅かす「Collection」というのがいます。


Collection とは



Collection とは何か?

ぼくの理解では、ひとつの箱(オブジェクト)に複数の要素をひとまとめにして扱えるようにしたもの、ということです。

この Collection の概念の中で代表的なものを挙げるとすれば、Worksheetsコレクションではないでしょうか。

つまり、Worksheetsコレクションは、単一のWorksheetオブジェクトの集合体です。


例えばこのコード。

Sub サンプル1()
  Dim lngWS             As Long

  For lngWS = 1 To ThisWorkbook.Worksheets.Count

    MsgBox Worksheets(lngWS).Name

  Next

End Sub

このコードを実行すると、開いているブックに存在するシート名が、順次メッセージボックスで表示されていきます。


Collectionという観点からこのコードを見ると、こういうことになります。

複数のWorksheetオブジェクトを格納したWorksheetsという箱(Worksheetsコレクション)の中から、単一のWorksheetオブジェクトをひとつひとつ取り出す。
そして、取り出したひとつひとつのWorksheetオブジェクトについて、プロパティの取得・設定やメソッドを実行していく。

まさしく、これがCollectionを扱う基本的な動作と言えます。


Collecitonオブジェクトを使ってみる

Worksheetsコレクションは予め用意されたCollectionですが、自分でCollectionを作ることができます。

それがCollectionオブジェクトです。

Sub サンプル2()
  Dim colSample         As Collection
  
  Set colSample = New Collection
  
  With colSample
    .Add Item:="東京都", Key:="a"
    .Add Item:="大阪府", Key:="b"
  End With
  

  MsgBox colSample(1)   '→ダイアログに東京都と表示される

  MsgBox colSample("b") '→ダイアログに大阪府と表示される
  
  
  Set colSample = Nothing
  

End Sub

コレクションを作成した後、Addメソッドを使ってItemを追加します。

このとき、Addした順に自動的にIndexが割り振られ、このIndexを使ってItemを取得できるようになります。

またKeyの設定は任意ですが、設定した場合はKeyを指定してItemを取得できるようになります。

Keyを設定する際は、重複する値を設定することはできません。
一方、Itemは重複して設定することが可能です。


Collectionを配列のように使う

で、このCollectionの特性を活かして、Collectionを一次元配列のように使うことが可能です。


たとえば次のコードを実行してみると、アクティブシートの1列目に1から10000までの数値が表示されるのが確認できると思います。

Sub サンプル3()
  Dim colSample         As Collection
  Const cntX            As Long = 10000
  Dim lngX              As Long

  
  Set colSample = New Collection
  

  For lngX = 1 To cntX
  
    colSample.Add lngX
    
  Next
  
  
  With ActiveSheet
  
    For lngX = 1 To cntX
    
      .Cells(lngX, 1).Value = colSample(lngX)
    
    Next
  
  End With
  
  
  Set colSample = Nothing

End Sub


これって配列っぽいですよね?!

同じことを配列でやってみるとこうなります。

Sub サンプル4()
  Dim lngSample()       As Long
  Const cntX            As Long = 10000
  Dim lngX              As Long
  

  ReDim lngSample(cntX - 1)

  
  For lngX = 1 To cntX
  
    lngSample(lngX - 1) = lngX
  
  Next
  
  
  With ActiveSheet
  
    For lngX = 1 To cntX
    
      .Cells(lngX, 1).Value = lngSample(lngX - 1)
    
    Next
  
  End With
  
End Sub

このサンプルのような簡単なものだとCollectionの使いやすさが伝わらないかな(汗

ぼくが感じるCollectionの使いやすさは、ハコの大きさを考えずにどんどんAddしていけるところですね。

配列の場合、Redim(Preserve)でハコの大きさを先に決めてから値を入れていく必要がありますが、Collectionの場合それが必要なく、単にAddすればいい。

なので、データの大きさがその時々で変わるような場合、Collectionは威力を発揮してくれます。


Collectionの真骨頂はKey



さらにCollectionの威力をに高めてくれるのがKeyの存在です。

最初の、Collectionの説明で触れたように、Keyを指定することで、それと紐づけられたItemを取り出すことができます。

たとえば、太郎が100円、次郎が200円、三郎が300円持ってるとき、太郎と次郎あわせていくらか?というのをCollectionを使って書いてみると

Sub サンプル5()
  Dim colSample         As Collection

  Set colSample = New Collection
  
  colSample.Add 100, "太郎"
  colSample.Add 200, "次郎"
  colSample.Add 300, "三郎"
  
  MsgBox colSample("太郎") + colSample("次郎")
  
  Set colSample = Nothing

End Sub

こんなカンジで表現できますよね。

このようにデータの塊の中からパパッと欲しいものだけを拾ってこれるのはCollectionの強みです。

配列でも同じようなことを再現はできますが、ここまで簡単にはできません。

Collectionの配列的な使い方にKeyが加わることで、威力は絶大になるわけです。


Collectionと配列、どっちが早い?

で、気になるのがCollectionを使った場合の処理時間。

気になりますよね。

Collectionに限らずですけど、オブジェクトって聞くと、なんか処理が遅くなりそうな気がしてしまうのはぼくだけでしょうか?

そこでさっきのサンプルの処理時間を計測してみーたーとーこーろー

回数 Collection 配列
1 0.656秒 0.316秒
2 0.652秒 0.301秒
3 0.699秒 0.313秒
4 0.658秒 0.308秒
5 0.632秒 0.342秒
平均 0.659秒 0.316秒

配列の勝ち!

Collectionは配列の倍の時間が掛かってしまうんですね。

この時間差を大きいと見るか小さいと見るかは、やろうとすることとかデータの大きさによって変わってくると思います。

なので、どっちを使うかに拘りすぎず、その時々で判断していく必要があるってことになってしまうわけですが、ぼくは極力Collectionを使うようにしています。


KALDIの水出し珈琲ポットで淹れるアイスコーヒーは絶品!

f:id:yt4u:20170514212554j:plain

<2019/07/28追記|2018/06/10追記|2017/06/06追記>

ぼくはコーヒーを毎日、少なくとも1リットルは飲むくらい No Coffe, No Life

しかも、砂糖もミルクも入れず、こんなの飲んでたら胃がおかしくなるんじゃないかってレベルで濃いコーヒーが大好き。

サラリーマンなぼくの会社には、オシャンティーなコーヒードリッパーとかマシンは置けません。
なので、普段はドリップパックを愛用してます。

だけど、暑い季節になってくると、やっぱりアイスコーヒーがいいなぁ、ってなってくるわけです。

それで、会社でアイスコーヒーを飲むために、おウチでアイスコーヒーを作って水筒に入れて持っていくってことを毎年やっています。


お湯で淹れる以上、コーヒーの酸化は免れない

これまでやってきたアイスコーヒーを淹れる方法は2つ。


夜淹れタイプ

1つは、翌日に飲むために、毎晩コーヒーをサーバーに落とし、冷蔵庫で一晩かけて冷やして飲むというもの。

これだと翌朝、すぐにアイスコーヒーが飲めるし、さっと水筒に入れて持ち歩けるようになります。

ただ難点は、いくら冷蔵庫に入れておくとはいえ、淹れてから一晩経つわけですから、やっぱり酸味が増してしまうところ。

朝の段階でであれば美味しく飲むことができますが、水筒に入れて持ち歩いてるうちに、どんどん酸化は進んでいっちゃいます。

コーヒーは好きだけど酸味は苦手で、豆も煎り方も酸味が極力残らないものを志向するぼくとしては、ちょっと許しがたいんですよね。


朝淹れタイプ

もう1つのアイスコーヒーの淹れ方は、毎朝、コーヒーを淹れて、たっぷりの氷で一気に冷やすというもの。

これだとアイスコーヒーを作った直後は格別の美味しさです。

ただ難点は、朝ギリギリまで寝ている派のぼくとしては、コーヒーを淹れるために割かれる時間がやるせなくなることもしばしば。
ゆとりをもって起きる方であれば、朝にアイスコーヒーを作るのはいいかもしれません。

そしてやっぱり、水筒とかに入れて持ち歩いているうちに酸化が進んでしまいます。


そう、いずれにしても熱湯でコーヒーを淹れた以上、酸化の進行からは逃れられないんですよね。

そんな悶々とした気持ちを抱きつつ、やっぱりアイスコーヒーが飲みたいが故に、酸化の進行には目をつぶってきました。


水出し珈琲ポットは酸味の嫌いな珈琲好きの救世主

そんな中、ふらっと寄ったKALDIあったんですよ!


で、買っちゃいました。これ。

f:id:yt4u:20160608214305j:plain


そう、水出し珈琲ポット。税込999円。


はい、開けました!

f:id:yt4u:20160608214310j:plain


コーヒー投入!

f:id:yt4u:20160608214313j:plain

説明書見るとコーヒー80gに対して水1リットルの割合で作ってね、ってことになっています。

それで、ここまで入れたらコーヒー80gだよってラインが示されているのですが、でもね、8gスプーンで10杯入れても、まだまだそこに達しないくらい高いレベルが要求されるラインになっています。

なので、最初から要求を無視して8gスプーン10杯で作ることを決断。


で、水を投入!

f:id:yt4u:20160608214316j:plain

(電子ケトルで入れてるのは手頃なポットがなかっただけで、お湯を入れてるわでけはありません汗)


あとは、冷蔵庫に入れてコーヒーが抽出されるのをじっくり(寝て)待つのみです。

f:id:yt4u:20160608214319j:plain

はい、翌朝になりました。

f:id:yt4u:20160608214322j:plain

ストレーナーと呼ばれるフィルターを外し

f:id:yt4u:20160608214327j:plain

グラスに注げば出来上がり!

f:id:yt4u:20160608214334j:plain


うまいっ!

しっかりと美味しいアイスコーヒーになっていました。

ちなみにホット用に中挽にした粉を使ってもやってみましたが、さすがにちょっと薄めの仕上がりになりました。やはりアイスコーヒーを作るときは細挽の方がいいですね。

求めるテイストに対してどのコーヒーを使うか、量をどうするかなどは、豆、煎り具合、挽き方によって変わってくると思いますので、試行錯誤を重ねる必要がありそうです。

コーヒーを買うとき、いつもぼくは加藤珈琲を利用しています。


本来の水の入れ方は、ストレーナーに入れたコーヒーの粉の上からそっと注いでいくというものですが、これだと結構時間がかかります。

時間がないときは、コーヒーの粉をある程度湿らせたらあとはボトルに直接水を投入して、ティーバッグのごとくコーヒーを抽出するとラクです。

ただこのとき、コーヒーの粉全体に水が行き渡らないままになりがちですので、水を入れたのちストレーナー内のコーヒーの粉をスプーンなんかで軽くかき混ぜて水が行き渡るようにするといいです。



で、水筒に入れて会社に持って行ったわけですが、酸化が進むこともなく、長いこと美味しさを満喫することが出来て満足です。

この夏はコイツに一杯活躍してもらうことになりそうです。


ぼくがたまたまKALDIで衝動買いした水出し珈琲ポットですが、これを作っているのはHARIOなんですね。

Amazonでも買えるようですので、この夏のお供にしてみてはいかがでしょうか。


<2017/06/06追記>

先日カルディに寄ってみたら、今年も水出しコーヒーポット売り出していましたね。

ただ、色が違うぅ!!

f:id:yt4u:20170606212607j:plain


フタの部分が青色になっていました。

HARIO直販のものが茶色だから、それと被らないように軽く差別化を図ったのでしょうか、、、


<2018/06/10追記>

前回の追記から約1年。
先日カルディに寄ってみたら、今年も水出しコーヒーポット売り出していましたね。

ただ、デザインが違うぅ!!

KALDI 水出しコーヒーポット

蓋の色は昨年と変わりありませんが、ガラス部に夏感モリモリ!
ファミリーなぼくは”さわやかになったなー”という印象ですが、意識高い系男子には使いにくいデザインになってしまいましたね。


<2019/07/28追記>

さらに1年が経過。 先日カルディに寄って見たら、今年も水出しコーヒーポット売り出していましたね。

ただ、サイズ違いが増えてるうぅ!!

f:id:yt4u:20190728183556j:plain
KALDI 水出しコーヒーポット

一回分/ひとり分が作り易くなりましたね。