<?xml version="1.0" encoding="EUC-JP"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Yahoo! JAPAN Tech Blog</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/" />
   <link rel="self" type="application/atom+xml" href="http://techblog.yahoo.co.jp/atom.xml" />
   <id>tag:techblog.yahoo.co.jp,2010://25</id>
   <updated>2010-02-08T11:55:00Z</updated>
   <subtitle>ウェブテクノロジーに特化した技術系ブログ Yahoo!JAPANのサービスの動向や最新の技術情報を発信</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.38</generator>

<entry>
   <title>新検索プラットフォーム「ABYSS」</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat207/cat209/abyss/" />
   <id>tag:techblog.yahoo.co.jp,2010://25.4483</id>
   
   <published>2010-02-08T11:39:08Z</published>
   <updated>2010-02-08T11:55:00Z</updated>
   
   <summary>現在開発を進めているヤフーの内部技術について紹介します。ヤフーの検索エンジンライブラリをベースにした検索サービス構築プラットフォーム。</summary>
   <author>
      
   </author>
         <category term="アーキテクチャ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは、今回は現在開発を進めているヤフーの内部技術について紹介します。</p>

<p><a href="http://services.yahoo.co.jp/">Yahoo!サービス一覧</a>をみるとさまざまなヤフーのサービスがあります。そして、ウェブ検索をはじめ各サービスの多くには検索機能がついています。ウェブ検索はYahoo! Search Technology、通称YSTと呼ばれる検索エンジンをバックエンドに利用しています。一方、ほかのサービスの検索機能はヤフー独自の検索エンジンを利用しています。各サービスの検索機能はそれぞれのニーズに応じて検索条件や結果の表示など細かくカスタマイズされています。そのため、今までは各サービスの検索機能は各サービスごとのエンジニアが検索インデックスを構築し検索インターフェースを開発していました。</p>

<p>このような開発体制では、実際に開発を行う技術者や運用リソースが分散されてしまうなどの問題があり、もっと効率よく手軽に検索機能を開発できないか、という課題がありました。この問題を解決すべく模索したところ、米国Yahoo! Incが提供している<a href="http://developer.yahoo.com/search/boss/">Yahoo! Search BOSS</a>のアプローチに目をつけました。Yahoo! Search BOSSは、提供されている検索APIを利用してカスタムの検索エンジンを構築できるサービスです。日本語での概要は<a href="http://jp.techcrunch.com/archives/20080709yahoo-radically-opens-web-search-with-boss/">Techcrunchの記事</a>が分かりやすく解説されています。BOSSの一部であるBOSS Customのように、検索用のデータを決められた場所にアップロードして必要な設定を行うと専用の検索APIが提供されます。必要に応じてAPI結果を加工して思い通りの検索結果ページを作ることができれば、大幅に開発コストを下げることができるでしょう。私たちはこのアプローチを採用し、さっそく米国Yahoo! IncのBOSSプロジェクト関係者とコンタクトをとり、ヤフーでBOSSをそのまま利用できるかについて検討しました。そしてさまざまな検討を重ねた結果、数多くの<a href="http://services.yahoo.co.jp/">Yahoo!サービス</a>が利用できるフレキシブルな機能を提供するにはBOSSのような検索プラットフォームを自社で独自に開発した方がよい、という結論に達しました。</p>

<p>そして現在鋭意開発を進めているのが、今回紹介する <b>ABYSS</b> になります。もともとYahoo! Search BOSSの利用を検討していたため当初プロジェクトはBOSSという名前が付けられていましたが、新しい名前をつけようということになり、ABYSSという名前になりました。ABYSSは英語で「<a href="http://dic.yahoo.co.jp/dsearch?enc=UTF-8&amp;p=ABYSM&amp;dtype=1&amp;stype=0&amp;dname=1na&amp;ref=1&amp;index=00028300">計り知れないもの</a>」という意味があり、素晴らしいものを作ろうという気概を込めています。プロジェクトが開始されて幾多の困難が積み重なりチームが一時期「どん底」状態になった......というのはヒミツです。(笑)  BOSSが <b>Build your Own Search Service</b> の略であることを受け、ABYSSも <b>Automated Building Yahoo Search Sdk</b> の略であることも意識しています。</p>

<p>それでは改めてABYSSの概要について説明します。</p>
<ul>
	<li>ABYSSは、ヤフーの検索エンジンライブラリをベースにした検索サービス構築プラットフォームです</li>
	<li>オークションなど一部の大規模なサービスや特殊な検索機能を必要とするサービス以外のサービスについて、素早く検索機能が構築できることを目的にしています</li>
	<li>Yahoo! JAPANで作られた検索エンジンライブラリをベースにしています。長年利用されていて実績あるものを大幅にバージョンアップさせ、パフォーマンス向上などいくつかの改善が行われています</li>
	<li>ABYSSは複数のコンポーネント(システム)で構成されています</li>
</ul>

<p><br />
<p>以下にABYSSの構成を表した全体図を示します。</p></p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100208.jpg" align="absmiddle" border="0" /></p>

<p>ABYSSは検索インデックスを構築しABYSSの核となる <b>Index</b> をはじめ、各コンポーネントの制御を行う <b>Workflow</b> やフロントエンドとの仲介を担う <b>Gateway</b> などさまざまなコンポーネントで成り立っています。今回は各コンポーネントの詳細について解説はしませんが、いくつかのコンポーネントにおいてプログラミング言語<a href="http://ja.wikipedia.org/wiki/Erlang">Erlang</a>や大規模分散処理システムの<a href="http://hadoop.apache.org/">Hadoop</a>など先進的な技術を積極的に採用しています。</p>

<p>ではABYSSを利用することで何が良くなるのでしょうか。まずサービス側のメリットとして検索機能を実装するコストが大幅に削減され、ほかの機能改善に注力できます。また、検索エンジンのパフォーマンスチューニングなどABYSS自身の改善を行うことで、利用サービス全体に恩恵が受けられます。ハードウエア面においても、各サービスごとに検索用のサーバーを用意することがなく全体的なサーバー台数の削減につながり、昨今のコスト＆消費電力削減というエコな流れに一役買います。さらに、ABYSSが多くのサービスで利用されることにより検索データやログが集約され、サービス向上に役立つデータマイニング作業が行いやすくなります。</p>

<p>ABYSSのリリースは今年中を予定しています。ABYSSはあくまでも社内のプラットフォームであり内部技術であるため他サービスのようにプレスリリースを行うわけではなく、また皆さんが直接ABYSSの恩恵を受けるわけではありません。しかし、実はこの新しい検索プラットフォームを社内だけでなく一般の方でも利用できるようにならないか、目下検討を進めています。まだお話しできる段階ではありませんが、今後詳細が決まり次第お伝えしていきたいと思います。</p>

<p>TechBlogでは今後、ABYSSの主要コンポーネントの説明や利用している技術の解説、開発にあたり有用な技術Tipsを提供していく予定です。今後ともYahoo! JAPANの検索技術にご期待ください。</p>

<p>（R&amp;D統括本部　角田　直行）</p>
]]>
      
   </content>
</entry>
<entry>
   <title>「Yahoo!検索プラグイン」をより有効に活用する方法</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_6/" />
   <id>tag:techblog.yahoo.co.jp,2010://25.4411</id>
   
   <published>2010-02-01T09:10:07Z</published>
   <updated>2010-02-01T09:17:00Z</updated>
   
   <summary>japan.internet.comにて連載中の進化する「LIFE ENGINE」 - Yahoo! JAPAN 2010年の新技術第二回にて、第一回目に続き「Yahoo!検索プラグイン」について、さらに詳細なご紹介をさせていただきました。</summary>
   <author>
      
   </author>
         <category term="サービス紹介" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは。Yahoo!検索Projectの江副です。<br/><br />
Yahoo!検索の新機能「<a href="http://gallery.search.yahoo.co.jp/welcome">Yahoo!検索プラグイン</a>」は、ウェブ検索の結果がよりわかりやすくなるように、遷移先サイトの画像や有益な情報を検索結果に表示する機能です。<br/><br />
「<a href="http://japan.internet.com/">japan.internet.com</a>」にて連載中の“<a href="http://japan.internet.com/special/yahoo.html">進化する「LIFE ENGINE」 - Yahoo! JAPAN 2010年の新技術</a>”第二回にて、<a href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_5/">第一回目</a>に続き「Yahoo!検索プラグイン」について、さらに詳細なご紹介をさせていただきました。ぜひご覧ください。<br/><br />
<br/><br />
<small>※「japan.internet.com」のご厚意により、1月27日に掲載された第二回目の記事を以下に転載させていただきます。</small><br/><br />
<br/><br />
------以下転載------<br/><br />
<h2>「Yahoo!検索プラグイン」をより有効に活用する方法</h2><br />
「Yahoo!検索プラグイン」は、Yahoo!検索をより便利に使いやすくする機能です。前回の基本的なご紹介に続き、今回は「Yahoo!検索プラグイン」を有効に活用するための基礎知識を、今春より利用可能となる機能を含めて一足早くご紹介いたします。<br/></p>

<h3>■「Yahoo!検索プラグイン」の仕組み</h3>
「Yahoo!検索プラグイン」は意味付けされたサイトの情報を、表示用プラグインによって決められたフォーマットで検索結果に表示する仕組みです。<br/>
<br/>
「Yahoo!検索プラグイン」を機能させるためには、サイト内の情報を意味付けした「構造化データ」と、検索結果に情報を整理して表示するための「表示用プラグイン」の2つを用意する必要があります。<br/>
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100202_1.png" align="absmiddle" border="0" /><br/><small>Yahoo!検索プラグインの仕組み</small></p><br/>
<h3>■「構造化データ」を用意する</h3>
構造化データは、検索結果に情報を表示するために必要なデータとなります。サイト運営者は自サイトに掲載されている情報を意味付けし、「Yahoo!検索プラグイン」にマッチした構造化データとして用意する必要があります。<br/>
「Yahoo!検索プラグイン」ではこの構造化データを定義する方法を2種類用意しています。<br/>
<br/>
<strong>「HTML マークアップ」：</strong>サイト側の HTML に各種情報の意味を識別するためのタグを埋め込みます。サポートするタグのフォーマットは RDFa、Microformat を予定しています。<br/>
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100202_2.png" align="absmiddle" border="0" /><br/><small>マークアップイメージ</small></p><br/>
<strong>「データフィード」：</strong>整理した情報を XML データの形で用意し、Yahoo!検索サイトエクスプローラーを利用して Yahoo!検索にデータフィードを行います。用意する XML データは DataRSS という独自の形式になります。（今春機能提供予定）<br/>
<h3>■「表示用プラグイン」を用意する</h3>
表示用プラグインは、検索結果に表示する内容や表示する際のレイアウトを制御するためのアプリケーションです。今春提供予定のプラグイン開発ツールで、数ステップの設定を行うだけで、どなたでも簡単に作成することが可能です。<br/>
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100202_3.png" align="absmiddle" border="0" /><br/><small>プラグイン開発ツールイメージ（今春提供予定）</small></p><br/>
表示用プラグインはサイト運営者だけでなく第三者も開発することが可能です。ヤフー検索をご利用の方が、よく利用されるサイト用の表示用プラグインを独自に作成することで、検索結果に自分が欲しい情報を欲しい形で表示させることができるようになります。<br/>

<h3>■すべての利用者に生まれるメリット</h3>
「Yahoo!検索プラグイン」は、Yahoo!検索サービスを取り巻く皆様が、ともにメリットを受けられるような仕組みとなっています。この機能をより有効に活用していくことで、その効果もますます高まっていくことでしょう。<br/>
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100202_4.png" align="absmiddle" border="0" /><br/><small>Yahoo!検索プラグインによるメリット</small></p><br/>
いかがでしたでしょうか。2回にわたり「Yahoo!検索プラグイン」の概要をご紹介いたしました。<br/>
<br/>
Yahoo!検索は、利用者にとってより便利で使いやすいサービスとなるよう日々改善を重ねています。今後もさらに便利な機能を続々と提供していく予定です。ぜひ Yahoo!検索サービスをご活用ください。]]>
      
   </content>
</entry>
<entry>
   <title>Mac版Yahoo!メッセンジャー3.0のご紹介</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat207/cat214/macyahoo30/" />
   <id>tag:techblog.yahoo.co.jp,2010://25.4383</id>
   
   <published>2010-01-29T05:05:52Z</published>
   <updated>2010-01-29T08:24:48Z</updated>
   
   <summary>Mac版Yahoo!メッセンジャー バージョン3.0の概要と機能の紹介。</summary>
   <author>
      
   </author>
         <category term="サービス紹介" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは。アプリケーション開発部の佐藤新悟です。1月26日に<a href="http://messenger.yahoo.co.jp/mac/">Mac版Yahoo!メッセンジャー バージョン3.0</a>がリリースされました。今回は、新しいMac版Yahoo!メッセンジャーの概要と、サービスページでは説明しきれなかった機能について書かせていただきます。</p>

<h3>はじめに</h3>

<p>Mac版Yahoo!メッセンジャー3.0は、米Yahoo!ですでにベータ版がリリースされているYahoo! Messenger for Mac 3.0を、日本向けにローカライズしたものになります。</p>

<p>今回のバージョンアップで、コードはすべて新たに書き直されています。技術的に言うとCarbonベースからCocoaベースに移行し、Universal化されました。見た目もイマドキのMacアプリケーションになっていると思います。</p>

<p>バージョン2.6から追加された主な機能は以下の通りです。</p>

<ul>
<li>ボイス</li>
<li>ボイスメッセージ</li>
<li>メッセージアーカイブ</li>
<li>Yahoo!アバターの表示</li>
<li>etc...</li>
</ul>

<p><a href="http://messenger.yahoo.co.jp/mac/whatsnew.html">新機能紹介のページ</a>にもまとまっています。ここから先は、こちらのページで詳しく紹介できなかった機能について解説したいと思います。</p>

<h3>ウインドウのタブ表示</h3>

<p>「環境設定」の「メッセージ」→「メッセージオプション」で、「IMウインドウのタブ表示を有効にする」をオンにしておくと、IM、カンファレンス、チャットで開かれるウインドウをすべて同じウインドウ内のタブとして表示させることができて便利です。Safariなどブラウザのタブ機能をお使いの方にはおなじみかと思います。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100129_1.jpg" /></p>

<p>メッセンジャーのタブもSafariのタブと同じように、ドラッグして順番を入れ替えたり、さらにウインドウの外にドラッグすれば切り離して別ウインドウにしたり、切り離したタブを再び元のウインドウに統合したり、といったことが可能です。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100129_2.png" /><br />
<small>順番の入れ替え</small></p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100129_3.png" /><br />
<small>タブの切り離し</small></p>

<h3>Growlによる通知</h3>

<p>Mac版Yahoo!メッセンジャー3.0はGrowlに対応しています。Growlとは、Mac用アプリケーションで広く使われいる、アプリケーションからのさまざまな通知を画面に表示するためのツールです。</p>

<p>友だちがオンラインになったときや、新着メールが届いたときなどに、画面の右上に通知が表示されます。「環境設定」の「アラート」で、どんなときに通知を表示させるかを設定できます。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100129_4.png" /></p>

<p>この機能はYahoo!メッセンジャー単体でも使えるものですが、<a href="http://growl.info/">Growlのサイト（英語）</a>からGrowlをインストールすることで、システム環境設定からいろいろな設定ができるようになります。</p>

<p>通知の見た目や表示位置や表示時間を変更したり、アプリケーションごとにGrowlの表示のオン/オフを切り替えることも可能です。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100129_5.png" /><br />
<small>Growlの環境設定パネル</small></p>

<h3>iTunes連携機能</h3>

<p>自分のステータスを「iTunesで再生中の曲名を表示」に設定しておくと、今iTunesで聴いている曲がステータスに表示され、友だちから見えるようになります。曲が変われば自動的にステータスも変わります。また、ステータスはリンクになっていて、クリックするとiTunes Storeで該当曲を検索できます。普段iTunesで音楽を聴きながら作業している方はぜひ使ってみてください。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100129_6.png" /></p>

