プログラマでありたい

おっさんになっても、プログラマでありつづけたい

2015年の注目技術

 2015年の技術的な展望というか、どの辺りを注力するかのメモです。もっと簡単に言うと、やりたいことです。

 インフラ面で言うと、2014年はクラウドやChefの台頭でもやもやしてたのが、Immutable Infrastructureという概念で方向性がはっきりしてきたと思います。それに加えて、Dockerあたりがブレイクスルーだったのではないでしょうか。
 では、2015年は何か?最近、IoTなどよく聞きますが、本質的には2000年くらいからずっと進んできた、何でもインターネットにつながる世界が低コストで実現できる状態になっているのだと思います。
 そうなるとインフラのあり方も、また少し変わってくると思います。従来はクラウドだAWSだといっても、オンプレの延長で移行していたケースが多かったと思います。それがよりクラウドネイティブな作り方に変わってくるのではないでしょうか。具体的に言うと、EC2のインスタンスを立ち上げてゴニョゴニョするというやり方はコスト的にもスピード的のも見合わないというような状況になると思います。
 その辺りを考えると、注目の技術はAWSで言うとLambdaやDynamoDB・S3のように、フルマネージドのコンピュート・リソースになります。またそれらのリソースをクライアント側から直接扱う為の認証・認可の仕組みです。CognitoであったりIAM Roleの使い方ですね。その辺りのアーキテクチャを見てると、モバイル関係が先行しているしヒントになることが多いです。
 インフラのあり方が根本的に変わる、その動き始めの年になりそうな予感です。今年は、もう一度モバイルを切り口に、じっくり今後のアーキテクチャを考えてみようかと思っています。ということで、Cognitoで遊びだしています。

2015年の目標

 忘れないように2015年の目標をメモっておきます。去年は、書いて1ヶ月で忘れました。

本を1〜2冊出版する

 1冊は、現在執筆中。可能であれば、もう1冊くらい出したいです。一人で書くと負担が大きすぎるので、チームで書くことを前提です。

Kindle本を書く

 出版社からの本とは別に、個人でKindle本を書いてみようと思います。分量としては40ページくらいで、好きなテーマで書いてみたいです。書きたいテーマとしては幾つかあるので、夏くらいに時間を作る予定です。

モバイル・アプリ再入門

 CogniteやAppStream,LambdaなどAWSの動向をみていると、今年はモバイル・アプリの作り方が根本的に変わりそうな気がしてきています。いい機会なので再度モバイル・アプリ開発に挑戦して、アーキテクチャを考えてみます。

資格試験

 AWSの資格試験がいろいろ新設されたものの、全然受けていないので夏くらいまでには全部とりたいです。あとRubyのお作法をちゃんと学ぶためにも、Rubyも受けてみようとおもいます。

ワークバランス

 仕事・家庭・個人ワークのバランスがとれていません。それぞれ適正な形にできるように工夫してみます。具体的にいうと仕事の時間減らすしかないので、質を高めてアウトプットの総量が変わらないよう目指します。

ワイン・エキスパート

 申し込みが6月まで、1次試験8月、2次試験9月。まずは申し込みから!!

記録をしっかり

 ワインや本の感想など、少しは残せないと後で振り返れません。毎年宣言しているものの、実現できていないので、今年こそは仕組み見なおして改善します。

英会話

 今年こそはRe:Inventに行こうと思うので、英会話を練習して現地の人と議論できるようにしたいです。Skype講座でも受けてみようかと思います。

 犬飼いたいです。問題は住居になるので、方策考えます。

まとめ



 忘れないように目につくところに貼っておきます。別途、Googleのスプレッドシートで管理しているものもあるのですが、それは定期的に見返しているので意外に実現してたりします。

See Also:
2014年の目標

