ホーム ブログ ページ 59

ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 5

0

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

このキャラクターにこれだけの価値があったのだろうか……? いや、ある、無ければ困る! だって、だって、だって、これだけのお金を掛けたんだもん! 高級なYAKINIKU以上の価値があるんだもん! もん! もん……。タン塩……。焼けて少し丸まった歯ごたえ豊かなタン塩にレモンをキュッと絞って……。

前回までのあらすじ

前回

 ボックスガチャのサーバーサイドのコードの実装が完了しました。
 残るは、テストコードの作成、マスタのインポート処理、クライアントとの繋ぎこみくらいです。

テストコードの実装をしよう

さーばーえんじにあ「仕様書からだと

・ボックスガチャは通常ガチャと同様、1連と10連で引ける
・ボックスガチャで引けるものは通常ガチャと同等
・10連を選択した時にボックスの中身が9個以下だった場合、消費される対象はその中身分のみとなり、全てを自動で排出する
・リセットする度に上限までボックスの中身は変わる
・リセットは自由に可能。そのステージのボックスガチャを1回も引かなくともリセットが出来る

 こんな感じのことが書かれていて、これに対応したテストコードと、
 まあ、後は普通のガチャと同じように、消費する物がそもそも足りなかった場合とかにエラーが起こることを書いておけばいいか。
 後、今回はGachaBoxContentManagerっていうボックスガチャの状態を一括管理するクラス作ったからそこの点でもテストコード作っておくか」

さーばーえんじにあ「必要なテストは

・ボックスガチャを1回引いた時、そして10回引いた時に
 ・ボックスの中身が正常に引かれている事
 ・ユーザーのキャラクターが増えている事
 ・ユーザーの消費対象物が減っている事
 ・ログが記録される事
・ボックスの中身が9個以下だった場合に10回引くを選択した場合に
 ・中身が空になり、ユーザーの消費対象もその分だけ減っている事
・リセットに対して
 ・正常にリセットが出来て
 ・次のステージのボックスがフルの状態である事
 ・リセットは指定回数より多くやろうとしたらエラー
......

 よし! 必要なテスト項目は20個オーバー!
 そしてそのテストをする為には

・ダミーキャラクターマスタ複数作って
 ・それに付随するキャラクターのパラメータマスタとか作って
・ダミーガチャマスタ作って
 ・ダミーボックスガチャ中身マスタ作って
・ダミーユーザー作る為に
 ・ユーザーランクマスタとかそういうのも必要で
・それ作ってからダミーユーザー作って
 ・ダミーユーザーに消費対象のブツを十分に渡した上で
・プロセスのコンストラクタを呼び出してプロセスを実行! 
 ・実行された事に対して想定される結果を書く!

 …………つ、疲れる。
 でも、書いとかないと、リファクタリングとか気軽に出来ない……。
 頑張ろう……」

マスタインポートの処理を書こう

ぷらんな「仮マスタ出来たよ」
さーばーえんじにあ「了解ですー。こっちもテストコード作成がキリ良いところなので、そっち先に対応しますー。
で、不正なマスタデータが入らないようにする為には、どういう事を制限を掛けておけば良いかなってのは……、

・通常ガチャ指定のガチャマスタは、ボックスガチャ内容マスタに子データを持っていてはならない
・ボックスガチャ指定のガチャマスタは、ガチャ内容マスタに子データを持っていてはならない
・ボックスガチャ指定のガチャマスタは、リセット制限回数が1以上を指定していなくてはいけない
・ボックスガチャ内容マスタにガチャコード単位で排出キャラクターに重複があってはならない
・ボックスガチャ内容マスタの排出キャラクター量は1以上でなければいけない
・ボックスガチャ内容マスタの内容のステージ数は、ボックスガチャ指定のガチャマスタのリセット制限回数と一致していなければならない

 ……えーっと、ざっと洗いだすとこの位かな……。他にプランナー目線とかからで抜けている事無いかな」
ぷらんな「あ、単純な事抜けてるね」
さーばーえんじにあ「えっ」
ぷらんな「ボックスガチャの排出キャラクターがマスタに実存するかの確認してないじゃん」
さーばーえんじにあ「あっ」

1時間後

さーばーえんじにあ「条件満たした上で仮マスタ入りましたー」
ぷらんな「やったぜ」


小ネタ:

・通常ガチャ指定のガチャマスタは、ボックスガチャ内容マスタに子データを持っていてはならない
・ボックスガチャ指定のガチャマスタは、ガチャ内容マスタに子データを持っていてはならない

こういう二つの条件は整理してみたりすると一つの条件に纏められます。

ガチャマスタ |内容が存在しているマスタ|正常か異常
通常ガチャ  |通常ガチャ       |正常
通常ガチャ  |ボックスガチャ     |異常
ボックスガチャ|通常ガチャ       |異常
ボックスガチャ|ボックスガチャ     |正常

即ち、

・ガチャマスタと対応する、内容が存在しているマスタが通常とボックスにどちらか片方のみにあり、そして一致している

と同等になります。
後、排他的論理和とかを使ったりしても簡潔に纏められる場合があります。
上記で使うならば、

・(ガチャマスタが通常である xor 内容が存在しているマスタが通常である)ならば異常である

となります。
まあ、簡潔に纏められても分かりづらい場合は、分かりやすさを優先して多少冗長になってもそちらの方が良いです(そもそも排他的論理和自体が分かりづらいかもしれない)。

RailsでOracle~ データベース初期化タスクをつくろう!編

0

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

TrinityTです。

今回はRails&Oracleに関する第二弾として、DBの初期化を行う独自タスクについて説明します。

普段の開発では、ダミーデータの削除やユニットテスト前の初期化など、テーブル構成を初期化したい場合にdb:migrate:resetタスクを活用して行っています。

しかし、OracleはMySQLやPostgresqlとテーブル管理の単位、ユーザなどの概念が異なるため、データベースの削除を行おうとするdb:migrate:resetタスクはエラーとなってしまいます。

本問題を解決するためのOracle用独自タスクを作ってみました。

以下の内容でファイルを${RAILS_ROOT}/lib/tasks に作成してください。

db_ora.rake

namespace :db_ora do
  namespace :migrate do
    desc "Reset Database (For Oracle)"
    task "reset" => ["truncate", "db:migrate"]

    desc "truncate all objects (For Oracle)"
    task "truncate" do
      # テーブル削除
      user_tables = UserTable.find(:all)
      user_tables.each do |table|
        ActiveRecord::Base.connection.execute("DROP TABLE #{table.table_name}")
      end
      # ビュー削除
      user_views = UserView.find(:all)
      user_views.each do |view|
        ActiveRecord::Base.connection.execute("DROP View #{view.view_name}")
      end
      # シーケンス削除
      user_sequences = UserSequence.find(:all)
      user_sequences.each do |sequence|
        ActiveRecord::Base.connection.execute("DROP SEQUENCE #{sequence.sequence_name}")
      end
    end

    # ユーザが持つテーブル一覧取得用Model
    class UserTable < ActiveRecord::Base
    end
    # ユーザが持つシーケンス一覧取得用Model
    class UserSequence < ActiveRecord::Base
    end
    # ユーザが持つビュー一覧取得用Model
    class UserView < ActiveRecord::Base
    end

    end
  end