<p>また、「環境設定」の「通話」から、「通話中はiTunesの音楽再生を一時停止」にチェックしておくと、ボイスでの会話中は自動的にiTunesの再生をストップできます。</p>

<h3>アドレスブック連携機能</h3>

<p>「友だち」メニューの「情報を見る」から、友だちの姓、名、メールアドレスが設定できます。ここで姓名を入力しておけば、友だちリスト上の表示が入力したものになり、IDよりもわかりやすくなります。また、ここで入力した情報はYahoo!アドレスブックと同期されます。</p>

<p>さらにMac版では、ローカルにある「アドレスブック」アプリケーションと連携できます。上記の「情報を見る」メニューで開いた「連絡先の編集」画面で、「アドレスブックカードを選択」ボタンを押して、ローカルのアドレスブックからカードを選択すると、カードの内容からデータを取得します。その後はアドレスブック側のデータを更新するとメッセンジャー側に反映されるようになります。</p>

<p>アドレスブックカードを選択している場合はさらに、友だちの表示画像としてアドレスブックの画像を使用するというオプションもあります。</p>

<h3>おわりに</h3>

<p>随所にMacらしさをもったアプリケーションだと思います。多くのMacユーザーの方にお試しいただければ幸いです。</p>]]>
      <![CDATA[<h3>関連情報</h3>
INTERNET Watchの該当記事 <br />
<a href="http://internet.watch.impress.co.jp/docs/news/20100129_345710.html ">http://internet.watch.impress.co.jp/docs/news/20100129_345710.html </a>]]>
   </content>
</entry>
<entry>
   <title>Hadoopを使いこなす(1)</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat207/cat209/_footnote/" />
   <id>tag:techblog.yahoo.co.jp,2010://25.4344</id>
   
   <published>2010-01-26T09:49:51Z</published>
   <updated>2010-01-26T09:53:58Z</updated>
   
   <summary>前回はHadoopやMapReduceについての概要を説明しましたが、今回は一歩踏み込んで、Hadoopの使いこなし方について書きたいと思います。
今回は、ある程度Hadoopを使ったことのある方、Hadoopのインストールをして、オフィシャルページのMapReduceチュートリアルなどを試してみた方を対象としています。</summary>
   <author>
      
   </author>
         <category term="アーキテクチャ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p><style type='text/css'><br />
.FootnoteMarker, .FootnoteNum a {<br />
  background: transparent url(http://i.yimg.jp/images/tecblog/footnote.png) no-repeat top right;<br />
  padding: 1px 2px 0px 1px;<br />
  border-left: 1px solid #8898B8;<br />
  border-bottom: 1px solid #6B7C9B;<br />
  margin: 1px;<br />
  text-decoration: none;<br />
}<br />
.FootnoteNum a {<br />
  margin-top: 2px;<br />
  margin-right: 0px;<br />
}<br />
.FootnoteNum {<br />
  font-size: x-small;<br />
  text-align: right;<br />
  padding-bottom: 4px;<br />
}<br />
.footnote-th1 {<br />
  text-align: right;<br />
}<br />
.Footnote {<br />
  padding-left: 7px;<br />
  margin-bottom: 4px;<br />
  border: 1px none #DDDDDD;<br />
  writingMode: tb-rl;<br />
}<br />
.accessibility {<br />
         display: run-in;<br />
         visibility: visible;<br />
}<br />
@media aural,braille,embossed {<br />
        .FootnoteMarker, .FootnoteNum a {<br />
         border: 1px solid #000000;<br />
         background: #ffffff none;<br />
    }<br />
    .accessibility {<br />
         display: run-in;<br />
         visibility: visible;<br />
    }<br />
}<br />
</style><br />
<script type='text/javascript' language='JavaScript'><br />
//<!--\n<br />
var effectInProgress = {};<br />
var despamEffect = function (id,effectType,duration) {<br />
  if ((effectInProgress[id]) || (Effect==undefined) || (Effect[effectType]==undefined)) return;<br />
  new Effect[effectType](id);<br />
  effectInProgress[id]=true;<br />
  setTimeout('effectInProgress[\"'+id+'\"]=false;',duration*1000);<br />
};<br />
var oldFootnoteId = '';<br />
var footnoteHighlight = function(id,pulsateNum) {<br />
  if (oldFootnoteId!='') document.getElementById('Footnote'+oldFootnoteId).style['borderStyle'] = 'none';<br />
  oldFootnoteId = id;<br />
  document.getElementById('Footnote'+id).style['borderStyle'] = 'solid';<br />
  despamEffect('Footnote'+id,'Highlight',1)<br />
  if (pulsateNum) despamEffect('FootnoteNum'+id,'Pulsate',3)<br />
}<br />
var footnoteMarkerHighlight = function(id) {<br />
  if (oldFootnoteId!='') document.getElementById('Footnote'+oldFootnoteId).style['borderStyle'] = 'none';<br />
  oldFootnoteId = '';<br />
  despamEffect('FootnoteMarker'+id,'Pulsate',3)<br />
}<br />
//--><br />
</script></p>

<p><br />
<p>こんにちは。<a href="http://techblog.yahoo.co.jp/cat207/cat209/hadoop/">前回のHadoopの記事</a>では、HadoopやMapReduceについての概要を説明しましたが、<br/><br />
今回は一歩踏み込んで、Hadoopの使いこなし方について書きたいと思います。</p></p>

<p>今回は、ある程度Hadoopを使ったことのある方、Hadoopのインストールをして、<br/>
オフィシャルページの<a href="http://hadoop.apache.org/common/docs/r0.20.1/mapred_tutorial.html">MapReduceチュートリアル</a>などを試してみた方を対象としています。</p>

<p><a href="http://oss.infoscience.co.jp/hadoop/">こちら</a>でオフィシャルページの日本語訳もされていますので、試していない方は一度試してみることをおすすめします。</p>

<p>前回の記事では、map関数とreduce関数と、その組み合わせが、MapReduceの肝だという話をしましたが、<br/>
ある程度複雑な処理を行う場合は、map関数とreduce関数だけでなく、それ以外のポイントをどうカスタマイズするかも重要になってきます。</p>

<p>まず、MapReduceの詳細なフローを紹介した上で、カスタマイズできるポイントを紹介、最後に実例を紹介していきたいと思っています。</p>

<h2>MapReduceの詳細なフロー</h2>

<p>では、MapReduceの詳細なフローを見ていきましょう。<br/>
なお、カスタマイズポイントを紹介するための説明ですので、詳細な部分は省いています。<br/>
まずはMap処理です。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100126_1.png" align="absmiddle" border="0" /></p>

<p>入力ファイルは、InputSplitと呼ばれる単位に分割され(<sup id='FootnoteMarker1'>
    <a name='FootnoteMarker1'
        href='#Footnote1'
        onClick='footnoteHighlight("1",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            1
    </a>
</sup>)、多くのマシンに分散されます。<br/>
一つのInputSplitごとに一つのMapTaskが割り当てられます。MapTaskとはMap処理を実行する単位のことで、多くのマシン上でMapTaskが並列に動くことになります。</p>

<p>MapTaskでは、InputSplitを読み込み、ユーザが定義したMapper(Map処理)を実行(<sup id='FootnoteMarker2'>
    <a name='FootnoteMarker2'
        href='#Footnote2'
        onClick='footnoteHighlight("2",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            2
    </a>
</sup>)します。<br/>
RecordReaderを使って、InputSplitからKeyとValueを抽出(<sup id='FootnoteMarker3'>
    <a name='FootnoteMarker3'
        href='#Footnote3'
        onClick='footnoteHighlight("3",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            3
    </a>
</sup>
)し、map関数に引数として渡します。</p>

<p>map関数の出力は、PartitionerによりPartitionに分割(<sup id='FootnoteMarker4'>
    <a name='FootnoteMarker4'
        href='#Footnote4'
        onClick='footnoteHighlight("4",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            4
    </a>
</sup>
)され、それぞれが次に処理されるReduceTaskに割り当てられます。<br/>
デフォルトのPartitionerでは、Keyのハッシュ値をもとに分割されます。</p>

<p>最後に各Partitionごとにソート(<sup id='FootnoteMarker5'>
    <a name='FootnoteMarker5'
        href='#Footnote5'
        onClick='footnoteHighlight("5",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            5
    </a>
</sup>)が行われます。そして、MapTaskが実行されているマシンのローカルのディスクに書き出され、ReduceTaskからコピーされるのを待ちます。</p>

<p>なお、オプションでDistributedCacheと、Combinerを指定できます。</p>

<p>DistributedCache(<sup id='FootnoteMarker6'>
    <a name='FootnoteMarker6'
        href='#Footnote6'
        onClick='footnoteHighlight("6",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            6
    </a>
</sup>)は、Taskが実行される前に、処理に必要なファイルを各マシンにコピーします。<br/>
ファイルは、Mapper, Reducerで自由に利用することができます。</p>

<p>Combiner(<sup id='FootnoteMarker7'>
    <a name='FootnoteMarker7'
        href='#Footnote7'
        onClick='footnoteHighlight("7",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            7
    </a>
</sup>)は、Mapperの出力をさらに集計します。Combinerの新たな出力が、MapTaskの出力として書き出され、ReduceTaskからコピーされます。<br/>
いわば、ミニReducerと呼べるものですが、MapperとReducerの間に入り、MapTask内で行われる点が、Reducerとは異なります。（次回の記事で詳しく解説します）</p>

<p>では、ReduceTaskの流れを見ていきましょう。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100126_2.png" align="absmiddle" border="0" /></p>

<p>ReduceTaskでは、まず、各MapTaskが走っているマシンから、自分に割り当てられたPartitionのファイルをコピーします。<br/>
コピーは終了したMapTaskから順に行われます。</p>

<p>次に、ソート(<sup id='FootnoteMarker8'>
    <a name='FootnoteMarker8'
        href='#Footnote8'
        onClick='footnoteHighlight("8",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            8
    </a>
</sup>)が行われ、ファイルがまとめられます。</p>

<p>最後にユーザが定義したReducerを実行(<sup id='FootnoteMarker9'>
    <a name='FootnoteMarker9'
        href='#Footnote9'
        onClick='footnoteHighlight("9",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            9
    </a>
</sup>)します。<br/>
Valueをグルーピング(<sup id='FootnoteMarker10'>
    <a name='FootnoteMarker10'
        href='#Footnote10'
        onClick='footnoteHighlight("10",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            10
    </a>
</sup>)し、Keyとともにreduce関数に引数として渡します。</p>

<p>reduce関数の出力は、RecordWriterによって書き込まれ(<sup id='FootnoteMarker11'>
    <a name='FootnoteMarker11'
        href='#Footnote11'
        onClick='footnoteHighlight("11",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            11
    </a>
</sup>)、MapReduceの出力となります。</p>

<p>では、これらのフローの中で、カスタマイズできるポイントを紹介しましょう。</p>

<p><br />
<h2>カスタマイズできるポイント</h2><br />
<p>フロー中の処理と、カスタマイズするポイントの対応表は以下の通りです。<br/><br />
カスタマイズポイントに書かれたクラスをカスタマイズして、MapReduceの初期化時にJobConfなどで指定します。</p></p>

<blockquote><p><table class='Footnotes' style='width: 100%; border:none;' cellspacing='0' cellpadding='0' summary='This table contains one or more notes for references made elsewhere on the page.'>
  <caption class='accessibility'></caption>
  <tbody>
    <tr>
      <th>文中の番号</th>
      <th>処理の説明</th>
      <th>カスタマイズポイント</th>
    </tr>
    <tr name='Footnote1'>
      <td valign='top' class='FootnoteNum' headings='footnote-th1'>
        <a href='#FootnoteMarker1'
          onClick='footnoteMarkerHighlight("1");'
          onMouseOver='footnoteHighlight("1",false);'
          alt='Footnote: Click to return to reference in text'
          title='Footnote: Click to return to reference in text'
          id='FootnoteNum1'>
            1
        </a>
      </td>
      <td id='Footnote1'
        valign='top'
        width='40%'
        class='Footnote'
        headings='footnote-th2'>
          入力ファイルをInputSplitに分割
      </td>
      <td id='Footnote1'
        valign='top'
        width='50%'
        class='Footnote'
        headings='footnote-th3'>
          InputFormatクラスのgetSplit関数
      </td>

<p>    </tr></p>

<p><br />
    <tr name='Footnote2'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker2'<br />
          onClick='footnoteMarkerHighlight("2");'<br />
          onMouseOver='footnoteHighlight("2",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum2'><br />
            2<br />
        </a><br />
      </td><br />
      <td id='Footnote2'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          Map処理<br />
      </td><br />
      <td id='Footnote2'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          Mapperクラス及び、MapRunnerクラス<br />
      </td><br />
    </tr><br />
    <tr name='Footnote3'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker3'<br />
          onClick='footnoteMarkerHighlight("3");'<br />
          onMouseOver='footnoteHighlight("3",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum3'><br />
            3<br />
        </a><br />
      </td><br />
      <td id='Footnote3'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          InputSplitからKey/Value抽出<br />
      </td><br />
      <td id='Footnote3'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          InputFormatクラスのgetRecordReader関数で任意のRecordReaderクラスを生成<br />
      </td><br />
    </tr><br />
    <tr name='Footnote4'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker4'<br />
          onClick='footnoteMarkerHighlight("4");'<br />
          onMouseOver='footnoteHighlight("4",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum4'><br />
            4<br />
        </a><br />
      </td><br />
      <td id='Footnote4'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          Partitionの分割処理<br />
      </td><br />
      <td id='Footnote4'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          Partitionerクラス<br />
      </td><br />
    </tr></p>

<p>    <tr name='Footnote5'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker5'<br />
          onClick='footnoteMarkerHighlight("5");'<br />
          onMouseOver='footnoteHighlight("5",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum5'><br />
            5<br />
        </a><br />
      </td><br />
      <td id='Footnote5'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          MapTaskでのソート<br />
      </td><br />
      <td id='Footnote5'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          Comparatorクラス<br />
      </td><br />
    </tr></p>

<p>    <tr name='Footnote6'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker6'<br />
          onClick='footnoteMarkerHighlight("6");'<br />
          onMouseOver='footnoteHighlight("6",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum6'><br />
            6<br />
        </a><br />
      </td><br />
      <td id='Footnote6'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          DistributedCache<br />
      </td><br />
      <td id='Footnote6'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          DistributedCacheのstaticメソッドで設定<br />
      </td><br />
    </tr></p>

<p>    <tr name='Footnote7'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker7'<br />
          onClick='footnoteMarkerHighlight("7");'<br />
          onMouseOver='footnoteHighlight("7",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum7'><br />
            7<br />
        </a><br />
      </td><br />
      <td id='Footnote7'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          Combiner<br />
      </td><br />
      <td id='Footnote7'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          Combinerクラス<br />
      </td><br />
    </tr></p>

<p>    <tr name='Footnote8'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker8'<br />
          onClick='footnoteMarkerHighlight("8");'<br />
          onMouseOver='footnoteHighlight("8",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum8'><br />
            8<br />
        </a><br />
      </td><br />
      <td id='Footnote8'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          ReduceTaskでのソート<br />
      </td><br />
      <td id='Footnote8'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          Comparatorクラス<br />
      </td><br />
    </tr></p>

<p><br />
    <tr name='Footnote9'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker9'<br />
          onClick='footnoteMarkerHighlight("9");'<br />
          onMouseOver='footnoteHighlight("9",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum9'><br />
            9<br />
        </a><br />
      </td><br />
      <td id='Footnote9'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          Reduce処理<br />
      </td><br />
      <td id='Footnote9'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          Reducerクラス<br />
      </td><br />
    </tr><br />
    <tr name='Footnote10'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker10'<br />
          onClick='footnoteMarkerHighlight("10");'<br />
          onMouseOver='footnoteHighlight("10",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum10'><br />
            10<br />
        </a><br />
      </td><br />
      <td id='Footnote10'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          Valueのグルーピング<br />
      </td><br />
      <td id='Footnote10'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          Comparatorクラス<br />
      </td><br />
    </tr><br />
    <tr name='Footnote11'><br />
      <td valign='top' class='FootnoteNum' headings='footnote-th1'><br />
        <a href='#FootnoteMarker11'<br />
          onClick='footnoteMarkerHighlight("11");'<br />
          onMouseOver='footnoteHighlight("11",false);'<br />
          alt='Footnote: Click to return to reference in text'<br />
          title='Footnote: Click to return to reference in text'<br />
          id='FootnoteNum11'><br />
            11<br />
        </a><br />
      </td><br />
      <td id='Footnote11'<br />
        valign='top'<br />
        width='40%'<br />
        class='Footnote'<br />
        headings='footnote-th2'><br />
          出力の書き出し<br />
      </td><br />
      <td id='Footnote11'<br />
        valign='top'<br />
        width='50%'<br />
        class='Footnote'<br />
        headings='footnote-th3'><br />
          OutputFormatクラスのgetRecordWriter関数で任意のRecordWriterクラスを生成<br />
      </td><br />
    </tr></p>

<p>  </tbody><br />
</table></p></blockquote></p>

<p><br />
<p>まず、<sup id='FootnoteMarker1'><br />
    <a name='FootnoteMarker1'<br />
        href='#Footnote1'<br />
        onClick='footnoteHighlight("1",true);'<br />
        alt='Footnote: Click here to display the footnote'<br />
        title='Footnote: Click here to display the footnote'<br />
        class='FootnoteMarker'><br />
            1<br />
    </a><br />
</sup>の入力ファイルを分割する方法は、InputFormatクラスの、getSplits関数を上書きすることで、カスタマイズできます。</p></p>

<p>また、<sup id='FootnoteMarker3'>
    <a name='FootnoteMarker3'
        href='#Footnote3'
        onClick='footnoteHighlight("3",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            3
    </a>
</sup>のInputSplitから、KeyとValueを抽出する処理も、InputFormatクラスを通じてカスタマイズできます。<br/>
InputFormatのgetRecordReader関数を通じて、RecordReaderクラスを生成するのですが、これに任意のRecordReaderクラスを指定すればOKです。</p>

<p><sup id='FootnoteMarker2'>
    <a name='FootnoteMarker2'
        href='#Footnote2'
        onClick='footnoteHighlight("2",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            2
    </a>
</sup>のMap処理ですが、ユーザが指定したMapperクラスの処理を実行します。<br/>
Mapperクラスは、MapRunnerクラスを通じて、初期化処理、map関数を繰り返す過程、終了処理といった一連の流れを実行します。<br/>
MapRunnerクラスをカスタマイズすれば、こうした流れを制御することができます。<br/>
0.20.0からの新しいMapReduce APIでは、Mapperクラス自体のrun関数で、流れを制御できます。</p>

<p><sup id='FootnoteMarker4'>
    <a name='FootnoteMarker4'
        href='#Footnote4'
        onClick='footnoteHighlight("4",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            4
    </a>
</sup>のPartitionの分割処理は、Partitionerクラスを指定することでカスタマイズできます。</p>

<p><sup id='FootnoteMarker6'>
    <a name='FootnoteMarker6'
        href='#Footnote6'
        onClick='footnoteHighlight("6",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            6
    </a>
</sup>のDistributedCacheは、MapReduceの初期化時にDistributedCacheのstaticメソッドを通じて、配布したいファイルを指定します。<br/>
<sup id='FootnoteMarker7'>
    <a name='FootnoteMarker7'
        href='#Footnote7'
        onClick='footnoteHighlight("7",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            7
    </a>
</sup>のCombinerは、Combinerクラスを指定することでカスタマイズできます。</p>

<p><sup id='FootnoteMarker5'>
    <a name='FootnoteMarker5'
        href='#Footnote5'
        onClick='footnoteHighlight("5",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            5
    </a>
</sup>と<sup id='FootnoteMarker8'>
    <a name='FootnoteMarker8'
        href='#Footnote8'
        onClick='footnoteHighlight("8",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            8
    </a>
</sup>のソートで、Keyを比較する方法は、Comparatorクラスを指定することでカスタマイズできます。<br/>
<sup id='FootnoteMarker10'>
    <a name='FootnoteMarker10'
        href='#Footnote10'
        onClick='footnoteHighlight("10",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            10
    </a>
</sup>のValueのグルーピングもComparatorクラスによってカスタマイズできますが、ソートの比較に用いるクラスとは別のクラスを指定できます。</p>

<p><sup id='FootnoteMarker9'>
    <a name='FootnoteMarker9'
        href='#Footnote9'
        onClick='footnoteHighlight("9",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            9
    </a>
</sup>のReduce処理ですが、ユーザが指定したReducerクラスの処理を実行します。<br/>
新しいAPIでは、初期化処理、reduce関数を繰り返す過程、終了処理といった流れを、Reducerクラスのrun関数を通じて行えます。</p>

<p><sup id='FootnoteMarker11'>
    <a name='FootnoteMarker11'
        href='#Footnote11'
        onClick='footnoteHighlight("11",true);'
        alt='Footnote: Click here to display the footnote'
        title='Footnote: Click here to display the footnote'
        class='FootnoteMarker'>
            11
    </a>
</sup>のReducerの出力の書き出しは、OutputFormatクラスを通じてカスタマイズできます。<br/>
OutputFormatのgetRecordWriter関数を通じて、RecordWriterクラスを生成するのですが、これに任意のRecordWriterクラスを指定すればOKです。</p>

<p>最後にフローには書いてはいませんが、MapperやReducerのKeyやValueに使われる、Writableクラスのカスタマイズも重要なポイントになってきます。<br/>
Writableクラスは、例えば、Textクラス、IntWritableクラスといったものです。</p>

<p>JobConfでのこれらのカスタマイズポイントの設定例をのせておきます。</p>

<pre name="code" class="php">
JobConf job = new JobConf(Test.class);  //JobConfを初期化

<p>job.setInputFormat(CustomizeInputFormat.class); //InputFormatクラスを指定<br />
job.setMapperClass(CustomizeMapper.class); //Mapperクラスを指定<br />
job.setMapRunnerClass(CustomizeMapRunner.class); //MapRunnerクラスを指定<br />
job.setPartitionerClass(CustomizePartitioner.class); //Partitionerクラスを指定<br />
DistributedCache.addCacheFile(new Path("test.conf").toUri(), job); //DistributedCacheでファイルを配布<br />
job.setCombinerClass(CustomizeCombiner.class) //Combinerクラスを指定<br />
job.setOutputKeyComparatorClass(CustomizeComparator.class); //Keyの比較を行うComparatorクラスを指定<br />
job.setOutputValueGroupingComparator(CustomizeGroupingComparator.class); //Valueのグルーピングを行うComparatorクラスを指定<br />
job.setReducerClass(CustomizeReducer.class); //Reducerクラスを指定<br />
job.setOutputFormat(CustomizeOutputFormat.class); //OutputFormatクラスを指定<br />
</pre></p>

<p><br />
<p>では、それぞれのカスタマイズポイントについて詳細にみていきましょう。</p></p>

<p>なお、MapReduce APIには、0.20.0からの新しいAPIと、従来のAPIがあります。<br/>
新しいAPIはまだ、MultipleInputsやMultipleOutputsに対応していないなど発展途上であり(0.20.1現在)、<br/>
オフィシャルページのMapReduceチュートリアルも従来のAPIで書かれていることから、特に断りのない場合は、従来のAPIで記述していますので、ご注意下さい。</p>

<h2>InputFormat</h2>
<p>InputFormatのインターフェースは以下のようになっています。</p>
<pre name="code" class="php">
public interface InputFormat&lt;K, V&gt; {
  InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
  RecordReader&lt;K, V&gt; getRecordReader(InputSplit split,
                                     JobConf job,
                                     Reporter reporter) throws IOException;
}
</pre>

<p>getSplitsが、入力するファイルを分割する方法を定義する関数で、InputSplitの配列を返します。<br/>
getRecordReaderは、InputSplitからKeyとValueを抽出する、RecordReaderクラスを返します。</p>

<p>RecordReaderのインターフェースは以下のようになっています。</p>
<pre name="code" class="php">
public interface RecordReader&lt;K, V&gt; {
  boolean next(K key, V value) throws IOException;
  K createKey();
  V createValue();
  long getPos() throws IOException;
  public void close() throws IOException;
  float getProgress() throws IOException;
}
</pre>

<p>おおまかな流れとしては、コンストラクタなどで、InputSplitを受け取り、createKey, createValueで、KeyとValueを初期化、<br/>
next関数を繰り返し呼んで、KeyとValueに値をセットしていきます。</p>

<p>例えば、<a href="http://hadoop.apache.org/common/docs/r0.20.1/hadoop_archives.html">Hadoop Archives</a>がどうInputFormatをカスタマイズしているか見ていきましょう。<br/>
Hadoop Archivesは、小さなファイルなどをまとめて一つのファイルにでき、MapReduceの入力としても使える便利な機能ですが、<br/>
実際にファイルをまとめる処理はMapReduceで動いています。</p>

<p>Hadoop Archivesでは、MapReduce処理を行う前に、まず入力として受け取ったファイルのリストを書き出します。<br/>
SequenseFileという、MapReduceのKeyとValueをそのまま扱える形式で書き出され、<br/>
Keyが実際のファイルのサイズ、Valueがファイルへのパスなどになっています。<br/>
なお、実際にはValueはもっと複雑な形式になっていますが、説明のためファイルへのパスということにしておきます。</p>

<div style="padding:1em;border:1px solid #999999;-moz-border-radius:10px;">
<pre>
126787 /path/to/fileA
15666  /path/to/fileB
322137 /path/to/fileC
412738 /path/to/fileD
</pre>
</div>

<p>Mapperはこのファイルリストを入力とします。<br/>
map関数では、Valueにファイルのパスがセットされますが、ここからmap関数内で実際にファイルを読み出し、MapTaskごとにまとめて一つのファイルとして出力します。</p>

<p>しかし、デフォルトでは、ファイルリスト自体のサイズにもとづいて、InputSplitが分割されるので、Mapperでまとめたファイルの出力サイズに大きな差が出てきてしまいます。<br/>
そこで、HadoopArchivesでは、KeyのファイルサイズにもとづいてファイルリストをInputSplitに分割するという処理を行っています。</p>

<p>例えば、上の例のファイルリストを2つに分割したい場合、デフォルトだと、</p>

<div style="padding:1em;border:1px solid #999999;-moz-border-radius:10px;">
<pre>
126787 /path/to/fileA
15666  /path/to/fileB
---------------------
322137 /path/to/fileC
412738 /path/to/fileD</pre>
</div>
<p>というようにfileBとfileCの間で分割されますが、Hadoop Archievesでは、</p>

<div style="padding:1em;border:1px solid #999999;-moz-border-radius:10px;">
<pre>
126787 /path/to/fileA
15666  /path/to/fileB
322137 /path/to/fileC
---------------------
412738 /path/to/fileD
<pre>
</div>

<p>というように、Keyのファイルサイズを読んで、ファイルサイズの合計がなるべく均等になるように、fileCとfileDの間で、分割します。<br/>
ちなみに、Reducerでは、Mapperでまとめたファイルにおける実際のファイルのインデックスなどの情報を書き出すようになっています。</p>

<p>なお、元から用意されているInputFormatでも、入力テキストを区切り文字でKeyとValueに分割して、Mapperの入力のKey/Valueとして扱える<a href="http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/KeyValueTextInputFormat.html">KeyValueTextInputFormat</a>, <br/>
小さいファイルをまとめて扱える<a href="http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/lib/CombineFileInputFormat.html">CombineFileInputFormat</a>など便利なものが多くありますので、調べてみてください。</p>

<p>直接は関係ありませんが、入力ファイルに応じて複数のMapperクラスやInputFormatを割り当てられる、<a href="http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/lib/MultipleInputs.html">MultipleInputs</a>という仕組みもあります。</p>

<h2>残りは次回</h2>

<p>次回は、残りのカスタマイズポイントを解説します。</p>

<p>P.S.<br/>
<a href="http://yro.slashdot.org/story/10/01/19/1815257/USPTO-Grants-Google-a-Patent-On-MapReduce">GoogleがMapReduceの特許を取得したこと</a>には驚きました。<br/>
Hadoopに影響するのかどうか気になるところですね。</p>

<p><br />
<p>（R&amp;D統括本部　吉田一星）</p><br />
</p>]]>
      
   </content>
</entry>
<entry>
   <title>Yahoo! JAPAN Internet Creative Award 2009一般の部　グランプリ『Blogopolis』の浜本階生さんインタビュー</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat206/yahoo_japan_internet_creative_1/" />
   <id>tag:techblog.yahoo.co.jp,2010://25.4313</id>
   
   <published>2010-01-22T01:50:54Z</published>
   <updated>2010-01-22T07:21:43Z</updated>
   
   <summary>昨年11月に受賞作品が発表された、Yahoo! JAPAN Internet Creative Award 2009（以下「YJICA」）。「一般の部」でグランプリを獲得した『Blogopolis』の開発者、浜本階生さんにお話をお聞きしてきました。</summary>
   <author>
      
   </author>
         <category term="イベント" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>昨年11月に受賞作品が発表された、<a href="http://creative-award.yahoo.co.jp/">Yahoo! JAPAN Internet Creative Award 2009</a>（以下「YJICA」）。「一般の部」でグランプリを獲得した『<a href="http://blogopolis.jp/">Blogopolis</a>』の開発者、浜本階生さんにお話をお聞きしてきました！<br><br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100122_1.jpg" align="absmiddle" border="0"><br/><small>Blogopolis</small></p><br />
<br><br />
<h3>●『Blogopolis』開発秘話</h3><br />
<br><br />
Blogopolisは、主に国内で開設された26万件（12/22時点）以上のブログを3Dの仮想都市景観にマッピングしたサイト。<br><br />
はてなブックマークの1つのブックマークエントリーが1つの建物として表現され、高さが購読者数、面積がはてなブックマーク数になっています。ブログにつけられたタグをもとにカテゴライズし、似た記事同士が集まって表示されています。<br><br />
<br><br />
<strong>【参考リンク】</strong><br><br />
<ul><br />
<li><a href="http://d.hatena.ne.jp/kaiseh/20090827/1251406675">Blogopolisとは</a></li><br />
</ul><br />
<ul><br />
<li><a href="http://d.hatena.ne.jp/kaiseh/20090913/1252819205">Blogopolisの裏側</a></li><br />
</ul><br />
<ul><br />
<li><a href="http://d.hatena.ne.jp/kaiseh/20090905/1252181947">自分の土地のビルを自由に塗れる「ルーフペイント機能」</a></li><br />
</ul><br />
<br><br />
<br><br />
<strong>『Blogopolis』のアイデアは、どのように生まれたのですか？</strong><br />
<br><br />
<img src="http://i.yimg.jp/images/tecblog/2009Q4/20091222_2.jpg" hspace="5" vspace="5" align="right">「2008年の春ごろに読んだ論文がきっかけ。ツリーマップと呼ばれるデータの2次元平面のマッピングに関するものでした。従来のツリーマップは、平面を長方形などの縦横垂直な平面で区切って見せるものでしたが、この論文では不定形……ボロノイ図というアルゴリズムを使って、六角形、八角形などと角度を自在に区分けできるというものでした。それを見たときに、“これは土地の区分けと、見た目が似ているな”と思って、まず『Blogopolis』の前身である『HatenarMaps』というのをつくりました。そのときはあくまで、土地のイメージということで、2次元だったのですが、“土地があると建物建てたくなるよね”ということで、3次元にしたものが、いまある『Blogopolis』です。」<br><br />
<br><br />
<br><br />
<strong>仕事の傍ら、個人的に開発を進めてきた『Blogopolis』、その開発環境は？</strong><br />
<br><br />
「自宅にあるサーバー4台ほどで運用しています。1台はクローリング、1台はデータベース、1台はアプリケーションの計算の部分、というふうに分けていますが、ちょっと家電の電力消費が上がると、ブレーカーが落ちてしまう、とか、そんな環境でした（笑）。この先、もう少し収益化ということも考えていけたらと思っています。」<br><br />
<br><br />
<br><br />
<strong>仕事の傍らということですが、開発に要した期間は？</strong><br />
<br><br />
「だいたい1ヵ月半くらいですね。ノートパソコンを持ってマクドナルドなどで作業していました。自宅だと遊んじゃって、なかなかしっかり作業できないし、無線LANが使えるところも多いので、かなり通っていました（笑）。」<br><br />
<br><br />
<br><br />
<strong>遊んじゃうんですか？</strong><br />
<br><br />
「これは『8：2の法則』みたいのがあって、家にいるときも2割の時間は、すごい集中してやれるんですよ。でもそれ以外の8割の時間は、どうしてもやる気が出ないんですよね……。プログラミングそのものが、どうしてもそういうところがあるとは思ってるんですけど。けど、その8割の時間をマクドナルドに持っていけば、強制的に集中状態をつくれるんじゃないかと。」<br><br />
<br><br />
<br><br />
<h3>●情報の可視化への情熱</h3><br />
<br><br />
ビジネスインテリジェンスツール ―データを可視化するソフト― の開発、販売を仕事にしている浜本さん。学生時代から、その会社でアルバイトをしていたことから、「情報の可視化」ということに自然と興味を抱いていったのだそう。<br><br />
2007年に価格.comのWebサービスコンテストで最優秀賞を受賞した『<a href="http://eatspot.jp/">EatSpot</a>』は、「食べログ」のAPIを活用して、地図上の飲食店情報を模様として表現。2008年にMashup Awards 4で優秀賞とテクノロジー賞を受賞した『<a href="http://newsgraphy.com/">Newsgraphy</a>』では、日本のニュースを可視化して表現しています。<br />
<br><br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100122_3.jpg" align="absmiddle" border="0"><br/><small>EatSpot</small></p><br />
<br><br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100122_4.jpg" align="absmiddle" border="0"><br/><small>Newsgraphy</small></p><br />
<br><br />
<strong>情報を可視化して、ユニークなUIにのせる、ということをずっとされていますね。</strong><br />
<br><br />
「『EatSpot』では、全国にある万単位でのお店を、上位のものだけではなく、すべてのせてしまうことにしました。そこにフィルターをかける。たとえば“中華”というフィルターをかけると、上野のほうが盛り上がったり、“フレンチ”でフィルターをかけると、麻布や六本木のほうが盛り上がってきたりする。1件1件のお店の情報ではなく、それを全部集積したうえで、模様として把握する、ということがやりたかったんです。『Blogopolis』も、ブログ1件1件を見るのではなく、ズームアウトしていくと、日本のブログ界としてみることもできるというように、情報のひとつひとつ、ではなく、高次なレベルでの情報理解を助けるものができれば、と思ったんです。」<br><br />
<br><br />
<br><br />
<strong>そのモチベーションはどこから？</strong><br />
<br><br />
「コンピュータをずっと使っていると、脳のなかのイメージと、コンピュータを通しての作業のミスマッチってあるんです。脳内では大雑把な把握。自動的に考えをツリー構造にするというようなことをしています。その形も、可塑性があるというか、ダイナミックに変わっていると思うのですが、コンピュータでそれをうまくあらわす手段が今のところあまりないんですよね。何か検索しても、リストで出てくるだけで、まとめて見せるというものがないと思って。だからこそ、それをやりたいなというのはあります。」<br />
<br><br />
<br><br />
<h3>●使ってもらって、フィードバックを受ける……それがモチベーション</h3><br />
<br><br />
中学1年のときに、Basicから、はじめてゲームプログラミングに入っていったという浜本さん。<br><br />
高校生のときは、フリーウエア、シェアウエアを作って配ったり、その後はWeb上でアプリケーションを公開して各種コンテストに応募したりと、多くの人に使ってもらえる場を見つけて作品を公開してきたといいます。<br><br />
<br><br />
<br><br />
<strong>YJICAのほかにもさまざまなアワード、コンテストに応募されています。</strong><br />
<br><br />
「『客観的にみて、自分のつくったものがどうなのか？』ということを知りたくて。昔から『BASICマガジン』に投稿したり、県のプログラミングのコンテストに出したりして、フィードバックを得る機会をもつようにしていました。普段は、つくっても“こういうものがあるね” “おもしろいな”程度の反応だけれど、その点コンテストでは、きちんと評価という形でフィードバックが得られるのがいいですね。」<br />
<br><br />
<br><br />
<strong>今後Web系のコンテストに参加する人に、何かメッセージはありますか？</strong><br />
<br><br />
<img src="http://i.yimg.jp/images/tecblog/2009Q4/20091222_5.jpg" hspace="5" vspace="5" align="left">「いまは“巨人の肩に乗る”ことができる時代。『Blogopolis』などもそうですが、Web上の膨大なデータ、ソーシャルなデータを持ってきて加工する……ということができます。だからこそ、世の中の空気や流れを読んで、うまくいろいろな要素を持ってきて、なるべく広く使われるようにすることが大事かなと思います。はじめからウケるものを狙っていくことがひとつの能力になってきているな、と。と同時に、表面的にデータを組み合わせるというのではなく、リソースが豊富になってきた時代だからこそ、組み合わせ方をよく考える必要があるなと思いますね。」<br />
<br><br />
<br><br />
<div  style="border: 1px solid rgb(153, 153, 153); background-color: rgb(); -moz-border-radius: 10px; padding:1em;"><br />
<p><strong>【浜本階生さん　プロフィール】</strong><br><br />
1981年生まれ。栃木県出身。東京工業大学情報工学科卒業。<br><br />
技術やアイデアの組み合わせから面白いソフトウェアを生み出したいと日々考えている。共訳書に『実用Subversion 第2版』（オライリー・ジャパン）。<br><br />
<br><br />
『日経パソコン』　1/25号で、浜本さんのより詳しいインタビューが掲載されています。<br><br />
詳しくは<a href="http://pc.nikkeibp.co.jp/pc/npcs/latest/index.shtml">こちら</a>。</p><br />
</div><br />
<br></p>]]>
      
   </content>