2014年の日記の振り返り

 2015年になったので、日記の振り返りです。トータルのアクセス数、328,411件です。2013年に比べると、なんと半減です。直接的な理由としては、はてなダイアリーからはてなブログ+独自ドメインに変更したことにより、検索エンジン経由のアクセスが激減したことです。平均して700〜800くらいあった検索経由の流入が、150程度に減りました。ちょっと不可解なこともあるので、そのうちに調査してみようと思います。
f:id:dkfj:20150102132843p:plain

ブログのエントリー数と人気エントリー



 2014年に書いたエントリー数は82件で、2013年の134件に較べて4割減です。昨年は初めての執筆をしてたということもあり、とにかく時間がなかったです。しかし、時間がないなりのアウトプット術もあるので、その辺りを今年の課題にしたいとおもいます。


 

順位 タイトル 掲載日 ブックマーク数
1 手動でサーバの設定をすることを禁ずる。入門Chef Solo 2013年3月17日
2 Excel VBA+IEでのスクレイピング 2014年12月28日
3 作って覚える転置インデックス、「検索エンジン自作入門」 2014年9月22日
4 何故JSONPでJavaScriptのクロスドメイン通信ができるのか? 2013年11月10日
5 メモリー増設の参考に!!Dellのモデル別、最大搭載メモリー一覧 2012年6月5日
6 AWSのアカウント管理の話 2014年12月7日
7 クローラーとAWSが出会ったら?第3回Webスクレイピング勉強会@東京 2014年10月28日
8 4,000円でMacbookのバッテリーを交換するの話。或いはMacbookの交換バッテリー一覧 2012年6月22日
9 Lambdaで作るクローラー/スクレイピング 2014年12月24日
10 Mac miniを買ったった! (Late 2014 MGEN2J) 2014年10月19日

 検索経由の閲覧が激減したことにより、上位に出てくるのは今年の記事が多くなりました。特に2位の「Excel VBA+IEでのスクレイピング」なんて、書いたのが2014/12/28で3日間のみでこの結果です。バズ効果が凄いのか、今までの検索経由の効果が凄いのか判断に迷うところです。結論としては、昨年は1万ヒット超えがゴロゴロしてたのが、今年は全然ないのでアクセス低迷の結果にはてなブックマーク効果が見えやすくなったというところでしょう。

 ちなみに検索語については、このキーワードがダントツでした。「moneytree 危険」
リンク先のページについては、この「金融機関の口座集約アプリの危険性について」なのですが、記事中に一言もmoneytreeさんの名前を出してないのに検索結果に出てくるというところに、Googleの恐ろしさが垣間見えます。特定のサービスではなく、口座集約アプリ全般に関して危険だなぁと思っているだけです。便利なのは解っているので、スクレイピングではなくシステム連携したサービスを出してほしいものです。

まとめ



 石の上にも三年ではないですが、何事も続けていれば思いもかけないようなことを引き寄せることもあるようです。私の場合は、執筆の依頼でした。また勉強会でも、たまにブログ読んでいますと言ってくれる人もいます。そんな訳で、自分のペースでゆっくり続けていきたいと思います。
 しかしまぁ、検索順位低下については調べて対策うたねばなぁという状態です。それについても、どっかでまとめて公開します。自著である「Rubyによるクローラー開発技法」が、全く検索上位に出てこないのだけは何とかしたいです。

Excel VBA+IEでのスクレイピング

 書くと宣言しながら、すっぽかしていたクローラー/スクレイピング Advent Calendar 2014の11日目です。ExcelのVBAで、IEの操作が出来ます。またその中の機能にDOM操作があります。この二つがあれば、Excelだけでスクレイピングできますよという話です。
 何を隠そう、私が初めてスクレイピングに手を染めたのはこのExcel VBAスクレイピングでした。毎月定期的に所定のデータを観測するという仕事があって、面倒くさくて仕方がない私は記録用のExcelを魔改造して勝手に取得するようにしました。1時間くらい掛かってた作業も、ボタンポチになったので随分楽になったと記憶しています。(結局、ボタンを押すのも面倒くさくなって、毎日サーバサイドで動かすようにしましたが)
 スクレイピングの手始めにピッタリのExcel VBAスクレイピングです。環境の用意が簡単なので、ノンプログラマーでも何とかなるのではとおもいます。

