SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Yokozuna日本語検索機能を
評価しました
Takashi Sogabe(@rev4t)
Yoshihisa Tanaka (@yosisa)
Internet Initiative Japan., Inc.
質問
• Riakに入れたデータ、どのように取り出してい
ますか?
– Key を直接指定
– Secondary Index
– Map/Reduce
– Riak Search
– Mohair
検索機能はとても便利
• Gmail
• Evernote
膨大な量のデータが入っていても、
すぐに検索結果が返ってくる!
しかし検索機能は実装が大変..
• 膨大な構造化がされていないデータ
– Email
– チャット
– 日記
– etc.
全文検索エンジンの運用
• Namazu, Senna, Hyper Estrayer, Lucene/Solr,
etc...
– オリジナルデータの保管方法
– リアルタイムにインデックス作っても大丈夫?
– スケールアウト簡単にできる?
Yokozuna
• https://github.com/basho/yokozuna
• Yokozuna = Riak + Solr
– Riak と Solr の良いところ取り
– Riakの運用+αで全文検索ができるようになる
– 色々考えなくても簡単にスケールアウトする
– Solrと同じQueryが使える
Riak Searchとの違い
• Riak Search
– 多言語への対応が弱い
• 日本語の形態素解析
– Solrの方が検索機能が充実している
• スコアリング、ファセット検索、検索結果のハイライト,
etc.
ソフトウェア構成
Node
A
Node
B
Node
C
Node
D
Solr A
Solr B
Solr C
Solr D
Bucket X
Bucket X
Bucket X
Bucket X
• 各Node(ホスト)毎に
Solrが動作している
• Objectをstoreする際
に、各Node上のSolr
にindexが作成される
• Search時は自動的に
Distributed Searchが
実行される
Store: Riak API
Search: Solr API
YOKOZUNA 使い方
インストール手順(0)
• Yokozuna ソースコード
– https://github.com/basho/yokozuna/blob/master/doc
s/INSTALL.md
– yokozuna-0.7 が最新版
• 必要なもの
– Erlang R15B02 or higher
– JRE 1.6 or later (jarコマンドが必要)
– GNU make
– GCC(C/C++)
インストール手順(1)
$ wget http://data.riakcs.net:8080/yokozuna/riak-yokozuna-
0.7.0-src.tar.gz
$ tar zxvf riak-yokozuna-0.7.0-src.tar.gz
$ cd riak-yokozuna-0.7.0-src
$ make rel
$ sed -e '/{yokozuna,/,/]}/{s/{enabled, false}/{enabled,
true}/;}' -i.back rel/riak/etc/app.config
$ ulimit –n 4096
$ rel/riak/bin/riak start
Index作成方法
$ curl -XPUT ¥
-i http://(hostname):8098/yz/index/(indexname)
(出力結果)
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.9.2 (someone had painted it blue)
Date: Tue, 04 Jun 2013 07:34:13 GMT
Content-Type: application/json
Content-Length: 0
• hostname
– Riakの動作しているホスト名
• Indexname
– 任意の文字列
Bucket->Index マッピング
$ curl -XPUT –i ¥
-H 'content-type: application/json' ¥
'http://(hostname):8098/buckets/(bucketname)/props' ¥
-d '{"props":{"yz_index":"(indexname)"}}‘
• 任意のBucketを全文検索の対象にする
– オブジェクトをstoreする度にSolrインデックスが作成される
ようになる
オブジェクト登録のテスト
$ curl -H 'content-type: text/plain' -X PUT ¥
‘http://(hostname):8098/riak/testbucket/testkey’ ¥
-d "Ryan Zezeski"
• Bucket “testbucket”, Key “testkey” にて テキス
ト ”Ryan Zezeski” をPUTする
Searchのテスト
$ curl ¥
'http://(hostname):8098/search/testindex?q=text:Ryan’
(出力結果)
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">47</int><lst
name="params"><str name="shards">10.0.2.11:8093/solr/testindex</str><str
name="q">text:Ryan</str><str name="fq">(_yz_node:riak@10.0.2.11 AND ((_yz_pn:62 AND
(_yz_fpn:62)) OR _yz_pn:61 OR _yz_pn:58 OR _yz_pn:55 OR _yz_pn:52 OR _yz_pn:49 OR _yz_pn:46 OR
_yz_pn:43 OR _yz_pn:40 OR _yz_pn:37 OR _yz_pn:34 OR _yz_pn:31 OR _yz_pn:28 OR _yz_pn:25 OR
_yz_pn:22 OR _yz_pn:19 OR _yz_pn:16 OR _yz_pn:13 OR _yz_pn:10 OR _yz_pn:7 OR _yz_pn:4 OR
_yz_pn:1))</str></lst></lst><result name="response" numFound="1" start="0"
maxScore="0.4451987"><doc><str name="_yz_id">testkey_19</str><str
name="_yz_ed">20130709T015823 19 testbucket testkey g2IFn+UN</str><str
name="_yz_fpn">17</str><str name="_yz_node">riak@10.0.2.11</str><str
name="_yz_pn">19</str><str name="_yz_rk">testkey</str><str
name="_yz_rb">testbucket</str></doc></result>
</response>
YOKOZUNA 検証結果
Yokozuna 動作検証しました
• ウィキペディア日本語版のdumpデータを
store
– 170万件、7GBのデータ
• 検証内容
– 沢山のデータを入れても問題なく動くこと
– 性能がそれなりに良いこと
• store性能
• search性能は、今回は除外
機器構成
Gigabit Ethernet (1Gbps)
Router
The Internet
Riak Node (32台)
ベンチマークPC
兼Reverse Proxy
PRIMERGY RX200 S6
• CPU Xeon L5630 @2.13GHz
• Memory 24GB
• HDD hwRAID5(1TB SATA x8)
Demo
• Wikipedia query WebUI
– https://github.com/iij/yokozuna-demo
yz_extractor
• テキストの中身を解析してfield展開する
– text/plain
• yz_text_extractor
– text/json
• yz_json_extractor
– text/xml
• yz_xml_extractor
yz_xml_extractor
• XMLの例
<person>
<name>Ryan</name>
<age>29</age>
</person>
• Field展開後
[{<<"person_name">>, <<"Ryan">>},
{<<"person_age">>, <<"29">>}]
Solr XMLスキーマの変更
• 日本語(text_ja)として形態素解析
• 下記項目を抽出する
– <page>
– <title>
– <revision>
– <id>
– <timestamp>
– <text>
<page>
<title>言語</title>
<ns>0</ns>
<id>10</id>
<revision>
<id>47989880</id>
<parentid>47989854</parentid>
<timestamp>2013-05-29T08:46:04Z</timestamp>
<contributor>
<ip>219.116.251.28</ip>
</contributor>
<comment>/* 各国の国語・公用語 */</comment>
<text xml:space="preserve">{{出典の明記|date=2009年5月}}
…
</text>
</revision>
</page>
wikipedia_schema.xml
…
<field name="text" type="text_ja" indexed="true" stored="false"
multiValued="true"/>
<field name=“page_title" type="text_ja" indexed="true" stored="false"
multiValued="false"/>
<field name=“page_id" type="int" indexed="true" stored="false"
multiValued="false"/>
<field name=“page_revision_timestamp" type="date" indexed="true"
stored="false" multiValued="false"/>
<field name=“page_revision_text" type="text_ja" indexed="true" stored="false"
multiValued="false"/>
…
スキーマの変更方法
$ curl -i -XPUT ¥
-H 'content-type: application/xml' ¥
-d @/tmp/wikipedia_schema.xml ¥
(hostname):8098/yz/schema/wikipedia
$ curl -i -XPUT ¥
-H 'content-type: application/json' ¥
-d '{"schema": "wikipedia"}' ¥
(hostname):8098/yz/index/wikipedia
• “/tmp/wikipedia_schema.xml” をインデックス
名”wikipedia”のスキーマとして登録する
Store性能のベンチマーク
• wikipedia-jaコンテンツ(xmlファイル)を rubyク
ライアントのプログラムを用いて全件登録
– Ruby riak-client
• https://github.com/basho/riak-ruby-client/tree/master/lib/riak
– wikipedia-yz
• https://github.com/iij/wikipedia-yz
ベンチマーク結果
ノード数 スループット(Clients per sec)
1 227.19
4 270.50
8 270.70
• ベンチマークプログラムの性能が不十分なため、riak
cluster の上限値まで達しなかった
– Erlang(riakc_pb_socket)版を作る、または basho_bench のドライ
バとして実装すると高スループット出せそう
– Rubyでさらに高速化する場合は eventmachine , rev あたりが使
えそうだけれど、protocol bufferに対応していないのが残念
– Solr の負荷は概ね5-10%程度
まとめ
• Yokozunaはデータをstoreするだけで全文検
索できるので便利
• 分散処理の面倒なことは全てYokozunaが引
き受けてくれるので、運用が楽にできる