</entry>
<entry>
   <title>「Yahoo!検索プラグイン」で必要な情報をより早く入手する</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_5/" />
   <id>tag:techblog.yahoo.co.jp,2010://25.4278</id>
   
   <published>2010-01-19T02:44:18Z</published>
   <updated>2010-02-01T09:28:14Z</updated>
   
   <summary>検索結果の内容にサイトの情報を整理して表示する新たな機能 Yahoo!検索プラグインの紹介。
</summary>
   <author>
      
   </author>
         <category term="サービス紹介" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは。広報スタッフの楢崎です。<br/><br />
Yahoo! JAPANスタッフが寄稿させていただく連載が「<a href="http://japan.internet.com/">japan.internet.com</a>」にて始まったのでご紹介させていただきます。<br/><br />
<br/><br />
“進化する「LIFE ENGINE」 - Yahoo! JAPAN 2010年の新技術”というタイトルで、Yahoo! JAPAN のサービスを支える技術、その中でも 2010 年に注目すべき新しい技術やサービスについて、各サービス担当者が記事を寄せています。<br/><br />
<a href="http://japan.internet.com/special/yahoo.html">http://japan.internet.com/special/yahoo.html</a><br />
<br/><br />
第一回目として昨年末公開されたばかりの「<a href="http://gallery.search.yahoo.co.jp/welcome">Yahoo!検索プラグイン</a>」について検索チーム 江副より紹介しています。今後も、さまざまな技術・サービスについてご紹介していきますので、お楽しみに。<br/><br />
<small>※「japan.internet.com」のご厚意により、1月13日に掲載された第一回目の記事を以下に転載します。</small><br/><br />
<br/><br />
<br/><br />
-------下記転載-------<br />
<br/><br />
Yahoo! JAPAN は昨年末（2009年12月16日）、検索結果の内容にサイトの情報を整理して表示する新たな機能「<a href="http://gallery.search.yahoo.co.jp/welcome">Yahoo!検索プラグイン</a>」の提供を開始しました。今回はこの新しい機能についてご紹介いたします。<br/><br />
<br/><br />
<h2>■検索結果に遷移先ページの有益な情報を整理して表示</h2><br />
「Yahoo!検索プラグイン」は、検索結果のサマリ（要約文）部分に遷移先のページにある「画像」、「住所」、「価格」「評価の星の数」などの有益な情報を整理して表示する機能です。<br/><br />
遷移先のサイトにどのような情報が掲載されているのかが明確になるので、検索結果をクリックしてがっかりしてしまうこともなく、目的の情報をより早く手にいれることができるようになります。<br />
<br/><br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100119_1.png" align="absmiddle" border="0" /><br/><small>Yahoo!検索プラグインによって有益な情報が表示されるようになる</small></p><br/><br />
<h2>■情報の表示形式は「標準型」と「展開型」の2種類</h2><br />
検索結果を豊かにする表示用プラグインには、2種類の表示形式が用意されています。<br/><br />
 「標準型」：これまでの検索結果の説明文の部分に役立つ情報を見やすく整理して表示します。<br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100119_2.png" align="absmiddle" border="0" /><br/><small>標準型プラグイン</small></p><br/><br />
