<< 前へ | Home

最新のElasticsearchを動かしてみる。触りだけ #elasticsearchjp

実は検索エンジンの会社で働いていたことがあります。
ぶっちゃけ検索エンジンのテクノロジーの奥深くについてドップリ詳しいわけではありませんが、昨今のシステム開発に置いて検索技術の重要性は重々承知していいます。

自分の会社では今はカッコイイことをしておらず、永続ストアはGoogle Docs、Excel(!!!)、H2データベースにあり検索エンジンは導入できていません。

日々あらゆるデータソースを探し回っている残念な状態です。

当然ながらこれから検索エンジンを導入するならばElasticsearchを使うのが自然な流れだよね、と思いつつ手を動かせていなかったので背水の陣でElasticsearch Advent Calendar 2014にエントリした次第です。

前置きが長くなりますがもう少し前置きがあります。今弊社には実はElasticsearchの社員がおり、毎日左隣でElasticsearch、kibana、logstashをいじっているのを目にしています。楽しそうです。

自分のElasticsearchの経験は、一度Elasticsearchの勉強会中に内職してTwitterのsampleストリーム(全ツイートの1%程度を受け取れる)をフィードするのを作った程度。フィードするだけで検索できていません!

これも一年前の話なので、最新版ではだいぶ変わっているかな?ということで触ってみました。

しかし時間があまりない!
とりあえずドキュメントをフィードして簡単に検索するのをREST APIを使ってやってみます!

1. Elasticsearchの起動
elasticsearch.orgよりダウンロード。展開してbinディレクトリのelasticsearchコマンドを叩くだけ。
推奨JVMは知らないけどJava1.8.0_25ですんなり起動しました。
9200番がREST APIの口になるみたいです。

2. ドキュメントのフィード
ツイートのデータっぽいのをcurlコマンドで3件だけフィードします。スキーマレスなので事前にスキーマの定義なし。いきなりJSONを突っ込めばOK。

23:52 ~ $ curl -XPUT 'http://localhost:9200/tweets/tweet/1' -d '{
> "text": "this is a tweet",
> "screen_name": "yusuke",
> "tweet_id": "1"
> }'
{"_index":"tweets","_type":"tweet","_id":"1","_version":4,"created":false}
23:52 ~ $
23:52 ~ $ curl -XPUT 'http://localhost:9200/tweets/tweet/2' -d '{
> "text": "this is also tweet",
> "screen_name": "johtani",
> "tweet_id": "2"
> }'
{"_index":"tweets","_type":"tweet","_id":"2","_version":3,"created":false}
23:52 ~ $
23:52 ~ $ curl -XPUT 'http://localhost:9200/tweets/tweet/3' -d '{
> "text": "yet another つぶやき",
> "screen_name": "mike_neck",
> "tweet_id": "3"
> }'
{"_index":"tweets","_type":"tweet","_id":"3","_version":3,"created":false}

これで3件のツイートが入りました。

3. 検索
同じくcurlコマンドで検索します。
23:53 ~ $ curl -XGET http://localhost:9200/tweets/tweet/_search -d'
> {
> "query":
> {
> "match":{"screen_name":"yusuke"}
> }
> }'
{"took":2,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.30685282,"hits":[{"_index":"tweets","_type":"tweet","_id":"1","_score":0.30685282,"_source":{
"text": "this is a tweet",
"screen_name": "yusuke",
"tweet_id": "1"
}}]}}

screen_nameがyusukeのツイートだけを検索できましたね!
ぶっちゃけJava APIを使ったときより直感的に扱えました。最新版のJava APIは見ていないのでわかりませんが、わかりやすくなってるといいなー。
これからもっと触ってみます!

このエントリーをはてなブックマークに追加   

ポータブル、2TBのHDDが9,880円

ベアドライブよりも安いわけわからない値段だけどポチった。
悩んでるときは年内の配送予定だったけど、ポチったらお届け予定日が1月20日に。
悩むくらいなら今すぐポチ!

このエントリーをはてなブックマークに追加   

明日11/12(水)、12:30〜13:00 #モイめし に出演いたします

標記の通り、明日ツイキャスの社長、赤松さんと対談ランチ?企画である#モイめしにお邪魔させていただきます。

11月12日12:30からツイキャス生放送!ゲストは山本裕介氏【30分対談Liveモイめし】 - エンジニアtype
打合せもまだなのでどんな話になるかわかりませんが、是非ご試聴ください。

コメントにも極力反応できるようがんばります!






関連記事:
TwitCasting - Stream Live Video on Twitter and Facebook
リアルタイム動画配信『ツイキャス』が、世界展開を視野にあえてやること、やらないこと【連載:NEOジェネ!】 - エンジニアtype