Excel VBA+IEスクレイピングでの主要な機能



 Excel VBAでスクレイピングする場合は、下記のクラス・メソッドを利用します。一部バージョンによってサポートしていないので、ご注意ください。

  1. InternetExplorerクラス

 名前の通りInternetExplorerを操作するクラス。Excelから実行で、IEがポコっと立ち上がる

  1. HTMLElementCollection

 InternetExplorerクラスのドキュメントを扱うプロパティ?

  1. getElementsByTagName

 タグ名からエレメント・コレクションを取得するメソッド

  1. getElementsByClassName

 クラス名からエレメント・コレクションを取得するメソッド
 (XP等では、未サポート?)

  1. getElementById

 ID名からエレメントを取得するメソッド
 (XP等では、未サポート?)

Excel VBA+IEスクレイピングの下準備とサンプルソース



次のライブラリを参照設定します。参照設定、懐かしいなぁ。

  • Microsoft HTML Object library
  • Microsoft Internet Controls

f:id:dkfj:20141227172806p:plain

サンプルソース
手抜きですが、タグ名で取得しています。

Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private objIE As InternetExplorer

Sub main()
    Set objIE = New InternetExplorer
    Dim url
    url = "http://www.hatena.ne.jp"
    objIE.Visible = True
    objIE.Navigate2 (url)
    
    '読み込み完了待ち
    While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
        DoEvents
        Sleep 100
    Wend
    Sleep 100
    
    Dim objDoc As HTMLElementCollection
    Set objDoc = objIE.document
    Dim element As IHTMLElement
    For Each element In objDoc.getElementsByTagName("a")
            MsgBox (element.innerText)
    Next element
    
    objIE.Quit
    Set objIE = Nothing
End Sub

 Excel VBAなので、取得結果をExcelのシートに格納するなどに、絶大な威力を発揮します。Excel VBAなどで検索すると色々でてくるので、ぜひ見てください。

まとめ



 自分としては、もはやExcel VBAでスクレイピングすることはないと思います。しかし、プログラムの実行環境がないよという場合には、Excel VBAという選択肢も良いのではないでしょうか?世の中には、VBAを極めている人は多数いるので、身近な人に聞けるというメリットもあります。ノンプログラマでも、ちょっと頑張れば何とかなると思うので、挑戦してみてはいかがでしょうか?
 また、スクレイピングやクローラーの作成手順を一から知りたい人は、Rubyだけどこの本読むとよいですよ。

See Also:
「データを集める技術」という本を執筆しました
非エンジニアでも何とか出来るクローラー/Webスクレイピング術
プログラミング・レスで5分でサックリWebスクレイピング「kimonolabs」
『Rubyによるクローラー開発技法』を書きました

参照:
クローラー/スクレイピング Advent Calendar 2014
IE自動操作コード一覧(ExcelVBA / VBScript) - Qiita

データを集める技術 最速で作るスクレイピング&クローラー (Informatics&IDEA)

データを集める技術 最速で作るスクレイピング&クローラー (Informatics&IDEA)

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

AWS Lambda Meetup #0に参加した感想

 先日開催されたAWS Lambda Meetup #0に参加してきました。もともと聞きに行く予定だったのですが、主催者の@Keisuke69さんから打診を受けて急遽登壇することになりました。

発表資料



 発表内容は、Lambda Advent Calendar用にネタ的に作ったクローラー/スクレイピングを題材にしています。