「展開型」：検索結果下部にそのページに関連する情報を展開する形で表示します。<br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100119_3.png" align="absmiddle" border="0" /><br/><small>展開型プラグイン</small></p><br/><br />
<h2>■表示用プラグインを適用するサイトは追加・削除が可能</h2><br />
「Yahoo!検索プラグイン」ではグルメやレシピ、リファレンス、オークションなど様々なジャンルのサイトに向けてプラグインを用意しています。いくつかのプラグインはあらかじめ組み込まれている状態ですが、必要に応じて自由に追加・削除することができます。<br/><br />
<br/><br />
ご利用になられている Yahoo!検索にどの表示用プラグインが組み込まれているかは、Yahoo!検索の<a href="http://search.yahoo.co.jp/search/preferences">設定</a>ページにて確認することができます。<br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100119_4.png" align="absmiddle" border="0" /><br/><small>設定されている表示用プラグイン一覧</small></p><br/><br />
表示用プラグインを追加するためには、<a href="http://gallery.search.yahoo.co.jp/">プラグイン一覧</a>ページにて追加したいプラグインを確認し、［追加］ボタンをクリックすることで追加することができます。<br/><br />
また、プラグインを削除するには、プラグイン一覧ページで目的のプラグインの右にある［削除］をクリックすることで削除することができます（プラグインの設定には、Yahoo! JAPAN ID でのログインが必要です）。<br />
<p class="img"><img src="http://i.yimg.jp/images/tecblog/2009Q4/20100119_5.png" align="absmiddle" border="0" /><br/><small>利用可能なプラグイン一覧</small></p><br />
このように「Yahoo!検索プラグイン」を利用することによって、Yahoo!検索の利用者は求めているサイトに確実に遷移できるようになり、サイト運営者は自サイトの有益な情報をわかりやすく提示できるようになるというメリットが生まれます。<br />
<br/><br />
現在は Yahoo!検索で提供しているプラグインのみですが、今春にはプラグイン開発ツールが公開され、どなたでもプラグインを作ることができるようになる予定です。<br />
<br/><br/><br />
次回は、「Yahoo!検索プラグイン」を活用するために、サイト運営者、Yahoo!検索利用者が何をすると良いかを紹介したいと思います。</p>]]>
      <![CDATA[(2010/2/1追記)<br />
<a href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_6/">＞＞第2話へ</a>]]>
   </content>
</entry>
<entry>
   <title>Web APIについてのアンケートにご協力ください。</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/web/web_api/" />
   <id>tag:techblog.yahoo.co.jp,2010://25.4277</id>
   
   <published>2010-01-18T02:00:57Z</published>
   <updated>2010-01-18T02:02:05Z</updated>
   
   <summary>Yahoo!デベロッパーネットワークで公開されているWeb APIについてのアンケートにご協力ください。</summary>
   <author>
      
   </author>
         <category term="Webサービス" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは。Yahoo!デベロッパーネットワーク担当です。<br/><br />
いつも<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/kiji/?http://developer.yahoo.co.jp/">Yahoo!デベロッパーネットワーク</a>をご利用いただき、ありがとうございます。<br/><br />
先日、<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/question/?http://event.yahoo.co.jp/forms/yjdn_2010_api/index.html">Web APIに関するアンケートフォーム</a>を公開いたしました。<br/><br />
アンケートの内容は以下のようなものです。<br/><br />
<ul><br />
 <li>Yahoo!デベロッパーネットワークで公開されているWeb APIの中で、どのWeb APIを利用していますか？<br />
</li><br />
 <li>どのようなサイトやコンテンツを作成していますか？</li><br />
 <li>作成してほしい<a href="http://developer.yahoo.co.jp/sample/">サンプルコード</a>はありますか？</li><br />
 <li>Web APIを利用して、困った点や改善してほしい点はありますか？</li><br />
 <li>Yahoo! JAPANのサービスでWeb APIの提供を希望するサービスはありますか？<br/>などなど…</li><br />
</ul></p>

<p>みなさまのご意見、ご要望をこれからのYahoo!デベロッパーネットワーク運営の<br/><br />
参考とさせていただきますので、ご協力のほど、宜しくお願いいたします。<br/> <br />
Yahoo!デベロッパーネットワーク - <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/question/?http://event.yahoo.co.jp/forms/yjdn_2010_api/index.html">Web APIについてのアンケート</a><br />
<br/><br />
<br/></p>

<p><br />
Yahoo!デベロッパーネットワークは <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/kiji/?http://developer.yahoo.co.jp/">こちら </a><br/><br />
APIのご利用には<a href="http://help.yahoo.co.jp/help/jp/developer/developer-06.html">アプリケーションID </a>が必要です。登録は<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/appid/?http://e.developer.yahoo.co.jp/webservices/register_application">こちら </a></p>]]>
      
   </content>
</entry>
<entry>
   <title>モバイル版OAuthの便利な活用方法</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/web/openid/oauth/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.4094</id>
   
   <published>2009-12-18T10:35:20Z</published>
   <updated>2009-12-18T10:44:59Z</updated>
   
   <summary>モバイル版OAuthの便利な活用方法。signatureの生成方法をリクエストの署名で詳しく解説しています。</summary>
   <author>
      
   </author>
         <category term="OpenID/OAuth" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは、IDプラットフォーム技術の近藤です。</p>

<p>先月末にひっそりとモバイル版OAuthをリリースしました。それに併せて<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/other/oauth/">YJDNのOAuth</a>のドキュメントで分かりづらかった部分を更新しています。OAuthのパラメータで最も分かりにくいことで評判(?)なsignatureの生成方法を<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/other/oauth/signinrequest.html">リクエストの署名</a>で詳しく解説していますので、今まで自前でsignatureのロジック実装に挑戦していた開発者の参考になればと思います。</p>

<p>さて、どこがモバイル対応になったのかと言いますと、<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/other/oauth/flow.html">OAuthのフロー</a>の『2. End Userの認可要求』に記載してある、リクエストで指定するパラメータが一つ増えています。ここでConsumerが xoauth_yahoo_mobile=1と指定することでケータイ向けの同意画面を表示させることが可能です（ユーザーがログイン状態でない場合は同意画面の前にログイン画面が挟まれます）。これによりモバイルのConsumerからもOAuth対応APIを利用できるようになりました。</p>

<p>また、ケータイからでもOAuthを利用できるようになったことでモバイルサイトだけでなく、PC以外のデバイス上に実装されるクライアントアプリケーションからの利用がしやすくなりました。例えば、インターネットにつながっているテレビ上で動作するウィジェットでどう利用するか考えてみましょう。</p>

<p>ユーザー認証が必要なAPIを使ったウィジェットを実装したい場合に、文字入力などの操作や表示方法に制約があるテレビ画面上でID・パスワードの入力させたりユーザーの同意確認が必要な注意事項を表示させたりするにはユーザビリティー上問題があります。そこでユーザーが普段から使い慣れているケータイを使ってID・パスワードの入力と同意確認のフローを行わせることで、ユーザーの操作の負荷を軽減させることが可能です。</p>

<p>下の図のようなイメージをすれば分かりやすいかと思います。<br/>
<img src="http://i.yimg.jp/images/tecblog/2009Q3/20091218_1.jpg" align="absmiddle" border="0" /></p>

<p><br />
<p>このQRコードから読み取れるURLには、2つの種類が考えられます。</p></p>

<p>ひとつは、『1. Request Tokenの取得』のレスポンスに含まれる <b>xoauth_request_auth_url</b> のURLの末尾にモバイル表示のパラメータを付加したURLです。こちらを使用する方がユーザーにとって便利でしょう。取得したRequest Tokenが 'xxxxxxx' であった場合のURLはこのようになります。</p>
<div style="padding:1em;border:1px solid #999999;-moz-border-radius:10px;">
https://auth.login.yahoo.co.jp/oauth/v2/request_auth?oauth_token=xxxxxxx&amp;xoauth_yahoo_mobile=1
</div>

<p>二つ目はテレビの画面上にコード（Request Token）を表示して、ケータイで下記のURLにアクセスすると表示される"コード入力画面"からユーザーにTokenを入力させることも可能ですが、画面のステップ数が増えユーザビリティーの面で劣るためオススメしません。</p>
<div style="padding:1em;border:1px solid #999999;-moz-border-radius:10px;">
https://auth.login.yahoo.co.jp/oauth/v2/request_auth?xoauth_yahoo_mobile=1
</div>

<p><br />
<p>ユーザーが注意事項への同意を完了すると、下図のようにケータイの画面に6けたの英数字のコードが表示されます。このコードは<span class="nobr"><a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/other/oauth/flow.html">OAuthのフロー</a>の『3. Access Tokenの取得』で使うoauth_verifierの値です。ウィジェット側でそれを受け取るためにコード入力画面を用意し、ユーザーに入力させるように誘導する必要があります。OAuthの仕様上、クライアントアプリではここでどうしてもユーザーによる入力操作が必要になってしますが、ユーザーにとって必要最小限の手間となるようにしております。</p></p>

<p>
<img src="http://i.yimg.jp/images/tecblog/2009Q3/20091218_2.jpg" align="absmiddle" border="0" /></p>

<p><br />
<p>このようなPC以外のデバイス向けのアプリケーションを個人の開発者が実装するのは敷居が高いと思いますが、通常のPC上で動作するウィジェットでユーザー認証させたい場合でも同様に、<b>xoauth_request_auth_url</b> のURLをウェブブラウザで開かせて、"ログイン"⇒"同意"⇒"コード（oauth_verifier）の表示"のステップを経て、ウィジェット上にコードを入力させるというフローになります。クライアントアプリケーションで何かアイディアがある方はチャレンジしてみてくださいｗビジネス向けにもOAuth対応のAPIを提供していますので、モバイル版OAuthを活用したID連携や商用API利用も可能です。</p></p>

<p>Yahoo!で一般公開のOAuth対応APIはまだ少ないですが、今後どんどん出てくる予定ですのでぜひいろいろ活用してみてください＼(&#94;o&#94;)／</p>

<p></p>

<p><br clear="all" />
<br clear="all" />
Yahoo!デベロッパーネットワーク - <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/other/oauth/">OAuth</a><br/>
Yahoo!デベロッパーネットワークは <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/kiji/?http://developer.yahoo.co.jp/">こちら </a><br/>
APIをご利用前に<a href="http://help.yahoo.co.jp/help/jp/developer/developer-06.html">アプリケーションID </a>の取得を忘れずにお願いします。<br/>
登録は<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/appid/?http://e.developer.yahoo.co.jp/webservices/register_application">こちら </a></p>]]>
      
   </content>
</entry>
<entry>
   <title>mixi ソーシャルアプリケーション アワード ヤフー賞受賞のマイミク通信簿インタビュー</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat206/mixi_yahoo/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.4069</id>
   
   <published>2009-12-17T03:40:18Z</published>
   <updated>2009-12-17T03:52:53Z</updated>
   
   <summary>mixiさんで開催されていたソーシャルアプリケーションアワードでヤフー賞を受賞された「マイミク通信簿」の受賞者の空飛ぶ株式会社 赤星さんにインタビューをしました。</summary>
   <author>
      
   </author>
         <category term="イベント" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちはTech Blogスタッフの井野です。<br/>
先日、mixiさんで開催されていた<a href="http://developer.mixi.co.jp/award" target=new>ソーシャルアプリケーションアワード</a>の結果</a>が<a href="http://developer.mixi.co.jp/award/2009winners2" target=new>発表</a>されました。<br/>
ヤフー賞は<a href="http://soratobu.jp/" target=new>空飛ぶ株式会社</a>の「<a href="http://mixi.jp/view_appli.pl?id=225" target=new>マイミク通信簿</a>」に決定しました。</p>

<h2>マイミク通信簿ってどんなソーシャルアプリ？</h2>
<p>マイミクに「どっちがおしゃれ？」「どっちが料理上手？」など<br/>
いろいろな評価して通信簿をつけることができるアプリです。<br/>
また自分のマイミクからの評価を知ることができたり<br/>
マイミクの意外な一面を知ることができるかもしれません！</p>

<h2>ヤフー賞の選出理由</h2>
<div  style="border: 1px solid rgb(153, 153, 153); background-color: rgb(); -moz-border-radius: 10px; padding:1em;">
<p>直感的に楽しめて、ふとまじめに考えてしまう楽しいアプリ。<br/>
mixiのソーシャルグラフをうまくつかっておりmixiらしいアプリケーションだと思います。<br/>
ヤフーのプロフィールにもこういう楽しい機能があったりするとよいなと思い、<br/>
選出させていただきました。
<small>（パートナーソリューション本部 サービス企画1部部長　森岡康一）</small></p>
</div>

<p><br/><br/><br />
早速ヤフー賞を受賞された「<a href="http://mixi.jp/view_appli.pl?id=225">マイミク通信簿</a>」の受賞者の<br/><br />
<a href="http://soratobu.jp/" target=new>空飛ぶ株式会社</a> 赤星さんにインタビューをしました。</p></p>

<p><br />
<img src="http://i.yimg.jp/images/tecblog/2009Q3/20091217.jpg" align="absmiddle" border="0" /><br />
<br/><small>受賞者の赤星さん 賞品を手にポーズ！</small></p>

<p></p>

<dl><dt>――Tech Blog：作品を開発したきっかけを教えてください。</dt>
<dd>海外のオープンソーシャルアプリではライトな感じで友だち同士でちょっかいを出すものがはやっていましたので、それらから発想を得て開発しました。</dd>
</dl>

<dl><dt>――Tech Blog：この作品のアピールポイントを教えてください。</dt>
<dd>誰でも簡単に始められるという点です。 ネーミングも誰もがイメージしやすいように「通信簿」という言葉を使いました。</dd>
</dl>

<dl><dt>――Tech Blog：開発中、最も苦戦したことは何ですか？</dt>
<dd>PC版ではJavaScriptを多用しているのですがブラウザ間の互換性が大変でした。</dd>
<dd>モバイル版ではサービスを開始した直後、ユーザー数が予想以上に急増してサーバー対応が大変でした。現在はアマゾンEC2で20台くらいで運用しています。</dd>
</dl>

<dl><dt>――Tech Blog：ヤフーのAPIを使うとしたら？</dt>
<dd>mixiさん上でYahoo! JAPAN IDのユーザー情報が使えると面白いかもしれませんね。</dd>
</dl>

<dl><dt>――Tech Blog：開発は何名でどのくらいかかりましたか？</dt>
<dd>私が1、2週間くらいで大まかなものを作り、そこからデザイナーさんに加わってもらいデザインを修正しました。リリースして登録数が増えてからはインフラ周りを強化するためサーバーエンジニアが一人増えた感じです。
</dd></dl>

<p><br />
<dl><dt>――Tech Blog：作品を開発するにあたって意識したことは何ですか？</dt><br />
<dd>ページデザインについては開いたら何をしていいかわかりやすいというところ、誰でもすぐ遊べることに意識しました。</dd><br />
<dd>また、mixiアプリモバイルの仕様で5秒以内にレスポンスを返せないことが多々あると、新規ユーザーが取り込めない状態になるので、マイミクの情報をキャッシュしたりとかDB接続回数を少なくしたりと負荷対策には力をいれました。<br/><br />
<small>（mixiさんからのコメント「2009/12/15現在は、3分間の間に1000回、10秒レスポンスがない場合には新規join停止になります」）</small></dd><br />
<dd>PC版ではあまり意識していませんでしたが、モバイル版の時はマイミクの情報をあまりとらないようにとかDBの書き込みを少なくしたりしました。<br />
また、モバイル版リリースで登録数が激増したためランキング表示もリアルタイムではなくてバッチ処理に変えるなどしました。</dd><br />
</dl></p>

<dl><dt>――Tech Blog：この作品の次なる展開はありますか？</dt>
<dd>今、作成中ですが質問のパターンを増やしていくというのがあります。</dd>
<dd>例えば、サンタっぽい人はだれ？など世の中のイベントにマッチさせたりなどを考えています。また、ランキング集計バッチの改修でDBのさらなる負荷軽減も進めていきたいです。</dd>
</dl>

<dl><dt>――Tech Blog：今後、ウェブを通じてやりたいことはありますか？</dt>
<dd>今よくつかっているサービスが、Twitterなのですが自分の発言が常に人に見られている感があってすごく面白いと思います。
これは人間の根本的な欲求を満たしていると思うのですが、今後はその様な自分の欲求を満たせるものや自分が面白いと思うものをつくっていきたいです。</dd>
</dl>

<dl><dt>――Tech Blog：ヤフー賞受賞に関してのコメントをいただけますか？</dt>
<dd>ゆるーい感じのアプリだったんですが、あのヤフーさんから賞をいただいたけてびっくりしました。</dd>
</dl>

<dl><dt>最後にヤフー賞受賞に関してソーシャルアプリケーションアワード担当 井原さんよりコメントをいただきました</dt>
<dd>いろいろな企業さんに協賛いただいております。個々の企業によって賞の選出するポイントのが異なるので非常に興味深かったです。アプリランキングでも上位にいる通信簿が受賞して嬉しいです。</dd>
]]>
      
   </content>
</entry>
<entry>
   <title>Yahoo! JAPAN Internet Creative Award 2009受賞作品＆贈賞式映像</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat206/yahoo_japan_internet_creative/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.4070</id>
   
   <published>2009-12-16T03:14:04Z</published>
   <updated>2009-12-16T04:15:56Z</updated>
   
   <summary>11月18日（水）、Yahoo! JAPAN インターネット クリエイティブアワードのグランプリならびに各賞への贈賞式が行なわれました。贈賞式当日の映像もまじえて、受賞作品をご紹介します。</summary>
   <author>
      
   </author>
         <category term="イベント" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは。YJICAスタッフです。<br><br />
(YJICA = <a href="http://creative-award.yahoo.co.jp/">Yahoo! JAPAN インターネット クリエイティブアワード</a>の略です。) <br><br />
<br><br />
11月18日（水）、Yahoo! JAPAN インターネット クリエイティブアワードのグランプリならびに各賞への贈賞式が行なわれました。<br><br />
贈賞式当日の映像もまじえて、受賞作品をご紹介します。<br />
<br><br />
お時間のあるときに、ぜひじっくりご覧ください！<br><br />
<br><br />
<br><br />
<strong><font size="4">【グランプリ】</font></strong><br><br />
<br><br />
<p><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091216_1.png" align="absmiddle" border="0" /></p><br />
<ul><br />
<li>一般の部　Grand Prix：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=293">Blogopolis</a> （浜本階生）</li><br />
</ul><br />
<br><br />
<p><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091216_2.png" align="absmiddle" border="0" /></p><br />
<ul><br />
<li>企業の部　Grand Prix：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=282">どこでもラストガイ</a></li><br />
<ul><br />
<li>クライアント：株式会社ソニー・コンピュータエンタテインメント</li><br />
<li>広告代理店：株式会社電通</li><br />
<li>制作会社：IMG SRC<br></li><br />
</ul><br />
</ul><br />
<ul><br />
<br><br />
<strong>▼グランプリ：贈賞式映像</strong><br><br />
<object width="425" height="350"> <param name="movie" value="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448707" ></param> <param name="wmode" value="transparent"></param> <param name="vid" value="288230376152448707"></param> <embed src="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448707" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"> </embed> </object><br />
<br><br />
<br><br />
<br><br />
<strong><font size="4">【一般の部　各賞】</font></strong><br><br />
<br><br />
<strong>▼ウェブコンテンツ部門</strong><br><br />
インターネット上で閲覧できるすべてのオリジナル作品を対象とした部門です。<br><br />
<ul><br />
<li>Gold：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=292">ENDLESS NIGHTMARE</a> （山本文　森本友理）</p>

<p></li><br />
<li>Silver：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=291">midair30cm</a> （鈴木健司）</li><br />
<li>Bronze：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=290">BUILDINGS</a> （上甲トモヨシ）</li><br />
</ul><br />
<br><br />
<strong>▼バナー部門（テーマ1「LIFE ENGINE」）</strong><br><br />
「<a href="http://docs.yahoo.co.jp/info/life_engine/">LIFE ENGINE</a>」としてのYahoo! JAPANをテーマとしたプロモーションバナーを募集しました。<br><br />
<ul><br />
<li>Gold：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=289">Yahoo! DOG</a> （ADBRAIN interactive division）</li><br />
<li>Silver：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=288">Yahoo!スタンプラリー</a> （島田宣幸）</li><br />
<li>Bronze：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=287">あいさつ</a> （内田伸哉　加藤寛之　中原祐輔）</li><br />
</ul><br />
<br><br />
<strong>▼バナー部門（テーマ2「公共広告」）</strong><br><br />
「公共広告」をテーマにしたプロモーションバナーを募集しました。</li><br />
<ul><br />
<li>Gold：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=286">描いたあとは</a> （大村昇平）</li><br />
<li>Silver：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=285">削る</a> （上田貴宏）</li><br />
<li>Bronze：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=284">どうぶつおりがみ</a> （ADBRAIN interactive division）</li><br />
</ul><br />
<br><br />
<br><br />
<strong>▼一般の部：贈賞式映像</strong><br><br />
<object width="425" height="350"> <param name="movie" value="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448158" ></param> <param name="wmode" value="transparent"></param> <param name="vid" value="288230376152448158"></param> <embed src="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448158" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"> </embed> </object><br />
<br><br />
<br><br />
<br><br />
<strong><font size="4">【企業の部　各賞】</font></strong><br><br />
<br><br />
<strong>▼ウェブコンテンツ部門</strong><br><br />
2008年8月9日〜2009年8月17日に公開された、企業・各種団体によるウェブサイトを対象とした部門です(コーポレートサイト、プロダクトサイト、キャンペーンサイトなどすべて含みます)。<br><br />
<ul><br />
<li>Gold：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=281">TOKYO FASHION MAP</a></li><br />
<ul><br />
<li>クライアント：株式会社ユニクロ</li><br />
<li>広告代理店：株式会社電通</li><br />
<li>制作会社：株式会社電通テック、株式会社バスキュール、株式会社モンスター☆ウルトラ</li><br />
</ul><br />
</ul><br />
<ul><br />
<li>Silver：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=280">INTERNAVI REALIZATION</a></li><br />
<ul><br />
<li>クライアント：本田技研工業株式会社</li><br />
<li>広告代理店：株式会社電通</li><br />
<li>制作会社：metaphor、SEMITRANSPARENT DESIGN、1-10 design、シプー</li><br />
</ul><br />
</ul><br />
<ul><br />
<li>Bronze：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=279">Cam with me</a></li><br />
<ul><br />
<li>クライアント：Sony Marketing (Japan) Inc.</li><br />
<li>広告代理店：株式会社博報堂</li><br />
<li>制作会社：TYO Interactive Design Inc. 、602 inc. 、TYO Productions Inc.</li><br />
</ul><br />
</ul><br />
<br><br />
<strong>▼バナー部門</strong><br><br />
2008年8月9日〜2009年8月17日にYahoo! JAPANに掲載された広告バナーすべてを対象とした部門です。<br><br />
<ul><br />
<li>Gold：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=278">ウルトラマン・オフィシャルデータファイル</a></li><br />
<ul><br />
<li>クライアント：株式会社デアゴスティーニ・ジャパン</li><br />
<li>広告代理店：株式会社博報堂</li><br />
<li>制作会社：株式会社博報堂アイ・スタジオ</li><br />
</ul><br />
</ul><br />
<ul><br />
<li>Silver：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=277">魔法の窓</a></li><br />
<ul><br />
<li>クライアント：トステム株式会社</li><br />
<li>広告代理店：株式会社オプト</li><br />
<li>制作会社：株式会社オプト</li><br />
</ul><br />
</ul><br />
<ul><br />
<li>Bronze：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=276">デコクレ</a></li><br />
<ul><br />
<li>クライアント：トヨタ自動車株式会社</li><br />
<li>広告代理店：株式会社電通</li><br />
<li>制作会社：株式会社電通テック、株式会社電通レイザーフィッシュ、株式会社カヤック</li><br />
</ul><br />
</ul><br />
<br><br />
<br><br />
<strong>▼企業の部：贈賞式映像</strong><br><br />
<object width="425" height="350"> <param name="movie" value="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448966" ></param> <param name="wmode" value="transparent"></param> <param name="vid" value="288230376152448966"></param> <embed src="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448966" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"> </embed> </object><br />
<br><br />
<br><br />
<br><br />
<strong><font size="4">【特別賞】</font></strong><br><br />
<ul><br />
<li>Creative Hack賞：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=274">ToriSat　〜　国際宇宙ステーションを見よう！</a> （ごうだまりぽ）</li><br />
</ul><br />
<font size="-1">※選考対象は、企業の部、一般の部エントリー作品中で、ウェブ上で公開されているAPI、もしくは、それに類するウェブ上で提供される各種サービスを利用した作品です。</font><br />
<br><br />
<ul><br />
<li>Silverlight賞：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=273">logpaper novel editor</a>（コンテンツワークス株式会社）</li><br />
</ul><br />
<font size="-1">※選考対象は、企業の部、一般の部エントリー作品中で、Microsoft(R)Silverlight(TM)を使用した作品です。</font><br />
<br><br />
<ul><br />
<li>デジタルハリウッド賞：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=275">英語発音マップ</a>（長澤智也）</li><br />
</ul><br />
<font size="-1">※選考対象は一般の部エントリー作品の中で、8月1日時点で25歳以下の作者による作品です。</font><br />
<br><br />
<ul><br />
<li>Yahoo!オークション＆Yahoo!ショッピングAPI特別賞：<a href="http://creative-award.channel.yahoo.co.jp/index.php?itemid=272">ゆるゆる鑑定メカ</a>（株式会社オークファン）</li><br />
</ul><br />
<font size="-1">※選考対象は、企業の部、一般の部エントリー作品中で、Yahoo!ショッピングAPI、もしくはYahoo!オークションAPIを利用した作品です。 </font><br />
<br><br />
<br><br />
<strong>▼特別賞：贈賞式映像</strong><br><br />
<object width="425" height="350"> <param name="movie" value="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448157" ></param> <param name="wmode" value="transparent"></param> <param name="vid" value="288230376152448157"></param> <embed src="http://i.yimg.jp/images/videocast/swf/vsuexy.swf?vid=288230376152448157" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"> </embed> </object><br />
<br><br />
<br><br />
受賞作品と受賞者を、今後Tech Blogでも順次、ご紹介していく予定です！</p>]]>
      
   </content>