このエントリーをはてなブックマークに追加   

初心者にも上級者にもオススメ - Java最強リファレンス @yuichielectric著

Javaの最強リファレンス、その名も「Java最強リファレンス」を頂きました。



サイボウズ株式会社にてkintoneなどを開発されているエンジニア田中 裕一(@yuichielectric)さんの著書。

Java8対応をうたう本はそれなりに出始めていますが、「とりあえずJava8に追加されたAPIにいくつか触れている」「Lambda記法をちょっと解説している」だけの本も相応にあります。またLambdaに触れる章を追加しただけで、他のコードは古めかしい残念な書き方をしている残念な本があるので注意が必要です。

そしてこのリファレンス、Java5〜Java8までとかなり広範囲をカバーしています。バランスを取るのは非常に難しいはず!

章立ては以下の通りです。合計535ページの超大作!
1. Javaの概要
2. Javaの基礎
3. 文字列・正規表現
4. 配列
5. コレクション
6. リスト
7. マップ
8. セット
9. Stream
10. 数値処理
11. ファイル操作
12. 日付時刻処理
13. クラス・オブジェクト・インターフェース
14. ログ出力
15. ネットワーク
16. データベース
17. サーブレット
18. 並行処理
19. システム
20. 国際化
Appendix Eclipseを使う

「GUI以外はほとんどカバーしている」といったところ。そして肝心の解説内容を見ると「こういう風に書く、Java7以降では(Java8以降では)こういう風に書くとよりシンプルに/効率的に書ける」といった形で併記されています。道理でページ数が多いはず!

それなりのベテランJavaプログラマは、何か処理を書く際昔ながらのAPIを使って冗長になってしまい、「たぶんこれNIOを使えばもっとシンプルに書けるはずだけど・・・まぁ動くコード書けたからいっかー」と放置することも少なくないはず。(特にファイル操作周りとか)
本書はリファレンスなので、「何を行いたいか」というトピックを元に実際のコードイメージを逆引きすることができます。
そして自分が使っているJavaのバージョンに応じて適宜モダンな書き方を確認することが出来るので便利そうです。

もちろんこれからJavaをどんどん憶えていきたいという初心者にも良いでしょう。
あくまでリファレンスなので、頭から読み進めてJavaを習得する、という目的には向いていませんがある程度基礎から発展的なトピックへという順番で章立てがされています。Javaの基礎文法はとりあえず把握している、という人であればひとまず1〜8章くらいまでは分からないところは飛ばしてもいいのでざっと通して読むといいかもしれません。

個人的にはJava8で一番メリットを実感しているOptionalについて2章17項にて「NullPointerExceptionを防ぐ」として触れている点がポイント高い!

まとめとして、初心者から上級者までまんべんなくオススメできる一冊です。軽い筋トレになるボリュームで2,580円(税別)とお値頃なのも良いですね。

ボリュームがあってちょっと場所を取る本だけれども、ささっとめくって必要な情報を取り出すには紙の媒体が向いていると思います。机に一冊置いておきましょう。



惜しいのがページ両端にある章番号。20章もあるのでさすがにどの章に何が書いてあるかまで憶えることは出来ないので、パラパラっとめくる際、自分が欲しい情報が何章にあるのか確認しやすいよう、章番号だけでなくトピックについても一言添えてあるとめくりやすかった!
20章分のトピックを全てのページ両端に記載するのはレイアウト的に厳しそうだけど・・・。

このエントリーをはてなブックマークに追加   

Heroku Buttonで簡単にHerokuにデプロイ #herokujp

Herokuはお手軽にWebアプリケーションを公開できるサービスですが、でも「このgithubに上がっているコードをちょっと動かして試してみたい」という場合はcloneして、heroku initして、pushして、と一手間二手間かかります。

ところがより手軽にHerokuにアプリケーションをデプロイする方法があります。

以下のページにアクセスしてみてください。
https://github.com/recruit-tech/redpen

Deploy to Herokuというボタンがあると思います。


このボタンを押すといきなりHerokuにアプリをデプロイする画面に遷移します。(もちろん要Herokuアカウント/ログイン)


裏の仕組みはともかく、Herokuボタンを設置するのは非常に簡単。アプリケーション名などを記述したapp.jsonをというファイルをリポジトリのルートに配置し、readme.mdに以下のようなマークアップを記載しておくだけ。
[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy)

このボタンを押すとHeroku側ではリファラをたどってapp.sonを読み込み、いきなりデプロイ画面を表示してくれるという仕様です。