end

コレで以下のコマンドをRAILS_ROOTで行うと、DB初期化とmigrationが行われます。

$ rake db_ora:migrate:reset

db_ora:migrate:resetタスクは作成した独自タスク(truncate)と、db:migrateタスクを組み合わせて行っています。

本タスクの流れは以下の通りです。

(1)truncateタスクを実行

(2)Oracleのシステムテーブル「user_tables」に格納されているテーブル名一覧を取得

(3)テーブルに対してDROP文を実行

(4)同様の処理をシーケンス、ビューに対して実行

(5)db:migrateタスクを実行し、dbの再構築を行う

このタスクを使うことでOracleでもdb:migrate:resetコマンドを擬似的に実行することが可能となります。

こんな感じで独自のオレオレrakeタスクを作ることは簡単なので、皆さんも是非作ってみてはいかがでしょうか!

Google Analyticsで特定のディレクトリのデータを取得する方法

0

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

Google Analyticsで特定のディレクトリのデータを取得する方法

アクセス解析チーム中林です。 サイトを運営していると一つのドメインで企業サイト、ECサイトを運営していることもあるかと思います。 そういった場合にGoogle Analyticsではプロファイルにフィルタを設定することで、特定のディレクトリのアクセスだけのデータを取得することが可能です。本日紹介するのは、 『特定のディレクトリ(サブディレクトリ)のアクセスだけを計測したい』 といった場合に、GoogleAnalyticsで特定のディレクトリのデータだけを取得するための設定方法を紹介します。  

特定ディレクトリのデータ取得にはフィルタを使用

  特定のディレクトリを計測するためには、プロファイルの編集によってプロファイルにフィルターをかける必要があります。 

Google Analyticsで特定ディレクトリのデータ取得の流れ

今回の例では、 http:www.kbmj.com/service/ というURLが有った場合に「service」ディレクトリのデータだけを取得してみます。  ①Google Analyticsにログインしてプロファイルの「編集」

GoogleAnalytifcsプロファイルの編集

  ②プロファイルに適用したフィルタから「+フィルタを追加」を選択 

GoogleAnalyticsプロファイルのフィルタ追加

   ③「プロファイルに新しいフィルタを追加」にチェックを入れます。Google Analyticsに新しいプロファイルを追加する

GoogleAnalytics特定アドレス除外のためのフィルタ追加

④フィルタ名は任意のものを入力  ※仮にフィルタ名前は「serviceディレクトリ」と設定します。 フィルタの種類は「サブディレクトリへのトラフィックのみを含める」 

GoogleAnalyticsの指定ディレクトリを計測

   サブディレクトリには取得したい特定のディレクトリを入力してください  ※今回は「^/service/」を入力 
 ■ポイント■
 「^」を先頭に入力することがポイントです。「^」を入力しないと、 http://www.kbmj.com/service/ のディレクトリだけでなく http://www.kbmj.com/hogehoge/service/ というディレクトリが有った場合に上記のアクセスについてもデータを取得してしまいます。  

GoogleAnalyticsのフィルタで特定のディレクトリのデータ取得設定

 これで「変更を保存」すれば、指定したディレクトリへのアクセスのみGoogle Analyticsのデータで取得することができます。 

IPアドレスを除外をする前に

 今回の作業をする場合、Google Analyticsのプロファイルから特定のディレクトリのみデータを取得するフィルタをかけた場合特定のディレクトリ以外のアクセスについては、フィルタを設定したプロファイルからは2度と取得することができません。  マスターとなるプロファイルは残しつつ、プロファイルは別途作成して、今回紹介したようなサブディレクトリを取得するフィルタをかけることが無難ですね。  今週は以上となります。

■アクセス解析関連記事■

*関連コンテンツのサイトを作る場合のドメインの使い分けについて

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

*SEOのために知ってておいて損はないタグ知識?

Rails2にバージョンアップしたらcreated_atが世界標準時刻になってました

0

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

Rails2.3にバージョンアップし、ふとDB内のレコードの作成時刻を見てみたところ、実際の作成時と9時間のずれがありました。
UTCが適応されているみたいでした。

UTCのままですと分かりずらかったりもしますので、日本時間に合わせてみます。

ググってみたところ、config/enviroment.rb内を以下のように修正してみてとありました。
ちなみにDBはpostgresです。
修正前:config.time_zone = ‘UTC’
修正後:config.time_zone = ‘Tokyo’
結果:(現在時刻:14:34)>> Entry.create({:title=>’test’, :body=>’hello world’})
=> #<Entry id: 7, body: “hello world”, title: “test”, created_at: “2009-06-02 05:34:55”, updated_at: “2009-06-02 05:34:55”>
>> Entry.find(7).created_at
=> Tue, 02 Jun 2009 14:34:55 JST +09:00

登録したときにUTCなのが気になります。DBをのぞいてみたところ、UTCで保存されていました。test_dev=# select id, title, created_at from entries where id=7;
 id | title |         created_at         
—-+——-+—————————-
  7 | test  | 2009-06-02 05:34:55.273476

ググってみたところ、↓のも追加してねとありました。config.active_record.default_timezone = ‘Tokyo’
修正後結果:(現在時刻:14:38)>> Entry.create({:title=>’test’, :body=>’hello world’})
=> #<Entry id: 8, body: “hello world”, title: “test”, created_at: “2009-06-02 14:38:34”, updated_at: “2009-06-02 14:38:34”>
DB内:test_dev=# select id, title, created_at from entries where id=8;
 id | title |        created_at         
—-+——-+—————————
  8 | test  | 2009-06-02 14:38:34.34017

上手くいきました。 ばんざーい。
取り出してみました。>> Entry.find(8).created_at
=> Tue, 02 Jun 2009 23:38:34 JST +09:00

…だめでした。 日本時間+9時間されました。
config.time_zone = ‘Tokyo’ をコメントアウトしてみます。#config.time_zone = ‘Tokyo’
>> Entry.find(8).created_at
=> Tue, 02 Jun 2009 14:38:34 +0000

これでよさげです。
しかしこれだとRails1.0時代と設定が変わっていないような…。
もっと良い方法があるかもしれません。

rubyで外部コマンド実行

0

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

rubyからOSのコマンドやシェルなどの、外部コマンドを

実行する方法としていくつかあるようですので簡単にご紹介します。

バッククォートを使う

#!/usr/bin/ruby

result = `ls -lh`

単純な実行ならコレ。

system

#!/usr/bin/ruby

result = system(“ls -lh”)

print result

結果に真偽値が返ってきます。

exec

#!/usr/bin/ruby

begin

exec(“ls -lh”)

rescue

puts “error”

end

Kernelモジュール内。rescueでrubyの例外を拾えるのが特徴。

open

#!/usr/bin/ruby

result = open(“| ls -lh”)

print result.class # => IO

while !result.eof

print result.gets

end

result.close

ファイルのIOを行うときにopenを使いますが

引数のコマンドの前に「|」パイプを付けると、外部コマンドの実行が可能になります。