</entry>
<entry>
   <title>本日、TechBlogは一歳になりました！</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat191/techblog/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.4035</id>
   
   <published>2009-12-11T01:08:28Z</published>
   <updated>2009-12-11T01:44:35Z</updated>
   
   <summary>本日、TechBlogは一歳になりました！ランキングで一年間を振りかえります。</summary>
   <author>
      
   </author>
         <category term="お知らせ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちはTech Blogスタッフの井野です。<br/><br />
早いもので、今日でTech Blogを<a href="http://techblog.yahoo.co.jp/cat191/yahoo_japan_tech_blog/">リリース</a>してから一年がすぎました。<br/><br />
一周年を記念しまして、プチリニューアルしました。どこが変わったかわかりますか？<br/><br />
こちらは昨日までのデザインです。<br/><br />
<img src="http://i.yimg.jp/images/tecblog/2009Q3/20091211.jpg" align="absmiddle" border="0" /></p>

<h2>Tech Blog振り返り</h2>

<p>思い起こせば、一年前、<a href="http://techblog.yahoo.co.jp/cat206/hack_day2/">Hack Day</a>にエンジニアとして参加していた私ですが、<br/><br />
企画に転向し、最初の仕事がこのTech Blogの立ち上げでした。<br/><br />
このブログの使命はYahoo!の作り上げてきたシステム、そして、それを支える技術者達を紹介し、Yahoo!の技術力を多くの人に知ってもらうことだと思っています。<br/><br />
このブログが皆様の仕事の参考になったり、記事を通してYahoo!を少しでも身近に<br/><br />
感じてもらえると嬉しいです。</p>