Lambdaクローラーの背景



 最初にLambdaのサービスの発表を受けて、SIer脳の私はバッチサーバの代替として使いたいと考えました。なぜならばバッチサーバの運用は、思いのほか面倒くさいのです。レガシーな作りになりやすく、フェイルオーバーなど自動復旧の仕組みが取りづらいためです。そんなバッチサーバを、そもそもサーバレスのLambdaに置き換えると、運用が楽になってハッピーです。
 と言うことでLambdaに注目し、Advent Calendarなどを見ながら情報収集をしています。今のところ、旧来のバッチサーバをそのまま置き換えるのは難しいけど、幾つかの部分は吸収できるなと感じています。それよりも、バッチの考え方自体を変えた方が良いかもと考えています。そんなこともあり、Lambda使ったアプリを一つ作ってみようというのが、Lambdaクローラーを試してみた理由です。

SNSとSQS



 今回の登壇者が口々に言っていたのが、LambdaとSNSの連携をしてくれという要望でした。私もその通りだと思います。一方で、現状のLambdaの仕様だと実行結果が受け取れません。SNSとLambdaが連携しても、果たしてその処理が正常に完了したのかが解らない(そもそも受け取れたのか)という問題があります。
 その点を考えると、現在のLambdaの在り方と全く逆になりますが、SQSをポーリングするような連携機能があれば嬉しいですね。それだと、処理の終了時にキューを消す処理を追加するだけで、バッチ的な使い方がしやすくなります。旧時代的な発想かもしれませんが、使い所は多いのではと思っています。

 

感想



 Lambda Meetupの初回でしたが、発表者も参加者もどちらもレベルが高くかなり刺激を受けました。正直、今回の発表はちょっと触ってみました以上のものではなく、他の登壇者とのレベルの差が大きく申し訳なかったなと思います。一方で面白かった点としては、発表者それぞれが自分のユースケースを元にLambdaを捉えている点です。それだけ、懐が深いサービスなんだと思います。自分としては、SIer的な発想は抜け切れないと思うので、その点を突き詰めてLambdaの利用の仕方を考えていこうと思います。
 またLambdaと直接関係ないのですが、今回の発表の中ではアンダースコア株式会社の諏訪悠紀さんの「Lambda × Mobile の可能性」が一番気になりました。ちょうどモバイルサービスを提供するインフラ構成について考えていたところで、Cognitoの出現でモバイルから直接AWSを使うという手が良さそうだなと思っていました。それを実際に試みている話を聞けて、いろいろ参考になりました。これについては、改めてまとめて見ようと思います。

See Also:
AWS Lambdaで作るクローラー/スクレイピング
Lambdaで作るクローラー/スクレイピング

参照:
Lambda Meetup #0に参加してみて #LambdaMeetup
AWS Lambda Meetup #0 で Lambda × Mobile の話をしてきた | Developers.IO
AWS Lambda Meetup #0

Lambdaで作るクローラー/スクレイピング

 話題のAWS Lambda Advent Calendar 2014の14日目です。クロスポストで、クローラー/スクレイピング Advent Calendar 2014の14日目でもあります。

 re:Inventで発表されて以来、注目のLambdaです。サーバを用意しなくても、バッチを直接実行できるとあって、ユースケースを考えるだけで夢が広がります。今年はクローラー本を出したこともあって、Lambdaで作るクローラー/スクレイピングをテーマにします。

クローラー/スクレイピングとは?



 Webクローラーは、Webサイトを巡回してデータを取得するプログラムです。スクレイピングは、取得したデータから目的の情報を抜き出すことを指します。一般的には、クローラーの中に、スクレイピングの機能を包含していることが多いです。また、特定のページだけ取得してデータを抜き出すことを、スクレイピングと呼ぶことが多いです。

クローラーの機能



 クローラーの機能は、ざっくり分類すると下記の4つです。
今回は、2と3の部分をLambdaで実施します。

1. 巡回先を決定する
2. ダウンロード
3. 情報を抜き出す
4. (データを保存する)

