ホーム ブログ ページ 37

Burp Suiteを日本語化する方法

0

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

今まで困難だった、Burp SuiteのメニューとUIの日本語化と、一般的な日本語利用設定をWindows、Mac、Linuxで行います。Burp Suiteは、PortSwigger社が開発を行っているプロキシツールで、脆弱性診断などに使われます。

はじめに

今回Burp SuiteのメニューとUIの日本語化は、Belle(Burp Suite 非公式日本語化ツール)を利用して行います。ツール開発元サイトとその注意事項の確認をお願いします。
Windows、macOS、Kali linuxに導入した、Burp Suiteに対して行っています。Kali Linuxの日本語化については、別投稿を確認してください。

レスポンス内容の文字化け解消

レスポンス内容の文字化けに対応させます。
初期状態ですと、Burp SuiteのProxy機能で表示される、日本語を含むレスポンスの内容が文字化けを起こしています。
「User options Display HTTP Message Display」の「Change font」から日本語表示を可能なフォントに変更してください。
また、Look and feelで、UIの見栄えを変更する事も可能です。

Burp Suite japanese fonts

Burp Suiteの日本語化(Windows)

例は、Windows10へインストーラー版のFree Editionを導入したものです。
インストールされているフォルダ、特に変更していない場合は、
「C:\Program Files\BurpSuiteFree」へ、手順に沿って下記の3ファイルを配置します。

  • javassist.jar
  • belle.jar
  • ja.txt

管理者権限でメモ帳などを起動してインストール先にある、「BurpSuiteFree.vmoptions」を編集します。

Burp Suite windows folder
# Enter one VM parameter per line
# For example, to adjust the maximum memory usage to 512 MB, uncomment the following line:
# -Xmx512m
# To include another file, uncomment the following line:
# -include-options [path to other .vmoption file]
-Xmx12257m
# 以下の行を追記
-javaagent:belle.jar

Burp Suiteの日本語化がされてます。

Burp Suite windows

Burp Suiteの日本語化(macOS)

例は、macOS Sierraへインストーラー版のProfessional Editionを導入したものです。
Finderのメニューから移動アプリケーションを選択してください。
Burp Suiteのappファイルを選択し、control + クリックで「パッケージの内容を表示」を選択してください。
必要な3ファイルをBurp Suiteのjarがあるパス「java/app」に設置します。

Burp Suite Mac app

続いて「vmoptions.txt」を編集します。

Burp Suite Mac app edit

MacでもBurp Suiteの日本語化がされてます。

Burp Suite Mac

Burp Suiteの日本語化(Linux)

例は、Kali Linux(2016.2)のxfceを利用、デフォルトで導入されているBurp Suiteの日本語化を行います。
必要な3ファイルを適当な場所に設置します。(例: /root/.burp/)

メニューから起動する場合のファイルを編集します。

vi /usr/share/applications/kali-burpsuite.desktop

場合によって、編集するファイルは、こちらかも知れません。
「/usr/share/kali-menu/applications/」

Execの行を下記のように変更します。

[Desktop Entry]
Name=burpsuite
Encoding=UTF-8
Exec=sh -c "java -javaagent:/root/.burp/belle.jar -jar /usr/bin/burpsuite"
Icon=kali-burpsuite.png
StartupNotify=false
Terminal=false
Type=Application
Categories=03-webapp-analysis;03-06-web-application-proxies;
X-Kali-Package=burpsuite

Kali LinuxでもBurp Suiteの日本語化がされてます。

Burp Suite Linux

まとめ

各OSで、Burp Suiteの日本語化がある程度可能になりました。
日本語になったことで親しみやすくなると同時に、各項目の意味が直感的に理解できるようになります。
日本語化ツールBelleを作成公開してくださったことに感謝します。

関連記事など

脆弱性診断サービスなど

弊社、アピリッツではセキュリティ診断サービスを行っております。

下記リンクから内容の確認と、問い合わせが可能です。

http://security.appirits.com/

LinuxCentOSキープアライブの設定

0

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

RickNo42です。今更ですが続き
なキープアライブの設定を紹介します。
環境
・CentOS7の環境2台
 Aサーバ:172.18.0.2
 Bサーバ:172.18.0.3
 割のり当たるてるたんい仮想IP:172.18.0.4
・keepalivedの
目的
AサーバかBサーバ何方かに仮想IPを保持してもらい、
通常時はウェブアクセスをAサーバが受けるが、
Aサーバが死亡したらBサーバでのWebアクセスを受けるように変更する
インストールメソッド
http://www.keepalived.org
よのり最新をダウンロード

wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz
tar xzvfkeepalived-1.2.22.tar.gz
cdキープアライブ-12.22 /
./configure –prefix = “/”
make && make install
設定方法
[Aサーバー]

#爆の

nmcli d

兄弟タイプ
hogeイーサネットコネクタ数連結1

loループバック管理用-

cd / etc / keepalived /
cp keepalived.conf keepalived.conf.org

vim keepalived.conf

global_defs {
notify_email {
hoge@hoge.com
}
notify_email_from hoge@hoge.com
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
状態マスター
インターフェイスhoge
smtp_alert
virtual_router_id 1
優先度150
advert_int 1
認証{
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.0.4
}

}

[Bサーバー]

#爆の

nmcli d

兄弟タイプ
hogeイーサネットコネクタ数連結1

loループバック管理用-

cd / etc / keepalived /
cp keepalived.conf keepalived.conf.org

vim keepalived.conf

global_defs {
notify_email {
hoge@hoge.com
}
notify_email_from hoge@hoge.com
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
状態バックアップ
インターフェイスhoge
smtp_alert
virtual_router_id 1
優先度100
advert_int 1
認証{
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.0.4
}

}

押し
[A、Bサーバー]

/etc/init.d/keepalived start

[A
サーバー] 172.18.0.4を抜くことをする

/ sbin / ip addr show
[B
サーバー] 172.18.0.4を抜ていないことをする

/ sbin / ip addr show
サーバー
[A1]

/etc/init.d/keepalived stop
//172.18.0.4を抜ていないことをする
/ sbin / ip addr show
[B
サーバー] 172.18.0.4

/ sbin / ip addr show
卓は、172.18.0.4にIPをダウンロードされた先のダウンロードがありにちありません設定の完了です。

少し説明

  • global_defs
    マスターが切り替わった時にメールを飛ばす設定です。
  • vrrp_instance VI_1
    IP毎に設定を記載します。
    メールが来る時にこの名前で飛んで来るので、わかり易い名前にしましょう
    -状態MASTERの
    MASTERかBACKUP設定します。
    MASTERにしたい方の優先度を高くしておきましょう
    (わざと優先順位を同じにする場合もあります)
    -インタフェースホーヘ
    設定するNIC名
  • smtp_alert
    メール通知を行う
  • virtual_router_id 1
    同一NW内でユニークな数値を設定
    詳しく覚ええてるいないが、数値に上限があったはずなので、
    自分で管理して1から付けたほうが良い
    -プライオリティ150
    MASTER:150のサーバが死んでBACKUP:100に移動した場合
    MASTERを -advert_int 1 生死同じ目2秒であり、IPがMASTERで行ってます。priority
    がBACKUPするとだと移動しません。

Firefoxのe10sを有効化してみた

0

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

e10sとはElectrolysisの略で、Firefoxのマルチプロセス機能のことです。 安定性の向上、マルチコアプロセッサを活用したパフォーマンスアップやセキュリティの強化等のメリットがあります。 e10sの歴史と有効化方法、その効果についてご紹介します。

e10sの歴史

e10sは影響範囲の大きさから、有効になる条件を厳し目に設け、段階的に対象ユーザを広げていく計画となっています。

Firefox 48 (2016/8/1)

  • アドオンをインストールしている場合は対象外
  • 近々サポート対象外となるOS(Windows XPなど)は対象外

Firefox 49 (2016/9/19)

  • e10sと互換性が確認された少数のアドオンのみを利用している環境が対象

Firefox 50 (2016/11/7)

  • WebExtensionsベースの拡張機能またはホワイトリスト掲載の従来型アドオンがインストールされている環境が対象

Firefox 51 (2017/1/24)(←2017/1/27現在はここ)

  • ホワイトリストの拡大

Firefox 52 (2017/3/7)

  • ホワイトリストの拡大

Firefox 53 (2017/4/18)

  • 完全実施。初期設定においてe10sが有効化される

Firefox 51でかなり条件が緩和され、e10sを有効化できる状況になってきました。

e10s有効化方法

e10sは設定で強制的に有効化することもできますが、動作が不安定になるためあまりオススメできません。
2017/1/27現在、最新バージョンのFirefox 51では大分ホワイトリストのアドオンが増えているため、非対応のアドオンを無効化することで、e10sを有効にする方法をご紹介します。
※以下は、Mac OS X 10.11での方法ですが、Windows等もほぼ同じかと思います。