<p></p>

<p><br/><br/><br />
<p>では、一周年記念ですので、ランキングで一年間を振り返ってみたいと思います。</p></p>

<p><br />
<h4>Tech Blog検索ワードランキング</h4><br />
<table><tbody><br />
<tr><br />
<th> 順位 </th><br />
<th> ワード </th><br />
</tr><br />
<tr><br />
<td> 1位 </td><br />
<td> hadoop </td><br />
</tr><br />
<tr><br />
<td> 2位 </td><br />
<td> hadoopとは </td><br />
</tr><br />
<tr><br />
<td> 3位 </td><br />
<td> iphone アプリ </td><br />
</tr><br />
<tr><br />
<td> 4位 </td><br />
<td> tech blog </td><br />
</tr><br />
<tr><br />
<td> 5位 </td><br />
<td> techblog </td><br />
</tr><br />
<tr><br />
<td> 6位 </td><br />
<td> php serialize </td><br />
</tr><br />
<tr><br />
<td> 7位 </td><br />
<td> 翻訳ルーペ </td><br />
</tr><br />
<tr><br />
<td> 8位 </td><br />
<td> yahoo tech blog </td><br />
</tr><br />
<tr><br />
<td> 9位 </td><br />
<td> yahoo openid </td><br />
</tr><br />
<tr><br />
<td> 10位 </td><br />
<td> jsonp </td><br />
</tr><br />
</tbody></table><br />
hadoopやiphoneが注目されていますね。ちなみに記事はこちらです。<br />
<ul><br />
<li><br />
<a href="http://techblog.yahoo.co.jp/cat207/cat209/hadoop/">Hadoopで、かんたん分散処理</a><br />
</li><br />
<li><br />
<a href="http://techblog.yahoo.co.jp/honyaku/">iPhoneアプリ「翻訳ルーペ」</a><br />
</li><br />
</ul></p>

<p>php serializeはこの記事<br />
<ul><br />
<li><br />
<a href="http://techblog.yahoo.co.jp/web/yahoo/post_1/">PHP SERIALIZEのススメ</a><br />
</li><br />
</ul><br />
Yahoo! OpenIDはこちら<br />
<ul><br />
<li><br />
<a href="http://techblog.yahoo.co.jp/web/openid/openid/">OpenIDブログをはじめました</a><br />
</li><br />
<li><br />
<a href="http://techblog.yahoo.co.jp/web/openid/10yahooopenid_rp/">10分で作るYahoo! OpenID RP</a><br />
</li><br />
</ul></p>

<p>そしてjsonpはこちら<br />
<ul><br />
<li><br />
<a href="http://techblog.yahoo.co.jp/cat207/web_1/jsonpjavascript/">JSONPを使ってJavaScriptだけでマッシュアップ</a><br />
</li><br />
</ul></p>

<p><br />
<h4>最後に記事の人気ランキングトップ20をご紹介します</h4><br />
<table><tbody><br />
<tr><br />
<th> 順位 </th><br />
<th> 記事タイトル </th><br />
</tr><br />
<tr><br />
<td> 1位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/cat209/hadoop/">Hadoopで、かんたん分散処理</a> </td><br />
</tr><br />
<tr><br />
<td> 2位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/honyaku/">iPhoneアプリ「翻訳ルーペ」</a> </td><br />
</tr><br />
<tr><br />
<td> 3位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/vs/">1000万画像を1秒以内で検索 VisualSeeker</a> </td><br />
</tr><br />
<tr><br />
<td> 4位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/cat214/inside_yahoo_1botnet/">Inside Yahoo&#33;メール 第1話「迷惑メールとBotnet」</a> </td><br />
</tr><br />
<tr><br />
<td> 5位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/snaka/">「サーチのなかみ」でわかる検索ワードのウラオモテ</a> </td><br />
</tr><br />
<tr><br />
<td> 6位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/web/openid/yahoo_japanoauthservice_provid/">Yahoo&#33; JAPANがOAuthのService Providerになりました！</a> </td><br />
</tr><br />
<tr><br />
<td> 7位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/how_to/post_12/">エンジニアにもわかる「ユーザーインターフェース設計」</a> </td><br />
</tr><br />
<tr><br />
<td> 8位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/how_to/headtail/">ソースコードリーディング(head,tailコマンド編)</a> </td><br />
</tr><br />
<tr><br />
<td> 9位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/rerank/">「Rerank」で新しい検索を体験しよう！</a> </td><br />
</tr><br />
<tr><br />
<td> 10位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/web_1/jsonpjavascript/">JSONPを使ってJavaScriptだけでマッシュアップ</a> </td><br />
</tr><br />
<tr><br />
<td> 11位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/web/yahoo_1/ls/">lsコマンドをハックしてみよう</a></td><br />
</tr><br />
<tr><br />
<td> 12位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/web/_api/api_6/">キーフレーズ抽出API の紹介</a></td><br />
</tr><br />
<tr><br />
<td> 13位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_3/">Yahoo!ニュース高速化へのサイトデザイン側からのアプローチ</a></td><br />
</tr><br />
<tr><br />
<td> 14位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/cat214/inside_yahoo_2/">Inside Yahoo!メール 第2話「分析！迷惑メール」</a></td><br />
</tr><br />
<tr><br />
<td> 15位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_1_1/">Yahoo!ツールバー 工夫を凝らしたボタンの作り方　第1回</a></td><br />
</tr><br />
<tr><br />
<td> 16位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/db/mysql_failover/">Yahoo!オークションでのMySQL 冗長化技術</a></td><br />
</tr><br />
<tr><br />
<td> 17位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/how_to/kill/">ソースコードリーディング(killコマンド編)</a></td><br />
</tr><br />
<tr><br />
<td> 18位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat207/how_to/post_13/">Yahoo!検索の「ユーザーインターフェース設計」</a></td><br />
</tr><br />
<tr><br />
<td> 19位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/web/openid/phpyahoooauthapi/">PHPでYahoo!のOAuth対応APIにアクセスしてみよう！</a></td><br />
</tr><br />
<tr><br />
<td> 20位 </td><br />
<td> <a href="http://techblog.yahoo.co.jp/cat191/mixiyahoo_japan/">mixiで使える、Yahoo! JAPANのサービスあれこれ</a></td><br />
</tr><br />
</tbody></table></p>

<p><br />
<p>20位からは漏れておりますが、<a href="http://techblog.yahoo.co.jp/cat207/how_to/post_3/">エンジニアの勉強法について</a>なども<br/><br />
記事公開時には非常に反響がありました。</p></p>

<p><br />
<p><br />
これからもTech Blogをよろしくお願いいたします。</p><br />
</p>]]>
      
   </content>
</entry>
<entry>
   <title>商品レビュー検索APIを公開しました！</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/web/yahoo_1/api_8/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.4000</id>
   
   <published>2009-12-09T05:30:30Z</published>
   <updated>2009-12-09T05:51:45Z</updated>
   
   <summary>Yahoo!ショッピングAPIに商品レビュー検索APIを追加いたしました。</summary>
   <author>
      
   </author>
         <category term="Yahoo!ショッピング" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは、コンシューマ事業統括本部の稲葉です。<br />
一昨日、Yahoo!ショッピングAPIに<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/kiji/?http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/reviewsearch.html">商品レビュー検索API</a>を追加いたしました。</p>

<p>商品レビュー検索APIは、Yahoo!ショッピング内で書き込まれたお客様の口コミを、<br />
カテゴリ別やストア別などの切り口で、新着順や、レビュー数順で商品レビューの一覧を<br />
取得する事ができるAPIです。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091209.jpg" align="absmiddle" border="0" /></p>

<p>例えば、ゴルフクラブカテゴリで書き込まれたレビュー一覧や、<br />
焼酎カテゴリで書き込まれたレビュー一覧、といった情報をAPIを通して取得して、<br />
アプリケーションやサービス内でご活用いただく事ができます。<br />
Yahoo!ショッピングに存在する2,800万以上の商品を対象にして書かれた、<br />
新着順の商品レビューを見ているだけでも楽しいですよ。</p>

<p><br />
商品レビュー検索APIで取得できる情報ですが、レビュータイトルや本文だけでなく、<br />
画像等の商品情報、購入用途、レビュー点数や件数、レビューが書き込まれた時間、<br />
ストア情報、カテゴリツリー情報等、豊富な情報を取得していただけます。<br />
データ形式も他のYahoo!ショッピングAPI同様にXML、JSONP、PHPserializeに対応していますので、<br />
サーバーサイドで動くアプリケーション以外にも、クライアントサイドで動くブログパーツのような物にも<br />
自由に利用していただければと思います。</p>

<p><br />
Yahoo!ショッピングを普段ご利用いただいているお客様は、上記説明で<br />
すでにお気づきかもしれませんが、実はYahoo!ショッピング本体には、商品レビューを<br />
カテゴリ別に閲覧したり、新着順に口コミ情報を閲覧できるコンテンツは未だ存在しません。</p>

<p>商品レビュー検索APIは、コンテンツマッチAPIに続き、開発者様向けに一から設計し開発した<br />
機能になります。<br />
Yahoo!ショッピングの口コミデータベースとYahoo!ショッピング内では未使用の機能を、<br />
開発者様のアイデアの詰まったアプリケーション作りに、ぜひご活用ください！</p>

<p><br />
Yahoo!デベロッパーネットワーク - <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/kiji/?http://developer.yahoo.co.jp/webapi/shopping/">ショッピングAPI </a><br />
Yahoo!デベロッパーネットワークは <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/kiji/?http://developer.yahoo.co.jp/">こちら </a><br />
APIをご利用前に<a href="http://help.yahoo.co.jp/help/jp/developer/developer-06.html">アプリケーションID </a>の取得を忘れずにお願いします。<br />
登録は<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/appid/?http://e.developer.yahoo.co.jp/webservices/register_application">こちら </a><br />
</p>]]>
      
   </content>
</entry>
<entry>
   <title>Yahoo!ツールバー 工夫を凝らしたボタンの作り方　第2回</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_2_1/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.3659</id>
   
   <published>2009-11-02T02:12:24Z</published>
   <updated>2009-11-02T02:14:33Z</updated>
   
   <summary>2009年8月に、「Yahoo!ツールバー ギャラリー」が公開され、Yahoo!ツールバー用のボタンを自分で作成できるようになりました。
このボタンは、自分専用として使用できるほか、「公開審査」を受け、合格することで、Yahoo!ツールバーを使用しているほかの人も使うことができるようになります。
通常のウィザードでは作ることのできない、工夫を凝らしたボタンの作り方を2回に分けて紹介します。</summary>
   <author>
      
   </author>
         <category term="サービス紹介" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは、アプリケーション開発部の市川・洲崎・鈴木です。<br/>
