ホーム ブログ ページ 63

Yahoo! Web Analytics とは? ~レポート機能を解説(日本語)~

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。KBMJアクセス解析担当の長谷です。

2008年10月8日に米Yahoo!がアクセス解析ツール 「Yahoo! Web Analytics(ヤフー!ウェブアナリティクス)」を公開していることはご存知でしょうか。

Google、Microsoftに続きYahoo!も遂にアクセス解析ツールの提供を開始したことで、 今後のアクセス解析ツールのシェアがますます気になります。

今回は、Yahoo! Web Analyticsについて現在公式英語サイトでレポート機能が簡単に紹介されておりますので、日本語表記で概要とレポート機能の説明をしていきます。

Yahoo! Web Analyticsとは?

※GoogleAnalyticsのレポート機能との違いも比較しながら解説しますのでご参考までに。

■Yahoo! Web Analyticsとは?

Yahoo! Web Analytics は Yahoo! が2008年4月に買収した IndexTools の解析ツールをベースに開発した、ウェブマスター向けのアクセス解析ツール(タグ埋め込み型)となります。

現在の利用範囲は一部の Yahoo! の広告主がメインで Yahoo! の顧客、パートナー、ディベロッパーの順番に提供していくようです。エンドユーザーへの提供は 2010 年くらいでしょうか。待ち遠しいですね…

■Yahoo! Web AnalyticsとGoogle Analyticsの機能の違いは?

Google 提供の Google Analytics と比較した上での主な特徴は以下の3点が挙げられます。


——————————————————————————

◆リアルタイムでのデータ反映

ユーザーがサイトに来訪してから、その行動履歴がYahoo! Web Analyticsのレポート管理画面に数分以内に集計されデータが反映されます。ほぼリアルタイムです驚きです。

⇒Google Analyticsでは4時間~24時間程の反映時間がかかります。

——————————————————————————

◆生データによるレポート集計

Yahoo! Web Analyticsから提供されるデータは、サーバ側で統計処理がかかった制限があるデータではなく統計処理をかけていない生データでの提供となり、より柔軟で詳細な解析をすることができます。

⇒GoogleAnalyticsでは目標ページのプロセス設定をした場合、過去のデータにフィルターはかけられず、設定内容のデータをその設定日より取得し始めます。

Yahoo! Web Analyticsではデータが残っているので過去データにも設定が反映されるようです。

非常に便利な機能です。レポートデータの管理が楽になります。

——————————————————————————

◆カスタム性の高いレポート管理画面

ドラッグ&ドロップで操作できるインターフェイスにより直観的に設定を行うことができます。Yahoo! Web Analyticsで取得できるデータから必要なデータだけ表示させるカスタムレポート機能や顧客の行動履歴に基づいたフィルタリング、セグメント分けなどが簡単にできます。

⇒GoogleAnalyticsにも同様の機能(カスタムレポート・アドバンスセグメント)があります。

Yahoo! Web Analyticsには加えて、サイトのデータの増減に連動したアラート機能や、レポート項目について情報のやり取りを行うメモ機能が実装されているようです。


—————————————————————————–

Google Analytics と比較すると大分機能がアップしている印象を受けますが、重要なのは機能の豊富さではなく、解析したデータを使っていかにネットマーケティングに活用することですので、その分ですと Google Analytics と大きな差はないといえます。

生データによるレポート項目数の豊富さが Yahoo! Web Analytics の売りのひとつだと思いますので、今後の情報開示が待ち遠しいところではあります。

■Yahoo! Web Analyticsのレポート画面と機能説明

公式英語サイトにてレポート機能について簡単に表記されているので下記に要約をまとめておきます。
※注意:実際の機能と若干の違いがあるかもしれませんが、私の個人的な要約となりますのであらかじめご了承ください。

⇒公式英語サイトはこちらYahoo! Web Analyticsのホームページ

Yahoo! Web Analyticsのレポート画面

■Executive Analytic Dashboards  (レポートのダッシュボード機能)

Web担当者に合わせて解析レポート項目を選びダッシュボードで一括して閲覧することができます。

・解析要望に応じたレポート項目、ベンチマーク指標、グラフをダッシュボード上で表示

・経営者や広告担当者、SEO担当者といった、見るべき指標が違う担当者毎にダッシュボードを設定可能。

 ■ Comparative Reporting 解析データの比較レポート機能

Yahoo! Web Analyticsではデータを並べサイトの成長をわかりやすく比較することができます。

・サイトの成長性を並んだデータから読み取り、施策の効果測定や、季節による数値の増減を把握

・レポートをブックマークすることで成功事例のデータを残していつでも表示・活用ができるようです。

Yahoo! Web Analyticsのレポート画面

 ■Advanced Path Analysis ページ経路分析(サイト導線のチェック)

サイトに来訪したユーザーがどのページを見て最終的にゴールページに至っているのかを把握できます。

・ページの1つ1つをサイトの階層毎に地図として閲覧することができるようです。

 ユーザーの送客率が高い導線を把握することができるのは非常に便利ですね。

※GoogleAnalyticsでは基準ページから「次に表示されたページ」「閲覧終了ページ」までしか追うことができないので、Yahoo! Web Analyticsで深い階層まで可能であれば注目の機能となります。

 ■Visitor Tracking 訪問者プロセス分析

訪問者の離脱率をあらかじめ設定した経路に対して、総客率・離脱率で把握することができます。

・訪問客の動きを追跡し、チェックポイント毎での送客率・離脱率を把握することができます。

・Yahoo! Web Analyticsは生データのため、設定プロセスが過去のデータにも適用されるようです。

※GoogleAnalyticsでは、目標までのプロセス設定は、過去データに反映されず、設定日以降から適用なのでこの仕様は非常に便利ですね。

Yahoo! Web Analyticsのレポート画面

 ■Custom Analytics Reports カスタムレポート機能

Custom Report Wizardを使うことにより、 Yahoo! Web Analyticsのレポート上で表示される、ディメンション(新規ユーザーなど)と解析指標(セッション数、直帰率など)を自由にカスタマイズできる機能です。

※Google Analyticsでは08年10月3日の機能拡張で追加された「カスタムレポート機能」に当たります。Yahoo! Web Analyticsにおいても実装されているようなので安心ですね。

 ■Marketing Workflow Management ワークフロー上での管理機能

Web担当者がビジネスの上でサイトを運用する際のサイト監視・情報共有機能になります。

・ウェブサイトデータの条件を設定し、適合する場合に電子メールで知らせるアラート機能があるようです。サイト指標の変化、休みまたはシステム停止期間に影響を及ぼすイベントを把握するために活用するのがよいでしょう。   

・レポート項目とダッシュボード上でのメモを担当者同士で共有することによってビジネス上での情報交換・活用体制の改善に利用することができるようです。

※GoogleAnalyticsにはない機能ですので、Yahoo! Web Analyticsの特徴ともいえ増ます。

■終わりに

今後はますますYahoo! Web Analyticsの情報が開示され多くのユーザーに注目されていくツールになることは間違いありません。実は紹介しきれていない機能がまだまだありますが、情報が明確ではないので今回の記事ではここまでです。

エンドユーザー向けに公開された時にはDo Rubyでも細かな記事を上げていきますので楽しみにしていて下さい。本日は休日でしたのでスーパー銭湯でサウナ⇒ビールで幸せでした。それでは。

 ——————————————————————————-

■バックナンバー

【第1回】優良顧客で売上げ増加!キーワード選びから考えるアクセス解析活用術

【第2回】優良顧客で売上げ増加!キーワード選びから考えるアクセス解析活用術

■その他アクセス解析担当の記事 【最新記事】

・アクセス解析用語はこちら

・アクセス解析でよく使うIT用語 その2

・アクセス解析でよく使うIT用語 その1

・無料かつ高性能のアクセス解析ツール「Google Analytics」について

・GoogleAnalyticsトラッキングコードの設置方法

・Googleアカウント・Google Analyticsアカウントの取得方法

・Google Analyticsとは? ・サイトユーザビリティ

・アクセス解析の重要性 時代はAIDMAからAISCEAS

・ユーザビリティ・デザインとは?

アクセス解析でよく使うIT用語 その2

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Google Analyticsなどでよく使うアクセス解析用語解説

KBMJ アクセス解析チームコンサルティンググループの中林です。

本日は用語解説2回目でGoogle Analyticsよくでてくる用語等紹介します。

本日の用語はコチラ↓

■ SEO とは

Search Engine Optimizationの略で、直訳では「検索エンジン最適化」となります。Yahoo,Google,MSNといった検索エンジンで、キーワード検索を行った場合に、
webサイトが検索結果の上位に表示されるようにホームページを改善することです。

消費者の行動が
AIDMAからAISASに代わっているといわれています。
詳しくは「アクセス解析の重要性 時代はAIDMAからAISCEASへ」をご参照ください。

つまり『なにか買いたいな』という思いを持っている消費者は
「検索」という行動をとりやすいため、検索エンジンで上位に表示されることは、
非常にコンバージョン率の高いユーザーを集客することが可能になります。  

■ 新規ユーザー とは

GoogleAnalyticsを使って、新規ユーザーとリピーターにセグメントして
データを取り出すことが可能ですが、ここでの新規ユーザーとは新規セッションを指します。

Google analyticsの場合はgoogle analyticsがサイトを訪れた時、ユーザーにクッキー情報を持たせます。
クッキー情報をもってないユーザーが訪れたらGoogleAanalyticsではそれが新規ユーザーとカウントされます。  