まず、現在e10sが有効化されているかどうかを確認します。URLバーに以下を入力してください。

about:support

表示されたトラブルシューティング情報の「マルチプロセスウィンドウ」の値を確認し、

  • 「1/1(デフォルトで有効)」となってる場合は有効化されています。
  • 「〜無効」となっている場合は有効化されていません。

無効になっている原因は、インストールしているアドオンがホワイトリストに入っていない可能性が高いです。

その場合「Add-on Compatibility Reporter」を使い、各アドオンの対応状況を確認します。

Add-on Compatibility Reporter – mozzilla

Add-on Compatibility Reporterインストール後、Firefoxのアドオン一覧の各アドオンに以下のメッセージが表示されるようになります。

enter image description here
  • Compatible with mutiprocess.:マルチプロセス対応
  • Not compatible with multiprocess.:マルチプロセス非対応

「マルチプロセス非対応」のアドオンをすべて無効にして再起動すれば、e10sが有効化されます。
※マルチプロセス非対応でもe10sの有効化に影響がないアドオンもあるようです。

e10sの効果

さてe10sが有効化されてみての効果(違い)ですが、

  • about:supportのマルチプロセスウィンドウの値が「有効」になった
  • アクティブモニタのFirefoxのプロセスが2つ(FirefoxとFirefox Web Content)に分かれた
  • トータルでのメモリ使用量は少し増えたが(1.3倍くらい)、レスポンスは明らかに改善している(e10s無効の頃は大体1.2GB超えた辺りから重くなって、再起動で対処してた)
  • 大量のタブを表示しても切り替えが早い
  • マルチプロセス対応になっているアドオンでも正しく動作しないものがある(私の場合、Secure Loginが動かなくなった)

今後、Firefox 53で完全にe10sが有効化されたあとは、contentプロセスの複数化、サンドボックス化を予定しているそうです。
さらなるパフォーマンスアップに期待です。

参考サイト

railsでflotを使って日々の胸のサイズをグラフにしてみた

0

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

巨乳になりたい。 巨乳になりたいので、まずは胸のサイズを毎日計測してグラフ化しようと思いました。(レコーディングダイエット的な。レコーディング巨乳)
グラフ描画用のライブラリは数ありますが、中でも機能的で様々なグラフを描画できるflotを使い、railsでグラフ描画をしてみました。

まずはflotをインストールします。

で、

controllerに

def kyonyu_size
  @kyonyu_size = Size.all
end

(DBには胸のトップサイズ・アンダーサイズが入っています)

viewに

td 
   div (id = "placeholder"
     data-kyonyu-top = "#{@kyonyu_size.top.to_json}"
     data-kyonyu-under = "#{@kyonyu_size.under.to_json}"

app/assets/javascript/admin/kyonyu_sizes.coffee に

class AdminKyonyuSize
  data_object = [
  {
    label: [],
    color: "blue",
    data: [],
    points: { show: true },
    lines: { show: true },
    hoverable: true
  }

  {
    label:[],
    color: "orange",
    data: [],
    points: { show: true },
    lines: { show: true },
    hoverable: true
  }
]

day_label_formatter = (val, axis) -> val + "日"

kyonyu_size: ->
  placeholder = $("#placeholder")
    data_object[0].label = "トップ"
    data_object[1].label = "アンダー"
    data_object[0].data = placeholder.data("kyonyu-size")
    data_object[1].data = placeholder.data("kyonyu-size")

(日毎のトップとアンダーのサイズをグラフにしていきます)

app/assets/stylesheets/admin/kyonyu_size.scss に

.admin_kyonyu_size {
  /* グラフ領域の高さ */
  [id^="placeholder"] {
    height: 300px;
  }
  .center-bold {
    text-align: center;
    color: #000000;
    font-weight: bold;
  }

}

app/assets/javascript/admin/kyonyu_sizes.coffee にオプション追加

options = {
  xaxis: {
    tickSize:1
  }
  yaxis: {
    min: 0,
    minTickSize: 1,
    tickFormatter: (val, axis) -> val + "cm"
  },
  grid: {
    show: true
    backgroundColor: "white",
    hoverable: true,
    autoHighlight: false
  }
}

(グラフにマウスオーバーすると何センチか教えてくれる)

色々と抜け漏れがありそうですがこんな感じです。下はイメージ図。

イメージ図

見事なスイカップになりましたね。どうもありがとうございました。

ブルーライトの影響って?

0

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

ブルーライトの有害性など、実際どこまでがホントなのか調べてみました。

スマートフォンやパソコンから出る青い光「ブルーライト」。
この光が人体にどんな影響を与えるか、いまいち知っているようで知らないので調べてみました。

調べる前のイメージは「なんとなく目が疲れそう」位の認識しか持っていませんでしが、
ブルーライトの浴び過ぎは目の疲れだけではなく、睡眠に影響を与えたり網膜への傷害などが懸念されていることが分かりました。

そもそもブルーライトとは?

ブルーライトとは、波長が380~500nmの領域にある青色光のことです。
ヒトの目で見ることのできる光=可視光線の中でも、もっとも波長が短く、強いエネルギーを持っています。
太陽光や白熱灯にもブルーライトは含まれますが、パソコンやスマートフォンなどのLEDディスプレイやLED照明には、特に多く含まれています。

ブルーライトが人体に与える影響とは?

青い光は散乱しやすいため、ピントを合わせようと目を酷使する為、目に掛かる負荷が大きい。
一生懸命ピントを合わせようとする分、目に余計な負荷がかかり、疲れ目になりやすいと言われています。

夜、寝る前に、パソコンやスマホなどに熱中して、
ブルーライトを目に浴びすぎると、
その事が“不眠症などの睡眠障害”を引き起こす可能性があります。

寝る前にパソコンやスマホなどを使うと、
デジタル機器の液晶画面から出ているブルーライトによって、
「眠くなるホルモン(メラトニン)」の生産量が低下し、
その結果、目がさえてしまう、といった事になる可能性があるためです。

パソコンやスマホなどを使用する事によって、
夜、ブルーライトを目に浴びすぎると、
体内時計(サーカディアンリズム)や自律神経が乱れてしまい、
なかなか寝つけなくなったり、 翌朝、起きるのが辛くなったりしてくる可能性があります。

ブルーライトは悪いことだけなの?

しかし、ブルーライトは人体に悪い影響だけを与えるものではありません。朝にからだが目覚め、夜になると眠くなる周期を「サーカディアンリズム」といいます。
朝にブルーライトを含んだ太陽光を浴びることはそのリズムを整える効果があります。

メラトニンには、睡眠だけでなく抗酸化作用もあり
細胞の新陳代謝や病気の予防にも効果をもつといわれています。

光刺激にはメラトニンだけでなく、様々なホルモン分泌とも関係しており
自律神経系や脳への影響、また長寿遺伝子の生体リズムとの関係も注目されているそうです。

ブルーライトをカットするために

すぐにできる方法では

  • パソコンやスマホなどの液晶画面の色の設定を変える。
  • パソコンやスマホなどの画面から出るブルーライトを専用メガネやフィルムでカットする。
  • 日中はしっかりと太陽光を浴びる。

まとめ

ブルーライトには「有害」と「有益」の両面があるため、
ブルーライトとの付き合い方は

日中、外を歩く時などは 「ブルーライトをカットする眼鏡」を使用しない。
パソコン・スマホなどを長時間、使用する場合には、
「ブルーライトをカットする眼鏡」等を使用して目の疲労を軽減させる。

睡眠の妨げにならない様に夜、寝る直前には、なるべくパソコン・スマホなどを使用しないようする。

以上がブルーライトとの上手い付き合い方だと思われます。

[macOS Sierra] ssh接続時のkeychain/agentへのパスフレーズ保存の挙動が変わった

0

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

macOS Sierraでの ssh接続時のkeychain/agentへのパスフレーズ保存の設定方法とkeychainに保存したパスフレーズの削除方法について

背景

今回開発環境のmacOSのバージョンUPを行ったのですが、
ssh接続の際公開鍵認証のパスフレーズ入力を求めるポップアップダイアログが表示されなくなり
コンソール上に直接パスフレーズを入力する挙動に変わりました。
接続のたびにパスフレーズを入力することになり使い勝手が悪くなるため、解決策を調べてみました。

解決策

これはmacOS Sierraからの仕様変更とのことですが、
$HOME/.ssh/configにて
keychainへの追加とagentへの追加のコントロールができるようです。

私が設定したのは以下

Host *
  UseKeyChain no #keychainには保存しない
  AddKeysToAgent yes #agentには登録する

これで再起動するまでは一度入力したパスフレーズが記憶されます。
セキュリティを考慮しkeychainにはパスフレーズは保存していません。

keychainに保存したパスフレーズの削除

keychainに保存したパスフレーズは以下で削除できるようです。

cd ~/Library/Keychains/<UUID>
sqlite3 keychain-2.db 'delete from genp where agrp="com.apple.ssh.passphrases"'

今回確認した環境

OS: macOS 10.12.2

当然ながら公式情報ではありませんので実施については自己責任でお願いします。

ruby で rsa暗号化した文字列を jsで復号する

0

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

データを暗号化することがいろいろな理由で必要となり試したのでメモします。 暗号方式は rsa を使います。公開鍵で暗号化して秘密鍵で復号します。 ※ 私の試したところだと秘密鍵で暗号化すると復号できませんでした。

環境

ruby は openssl と base64 を使います。
※ require すれば使えるはず。

javascript は jsencrypt.js を使います。
※ https://github.com/travist/jsencrypt

ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
CentOS Linux release 7.1.1503 (Core)

bashでしておくこと

秘密鍵を作ります。
ssh-keygen を使うとデフォルトで
~/.ssh/ ディレクトリに
id_rsa と id_rsa.pub が作成されます。秘密鍵と公開鍵です。
秘密鍵の中身はそのまま使えますが、公開鍵はそのままだと今回の用途では使えないので pem フォーマットにします。
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/pem
pem の中身を公開鍵として使います。

rubyでの暗号化

# ライブラリの読み込み

require ‘openssl’
require ‘base64’

class Encryptor
attr_accessor :pub, :public_key
def initialize
# pemフォーマットの公開鍵ファイルの内容を取得
self.pub = File.read(ENV[‘HOME’] + ‘/.ssh/pem’)
# 鍵をOpenSSLのオブジェクトにする
self.public_key = OpenSSL::PKey::RSA.new(pub)
end

# 引数 str を暗号化した結果を返す
def enc(str)
# str に与えた文字列を暗号化します。
Base64.encode64(public_key.public_encrypt(str)).delete(“\n”)
end
end

javascriptでの復号

// jquery と jsencrypt.js を読み込んでおく。

crypted = ‘暗号化された文字列’;
pricate_key = ‘id_rsaファイルの中身のテキスト’;
crypt = new JSEncrypt();
crypt.setPrivateKey(private_key);

// decrypted に復号された文字列が代入される
decrypted = crypt.decrypt(crypted);

参考

jsで暗号化しrubyで復号する
http://qiita.com/shigekid/items/60d3387de6a804bc38b9

CryptoJS
https://jsfiddle.net/hibara/qzono8jb/

perlで暗号化し js で復号する。
http://hatyuki.hatenablog.jp/entry/2013/09/04/151142

MySQL : PostgreSQL コマンド対応

0

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

MySQL と PostgreSQL のコマンド比較

データベース中にあるテーブルを表示

### MySQL ###
SHOW TABLES;

### PostgreSQL ###
\d

テーブル内容表示

### MySQL ###
DESC table_name;

### PostgreSQL ###
\d table_name

※MySQLのDESCはDESCRIBEの省略

データベース表示

### MySQL ###
SHOW DATABASES;

### PostgreSQL ###
\l

データベース切替

### MySQL ###
USE db_name;

### PostgreSQL ###
\c db_name

拡張表示

### MySQL ###
SELECT col_name FROM table_name \G

### PostgreSQL ###
\x
SELECT col_name FROM table_name;

※PostgreSQLの「\x」は1度実行する毎に拡張表示のON/OFFを切り替える

終了

### MySQL ###
exit

### PostgreSQL ###
\q

NAT 経由でインターネットアクセスする構成でのACL設定について

0

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

VPC で環境を構築しsubnetをpublic/privateと分離した構成とする場合、privateなsubnetからのインターネット側へのアクセスは基本的にNAT経由となる。 そのような構成のネットワークを組んだ際に外部のNTPサーバと同期させる設定でハマったので設定方法について考え方を整理してみた。

環境

OS及びNTPサーバ/クライアントは以下のとおり。

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)