<a href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_1_1/">前回の記事</a>に引き続き、<a href="http://toolbar.yahoo.co.jp/">Yahoo!ツールバー</a>用のボタンの作り方をご紹介します。</p>
<br/>

<h3>変数を使いこなそう − {query1} 〜 {query10} </h3>
<p>前回ご説明した通り、ツールバーでは{query}や{select}などの記述を用いることで、パラメータの置換が行えました。これらの置換の出来る文字列は"変数"と呼ばれ、ほかにもいくつかの変数が用意されています。<br/>
この中でも、特に面白い使い方の出来る{query1} 〜 {query10}の変数について説明したいと思います。</p>
<br/>
<p>{query}の変数については、先ほどお話をした通り、Yahoo!ツールバーの検索窓に入力されたキーワードに置換するためのものでした。<br/>
それに対して、今回使用する{query1} 〜 {query10}の変数は、"検索窓に入力されたもキーワードのうち、スペースで区切られたそれぞれの文字列"になります。<br/>
言葉では分かりにくいとおもいますので、以下に具体例を記載します。</p>
<br/>
<table border="1"><tbody>
<tr>
<th>検索ボックスの中身</th>
<th class='confluenceTh'>それぞれの変数の内容</th>
</tr>
<tr>
<td>本日 東京 天気</td>
<td>{query1} ･･･ 本日<br/>
{query2} ･･･ 東京<br/>
{query3} ･･･ 天気</td>
</tr>
<tr>
<td>今日 ニュース 一覧 見出し</td>
<td>{query1} ･･･ 今日<br/>
{query2} ･･･ ニュース<br/>
{query3} ･･･ 一覧<br/>
{query4} ･･･ 見出し</td>
</tr>
</tbody></table>
<br/>
<p>上記のように、検索窓にスペース区切りで"本日 東京 天気"という文字列が入力されていると、{query1}が本日、{query2}が東京、{query3}が天気というように、順番にqueryの○番として文字列が変数に割り当てられていきます。</p>
<p>これを利用すると、例えばYahoo!地図のサービスの一つの、周辺検索と連携したボタンを作ることも可能です。<br/>
周辺検索のサービスでは、URL中のパラメータqが検索したい周辺部分に該当する文字列となり、パラメータpが探したいものの対象となる文字列として扱われます。<br/>
ですので、実際に変数を記述したXMLを作ってみると、こんな感じになります。</p>