■ リピーター とは

では、リピーターとはGoogle Analyticsでは
上記のクッキー情報をもったユーザーがリピーターとされます。

もしGoogleAanalyticsで、2月1日から2月28日の期間を絞って分析する場合
2月1日以前にクッキー情報を付与されたユーザーが
2月1日~2月28日の間に訪れた場合はリピーターとされます。
1月31日に一度、訪れたユーザーが2月1日に訪れた場合この場合リピーターとなります。

ここで、GoogleAnalyticsのデータ期間を1月31~2月28日にした場合
1月31日に一度訪れたユーザーが2月1日に再度訪れた場合

1月31日に初めてGoogle Analyticsからクッキー情報を付与されるので、
1月31日に新規セッションで1カウント、2月1日にリピーターで1カウントされます。  

■ 入口ページ(閲覧開始ページ) とは

アクセス解析を行っていくうえで重要な解析項目の一つに、
入口ページ(閲覧開始ページ)があります。

入口ページとは、ユーザーがなんらかの流入元(検索エンジン、ブックマーク、外部リンク…etc)から
サイトに訪れた際に、一番最初に開いたページで、セッションの開始ページとなります。
セッション数の合計分だけ、入り口ページはあります。  

■ ランディングページ とは

バナー、リスティング等、インターネット広告などのマーケティングの施策や、
検索エンジンの検索結果をクリックしたときに開かれるページのことです。

入り口ページとランディングページの違い

入り口ページはセッションの始まりのことで、ランディングページはセッションにかかわらず広告や、検索エンジンからサイト内に着地したページとなります。  

■ 出口ページ(離脱ページ)とは

入り口ページがサイトを訪れた時のものだとすると、
ユーザーがサイトから離脱したときのページを出口ページ(離脱ページ)と言います。  

■ 閲覧時間 とは

訪問者がサイト内の各ページをどれだけの時間をかけて読んだのかを表すものです。

ブログなど読ませることが目的のページである場合は
閲覧時間が長いということは、ページの内容をじっくり読んでもらえている。ということになりますので、
内容が優れているということもいえると思います。

また、目次や商品一覧などのページは、読ませることが目的でないページになります。
このようなページは、ユーザーをつぎのページにナビゲーションするためのページであるため、
ページの閲覧時間が短い方が、ユーザーが求めている目的ページにたどり着きやすいことがわかります。
ページの閲覧時間が長くなってくると、ユーザーが次のページを探しにくかったりするなど、
ナビゲーションに問題が有る可能性があります。
閲覧時間が長くなっていて、離脱率が高い場合などはユーザーを迷わせてしまっている可能性があるので要注意です。  

■ リファラー(referer)とは

webページにアクセスする時(ブラウザで表示する)直前に閲覧していたページのURLの情報です。
リファラー情報をたどることで、ユーザーが利用している検索サイトや、外部リンクなど
ユーザーのどういった経緯でサイトを訪れたのかを調べることが可能です。
検索エンジンからの流入である場合、URLのパラメーター部分を調べることで、
どんな言葉で検索してきたかを調査することもできますし、
また、サイト内のユーザーの動きも知ることが可能です。  

■ ノーリファラー とは

上記のようなリファラー情報を持たないアクセスのことをノーリファラーと呼びます。
リファラー情報を持たないアクセスには下記のものが考えられます。

リファラーがない場合
リファラーが取得できないアクセスも有ります。
(1)URLを直接ブラウザに入力する
(2)ブックマークからのアクセス
(3)メール(webメールを除く)からのアクセス
(4)ワード、エクセルからのリンク
(5)ショートカット
(6)RSSリーダー(web上のものを除く)からのアクセス
※ウイルスソフトによっては、リファラーを送らなくするものもあります。 

■バックナンバー

・アクセス解析用語について ⇒ アクセス解析でよく使うIT用語 その1 

■その他アクセス解析担当の記事 【最新の3記事】

【第2回】優良顧客で売上げ増加!キーワード選びから考えるアクセス解析活用術 ・無料かつ高性能のアクセス解析ツール ⇒ Googleアカウント・Google Analyticsアカウントの取得方法・サイトユーザビリティ ⇒ ユーザビリティ・デザインとは?

MySQLのストレージエンジン変更

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

君は知っているか? MySQLに、ストレージエンジンというものがある事を。

 【知っている】 → え?知ってる?じゃあもう読まなくてもいいかもね。(次回にご期待ください)

 【知らない】 → そうか・・・・あんた、オレと同じだな。(続きをお読みください)

ストレージエンジンていうのは、SQLの実データがどのような形式で、
どのように格納されているかを管理している部分で、それらのデータ
にアクセスする処理を行うとの事。

で、以下の二つが代表的なものだそうです。

【MyISAM(マイアイサム)】
・テーブル単位のファイルによるデータ構造を持つ。
・トランザクション機能がない分、軽快に動作する。
・ロックはテーブル単位でかかる。
・参照系クエリが大部分を占める場合に有効。

【InnoDB(イノディービィー)】
・テーブルスペース内に複数のテーブルやインデックスを格納するデータ構造を持つ。
・トランザクション機能をサポートしている。
・ロックは行(レコード)単位でかかる。
・更新系クエリが多い場合に有効。

さて、自分が扱っているサーバは複数のバッチ処理を同時に行っていたり
するので、今回、MyISAM(デフォルト)からInnoDBに変更してみようと
いう話になりました。
今回は、その手順について説明します。(ちなみに次回はない)

まず、既にInnoDBになってたら意味ないので、
現在の設定を確認します。
mysql> show engines;

| Engine   | Support   | Comment |
+———+———-+———————————————–+
| MyISAM  | DEFAULT | Default engine as of MySQL 3.23 ….|
| MEMORY | YES        | Hash based, stored in memory, useful for ….|
| InnoDB   | DISABLED | Supports transactions, row-level locking, ….|
(以下略)

OH!NO!
「InnoDB」は「DISABLED」になってんじゃん!?
というわけで、/etc/my.cnfを修正します。以下の部分を変更してください。
# vi /etc/my.cnf

default_table_type=MYISAM
 ↓
default_table_type=InnoDB

では、mysqlを止めます。
# /etc/init.d/mysqld stop

さて、この後、mysqlを起動すれば設定は反映されるんだけど、
ここにちょっとした罠があるんですわ。
/var/lib/mysql に移動してくだされ。
# cd /var/lib/mysql # ls

この中に ib_logfile0 ib_logfile1 ibdata1 といったファイルがある場合
は削除しておくがよろし。(心配だったら移動させてもよろし)
こいつらがいると、InnoDBの設定後にMySQLを起動した場合、
MySQLが立ち上がらないんですよ。

さて、上の作業が終わったら、いよいよmysqlの起動です。
# /etc/init.d/mysqld start

どう?立ち上がった?
ま、いいや。

設定が反映されたか確認します。
> show engines;

これで新しく作られたテーブルのストレージエンジンは、
特に明示しない限りInnoDBになります。

だが、ちょっと待て。
既存のテーブルに関してはどうすんだよ?と。

そう。ストレージエンジンはテーブル単位で指定するので、
既存のテーブルは頑張って一つずつ設定していかなければ
ならんのです。
alter table テーブル名 engine=innodb;

こいつをひたすら繰り返せ!
面倒だったらシェルでバッチ作って回してもいいかもね。
君ならできるはずだ!

以上、大した内容じゃないのにいっぱい書いてしまった。
お粗末さまでした。

アクセス解析でよく使うIT用語 その1

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

KBMJのアクセス解析チームの中林です。

今日は第一回目ということでアクセス解析の基礎部分である

アクセス解析用語を紹介していきたいと思います。

PV とは

PV数(ページビュー数、アクセス数)とは、ユーザーがページを閲覧した回数です。ページごとのアクセス数を把握することで、Webサイトのどのページやコーナーにユーザーの注目が集まっているのかを知ることができます。

セッション(訪問者、ビジター) とは

セッションとは、サイトにアクセスして来た訪問の回数を表しています。

同一の訪問者が一定の時間内に同じページを開いても新たな訪問者数とはカウン

トされません。

サイト内でどのページが人気があるのかを計る指標として役立ちます。

ユニークユーザー(UU) とは

「ページビュー」「アクセス数」が、同じ人の複数回のアクセスもすべてカウントするのに対し、純粋な訪問者数を把握するのに用いられる指標が「ユニークユーザー」です。

ユニークユーザーでは、期間内に訪れた重複のない実際の人数を表しています。

ユニークユーザーの算出は主に3つのパターンがあります。

1.サーバー単位で、訪問した人のブラウザにcookieという仕組みを使い、ユーザーを特定しカウントする方法。

※cookieの受け入れを拒否する利用者や、検索エンジンのロボットなどもあり、正確なカウントはやや困難である。

※ブラウザ単位のカウントであるため複数のコンピュータ、ブラウザからアクセスする人の重複を性格に測定することはできない。

1.オーディエンス・メジャメント機関(webサイトの視聴率調査機関)では、登録されたモニターによるデータを用い、拡大推計によってユーザー規模を算出する。

 ※cookieに基づく①の方法でのカウントよりもユーザーの特定は正確である。

 しかしモニターの数値の拡大推計をとったものであるので、実勢値をここから推測することは難しい。

1.完全な登録制のサイトやクローズドのSNSの場合に登録者数を全てユーザーと考え、

その登録データとのマッチングによってアクセスしたユーザーを算出する方法をとることがある。