もちろんGitHub以外のサイトにデプロイボタンを埋め込む事も可能。その歳はリファラでリポジトリを検出することはできないのでrepositoryというGETパラメータでリポジトリのURLを指定します。
以下のボタンで実際にRedPenをデプロイできます。ボタンのリンク先URLでrepositoryを確認できます


ちょっと面白いアプリを作ってみたけれども自分でデプロイしたものにアクセスが殺到されてもそうそうDyno(スケールアップさせるための単位)は増やせないので・・・という場合はHerokuボタンを設置して各々にデプロイしてもらえるようにしておく、というのも1つの選択肢として考えておきたいですね。

Herokuボタンを使ったJava Webアプリケーションのたたき台とできる最小限のコードも書いてみました。jspでHello worldを表示するだけ。
yusuke/heroku-deploy-button-java

埋込Herokuボタンはこちら。
・Hello Worldアプリケーションをデプロイ


デプロイ時に色々パラメータを指定することもできます。やり方は次回のエントリで。

Herokuについて詳しくは「プロフェッショナルのための実践Heroku入門」をどうぞ。もっと丁寧な説明が書いてあります。(残念ながらHerokuボタンについては掲載されていません)


関連記事:
WebアプリケーションをIntelliJ IDEAからHerokuへデプロイする #herokujp #jbugj - #侍ズム
Java WebアプリケーションをHerokuへデプロイする #herokujp - #侍ズム
Getting Started with Java on Heroku | Heroku Dev Center
RedPen を公開しました (ベータバージョン) | Advanced Technology Lab
社内共有会で使用した RedPen 資料と進捗 | Advanced Technology Lab

このエントリーをはてなブックマークに追加   

WebアプリケーションをIntelliJ IDEAからHerokuへデプロイする #herokujp #jbugj

簡単にWebアプリケーションをデプロイできるHerokuですが、IntelliJ IDEAから直接デプロイすることもできます。

デフォルトで対応しているのでプラグインは不要で、手順は以下の通り。

1. Tools→Edit Configurationsより実行設定のダイアログを開く

2. 設定ボタン(スパナのアイコン)を押し、Heroku Deploymentを選択

3. Server...をクリックし、ユーザー名/パスワードを入力


4. 設定ダイアログの+ボタンを押し、Heroku Deploymentを選択

5. 先に設定したサーバ設定を選択し、必要に応じてアプリケーション名(herokuapp.comのサブドメイン)を指定


6. 実行設定の実行ボタン(緑の再生ボタンみたいなの)を押してデプロイ

7. ブラウザよりアプリケーションにアクセス

実際に設定→デプロイしている様子はこちら↓

(時間のかかるビルドの部分は一部カットしてます)

実際に動いているところ↓
https://redpen.herokuapp.com

動画内でデプロイしたのは文書校正ツールのRedPen

サクッとデプロイ出来てインターネットのWebアプリケーションを公開できるのはやっぱり便利!でもビルドにはそこそこ時間がかかるので本番用か、外部から確認してもらうためのステージング用に使うのが良さそう。
ちょっと動作検証するだけならやはりローカルで動かすほうがサクサク。

IntelliJ IDEAからHerokuにデプロイする際の注意点として二段階認証やOAuthには(現在の所)対応しておらず、ユーザー名やパスワードを入れなければならないこと。(IDEAはユーザーが入力した秘密鍵で暗号化するのでHerokuのパスワード自体は平文では保管されません)

Herokuについて詳しくは「プロフェッショナルのための実践Heroku入門」をどうぞ。もっと丁寧な説明が書いてあります。



関連記事:
Heroku Buttonで簡単にHerokuにデプロイ #herokujp - #侍ズム
Java WebアプリケーションをHerokuへデプロイする #herokujp - #侍ズム
Getting Started with Java on Heroku | Heroku Dev Center
RedPen を公開しました (ベータバージョン) | Advanced Technology Lab
社内共有会で使用した RedPen 資料と進捗 | Advanced Technology Lab

※1 こちらにはGoogle Analyticsコード入りのブランチをデプロイしてあります→ https://github.com/yusuke/redpen/tree/atl-analytics
※2 入力した文章は記録していません。厳密にはアプリケーションのログが直近100行分Herokuに記録されていますが、当方では保管していません

このエントリーをはてなブックマークに追加   

tsūの「ū」の入力方法 #tsu

日本語では長音の表記に当たる、音を伸ばすアクセント記号、マクロン付きのuはuキーを長押し→5で入力できます(Macの場合)。




Google Analyticsもそうだけど、お金になると思うと何かとコンテンツを書きためたくなります。

tsūの登録はこちらから。

関連記事:
SNS/収益プラットフォームのtsū #tsu - #侍ズム
tsūでマネーロンダリング #tsu - #侍ズム

このエントリーをはてなブックマークに追加