実行される外部コマンドの処理を非同期実行や子プロセスにするかなど、

の考慮が必要になりますので、要件に応じて使いわけると良いでしょう。

その他、open3やpopenを使うなど方法もあります。

環境:ruby 1.8.6

Flash Lite 開発入門

0

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

こんにちは。エンジニアの はる です。

Flash関連の記事や業務が多い私ですが、最近Flash Lite(携帯版Flash)を使用する機会があり、PC版Flashとの勝手の違いに四苦八苦してしまいました・・・。

そこで、今回は最も一般的に使用されている「Flash Lite 1.1」を主軸に、これからFlash Liteにチャレンジしてみたい方向けにFlash Liteの制限事項とその対応策を書いてみたいと思います。

1.Flash Lite のバージョン選択

Flash Lite開発を行う上で、まず初めに考えなければならないのがFlash Liteのバージョンです。

一般的にFlash Liteのバージョンは機能的な面から「1.0」「1.1」「2.0」「3.0」と分けられ、下位互換性があります。対応機種を広くカバーしたいのであれば、「Flash Lite 1.1」を選択するのがスタンダードです。


2.Flash Lite の制限事項

Flash Lite開発において、制作者の頭を悩ませる制限事項がいくつかありますので、代表的なものをご紹介します。

1. ファイルサイズ制限

 Flash Lite開発で最も配慮しなければならないのが、swfのファイルサイズです。機種によってこのファイルサイズ制限はまちまちですが、Flash Lite 1.1開発では100KB以内に抑えれば問題ありません。ファイルサイズ制限と超えてしまった場合、swf全体、もしくは一部コンテンツが真っ赤な状態で表示されます。

また、これは外部から読み込んだデータも含めてのファイルサイズ制限となりますので、足りないコンテンツは外部swfから読み込めば・・・という策は通じません。

2. メモリ使用量制限

Flash Lite関連のサイトを参照してもあまり記載されてはいませんが、意外と気にしなければならないのが、メモリ使用量です。Flash Lite 1.1開発では、1024KB以内に抑えれば問題ありません。

メモリ使用量はAdobe Device Centralを利用するのが便利です。開発環境がAdobe Flashであれば、パブリッシュ設定を「Flash Lite x.x」に設定しておけば、ムービープレビューをAdobe Device Centralで閲覧できるようになります。

3. 外部通信・外部データの読み込み

 PC版Flashでは、swf表示時に外部通信を行い、アクセス解析データを送信したり、外部からデータを読み込んだりする方法がよく用いられますが、Flash Liteではセキュリティ上の制限があります。

まず、Flash Lite 1.0では外部データを読み込めません。

Flash Lite 1.1では、1ユーザーアクションに対して1通信のみ可能ですが、読み込めるデータはswf形式かテキスト形式のみです。

Flash Lite 2.0でも同様に、1ユーザーアクションに対して1通信のみ可能ですが、swf、テキストに加え、画像ファイルやXMLの読み込みが可能となりました。

Flash Lite 3.0では、上記通信をユーザーアクション無しでも読み込みが可能になったため、かなりPC版Flashと近いコンテンツ作成が可能となりましたが、まだ搭載機種のシェアが低すぎるため、これを当たり前のように制作者が使えるのは数年後になりそうです・・・。

では、現在一般的に使用されているFlash Lite 1.1で動的に画像やテキストを変えるにはどうすればいいのかというと、 テンプレートとなるswfを1つ用意し、サーバー上で画像やテキストの差し替えを行い、再びswfをコンパイルするといった方法が多いかと思います。興味のある方は、swfmill等で調べてみてください。

4. 配列が使用できない

Flash Lite 1.1では配列が使用できません。(※2.0からは使用可能)

Adobe LIVEDOCSでも公開されていますが、eval関数を使用してストリング処理によって配列をシミュレートする方法が多く用いられます。

 例)

eval(“array_”+i) = 1

#=> array_0 = 1

eval(“array_”+i+”_”+j) = 2

#=> array_0_0 = 2 


5. functionが使用できない

Flash Lite 1.1ではfunctionが使用できません。(※2.0からは使用可能)

こちらはフレームアクションをcall()関数で呼び出すことで代用可能です。ただし、引数・戻り値は使えません。。

具体的には、フレームアクションを記載してあるフレームにラベル名をつけ、call(“ラベル名”)で呼び出しを行うだけです。

6. enterFrameが使用できない

Flash Lite 1.1ではenterFrameが使用できません。 (※2.0からは使用可能)

こちらは、enterFrameとして使用するMCを1つ用意しておき、そのMC内で1フレーム目に実行したいスクリプト、2フレーム目に「gotoAndPlay(1);」と記載することでenterFrameに近い形で実現することができます。

上記以外にも細かな制限事項があり、実際に開発を始めてみると、インスタンスの呼び出し方法やボタンフォーカスの制御等で悩むこともあるかと思います。

その点については、また次の機会に書いてみたいと思います。

apxsを使ってapacheのモジュールを追加してみよう。

0

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

こんにちは。タジです。

今回はapacheに関するお話です。

以前、apacheを設定し、-t オプションでSyntaxをチェックした時、mod_rewriteやmod_accessがないですと怒られてしまいました。

ちなみに、mod_rewriteはapacheのrewiteを使うのに、mod_accessはOrder Allow,Denyなどでアクセス制御を使うのに必要なモジュールで、モジュールがない状態でこれらを使用する設定がhttpd.confに書かれていると、apacheが立上がらなくなってしまいます。

apacheでモジュールが足りない場合は、再コンパイル(configureからmake、make installを実施)でやることが多いですが、すでにシステムが動いているサーバやphpの複雑なモジュールが入っている場合など、後から再コンパイルするのは怖い場合があります。

そんな時には、apacheに付随しているapxsを使ってモジュールを読み込んでみましょう。

まず、どんな場合でも後からモジュールが追加できるわけではなく、apacheで使用可能なモジュールを確認した際、http_core.cとmod_so.cの二つが読み込まれている必要があります。

この二つはapacheをインストールする際にデフォルトで入るものですが、configureオプションで外すことも可能ですので、一応確認してみましょう。

/usr/local/apache2以下にapacheがある場合、

/usr/local/apache2/bin/apachectl -l

上のコマンドを叩いて、必要な二つが見つかればOKです。

ない場合は、apacheに後からモジュールを追加することを許可していないということですので、残念ながら再コンパイルするしかありません。

次に、読み込みたいモジュールのソースファイルが存在する必要があります。

apacheのソースを落としてきた場所で、追加したいモジュールのソースを探しましょう。

apache2系列では、/usr/local/srcにapacheのソースがある場合は

/usr/local/src/httpd-2.2.11/modules/mappers/

というディレクトリの下にあるはずです。

追加したいモジュールのソースが見つかったら、上記ディレクトリ内で以下のコマンドを使用します。

/usr/local/apache2/bin/apxs -c -i -a ./mod_rewrite.c

-cオプションはコンパイル、-iオプションはインストール、-aオプションはhttpd.confにLoadModuleディレクティブを追加する、という意味になります。