セッションとユニークユーザーの違い

セッション(訪問者)とは?

セッション(訪問)は、同じユーザーがサイトを訪れてからサイトを出て

行くまでの行動の単位のことをいいます。一定間隔(世界標準では30分以上)があくとセッション(訪問)終了とみなされ、同じユーザーのアクセスであっても別の訪問としてカウントされます。

ユニークユーザー(UU)とは?

 セッションが一連の行動であり、一定時間が過ぎたあとのアクセスが別カウントされるのに対し、

 ユニークユーザ(UU)は、一定間隔が空いても訪問終了とはみなされず、1人とカウントされます。

同じ人が何回訪れても ユーニークユーザーは1となります。

 直帰・離脱 違い

直帰・離脱とは?

直帰 とは

サイトに訪れたユーザーが、最初にアクセスから、別のページを見ることなく

ブラウザを閉じる、セッション切れを起こす、外部サイトへ移動した場合のことです。

つまり、サイトを訪れたユーザーが1ページしか見なかった場合は「直帰」となります。

そのページのアクセス総数から直帰したユーザーの割合を算出したものを直帰率といいます。

離脱 とは

直帰率とよく似た指標に「離脱」があります。

サイトを訪れたユーザーが、2ページ以上サイトを閲覧したのちに

ブラウザを閉じる、セッション切れを起こす、外部サイトへ移動した場合に「離脱」と言います。

そのページのアクセス総数から「離脱」したアクセス数の割合を「離脱率」といいます。

※一般的にコンテンツの目標ページやリンク集で離脱率が高くなる。

しかし、普通のページで「離脱率」が高くなっている場合

該当するコンテンツになにかユーザーを離脱させてしまっている原因があると分析できる。

コンバージョン とは

ECサイトであれば商品購入や資料請求、ポータルサイトならば会員登録など、

サイト運営者が意図している目標にサイトを訪れたユーザーが達することを

コンバージョンと言います。

※日本では、conversionは「転換」と訳すが、

コンバージョンをきっかけに「訪問者」から「顧客」へ変化する。

コンバージョン率という表現をされることが多い、下図参照。

コンバージョンとは?

上記図で100人ユーザーが訪れて、最終的に目標に40人訪れた場合、

コンバージョン率は40%であると言えます。

今週はごくごく基礎的なアクセス解析用語でした。

次回は、2/28の更新予定です。

KBMJ GoogleAnalyticsのスクールも開催中です!

Google Analyticsスクールでは、セミナーやブログではお伝えしきれない細かな設定方法やアクセス解析手法について、徹底的に解説いたします。 少人数のスクール形式だから、状況やレベルに合わせてインタラクティブに、より詳しく、実用的な活用術を徹底指導いたします!

copyとretain

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Objective-CのNSStringなポインタ変数をcopyしても、メモリに新しく領域が確保されるわけではなく、同じアドレスを指し示すという事を聞いたので、本当なのか調べてみた。比較の為、NSMutableStringも。

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *foo = @”Hello”;
    NSString *copiedFoo = [foo copy];
    NSString *retainedFoo = [foo retain];

    NSMutableString *bar = [NSMutableString stringWithString:@”World”];
    NSMutableString *copiedBar = [bar copy];
    NSMutableString *retainedBar = [bar retain];

    NSLog(@”foo     : %@ (%x, %@, %d)”, foo, foo, [foo className], [foo retainCount]);
    NSLog(@”Copied  : %@ (%x, %@, %d)”, copiedFoo, copiedFoo, [copiedFoo className], [copiedFoo retainCount]);
    NSLog(@”Retained: %@ (%x, %@, %d)”, retainedFoo, retainedFoo, [retainedFoo className], [copiedFoo retainCount]);

    NSLog(@”bar     : %@ (%x, %@, %d)”, bar, bar, [bar className], [bar retainCount]);
    NSLog(@”Copied  : %@ (%x, %@, %d)”, copiedBar, copiedBar, [copiedBar className], [copiedBar retainCount]);
    NSLog(@”Retained: %@ (%x, %@, %d)”, retainedBar, retainedBar, [retainedBar className], [retainedBar retainCount]);

    [pool drain];
    return 0;
}

その結果、確かに同じだった。以下は、NSLogでコンソールに出力している内容で、括弧の中身は、左から順にアドレス、クラス名、リテインカウンタになります。

HelloWorld[2106:10b] foo     : Hello (2030, NSCFString, 2147483647)
HelloWorld[2106:10b] Copied  : Hello (2030, NSCFString, 2147483647)
HelloWorld[2106:10b] Retained: Hello (2030, NSCFString, 2147483647)
HelloWorld[2106:10b] bar     : World (105990, NSCFString, 2)
HelloWorld[2106:10b] Copied  : World (105a00, NSCFString, 1)
HelloWorld[2106:10b] Retained: World (105990, NSCFString, 2)

NSStringは、後から中身を変更するわけではないので、copyしても、retainと同じなんだなと。逆にNSMutableStringは、後からappendStringなどするのでcopyした場合は、きちんと別にメモリが確保されていますね。

ちなみに、

    NSMutableString *bar = @”World”;
    [bar appendString:@”hooo”];

とすると、ビルドはできますが実行時に落ちてしまいます。理由は、

*** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘Attempt to mutate immutable object with appendString:’

と、NSMutableStringと宣言したポインタ変数に文字列を代入すると、NSStringになってしまうから。

Ludiaインストールメモ@Centos52

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちわ、uです。

最近、Ruby on Railsアプリケーションの全文検索システムとして、

Hyper Estraierから、Ludia@PostgreSQLを使う事が多くなってきたので、

CentOS 5.2へのインストール方法を、紹介したいと思います。

# そろそろ、CentOS 5.3が出ますので、

# CentOS 5.2を使用するのは、時期的に微妙なのですが…

実験環境

CentOS 5.2

# 正確には、CentOS 5.2のxen上のゲストOS

ludia-1.5.1

postgresql-8.3.5

mecab-0.97

mecab-ipadic-2.7.0-20070801.tar.gz

senna-1.1.4

Ludia installationファイルの閲覧

# ludia-1.5.1/INSTALLの通り実行。

wget http://osdn.dl.sourceforge.jp/ludia/32461/ludia-1.5.1.tar.gz
tar zxvf ludia-1.5.1.tar.gz 
cd ludia-1.5.1
less INSTALL

MeCabのインストール

以下等から、mecabを取得
http://sourceforge.net/project/showfiles.php?group_id=177856

cd /usr/local/src/
tar zxvf mecab-0.97.tar.gz 
cd mecab-0.97
./configure --with-charset=utf8
make
sudo make install

MeCab辞書のインストール

以下等から、mecabを取得
http://sourceforge.net/project/showfiles.php?group_id=177856

cd /usr/local/src
tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz 
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make
sudo make install

sennaのインストール

cd /usr/local/src
tar zxvf senna-1.1.4.tar.gz
cd senna-1.1.4
./configure
make
sudo make install

Ludiaのインストール

wget http://osdn.dl.sourceforge.jp/ludia/32461/ludia-1.5.1.tar.gz
tar zxvf ludia-1.5.1.tar.gz 
cd ludia-1.5.1
make 
sudo make install

PostgreSQLのインストールと実行

以下によりますと、v8.3.6だとデフォルトだとうまく入らない様です。

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20090302

v8.3.5では、INSTALLの通り実行すれば問題無く入るかと思います。

cd /usr/local/src/
tar zxvf postgresql-8.3.5.tar.gz
cd postgresql-8.3.5
cat INSTALL
./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

ludia-1.5.1/READMEを見てみると…

設定ファイルの編集
------------------

デフォルト設定でLudiaを使用する場合は、この節を飛ばしても問題ありません。

Ludiaを使用するデータベースクラスタのpostgresql.confファイルに、
以下の設定内容を追加してください。
(custom_variable_classesの項目は必須です。
それ以外の項目は記述しないと、デフォルト値が参照されます。)
設定を反映するためにはPostgreSQLを再起動する必要があります。
postgresql.confの設定が反映されていないと、
実行時にエラーになってしまうので注意してください。
設定内容についての詳細は、 実行時の設定_ の節を参照してください。
::

  custom_variable_classes = 'ludia'
  ludia.max_n_sort_result = 10000
  ludia.enable_seqscan = on
  ludia.seqscan_flags = 1
  ludia.sen_index_flags = 31
  ludia.max_n_index_cache = 16
  ludia.initial_n_segments = 512

もしすでにcustom_variable_classesが設定されている場合は、
そこにludiaというクラス名を追加してください。

…との事なので、以下を記述

vim /usr/local/pgsql/data/postgresql.conf

#------------------------------------------------------------------------------
# LUDIA OPTIONS
#------------------------------------------------------------------------------

custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.seqscan_flags = 1
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512

PostgreSQLの実行

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &

Ludia対応なDBにする。

/usr/local/pgsql/bin/createdb testdb
/usr/local/pgsql/bin/psql -f /usr/local/pgsql/share/pgsenna2.sql testdb
/usr/local/pgsql/bin/psql testdb

確認

後は、ludia-1.5.1/READMEの通り、

固有のindexを作成したり、@@等の演算子を使ったSQL文が正常に動作すれば、

PostgreSQLにLudiaが正常に組み込まれたと見てよいかと思います。

いくつかのアプリケーションを導入する必要はありますが、

Ludia(とPostgreSQL)のINSTALLの通り実行するだけで、

あっけなく1時間もあれば十分に導入できるかと思います。