Contenu connexe

Similaire à Yokozuna 日本語検索機能を評価しました

EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道
#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道
#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道Yasushi Hara
 
今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)syou6162
 
Talking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data GatewayTalking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data GatewayShinya Sakakibara
 
順序データでもベイズモデリング
順序データでもベイズモデリング順序データでもベイズモデリング
順序データでもベイズモデリング. .
 
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会第21回アルゴリズム勉強会
第21回アルゴリズム勉強会Yuuki Ono
 
全部見せます、データサイエンティストの仕事
全部見せます、データサイエンティストの仕事全部見せます、データサイエンティストの仕事
全部見せます、データサイエンティストの仕事Shunsuke Nakamura
 
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おうShuhei Iitsuka
 
20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会Takahiro Iwase
 
機械学習 / Deep Learning 大全 (1) 機械学習基礎編
機械学習 / Deep Learning 大全 (1) 機械学習基礎編機械学習 / Deep Learning 大全 (1) 機械学習基礎編
機械学習 / Deep Learning 大全 (1) 機械学習基礎編Daiyu Hatakeyama
 
オープンソース・ソフトウェアで始めるバイナリ解析
オープンソース・ソフトウェアで始めるバイナリ解析オープンソース・ソフトウェアで始めるバイナリ解析
オープンソース・ソフトウェアで始めるバイナリ解析jetbee0
 
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用Koki Hashimoto
 