後はapacheを再起動すれば設定が読み込まれますので、再起動後に再度設定を行い、Syntaxチェックをした際にモジュールがないというエラーが出なければOKです。

今回はここまでです。

それではまた次回。

MacPortsでインストールしたものを最新版にアップデートする方法

0

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

こんにちは、たろちゃんです。

MacOSXではUnix由来のツールが最初から利用できますが、新しいコマンドやサーバを使いたい時などは自分でインストールをするか、パッケージ管理システムを使う必要があります。僕は元々Finkを使っていたのですが、カスタマイズされたパッケージを使いたいという事から、MacPortsを使うようになりました。

さて、FinkにしてもMacPortsにしてもインストールしたパッケージを最新版に保つ必要があります。なぜならインストール後に不具合やセキュリティホールなどが見つかった場合などにアップデートが必須だからです。

今回はMacPortsを例にとって最新版にアップデートする方法を紹介します。

まずは、MacPorts自身のアップデートを行います。

$ sudo port selfupdate
Password:

MacPorts base version 1.710 installed
Downloaded MacPorts base version 1.710

The MacPorts installation is not outdated so it was not updated

今回はすでに最新版になっていたようですので、MacPorts自身のアップデートは行われませんでした。しかしながら、このコマンドで sync という作業が実行されており、Portsのツリーが更新されます。

次に、アップデートが必要なパッケージがあるかを確認します。

$ port outdated
The following installed ports are outdated:
automake                       1.10.2_0 < 1.11_0         
git-core                       1.6.2.4_0 < 1.6.3.1_0     
glib2                          2.20.1_0 < 2.20.1_1       
gsed                           4.1.5_4 < 4.2_0           
ImageMagick                    6.5.1-0_0 < 6.5.2-4_1     
libtheora                      1.0_0 < 1.0_0             
mysql5                         5.0.77_2 < 5.0.81_0       
pcre                           7.8_3 < 7.9_0             
rsync                          3.0.5_0 < 3.0.6_0         
sqlite3                        3.6.13_0 < 3.6.14.1_0     
subversion                     1.6.1_0 < 1.6.2_0         
subversion-perlbindings        1.6.1_0 < 1.6.2_0         
vim                            7.2.160_0 < 7.2.182_0     

ここではautomakeやgit-coreなどが古いパッケージという事になります。

通常のアップデートでは一つもしくは複数のパッケージを選択して行います。

$ sudo port upgrade automake git-core

ですが、以下のコマンドで古いパッケージを一括してアップデートを行う事ができます。

$ sudo port upgrade outdated
Password
--->  Fetching automake
--->  Attempting to fetch automake-1.11.tar.bz2 from ftp://ftp.dti.ad.jp/pub/GNU/automake
--->  Verifying checksum(s) for automake
--->  Extracting automake
--->  Configuring automake
--->  Building automake
--->  Staging automake into destroot
--->  Deactivating automake @1.10.2_0
--->  Installing automake @1.11_0
--->  Activating automake @1.11_0
--->  Cleaning automake
--->  Fetching rsync
...

なお、インストール時に設定したオプションは引き継がれますので、安心してアップデートを行う事ができます。

Ruby On Rails Rich Text Editor YUI EDITOR

0

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

どもrick No.13です。

今回は、YUI EDITORと呼ばれるPluginで、
ユーザが、htmlなどを知らなくても簡単に文字を装飾できたりします。

install

$ruby script/plugin install git://github.com/larsklevan/yui_editor.git

これでinstallできない場合は、

http://github.com/larsklevan/yui_editor/tree/master

ここからdownloadしてvendar/pluginに解凍

設定

downloadしてきたフォルダ
自分の場合は、vendor/plugins/larsklevan-yu-_editor/yui_editor.yml.tpi

$mv yui_editor.yml.tpi yui_editor.yml

にリネームしてconfig/にコピーする

config/yui_editor.yml

javascript_base_uri: //yui.yahooapis.com

javascript_base_uri; http://yui.yahooapis.com

YUI EDITORを使用したいcontroller

class …. < ApplicationControler
uses_yui_editor
end

header

<head>
&;t%= include_yui_editor_if_used %>
</head>

form

<%= f.text_area column, :class => “rch_text_editor” %>

view

viewにこれかくとscriptが無効になるが色がつかなくなる

<%= sanitize @test.body %>

YUI EDITORの表示を変えたいときは、
config/yui_editor.ymlを編集すればよい

以上。

Ruby On Rails コンボボックスなどの動的な動き observe_field

0

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

どもrick No.12です。

今回は、このプルダウンを選んだらこっちのプルダウンの値が変わる!!
なんてことをしたいときにobserve_fieldを使用します。
observe_fieldは、railsのRJSテンプレートという機能を使っています。
RJSテンプレートは、javascriptを書かなくても簡単にかける機能って感じですかね。

view側(プルダウンを監視してプルダウンを更新する)

<%= select(“keyword”, “category”, Test.collect{i.title, i.id}) %> //監視されるプルダウン
<%= observe_field(“keyword_category” //この値を見る(上のソース)
:update => “keyword_small_category”, //この値の場所を更新する
:submit => “keyword”,
:url => {:action => “small_category”} //このaction名のメソッドを呼び出すと同時にsmall_category.html.erbを読み込む、[:action => “aa”, :id => params[:id]]なども可能
:width => “value” //keyword_categoryのidをvalueで渡す
) %>
<%= select(“keyword”, “small_category”, Test.collect{i.title, i.id}) %> //更新されるプルダウン

small_category.html.erb

<%= options_for_select Test.ccollect{i.title, i.id} %>
//更新後のプルダウンの値

controller側

def small_category
render :layout => false
end

view(プルダウンを監視してなにか呼び出す)

更新されるプルダウンだったところを

<div id=”small_category”></div>

とする。
そうするとsmall_category.js.erbが呼び出される。そこに表示したいものを書けばよい。
以上。

CSSハック〜IE8編

0

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

そろそろIE6が世の中から消えてもいいと思うmaiです。
ほんと…IE6がなくなるだけでもだいぶ色々楽になるのに。

IE6がまだまだ現役の中、IE8が登場してきました。
beta版の頃は一部のマニアックな人だけだから!とか言ってられたんですが、
正式版になってしまったのでいつまでも対象外にはしていられません。

というわけで、IE8にだけ適用するハックを調べてみました。
実はまだ実践してないのでメモですが…

間違っていたので修正しました。今度こそ多分…(2009/6/3)

head~/* */body セレクタ{ /* for ie8 */ プロパティ:値; }
html:not(:target) セレクタ{ /* for others */ プロパティ:値; }

 これがファイナルアンサーっぽいカンジです。
参考にしたサイトはこちら↓

http://lpclips.net/2008/06/css-hack.html

Ruby On Rail 多対多のテーブルへの保存の仕方

0

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

どもrickです。

多対多のテーブルとは、
ユーザーと特徴Tableがあるとして、ユーザーと特徴が互いに複数の値を参照するときに使います。
例えは、ユーザーが複数の特徴を登録したいときに、ユーザーn対特徴*となる。
ユーザーも1人ではないので、n対nとなる。
このようなときに使用する。