Lambdaクローラーのモデル



 Lambdaクローラーのモデルとしては、次のような形になります。
f:id:dkfj:20141214045906p:plain

 LambdaCrowlerで、指定されたURLをNode.jsのhttpモジュールを使ってダウンロードします。ダウンロードをしたファイルをS3に保存します。保存先のS3にEventの設定をしておき、parseHtmlのLambdaファンクションを呼び出すようにします。呼び出されたparseHtmlは、イベント情報から呼び元のs3ファイルを取得します。ファイル取得後に、cheerioというスクレイピング用のモジュールを利用して所定の情報を抜き出します。今回は、Yahoo!Financeから株価情報を取得する例とします。

Lambdaクローラーの実装



 まずLambdaCrowlerの実装です。諸般の事情により、取得先のURLと保存するファイル名はリテラルで記述しています。

console.log('Loading event');
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
var http = require ('http');

exports.handler = function(event, context) {
    var bucket = 'lambda-crawler';
    var key = 'test';
    var body;
    http.get("http://stocks.finance.yahoo.co.jp/stocks/history/?code=9984.T", function(res) {
        console.log("Got response: " + res.statusCode);
        res.on("data", function(chunk) {
            console.log('chunk: ');
            body += chunk;
        });

        res.on('end', function(res) {
            console.log('end')
            putObject(context, bucket, key ,body);
        });
    }).on('error', function(e) {
        context.done('error', e);
    });

    function putObject(context, bucket, key ,body) {
        var params = {Bucket: bucket, Key: key, Body: body};
        console.log('s3 putObject' + params);

        s3.putObject(params, function(err, data) {
            if (err) {
                console.log('put error' + err);  
                context.done(null, err);
            } else {
                console.log("Successfully uploaded data to myBucket/myKey");
                context.done(null, "done");
            }
        });
    }
};

 注意点としては、http.requestがcallbackを利用している点です。リクエストの終了イベントを拾い、その後にS3に保存するように記述しています。実行すると次のようなログがでます。

START RequestId: 2b379992-8300-11e4-88d6-37d91d3def55
2014-12-13T19:42:26.841Z	2b379992-8300-11e4-88d6-37d91d3def55	Got response: 200
2014-12-13T19:42:26.842Z	2b379992-8300-11e4-88d6-37d91d3def55	chunk: 
2014-12-13T19:42:26.842Z	2b379992-8300-11e4-88d6-37d91d3def55	chunk: 
2014-12-13T19:42:27.022Z	2b379992-8300-11e4-88d6-37d91d3def55	chunk: 
2014-12-13T19:42:27.022Z	2b379992-8300-11e4-88d6-37d91d3def55	chunk: 
2014-12-13T19:42:27.203Z	2b379992-8300-11e4-88d6-37d91d3def55	chunk: 
2014-12-13T19:42:27.384Z	2b379992-8300-11e4-88d6-37d91d3def55	chunk: 
2014-12-13T19:42:27.384Z	2b379992-8300-11e4-88d6-37d91d3def55	end
2014-12-13T19:42:27.384Z	2b379992-8300-11e4-88d6-37d91d3def55	s3 putObject[object Object]
2014-12-13T19:42:27.574Z	2b379992-8300-11e4-88d6-37d91d3def55	Successfully uploaded data to myBucket/myKey
END RequestId: 2b379992-8300-11e4-88d6-37d91d3def55
REPORT RequestId: 2b379992-8300-11e4-88d6-37d91d3def55	Duration: 2558.28 ms	Billed Duration: 2600 ms 	Memory Size: 128 MB	Max Memory Used: 18 MB	

 次にparseHtmlの実装です。非標準のモジュールであるcheerioを利用しています。

console.log('Loading event');
var cheerio = require('cheerio');
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
var http = require ('http');