$ chronyd --version
chronyd (chrony) version 2.1.1 

ネットワーク構成

以下のような構成を想定。

https://gyazo.com/e0e1d6fb247de73861603b404e52d8ee

Privat Subnet 内に EC2 インスタンスを配置。
このインスタンスに NTPクライアント/サーバ(Chrony)を立ち上げてインターネットで公開されているNTPサーバと同期を取る設定を行う。

chrony の設定

ネットワークACLで設定し易くするため NTPクライアントとして使用するポートを固定する(以下の設定を行わない場合は1024以上のエフェメラルポートが使用される)

エディタで /etc/chrony.conf を開き以下の行を追加する。

# client port (udp)
acquisitionport 1123

設定の変更後は chronyd の再起動が必要だが、ACLの設定の後にも再起動が必要なので後述。

参考: chrony – Manual for version 2.3

ネットワークACL

NTPに必要なネットワークACLの設定は以下のとおり。

Public Subnet 側

インバウンドルール

プロトコルポート送信元許可拒否備考
UDP12310.0.0.0/16許可VPC内からのNTPを許可
UDP1024-655350.0.0.0/0許可NATに対するNTPのレスポンスを許可

アウトバウンドルール

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可NATからVPC外のNTPサーバへのリクエストを許可
UDP112310.0.0.0/16許可private subnet のNTPクライアントへのレスポンスを許可

Private Subnet 側

インバウンドルール

プロトコルポート送信元許可拒否備考
UDP11230.0.0.0/0許可インターネット側から(NAT経由)のNTPのレスポンスを許可する

アウトバウンドルール

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可インターネットのNTPサーバへのリクエストを許可

動作状況の確認

ACLの設定を変更した場合 chronyd を再起動する。(もしかしたら不要かもしれないが再起動しないとすぐに同期が行われなかった)

$ sudo systemctl restart chronyd

再起動したら以下のコマンドでNTPサーバとの同期の状況を確認する。

$ chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- y.ns.gin.ntt.net              2   6     7     1  -2034us[-2839us] +/-  135ms
^- hachi.paina.jp                2   6     7     1  -4583us[-5388us] +/-   23ms
^* routerida1.soprano-asm.ne     3   6    17     0  -5855ns[-1517us] +/-   13ms
^- jp.f2tec.de                   3   6     7     1  +4904us[+4099us] +/-   64ms

先頭から2文字目が * になっているサーバが同期中のサーバを表している。このようになっていればNTPサーバとの同期が行われている。

設定の解説

設定内容を解説するにあたって、この構成で NTP が使用するポートを整理すると以下の図のようになる。

https://gyazo.com/5b470e494bdaf65a3f73cfa1802c1ede

Public Subnet 側のネットワークACL

Internet <–> VPC(Public) では NTPサーバ側(インターネット側)のポートが 123、NAT Gateway 側(VPC側)のポートが エフェメラルポート(1024〜65535の範囲のいずれかの番号)となる。
よって、Public Subnet 側のインバウンド/アウトバウンドのルールは以下のようになる。

インバウンド(a)

プロトコルポート送信元許可拒否備考
UDP1024-655350.0.0.0/0許可NATに対するNTPのレスポンスを許可

アウトバウンド(b)

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可NATからVPC外のNTPサーバへのリクエストを許可

次に VPC(Public) <–> VPC(Private) の設定について見てみる。
この場合、NAT Gateway 側(Public)のポートは123、Private側のポートは1123(前述の/etc/chrony.confで設定したポート番号)となる。
よって、 Public Subnet 側のインバウンド/アウトバウンドに必要なルールは以下のようになる。

インバウンド(c)

プロトコルポート送信元許可拒否備考
UDP12310.0.0.0/16許可VPC内からのNTPを許可

アウトバウンド(d)

プロトコルポート送信先許可拒否備考
UDP112310.0.0.0/16許可private subnet のNTPクライアントへのレスポンスを許可

Public Subnet で必要な設定は上記のとおりとなる。

Private Subnet 側のネットワークACL

次に Private Subnet 側の設定を見ていくが、ここの設定については先に「VPC(Public) <–> VPC(Private) 」の設定と送信先/送信元を逆の視点で見た場合の設定を行えば良い。

よって以下のようになる。

インバウンド(e) ← (d)に対する逆

プロトコルポート送信元許可拒否備考
UDP11230.0.0.0/0許可インターネット側から(NAT経由)のNTPのレスポンスを許可する

アウトバウンド(f) ← (c)に対する逆

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可インターネットのNTPサーバへのリクエストを許可

以上で設定完了。

まとめ

最後にポイントをまとめると…

  • VPC内及びNATがインターネットとの通信で使用する UDP のポート123を許可する。
  • NAT がインターネット側との通信で使用するエフェメラルポートを許可する。
  • VPC内でNTPクライアントとの通信で使用するポート(/etc/chrony.confのacquisitionportに割り当てたポート)を許可する(※)

※acquisitionportを割り当てていない場合はエフェメラルポートとなるはずなのでそれを許可する設定とする必要がある。