solarisでリソース情報を表示する基本的なコマンド

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。サンドリバー砂川です。

今回はsolarisで各リソースを調査する際の基本的なコマンドを紹介します。

基本的にはlinuxと同じですが、表示やオプションが一部異なっていたりするので初めて触ると戸惑ったりします。

ps

プロセスの状態を調べる時によく使うpsコマンドですが、linuxで全プロセスを表示するオプションauxがsolarisのpsでは使用できません。solarisでは-efオプションを使うのが一般的です。

$ ps -ef

UID PID PPID C STIME TTY TIME CMD

root 20826 18710 0 3月 0 ? 1:07 /usr/local/apache2/bin/httpd

root 18892 18710 0 2月 2 ? 0:00 /usr/sbin/cron

sunakawa 9200 19323 0 21:06:55 ? 0:00 /usr/lib/ssh/sshd

(略)

prstat

アクティブプロセスの統計を定期的に表示します。

solarisにはデフォルトではtopコマンドが入っていません。なのでprstatをtop代わりに使用したりします。-s sizeとするとメモリ使用量の大きい順にソートされるので使いやすくなったりします。

prstat -s size

PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP

9200 sunakawa 12M 7216K sleep 59 0 0:00:00 0.0% sshd/1

6240 nobody 11M 4224K sleep 59 0 0:00:00 0.0% httpd/1

(略)

df

solarisのdfは、オプションを指定せずに実行すると使用率を表示してくれないので、-hか-kを指定したほうが見やすくなります。

$ df -h

ファイルシステム サイズ 使用済み 使用可能 容量 マウント先

/ 165G 92G 73G 55% /

/lib 60G 5.5G 54G 9% /lib

(略)

iostat

ディスクの入出力情報を表示します。solarisではページングの状況も表示されます。秒単位で間隔を指定することで定期的にデータをサンプリングすることが出来ます。

$ iostat 1

tty sd1 sd2 sd4 cpu

tin tout kps tps serv kps tps serv kps tps serv us sy wt id

0 26 4 0 15 0 0 7 380 30 32 1 1 0 98

0 387 0 0 0 0 0 0 997 118 9 4 3 0 93

0 132 0 0 0 0 0 0 1103 120 9 3 3 0 94

(略)

vmstat

システム全体のcpu使用率やメモリ使用率、ページング状況等を表示します。

vmstatを実行して一回目のデータは、システム起動時からの平均値を表示するので注意が必要です。現在のデータを参照する場合は間隔を指定するなどして二回目以降のデータを見るようにします。

$ vmstat 1

kthr memory page disk faults cpu

r b w swap free re mf pi po fr de sr s1 s2 s4 — in sy cs us sy id

0 0 31 18007816 3645672 16 52 11 7 7 0 0 0 0 30 0 982 3865 1307 1 1 98

0 0 227 10857312 1264408 120 454 16 16 16 0 0 0 0 117 0 2506 19166 3935 10 3 86

(略)

以上

デシジョンテーブル

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

みなさんテストケースってどうしてますか?

テストの手順、結果などをだらだらと文字で書いていると 書き手によって表現が違ったり、テスターよって解釈が事なることがあります。

そこで私はデシジョンテーブルを使っています。

縦軸に前提条件、動作、結果 横軸にケースNoを記載した 表形式のテストケースです。

細かい手順を記載しなければならないなどの手間はかかりますが そのアプリを知らないテスターでもストレスなくテストできると言うメリットが あります。

ぜひ、試してみてください…

Ruby on Railsでカレンダーを表示する

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。

エンジニア1年目。

Ruby始めて3週間目くらいのyukiです。

今回は、Ruby on Railsでカレンダーを作りたいと思います。

簡単にカレンダーが作れる便利なプラグイン「Calendar Helper」

というものもあるみたいですが、今回は使わず自力で作って見ます。

htmlで使える用、tableで書き出します。

ソースはこんな感じ。

helper————————————————————————————-

def table(week_count, date)

case week_count

when 0

#日曜日(赤色書き出す)

cal = “<td><span style=\”color:#ff0000;”>”#{date}</span></td>”

when 6

#土曜日(青色書き出す)

cal = “<td><span style=\”color:#0000ff;”>”#{date}</span></td>”

else

#その他の曜日

cal = “<td>”#{date}</td>”

end

cal

end

def calender(date_org)

cal = “”

cal << “<table>”

#表示するカレンダーの年月日データ

d = Date.new(date_org.year, date_org.month, date_org.day)

#表示するカレンダーの1日の曜日

youbi = d.beginning_of_month.cwday

#表示するカレンダー1日より左にある余白の数

left = (youbi == 7)? 0 : youbi

#表示するカレンダーの最終日

end_date = d.end_of_month

#表示するカレンダーの最終日の曜日

end_youbi = d.end_of_month.cwday

#表示するカレンダーの最終日の右にある余白の数

right = 6 – end_youbi

#日にち

date = 1

cal << “<tr>”

#1日より左にある余白分<td></td>を書き出す

left.times do

cal << “<td></td>”

end

#最終日の日数分回す

end_date.day.times do

if youbi == 7 && date != 1

youbi = 0

cal << “</tr>”

cal << “<tr>”

elsif youbi ==7 && date ==1

youbi = 0

end

cal << table(youbi, date)

youbi += 1

date += 1

end

#最終日の右にある余白分<td></td>を書き出す

right.times do

cal << “<td></td>”

end

cal << “</tr>”

cal << “</table>”

end

——————————————————————————————-

コントローラ(hoge) ——————————————————————–

def index

if params[:date]

begin

@date = Date.parse(params[:date])

rescue

@date = Date.today

end

else

@date = Date.today

end

end

#paramsに年月日データが入っているなら、そのデータ[@date]に入れる。

#入っていなければ、今日の年月日データを[@date]入れる。

——————————————————————————————-

view ————————————————————————————-

#@date.last_monthで先月のデータ

<%= link_to(‘先月’,:action=>’index’,:date=> @date.last_month) -%>

#@date.next_monthで来月のデータ

<%= link_to(‘来月’,:action=>’index’,:date=> @date.next_month) -%>

#これでカレンダーを書き出す。

<%= calender(@date, {:controller => ‘hoge’, :action => ‘index’}) %>

——————————————————————————————-

うん。わかりにくいね。

ヘルパーで

<table>

<tr>

<td>~</td>

<td>~</td>

</tr>

</tr>

</table>

となるようカレンダーを書き出してあげて、それをview呼び出し表示しています。

コントローラは、リンクで先月や来月の年月日を返すために使っています。

utility_beltでwirble以上にirbを拡張する

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

はじめまして。

KBMJでプログラマとして働いているkuromatuと申します。

今回は、rubyのコーディングの際によく使われるinteractive ruby(irb)を拡張するgemプラグインのwirbleを基に、更なる拡張を加えるutility_beltというgemプラグインについて紹介します。

インストール方法

gem install utility_belt

実行すると、utility_belt-1.1.0(2009/02/27現在)がインストールされます。

使い方

ホームディレクトリに以下の記述の.irbrcを置きます。

require 'rubygems'
require 'utility_belt'

utility_beltをrequireした際にwirbleもrequireされているので、wirbleに関する記述は必要ありません。

そのままirbを起動すると、wirbleの拡張機能と、utility_beltにデフォルトで設定されている機能を利用できるようになります。

デフォルト設定で適用される設定

irbがカラフルになる

これは、utility_beltが依存しているwirbleというgemプラグインで実装されている機能ですが、色設定がutility_beltで再定義されています。

色設定セットはdarkとlightの2種類が定義されていて、デフォルトではdarkが選択されています。

色をlightに変更したい場合には、

$RUBYGEMS/gems/utility_belt-1.1.0/lib/utility_belt.rb

というファイルの22行目にある記述を次のように書き換えてください。

UtilityBelt::Themes.background(:dark) if defined? UtilityBelt::Themes
↓
UtilityBelt::Themes.background(:light) if defined? UtilityBelt::Themes

ハッシュの追加・削除

+ – でハッシュの追加・削除ができます。

>> hoge = {:fuga => "bar" }
=> {:fuga=>"bar"}
>> hoge += {:hige => "baz"}
=> {:fuga=>"bar", :hige=>"baz"}
>> hoge -= :fuga
=> {:hige=>"baz"}

わざわざmergeやrejectを使わなくて良いので楽ですね。

コマンドヒストリが参照できる

wirbleの機能として、コマンド履歴の保存と参照(Ctrl-p、Ctrl-n)が利用できます。

utility_beltでは、その機能に関連するメソッドを追加しています。

h(history)                     - 履歴一覧を呼び出せます。引数として表示履歴数を指定できます。
h!(history_do)                 - 最後に実行したコマンドを実行できます。
hvi(history_to_vi)             - 履歴一覧をviで開き、編集できます。
history_write(filepath, lines) - 履歴一覧を指定したファイルの指定行に書き込みます。

実行例:/home/hoge/fugaというファイルに、履歴の0~100行目を書き込む

history_write(/home/hoge/fuga, 0..100)

irb中にエディタが呼び出せる

vi、emacs、textmate(MacOSのエディタ)が呼び出せます。

vi    - viの実行
emacs - emacsの実行
mate  - textmate

emacsclientを使用している方への対応はまだのようですが、

TODOとしてコメントが残されているところを見ると、今後のアップデートで実装されるかもしれません。

irb_options

irbの自動インデント設定をONにします。

irbの出力結果の有無を切り替えられる