環境

Rails2.1.1
Postgres8.3.5

設定

名前は、DB1_DB2という命名規則になっている、DBの順番はあいうえお順

$ruby script/generate migrate model1_model2 //modelはいらないので、migrateだけ作成
db/migrateion/..

def self.up
create_table(:model1_model2, :id => false) do |t| //idは必要ないため消す
t.integer :model1_id
t.integer :model2_id
end
end

双方のmodelに

has_and_belongs_to_many :model名s //参照の値が複数だから複数形にする
保存するほうのmodelに(1を使用して2を呼び出した時は、1が保存するほう)

def model2_id=(value)
small = MODEL2.find_by_id(value)
selef.model2s << small
end

こんな風にすると値が自動に保存される。
きものぶぶんは、selef.smodel2s << smallだとおもう

更新する時、更新する方法はないとの事なので、
一度削除してから入れ直すなどするのが良いと思う。

以上。

IE6で背景が出たり消えたりする件について

0

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

こんにちは。maiです。
cssでレイアウトを組んでいるとIE6とは日々戦いです。
今回は、スクロールしたりリロードしたりしたときに、
IE6だけ背景が表示されないことがあるという
めんどくさいバグ(通称いないいないばあバグというらしい)の対処法について。

このバグの原因は、該当する要素のhaslayoutがfalseになっていることのようです。
haslayoutとは平たく言うと、レイアウトに関する情報を持ってるか?ということで、IEがもっているプロパティです。
持っていればhaslayoutはtrue。持っていなければfalse。単純ですね。

なので、対処法としてはバグが起こっている要素のstyleにhaslayoutがtureになるプロパティ&値を書けばOKです。

haslayoutをtrueにするプロパティと値はいくつか組み合わせがありますが、
背景がでない…で困っているのなら一番無難なwidth又はheightの値を入れます
ハックでIE6向けにwidth:1px;とか入れてもいいですが、
幅か高さを明示すればいいだけなので、
ハックを使わず素直にwidthかheightの値を入れることをお薦めします。

ちなみに私のケースだとbackgroundだけでしたが、borderでも同じ症状が出るみたいです。
backgroundやborderを使うときは面倒でもIE6のためにwidthを書いておいた方が幸せになれそうです。

この他にもIE6でレイアウトに問題が出たときはhaslayoutをtureにしてみるといいかもしれません。

 ★参考資料★
haslayoutをtrueにするプロパティと値って他にどんなのがあるのー?と気になる人もいると思うので、
参考までに載せておきます。

プロパティ
displayinline-block
heightany value
floatleft or right
positionabsolute
widthany value
writing-modetb-rl
zoomany value

Ruby On Rails ページネートプラグイン

0

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

どもrickです。

今日は、ページネートのプラグインの紹介です。
Rails2.x系からデフォルトではページネートが使えないのでinstallする必要が有ります。
使い方は至って簡単というか、ほとんど同じです。

環境

Rails2.1.1
will_paginate2.2.2

Install

$gem install will_paginate

設定

config/enviroment.rb一番下に

require ‘will_paginate’

controller.rb

@test = DB名.paginate(:page => params[:page], :per_page => 10)

view

<%= will_paginate @test, :prev_label => “prev”, :next_label => “next” %>

これだけです。
optionは少々かわっており外観の設定がしやすくなってたりします。

いじょ〜〜〜。

Mac OS X Leopard にOracleをインストールしよう

0

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

遂に先日、Intel Mac版Oracleがリリースされました。今までは別のLinuxマシンへXE版をインストールして代替していたのですが、これからはそのままローカルマシンで動かす事が出来ます。というわけで駆け足になりますが今回はそのインストール方法を記述しておきたいと思います。

先に断っておきますが、本記事は元となる記事があります。この著者は冒頭で 「Oracleから出ているインストールガイドは長ったらしいし、ほとんどの人に必要ない事まで書かれている。まずは手短なインストール手順を紹介する」 という趣旨の事を書かれていました。全く同感です。 一部加筆などしていますが、大筋で書かれている内容そのままでインストールを行っていきたいと思います。まずはrootユーザになる。sudo -i
oinstallグループとoracleユーザを作成(既存のグループおよびユーザIDと被らないように600番を使用しています)


dscl . -create /groups/oinstall
dscl . -append /groups/oinstall gid 600
dscl . -append /groups/oinstall passwd "*"
dscl . -create /users/oracle
dscl . -append /users/oracle uid 600
dscl . -append /users/oracle gid 600
dscl . -append /users/oracle shell /bin/bash
dscl . -append /users/oracle home /Users/oracle
dscl . -append /users/oracle realname "Oracle software owner"
mkdir /Users/oracle
chown oracle:oinstall /Users/oracle

Oracleユーザのパスワードを変更


passwd oracle

デフォルトのカーネルパラメータを変更します。


vi /etc/sysctl.conf

そしてOracle推奨のパラメータを入力します。


kern.sysv.semmsl=87381
kern.sysv.semmns=87381
kern.sysv.semmni=87381
kern.sysv.semmnu=87381
kern.sysv.semume=10
kern.sysv.shmall=2097152
kern.sysv.shmmax=2197815296
kern.sysv.shmmni=4096
kern.maxfiles=65536
kern.maxfilesperproc=65536
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65000
kern.corefile=core
kern.maxproc=2068
kern.maxprocperuid=2068

ここでOSを再起動すれば、パラメータが有効になります。再起動が終わったら再度ターミナルを立ち上げ、oracleユーザになりましょう。


su - oracle

.bash_profileに以下の値をセットしましょう。


export DISPLAY=:0.0
export ORACLE_BASE=$HOME
umask 022
ulimit -Hn 65536
ulimit -Sn 65536

よくOracle関連のファイル群はOracleユーザのホームディレクトリ配下に配置されるので、ここではORACLE_BASEをOracleユーザのホームディレクトリに設定しています。 現在のシェルにこの設定を反映させましょう。


. ~/.bash_profile

ここでdb.zip をダウンロードし、展開してしまいましょう


mkdir Install
cd Install
# downloadしたdb.zipをこのディレクトリへ配置して、
unzip db.zip
cd db/Disk1

ここでインストーラを起動します


./runInstaller

インストールウィザードでは以下の通りのオプションを指定します

  1.  拡張インストール
  2.  Standard Edition
  3. ホーム詳細の設定(そのまま)
  4. データベースの作成/汎用目的
  5. グローバル・データベース名: orcl, SID: orcl
  6. データベース・キャラクタセットの選択: Unicode標準UTF-8 AL32UTF8
  7. 「サンプル・スキーマ付きデータベースを作成」にチェックつける
  8. ファイルシステム→「データベース・ファイルの位置の指定」→/Users/Oracle/oradata/
  9.  すべてのアカウントで、同一のパスワードを使用(パスワードを2つ入力する) 

ここからしばらくインストールが行われます

パスワード管理 以下のような画面がでたらパスワード管理を押してください。

ここでアカウントのロックをはずしておきます(HRなど)。左から二番目のチェックをはずし、パスワード(hrとか)をセットすればOKです。