自分がハマった点は、2番めの「NATがインターネット側との通信で使用するエフェメラルポート」の存在を見落としていて、ntpdで同期が行われないという現象でした。
また、RHEL7系ではこれまでの ntpd に代わって chrony がデフォルトになっている点も知らず、ntpdがうまく動かない(自動起動に設定していてもchronyが起動すると停止してしまう)という点でした。

RHEL(CentOS)6系から7系でいろいろ変わってるので、ほかの違いも見直しておく必要ありますね。。。

参考

FastjsonのNULLの挙動設定

0

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

JavaのJSONライブラリにFastjsonというものがあります。 今回はこのFastjsonでレスポンスにnullが含まれる場合の挙動を設定する方法をご紹介します。

Fastjsonとは

まず、Fastjsonについて簡単にご説明します。
Fastjsonは、JavaのオブジェクトをJSON形式に変換したり、逆にJSONをJavaオブジェクトに変換できる、JSONライブラリです。

Fastjson – GitHub

Fastjsonはオープンソースのライブラリで、公開しているのは中国のB2Bマーケット運営で有名なアリババ。

以下の記事によると、他のJavaのJSONライブラリと比較しても高速に動作するようです。

Gson vs Genson vs Fastjson

使い方

では簡単にJavaオブジェクトをJSON形式に変換する方法をご説明します。
上記のGitHubのリンクからダウンロードするか、Mavenの場合はpom.xmlに以下のように記述してインストールします。

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.21</version>
</dependency>

そして、Javaのオブジェクトを渡してあげると、

JSON.toJSONString(hogeForm);

JSON形式で出力してくれます。簡単です。

{
   name: "hoge"
}

nullの挙動設定

では本題のnullの挙動設定です。
デフォルトでは name が null の場合、nameの要素自体が出力されません。

{
}

しかし、nullでも要素は表示しないといけない場合もあります。
そんな時、以下の引数を渡してあげます。

JSON.toJSONString(hogeForm, SerializerFeature.WriteMapNullValue);

すると、

{
   name: null
}

name要素がnullで表示されました。

最後に

上記のGitHubのWikiやIssueを見ると、他にも色々オプションがありそうです。
また機会があれば調べてみたいと思います。

Dockerを試してみる(3)

0

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

Dockerを試してみる(2)の続きです。 今回は複数のコンテナを楽ちんに管理したい〜というツールを試してみました。

■docker-compose

コンテナを複数起動すると管理が煩雑になったり、コンテナの起動順番を気にしながらとか面倒なことが多くなります。また、runでコンテナを実行する際もコマンド引数を覚えたりするのが大変で結局シェルスクリプトを書いたりとか。

そんな面倒を解決してくれるのが、docker-compose というコマンドです。

docker-composeは、Windows/macOS版の docker-toolbox では利用可能になっています。
標準でインストールされていない場合は、docker公式のドキュメント に従いインストールします。

docker-composeの流れ

  1. docker-compose.yml を編集
  2. docker-compose up を実行
  3. docker-compose downでコンテナ終了&削除

前提

railsのサンプルアプリを作って、その直下に Dockerfile を配置します。
今回はクイックスタートを参考に、ruby自体もコンテナを使います。

$ mkdir myapp && cd myapp
$ vi Dockerfile
$ vi Gemfile
$ touch Gemfile.lock
$ vi docker-compose.yml
$ docker-compose run web rails new . -B --force
$ ls -l
$ sudo chown -R myuser:mygroup
$ vi Gemfile
rubyracerのコメントを外す
$ docker-compose build

Dockerfile,Gemfileはこちらを参考

docker-compose.yml

設定ファイルです。railsでおなじみのYAML形式です。

version: '2'
services:
  web:
    build: .
    command: bundle exec rails s -b 3000 -b '0.0.0.0'
    ports:
      - "3000:3000"
    volumes:
      - .:/myapp
    links: 
      - db
  db:
    image: mysql
    environment:
     - MYSQL_ALLOW_EMPTY_PASSWORD=1

アプリ起動

database.yml のホストを db に設定します。その後に次のコマンドを実行します。

$ docker-compose up   # -d オプションを付けるとバックグラウンド実行
$ docker-compose exec web rake db:create

ブラウザで、開くといつもの画面が表示されます。
http://(docker-machine ipのアドレス):3000/

enter image description here

メール認証が発生する登録を目標に設定する場合の注意点|Googleアナリティクス|ユニバーサルアナリティクス

0

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

こんにちは。今回はメール認証が発生する登録を、Googleアナリティクスの目標に設定する場合における注意点をご紹介します。

多くのサイトで見られるメール認証

最近、会員登録時にメール認証(アクティベーション)を取り入れているWEBサイトを多く見かけるようになりました。

メールアカウントは「所有物認証」と言い、本人にしか所有していないものを利用した認証方法のひとつです。

セキュリティ強度も比較的高いため、数多くの大手WEBサイトで取り入れられています。

また、メール認証だけを先に済ませてもらい、大きな手戻りが生じないことを保証した上で情報入力に移ってもらうという心理的なメリットもあります。

enter image description here

メール認証がある登録までのプロセスと目標の場所

では、メール認証がある登録を行うユーザーの一連のプロセスを見てみましょう。

enter image description here

このようなプロセスの場合、最後の「⑧登録完了」を目標設定に指定するかと思います。

もちろん「⑧登録完了」を設定するのは間違いではありません。
しかし、もう一か所設定すべき場所があります。
それは「④メール認証完了」です。

なぜ「④メール認証完了」を設定するのか

「⑧登録完了」を目標に設定したとします。

この目標を達成したセッションの参照元はどこか、と考えるとユーザーの動きを見る限りでは「①Google検索」です。
しかし、Googleアナリティクスのレポートでは「⑤Yahooメール」が目標に貢献した参照元として記録されます。

なぜ、参照元が「Yahooメール」になってしまったか。
それは、Web上のメーラーから流入した場合、参照元情報に「mail.yahoo.co.jp」という値を付与されてしまうからです。

ここでセッションの定義を思い出してください。

「3.特定のデータ情報が変わるとき」
utm_source、utm_mediumは流入元情報を指すデータです。
要は、流入元が変わるタイミングでもセッションは再定義されます。
参照「Googleアナリティクスのセッション定義 」

Web上のメーラー「Yahooメール」をプロセスの間に挟んでしまった場合、参照元情報が「mail.yahoo.co.jp」に上書きされ、一回の行動内(1セッション内)おいて本来の参照元「Google検索」と目標との紐づけができなくなります。

このように「⑧登録完了」を目標に指定すると、一部の参照元情報が想定とは異なる値で取得されてしまうという事象が発生します。

これを回避するために、「④メール認証完了」の時点での参照元は「Google検索」になるので、「④メール認証完了」合わせて目標にしておくことをお勧めします。

本来の参照元を計測する場合もある

■ダウンロード型のメールソフト

「⑤ Yahooメールにアクセスし認証用メールを確認」

上記のプロセスが、仮に【ダウンロード型のメールソフトで認証用メールを確認】したとします。(Thunderbirdやoutlookなど)

ダウンロード型のメールソフトは参照元情報を持っていません。
参照元情報が空の状態ですので直前の参照元情報を引き継ぎます。
(「⑧登録完了」の参照元が「Google検索」経由として計測されます)

例外

■httpsからhttpへ

httpsページからhttpページのリンクは参照元情報を渡しません。
(ブラウザ側の仕様としてリファラーを送信しないようになっている)

YahooメールやGmailは基本的にhttpsなので、メールのリンク先のURLがhttpの場合はdirect経由として計測されます。

ただしメール認証を目的とするURLであればhttpsであるはずなので、このような状況は稀かと思います。

「マルチチャネルレポート」の存在

「④メール認証完了」を予め目標設定しておくと集客レポート等のコンバージョン指標を表示する際に便利ですが、マルチチャネルレポートを使えば正しく参照元を評価することが可能です。

enter image description here

マルチチャネル レポートはコンバージョン経路に基づいて生成されます。コンバージョン経路とは、コンバージョンや販売に至るまでの 90 日間 にあった一連の接点(チャネルからの参照やクリック)です。
参照「マルチチャネルデータについて」

上記の通り、最大90日間(期間指定可能)の中でのコンバージョン経路を追うため、例え途中で参照元が上書きされても、間接的に最も効果の高い参照元の抽出が可能なレポートになっています。

じゃぁ「④メール認証完了」を目標にする必要ないのでは?と思うかもしれませんが、マルチチャネルレポートはカスタマイズがあまりできません。

単純に参照元分析する上ではマルチチャネルレポートで十分ですが、色々な指標を組み合わせるカスタムレポートや、集客レポート上に表示するには「④メール認証完了」を目標に設定しておくと後々に便利だと思います。