v(verbose)  - irbの出力結果を表示する
q(quiet)    - irbの出力結果を非表示にする

その他の機能

デフォルトの機能以外にも有用な機能が実装されているので、すべて利用できるようにしてみましょう。

利用方法

$RUBYGEMS/gems/utility_belt-1.1.0/lib/utility_belt.rb

というファイルの16行目にある記述を書き換えてください。

UtilityBelt.equip(:default) unless UtilityBelt.equipped?
↓
UtilityBelt.equip(:all) unless UtilityBelt.equipped?

Windows・Linuxの場合には、書き換え後にirbの実行でエラーが出る可能性があります。その時は、先に挙げた行を以下のように書き換えて下さい。

UtilityBelt.equip(:all, :except => ["clipboard", "pastie", "google"]) unless UtilityBelt.equipped?

デフォルト設定以外の機能

findメソッドを省略できる(Rails用)

Ruby On Rails(Rails)でruby script/consoleを使う際に有効な機能です。

>> memo(1)
memo(1)
  Memo Load (0.0ms)   SELECT * FROM "memos" WHERE ("memos"."id" = 1)
=> #<memo id: 1, body: "test", created_at: "2009-02-25 12:00:00", updated_at: 12:00:00">

memo(1)と書くと、Memo.find(1)と挙動となります。

memo(:all, :order => “id”)などのように、

オプションも普通に渡すことができます。

標準出力に実行されたSQLログが流せる(Rails用)

こちらもRailsでruby script/consoleを使う際に有効な機能です。

logコマンドを実行すると、その後に実行されたSQLログを標準出力として表示します。

普段から別画面でログファイルをtailしている人にはあまり必要がないかもしれません。

ActiveRecord::Baseのメソッドを使ったコードの検証には役立つと思います。

log
=> #<logger:0x35ae4e0 ...>
>> memo(1)
memo(1)
  Memo Load (0.0ms)   SELECT * FROM "memos" WHERE ("memos"."id" = 1)
=> #<memo id: 1, body: "test", created_at: "2009-02-25 12:00:00", updated_at: 12:00:00">

notメソッドが使える

論理値を反転させることができます。

>> true.not
=> false

各オブジェクトのメソッドや、ロード済みのクラスがgrepできる

>> grep_classes "True"
=> ["TrueClass", "RubyToken::TkTRUE"]
>> String.new.grep_methods "split"
=> ["split"]

Symbol#to_proc、String#to_procが使える

Symbol#to_procはruby1.9系で実装されていますね。

>> plus = :+.to_proc
=> #<proc:0x03fe6930 @...>
>> puts plus.call(1,2)
3
=> nil

String#to_procも出番は少なさそうですが、面白い機能だと思います。

(1..3).map(&'*2')
=> [2, 4, 6]

is_an?メソッドが使える

is_a?メソッドのaliasとして、is_an?メソッドを定義しています。

文法の厳密さを求める方には良いかもしれません。

>> [].is_an? Array
=> true

クリップボードを操作する(Mac OS X用)

クリップボードの内容にアクセスする機能が利用できます。

MacClipboard.read          - クリップボードから読み込み
MacClipboard.write("hoge") - クリップボードへ書き込み

その他には、Amazon S3のアップロードコマンドとGoogle検索コマンド(どちらもMac OS X用)があります。

筆者の環境(Windows+Linux)では利用できなかったため、今回の紹介には含めませんでしたが、興味のある方は以下のページ(英文)にて利用方法をご確認いただければ幸いです。

http://utilitybelt.rubyforge.org/usage.html

その他

難点

Railsの1.2系だと、irbを起動していない場合でも、常に.irbrcが読み込まれてしまうという不具合が存在するようです。

そのため、常にutility_beltの拡張が有効となってしまいます。

この影響で、一部のRails Aprricationでscript/consoleを実行した際に、utility_beltとアプリケーションの一部のメソッドが競合する可能性があることに注意してください。

過去のバージョンで作者の方も苦労されたようです。

http://gilesbowkett.blogspot.com/2007/12/utility-belt-vs-rails.html

個人的な意見

rubyメソッドの確認・Railsのscript/console上での検証作業や、ruby-debugと組み合わせたデバッグ作業に利用しています。

問題解決、今書いているロジックの検証にとても役立っています。

最後に

最後までお読み頂き、誠にありがとうございます。

irbをよく利用される方、面白そうと思われた方は、ぜひ一度utility_beltを使ってみてはいかがでしょうか。

参考URL

Utility Belt

http://utilitybelt.rubyforge.org/

Rubyforge Projectページ

http://rubyforge.org/projects/utilitybelt/

Googleアカウント・Google Analyticsアカウントの取得方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

What’s up!? アクセス解析チーム、アシスタントのミラノです。

今回はGoogle Analytics導入を決めたあなたが、次にしなくてはならないことについて説明します。

Very first things to do!


●Googleアカウントの取得

まだGoogleアカウントをお持ちでない方は、アカウントを取得する必要があります。

Googleの公式ページからアカウントを取得することができますので、下記のURLを参照してください。

URL:https://www.google.com/accounts/NewAccount?hl=ja

必要項目を入力し利用規約を読み、“同意して、アカウントを作成します”をクリックすれば、

アカウント取得完了です。




登録したメールアドレスに、Googleから“ようこそメール”が届きます。

メールのリンクをクリックし、アカウントの開設やメールアドレスの確認をします。

Googleアカウント取得が完了しましたら、次にGoogle Analyticsアカウント取得方法に移ります。

●Google Analyticsのアカウント取得方法

 Google Analyticsのアカウント取得ページ GoogleAnalyticsログインページはこちら

Google Analytics ログインページ画面から、“Google Analyticsにアクセス”をクリックし、

取得したGoogleアカウントで”Google Analyticsにログインすることができます。

“Google Analyticsに申し込む”ボタンをクリックします。


“Analytics:新しいアカウントの作成”で下記の項目について情報入力を行います。

・ウェブサイトのURL (解析するサイトのドメインを入力してください。)

・アカウント名 (解析する上で分かりやすい任意の名前を入力してください。)

・タイムゾーンの国または地域 (日本に在住の場合でしたら「日本」で登録してください。)

・タイムゾーン (デフォルトの状態)


必要項目詳細の拡大図になりますので参照してみてください。

“Analytics:新しいアカウントの作成” 連絡先の入力必要項目を入力し、“次へ”をクリックします。




“Analytics:新しいアカウントの作成” ユーザー契約に同意規約をよく読み、

“はい、上の利用規約に同意します”をチェック、“アカウントの新規作成”をクリックします。

アカウントの新規作成をクリックすると、トラッキングコードが表示されます。

このトラッキングコードを各ページのコンテンツに貼り付けていくわけですが、この続きは次回ご説明します。 See ya;)

ユーザビリティ・デザインとは?-検索エンジンとユーザビリティの関係-

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。アクセス解析チームの大山です。

 ユーザビリティに配慮したWebサイトとはどのようなサイトでしょうか。

 ・ナローバンドユーザ等に使い勝手の良いテキスト主体のサイト?

 ・Flashをはじめとする音声/動画などのリッチコンテンツは使っちゃいけない?

そんなことはありません。

テキスト主体では逆に分かりづらいことだってあるし、どんな最新技術であっても使い方しだいではユーザビリティを高める効果を発揮するのです。

 ユーザビリティの最終目的は、単純に使いやすくするためのものではなく、信頼感や安心感をもたせて顧客満足を上げるといったサービスの向上のお手伝い をすることです。

SEOがユーザをサイトに招くものにあることに対し、ユーザビリティは招かれたユーザをもてなすためにあるのです。

どんなページからでもユーザをもてなそう

 ユーザビリティを考えたとき、まずトップページから考えていませんか?

もちろんトップページはサイトの顔であり、多くのユーザは迷ったらトップページに戻るでしょうし、とても重要なページです。しかし、検索キーワードを入力した後、検索結果に出るページは必ずしもトップページではなくなりつつあります。今やサイトのすべてのページがサイトへの入口ページであるのです。

 ユーザがどのページを訪問しても、ユーザの望む情報にたどり着け、ユーザの目的を達成できる道筋が用意されているページにする。そのためには、何のサイトで、何ができて、自分が今どこにいるのか、目的のページに行くにはどうすればいいのかを、ユーザが把握しやすいようなデザインが求められています。

んなページからでもユーザをもてなすことが必要です!

SEOとユーザビリティの関係

 SEOができるのは検索結果の上位に特定のページを表示させることです。集客はサイトにとって大事なものであることはアクセス解析の活用教室にてお分かりいただけるかと思います。しかし、たとえSEO対策が成功してユーザがサイトに訪れたとしても、ユーザビリティが低ければせっかくのユーザも引き返してしまいます。ユーザビリティはページをわかりやすく見せ、他のコンテンツへの移動手段があり、なによりもWebサイトそのものに対する興味や信頼感を高めるために役立つのです。

 SEO対策だけに力を入れたところで、訪問者数のアップの効果は見込めるものの、最終目的である売上や登録者数アップに直接つながるものではありません。サイトに訪れたユーザが優良顧客(リピーター)になること、利用ユーザの満足度をアップさせることが最終目的までに必要な段階であることは言うまでもありません。サイトを成長させるためにはSEOとユーザビリティと合わせて考えることが大切なのです。

 また、好感のもてるサイトに成長すれば、ユーザが個人のブログに自発的にリンクが張ってくれたり、口コミサイトで紹介され、自然と被リンクが高まる可能性もあります。SEO対策効果が高いと考えられる被リンクの増加で、ユーザの支持と検索エンジンからの支持により、レベルの高いサイトになるかもしれません。

 ユーザ思いのサイトを作ることは、サイト作りにおいて最も基本にあることをお分かりいただけたでしょうか。

 次回、実際にどうすればユーザビリティが高まるのかを考えていきます。

 週末スノボに行ったら親指を突き指してしまいました。