インストールの最後に、rootでひとつのシェルスクリプトを実行するよう指示がでます。


root# /Users/oracle/oracle/product/10.2.0/db_1/root.sh
Running Oracle 10g root.sh script...

The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /Users/oracle/oracle/product/10.2.0/db_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.

これがうまくいけばインストールは成功です。

Oracleユーザの設定を追加する

.bash_profileに追加します。


export ORACLE_HOME=/Users/oracle/oracle/product/10.2.0/db_1
export DYLD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_SID=ORCL
PATH=$PATH:/$ORACLE_HOME/bin

oracleユーザで再ログインして、リスナーの状態を確認します


lsnrctl status

停止しているなら起動させましょう


lsnrctl start

Oracleデータベースへサンプルユーザで接続できるか試しましょう


sqlplus hr/hr@orcl

ここでうまくいかない事があればなんらかの調査が必要です 🙂 自分のアカウントでもsqlplusを利用できるように自分のアカウントをoinstallグループに入れてもらいましょう。

  1. 「システム環境設定」
  2. 「アカウント」
  3. 「管理者の認証を行う(南京錠マーク)」
  4. 「oinstallグループをクリック」
  5. 「自分のアカウント名にチェックを入れる」

後はRailsアプリなどで以下のように指定して、Databaseを利用してみてください


development:
adapter: oracle_enhanced
database: localhost/orcl
username: hr
password: hr

あ、Railsで利用するDB接続アダプタはこっち の記事を参照してください。

今日はここまで。

RailsでOracle ~ インストール編

0

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

TrinityTです。

最近、Rail2.2+Oracle10gであるWebアプリを構築する機会がありました。

この組み合わせで行われている案件はかなり少ないらしく、ネットや書籍で探しても情報があまり無いために大変苦労しました。

ここで得られたノウハウをもとに、RailsでOracleを扱う際の注意点について解説しようと思います。

初回となる今回は、各種ライブラリインストールの手順を説明します。