まとめ

メール認証がプロセス内にある場合は、参照元にノイズが発生している可能性があります。

マルチチャネルレポートであれば、正しい参照元の評価は可能ですが、マルチチャネルレポート自体のカスタマイズが難しいため色々な指標を組み合わせて分析する場合には不便です。

メール認証が発生する登録では、完了数だけをカウントするための「⑧登録完了」と、参照元を評価するための「④メール認証完了」の2か所を設定しておくことをお勧めします。

enter image description here

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

Googleアナリティクス「ユーザー分布」「インタレストカテゴリ」とDoRubyデータの紹

0

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

こんにちは。 今回はGoogleアナリティクスレポート「ユーザー分布」「インタレストカテゴリ」の取得方法・レポート紹介と、本サイト「DoRuby」の実データをご紹介します。

ユーザー分布とインタレストカテゴリ

まずは各レポートの紹介から。

ユーザー分布とは
ユーザーの年齢や性別を確認することができます。

インタレストカテゴリとは
オンラインでの活動や購買行動から判断されるユーザーの興味や関心についての情報を確認することができます。

レポート「ユーザー分布」「インタレストカテゴリ」を有効にする方法

この2つを設定すると有効化されます。

1.プロパティの広告レポート機能を有効にする
enter image description here

2.ユーザーの分布とインタレスト カテゴリに関するレポートをビューで有効にする
enter image description here

ユーザー属性データの収集元

たまに「何のデータを元にこれらの情報を出しているの?」と聞かれるのですが、
Googleアナリティクス公式のヘルプページに具体的な収集元・条件が記載されています。

1.サードパーティの DoubleClick Cookie

  • 対象: ウェブブラウザのアクティビティのみ
  • 条件: Cookie が存在すること
  • 結果: アナリティクスは Cookie に含まれるユーザー属性とインタレスト カテゴリに関する情報をすべて収集します。

2.Android の広告 ID

  • 対象: アプリのアクティビティのみ
  • 条件: Android アプリ内のアナリティクス トラッキング コードを、広告 ID を収集するように更新すること
  • 結果: アナリティクスは ID に基づく識別子を生成します。この識別子には、ユーザーのアプリのアクティビティに紐付けられた、ユーザー属性およびインタレスト カテゴリ関連情報が含まれています。

3.iOS の広告主向け識別子(IDFA)

  • 対象:アプリのアクティビティのみ
  • 条件:iOS アプリ内のアナリティクス トラッキング コードを、IDFA を収集するように更新すること
  • 結果:アナリティクスは IDFA に基づく識別子を生成します。この識別子には、ユーザーのアプリのアクティビティに紐付けられた、ユーザー属性およびインタレスト カテゴリ関連情報が含まれています。

https://support.google.com/analytics/answer/2799357?hl=ja#where

上記いずれかの情報が無い場合は、情報が収集されずレポートにも反映されません。
収集データが不足する場合は、表示されている情報がデータ全体の何パーセントに対応するものかがレポート上に記載されるようになります。(「年齢 – 合計セッションの 41.39%」など)

多くの方が行っているウェブページの解析の場合、DoubleClickのCookieで収集されることになります。
では、DoubleClickのCookieがどのタイミングで付与されるのかというと、検索時やウェブサイト閲覧時に広告が表示、もしくはクリックされた場合に、発生元のブラウザにCookie情報が送信されます。ブラウザがCookieを受け入れた場合、Cookieはブラウザに保存されているのです。

このこの保存されたCookie情報を元に、アナリティクスは「ユーザー分布」「インタレストカテゴリ」に関する情報を収集・レポート化するという仕組みです。

知らない間に色々収集されている・・・ということですね・・・!

DoRubyのユーザー分布

それでは早速、本サイト「DoRuby」のデータを見てみましょう。
直近のデータです。
enter image description here

圧倒的に男性、しかも若者が多いですね。
IT業界ならではのユーザー属性ではないでしょうか。

逆を言えば、女性のアクセスが少ない!

私も含めこの業界で働く女性も増えていると思うので、
仮に今後アクセスを増やす場合、そういった女性エンジニアならではの記事や
例えば女性が多いデザイナー関連記事を用意することで
より多くの方に見てもらえるサイトになるかもしれません。

DoRubyのインタレストカテゴリ

インタレストカテゴリは以下の3つの軸でユーザーのカテゴリを確認することができます。

アフィニティカテゴリ:
 訪問者のライフスタイルや広範囲な嗜好
購買意志の強いセグメント:
 積極的にオンラインでリサーチし、購入意向を示しているユーザーセグメント
 (リピート間隔やアクセス頻度などで判定しているらしい)
その他カテゴリ:
 特定コンテンツの消費性向

直近の「DoRuby」のデータはこんな感じです。
enter image description here

■アフィニティカテゴリ(上位3件)

  1. ハイテク好き(5.38%)
  2. ビジネスの専門家(4.19%)
  3. 写真愛好家(3.96%)

■購買意志の強いセグメント(上位3件)

  1. ソフトウェア/ビジネス生産性ソフトウェア(6.06%)
  2. ビジネスサービス/ビジネステクノロジー/ Webサービス/ Webデザイン&開発(4.84%)
  3. ビジネスサービス/ビジネステクノロジー/エンタープライズソフトウェア(4.47%)

■その他カテゴリ(上位3件)

  1. インターネット&通信/ Webサービス/ Webデザイン&開発(7.14%)
  2. コンピュータ、電化製品/ソフトウェア/オペレーティングシステム/ Linux&Unix(6.72%)
  3. コンピュータ、電化製品/エンタープライズテクノロジ/データ管理(5.46%)

ITに関する技術情報を取り扱っているので、それに関連するカテゴリの訪問者が多いようです。

アフィニティカテゴリに「写真愛好家」がランクインしていますね。
レンズやカメラ、撮影の記事はないので、ちょっと謎でしたが
じつは弊社には写真好きの社員が何人もいます。

これは私の感覚ですが、IT系はメカニックなカメラも好き、ということかもしれません。

本サイト「DoRuby」にはカメラ撮影関係記事は無いので、
もしかしたら、これらの記事を投稿すると意外とページビューを集められるかもしれませんね。

以上、ユーザー分布・インタレストカテゴリと本サイトDoRubyデータの紹介でした。

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

スマホアプリのHTTPS通信をBurp Suiteで確認

0

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

今回は、スマートフォンアプリ等のHTTP、HTTPS通信をWi-Fi接続から、プロキシツールBurp Suiteを経由させることによって通信内容を確認します。脆弱性診断の為の方法ではありますが、サーバサイドやアプリの開発にも利用できるかと思います。

はじめに

Burp Suiteは、ウェブアプリケーションの脆弱性検査を行うことができるツールです。利用の仕方により不正アクセス行為と判断される可能性があります。またサービス停止やデータの破損が起こる場合もありますので事前にバックアップを行うなどしてください。そして必要に応じて管理者の許可を得て利用してください。

概要

ノートパソコンの無線LANをAPモードにして、通信を経由させる方法などもありますが、環境によって設定が複雑な場合や、うまく動作しないことがあります。今回はプライバシーセパレータなどの設定されていないWi-Fiルータにスマートフォン接続。スマートフォンの通信を、Wi-Fiルータ経由で接続できるPCにプロキシツールを用意し内容を確認します。

前回は、プロキシツールOWASP ZAPを利用する投稿をしましたが、今回はBurp Suiteを利用してみます。英語のメニューがわかりにくい場合は、Burp Suiteを日本語化する方法も試してください。

また以前に投稿した、Kali Linuxには、Burp Suiteの他にも、OWASP ZAPやwiresharkがインストールされています。
wiresharkなどで別のプロトコルの通信など詳細に確認を行うことも可能です。

Burp Suiteについて

Burp Suiteは、PortSwigger社が開発を行っているプロキシツールで、JAVAで作成されているためWindowsやMac、Linuxなどの環境で動作します。Burpは、日本語の処理など難がある部分もありますが、手動で脆弱性診断を行う場合に有用なツールです。Free EditionとProfessional Editionがあり、今回の内容はFree Editionでも行うことができます。

確認機種

参考までに今回は下記のような環境で確認しています。

  • macOS Sierra
  • Burp Suite 1.7
  • iphone 7 ios10
  • Android 4.2.2

Burp Suiteの設定

まず通信を経由させるPCでプロキシツールBurp Suite起動します。Burp Suiteのデフォルトの設定では、自身を起動しているローカルPCからの接続のみを許可しているので、他の端末からも接続を受け付けるよう設定を変更します。
設定箇所は、ProxyタブのOptionsタブ内Proxy Listenersで、デフォルトのものを選択しEditからBind to addressをAll interfacesに変更するなどします。
デフォルトのものを変更せずに、Addでポートを変えたものや、受け付けるインターフェースを変えたものを用意し切り替えるという方法にすることも可能です。(もちろん同じポートに複数設定はできません)
また、このPCのIPアドレスを確認しておきます。
Burp Suite ポート設定