固定しているので身動きとれず。

「無くして気づく○○の大切さ」という感じで、私生活にて親指の大切さに気づかされる毎日です。

親指カムバック。

ではまた。

————————————————-

その他アクセス解析担当の記事

・アクセス解析の必要性については、アクセス解析の重要性を参照してください。 

・アクセス解析用語については、アクセス解析でよく使うIT用語 その1 を参照してください。

・無料かつ高性能のアクセス解析ツール「Google Analytics」のご紹介記事はこちら。

・アクセス解析教室「優良顧客で売上増加!キーワード選びから考えるアクセス解析活用術 第1回」はこちら。

優良顧客で売上増加!キーワード選びから考えるアクセス解析活用術 第1回

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。KBMJアクセス解析チームの長谷です。

WEB担当者としては、自社サイトに興味を持ちそうなユーザーをたくさん呼び込み、その後のビジネスに繋げていきたいものです。ですが優良顧客を獲得するのは難しく、施策の費用対効果も上がらず、売上げアップはどんな時でも悩みの種であるといえます。そこで・・・

今回は優良顧客を効率よく集客するためのアクセス解析活用術について紹介していきます。(全4回)

■売上げが伸び悩むWEB担当者のよくある運用方法

 WEBサイトでの収益を考えていく上で必要なことは何でしょうか?コンテンツの更新やシステム面での改修、業務の管理、プロモーション活動など、運営・維持のためにやるべきことはたくさんあり、管理するのは非常に困難です。その中でもつい後回しになるのがアクセス解析対策になります。

 一見コンテンツも豊富でブランドイメージ、デザインもしっかりしているサイトのWEB担当者に話を聞いてみると、「実はアクセス解析対策は手つかずで活用できていない・・・」というケースがいくつもあり、そういう担当者ほど売上に対する悩みが深刻な状態にあります。忘れがちなアクセス解析対策ですが、収益を考える上で非常に重要なファクターになり、アクセス解析対策を行うことが必須条件となります。

忘れがちなアクセス解析対策

■費用対効果を考えたサイト集客の重要性とは 

 通常、通販サイトに訪れた訪問者の内、商品をカートに導入し実際に商品を購入するユーザーは、全体の訪問者の内、平均して0.5%~3.0%程度のコンバージョンレートになります。勿論、取り扱っているサービスの業態や季節で若干変動することはありますが、全体の訪問者の10%が商品を購入しているという様なデータは非常に稀です。(特殊なプロモーション活動で限定的にコンバージョンレートが上昇することはあります。)

 ここで重要なことは、現在のコンバージョンレートを増加させること(サイト送客)と、サイトに訪れる訪問者数を伸ばすこと(サイト集客)、どちらがサイトの売上を伸ばす上で費用対効果が高いのか、という点です。

アクセス解析のデータから考える集客と送客施策

 例えば、月間の訪問者数が10000人でCVR(コンバージョンレート)が1.0%の場合、商品購入者数は100人になります。 この場合、購入者数を伸ばすためにCVRをさらに伸ばす施策を打っても、現状の購入者数は3倍(購入者数300人)のレベルが限界です。

 一方、サイトに訪問するユーザーを増やしていく上での限界は程遠く、SEO対策や検索連動型広告といった施策により、伸ばす余地は数多く残されています(訪問者数が100000人であれば、購入者数は1000人というように制限がない)。

 勿論、サイト内の改善も売上げ・利益を伸ばす重要な方法の1つですが、効率のよい手順で素早く売上を伸ばすためにはサイト集客の強化が次に選ぶ施策となります。

■SEMの考えに基づいた優良顧客とは

 それでは、サイトの集客を行う上での注意点はどのようなことでしょうか。 まずは低コストでユーザーを引き込むという点で「検索エンジンからの誘導=SEO」に注目すべきですが、あくまでSEOは検索結果の順位を上げるものであり、必ずしも売り上げが伸びることには直結しません。そのため、SEOではなく、ターゲット層(優良顧客)を狙ったキーワード選びを次の施策のステップとして考えることにします。

 この検索エンジンの順位だけでなくその後のサイト成約率も考え、全体での最適化を行う考えをSEMと呼びます。(※「検索連動型広告+SEO=SEM」は間違った考えですので注意してください。)

優良顧客集客の意味

 ターゲットユーザーの検索キーワードが想定キーワードと違う場合や、想定キーワードだとしても、その来訪ユーザーが商品を購入していないというデータがよ く見られます。一方、あまり意識していなかったキーワードでの商品購入率が高いことも多く、アクセス解析をすることで意外なデータが集まります。

 例えば、集客力のあるキーワードでも、入り口ページでの直帰率が70%で、多くのユーザーを入り口ページで離脱させているといったケースがよくあります。そういった「悪いワード」ではなく、直帰率が30%でサイト内に送客し購入につなげている「良いワード」からの集客、すなわち優良顧客の獲得を増やす必要があります。

 これらデータから、「悪いワード」・「良いワード」のキーワード選定を行い、優良顧客を獲得するサイト構造に作り変えることが、集客における効率的な売上げ増加に繋がります。 単純にサイト集客数を増やすのではなく、「アクセス解析データから適切なキーワードを選び、利益につなげる」といった、SEMの考えが優良顧客獲得の鍵になるわけです。

 ■終わりに

 今回は優良顧客を獲得することが売上げ増加の近道であり、そのためにはアクセス解析とSEMの考えが必要であることを説明しましたが、第2回目の記事では「実際にアクセス解析を利用したキーワード選びと優良顧客獲得の分析手法」について詳しく説明していきます。

 Dorubyではアクセス解析の情報も随時更新していますので、もしマーケティング要素が足りない方はこちらで補給してください。それでは。

————————————————-

【第2回】優良顧客で売上げ増加!キーワード選びから考えるアクセス解析活用術

■無料かつ高性能のアクセス解析ツール「Google Analytics」について

GoogleAnalyticsトラッキングコードの設置方法

Googleアカウント・Google Analyticsアカウントの取得方法

Google Analyticsで複数ドメインのサイトを計測する方法

Google Analyticsで同じURLのページの遷移のデータを取得する方法

■その他アクセス解析担当の記事

・アクセス解析の必要性については、アクセス解析の重要性を参照してください。 

・アクセス解析用語については、アクセス解析でよく使うIT用語 その1 を参照してください。

・無料かつ高性能のアクセス解析ツール「Google Analytics」のご紹介記事はこちら。

カスタマーへの活用促進とヘルススコア

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ザ・モデルという本にカスタマーサクセスの少し取り上げられていたので一部のまとめる

カスタマーサクセスとは

カスタマーサクセスとはお客様との契約から運用サポートまでの一連のプロセスの総称。
営業担当や導入担当、カスタマーサポート担当などの様々なやりとりに関わる。
特にカスタマーサクセス担当者は、導入直後の活用促進やヘルススコアのUPに注力し、
契約更新の安定化とアップセル/クロスセルを行う。

活用促進

サービス活用のロードマップを定義し、
社内状況やサービス規模から次に行う施作の提案を行うこと。

活用ロードマップ例

  • レベル1 キャンペーンを行い、データをレポート化すること。
  • レベル2 過去のレポートの結果から次に行うキャンペーンや施作の意思決定を行うこと。
  • レベル3 複数の部門や組織と連携し、複数年度に渡る目標達成の計画に使用すること。
  • レベル4 グローバル展開に使用すること。

ヘルススコア

お客様のサービス活用度や社内状況から、更新リスクの可能性を数値化すること。

ヘルススコアの要素の例

  • 契約金額
  • 年少
  • 成長企業
  • 活用拡大余地
  • 活用度
  • 問い合わせ回数
  • 担当者数
  • 導入時の目的の達成度
  • 事例紹介可否
  • セミナー参加回数 etc..

参考文献
THE MODEL(MarkeZine BOOKS) マーケティング・インサイドセールス・営業・カスタマーサクセスの共業プロセス  (著) 福田 康隆

アクセス解析の重要性 時代はAIDMAからAISCEASへ

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

はじめまして。

アクセス解析チーム、コンサルタント見習いの大山です。

ユーザビリティ・アクセシビリティに強いコンサルタントを目指しています。

どうぞよろしくお願いします。

■「【アクセス解析×ユーザビリティ】おこしやす!アクセス解析」ってどんなブログ?

本ブログでは、「アクセス解析」の話題を

「ユーザビリティ・アクセシビリティを高める」というテーマに視点を置き、

解析結果から問題点を洗い出し、とるべき施策・その効果までを書かせていただきます。

具体的には、

・そもそもアクセス解析とは?

・分析したけど、データの活かし方がわからない・・・

・Webサイトに対するユーザの行動心理って?

・ゴールまで到達しないのはなぜ?

・サイトの回遊を促したい・・・

などなど

自身の勉強も兼ねて、少しでも解析のお役に立てるものを掲載していきたいと思います。

まだまだ見習いですので、至らない部分は多々あると思いますが、

温かい目で見守っていただければ幸いです。。。