20180807_全部見せます、データサイエンティストの仕事
20180807_全部見せます、データサイエンティストの仕事20180807_全部見せます、データサイエンティストの仕事
20180807_全部見せます、データサイエンティストの仕事Shunsuke Nakamura
 
IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門陽一 滝川
 
ログ解析入門withR InnovationEggNo3
ログ解析入門withR InnovationEggNo3ログ解析入門withR InnovationEggNo3
ログ解析入門withR InnovationEggNo3hiroki84
 
Index shotgun on mysql5.6
Index shotgun on mysql5.6Index shotgun on mysql5.6
Index shotgun on mysql5.6yoku0825
 

Similaire à Yokozuna 日本語検索機能を評価しました (20)

Tokyo r50 beginner_2
Tokyo r50 beginner_2Tokyo r50 beginner_2
Tokyo r50 beginner_2
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道
#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道
#経済学のための実践的データ分析 6. データを実際に分析するまでのとてもとても遠く険しく細く長い道
 
今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)
 
Talking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data GatewayTalking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data Gateway
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 
順序データでもベイズモデリング
順序データでもベイズモデリング順序データでもベイズモデリング
順序データでもベイズモデリング
 
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会第21回アルゴリズム勉強会
第21回アルゴリズム勉強会
 
Tokyo r38
Tokyo r38Tokyo r38
Tokyo r38
 
全部見せます、データサイエンティストの仕事
全部見せます、データサイエンティストの仕事全部見せます、データサイエンティストの仕事
全部見せます、データサイエンティストの仕事
 
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おう
 
20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会
 
機械学習 / Deep Learning 大全 (1) 機械学習基礎編
機械学習 / Deep Learning 大全 (1) 機械学習基礎編機械学習 / Deep Learning 大全 (1) 機械学習基礎編
機械学習 / Deep Learning 大全 (1) 機械学習基礎編
 
オープンソース・ソフトウェアで始めるバイナリ解析
オープンソース・ソフトウェアで始めるバイナリ解析オープンソース・ソフトウェアで始めるバイナリ解析
オープンソース・ソフトウェアで始めるバイナリ解析
 
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
 
20180807_全部見せます、データサイエンティストの仕事
20180807_全部見せます、データサイエンティストの仕事20180807_全部見せます、データサイエンティストの仕事
20180807_全部見せます、データサイエンティストの仕事
 
IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門
 
ログ解析入門withR InnovationEggNo3
ログ解析入門withR InnovationEggNo3ログ解析入門withR InnovationEggNo3
ログ解析入門withR InnovationEggNo3
 
Index shotgun on mysql5.6
Index shotgun on mysql5.6Index shotgun on mysql5.6
Index shotgun on mysql5.6
 

Plus de Takashi Sogabe

Rookの基礎・バージョンアップ
Rookの基礎・バージョンアップRookの基礎・バージョンアップ
Rookの基礎・バージョンアップTakashi Sogabe
 
OCP Serverを用いた OpenStack Containerの検証
 OCP Serverを用いたOpenStack Containerの検証 OCP Serverを用いたOpenStack Containerの検証
OCP Serverを用いた OpenStack Containerの検証Takashi Sogabe
 
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-Takashi Sogabe
 
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきましたOpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきましたTakashi Sogabe
 
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-Takashi Sogabe
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)Takashi Sogabe
 
OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!Takashi Sogabe
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介Takashi Sogabe
 
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようコモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようTakashi Sogabe
 
Riak / Riak-CS(Enterprise版) ベンチマークしました
 Riak / Riak-CS(Enterprise版) ベンチマークしました Riak / Riak-CS(Enterprise版) ベンチマークしました
Riak / Riak-CS(Enterprise版) ベンチマークしましたTakashi Sogabe
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Takashi Sogabe
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Takashi Sogabe
 

Plus de Takashi Sogabe (12)

Rookの基礎・バージョンアップ
Rookの基礎・バージョンアップRookの基礎・バージョンアップ
Rookの基礎・バージョンアップ
 
OCP Serverを用いた OpenStack Containerの検証
 OCP Serverを用いたOpenStack Containerの検証 OCP Serverを用いたOpenStack Containerの検証
OCP Serverを用いた OpenStack Containerの検証
 
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
 
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきましたOpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
 
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
 
OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
 
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようコモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しよう
 
Riak / Riak-CS(Enterprise版) ベンチマークしました
 Riak / Riak-CS(Enterprise版) ベンチマークしました Riak / Riak-CS(Enterprise版) ベンチマークしました
Riak / Riak-CS(Enterprise版) ベンチマークしました
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)
 

Yokozuna 日本語検索機能を評価しました