ios端末の設定

Burp Suiteを起動しているPC経由で通信を行うように、ios端末を設定します。設定、Wi-FiでプロキシPC側と通信が行えるAPと接続を行います。HTTPプロキシを手動に設定し、プロキシPCのIPアドレスとBurp Suiteで設定を行ったポート番号を指定します。
ios端末 プロキシ設定

Burp Suiteのinterceptがoffになっていることを確認し、端末のsafariなどのブラウザで通信が行えるか確認します。
次にSSL通信の内容を確認できる状態にするための設定を行います。端末のブラウザで http://burp/ を表示します。
表示がされない場合は、プロキシPCのIPアドレスやポートを指定して接続してみてください。
右上のCA certificateをタップし、端末に証明書を導入します。
ios端末 Burp ios端末 証明書

android端末の設定

android端末でもios端末と同様のことを行いますが、OSや機種によって設定方法が異なる場合や、そもそも設定変更できる部分がないものも存在するので注意が必要です。
Wi-Fiで長タップ?ネットワークの変更を選択します。プロキシホスト名、プロキシポートにBurp Suiteが起動しているプロキシPCの情報を入れます。

android端末 wifi設定
android端末 プロキシ設定

端末のブラウザで http://burp/ を表示します。右上のCA certificateをタップし、端末に証明書を一旦内部ストレージにダウンロードします。
設定、セキュリティで、内部ストレージからインストールをタップし、先ほどダウンロードした証明書を導入します。
android端末 Burp android端末 証明書インストール

Burp Suiteで通信の確認

上記の設定をしたうえで、アプリを使い通信を行うと、通信内容がBurp Suiteで確認が行える状態になっています。
ProxyタブのHTTP historyでHTTPS通信が行われているか、内容が取得できているか確認してみてください。
Burp Suite

おわりに

iosアプリは、ATS(App Transfer Security)の有効化が今後必須になるようです、対応のためHTTPS通信の確認が今以上に必要になってくるかもしれません。今回紹介した方法をテストや確認に活用していただければと思います。
以上、スマホアプリの通信をBurp Suiteで確認する方法についての紹介でした。

関連記事など

脆弱性診断サービスなど

弊社、アピリッツではセキュリティ診断サービスを行っております。

下記リンクから内容の確認と、問い合わせが可能です。

http://security.appirits.com/

エンジニア見習いが最初に覚えるべき4つの習慣

0

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

「インターン生と新卒はこの4つだけでも覚えて帰ってね!٩( ᐛ )و」という習慣について。

1.十分に理解していないコマンド(コード)を使わない

初心者はしばしば「どお”じでぞんなごどす”るの”!」と言いたくなるコマンドを実行します。本番環境や共有サーバーで理解してないコマンドを打つのは油田で花火大会するぐらい危険です。ローカル環境でさえオプションも含めてちゃんとコマンドの意味を理解してから実行する習慣が必要です。

unixのコマンドは非対話が基本なので「え? 本当にやってええの? 取り返しつかんで?」とは確認してくれません。crontab -l と crontab -r は全然違います。あぁ! 試しに打とうとしないで!

とにかく「なんでこのコマンド打ったの?」「このオプションはなに?」という質問が来る前提で作業します。同じように目的を達成出来る他のコマンドを使わずに、そのコマンドを選んだ理由まで答えられると尚良いです。業務では「よくわからないおまじない」と言う概念はありません。

2.変更する前に復旧出来るようにしておく

設定を弄ったら開発環境が壊れちゃった……。
一日がかりで直す羽目になったみんなー! 元気ぃー!? (ゝω・)v

変更する前に切り戻し出来るように準備しておくと余計な時間が取られません。設定ファイルの変更前にcpでバックアップを取る、git管理する、仮想環境のスナップショットを作成するなど。

特に環境を作った直後や初心者期間は必ず失敗したり上手く行かなかったりします。死んだ顔でOSを入れ直すのを避けるために復旧手段を定期的に確保しましょう。初心者以外も「今この本番環境のDBを間違えてドロップしたらどうなるんだろう…」といった無害で危険な妄想を日頃からしておくと良いことがあるかも知れません。備えよう。

3.何か変更や作業をしたら意図通りになったか確認する

「もしかして道に迷ってる?」
「今いる位置がわからないから迷ってるかどうかもわからない」

変更したら確認するまでが作業、家に帰るまでが遠足。何か設定の変更をしたり作業を終えたら、次の作業へ移る前に出来るだけ反映されたかどうかを確認します。

これをサボると上手く行かなくなった時に原因の切り分けが難航しがちです。どこまでは上手く行っていて、どこからが上手く行かないのか認識するために確認を適宜挟みましょう。

4.事前に見通しを立ててみる

今から取りかかろうとしている作業を細分化して「どんな作業が必要で」「どれくらい時間がかかりそうか」を考えてみます。最初に見通しを立てる習慣があると思わぬ作業上の障害が予見できたり効率よく進めることが出来ます。

というより、何が必要か大雑把にでも見通しを立てずに作業を始めると手戻りや計画変更、他人の作業待ちが延々と発生します。必要な作業を綿密に洗い出して影響範囲やリスクを調べることが出来れば既に仕事は8割くらい終わっています。実際にコマンドを打ったりコードを書く時間は作業全体で見ると短いものです。

まとめ

4つに共通して言えるのが「業務なら絶対におさえておくべきポイントだけど、業務以外では教わる機会がない」という点ですね。意外にこの辺が言語化されてなかったので今回はこんな記事を書きました。覚えて帰ってね!٩( ᐛ )و

スマホ端末からローカル環境にアクセス(Vagrant編)

0

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

案件によってPCサイトだけでなくスマートフォンサイトの構築も行うことがあると思います。Chromeデベロッパーツールを使ってデザイン確認もできますが、どうしてもスマートフォン端末からしか確認できないことも多々ありますよね。(androidとiOSのアドレスバーの表示方法がそれぞれ異なるので、ヘッダー部分の文字が隠れたり隠れなかったりなどいろんな不具合が出てきます)そこで今回は、Vagrantを使用しスマートフォン端末でローカル環境に接続して確認しなければならない状況があったので、その方法をメモとして残します。(Vagrantがインストールされていることを前提に書きます)

VagrantFileを編集(ポートフォワードの設定)

#Create a forwarded port mapping which allow access to a specific port
#within the machine form a port on the host machine. In the example below,
#accessing "localhost:8080" will access port 80 on the guest machine.
#config.vm.network "forwarded_port", guest: 80, host: 8080
+ config.vm.network "forwarded_port", guest:3000, host:3000 #この行を追加

vagrantを再起動

vagrant reload 

自分のPCのローカルipを調べる

$ ifconfig | grep 192
inet 192.168.24.204 netmask 0xffffff00 broadcast 192.168.24.255

接続確認

スマートフォン端末のブラウザからhttp://192.168.24.204:3000 にアクセスし完了

仮想環境のMySQLを使用するための設定について

0

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

ローカルマシンのホスト側から、仮想環境側のMySQLにアクセスする方法についてまとめます. (仮想環境は, VirtualBoxを利用)

1. 仮想環境の設定

VirtualBox NATの設定で、
PortForwardingの設定を行う

  • HOSTポート: 53306
  • GUESTポート: 3306(ゲストのMySQLポート番号)

2. 仮想マシン側MySQLの設定

VirtualBox のNATは、ゲスト側からのホストIPが 10.0.2.2 に設定されている

そのため、10.0.2.2のアクセスを許可させる必要がある

$ mysql -u <ユーザ名> -p

mysql> use mysql

ユーザの作成
mysql> CREATE USER '<ユーザ名>'@'10.0.2.2' IDENTIFIED BY '<パスワード>';

権限の追加
mysql> GRANT ALL PRIVILEGES ON `<DB名>`.* TO '<ユーザ名>'@'10.0.2.2';
mysql> FLUSH PRIVILEGES;

確認
mysql> SHOW GRANTS for <ユーザ名>@10.0.2.2;

3. ホスト側

Railsアプリケーションでの, database.yml の設定

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: <ユーザ名>
  password: ***
  database: <DB名>
  host: 127.0.0.1
  port: 53306(PortForwarding設定した, HOST側ポート)

以上で、仮想環境へのMySQLに接続が可能になります。
DBを変える場合は, 2の権限の追加を, 変更するDBに対して行います。

【ruby】そうなんだ! 画像の情報を取得するためのgemふたつ

0

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

ユーザーからの画像投稿を扱うシステムを作る場合、画像のサイズや向き、位置情報などを取得したいときがあると思います。

またrubyにおいて画像の情報を取得するgemは様々ありますが、gemごとにどのような違いがあるか分かりません。