■そもそもアクセス解析はどうして必要なの?

Webサイトを運営するに当たって欠かせないアクセス解析。

いざ、アクセス解析ツールを導入したははいいものの、

ツールはデータの収集にすぎないので、次にとるべきアクションを教えてはくれません。

使い方によっては無意味なものになることだってあります。

そもそもアクセス解析はなぜ、近年において重要視されているのでしょうか?

アクセス解析が重要視される背景として、

消費者行動の移り変わりが理由の一つとして挙げられます。

・AIDMAの法則からAISCEASの法則へ

「AIDMA(アイドマ)の法則」をご存知ですか?

学校の授業やテレビ等で一度は耳にしたことがあるかと思います。

AIDMAとは・・・

1920年代にアメリカ合衆国の販売・広告の実務書の著作者であった

サミュエル・ローランド・ホールが著作中で示した広告宣伝に対する

消費者の心理のプロセスを示した略語です。

AIDMAの法則では、消費者がある商品を知って購入に至るまでに

次のような段階があるとされる。

  1. Attention (注意)
  2. Interest (関心)
  3. Desire (欲求)
  4. Memory (記憶)
  5. Action (行動)

(Wikipediaより)

ほとんどの消費者プロセスはAIDMAによって説明付くものだと思います。

しかし、近年ではインターネットを通して物を購入することが多くなり、

消費者の行動場所が現実からパソコンの中へと移り変わりつつあります。

商品の価格比較や口コミなど、実店舗ではなかなか得られない情報を

ボタン一つで簡単に得られることが、理由の一つとして挙げられます。

そんな新しい消費者行動モデルとして、

近年、「AISCEAS(アイシーズ)の法則」((有)アンヴィコミニケーションズの商標)が提唱されています。

AISCEASとは次のような消費者行動を指します。

  1. Attention (注意)
  2. Interest (関心)
  3. Search (検索)
  4. Compare (比較)
  5. Examination (検討)
  6. Action (行動)
  7. Share (共有)

行動は細分化され、ユーザがインターネットを使い慣れてきたことが伺えます。

・AISCEASの法則からわかること

近年の細分化された消費者行動によりわかること、

それはユーザの行動履歴がインターネット上に増え続けていることです。

つまり、自身のWebサイトへ訪れたユーザの行動履歴を知ることで

より戦略的なサイト作りに欠かせない情報を得られるのです。

・自身のサイトへどのようなキーワードでSearch (検索)したのか

・Compare (比較)やExamination (検討)の対象となるページ毎の

 閲覧時間やPV数、ゴールページまでにたどり着く確立、等

・ユーザが自身のサイト内でとるAction (行動)

を、アクセス解析では見ることができます。

アクセス解析結果には、Webサイトに対するニーズやユーザの動向を知るヒントが多く存在します。

Webサイトの最適化、最大化は多くのWeb担当者の目標ではないでしょうか。

近年、激化するインターネット時代において、

Webサイトの目標を達成のための施策を打つには、

アクセス解析はなくてはならないものであると考えられます。

今回は、 アクセス解析が必要な理由を簡単に書かせいていただきましたが、

次回以降、データの収集後に次にとるべきアクションの具体策などを掲載していこうと思います。

しかし、予定は未定ですのであしからず・・・

では、また。

postgresでorder byに複数のカラムを使うとdesc句を使った場合、indexを使用しない件

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Postgresqlに限らず、インデックスを利用する/利用しないは、

DBを使ったシステムの速度を決める重要な要件だったりします。

今回は、業務中に突き当たった複数のカラムを指定していた場合

DESCやASCを使っていた場合、indexを利用しなかったpostgresの

対応方法について説明します。

なお、突き当たったバージョンは8.1.9でした。

対象はたいした事は無いsql文なのですが、こういったsql文です。

SELECT

entries.id,entries.title, entries.body, entries.entry_type, entries.created_at, entries.updated_at

FROM

entries

ORDER BY

entry_type,updated_at DESC

indexは、 entry_type, updated_atの複合indexを張っています。

ですがコレがindexを利用しない。

DESC句を外すと利用するんですけどね。

というわけで幾つか検索した所、以下の2つの情報を参照して解決しました。

http://itpro.nikkeibp.co.jp/article/COLUMN/20051117/224817/?P=5

http://d.hatena.ne.jp/poch-7003/20070913/1189691482

今回はtimestamp型ですので、postgresから

rails_db=# ¥df *cmp

とした結果の

Schema | Name | Result data type | Argument data types

————+———————-+——————+———————————————————-

pg_catalog | bitcmp | integer | bit, bit

pg_catalog | bpcharcmp | integer | character, character

pg_catalog | btabstimecmp | integer | abstime, abstime

pg_catalog | btarraycmp | integer | anyarray, anyarray

pg_catalog | btboolcmp | integer | boolean, boolean

pg_catalog | btbpchar_pattern_cmp | integer | character, character

pg_catalog | btcharcmp | integer | “char”, “char”

pg_catalog | btfloat48cmp | integer | real, double precision

pg_catalog | btfloat4cmp | integer | real, real

pg_catalog | btfloat84cmp | integer | double precision, real

pg_catalog | btfloat8cmp | integer | double precision, double precision

pg_catalog | btint24cmp | integer | smallint, integer

pg_catalog | btint28cmp | integer | smallint, bigint

pg_catalog | btint2cmp | integer | smallint, smallint

pg_catalog | btint42cmp | integer | integer, smallint

pg_catalog | btint48cmp | integer | integer, bigint

pg_catalog | btint4cmp | integer | integer, integer

pg_catalog | btint82cmp | integer | bigint, smallint

pg_catalog | btint84cmp | integer | bigint, integer

pg_catalog | btint8cmp | integer | bigint, bigint

pg_catalog | btname_pattern_cmp | integer | name, name

pg_catalog | btnamecmp | integer | name, name

pg_catalog | btoidcmp | integer | oid, oid

pg_catalog | btoidvectorcmp | integer | oidvector, oidvector

pg_catalog | btreltimecmp | integer | reltime, reltime

pg_catalog | bttext_pattern_cmp | integer | text, text

pg_catalog | bttextcmp | integer | text, text

pg_catalog | bttintervalcmp | integer | tinterval, tinterval

pg_catalog | byteacmp | integer | bytea, bytea

pg_catalog | cash_cmp | integer | money, money

pg_catalog | date_cmp | integer | date, date

pg_catalog | interval_cmp | integer | interval, interval

pg_catalog | macaddr_cmp | integer | macaddr, macaddr

pg_catalog | network_cmp | integer | inet, inet

pg_catalog | numeric_cmp | integer | numeric, numeric

pg_catalog | time_cmp | integer | time without time zone, time without time zone

pg_catalog | timestamp_cmp | integer | timestamp without time zone, timestamp without time zone

pg_catalog | timestamptz_cmp | integer | timestamp with time zone, timestamp with time zone

pg_catalog | timetz_cmp | integer | time with time zone, time with time zone

pg_catalog | varbitcmp | integer | bit varying, bit varying

(40 rows)

Argument data typesに、型が書いてあるので、使いたい型を選びます。

今回は、updated_atなので、timestamp型となり、timestamp_cmpを利用しました。

で、その逆の関数を作成します。

CREATE OR REPLACE FUNCTION timestamp_cmp_rev(TIMESTAMP, TIMESTAMP) RETURNS INTEGER AS $$ SELECT timestamp_cmp($2,$1);$$ LANGUAGE sql

その後、参考URLに書いてある通り作成しました。

CREATE OPERATOR CLASS timestamp_desc_ops FOR TYPE TIMESTAMP USING BTREE AS OPERATOR 1 >, OPERATOR 2 >=, OPERATOR 3 =, OPERATOR 4 <=, OPERATOR 5 <,FUNCTION 1 timestamp_cmp(timestamp, timestamp)

で、indexを作成しました。

CREATE INDEX index_entries_on_entry_type_and_updated_at ON

entries(entry_type, updated_at timestamp_desc_ops)

これで検索するとインデックスを使用してくれました。

もし「もっと良いやり方あるよ」と言う方いらっしゃいましたら是非教えて下さい。

なお、8.3からdescで指定できるようです...苦労はなんだったんだろう。

Google Analyticsとは?

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

はじめまして。

KBMJいちのビギナー、アクセス解析チーム-アシスタント、ミラノです。
どうぞよろしくお願いいたします。


本日は、皆さんすでにご存じかとは思いますが、Google Analyticsについて簡単に説明させていただきます。■Google Analyticsとは?

Googleが提供する高性能な無料アクセス解析ツールです。
Googleアカウントを取得し、Webサイトの各ページに「トラッキングコード」と呼ばれるJavaScriptのコードを挿入すれば、誰でも使用が可能です。
Urchinという企業向けの高機能なアクセス解析ツールをベースとしており、
Urchinのほぼすべての機能が無料で利用できる画期的なアクセス解析ツールです。

■Google Analyticsの特徴

・グラフを多用した見やすい画面
・豊富なデータ量
・操作が(慣れれば)簡単
・充実した分析機能(ページ遷移の分析・コンバージョン測定)
・広告の効果測定
・エクスポートが簡単

*Google Analytics サンプルイメージ
Google Analyticsの見やすいグラフ

*Google Analyticsのページはこちら
 http://www.google.com/analytics/ja-JP/

■Google Analyticsでわかること