※自分のブログ(http://d.hatena.ne.jp/TrinityT/)に書いた内容に加筆してまとめています。

前提

基本情報

・DB:Oracle10g Release2 Express Edition ※インストール方法は割愛します。

・サーバOS:CentOS5.2 ※仮想環境上に構築(192.168.0.11)

・クライアントOS:CentOS5.2

・APサーバ:Passenger2.1

Rails+Oracleで動かすのに必要なライブラリ

・Ruby-OCI8:Ruby用のOracleコネクタ

・activerecord-oracle_enhanced-adapter:Rails用アダプタ

・Oracleクライアントモジュール:各種OS用バイナリ

手順

Oracleクライアントモジュール

今回はXEのクライアントモジュールを使用します。

注意点:

・本番で使用する場合は製品版のクライアントモジュールを使用してください。

・DBサーバをクライアントとなるOS上にインストールした場合は、通常同時にクライアントもインストールされるため本設定は必要ありません。

・他のOS用に、Windows用や、Linux用Mac用と各種インストーラがあります。

1.DLサイトからoracle-xe-client-10.2.0.1-1.0.i386.rpmをダウンロード

2.RPMインストール

rpm -ivh oracle-xe-client-10.2.0.1-1.0.i386.rpm

3.環境変数設定

.bash_profileなどに以下を追記。※パスは適宜修正してください。

export ORACLE_HOME=/usr/lib/oracle/10.2.0.1/client
export PATH=${ORACLE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}

4.環境変数適用

  • Windows:再起動
  • Linux:再ログイン or sourceコマンド
Ruby-OCI8インストール

※2009/5/1時点で、デフォルトではunstableの2.0系がインストールされてしまうため、安定版1.0系を引数で指定してください。

gem install ruby-oci8 -v=1.0.4

Oracleアダプタインストール

Oracleアダプタは2種類あります。

・activerecord-oracle-adapter:旧アダプタ

・activerecord-oracle_enhanced-adapter:上記アダプタのLOBのロック不具合などの点を改善したアダプタ。

2009/5/1現在ではOracleEnhancedAdapterを使う方が良いと思います。旧アダプタのメンテナもEnhancedに移った模様(?)です。

gem install activerecord-oracle_enhanced-adapter

Oracleサーバ側の設定

インストール済のOracleサーバに「ユーザ名:oracle、パスワード:oracle」のユーザを作成しておきます。(sql*plusや管理コンソールなどを利用)

※ちなみにOracleXEサーバではOracleインスタンスは「xe」に固定されます。

これでインストールは一通り完了です。

次回はPassengerでOracle+Railsアプリを動かす際の要点について説明します。

Ruby On Rails 画像アップロードプラグイン file_column

0

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

ども〜rickです。

今回は、画像を簡単にアップロードできるようになるプラグインの紹介をします。

環境

rails2.2.2
ImageMagick6.4.8
RMagick2.9.1

migration

画像を入れたいところに

t.string image
でカラムを追加する。

model

file_column :image, :magick => {
:versions => {
:icon => {:size => “16×16”},
:thumb => {:size => “40×40”},
:medium => {:size => “120×120”}
}
},
:web_root => “images/”,
:root_path => File.join(RAILS_ROOT, “public”, “images”) //この場所に作られる

View

form文に下記追加

<% form_for(@blog, :html => {:multipart => true}) do |f| %>
// multipart => trueを忘れずに
<%= file_column_field ‘image’, ‘image’, ‘icon’ %>
//これはプラグインのヘルパー、第三引数はなくてもいいしあったらモデルに書いたサイズになる

おまけ

“320×240″、”320×240>”、”320×240!”の違い
“320×240” 縦横比を維持して、このサイズに収まる大きさにする。
“320×240>” これより小さい画像は小さいまま、拡大しない。
“320×240!” 縦横比を無視して、このサイズぴったりに合わせる。
:small、:medium、:largeは自分の好きなキー名に出来る。
極端な話、:s、:m、:l、:xlなんてキー名でも良い。

以上!

Rubyを1.9にするとrakeコマンドで例外が発生する問題とその対処法

0

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

 こんにちは。

 KBMJでRuby on Rails を使ったweb開発に携わっているyoppiといいます。

 今回はRuby1.8で動いていたRailsのプロジェクトをRuby1.9にした時に出た問題とその対処法について書こうと思います。

 まず、今回の現象が出た時の環境を書いておきます。

 OS: Windows Vista Home Basic SP1

 Ruby:1.9.1

 Rails:2.3.2

 rake:0.8.4

 問題は、ruby1.9にしてプロジェクトのルートディレクトリでrakeコマンドを実行したときに起きました。

 rakeコマンドの引数が何であっても、「invalid byte sequence in Windows-31J」という例外が発生します。調べてみるとどうやらconfig/boot.rbの「 File.read(“#{RAILS_ROOT}/config/environment.rb”)」(Railsのバージョンによっては、IO.read・・・になってたりします)で発生していたようです。

 config/environment.rbは、UTF-8なのですが、Windows-31Jとして読み込もうとして、文字コード関連の例外が発生しまっているみたいですね。

 例外の原因はファイルの文字コードの扱いがRubyの1.8と1.9で変わったということのようです。

 Ruby 1.9 m17n リファレンス (不完全版) – diary of a madman

 「Ruby 1.9 文字コード」で検索して、上記サイトを発見しました。どうやら、OSの標準の文字コード以外をファイルの読み書きに使う場合、明示的に指定する必要がありそうです。

 やり方として思いついたのは2つ。

  1. config/environment.rbにマジックコメントを追加する(参考:Ruby 1.9リファレンスのマジックコメントの説明)
  2. config/boot.rbの該当の例外が出る直前に「Encoding.default_external = ‘UTF-8’」を記述する

 結果から言うと、1は駄目で2はできました。マジックコメントにはまだ理解が足らないようです。

 ということで、2の方法を採用します。プロジェクト全体で同じ問題が発生しそうなので、記述はファイルの先頭に挿入しました。同じような現象が出た場合に参考にしていただけると幸いです。

 今回調べてわかりましたが、Rubyは1.9になって、多言語化対応で、色々と手が入っているようです。それで便利になる反面、今回のように1.8で動いていたものについては、例外が発生するようになってしまうこともあるようです。1.8から移行する場合はこの辺も気をつけておいた方がいいようです。

Google Analyticsで自分(自社)のIPアドレスを除外する方法

0

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

アクセス解析チーム中林です。Google Analyticsを使用してデータ活用していく上で気になる点として、
自分や会社からのアクセス数がカウントされてしまうということが有ると思います。

本日紹介するのは、

web制作担当会社や、自社からの社内アクセスを

『GoogleAnalyticsのデータから除外したい』

といった場合に、指定したGroval IPアドレスをGoogleAnalyticsのデータから除外する方法です。

IPアドレスの除外方法はフィルタを使用

IPアドレスを除外する場合に、プロファイルの編集によって

プロファイルにフィルターを掛ける必要があります。

GoogleAnalyticsのIP除外の流れ

①Google Analyticsにログインしてプロファイルの「編集」

GoogleAnalytifcsプロファイルの編集

②プロファイルに適用したフィルタから

「+フィルタを追加」を選択

GoogleAnalyticsプロファイルのフィルタ追加

③「プロファイルに新しいフィルタを追加」にチェックを入れます。

GoogleAnalyticsに新しいプロファイルを追加する

④フィルタ名は任意のものを入力(ここでは「社内IPアドレス除外」とします。)  フィルタの種類を「IPアドレスからのトラフィックを全て除外」

 該当する社内IPアドレス(Groval IP)を入力してください

※仮に除外したいIPアドレスが192.168.0.1の場合

  この入力欄では、正規表現を使っているので、「192\.168\.0\.1」と入力してください。

GoogleAnalyticsのフィルタのIP除外設定

これで「変更を保存」すれば、指定したIPアドレスからのアクセスを

GoogleAnalyticsのデータから除外することが可能となります。

IPアドレスを除外をする前に

今回の作業をする場合は、Google Analyticsのプロファイルから

指定するIPを除外すると、指定IPを除外設定したあとの該当アクセスについては

プロファイルのデータとして2度と取得することができません。

新しくキャンペーンページを作って、データが取得できるかのチェックをする場合

自分でアクセスして、データが反映されるか確認する場合などがあるならば、

IPアドレスを除外しない設定のプロファイルを作成して、

別のプロファイルで管理することが好ましいかもしれません。

今週は以上となります。

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

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

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

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

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

GoogleAnalyticsのユーザー絞り込み機能アドバンスセグメントとは?

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

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

Google Analyticsのユーザー絞り込み機能アドバンスセグメントとは?

0

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

Google Analyticsのユーザー絞り込み機能アドバンスセグメントとは?

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

無料のアクセス解析ツールで有名な「GoogleAnalytics」ですが、解析の上で非常に便利な機能を順次追加していることはご存知でしょうか。

2008年10月に追加された「アドバンスセグメント」「カスタムレポート」はGoogleAnalyticsをさらに使いやすくし、深い解析を可能にした驚くべき機能となっています。

そこで今回は、特定のユーザーを絞り込むことができるアドバンスセグメントについてご紹介します。

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

  1.Google Analytics の追加機能 アドバンスセグメントとは?

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

Gooogle Analyticsの追加機能となり、様々な条件でフィルタリングしてデータの閲覧を可能にします(もちろん無料で使用可能)。

例えば下記の分析が可能になります。

● Google Adwordsの検索連動型広告からのユーザーで絞り込み

● 新規ユーザーまたはリピーターがよく閲覧している人気ページのランキング

● アクセス地域毎にどれくらい商品を購入したのか、購入率はどれくらいか

● はてなブックマークからの訪問者が閲覧するページやサイト滞在時間

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

  2.今までのGoogle Analyticsと違って何ができるのか?

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

従来のGoogel Analyticsでは、新規ユーザーやディレクトリ毎にデータを分けるためには、新しくプロファイルを追加し管理画面からフィルタを適用する必要がありました。

ですが、アドバンスセグメントを使うことで新しくプロファイルを追加する必要がなくなり、今までのプロファイル内で、楽に様々な条件でのユーザーデータを追うことができるようになったのです。

●左図が従来の管理方法

●右図がアドバンスセグメントの管理方法

アドバンスセグメントのメリット

①何度もプロファイルを変える必要がなくなるので、解析の際に非常に楽になります。

②ユーザーの絞り込みにより効果測定の精度が向上しサイト改善のヒントが見つかりやすくなります。

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

  3.Google Analytics アドバンスセグメント設定方法

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

それでは、実際にアドバンスセグメントの設定方法を解説していきます。

アドバンスセグメントの設定方法は下記の3ステップで設定することができます。

①Google Analyticsのレポート画面右上の「アドバンスセグメント 全セッション」をクリック

GoogleAnalyticsアドバンスセグメント設定方法

②既存設定の「デフォルトのセグメント」または「カスタムセグメント」の項目を選択し「適用」をクリック

GoogleAnalyticsアドバンスセグメント設定方法

③レポートデータに選択したアドバンスセグメントのフィルターが適用され絞り込まれデータを表示GoogleAnalyticsアドバンスセグメント設定方法

アドバンスセグメントで1度絞り込むことで、他のレポート項目である「キーワード」「上位コンテンツ」にも

同じ条件で絞り込まれたデータを閲覧することができます。

また、一度に複数の設定項目にチェックを入れることでレポート上に同時に表示することができます。

GoogleAnalyticsは使いやすさや無料であることがメリットとして評判を集めていますが、ユーザーの絞り込み分析が気軽にできないという点から、深い解析をする上では使い勝手少し悪い印象がありました。

その弱点である、気軽にできるユーザー絞り込み機能が「アドバンスセグメント」 であり、「アドバンスセグメント」の登場により飛躍的に分析力が向上したといえます。

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

  補足:既存のフィルター(デフォルトセグメント)で設定できるフィルターリスト

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

 ● 全セッション:

 フィルターを掛けていない通常通りのセッション

 ● 新規ユーザー:

 GoogleAnalyticsを導入してから、サイトに初めて訪れたユーザー

 ● リピーター:

 GoogleAnalyticsを導入してから、サイトに2回以上訪れたユーザー

 ● 有料のトラフィック:

 GoogleAdwordsまたはその他の検索連動型広告からのユーザー

 ※各検索連動型広告とGoogleAnalyticsの連携設定をしている場合にのみ取得可能です。 

 ● 無料のトラフィック:

 検索連動型広告以外の検索エンジンからの自然流入で訪れたユーザー

 ※有料トラフィックの取得設定をしていない場合、検索連動型広告の数値もこちらに入ります。

 ● 検索トラフィック:

 検索エンジンから訪れたユーザー(有料トラフィックと無料トラフィックの合算値)

 ● ノーリファラー:

 リファラー情報がないブックマーク、ブラウザからのURL直打ち、メルマガなどから訪れたユーザー

 ● コンバージョンしたセッション:

 設定したあるゴール設定(購入完了や資料請求など)したページに至っているユーザー

 ※あらかじめGoogleAnalyticsのコンバージョン設定が必要になります。

 ● トランザクションが発生したセッション

 あらかじめ登録しているネットショッピングの商品に対して注文したユーザー

 ※GoogleAnalyticsのeコマース分析機能を使用できる環境の場合のみ有効

 ● iPhone からのセッション

 ※ブラウザ情報からiPhoneを識別してユーザーを特定

 ● 直帰以外のセッション

 最初にサイトに訪れたページで離脱をしていない2PV以上のユーザー

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

  4.おわりに

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

あらかじめ設定してある上記デフォルトセグメントでも十分にフィルタリングをかけることができますが、さらに条件を細かく設定するためには、フィルターの条件を任意にカスタムする「カスタムセグメント」機能で設定する必要があります。

そこで次回は、アドバンスセグメントの醍醐味でもあるカスタムセグメントの設定方法をご紹介します。

今月のはじめに隅田公園でお花見をしましたが、ちょうど散り際でとても風流でした。

勿論ビールもご一緒に…それでは。

■バックナンバー

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

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

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

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

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

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

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

SEOのために知ってておいて損はないタグ知識

0

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

どうも。

アクセス解析チームのバッチです。

本日はSEOに有効な(X)HTMLのコーディング、主にタグの効果について、いくつかチョイスして解説しようと思います。

■SEOに有効なタグ

<title>タグ

読むとおりページタイトルをあらわす非常に重要なタグとなります。
ブラウザや検索エンジンのSERP(検索結果ページ)に影響し、ユーザーがページ内容を把握する手段にもなります。
<meta name=”keyword”>タグで指定したキーワードを含めてタイトルを決めることで検索エンジンが内容を把握しやすくなります。
また、タイトルを指定する際にはサービス、キーワード名を前におき、サイト名は後ろに配置することで検索されたワードに対して検索結果が上位表示されやすくなります。
Googleであるなら全角20文字程度、Yahoo!であれば全角40文字程度が表示限界とされているので、できるだけ文字制限数以内で表現することがユーザーが把握することからも望ましいですね。

<meta name=”keyword”>タグ

ページにおいて、重要なキーワードを定義するタグです。ここで定義したキーワードは<title>タグ、<meta name=”description”>、 ページ全体、において重要なワードであると解釈され、検索エンジンがページ内容を把握するための指標となります。7つ前後が使用限度であるといわれ、 多く設定するとキーワード一つ一つの重みが弱くなり、キーワードとしての役割を果たしにくくなってしまいます。

<meta name=”description”>タグ

ページ内容を表す文書を記述するタグです。キーワードを混ぜながら80文字程度で説明文を記述するのが理想とされています。
ここで記述した内容はSERP(検索結果ページ)において、スニペットとして表示されるので、ユーザーがサイト、ページ内容を把握する際にチェックする可能性が高いです。
設定しない場合はKWIC形式で表示され、キーワードを含む文脈が抜き出され表示される形となります。(場合によってはこちらのほうがいいこともありますが)
また、Yahoo!で検索した場合、カテゴリ登録をしてあるならばそちらに登録したサイト説明文が優先されるので、キーワードを含んだものを設定しておく必要があります。

<hx>タグ

よく言われる見出しタグですね。<h1>から<h6>まで存在し、それぞれ重要度が変わってきます。
<h1>はページのテーマを定めるものであり、1ページにつき一度のみ使えます。何度も使ったり、別のタグなどを間にはさむことを行うと検索エンジンの評価が落ちるので注意してください。
<h2>からは使用回数に制限はありませんが、構造体の深度に注意して使用してください。
<h2>より先に<h3>を使用したりすることで検索エンジンの評価が下がってしまいます。

<p>タグ

文書の存在を検索エンジンに認識させるためにも<p>タグでくくりましょう。
<br/>タグは<p>タグの中で改行する際に用いてください。
また<br/>タグを連続で配置すると文法的にエラーになるので、<p>タグで行間調整を行うことが望ましいです。

<acronym>タグ

あまり見ないタグかもしれませんが、頭文字の略語を表す際に使うタグです。
例えばSEOという言葉ですが、本来は”SearchEngineOptimization”という言葉です。
通常であれば表記ゆれで記述に悩むところですが、<acronym title=”SearchEngineOptimization”>SEO</acronym>と書くことで SEOとはSearchEngineOptimizationの略ということを検索エンジンに説明できます。
また、マウスポインタを当てることでユーザーにもポップアップで説明可能となります。

<address>タグ

主に住所や電話番号などの連絡先を示すものであり、URLなどをくくったりもします。
<address>タグで住所をくくった場合、住所を交えた検索結果において上位表示されやすくなります。

<strong>タグ

強調タグであり、<b>タグが見た目の強調であるのに対して、「重要なワードである」という意味での強調なので、 検索エンジンにも効果があり、キーワードと交えて記述することが重要です。
使用限度はないですが、あまりにも多く使うと効果が下がりますので、重要な部分やワードのみにしておくべきです。

<table>タグ

テーブル、つまり表を生成するタグです。あくまでも表なので<table>タグでWebサイト全体を構築することは構造体的に間違っています。
また、Webサイト全体を構築するとなると、レイアウトを作成する際に複雑な入れ子状になってしまい、HTMLソースが検索エンジンに正しく解釈されないという障害もあります。
何よりも重要なソースの読み込む順番を変更できなかったり、ファイルサイズが大きくなるといったデメリットがあります。
間違ってしまいがちですが、<table>タグを表に用いる分には全く問題ありません。
正し、summary要素をつけ何の表なのかということを検索エンジンにアピールする必要があります。

などなど、いくつか簡単に説明させて頂きました。

論理構造体と視覚構造体を分けてWebサイトを作るということですね。

簡単にいえば検索エンジンとユーザー、それぞれに合った手法でWebサイトを構築するということです。
注意しなければならないことは、どちらか一方のみに絞ったWebサイト構築です。

SEOのためにユーザーが見えない部分に大量のテキストを挿入したり、 デザインのために<table>タグのみでレイアウトを作るなどといった行為は良いWebサイトと認識されにくくなります。

いいWebサイト作成の参考になれば幸いです。

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

+—————————————————————————+

+—————————————————————————+

最近人気な記事