<pre name="code" class="xml">
&lt;item type="link"&gt;
  &lt;title&gt;&lt;![CDATA[Yahoo! 地図 周辺検索]]&gt;&lt;/title&gt;
  &lt;action&gt;
    &lt;url&gt;&lt;![CDATA[http://map.yahoo.co.jp/pl?q={query1}&amp;p={query2}&amp;ei=UTF-8&amp;fa=as]]&gt;&lt;/url&gt;
  &lt;/action&gt;
&lt;/item&gt;</pre>

<p>例えば検索窓に"東京ミッドタウン ランチ"と入力している状態で上記が実行されると、{query1}が東京ミッドタウン、{query2}がランチという文字列に割り当てられているので、東京ミッドタウン周辺のランチの検索結果のページが表示されます。</p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091030_01.png" align="absmiddle" border="0" /></p>

<p><br />
<p>「ボタンXMLリファレンス」には、路線検索を例にした{query1} 〜 {query10}の使い方が記載されています。そのほかにも、工夫次第で{query1} 〜 {query10}を使うことで面白いボタンが作れると思うので、ぜひこれらの変数を使用したボタンを作ってみてください。</p></p>

<p><br />
<h3>変数を使いこなそう − {url} </h3><br />
<p>さて、もう少し変数を見ていきましょう。今度は{url}の変数です。<br/><br />
こちらの変数は "現在見ているページのURL"に置換されます。なかなか使いどころの難しい変数かとは思いますが、例えばこれらはYahoo!ブックマークのサービスと連携させることが出来ます。<br/><br />
Yahoo!ブックマークでは、あるページのURLが ブックマークのサービスでどれだけ登録されているのか？などの情報を知ることが出来ます。<br/><br />
item部分だけを記述してみると、こんな感じになります。</p></p>

<pre name="code" class="xml">
&lt;item type="link"&gt;
  &lt;title&gt;&lt;![CDATA[ブックマーク情報]]&gt;&lt;/title&gt;
  &lt;action&gt;
    &lt;url&gt;&lt;![CDATA[http://bookmarks.yahoo.co.jp/url?url={url}]]&gt;&lt;/url&gt;
  &lt;/action&gt;
&lt;/item&gt;</pre>

<p><br />
<p>上記を実行すると、現在見ていたページが、Yahoo!ブックマークでどれだけ登録されているか、などの情報を見るページに移動します。</p></p>

<p><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091030_02.png" align="absmiddle" border="0" /></p>

<p><br />
<p>いろいろなサイトにいるときに、そのサイトがどれだけYahoo!ブックマークに登録されているかを確認できるので、いろいろなページにいるときに試してみると面白いでしょうね。</p></p>

<p><br />
<h3>おすすめボタン </h3><br />
<p>最後におすすめボタンを紹介しておきたいと思います。<br/><br />
ボタン作成ページからXMLを記述して以下のボタンを作ってみてください。</p></p>

<pre name="code" class="xml">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;button xmlns="urn:yahoo:jp:toolbar"&gt;
  &lt;style&gt;push&lt;/style&gt;
  &lt;item type="link"&gt;
    &lt;title&gt;&lt;![CDATA[知恵袋]]&gt;&lt;/title&gt;
    &lt;tooltip&gt;&lt;![CDATA[知恵袋]]&gt;&lt;/tooltip&gt;
    &lt;action&gt;
      &lt;url&gt;&lt;![CDATA[http://search.chiebukuro.yahoo.co.jp/search/search.php?p={query}]]&gt;&lt;/url&gt;
　  &lt;/action&gt;
  &lt;/item&gt;
  &lt;menu/&gt;
&lt;/button&gt;</pre>

<p><br />
<p>こちらは知恵袋の解決済みの内容を検索するボタンになります。<br/><br />
仕事中、調べ物をしているとき、家でインターネットをしているときなどいろいろな場面で、困ったことがあったら、その内容をツールバーの検索窓に入力して、このボタンを押してみてください。<br/><br />
仕事に集中できない、お腹が痛い、よく肩が凝る、気分が落ち込んでいる、など日々いろいろと困ったことがあると思います。<br/><br />
そんなときにいつでもすぐに、ほかの人たちがどのように同じ問題を解決してきたのか、先人達の"知恵袋"で、あなたの悩みを解決してくれるに違いありません（笑）</p></p>

<p><br />
<p><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091030_03.png" align="absmiddle" border="0" /></p></p>

<p><br/><br />
<h3></a>最後に</h3><br />
<p>作成したボタンは、自分専用でも使えますが、面白いボタンができあがったら、ぜひ公開審査を申請してみてください。ボタンの作成、公開などは<a href="http://toolbar.yahoo.co.jp/">Yahoo!ツールバートップページ</a>の右上にある「ボタン作成・管理」から行えます。<br/><br />
なお、ボタンの詳しい作り方は、「<a href="http://i.yimg.jp/images/toolbar/jp/gallery/pdf/BtnXMLReferenceGuide.pdf">ボタンXMLリファレンスガイド</a>（PDF）」に記載されています。もっと工夫したボタンを作ってみたいと思った方は、リファレンスガイドもご参照ください。</p><br />
 </p>]]>
      
   </content>
</entry>
<entry>
   <title>「Yahoo!オークション 構築・運用ノウハウ大公開」をWEB+DB PRESS Vol.53に寄稿しました！</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat191/webdb_press_vol53yahoo/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.3617</id>
   
   <published>2009-10-23T06:00:20Z</published>
   <updated>2009-10-27T01:58:11Z</updated>
   
   <summary>10月24日（土）に発売されるWEB+DB PRESSにYahoo!オークションスタッフが記事を寄稿しておりますのでご紹介させていただきます。</summary>
   <author>
      
   </author>
         <category term="お知らせ" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p> みなさまこんにちは、TechBlogスタッフの井野です。<br />明日10月24日（土）に発売されるWEB+DB PRESSにYahoo!オークションスタッフが<br/>
記事を寄稿しておりますのでご紹介させていただきます。</p>

<p><img src="http://i.yimg.jp/images/auct/cms/staff/contents/20091022_002.jpg" align="absmiddle" border="0" /></p>

<p><br />
<p>おかげ様で、Yahoo!オークションは今年で<a href="http://ec10years.yahoo.co.jp/">10周年</a>を迎えました。<br/><br />
初めは、米国Yahoo!で開発したシステムをローカライズし、数十台のマシンでスタートしましたが、<br/><br />
2009年10月現在では稼動サーバー台数は2,800台になり、<br /><br />
出品数でも、1999年12月時点で10万件でしたが、現在の平均総出品数は1,982万件になります。</p></p>

<p></p>

<p>本書の内容は、上記の数字だけでは語りつくせない、10年間のYahoo!オークション システムの歴史と<br/>
設計思想からスケール確保、高速化、安定稼働、さらにWebAPIにいたる・構築・運用方法の紹介<br/>
そして今後の展開など非常に充実した内容になっております。<br/>
大規模システム開発や運用に関する情報収集などにもぜひ、お役立てください。</p>

<p><strong> 雑誌名</strong><br /><br />
　<a href="http://gihyo.jp/magazine/wdpress/archive/2009/vol53" target="blank"><strong>WEB+DB PRESS Vol.53</strong></a>（外部リンク）<br/><br />
　　技術評論社 / 2009年10月24日発売 / B5判224ページ<br/><br />
　　定価1,554円（本体1,480円） / ISBN 978-4-7741-4004-9<br/><br />
<!-- <img src="http://i.yimg.jp/images/sicons/shopping16.gif"><a href="http://store.shopping.yahoo.co.jp/7andy/r0452974.html"> 7＆Y セブンアンドワイなら、セブン-イレブンで24時間受取りOK・送料0円実施中</a><font size="-2"><br />　 ※発売日以降ご購入いただけます</font><br/> --><br />
 <img src="http://i.yimg.jp/images/sicons/auction16.gif"><a href="http://list4.auctions.yahoo.co.jp/jp/show/topsubmit?category=2084048851"> 読み終わったら本、雑誌カテゴリに出品しよう</a><br /><br />
<br><br><br/></p>

<p></p>

<p><img src="http://i.yimg.jp/images/auct/cms/staff/contents/20091022_001.jpg" alt="WEB+DB PRESS Vol.53"><br/></p>

<p><br />
<p>目次は下記通りです。</p><br />
<font size="-1"><strong>WEB+DB PRESS Vol.53特集2　シンプルな設計、フルAPI化、冗長化</strong></font><br/><br />
<font size="+2"><strong>Yahoo!オークション構築・運用ノウハウ大公開</strong></font><br />
<ul><br />
	<li>第1章：Yahoo!オークションの10年とシステム構成の変遷</li><br />
	<li>第2章：Yahoo!オークションの設計思想</li><br />
	<li>第3章：日本独自のシステムで目指したこと</li><br />
	<li>第4章：Web APIによるオープン化の実現</li><br />
	<li>コラム  Yahoo! JAPAN のOAuth</li><br />
	<li>コラム  Yahoo! ショッピングのWeb API</li><br />
	<li>第5章：MySQL利用システムの冗長化</li><br />
	<li>第6章：Oracleの使いどころ</li><br />
	<li>第7章：24時間停止しないシステムのためのサーバ監視体制</li><br />
	<li>コラム  Yahoo! ショッピングのログ管理</li><br />
	<li>コラム  Yahoo! JAPAN 実験場〜Yahoo! JAPAN の新サービスはこうしてできる〜</li><br />
</ul></p>

<p></p>

<p><br />
<p>オークション記事のほかにもコラムとして、Yahoo! JAPAN のOAuth やYahoo!ショッピングの記事もあります。<br/><br />
又、特集の最後に少しだけTechBlogの紹介もさせていただきました！</p><br/><br />
<a href=" http://topic.auctions.yahoo.co.jp/staffblog/planner/web/">Yahoo!オークションスタッフブログ</a>でも紹介しておりますのであわせてご覧ください！</p>

<p><br/><br />
<p><br clear="all" /><br />
<br clear="all" /><br />
Yahoo!デベロッパーネットワーク - <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/webapi/auctions/">オークションAPI </a><br/><br />
Yahoo!デベロッパーネットワーク - <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/webapi/shopping/">ショッピングAPI </a><br/><br />
Yahoo!デベロッパーネットワーク - <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/?http://developer.yahoo.co.jp/other/oauth/">OAuth</a><br/><br />
Yahoo!デベロッパーネットワークは <a href="http://rd.yahoo.co.jp/tech_blog/yjdn/kiji/?http://developer.yahoo.co.jp/">こちら </a><br/><br />
APIをご利用前に<a href="http://help.yahoo.co.jp/help/jp/developer/developer-06.html">アプリケーションID </a>の取得を忘れずにお願いします。<br/><br />
登録は<a href="http://rd.yahoo.co.jp/tech_blog/yjdn/appid/?http://e.developer.yahoo.co.jp/webservices/register_application">こちら </a></p></p>]]>
      
   </content>
</entry>
<entry>
   <title>Yahoo!ツールバー 工夫を凝らしたボタンの作り方　第1回</title>
   <link rel="alternate" type="text/html" href="http://techblog.yahoo.co.jp/cat207/cat214/yahoo_1_1/" />
   <id>tag:techblog.yahoo.co.jp,2009://25.3551</id>
   
   <published>2009-10-22T11:06:23Z</published>
   <updated>2009-10-21T11:11:20Z</updated>
   
   <summary>2009年8月に、「Yahoo!ツールバー ギャラリー」が公開され、Yahoo!ツールバー用のボタンを自分で作成できるようになりました。
このボタンは、自分専用として使用できるほか、「公開審査」を受け、合格することで、Yahoo!ツールバーを使用しているほかの人も使うことができるようになります。
これから、通常のウィザードでは作ることのできない、工夫を凝らしたボタンの作り方を2回に分けて紹介します。</summary>
   <author>
      
   </author>
         <category term="サービス紹介" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://techblog.yahoo.co.jp/">
      <![CDATA[<p>こんにちは、アプリケーション開発部の市川・洲崎・鈴木です。<br/>
2009年8月19日に、「<a href="http://gallery.toolbar.yahoo.co.jp/btn/category/">Yahoo!ツールバー ギャラリー</a>」が公開され、Yahoo!ツールバー用のボタンを自分で作成できるようになりました。<br/>
このボタンは、自分専用として使用できるほか、「公開審査」を受け、合格することで、Yahoo!ツールバーを使用しているほかの人も使うことができるようになります。<br/>
これから、通常のウィザードでは作ることのできない、工夫を凝らしたボタンの作り方を2回に分けて紹介します。</p>

<p><br />
<h3>ボタンのソースファイルの取得方法</h3></p>

<p>工夫したボタンを作るためには、ボタンのソースファイル（XML）を直接編集する必要があります。まずは、ボタンのソースファイルのダウンロード方法を説明します。<br/>
通常の手順でボタンを作成し、作成したボタンのリストから、「編集」ボタンをクリックします。</p>

<p><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_01.png" width="550" height="92"></p>

<p>次に、ボタンの編集ページの「ソースファイル編集」タブから、「XMLファイルダウンロード」ボタンをクリックします。</p>

<p><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_02.png" width="550" height="199"></p>

<p>これで、ボタンのソースファイルをダウンロードできます。<br/>
例えば、ブックマーク型で作成したボタンのソースファイルは、次のような記述になっています。</p>

<p><br />
<pre name="code" class="xml"><br />
&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;button xmlns="urn:yahoo:jp:toolbar"&gt;<br />
  &lt;style&gt;push&lt;/style&gt;<br />
  &lt;item type="link"&gt;<br />
    &lt;title&gt;&lt;![CDATA[Yahoo!検索]]&gt;&lt;/title&gt;<br />
    &lt;action&gt;<br />
      &lt;url&gt;&lt;![CDATA[http://search.yahoo.co.jp/]]&gt;&lt;/url&gt;<br />
    &lt;/action&gt;<br />
  &lt;/item&gt;<br />
  &lt;menu/&gt;<br />
&lt;/button&gt;</pre></p>

<p><br />
<p>このファイルを編集して、いろいろな機能のボタンにしていきます。</p></p>

<h3>検索ボタンを作ろう − キーワードを置換する方法</h3>

<p>まずは、簡単なところからYahoo!検索を行うボタンの作り方を説明します。<br/>
検索するためには、検索キーワードを入力する必要がありますが、入力の方法として、パラメータを置換する方法が用意されています。置換の方法は、2種類用意されていて、以下のように記述します。</p>

<table border="1">
<tr>
<th>{query}</th>
<th>{select}</th>
</tr>
<tr>
<td>Yahoo!ツールバーの検索窓に入力されたキーワードに置換します。 </td>
<td>ウェブページ上の選択されたキーワードに置換します。</td>
</tr>
<tr>
<td><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_03.png" align="absmiddle" border="0" /></td>
<td><img src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_04.png" align="absmiddle" border="0" /></td>
</tr>
</tbody></table>

<p>実際に、Yahoo!ツールバーの検索窓からキーワードを取得する方法（{query}）で記述してみると、こんな感じになります。</p>

<pre name="code" class="xml">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;button xmlns="urn:yahoo:jp:toolbar"&gt;
  &lt;style&gt;push&lt;/style&gt;
  &lt;item type="link"&gt;
    &lt;title&gt;&lt;![CDATA[Yahoo!検索]]&gt;&lt;/title&gt;
    &lt;action&gt;
      &lt;url&gt;&lt;![CDATA[http://search.yahoo.co.jp/search?p={query}]]&gt;&lt;/url&gt;
    &lt;/action&gt;
  &lt;/item&gt;
  &lt;menu/&gt;
&lt;/button&gt;</pre>

<p>Yahoo!ツールバーの検索窓にキーワードを入力し、自分で作成した「Yahoo!検索」ボタンをクリックすると、Yahoo!検索が行われます。</p>

<p><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_05.png" width="544" height="330"></p>

<p><br />
<h3>ブログ投稿ボタンを作ろう ― POSTでデータを送信する方法</h3></p>

<p>今、閲覧しているウェブページの文章を、簡単に自分のブログに引用するボタンの作り方を説明します。</p>

<p>例えば、自分のブログの中で、Wikipediaの記事を引用したい場合。<br/>
引用したいテキストを範囲選択し、今回作成するYahoo!ブログボタンをクリックすると</p>

<p><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_06.png" width="600" height="480"></p>

<p>記事が引用された状態で、ブログの記事作成ページへジャンプします。<br/>
あとは続けて感想などを書き足し、投稿するだけです。</p>

<p><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_07.png" width="600" height="427"></p>

<p><br />
<p>では仕組みを説明します。<br/><br />
先の検索ボタンと同じ要領でURLのパラメータとして引用記事の文字列を送信することもできますが、文章のように長いものはPOSTする方法が良いでしょう。</p></p>

<p>POSTするためには、まず、&lt;item type&gt;を"search"に変更する必要があります。<br/>
また&lt;method&gt;（送信方法）、&lt;postData&gt;（POSTするデータ）、&lt;encoding&gt;（データをエンコードする方法）を指定する必要があります。<br/>
またウェブページ上の文章を転記するので、キーワード置換に{select}を使用します。<br/>
実際に記述してみると、こんな感じになります。</p>

<pre name="code" class="xml">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;button xmlns="urn:yahoo:jp:toolbar"&gt;
  &lt;style&gt;push&lt;/style&gt;
  &lt;item type="search"&gt;
    &lt;title&gt;&lt;![CDATA[Yahoo!ブログ]]&gt;&lt;/title&gt;
    &lt;action&gt;
      &lt;url&gt;&lt;![CDATA[http://blogs.yahoo.co.jp/FRONT/blogthis.html]]&gt;&lt;/url&gt;
      &lt;method&gt;post&lt;/method&gt;
      &lt;encoding&gt;utf-8&lt;/encoding&gt;
      &lt;postData&gt;
        &lt;![CDATA[title={title}&amp;link={url}&amp;linktitle={title}&amp;str1={select}]]&gt;
      &lt;/postData&gt;
    &lt;/action&gt;
  &lt;/item&gt;
  &lt;menu/&gt;
&lt;/button&gt;</pre>

<p><br />
<p>ここで新しく{url}と{title}というキーワード置換を利用してみました。<br/><br />
{url}は、閲覧しているウェブページのURLに置換し、{title}は、閲覧しているウェブページのタイトルに置換します。</p></p>

<p>これでウェブページ上の文章を選択し、「Yahoo!ブログ」ボタンをクリックすると、自分のYahoo!ブログの投稿ページに遷移し、閲覧していたウェブページのタイトルとURL、選択された文章を入力フォームに転記できます。<br/>
Yahoo!ブログに投稿するためには、自分のYahoo! JAPAN IDでログインしてることと、Yahoo!ブログを開設していることが必要になりますので、お忘れなく！</p>

<p>また&lt;encoding&gt;には、"shift-jis"、"utf-8"、"euc-jpiso-2022-jp"の4種類が設定できます。サーバー側のエンコード方式に合わせて使い分けてください。</p>

<p><br />
<h3>メニューにいろいろ表示したボタンを作ろう − 検索、RSS、2段メニュー混在</h3></p>

<p>次に、メニューにいろいろと表示したボタンの作り方を説明します。<br/>
ボタン右側の▼部分をクリックするとメニューが表示され、左側のタイトル部分をクリックすると、Yahoo! JAPANのトップページに遷移するボタンになります。</p>

<p><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_08.png" width="600" height="344"></p>

<p><br />
<p>ボタンソースファイルを編集することで、こんなメニューのボタンを作れます。<br/><br />
ソースコードは長いので、分割して説明していきます。</p></p>

<p><br />
<pre name="code" class="xml"><br />
&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;button xmlns="urn:yahoo:jp:toolbar"&gt;<br />
  &lt;style&gt;dropdown&lt;/style&gt;</pre></p>

<p>&lt;style&gt;を"dropdown"にすることで、メニュー型とブックマーク型が一体となったボタンになります。ほかにも"whole"（メニューだけのボタン）、"push"（ブックマーク型のボタン）を指定できます。</p>

<pre name="code" class="xml">
  &lt;item type="link"&gt;
    &lt;title&gt;&lt;![CDATA[Yahoo! JAPAN]]&gt;&lt;/title&gt;
    &lt;action&gt;
      &lt;url&gt;&lt;![CDATA[http://www.yahoo.co.jp/]]&gt;&lt;/url&gt;
    &lt;/action&gt;
  &lt;/item&gt;</pre>

<p><br />
<p>&lt;item type&gt;を" link"にすることで、ボタンが押されたときの遷移先を設定できます。これは、ブックマーク型のボタンを作成したときと同じです。</p></p>

<pre name="code" class="xml">
  &lt;menu&gt;
    &lt;item type="link"&gt;
      &lt;title&gt;&lt;![CDATA[Yahoo!検索]]&gt;&lt;/title&gt;
      &lt;icon&gt;
        &lt;url&gt;&lt;![CDATA[http://downloads.yahoo.co.jp/toolbar/img/gb_09.png]]&gt;&lt;/url&gt;
      &lt;/icon&gt;
      &lt;action&gt;
        &lt;url&gt;&lt;![CDATA[http://search.yahoo.co.jp/search?p={query}]]&gt;&lt;/url&gt;
      &lt;/action&gt;
    &lt;/item&gt;</pre>

<p><br />
<p>&lt;menu&gt;を設定することで、▼部分をクリックしたときにメニューを表示するボタンになります。<br/><br />
最初のメニューには、上記で説明したYahoo!検索ボタンを設定しています。</p></p>

<pre name="code" class="xml">
    &lt;item type="search"&gt;
      &lt;title&gt;&lt;![CDATA[Yahoo!ブログ]]&gt;&lt;/title&gt;
      &lt;icon&gt;
        &lt;url&gt;&lt;![CDATA[http://downloads.yahoo.co.jp/toolbar/img/gb_10.png]]&gt;&lt;/url&gt;
      &lt;/icon&gt;
      &lt;action&gt;
        &lt;url&gt;&lt;![CDATA[http://blogs.yahoo.co.jp/FRONT/blogthis.html]]&gt;&lt;/url&gt;
        &lt;method&gt;post&lt;/method&gt;
        &lt;encoding&gt;utf-8&lt;/encoding&gt;
        &lt;postData&gt;
          &lt;![CDATA[title={title}&amp;link={url}&amp;linktitle={title}&amp;str1={select}]]&gt;
        &lt;/postData&gt;
      &lt;/action&gt;
    &lt;/item&gt;</pre>

<p>次のメニューには、上記で説明したYahoo!ブログボタンを設定しています。</p>

<pre name="code" class="xml">
    &lt;item type="separator"/&gt;</pre>

<p>Yahoo!ブログメニューの下に、セパレーター（境界線）を設定しています。<br/>
セパレーターは、&lt;item type&gt;を"separator"にすることで設定できます。</p>

<pre name="code" class="xml">
    &lt;item type="rss"&gt;
      &lt;action&gt;
        &lt;url&gt;&lt;![CDATA[http://techblog.yahoo.co.jp/atom.xml]]&gt;&lt;/url&gt;
        &lt;refresh&gt;360&lt;/refresh&gt;
        &lt;expand&gt;true&lt;/expand&gt;
        &lt;limit&gt;5&lt;/limit&gt;
        &lt;notice&gt;none&lt;/notice&gt;
      &lt;/action&gt;
    &lt;/item&gt;</pre>

<p><br />
<p>次に、Yahoo! Tech Blogから取得したRSSのうち、上位5件を表示します。<br/><br />
RSSをメニューに表示するには、&lt;item type&gt;を"rss"に設定します。<br/><br />
表示する件数は、&lt;limit&gt;で指定します。&lt;limit&gt;は設定しないとRSS内の項目を全件表示します。項目が多い場合は、画面からメニューがあふれてしまうので、ご注意を！<br/><br />
また、このソースファイルでは、RSSの取得間隔を6時間に設定しています。<br/><br />
RSSの取得間隔は、&lt;refresh&gt;で指定します。値は、分単位で指定し、15分以上の指定ができます。15分未満だったり、&lt;refresh&gt;が設定されていなかったりする場合、取得間隔は、6時間になります。</p></p>

<pre name="code" class="xml">
    &lt;item type="separator"/&gt;
    &lt;item type="rss"&gt;
      &lt;title&gt;&lt;![CDATA[Yahoo!ツールバースタッフブログ]]&gt;&lt;/title&gt;
      &lt;icon&gt;
        &lt;url&gt;&lt;![CDATA[http://downloads.yahoo.co.jp/toolbar/img/gb_34.png]]&gt;&lt;/url&gt;
      &lt;/icon&gt;
      &lt;action&gt;
        &lt;url&gt;&lt;![CDATA[http://blogs.yahoo.co.jp/yjtb_blog/rss.xml]]&gt;&lt;/url&gt;
        &lt;refresh&gt;360&lt;/refresh&gt;
        &lt;expand&gt;false&lt;/expand&gt;
        &lt;notice&gt;star&lt;/notice&gt;
      &lt;/action&gt;
    &lt;/item&gt;</pre>

<p><br />
<p>セパレーターを設定し、次に、Yahoo!ツールバースタッフブログのRSSを階層で表示します。<br/><br />
先ほどと同じように、RSSをメニューに表示するには、&lt;item type&gt;を"rss"に設定します。<br/><br />
RSSを階層で表示するには、&lt;expand&gt;を"false"に設定します。先ほどは、これを"true"で設定しました。"true"で設定すると、メニューに直接項目が表示されます。"false"で設定すると、階層で表示するようになります。<br/><br />
また、階層で表示する場合は、必ず&lt;title&gt;を設定し、メニューに表示されるタイトルを指定する必要があります。また、任意で&lt;icon&gt;を設定して、メニューに表示されるアイコンを指定することもできます。</p></p>

<p><br />
<pre name="code" class="xml"><br />
    &lt;item type="rss"&gt;<br />
    &lt;title&gt;&lt;![CDATA[Yahoo! JAPAN 特集一覧]]&gt;&lt;/title&gt;<br />
      &lt;icon&gt;<br />
        &lt;url&gt;&lt;![CDATA[http://downloads.yahoo.co.jp/toolbar/img/gb_19.png]]&gt;&lt;/url&gt;<br />
      &lt;/icon&gt;<br />
      &lt;action&gt;<br />
        &lt;url&gt;&lt;![CDATA[http://event.yahoo.co.jp/list/rss/index.xml]]&gt;&lt;/url&gt;<br />
        &lt;refresh&gt;360&lt;/refresh&gt;<br />
        &lt;expand&gt;false&lt;/expand&gt;<br />
        &lt;notice&gt;asterisk&lt;/notice&gt;<br />
      &lt;/action&gt;<br />
    &lt;/item&gt;<br />
    &lt;item type="rss"&gt;<br />
      &lt;title&gt;&lt;![CDATA[Yahoo!きっず 特集一覧]]&gt;&lt;/title&gt;<br />
      &lt;icon&gt;<br />
        &lt;url&gt;&lt;![CDATA[http://downloads.yahoo.co.jp/toolbar/img/gb_20.png]]&gt;&lt;/url&gt;<br />
      &lt;/icon&gt;<br />
      &lt;action&gt;<br />
        &lt;url&gt;&lt;![CDATA[http://rss.kids.yahoo.co.jp/osusume/index.xml]]&gt;&lt;/url&gt;<br />
        &lt;refresh&gt;360&lt;/refresh&gt;<br />
        &lt;expand&gt;false&lt;/expand&gt;<br />
        &lt;notice&gt;new&lt;/notice&gt;<br />
      &lt;/action&gt;<br />
    &lt;/item&gt;</pre></p>

<p><br />
<p>続いて、同じようにYahoo! JAPANの特集一覧のRSS、Yahoo!きっずの特集一覧のRSSを階層で表示しています。<br/><br />
こちらも先ほどと同じように、必ず&lt;title&gt;を設定し、任意で&lt;icon&gt;を設定できます。<br/><br />
RSSが更新された場合、視覚的に更新されたことを通知できます。それは、&lt;notice&gt;です。&lt;notice&gt;には、次の4種類が設定でき、それぞれ表示が異なります。<br/><br />
好みで使い分けてください。</p></p>

<p><br />
<table><br />
<tr><br />
</tr><br />
<tr><br />
<td>None</td><br />
<td><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_notice1.png" width="111" height="22"></td><br />
</tr><br />
<tr><br />
<td>Star </td><br />
<td><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_notice2.png" width="111" height="22"></td><br />
</tr><br />
<tr><br />
<td>Asterisk</td><br />
<td><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_notice3.png" width="111" height="22"></td><br />
</tr><br />
<tr><br />
<td>New</td><br />
<td><img alt="画像" src="http://i.yimg.jp/images/tecblog/2009Q3/20091015_notice4.png" width="111" height="22"></td><br />
</tr><br />
</tbody></table></p>

<pre name="code" class="xml">
  &lt;/menu&gt;
  &lt;/button&gt;</pre>

<p>最後に&lt;/menu&gt;&lt;/button&gt;の終了タグを設定して、終わりです。</p>

<p>いかがだったでしょうか。今回のボタン作成方法紹介は、ここまでです。<br/>
興味をもたれた方はぜひ、<a href="http://toolbar.yahoo.co.jp/">Yahoo!ツールバートップページ</a>の右上にある「ボタン作成・管理」から、ボタン作成に挑戦してみてください。</p>

<p>次回は、ボタン作成での変数の使いこなし方をご紹介する予定です。</p>]]>
      
   </content>
</entry>

</feed>