・アクセスが集中するのは何曜日の何時頃なのか?
・訪問者は一見さんなのか、常連さんなのか?
・ユーザーがたどったサイト内経路は?
・ユーザーが最後に見たページはどれか?
・人気のあるページは?
・どんな検索キーワードでページにたどり着いたのか?

Google Analyticsで上記を把握し、より良いサイト環境作りのヒントを得ることが出来ます。

最終的には、
Increase conversions, and make more money on the web!(Google Analytics Helpより)
Google Analytics使って目標を達成して、WEBでもっと儲けよう!

今後はGoogle Analyticsの設定・活用方法などを掲載していきたいと思います。

高性能で無料でCOOLなGoogle Analyticsを一緒にCheck it outしていきましょう;)

IE6でposition:absoluteしたボックスが消えるバグ

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。maiです。
IE7の登場により徐々にシェアを減らしつつあるIE6ですが、
そうはいってもまだまだ健在です。
そしてそのバグもまだまだ健在です…。

今回はpositionの値をabsoluteにしたボックスが、
なぜかIE6で見えなくなってしまうバグについてその対処法をご紹介です。

このバグ「absolute position disappearing bug」というバグらしいのですが、
代表的なものに比べると、あまり知られていないことからわかるように、
ものすごく限定状況で起きるバグです。

今回私が遭遇したのはこのケース

1:position:absoluteしたdiv
2:float:leftしたdiv
3:float:rightしたdiv

positionの値がabsoluteで、なおかつすぐ次に続く要素がfloatしていること
が私の場合の発生原因だったようです。
この場合の回避方法は…

1:position:absoluteしたdiv
2:空っぽのdiv
3:float:leftしたdiv
4:float:rightしたdiv

これです。 スマートじゃないですね。わかってます。
でもどうやらこのバグを回避するにはスマートじゃないやり方しかないようです。
一番スマートなのは、このバグが発生しないようにデザインを組むこと…ですね。

なお、上記を含めたこのバグの発生条件と回避方法については
以下のページがわかりやすくまとまってます。
Win/IEで絶対配置(position: absolute)のボックスが消えるバグの検証ページjmblog.jp

ActionScript 3 でマウスを追いかけるアニメーションを作成する

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。

KBMJの佐藤です。

今回は ActionScript 3 を使って、マウスを追いかけるアニメーションを作成してみます。

Arrow.as

package{
    import flash.display.*;

    // 矢印クラス
    public class Arrow extends Sprite {
        public function Arrow(){
            init();
        }

        // 矢印を描画する
        public function init():void{
            // 枠のスタイルを設定
            graphics.lineStyle(2,0,1);
            // 塗りつぶしの色を設定
            graphics.beginFill(0xff0000);

            graphics.moveTo(-50,-25);
            graphics.lineTo(0,-25);
            graphics.lineTo(0,-50);
            graphics.lineTo(50,0);
            graphics.lineTo(0,50);
            graphics.lineTo(0,25);
            graphics.lineTo(-50,25);
            graphics.lineTo(-50,-25);
            graphics.endFill();
        }
    }
}

ChaseCursor.as

package{
    import flash.events.*;
    import flash.display.*;

    public class ChaseCursor extends Sprite {
        // スピード
        private var s:Number = 10;
        // 矢印オブジェクト
        private var a:Arrow;

        public function ChaseCursor(){
            init();
        }

        private function init():void{
            // フレーム更新イベントを設定
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            // 矢印オブジェクトを生成
            a = new Arrow();
            // 矢印オブジェクトと画面に追加
            addChild(a);
        }

        // フレームイベント
        private function onEnterFrame(e:Event):void{
            // 矢印の座標とマウスカーソルの座標との差分を算出
            var dx:Number = mouseX - a.x, dy:Number = mouseY - a.y;
            // 矢印の座標とマウスカーソルの座標との角度を算出
            var d:Number = Math.atan2(dy, dx);
            // 矢印オブジェクトの速度を算出
            var vx:Number = Math.cos(d) * s, vy:Number = Math.sin(d) * s;
            // 速度に基づいて矢印の位置を更新
            a.x += vx, a.y += vy;
            // 矢印オブジェクトの角度を設定
            a.rotation = d / Math.PI * 180.0;
        }
    }
}

ChaseCursor-app.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/1.5">
  <id>ChaseCursor</id>
  <version>0.1</version>
  <filename>ChaseCursor</filename>
  <initialwindow>
    <content>ChaseCursor.swf</content>
    <visible>true</visible>
    <systemchrome>standard</systemchrome>
    <transparent>false</transparent>
  </initialwindow>
</application>

コンパイルする

% amxmlc ChaseCursor.as

実行する

% adl ChaseCursor-app.xml

実行結果

赤い矢印がマウスカーソルを追いかけます。

http://farm4.static.flickr.com/3088/3200192579_6c1c90cd0d.jpg

さいごに

ActionScript 3 でアニメーションを作成する時は、位置と速度を変数に保持すると管理しやすくなります。

皆さんも是非お試し下さい。

個人ブログ 拡張現実ライフ

RMagick を使って輝きのあるバナー画像を作成する

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。

KBMJの佐藤です。

今回は RMagick を使って、Web2.0 っぽいバナー画像を作成してみます。

ImageMagick とは

ImageMagick とは、画像ファイルを加工するための機能を提供してくれるプログラムです。

RMagick とは

RMagick とは、ImageMagick を ruby で扱えるようにしたものです。

ImageMagick のインストール(MacOSX で MacPorts を使ってインストールする場合)

% sudo port install ImageMagick

RMagick のインストール

% sudo gem install rmagick

コードを書く

require 'RMagick'
include Magick

WIDTH = 650
HEIGHT = 40

# 画像リストを作成
stripes = ImageList.new

# グラデーションを作成
top_grad = GradientFill.new(0, 0, WIDTH, 0, "#dddddd", "#888888")
# グラデーション画像を作成
image1 = Image.new(WIDTH, HEIGHT, top_grad)
# グラデーション画像を保存
image1.write('image1.png')
# グラデーション画像をリストに追加
stripes << image1


# グラデーションを作成
bottom_grad = GradientFill.new(0, 0, WIDTH, 0, "#757575", "#555555")
# グラデーション画像を作成
image2 = Image.new(WIDTH, HEIGHT, bottom_grad)
# グラデーション画像を保存
image2.write('image2.png')
# グラデーション画像をリストに追加
stripes << image2

# 画像を上下方向に連結
combined_grad = stripes.append(true)
# 連結した画像を保存
combined_grad.write('image3.png')

# 連結した画像を複製
image4 = combined_grad.clone
# 文字列を描画
gc = Draw.new
gc.font = '/Library/Fonts/ヒラギノ明朝 Pro W3.otf'
gc.fill = 'white'
gc.stroke = 'none'
gc.pointsize = 60
gc.annotate(image4, 0, 0, 10, 60, "Do Ruby!")
# 文字列を描画した画像を保存
image4.write('image4.png')

処理を実行する

% ruby web20.rb

実行結果 image1.png の内容

http://farm4.static.flickr.com/3297/3197802303_3f7d0f1bca.jpg

実行結果 image2.png の内容

http://farm4.static.flickr.com/3264/3197802345_c3a5d4e67c.jpg

実行結果 image3.png の内容

http://farm4.static.flickr.com/3406/3198648982_cd7b2975a6.jpg

実行結果 image4.png の内容

http://farm4.static.flickr.com/3268/3197802383_fbae00a2a9.jpg

さいごに

RMagick を使うと、Photoshop で作成したような画像も Ruby スクリプトを記述することによって生成することができます。

皆さんも是非お試し下さい。

個人ブログ 拡張現実ライフ

RMagick を使って写真の特定色域を別の色で塗りつぶす

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。

KBMJの佐藤です。

今回は RMagick を使って、写真の特定色域を別の色で塗りつぶしてみます。

ImageMagick とは

ImageMagick とは、画像ファイルを加工するための機能を提供してくれるプログラムです。

RMagick とは

RMagick とは、ImageMagick を ruby で扱えるようにしたものです。

ImageMagick のインストール

% sudo port install ImageMagick

RMagick のインストール

% sudo gem install rmagick

コードを書く

require "rubygems"
require "RMagick"

include Magick

img = ImageList.new("kbmj-src.jpg")

compare = Magick::Pixel.new(142*256,72*256,2*256) # この色と近い領域を探す
replace = Magick::Pixel.new(255*256,0,0) # この色で塗りつぶす
for y in 0...img.rows
  for x in 0...img.columns
    src = img.pixel_color(x, y) # 元画像のピクセルを取得

    dr = src.red - compare.red # 赤要素の差
    dg = src.green - compare.green # 緑要素の差
    db = src.blue - compare.blue # 青要素の差

    # RGB空間上において2つの色が近ければ置換する
    img.pixel_color(x, y, replace) if dr*dr + dg*dg + db*db < (30*256*30*256)*3
  end
end

img.write("kbmj-out.jpg")

処理対象の画像を用意する

今回は弊社のパンフレットをiPhoneのカメラで撮影したものを用意しました。

http://farm4.static.flickr.com/3416/3195992288_466c34ab2e.jpg

処理を実行する

% ruby rmagick.rb

実行結果

オレンジの領域が赤で塗りつぶされています。

http://farm4.static.flickr.com/3106/3195176725_8ab26f966f.jpg

さいごに

RMagick を使うと Ruby で画像処理ロジックを記述できますので、irb で各種実験を行うなど、手軽に画像処理を行うことが可能です。

皆さんも是非お試し下さい。

個人ブログ 拡張現実ライフ

最近人気な記事