そこで特にオーソドックスなgem
・mini_exiftool
・exifr
を使って、下↓の写真の情報を取得してみます。

enter image description here

1. mini_exiftool
・実行ファイル

require 'mini_exiftool'
t = MiniExiftool.new "ファイル名"
p t.to_hash

・出力結果

 {
        "ExifToolVersion"=>10.31,
        "FileSize"=>"2.2 MB",
        "FileModifyDate"=>2016-10-31 18:16:03 +0900,
        "FileAccessDate"=>2016-10-31 18:42:27 +0900,
        "FileInodeChangeDate"=>2016-10-31 18:16:03 +0900,
        "FilePermissions"=>"rw-r--r--", "FileType"=>"JPEG",
        "FileTypeExtension"=>"jpg",
        "MIMEType"=>"image/jpeg",
        "ExifByteOrder"=>"Big-endian (Motorola, MM)",
        "Make"=>"Apple",
        "Model"=>"iPhone 6",
        "Orientation"=>"Rotate 90 CW",
        "XResolution"=>72,
        "YResolution"=>72,
        "ResolutionUnit"=>"inches",
        "Software"=>"10.0.2",
        "ModifyDate"=>2016-10-27 09:44:46 +0900,
        "YCbCrPositioning"=>"Centered",
        "ExposureTime"=>(1/507),
        "FNumber"=>2.2,
        "ExposureProgram"=>"Program AE",
        "ISO"=>32, "ExifVersion"=>"0221",
        "DateTimeOriginal"=>2016-10-27 09:44:46 +0900,
        "CreateDate"=>2016-10-27 09:44:46 +0900,
        "ComponentsConfiguration"=>"Y, Cb, Cr, -",
        "ShutterSpeedValue"=>(1/507),
        "ApertureValue"=>2.2,
        "BrightnessValue"=>7.94202454,
        "ExposureCompensation"=>0,
        "MeteringMode"=>"Multi-segment",
        "Flash"=>"Off, Did not fire",
        "FocalLength"=>"4.2 mm",
        "SubjectArea"=>"1631 1223 1795 1077",
        "SubSecTimeOriginal"=>707,
        "SubSecTimeDigitized"=>707,
        "FlashpixVersion"=>100,
        "ColorSpace"=>"sRGB",
        "ExifImageWidth"=>3264,
        "ExifImageHeight"=>2448,
        "SensingMethod"=>"One-chip color area",
        "SceneType"=>"Directly photographed",
        "ExposureMode"=>"Auto",
        "WhiteBalance"=>"Auto",
        "FocalLengthIn35mmFormat"=>"29 mm",
        "SceneCaptureType"=>"Standard",
        "LensInfo"=>"4.15mm f/2.2",
        "LensMake"=>"Apple",
        "LensModel"=>"iPhone 6 back camera 4.15mm f/2.2",
        "GPSLatitudeRef"=>"North",
        "GPSLongitudeRef"=>"East",
        "GPSAltitudeRef"=>"Above Sea Level",
        "GPSTimeStamp"=>"00:44:46",
        "GPSSpeedRef"=>"km/h",
        "GPSSpeed"=>0,
        "GPSImgDirectionRef"=>"True North",
        "GPSImgDirection"=>190.0831889,
        "GPSDestBearingRef"=>"True North",
        "GPSDestBearing"=>190.0831889,
        "GPSDateStamp"=>"2016:10:27",
        "GPSHPositioningError"=>"25 m",
        "Compression"=>"JPEG (old-style)",
        "ThumbnailOffset"=>2014,
        "ThumbnailLength"=>10251,
        "ImageWidth"=>3264,
        "ImageHeight"=>2448,
        "BitsPerSample"=>8,
        "ColorComponents"=>3,
        "YCbCrSubSampling"=>"YCbCr4:2:0 (2 2)",
        "Aperture"=>2.2,
        "GPSAltitude"=>"73.7 m Above Sea Level",
        "GPSDateTime"=>2016-10-27 00:44:46 UTC,
        "GPSLatitude"=>"35 deg 39' 59.74\" N",
        "GPSLongitude"=>"139 deg 42' 14.82\" E",
        "GPSPosition"=>"35 deg 39' 59.74\" N, 139 deg 42' 14.82\" E",
        "ImageSize"=>"3264x2448",
        "Megapixels"=>8.0,
        "RunTimeSincePowerUp"=>"5 days 21:26:54",
        "ScaleFactor35efl"=>7.0, "ShutterSpeed"=>(1/507),
        "SubSecCreateDate"=>2016-10-27 09:44:46 +0900,
        "SubSecDateTimeOriginal"=>2016-10-27 09:44:46 +0900,
        "ThumbnailImage"=>"(Binary data 10251 bytes, use -b option to extract)",
        "CircleOfConfusion"=>"0.004 mm",
        "FOV"=>"63.7 deg",
        "FocalLength35efl"=>"4.2 mm (35 mm equivalent: 29.0 mm)",
        "HyperfocalDistance"=>"1.82 m",
        "LightValue"=>12.9
        }

大量のデータが取得できました。ソフトウェアのバージョンまで取得しています。
一方で出力までに時間がかかり、初めて実行した時は10秒ほどかかりました。

また、

"ExifImageWidth"=>3264,
"ExifImageHeight"=>2448,
"ImageSize"=>"3264x2448"

のように重複してそうなデータもあるようです。

2. exifr

・実行ファイル

require ‘exifr’
@exif = EXIFR::JPEG.new(‘IMG_1546.JPG’)
p @exif.to_hash

・出力結果

{
    :width=>3264,
    :height=>2448,
    :bits=>8,
    :comment=>nil,
    :make=>"Apple",
    :model=>"iPhone 6",
    :orientation=>#<EXIFR::TIFF::Orientation:RightTop(6)>,
    :x_resolution=>(72/1), :y_resolution=>(72/1),
    :resolution_unit=>2,
    :software=>"10.0.2",
    :date_time=>2016-10-27 09:44:46 +0900,
    :ycb_cr_positioning=>1,
    :exposure_time=>(1/507),
    :f_number=>(11/5),
    :exposure_program=>2,
    :iso_speed_ratings=>32,
    :date_time_original=>2016-10-27 09:44:46 +0900,
    :date_time_digitized=>2016-10-27 09:44:46 +0900,
    :shutter_speed_value=>(1/506),
    :aperture_value=>2.2,
    :brightness_value=>(25891/3260),
    :exposure_bias_value=>(0/1),
    :metering_mode=>5,
    :flash=>16,
    :focal_length=>(83/20),
    :subject_area=>[1631, 1223, 1795, 1077],
    :subsec_time_original=>"707",
    :subsec_time_digitized=>"707",
    :color_space=>1,
    :pixel_x_dimension=>3264,
    :pixel_y_dimension=>2448,
    :sensing_method=>2,
    :exposure_mode=>0,
    :white_balance=>0, :focal_length_in_35mm_film=>29,
    :scene_capture_type=>0,
    :gps_latitude_ref=>"N",
    :gps_latitude=>[(35/1), (39/1), (2987/50)],
    :gps_longitude_ref=>"E",
    :gps_longitude=>[(139/1), (42/1), (741/50)],
    :gps_altitude_ref=>"\x00",
    :gps_altitude=>(4943/67),
    :gps_time_stamp=>[(0/1), (44/1), (46/1)],
    :gps_speed_ref=>"K",
    :gps_speed=>(0/1),
    :gps_img_direction_ref=>"T",
    :gps_img_direction=>(109678/577),
    :gps_dest_bearing_ref=>"T",
    :gps_dest_bearing=>(109678/577),
    :gps_date_stamp=>"2016:10:27"
}

画像の情報のほかに、カメラやiPhone本体の情報も取得されました。
MIMETypeが出力されていないですが、そもそもexifrはJPEGとTIFFのファイルしか対応していないようです。
出力までの速さはmini_exiftoolに比べて早かったです。

まとめ
【共通】
画像の幅・高さ
写真を撮影した日時・位置情報
カメラの設定や部品の情報

【mini_tool】

  • 実行時間が長い
  • pngもgifも使える
  • キャメルケース
  • オブジェクト形式
  • 情報が豊富

【exifr】

  • 実行時間が短い
  • png、gifなどに未対応
  • スネークケース
  • シンボル形式
  • データの名前がが分かりやすい

参考にさせていただきましたm(_ _)m
画像ファイルからEXIF情報を取り出す
RubyでEXIFを見る。mini_exiftoolを入れる。

「プログラミングは書いて覚えろ」は本当か?ー「とりあえず」で受ける資格試験のススメー

0

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

プログラミング初心者が、いきなり参考書を手にしてもなかなか理解できず、諦めてしまうことも多々あると思います。 そんなとき、「とりあえず資格を取ってみる」ことが結構役立つかもしれません。