exports.handler = function(event, context) {
    var record = event.Records[0];
    var bucket = record.s3.bucket.name;
    var key = record.s3.object.key;
    console.log('record:' + record);
    console.log('bucket:' + bucket);
    console.log('key:' + key);
    getObject(context, bucket, key)
    function getObject(context, bucket, key) {
        console.log('s3 getObject');
        s3.getObject({Bucket:bucket, Key:key},
            function(err,data) {
                if (err) {
                    console.log('error getting object ' + key + ' from bucket ' + bucket +
                       '. Make sure they exist and your bucket is in the same region as this function.');
                    context.done('error','error getting file'+err);
                }
                else {
                    var contentEncoding = data.ContentEncoding;
                    var contentBody = data.Body.toString(contentEncoding);
                    parseHtml(context, contentBody); 
                }
            }
        );
    }
    function parseHtml(context, body) {
        console.log('parseHtml');
        var $ = cheerio.load(body);
        var title = $("title").text();
        var stockPrice = $('td[class=stoksPrice]').text();
        console.log('stockPrice:'+stockPrice);
    }	
};

 まずイベントからバケット名とファイル名を取得します。その情報を元に、S3からファイルを取得します。ファイルを取得したら、cheerioでスクレイピングです。cheerioの使い方は割愛しますが、タグ名+クラス名で、要素を指定しています。
 尚、非標準のモジュールを利用しているので、ソースと一緒にモジュールもzipで固めてアップロードする必要があります。

├── node_modules
│     ├── aws-sdk
│     └── cheerio
├parseHtml.js

 上記のような構造のディレクトリをまとめてzip化します。

zip -r code.zip parseHtml.js node_modules/

アップロードしたファイルの中で、どのファイルを実行するかは「File name」で指定します。
f:id:dkfj:20141214051542p:plain

実行すると、次のようなログが出てきます。stockPriceの部分が、今回取得しようとした情報です。

START RequestId: 1d834bf2-8300-11e4-800c-bd34141de807
2014-12-13T19:42:05.492Z	1d834bf2-8300-11e4-800c-bd34141de807	record:[object Object]
2014-12-13T19:42:05.492Z	1d834bf2-8300-11e4-800c-bd34141de807	bucket:lambda-crawler
2014-12-13T19:42:05.492Z	1d834bf2-8300-11e4-800c-bd34141de807	key:test
2014-12-13T19:42:05.493Z	1d834bf2-8300-11e4-800c-bd34141de807	s3 getObject
2014-12-13T19:42:06.174Z	1d834bf2-8300-11e4-800c-bd34141de807	parseHtml
2014-12-13T19:42:07.173Z	1d834bf2-8300-11e4-800c-bd34141de807	stockPrice:7,336
Process exited before completing request

END RequestId: 1d834bf2-8300-11e4-800c-bd34141de807
REPORT RequestId: 1d834bf2-8300-11e4-800c-bd34141de807	Duration: 1920.75 ms	Billed Duration: 2000 ms 	Memory Size: 128 MB	Max Memory Used: 27 MB	

ハマリポイント



 成果物としてのソースは非常に簡単ですが、かなりハマりました。ハマったポイントは、以下の通りです。

  1. そもそもNode.js知らん
  2. S3 Event Notificationのロール登録時に、ロール中にprincipalのserviceにs3.amazonaws.comが必要

課題



 一応完成しましたが、1つ課題があります。最初のLambdaファンクションを呼び出すのを誰にするかです。呼び出し方として、s3 event notification,Kinesis stream, DyanmoDB stream、もしくはプログラムから呼び出すなどの手段あります。そもそも今回Lambdaでクローラーを作ろうと思った目的は、サーバレスで作りたかったからです。どの呼び出し元を選んだとしても、イベント起こす為の起点が必要です。その辺りどうするかがポイントになりますね。
 クローラーという用途で考えると、何らかの方法で取得対象をDynamoDBに登録して、Lambdaを呼び出して結果を記載するという方法があっているかもしれません。もしくは、呼び元の小さなインスタンスを用意して、処理自体をLambdaの潤沢なリソースを使うというのも考えられます。いずれにせよ、Lambdaを使うには、信頼性の高いスケジュール・ジョブの実行主体が必要になります。この辺りもサービス化して貰えるとありがたいですね。