資格受験の良さ

  • 理解できなくても、とりあえず進められる

プログラミングを始めて勉強する人がまずつまずくのが、「参考書の意味わからなさ」だと思います。読んでもわからない、でも理解しなきゃ先に進めない…というところで本を閉じ、あなたのプログラマ人生は幕を閉じます。
その点資格勉強となると、「とりあえず丸暗記して、点数が取れればいいや」と割り切れるので、パッパと前に進むことができます。わからなかったところも、勉強を進めていくうちに「ああ、あの時のあれはこういうことだったのか」と腹落ちすることが多いです。

  • 参考書が意外とわかりやすい

これが意外だったんですが、資格の参考書は初心者が読んでもわかりやすいです。今まで「たのしいRuby」を読んで勉強していたのですが、それよりも「Ruby技術者認定試験合格教本」のほうがずっと勉強しやすかったです。解説も割と親切で、この本から勉強を始めても良かったかもな、とさえ思いました。

  • 「憶えよう」と思える

参考書を読んで、その通りにプログラムを書いて、アプリケーションが一つできた。「やった!」と思うのですが、結局頭の中に残っているのはぼんやりとした文法と構造のみ。本に書いてあるまま書き写しただけだからです。数あるメソッドの中で頭に残っているのは僅かではないでしょうか。
その点資格勉強では、憶えなければ点が取れないので取り合えず暗記します。これが結構役に立ちます。
本当なら「プログラムを沢山書いているうちに自然と憶える」のが理想なのかもしれませんが、とりあえず全部憶えてしまうことで参考書に書いてあるプログラムが読み取れるようになったり、自分でプログラムを書き出すことができるようになります。知識を得るとだんだんとプログラミングが楽しくなってくると思います。

  • 締め切りがある
    独学で辛いのが、勉強の目標となる締め切りが無いこと。「この日までは頑張ろう!」と思うことで、めんどくさい勉強も耐えることができます。
  • 金が絡むと必死になれる
    これが一番大きい。プログラミング言語の資格は往々にして受験料が高いので、一度落ちると高級焼肉3回分くらいのお金をドブに捨てることになります。お金が絡まなきゃ本気になれない人には、資格受験を強くお勧めします。

ちなみに私は今回ruby silverを受験したのですが、プログラミング初心者(rubyや他の言語に全く触ったことが無い人)でも100時間程度本気で勉強すれば受かるかな、という印象でした。
もちろん多くの方が言う「プログラミングは書いて憶えろ」は本当に役に立つ正攻法だと思いますが、それでは太刀打ちできなかったという方はぜひ一度「とりあえず」資格を受けてみてはいかがでしょうか。

Googleアナリティクスのセッション定義

0

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

こんにちは。今回はセッションの定義についてです。 よく話題に出るので改めてまとめておこうと思います。

公式からのセッション定義に関するアナウンスは
2011年8月にGoogle Analytics Solutionにアップされています。

Google アナリティクスのセッションの定義変更について
http://analytics-ja.blogspot.jp/2011/08/update-to-sessions-in-google-analytics.html

Googleアナリティクスでのセッション定義

セッションが切れる条件は下記の3つです。

1:30分以上ユーザー行動がない場合

30分以上ユーザー行動がない場合タイムアウトになり、新たなセッションになる

enter image description here
Aさん30分もどこに行ってたのでしょうか。

2:日付が変わるタイミング

その日の終わり日付が変わるタイミングで自動的にセッションが新たなセッションになった

enter image description here
Aさん夜更かしですね。

3:特定のデータ情報が変わるとき

以下のトラフィック示すデータのどれかが変わったとき
utm_source、utm_medium、utm_term、utm_content、utm_id、utm_campaign、gclid

enter image description here
決済や申込フォームでありがちな遷移です。

utm_source、utm_mediumは流入元情報を指すデータです。
要は、流入元が変わるタイミングでもセッションは再定義されます。

各パラメータについては以下の通りです。

  • 広告関連のパラメータ
    • utm_source …参照元
    • utm_medium …メディア
    • utm_term …キーワード
    • utm_content …コンテンツ
    • utm_campaign …キャンペーン
  • Adwordsで生成されるID
    • gclid
  • 任意のID
    • utm_id

流入元が変わる際のセッション定義の例外

1:クロスドメイン設定を行っている場合

異なるドメイン間のセッション情報を引き継ぎ、解析するために
クロスドメイン設定している場合は当然、セッションは切れません。

▼クロスドメインの設定方法はこちら▼
クロスドメイン設定の落とし穴【Googleタグマネージャー/Googleアナリティクス】
 →Googleタグマネージャーのクロスドメイン設定方法(通常時)

2:参照元除外を行っている場合

外部サービスのカートやフォーム等、
予め、サイトの遷移途中に外部サイトに遷移することが分かっていれば、
参照元除外設定に対象外部サイトのドメインを設定しておくことをお勧めします。
参照元除外設定をすると、外部サイトとは認識されずにセッションも切れません。

▼参照元除外方法はこちら▼
クロスドメイン設定の落とし穴【Googleタグマネージャー/Googleアナリティクス】
 →【クロスドメイン設定の落とし穴#2】異なるドメイン間でセッション情報が分断される!

補足

2011年8月11日以前のデータはブラウザを閉じた時にセッションが切れましたが、
現在はブラウザを閉じることは一切セッションに影響しません。
.

.

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

2016/10/10発表 GoogleアナリティクスのUIが変わる!

0

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

2016年10月10日にGoogle Analytics Solutionにて発表がありましたね。GoogleアナリティクスのUIが「また」変わります!

変更タイミングは今後数週間かけて開始するとのことです。

変化があるのは嬉しいですし、長くGoogleアナリティクスと関わっているので慣れましたが、
色々と本や過去の記事への影響があるので、UIの変更はドキドキします!(笑)

Google Analytics 360 Suite – built for enterprise.
https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

UI変更については上記にて情報が掲載されています。
今回はこの内容についてご紹介します。

1.マテリアルデザインに

これに関しては既に一部アカウントで適用されているかと思いますが、
2016年トレンドのマテリアルデザインがとうとうGoogleアナリティクスにも適用されましたね。
Googleタグマネージャーでも適用されているかと思います。

下記の画像を見ると多くの項目がサイドナビゲーション内に格納されたことにより
ヘッダーナビゲーションが無くなり、レポート領域が増えたことは嬉しいですね。
enter image description here
※画像参考:https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

2.カスタム系がひとつのナビゲーションに

以前はカスタムレポートが別ナビゲーションとして独立していましたが、
すべてのカスタマイズ要素が一つのレポート項目としてまとめられるようです。

対象は以下の4つのようです。
・マイレポート
・カスタムレポート
・ショートカット
・カスタムアラート
enter image description here
※画像参考:https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

3.ビューの切り替えが楽に

以前は、アカウント/プロパティ/ビューは個々の画面があり、
都度表示切替する必要ありましたが今後はマテリアルデザインの適用により、
この面倒な操作が不要になりました。

すべては左上のナビゲーションだけで切り替えできます。
読み込みに時間をかけることなくかなりスムーズですね。
各表示の切り替えがなめらかでオシャレです。
enter image description here
※画像参考:https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

4.ログインすると最後に見てたビューが自動表示

ログインすると、自動的に最後にログインしていた時に見ていたGoogleアナリティクスビューが表示されます。
よく見るビューが決まっている場合はスムーズにレポートを見ることができます。

5.デフォルト表示期間の変更ができる

以前は直近1か月のデータ表示でしたが、データ量が多い場合
最初の読み込みに時間がかかりストレスになっていたと思います。

今後はデフォルトの日付範囲を変更することができるため、負荷を減らすことができます。
また、特に指定がない場合は直近7日間のデータが設定されており、瞬間的な変化だけを追うことができます。
(せめて1週間単位でレポートを見てね、というGoogleからのメッセージだと思っています!)

6.インテリジェンスイベントとページ解析がなくなる

カスタムアラートは、新しいカスタマイズのセクションに移動しており、
通常どおり機能し続けますが、インテリジェンスイベントは削除されます。

また、ページ解析レポートは、GoogleアナリティクスのUIから削除されるようです。

恐らく、chromeの拡張機能「Page Analytics」は残る気がするので、
拡張リンクのアトリビューションタグは残しておいたほうが良さそうですね。

▼chromeの拡張機能「Page Analytics」
https://chrome.google.com/webstore/detail/page-analytics-by-google/fnbdnhhicmebfgdgglcdacdapkcihcoh

▼拡張リンクのアトリビューションタグ

ga('require', 'linkid', 'linkid.js');

※参考:https://support.google.com/analytics/answer/2558867?hl=ja

こちらのヘルプにはまだ何も記載されていないようなので、今後もチェックが必要です。

以上、GoogleアナリティクスのUI変更に関する紹介でした。

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

最近人気な記事