まとめ



 駆け足でしたが、やはりLambdaは魅力的なサービスです。クローラーを作ってると、IPアドレスとリソースの確保が大変です。もう少し色々考察してみたいと思います。ちなみに、Rubyによるクローラー開発技法という本を書いたのですが、リクエストの中で多いのがPython版とNode.js版を出してとのことです。Lambdaが出たことなので、誰かNode.js版書きませんか?

See Also:
KimonoLabsと今後のサービスのあり方のはなし
プログラミング・レスで5分でサックリWebスクレイピング「kimonolabs」
『Rubyによるクローラー開発技法』を書きました


参照:
AWS Lambda Advent Calendar 2014
クローラー/スクレイピング Advent Calendar 2014
全部俺Advent Calendar

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

かなりリッチに3,000円〜10,000円の贅沢ワイン

 2,000円台のワインに引き続き、3,000円〜10,000円の贅沢ワインです。このクラスになると、レストランで飲むと全て1万円超えです。ヘタしたら3万円くらいになると思います。レストランでは手が出なくても、宅飲みであれば何とかなるのが魅力ですね。
 私は年に1回、都内の高級ホテルに泊まるのですが、そんな時に良いワインを1本持ち込んでいます。そんな楽しみ方もあるので、いろいろ試してみてください。

シャトー タルボ



香り高く、ボルドーらしい堂々としたワインです。懐に余裕がある時にボルドーらしいワインを味わいと聞かれると、私はこれを勧めます。
シャトー タルボ 2011 赤 750ml

シャトー タルボ 2011 赤 750ml

テラドーロ ホームヴィンヤード ジンファンデル



 ジンファンデル好きですが、その中で1,2を争うくらいのお気に入りです。記念日や年に一度の都内高級ホテル巡りのお供にと、大活躍です。なかなか手に入りづらいのが難点です。
f:id:dkfj:20140127214318j:plain

ルビコン エステート ジンファンデル



 私が一番好きなワインです。出世魚のように名前が変わっていきますが、映画監督のコッポラーさんがオーナーをしている名門ワイナリーです。アメリカ在住時代、日本からお客が来る度に、ここのワイナリーに連れて行っていました。日本で入手することが出来ず寂しい思いをしていましたが、最近日本でも手に入るようになっています。常に何本かストックしておくようにしています。お勧め

シャトー・イガイ・タカハ シャルドネ 「波紋」



 白ワインはあまり飲まないのですが、これを飲んだ時は思わず旨いなぁと唸ってしまいました。神の雫で見て飲んでみたいと思いながら、なかなか巡り会えませんでした。阪神百貨店で、関西初上陸の時に飲んで結構感動したのを覚えています。
※今見ると、普通にネットで売っていました。

カロン・セギュール



 フルボトルだと1万円を超えるので、ちょっと反則でハーフボトルを紹介。ハートのラベルで有名なカロン・セギュールです。オーク熟成でバニラの香りが高く、ちょっとチョコレートのような甘ったるさがあります。そんなワインなので、クリスマスに飲むのにぴったりです。ハーフボトルでの販売も多いので、ちょっと背伸びすれば手が届く価格も魅力です。

まとめ



 3,000円以上となると、途端に飲んだ経験が少なくなります。もうちょっと広げていかないとなぁと思いました。財布と相談しながら。

See Also:

ワインの品種。まずは3つだけ覚えておけば大丈夫
私が旨いと思う、普段飲みの1,000円台のワイン
ちょっとプチ贅沢な2,000円台のワイン
身も蓋も無い1,000円台のワインの選び方