ホーム ブログ ページ 38

Googleアナリティクスのアドバンスセグメントを削除する方法。たぶんこれが一番早いと思います。

0

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

Googleアナリティクスのなかでも使用頻度が高く重要な機能にアドバンスセグメントがあります。このアドバンスセグメントではWebサイトを分析する上で「スマートフォンのデータだけ見たい」「検索から来たユーザーのデータだけ見たい」などを叶えるすばらしい機能なのですが、一括削除機能がありません。そこで今回は私がアドバンスセグメントを削除し続ける中で、おそらく一番早いのではないかな。という削除方法をご紹介いたします。

アドバンスセグメントの作成制限

アドバンスセグメントを消していくまえに、前提として作れる最大の個数を知っておきましょう。アドバンスセグメントはアカウントごとに1,000個まで作成することができます。そのため、もしも1,000個に達してしまった場合は「削除する」か「新しいアカウントを作る」の2通りしか方法がありません。今すぐに大量のアドバンスセグメントを作りたいという方は、ご自身が普段使っているアカウントから、権限を付与したアカウントをつくることでアドバンスセグメントが0個(未設定)のアカウントをつくることができます。

アドバンスセグメントの削除方法

一般的にアドバンスセグメントを消す方法を調べると、レポート画面からの消し方を紹介されます。以下に掲載している画像のように、レポート画面の上部にあるセグメントをクリックし、プルダウンで削除を選ぶ方法です。

enter image description here

Googleでもセグメントの削除方法についてのヘルプページを用意しています。セグメントを適用、削除する – アナリティクス ヘルプ

しかし、このページでも効率の良い消し方までは掲載されていないため、アドバンスセグメントを1つ1つ消すたびにレポートが読み込まれ、100個単位で消すとなると1時間以上の時間を費やすことになります。

たぶん一番早いアドバンスセグメントの消し方と3つのポイント

私はこの消し方で1時間30分ほどで500個のアドバンスセグメントを消すことができました。ぜひ、アドバンスセグメントを効率よく消す機会のあるかたは試してみてください。

1.管理画面からセグメントを消す

実は、ホーム・レポート・カスタム・管理とGoogleアナリティクスの画面上部にならんでいる「管理」からセグメントの一覧ページにいくことができます。画像の赤い個所がセグメント一覧画面になります。
enter image description here

これがセグメントの一覧ページです。
enter image description here

この画面ではレポートの読み込みが発生せず、スムーズにセグメントを消すことができます。

2.表示する行数を10行にする

セグメントをこれから消すぞ!というときに表示する行数を一番少ない10行にしましょう。ページを読み込む際のデータ量がすくないため、最も早くページが読み込まれます。

3.画面が切り替わる前に”アクション”の位置にカーソルをあわせておく。

ページ読み込み速度がレポート画面よりも早いとはいえ、Googleアナリティクスは読み込み時間が少なからずかかります。その間に、”アクション”の位置にカーソルをあわせておきます。すると画面が切り替わった瞬間にセグメントを消すことができ、非常に効率的です。

まとめ

今回はアドバンスセグメントを効率よく削除する方法をご紹介させていただきました。本音をいうと一括削除機能がほしいですが、アドバンスセグメントが1,000件を超えるアカウントは稀だと思います。そのため今後も実装があまり期待できません。ご紹介した削除方法がお役に立てば幸いです。

クロスドメイン設定の落とし穴【Googleタグマネージャー/Googleアナリティクス】

0

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

約9年程Googleアナリティクスに関わってきましたが、 最近のクロスドメイン設定は非常に簡単になりましたね。

昔はクロスドメインのリンク一つ一つにタグを仕込む必要がありましたが、今は不要です。

Googleタグマネージャーを利用した設定も簡単なので、
複数ドメインを運用されている方の中では「今まで踏み切れなかったけどやっと導入できた!」
という方も多いのではないでしょうか。

そんなGoogleタグマネージャーを使ったクロスドメイン設定。
じつは、導入してみるととんでもない落とし穴が待っていることがあります。

今回はGoogleタグマネージャーを使った基本的なクロスドメイン設定と
その中でありがちな落とし穴・回避方法をお伝えいたします。

Googleタグマネージャーのクロスドメイン設定方法(通常時)

まずは一般的なクロスドメイン設定方法のご紹介。
大事なポイントは以下の2つ。

  • 【設定するフィールド】の【フィールド名】に【allowLinker】、【値】に【true】を設定
  • 【クロスドメイントラッキング】の【自動リンクドメイン】にクロスドメイン対象のドメイン名を設定

※Googleタグマネージャーのユニバーサルアナリティクスタグ設定画面
enter image description here

これを設定して、解析対象ページに配信すればOKです。

ちなみに、クロスドメイン対象がサブドメインの場合は、サブドメインを入力してください。
「http://」や「https://」は不要です。
ドメイン入力例:

www.appirits.com,ecm.appirits.com,appirits.co.jp

【クロスドメイン設定の落とし穴#1】Googleアナリティクス集計時にURLが統合される!

Googleアナリティクスでページ別レポートを見る際に、標準ではドメイン名は表示されずページ名が表示されます。
そのため複数のドメインを計測している環境では、同じページ名がある場合、統合されて見えてしまいます。
これを避けるためにはドメイン情報を記録するようにGoogleアナリティクス側でフィルター設定を行う必要があります。
※レポート「行動>サイトコンテンツ>すべてのページ」での表示例
設定前の計測ページ名:

/sample.html

設定後の計測ページ名:

aaa.co.jp/sample.html
bbb.co.jp/sample.html

以下、Googleアナリティクスのフィルター設定時のポイントです。

  • フィルタ【カスタム】で【詳細】を開く
  • フィールドAに【ホスト名】【(.*)】を設定
  • フィールドBに【リクエストURI】【(.*)】を設定
  • 出力先に【リクエストURI】【$A1$B1】を設定
  • 【出力フィールドをオーバーライド】にチェックを入れる

※Googleアナリティクスビュー設定のフィルタ設定画面

enter image description here

この設定ができていれば、ページ名が統合されることなく
個々のページ解析が可能になります。

【クロスドメイン設定の落とし穴#2】異なるドメイン間でセッション情報が分断される!

Googleアナリティクスは、参照元が異なる度に自動的に新しいセッションが開始されます。
クロスドメインの計測を行うとなると、異なるドメイン間を行き来するため
そのままでは都度セッション情報が分断され、セッション数を正しく計測できません。

以下、Googleアナリティクスヘルプで紹介されている計測例です。

たとえば、my-site.com にアクセスしたユーザーが your-site.com にアクセスした後、 my-site.comに戻ってきたとします。your-site.com を参照ドメインとして除外していない場合は、 my-site.com へのアクセスがそれぞれ1 回のセッションとして計 2 回記録されます。一方、your-site.com からの参照を除外した場合、my-site.com への 2回目のアクセスは 新しいセッションとして開始されず、セッションは 1 回だけ記録されます。
https://support.google.com/analytics/answer/2795830?hl=ja

上記の通り、参照元を除外すると、除外したドメインから
サイトに集まったアクセスに対して、新しいセッションは開始されません。
クロスドメイン計測の場合、この参照元除外が必須です。

以下、Googleアナリティクスの参照元除外設定時のポイントです。

  • 【参照元除外】にクロスドメイン対象のドメイン名を設定

※Googleアナリティクスプロパティ設定の参照元除外リスト設定画面
enter image description here

クロスドメイン対象がサブドメインの場合は、サブドメインから入力してください。
「http://」や「https://」は不要です。

【クロスドメイン設定の落とし穴#3】対象外のドメインにパラメータ(_ga=)がついてしまう!

クロスリンクが正常に動いていると、ドメインをまたいでページを移動した後、
URLに「_ga=」というリンカーパラメータが自動で付与されるようになります。

パラメータ例:

http://mc.appirits.com/?_ga=1.43273121.548799371.1472785112

これはユーザーのクッキー情報を保持しているパラメータであり、
異なるドメイン間でのセッション情報を引き継ぐため、基本的には回避することができません。
(非公式で実装している方もいるようですが、正常計測保証はできません)

例えば計測対象のクロスドメインが
「 http://aaa.bbb.com 」「 http://ccc.com 」という場合、
Googleタグマネージャの自動リンクドメインに設定する値は
「aaa.bbb.com」と「ccc.com」になります。

そうなるとこの「ccc.com」が厄介な動きをします。
「 http://ccc.com 」はもちろん「 http://ddd.ccc.com 」といった
計測対象外のサブドメインにもリンカーパラメータが自動付与されてしまうのです。

また、ダウンロードファイル.exeやpdfにもリンカーパラメーターが付与されるため、
この影響により正しく情報が表示されない場合もあります。

Googleタグマネージャーのクロスドメイン設定方法(例外時)

先に紹介した「通常時」の設定では【クロスドメイントラッキング】の【自動リンクドメイン】に
クロスドメイン対象のドメイン名を設定していましたが、これを外します。

また、新たなタグを作成し、そちらで自動リンクドメインの機能を持たせ
リンカーパラメータの付与先を詳細に設定します。

大事なポイントは以下の2つ。

トラッキングタイプ【ページビュー】
– 【自動リンクドメイン】を指定しない
– 【設定するフィールド】の【フィールド名】には【allowLinker】、【値】に【true】を設定
トラッキングタイプ【リンクをデコード】
– トラッキングタイプ【リンクをデコード】のタグを新たに追加
– 【配信トリガー】にリンカーパラメーターを付与したいリンクの「リンククリック」を設定
– 【例外トリガー】にリンカーパラメータを付与したくない拡張子を設定

Googleタグマネージャーのユニバーサルアナリティクスタグ(ページビュー)設定画面
enter image description here

Googleタグマネージャーのユニバーサルアナリティクスタグ(リンクをデコード)設定画面
enter image description here

この設定を行うことで、対象外のサブドメインや拡張子が.exeといった
特殊なアイテムへのリンカーパラメータが自動付与が防げます。

  • リンカーパラメーターがつくと正しくページが表示されない!
  • リンカーパラメーターのせいで特定の環境下で.exeダウンロードができない!

といったサイトUI側の問題解決につながります。

どんなに簡単な設定でも慎重に

クロスドメインは以前に比べ簡単に設定できるようにはなりましたが、
昔と変わらず、落とし穴は無数にあります。

  • 折角取得した解析データが使えない
  • サイト表示やダウンロードに影響して機会損失につながった

なんてことにならないように、慎重に丁寧に設定することを心がけましょう!
.


.

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

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

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

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

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

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

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

Mac版のOWASP ZAPで脆弱性チェックの設定

0

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

macOS Sierraで、OWASP ZAPを使い通信内容の確認と診断を開始するまでに必要な設定や手順についてまとめました。Mac OS Xでも、ほぼ同様の方法です。OWASP ZAPは、ウェブアプリケーションの脆弱性検査のためのツールです。

はじめに

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

Webアプリケーションの診断等始める場合は、徳丸本など参考にして、十分理解してから行ってくださいね。
徳丸試験の紹介と合格する方法
https://spirits.appirits.com/role/engineer/security-engineer/5418/

新しく記事書きました、脆弱性診断ツール OWASP ZAP についても参考にどうぞ。
https://spirits.appirits.com/role/engineer/security-engineer/6129/

ローカルプロキシについて

プロキシというと、一般的にDeleGateやSquidなどウェブキャッシュ用のものや、最近だとnginxなどをリバースプロキシに利用しているところが多いかと思います。
ウェブアプリケーションのセキュリティ診断などで利用するプロキシは、PCインストールし、ブラウザとウェブサーバ間のデータ内容の確認、リクエストを変更して送信などを行うローカルプロキシのことを主に指します。
ローカルプロキシにも動作環境や機能などの違いで特徴があり、今回紹介するOWASP ZAPや、Burp Suite、Fiddler、Mac用ですとCharlesなどがあります。

OWASP ZAPの特徴などについて

  • ソースコードが公開されており、無償で利用できる
  • JAVAプログラムのためMacなど各種OSで動作する
  • 手始めに行うのに向いている自動診断機能つき
  • 比較的、日本語化が進んでいる( 同種類のツール、BurpSuiteを日本語化する方法もある)

独立行政法人情報処理推進機構(IPA)では、ウェブサイトにおける脆弱性検査手法(ウェブアプリケーション検査編)で、SQLMap、Fiddler、Paros、Ratproxyと共にOWASP ZAPが紹介されています。SQLMapは、Kali Linuxにも導入されてますね。
OWASP ZAP localizationの少しスクロールしてJapaneseの部分、日本語化を行ってる方達です。
OWASP ZAP Japanese
私も、OWASP ZAPの日本語化に参加しております。メニューや設定など、目に付くところを集中的に行いました。検出結果や階層が深い部分については、これからといったところです。

OWASP ZAPのインストールと初回起動

今回は、投稿時点で最新のOWASP ZAPのバージョン2.5を、macOS Sierraにインストールします。
基本的にOSごとの違いはあまりないので、他のOSの場合は読み替えていただければと思います。
JREが、Mac OS版にはバンドルされていますが、他OSでは別途インストールが必要です。

OWASP Zed Attack Proxy Projectからダウンロードページで選択してください。

特に変わったこともないかと思いますが、ダウンロードしインストールしてください。
Mac OWASP ZAP インストール

起動時、「開発元が未確認のため開けません」と表示されますが、指示通りにシステム環境設定のセキュリティとプライバシーを開き確認し、下部のこのまま開くを押します。

また、ソフトウェアライセンスについて表示されるので、読んでから進んでください。
起動すると、セッションの保存の選択があります。今回は、一番下の「この時点で、セッションを保存せず操作します。」で進めてしまいます。
Mac OWASP ZAP

OWASP ZAPの設定

あとで行うこともできますが、アップデートを行うか聞かれます。
再度行う場合は、メニューの「ヘルプ」から、「アップデートのチェック」で、「アドオンの管理」ウィンドウを開きます。

マーケットプレイスで、Active scanner rulesなど必要なものを選択し、Install Selectedで導入します。
また、インストール済みのアドオンも選択してUpdate Allを行います。

ZAP アドオン追加

ウェブブラウザの設定

特にセキュリティ診断などを行う場合は、誤って別のサイトにリクエスト送信など避けるため、診断用にウェブブラウザ独立でプロキシを変更できるFirefoxを導入して、更にプロファイルを分けることをお勧めします。

Firefoxのプロファイル

プロファイルマネージャを使用して、Firefox のプロファイルを作成または削除するなどを参考にしてください。
各種起動方法があると思いますが、私は単純にターミナルで下記を入力してしまいます。
初めに診断用のプロファイルを新規で作成してしまいます。以降はそのまま使用します。

/Applications/Firefox.app/Contents/MacOS/firefox -P

プロキシの設定

OSまたは、ウェブブラウザのプロキシの設定を設定します。ここでは私が行っているFirefoxのアドオンを使った方法を紹介します。FoxyProxy StandardをFirefoxに導入します。

ローカルホストに、ローカルプロキシOWASP ZAPのポート番号を指定します。(他のものと同一にならないようにあらかじめ他のツールも変更しておく)
ZAP FoxyProxy詳細

この様に、複数作成して切り替え出来るようにしておくと何かと便利です。
ZAP FoxyProxy

証明書のインポート

OWASP ZAPで、HTTPS通信データを確認出来るようにするため、ウェブブラウザに証明書のインポートを行います。いわゆる中間者(MITM)攻撃と同様の状態を作り出します。

まず、OWASP ZAP側のメニューから、「ツール」、「オプション」、「ダイナミックSSL証明書」と進んで。
「生成」してからファイルを「保存」します。
OWASP ZAP 証明書

次に、Firefox側で、「オプション」、「詳細」、「証明書」、「証明書を表示」、「認証局証明書」
「インポート」でファイルを読み込みます。「この証明局によるWebサイトの識別を信頼する」にチェックを入れます。
Firefox 証明書

通信データの確認

この状態で、対象となるサーバをウェブブラウザで閲覧します。適度に画面遷移してみてください。先にウェブブラウザやアドオンがアップデート確認などの為の通信を拾ってしまうかもしれません。
owasp zap mac

画面下部にある履歴タブでリクエストを選択すると、画面右上のリクエストタブ、レスポンスタブで、通信の様子とデータの内容が確認できます。検証できる環境がない場合は、やられサイトを利用してください。AppGoat、Badstore、Metasploitable2 などが有名です。私は、OWASP Mutillidae IIなど各種導入されている、OWASP BWAをよく利用します。また手っ取り早く、VirtualboxにWordpressを導入するなどでも、OWASP ZAPの検証にはなるでしょう。

おわりに

今回は、OWASP ZAPを使い通信内容の確認と診断を開始するまでに必要な設定や手順についてまとめました。実際の使用方法などについては、次回以降に掲載していきます。
前回は、Kali Linux(2016.2)の日本語利用についてでしたが、もちろんZAPも導入されておりますので、参考にしていただければなと思います。

関連記事など

脆弱性診断サービスなど

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

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

http://security.appirits.com/

Kali Linux(2016.2)の日本語利用について

0

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

Kali Linux(2016.2)のインストールと日本語利用についてまとめました。Kali Linuxは、セキュリティ診断用ツールが標準で用意されている、Linuxディストリビューションです。新バージョン2017.3については、関連の記事を参照ください。

はじめに

Kali Linuxは、セキュリティ診断ツールを含むLinuxディストリビューションです。Kali Linuxは、利用の仕方により不正アクセス行為と判断される可能性ががあります。またサービス停止やデータの破損が起こる場合もありますので事前にバックアップを行うなどしてください。そして必要に応じて管理者の許可を得て利用してください。

Kali Linux 2017.3 リリース

Kali Linux 2017.3 がリリースされてます。とても導入が楽になってます。新バージョンについては下記の記事も参照ください。
Kali Linux 2017.3 導入と日本語化

Kali Linuxの特徴などについて

  • Debianの派生のLinuxディストリビューションです。
  • デジタルフォレンジック、ペネトレーションテスト(侵入テスト)用などのツールが用意されている。
  • 基本的に、root権限で作業を行う。
  • 現在は、ローリングリリースを採用している。
  • バージョン2016.2がリリースされた。(直接ダウンロードできる仮想環境イメージファイルは、まだ2016.1でした。)

Kali Linux 公式サイト
https://www.kali.org/

主な収録ツール

Nmap、Aircrack-ng、Wireshark、Metasploit Framework、Armitage、Burp SuiteOWASP ZAP、BeEF、sqlmap、wpscan などなど多数

※Owasp ZAPについては、Mac版のOWASP ZAPで脆弱性チェックの設定として記事を書いております。

Kali Linuxを実機にインストールする場合

現在、VirtualBox、VMwareなどの仮想環境が、用意しやすい状況にありますが、用途を限定すれば旧式モデルのPCなどでも十分利用できます。
私は下記のツールを利用し、インストール用のUSBメモリを作成しました。
失敗しやすいポイントだけ書くと、起動時にUSBメモリからブートするようBIOSを設定し、インストール途中にCDを入れるように聞かれたら、USBメモリを抜いてから再度挿してください。

UNetbootin インストール用のUSBメモリを作成ツール
https://unetbootin.github.io/

VirtualBox上にインストールする場合

仮想化ソフトウェア、VirtualBoxをインストールし、Kali Linuxのイメージを導入、起動させます。

VirtualBox 公式サイト
https://www.virtualbox.org/

Kali Linux Downloads – Virtual Images イメージファイルのダウンロード先
https://www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/

Kali Linux Downloads

書いている時点で、直接ダウンロード出来るのはバージョン2016.1です。
中段のPrebuilt Kali Linux VirtualBox Imagesタブをクリックしダウンロードします。
ダウンロードした、Kali-Linux-2016.1-vbox-XXXXX.7zを展開します。(7z形式を展開できるソフト利用)
VirtualBoxを起動し、ファイル、仮想アプライアンスのインポートで、先ほど展開したKali-Linux-2016.1-vbox-XXXXX.ovaを選択しインポートします。
デフォルトの設定でも問題はないですが、ネットワークの割り当ては、診断対象環境との通信の関係上、ブリッジ などがよいかと思います。その他は、好みによって設定を変更します。私はメモリを4GBぐらいにしています。

Kali Linux VirtualBox

Kali Linuxの起動を行いログインします。
 ユーザー名:root
 パスワード:toor

他のパッケージ導入前に、既存のパッケージを最新に更新してしまいましょう。

apt-get update
apt-get dist-upgrade (バージョン2016.2をdist-upgradeにして導入してしまいます。)

※うまく動作しない場合があるようです。(バージョン2016.1から2016.2の移行期のため?)
Kaliインストール後、apt失敗についても暫定対応ですが参考にしてみてください。

またバージョン2016.2が直接ダウンロード出来るようになったiso版で導入を行い。下記のコマンドVirtualBoxのゲストツールを入れてしまう方法も検討してみてください。VirtualBox標準方式でのGuest Additionsの導入より気軽に行えると思います。

apt-get install virtualbox-guest-dkms

Kali Linuxの日本語利用について

英語環境のまま利用している方も多いようですが、ここでは日本語で利用できるように設定していきます。いわゆる日本語化です。下記3点を、順に進めます。

1. 日本語表示の設定(ロケール、フォーマット、キーボードレイアウト、タイムゾーン)
2. 日本語フォントの導入(日本語表示)
3. 日本語変換の導入(日本語入力)

1. Kali Linuxの日本語表示設定

バージョン2016.2を、isoから日本語を選択してインストールを行った場合は、日本語表示の設定はほぼ完了してますので、画面右上のキーボードレイアウトの変更を行ったら、次の日本語フォントの導入から行ってください。

画面の右上、電源右の▼をクリックし、設定画面を開きます。
Kali Linux Setting

Region & Languageをクリックします。
Kali Linux Language

下記を参考に、Language、Formatの変更します。ログインのし直しを求められますが、一通り設定を行ってからのほうがよいでしょう。
また、Input Sources追加と順序の変更を行います。使用しなければUSを削除してしまっても問題ないです。
Kali Linux Japanese

もう一度設定画面に戻り、Date & TimeのタイムゾーンをJSTにします。

2. Kali Linuxへ日本語フォントの導入

下記コマンドでフォントパッケージを導入すると、独特の中華フォントから馴染みのある日本語表示になるかと思います。

apt-get install fonts-takao
Kali Linux Font

3. Kali Linuxへ日本語変換の導入

下記コマンドでパッケージを導入後、再起動することで日本語入力の漢字変換が可能になります。

apt-get install uim uim-anthy

Mozcがroot権限で、そのまま動かないため、ここではuimを利用します。
Mozcを利用したい場合は、一般権限で動作する別のディストリビューション(BackBoxなど)をお勧めします。
Mozc自体の変更でも動作させることはできるようです。

ウェブブラウザの日本語化など

最後にその他、各アプリケーションごとの対応が必要となりますが、ここではウェブブラウザに日本語言語パックとFlashを導入しておきます。

apt-get install firefox-esr-l10n-ja
apt-get install flashplugin-nonfree

Debianに標準搭載されているブラウザがfirefoxに変更されたため、Kali Linuxでもfirefoxが標準となってます。
ESR: Extended Support Release(延長サポート版)

関連書籍紹介

日本語で書かれたKali Linuxに関する書籍は、ほとんど出版されていませんが、下記の「サイバーセキュリティテスト完全ガイド」は、Kali Linuxについて詳しく解説されています。



サイバーセキュリティテスト完全ガイド ~Kali Linuxによるペネトレーションテスト~

関連記事など

脆弱性診断サービスなど

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

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

http://security.appirits.com/

Kaliインストール後、apt失敗について

0

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

Kali Linuxは、セキュリティ診断用ツールが標準で用意されている、Linuxディストリビューションです。Version(2016.1)を導入直後は、パッケージを最新に更新したいところです。iso版は2016.2が直接ダウンロード出来るようになりましたが、仮想マシン版や以前インストールしたものからapt-get updateと入力してもエラーで実行できない場合があるので、解決方法を試してみました。

はじめに

今回、紹介する方法は、自分が検証環境で行った、少々強引にAPTを修正する方法ですで、テスト環境を用意する、バックアップを取ってからなど十分注意して行ってください。
また、公開時点での暫定的な方法であり、初期ダウンロード、リポジトリ、パッケージなどの状態により、変更される可能性があります。

エラーの内容

Kali Linux(2016.1)を導入し、パッケージの更新のため端末にコマンドを入力、下記のようにエラーとなりました。(iso版、VirtualBox版、light版で確認)

root@kali:~# apt-get update
E: Method http has died unexpectedly!
E: sub-process http received a segmentation fault

または、下記のように分かりにくいかも知れません。

W: The repository 'http://http.kali.org/kali kali-rolling Release' does not have a Release file.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: Failed to fetch http://ftp.ne.jp/Linux/packages/kali/kali/dists/kali-rolling/main/binary-amd64/Packages  404  Not Found
W: Failed to fetch http://ftp.ne.jp/Linux/packages/kali/kali/dists/kali-rolling/non-free/binary-amd64/Packages  404  Not Found
W: Failed to fetch http://ftp.ne.jp/Linux/packages/kali/kali/dists/kali-rolling/contrib/binary-amd64/Packages  404  Not Found
E: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

リポジトリの追加

deb cdromみたいな行があると思いますが、それとは別に下記を追加します。
同様のものが既に記載されている場合は、変更する必要はないです。
追記したら念のため、apt-get updateを行い変化がないことも確認します。

リポジトリリスト編集

vi /etc/apt/sources.list

Kali sources.list Repositories の The Kali Rolling Repository を参考にしてください。
http://docs.kali.org/general-use/kali-linux-sources-list-repositories

deb http://http.kali.org/kali kali-rolling main contrib non-free
# For source package access, uncomment the following line
# deb-src http://http.kali.org/kali kali-rolling main contrib non-free

必要なパッケージを事前に入手

事前に下記のパッケージを入手します。適宜読み替えてください、例は、この記事の公開当時最新の64bit版です。頻繁に更新されてるため新しいものを選んでください。
liblz4は、light版のみ必要?後工程で言われたら導入するスタンスでもよいかと。

libapt-pkg5.0_1.3~rc2_amd64.deb
apt_1.3~rc2_amd64.deb
liblz4-1_0.0~r131-2_amd64.deb

curlやwgetなどのコマンドで入手するか、またはブラウザで確認しながら、任意の場所にダウンロードします。

libapt-pkg、aptは、http://http.kali.org/pool/main/a/apt/
liblz4は、http://http.kali.org/pool/main/l/lz4/

ブラウザでのパッケージダウンロードの様子
Kali-Linux-2016.1-apt-error-01

aptの入れ直し

まず、removeでaptを削除します。危険な作業なので、Yes, do as say!と入力を迫られます。
その後、先ほどダウンロードしたパッケージを導入します。成功したらupdateを試してみましょう。

apt-get remove apt
dpkg -i libapt-pkg5.0_1.3~rc2_amd64.deb
dpkg -i apt_1.3~rc2_amd64.deb
dpkg -i liblz4-1_0.0~r131-2_amd64.deb (light版など必要に応じて)
apt-get update
Kali-Linux-2016.1-apt-error-02

apt-get updateが動作したら

正常に動作したら、upgradeを実行し数回出る質問に答えつつ、先ほどダウンロードしたパッケージを削除しておきましょう。
今回は、Kali Linux(2016.1)を導入直後からのaptエラーについて解決方法を試してみました。
これによりKali Linuxを最新状態(2016.2など)に保てるようになりました。

脆弱性診断サービスなど

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

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

http://security.appirits.com/

デジタル全盛期にあえて!リアル付箋活用術

0

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

たまごです。 自分は付箋(物理)でタスク管理しているのですが、今日はその方法をご紹介したいと思います。

付箋(物理)の利点

まず、最初にデジタル全盛期のこの21世紀に、実態のある紙の付箋を使うメリットを説明します。

■可視範囲がスケーラブルである

デジタルタスク管理は、どうしても可視範囲がモニターのサイズに依存します。それ以上の情報を視認しようとすると、表示を小さくするか、スクロールするか、構造化して上のレイヤだけ表示するか、物理モニターを追加しなければなりません。

けれど、付箋は現実世界に展開するので、可視範囲の拡大が容易です。貼るところがなくなったら、増やせばいいです。この可視範囲を広くとれる点は、物理媒体の持つ圧倒的なメリットだと思います。

■仕様変更が容易である

スケーラブルとかぶりますが、物理付箋なら仕様変更が容易です。アプリケーションを使ってタスク管理していると、どうしてもそのアプリケーションの仕様を超えた使い方はできませんが(マクロやプラグインが許容されているなら書くという手もありますが)、紙の付箋にそんな縛りはありません。

色を増やしたいなと思えば、新しい付箋を買ってくればよいのだし、付箋の貼り方で優先度と緊急度を管理したいなと思えば、そういう貼り方をすればよいです。このスピード感は、物理媒体ならではだと思います。

■シェアしようがないので、オンオフを切り分けられる

クラウド系のタスク管理サービスでついついやってしまうのが、オフの時間に仕事のタスクをチェックしてしまうことです。でも、チェックするだけで、アクションは次の勤務まで持ち越しだったりします。どうせ、勤務した際にあらためてチェックするので二度手間になります。

人によって違うかもしれませんが、自分は、プライベートはプライベート、仕事は仕事で分けた方が頭がすっきりするタイプなので、「勤務場所でしかタスクの確認ができない」という紙付箋の持つ特性がとてもマッチします。

以上、リアル付箋に僕が感じるメリット三点でした。

付箋活用術

本題の付箋活用術に移りましょう。僕は、付箋をこう使っています。

enter image description here

モニターに貼って使うのですが、貼る場所によって意味合いを変えています。以下、順に説明していきます。

モニター上部

モニター上部には、左から順に「優先度高」「期限付きタスク」「優先度中~低」タスクを貼っています。

単純に左側に近づくにつれ、プライオリティが上がっていくイメージです。なので、とりあえずざっとタスクを確認したい時は、自分の場合、視線がモニターの左上に向かいます。

モニター右側

モニター右側には、優先度や期限が未整理な付箋を貼っています。これは、画面にかかるような形で、わざと邪魔になるように貼ります。「早く振り分けしろよ」ということです。

何故右側なのかというと、自分の場合、このモニターの右側にもう一台モニターがあるからです。マウスポインタが二つのモニターを行ったり来たりする際に、強制的に付箋が目に入るよう、この位置に貼っているわけです。

モニター真ん中

これは、たとえばミーティングで離席するけど、戻ってきたら速攻でやりたいタスクなど「なる早」系タスクを備忘的に貼ります。めちゃめちゃ邪魔な位置なので、ここに貼っておけば、まず忘れることはありません。

まとめ

以上、自分の付箋活用術でした。

これが基本形で、後は使いつつフレキシブルに運用しています。地味で泥臭いですが、なんだかんだ物理付箋は便利です。

参考になれば、幸いです。

ヘルパの自動読込の抑止方法

0

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

Rails ではデフォルトで app/helpers/ 以下にあるヘルパは全て読み込まれる。 即ち、コントローラの階層と同様の階層にあるヘルパ以外のヘルパに定義されているメソッドを使用可能となる。 これを抑止し、コントローラの階層と同様の階層にあるヘルパのみ読み込まれるようにする方法を記述する。

内容の詳細

例えば、以下のようなファイルがあったとする。

  • app/controllers/products_controller.rb
  • app/controllers/users_controller.rb
  • app/helpers/products_helper.rb
  • app/helpers/users_helper.rb
  • app/views/products/index.html.erb
  • app/views/users/index.html.erb

この時、デフォルト設定では、 app/views/products/index.html.erb上でapp/helpers/users_helper.rbにあるメソッドを使用できる。

これを抑止し、app/views/products/index.html.erb上ではapp/helpers/products_helper.rb上にあるメソッドのみを使用可能になるようにする。

デフォルト設定のデメリット

  • 複数のヘルパファイルに同名のメソッドがあった場合、どちらが読み込まれるか解らない。
  • 結果的に、メソッド追加時に、重複するメソッド名がないか、全てのヘルパを確認しなければならない。
  • コントローラ名と同名のファイル名にする事で、どのコントローラで使用されるヘルパであるか解るようにする事ができるが、その利点があまり生かせない。

設定変更方法

config/application.rb に以下1行を追加すれば良い。

module AppName
  class Application < Rails::Application
    # 中略
    config.action_controller.include_all_helpers = false # この1行を追加
    # 中略
  end
end

自作スケジュールシートで時間管理タスク管理

0

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

自分の仕事や予定を管理する上で、以下のようなニーズを満たすツールを探してきました。

  • 数日〜数週間の単位で取り組むタスクの予定と実績を管理したい
  • 数週間先までの予定を見通し良く管理したい
  • 1日の中の時間の使い方を見える化したい

なかなかぴったりとするものが見つからなかったので、ガントチャートとバーチカルダイアリーを合体させたような感じのA4スケジュールシートを自作しました。
マイナーチェンジをしながら、すでに3年以上使い続けています。

使い方としては、上半分に自分のタスクやプロジェクトの日程などを書き、下半分に日々のアポイントや時間の使い方などを書いていきます。

フォーマットはこちらに公開しますので、自由に使ってください。

ビット演算でフラグを管理する

0

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

業務上、フラグを用いて制御が必要な場面があると思いますが
1つのテーブルに複数フラグ管理が必要でDBに○○フラグ、▢▢フラグ、△△フラグと
複数のフラグのカラムが追加が必要なケースがあると思いますが、
今回は上記の様な複数フラグのカラムを一つのビット演算で管理するケースになります。

ビット演算とは


ビット演算とは2進数で表された数値(ビットパターン)を操作する演算のことです。 主にAND、OR、NOTという演算から成り立ちます。

& (AND)


AND演算は2つのビットパターンを取り、1つのビットパターンを返す演算子です。 各ビットにおいて双方が1の場合は1を、それ以外の場合は0を返します。

1 & 1 = 1
0 & 1 = 0
1 & 1 = 1
0 & 0 = 0

| (OR)


OR演算も2つのビットパターンを取り、1つのビットパターンを返す演算子です。 各ビットにおいてどちらかが1の場合は1を、どちらも0の場合は0を返します。

1 | 1 = 1
0 | 1 = 1
1 | 0 = 1
0 | 0 = 0

~ (NOT)


NOT演算は1つのビットパターンを取り、1つのビットパターンを返す演算子です。 各ビットにおいて1の場合は0を、0の場合は1を返します。

~1 = 0
~0 = 1

ビット演算を使ったフラグ管理


数値をビットパターンで表すと、各桁が 0 か 1 で表されます。 したがって 0 を OFF、1 を ON と定義すると大量の状態(フラグ)を一つの数字として 管理することができます。

例えば記事を管理する画面があり1つの記事に対して画像を4つ設定出来る場合

article_image1 = false
article_image2 = false
article_image3 = false
article_image4 = false

この例では設定可能画像が4つだけなので何とかなりますが、数が増えると面倒です。
そんな時はビットパターンを使って状態を管理することを考えます。 以下のようなイメージです。

            image1  image2   image3  image4
article =   0       0        0       0

フラグを立てる

# 状態を初期化
article = 0000
# 画像1を設定
article = article | 1000
# 画像3を設定(画像2は未設定)
article = article | 0010

フラグを下げる

# 状態を初期化(画像1,3設定)
article = 1010
# 画像1を削除
article = article & (~1000)
# 画像3を削除
article = article & (~0010)

フラグを判定する

# 状態を初期化(画像1,3設定)
article = 1010

if ((article & 1000) > 0) 
  puts '画像1はtrueです'
else
  puts '画像1はfalseです'
end

if ((article & 0100) > 0) 
  puts '画像2はtrueです'
else
  puts '画像2はfalseです'
end

if ((article & 0010) > 0) 
  puts '画像3はtrueです'
else
  puts '画像3はfalseです'
end

if ((article & 0001) > 0) 
  puts '画像4はtrueです'
else
  puts '画像4はfalseです'
end

出力結果

画像1はtrueです
画像2はfalseです
画像3はtrueです
画像4はfalseです

仕組み

2進数のどの桁が1になっているかを見て、flagがtrueかfalseかを判定します。
元となるフラグの2進数と、現在のステータスの2進数を「&」演算子でビット演算を行うことで、両方が1の時だけtrueになります。

まとめ

このようにビット演算を使うことで簡単に大量のフラグを管理することができます。
フラグを増やしたい時は、定数を増やすだけで判定できるので、管理が簡単になります。

枠全体をクリック可能な縦幅可変のリンクを並べる

0

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

枠全体をクリック可能な縦幅可変のリンクを並べる対応を、アンカーのposition設定、inline-boxで実施する。

「記事のタイトル・画像・内容の一部を●●文字まで表示するリンクを作成して欲しい、もちろん枠全体をクリック可能で!」
上記のような要望がユーザーからされることが良くあります。調べてみると、個々の問題については対応方法があったりしますが、毎回調べるのも…ということで、全部対応したサンプルを作成してみました。

目次

今回の対応について、2つに分けて解説します。

  • アンカーをdivタグ全体に広げる
  • 縦幅可変の枠を並べる

アンカーをdivタグ全体に広げる

下記対応で実施可能です。
css

      div.box {
    position: relative;
  }
  div.box a {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
  }

html

      <div class="box">
    <a href="hospital-base.html"></a>
    <img src="./sample.jpg" alt="">
    <div class="text">
      <p>テキスト</p>
    </div>
  </div>

「position: absolute」は絶対位置指定。親以外の要素から縁を切り、絶対的な位置に配置します。上記例では親要素の左上端から縦横100%分を範囲として表示しています。
また、親にしたいボックスに「position:static」以外のposition指定(上記例ではrelative)をします。指定をしない場合、親が「ブラウザウィンドウ」になるため、注意です。
 

縦幅可変の枠を並べる

要素の左上からの並び替えはfloat:leftを使用することが多いですが、縦幅が異なる要素を並べた場合に崩れが発生する可能性があります。
そのため、今回はdisplay: inline-blockで実施します。
css

      div.box-inner {
    width: 610px;
    letter-spacing: -.40em;
    background: #EEEEEE;
    padding: 3px 0px 0px 0px;
    border: 1px solid #333333;
  }
  div.box {
    display: -moz-inline-box;/* firefox */
    display: inline-block;
    /display: inline;/* ie */
    /zoom: 1;/* ie */
    vertical-align: top;
    letter-spacing: normal;
    width: 276px;
    background: #f2f9fe;
    border: 1px solid #35559d;
    overflow: hidden;
    font-size: 12px;
    padding: 10px;
    margin: 2px;
    position: relative;
  }

html

    <div class="box-inner">
  <div class="box">
    <div class="text">
      <h4>テキスト</h4>
      <p>ああああああああああああああああああああ</p>
    </div>
  </div>
  ...
</div>

対象の要素にdisplay: inline-blockを追加するだけです。
あとは行ごとに上寄せをするvertical-align: top;、inline-blockを使用した際に発生するスペースを除去するletter-spacing: -.40em; / letter-spacing: normal;を追加して表示を整えます。
 
以上が「枠全体をクリック可能な縦幅可変のリンクを並べる」対応になります。
 

サンプル:

css

      div.box-inner {
    width: 610px;
    background: #EEEEEE;
    padding: 3px 0px 0px 0px;
    border: 1px solid #333333;
    letter-spacing: -.40em;
  }

  div.box {
    display: -moz-inline-box;
    display: inline-block;
    /display: inline;
    /zoom: 1;
    vertical-align: top;
    letter-spacing: normal;
    width: 276px;
    background: #f2f9fe;
    border: 1px solid #35559d;
    overflow: hidden;
    font-size: 12px;
    padding: 10px;
    margin: 2px;
    position: relative;
  }

  div.box a {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
    text-indent:-999px;
  }

  .box a:hover{
    background-color:#FFF;
    filter:alpha(opacity=50);
    -moz-opacity: 0.5;
    opacity: 0.5;
  }

  .box img {
    float: left;
  }

  .box div.text {
    float: right;
    width: 160px;
  }

html

<div class="box-inner">
  <div class="box">
    <a href="hospital-base.html"></a>
    <img src="./sample.jpg" alt="">
    <div class="text">
      <h4>テキスト</h4>
      <p>ああああああああああああああああああああああああああああああああああああああああああああああああああああああ</p>
    </div>
  </div>
  <div class="box">
    <a href="hospital-base.html"></a>
    <img src="./sample.jpg" alt="">
    <div class="text">
      <h4>テキスト</h4>
      <p>あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</p>
    </div>
  </div>
  <div class="box">
    <a href="hospital-base.html"></a>
    <img src="./sample.jpg" alt="">
    <div class="text">
      <h4>テキスト</h4>
      <p>あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</p>
    </div>
  </div>
  <div class="box">
    <a href="hospital-base.html"></a>
    <img src="./sample.jpg" alt="">
    <div class="text">
      <h4>テキスト</h4>
      <p>ああああああああああああああああああああああああああああああああああああああああああああああああああああ</p>
    </div>
  </div>
</div>

 
表示例:
enter image description here

瞬間寝落ち-マイクロスリープの危険性と活用法

0

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

一瞬寝る睡眠方法、マイクロスリープ。その危険性と付き合い方、可能性についてまとめました。

日中、仕事をしているのにウトウト…気がついたら寝落ちしていた…。そんな体験をした人は多いかと思います。重大な病気が隠されている可能性もありますが、多くは睡眠不足を指摘されるでしょう。
ただ、仕事に追われる現代人としては、なかなか改善するのが難しいもの。そこで、今回取り上げるのが「マイクロスリープ」です。
 

1. マイクロスリープとは

急に睡眠状態に移行してしまうことで、1秒未満から30秒弱の睡眠に陥ります。
睡眠状態の間は動作を停止してしまうので、前触れもなく起こるこの症状は大きな危険性を孕んでいます。
 

2. 睡眠との違いは

睡眠は一般的に下記の過程を経て、睡眠状態へ移行します。
 1. 眠気を感じる
 2. 睡眠のための動作をする(横になる、目を瞑る、等)
 3. 睡眠状態に入る
マイクロスリープでは1と2、特に2の動作をすることなく3に移行することを指します。
そのため、「急に動作を停止した」ようになるのです。
 

3. マイクロスリープの危険性

マイクロスリープは、車の運転中やパソコンを用いた単純な作業を行っている際に起こりやすいといわれています。一瞬とはいえ外界からの情報を遮断し、動作を取れない状況に陥るわけですから、車の運転等危険な動作をする場合は注意が必要です。
 

4. マイクロスリープとの付き合い方

上記のような生活に与える影響、そして睡眠不足や精神疾患が原因といわれるマイナスイメージのため、悪いものと捉える人も少なくありません。ただ、そもそもマイクロスリープは、「脳の疲労が限界まで達した場合に、短時間だけ脳全体を休ませる防衛機能」であるため、体が発信する危険信号であるとも言えるのです。
また、一瞬のうちに脳を休めることが出来る、優れた睡眠法でもあるとも言われ、うまく利用することで短時間での疲労回復をすることが可能なのです。
 

5. マイクロスリープの実施方法とは?

マイクロスリープを実践する上で、下記注意点に気をつけることで効率の良い睡眠が取れると言われています。

  1. 眠るのに適した場所を確保する  意識を失っても安全な場所を選びましょう。
  2. ネクタイやベルトなど、体を締め付けるものをゆるめる  締め付けは不快な睡眠の原因となります。
  3. 体に力の入らない楽な姿勢をとる  2同様快適な睡眠のためには必要です。
  4. アイマスクや耳栓など、外部からの刺激を遮断する  睡眠の妨げを排除することはもちろん、顔の一部を隠すことで安心した眠りにつくことができます。
  5. 起きる時間を強く意識する  寝る前に意識していたことは、潜在意識として残りやすいといわれています。
  6. 眠くなる前に実施する  眠くなった後だと、そのまま眠ってしまう危険性が高いです。  

マイクロスリープを実践しようとしてそのまま熟睡してしまった…!電車を乗り過ごしてしまった…!という人もいるかと思います。
短時間での覚醒がどうしても難しい場合、仕事を調整して睡眠時間を増やすなどの生活改善からはじめる必要があります。マイクロスリープはあくまで補助機能である、という意識を忘れないでください。
また、昼休み等休憩時間を使って15分~20分程度睡眠をとるのも大きな効果があるといわれています。
 

まとめ

以上のように、使い方に注意が必要ですが、うまくコントロールすれば有効活用できそうな睡眠方法であるといえます。昼寝が疲労回復を促し、生産性を向上したという話もあるように、この効率的な睡眠が仕事のクオリティを変えていく可能性は大いにあると思います。
「居眠りは悪いもの」 そんな意識を変え、睡眠という生理現象とうまく付き合っていくのが疲労を抱えた社会の中で求められているのではないでしょうか。

BOXでBoxEditから、メモ帳以外のエディタで開いて編集するには(Windows)

0

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

BOXとは

「Box」は、米国Fortune500社の99%が利用する、ビジネスユース実績No.1のコンテンツシェア(ファイル共有)とコラボレーションのためのクラウドサービスです。場所やデバイスを問わず、様々なコンテンツへのセキュアなアクセスと情報の共有・活用を可能にします。また、ユーザとIT管理者の双方に支持される、使いやすくて安全性の高いファイル共有クラウドクラウドサービスでもあり、社内外の人々とこれまでにない新しい形でのビジネスコラボレーションによって、業務生産性の飛躍的な向上やストレージコストの削減により、企業の競争力強化を支援します。2014年5月時点で世界22万社以上の企業が「Box」を採用しています。

enter image description here

通常

Windows 上に、テキストエディタをインストールして、「.txt」をインストールしたエディタに関連付けしていても、Box上で開こうとすると、「メモ帳で開く」と表示されてしまいます。
enter image description here

これを解決するには、レジストリを修正することで対応することが可能です。

変更内容

[HKEY_CLASSES_ROOT\SystemFileAssociations\text\shell]
>”Edit”
>”Command” にて
(規定)のデータを「C:\Program Files (x86)\editer\editer.exe %1」に変更してください。

   ※「editer\editer.exe」部分は、使用したいエディタのパスに変更して下さい。

enter image description here

上記は、サクラエディタに変更した場合の表示例です。

注意点

レジストリキーの変更には危険が伴う場合がございます。
レジストリキーの変更を行う前にレジストリのバックアップを取得することを強く推奨いたします。

Deviseを使用したパスワードのみによる認証

0

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

Railsに認証機能を実装するgem「Devise」を使用して、パスワードのみで認証させる方法。

今回やりたかったのは、Rails で用いる認証機能 gem のDeviseを用いてパスワードのみで認証させるといったケースです。

Deviseの導入に関しましてはネットに様々記載がありますので今回は割愛させてもらいます。

認証ユーザー用のModelを作成

  • 認証ユーザー用のModel名は任意
  • 今回は、Userとする
    app/models/user.rb
    • confirmableを追加

ソース記述例

class User < ActiveRecord::Basedevice
  :database_authenticatable,  :rememberable,  :authentication_keys[];
  ### 以下省略 ###  
end

Deviceの認証が通常メールアドレスとパスワード認証がデフォルトですので
authentication_keys[]の記述がメールアドレスを使わないという意味になるようです。

上記の記載によりDeviceの認証時にパスワードのみで認証が可能となります。

余談ですがDeviseでメールアドレス以外のカラムをログイン認証に利用する場合は
例えばユーザー名(usernameカラム)で認証を行いたい場合は以下を追加すると良いようです。
authentication_keys => [ :username]

プログラミングで挫折した人に!日本語で書けるプログラミング言語3選

0

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

プログラミングを始めたい、でも参考書を読んでも全く意味がわからない。そんな人向けに、初心者でもわかりやすい日本語で記述できるプログラミング言語をご紹介します。

春からSE始めました。しかし参考書を開いても、意味の解らない言葉ばかり……
そんな私に救世主が。

日本語で記述できるプログラミング言語があるんです。

これならカタカナ・英語アレルギーの人でもなんとかなりそうですね。早速3つ、ご紹介します。

■なでしこ

なでしこ
起動時に現れるなでしこのデモページ

起動するとまず、「なでしこのはじめに」という画面が現れ、なでしこの解説やどんなものが作れるのかの例などが実際に見られます。なでしこを使って作られたゲームで遊ぶこともでき、イメージをつかみやすいですね。

nade

プログラムを記述するエディタのデザインも、なでしこ色(?)で統一されていて可愛らしいです。さっそくなでしこのマニュアルに従ってプログラムを書いてみます。
クジラが「こんにちは」と言う。
こう書いて実行ボタンを押すだけで、クジラの絵が出てきて「こんにちは」と言ってくれました。楽しい!

■プロデル

プロデル
プロデルのデザイナ
デザイナ(プログラムを書いたり設定したりする画面)が見やすい!
ファイルサイズが小さいので、実行が早いのも魅力の一つです。

■ 言霊

言霊

文系の学生がプログラミングに対して拒絶感を持たないよう開発されたとのこと。Javaの仮想環境で動くので、Macユーザーも使えるのが嬉しいですね。

■まとめ

3つの言語に触ってみて、私の個人的な感触としてはなでしこが一番初心者に優しく使いやすいと感じました。(記事の文章量にもそれが如実に表れていますね。)
プログラミングに慣れてきたら、プロデルや言霊の方が使いやすいと感じるのかもしれません。それぞれの嗜好や開発環境の違いによって、自分にあった日本語プログラミング言語を選んでみてください!

carrierwaveとfogでRiak CSへの画像アップロードを実装する

0

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

Amazon S3互換のストレージサーバーRiak CSに、Railsの画面からファイルをアップロードする機能を実装します。

Riak CSについて

Riak CSは、 Basho Technologies, Inc. がオープンソースで開発しているAmason S3互換のストレージサーバーです。Railsアプリケーションでは、carrierwavefog-awsという二つのGemを使うと、ファイルのアップロード処理を簡単に実装することができます。

APIが互換なので、Railsから見るとAmazon S3とほとんど同じです。

確認画面について

日本の業務系アプリでは、編集画面から保存するとき「確認画面」をはさむように要求されることが多いです。これはRailsのレールから外れてしまうため、特に画像系のファイルアップロードがからむと非常に面倒です。

しかし、carrierwaveでは《キャッシュ》というアップロードされたファイルを一時的なディレクトリに保存する機能があるので、確認画面のプレビューに画像を表示させることができます。

複数サーバー環境

複数のアプリケーションサーバーで負荷分散している場合、アップロードするファイルを共通のストレージに保存する必要があります。

carrierwaveの標準の機能では、アップロードされたファイルをサーバーのディスクに直接保存するため、そのままでは使えません。

fogという各種クラウドサービスに対応するGemを使えば、carrierwaveと連携してアップロードされたファイルをクラウドに保存することができます。

fog-awsはAmazon S3やプロトコル互換のネットワークストレージに対応するGemです。

今回はこのfog-awsを使用して、Riak CSにファイルをアップロードします。

環境

Riak CSの環境として、IDCFクラウドのオブジェクトストレージというサービスを利用させていただきました。

Railsで作成したサンプルアプリケーションは、下記のような構成になっています。

  • Ruby 2.3.1
  • Rails 5.0.0
  • carrierwave HEAD版
  • fog-aws 0.10.0

2016年7月の執筆時点のcarrierwaveでは、《キャッシュ》の一時保存先にfogのストレージを指定する機能がまだ正式リリースされていないため、GitHubのHEAD版を使用します。

実装

完成したソースコードを https://github.com/kkismd/cloud-sample に公開しています。
以下、ポイントとなる箇所を抜粋しながら説明します。

アプリケーションの概要

Userというモデルが、名前(name), メールアドレス(email) という属性のほかに、avatarという名前で画像ファイルを持ち、画面からアップロードすることができる、という機能を実装しました。
carrierwaveを使う場合、カラムとしてファイル名を表す文字列のカラムを用意します。

create_table :users do |t|
  t.string :name
  t.string :email
  t.string :avatar

  t.timestamps
end

Gemfile

前述のライブラリをGemfileに記述します。以下は抜粋です。

ruby '~> 2.3.1'
gem 'rails', '~> 5.0.0'
gem 'carrierwave',
  github: 'carrierwaveuploader/carrierwave',
  ref: 'b31f7ce006bade550be0ad946d0b993b799358e3'
gem 'fog-aws'

イニシャライザ

config/initializers/carrierwave.rbというファイルを作成してcarrierwaveとfog-awsの設定を記述します。

CarrierWave.configure do |config|
  config.fog_provider = 'fog/aws'
  config.fog_credentials = {
    provider: 'AWS',
    aws_signature_version: 2,  # ☆1
    aws_access_key_id: ENV['fog_api_key'],
    aws_secret_access_key: ENV['fog_api_secret'],
    region: ENV['fog_region'],
    host: ENV['fog_host'],
  }
  config.cache_storage = :fog # ☆2
  config.cache_dir = 'tmp/image-cache'
  config.fog_directory = ENV['fog_directory']
  config.asset_host = ENV['fog_asset_host']
end

個別に設定しなければならない値は、環境変数(ENV)から読み取るようにしています。
今回は環境変数の割り当てにfigaro というGemを使っています。

注意しなければならないポイントとして、Riak CSではファイルアップロード時に送信する電子署名のバージョンがAmazonのものより古いため、コメント ☆1 の設定を入れなければファイルをアップロードしようとしても失敗します。この事象はエラーメッセージが分かりにくくて特定に時間がかかってしまいました。

また前述の通り、《キャッシュ》の保存先をRiak CSに設定する ☆2 は、執筆時点でのcarrierwaveリリース版ではまだサポートされていません。

アップローダー

carrierwaveではまず app/uploadersディレクトリに「アップローダー」と呼ばれるクラスを定義します。ジェネレータが用意されているのでそれを利用します。

% rails generate uploader Avatar

生成したあと、保存先をfogに設定します。

class AvatarUploader < CarrierWave::Uploader::Base
  storage :fog

モデル

つぎに、UserモデルにAvatarUploaderを《マウント》します。

class User < ApplicationRecord
  mount_uploader :avatar, AvatarUploader

コントローラ

scaffoldでusersテーブルのCRUDを実装したあと、新規作成と保存について確認画面を追加します。
ここでは名前を create_confirmupdate_confirm としました。
コントローラにメソッドを記述し、routesファイルに定義を追加しました。

  resources :users do
    collection do
      post :confirm_create
    end
    member do
      patch :confirm_update
    end
  end

ビュー

確認画面でアップロードした画像をプレビューすることができますが、保存画面にデータを持ち回るために hidden フィールドにデータを保持します。

   <div class="field">
    <%= image_tag @user.avatar_url if @user.avatar? %>
    <%= f.hidden_field :avatar_cache %>
   </div>

ここでイメージタグで表示される画像は、Riak CSのキャッシュ用に設定したディレクトリに保存されています。このファイルはモデルがDBに保存するタイミングで実際の保存用ディレクトリにアップロードし直され、自動的に削除されます。

まとめ

carrierwavefog-awsを使うことにより、Amazon S3だけでなく互換性のあるストレージシステムに対しても簡単にファイルをアップロードする機能を実装することができます。

ただし、使用されているソフトウェアによって若干の差異があるため、実際に動かして確認する必要があります。

キーボードだけで生きて行く

0

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

なぜキーボードに操作を集約させるのか

 今回は作業を出来る限りキーボードだけで完結させるためのtipsについて紹介していく。まず、その前に自分が何故キーボードで操作したがるのかを説明しておきたい。

手元/視線の移動が少ない
 マウスを使う場合、どうしても手が大きく移動する。おまけにデュアルモニターで画面が広いとカーソルがしばしば迷子になる。マウスを使う度に画面上からカーソルを探すゲームを強要されるのは面倒だ。マウス探しやカーソル探しで視線が大きく移動すると注意が途切れ、時間も微妙にかかる。

マウス操作自体が面倒
 そもそもマウスでカーソルを移動させて特定地点まで運びクリックするという作業自体が面倒で遅い。マウスによるUIは誰でも直感的に扱えるが最速ではない。最速といえばキーボード。少なくとも人体に直接接続できる入力デバイスが開発されるまでは。

全体的な話

 次に汎用的な話について少し。キーボードに操作を集約させる上で自分が気にする点がいくつかある。

1.ホームポジションから離れない
 方向キーはこの理由でキーバインドにあまり使わない。確かに直感的だが、方向キーを使おうとするとホームポジションから右手が大きく移動するので割り当てたくない。

2.同じような操作は同じキーバインドで
 例えばタブを前後に移動するような操作は同じキーバインドを割り当てる。アプリによって操作が変わるのは誤操作しやすいし、そもそも覚えていられない。

3.アプリケーションごとのキーバインド設定(mac)
 アプリケーション自体でショートカットキーの設定をサポートしていない場合がある。そういった場合には「システム環境設定」>「キーボード」>「ショートカット」>「アプリケーション」で追加出来る。例えば自分はChrome、Skypeなど使用頻度の高いアプリに対してタブ移動をControl+W/Qで登録している。

Webブラウザを操作する

 特に頻繁に使うのにキーボードで操作しにくいのがWebブラウザ。ここではブラウザ操作をキーボードで操作するプラグインとして「vimium」を紹介する。名前の通り、みんなが大好きなvimのキーバインドで操作ができる。対応ブラウザはchrome/firefox。
http://vimium.github.io/

 これによってWebブラウザを利用する上で必要な操作の9割ぐらいはキーボードで行うことが出来る。数十の機能があるが主だったものを数点だけ挙げれば以下の通り。

  • 画面のスクロール
  • タブを移動・作成・閉じる
  • リンクを開く
  • ページ内検索
  • ブックマーク検索

これを使う上で覚えるべきキーバインドはそれほど多くないため、百歩譲って何らかの理由で不幸なことにvimに馴染みがない人もvimiumは十分に使える。

 特に便利なのが「リンクを開く」「ブックマーク検索」といったブラウザが元々サポートしていない機能。この辺の機能を押さえておくだけでもブラウザ操作のほとんどをキーボードで行うことが出来るはず。

まとめ

 日常的に業務で使うものと言えば、コンソールとSkypeとWebブラウザ、メールクライアントの四点ぐらい。今回の記事でその四点はキーボードで操作がほぼ完結するようになるはず。他に使う必要があるExcelなどもショートカットキーを多用することでマウスの必要性をかなり小さく出来る。もはやマウスは机の上で置物となるだろう。

 ところで職場用のマウスにKensingtonのExpert Mouseを買いました。ボールをコロコロして操作するの楽しいのでお勧めです。みんな買おう。╭( ・ㅂ・)و

vimでMarkdownに数式を組込んでプレビューさせる

0

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

Markdownの編集中にリアルタイムにプレビューしてくれると非常に便利である。

vimでMarkdownを編集する場合には、previmを利用すると、browser上でほぼリアルタイムにプレビューしてくれる(marked.jsを利用しているらしい)。

さて、本記事では、Markdownで書いている文章に、数式を綺麗に表示させる方法について記載する。

数式を綺麗に表示させるために「MathJax」を利用する。

previmでMathJaxに対応したMarkdownを利用するためには、previmのpluginの下記を変更すればよい。

変更点1

「preview/index.html」に以下を挿入する。

    <script type="text/x-mathjax-config">
      MathJax.Hub.Config({
        CommonHTML: { matchFontHeight: false }
      });
    </script>
    <script async src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_CHTML">
    </script>

変更点2

「preview/js/previm.js」に1行挿入する。

    if (needReload && (typeof getContent === 'function') && (typeof getFileType === 'function')) {
      var beforePageYOffset = _win.pageYOffset;
      _doc.getElementById('preview').innerHTML = transform(getFileType(), getContent());

      mermaid.init();
      Array.prototype.forEach.call(_doc.querySelectorAll('pre code'), hljs.highlightBlock);
      autoScroll('body', beforePageYOffset);
      style_header();

      // ↓の1行を挿入する。
      MathJax.Hub.Typeset(document.getElementById("preview"));
    }

数式の書き方

MathJaxを利用しているのでMathJaxの記法(TeXの記法に準拠しているらしい)で記述できる。

以下に記述の例を示す。

複数行数式の例

\\[
  E = mc^2
\\]

本記事の冒頭の画像は、この例の記述で表示される数式(のキャプチャ)である。

インライン数式の例

計算式「\\( \alpha \times \beta \\)」で表される。

テキストベースの資料作成で使えるツールについて

0

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

序論

今更書き出すほどのものでもないが、テキストベースで文書を作成すると以下の利点がある。

  • 差分管理ツールが充実している(git, mercurial, …)
  • マウスの使用を最小限に抑えることができる

そこで、設計書をテキストベースで管理できないかを検討し、以下の構成で試したので簡単にまとめる。

  • 文章:Markdown
  • 図:PlantUML
  • ファイル管理:GitLab

PlantUMLについて

PlantUMLは、テキストベースでUMLが記載できるjava製のツールである。
図の出力に、graphvizを利用している。

例えば、以下の図を記載できる(下記に挙げたものは、全てではない)。

  • シーケンス図
  • ユースケース図
  • クラス図
  • アクティビティ図
  • コンポーネント図
  • 状態遷移図

また、UMLだけではなく、作図のための要素も用意されている。

使用したツール

Markdown

markdownの編集ツールは、vimを利用した。
vimのpluginのprevimを利用すると、browser上でほぼリアルタイムにプレビューしてくれる。

vimに拘りがなければ、atomや、haroopadも良いと思う。

PlantUML

Atomの下記pluginを利用して、編集時に図をリアルタイムにプレビューできるようになる。

  • language-plantuml
  • plantumlntuml-viewer

※但し、事前にplantumlを利用できる環境を準備しておく必要があるので注意。

なお、本記事の先頭の画像は、Atom上でPlantUMLをプレビューしている様子を表示している。

GitLab

GitLabにブラウザでアクセスすると、リポジトリ管理下のmarkdown形式のファイルを整形した状態で表示してくれる。
このため、ブラウザで整形された文書を確認することができる。

また、以下のような書式で同一ファイル内へのリンクだけではなく、
別ファイルへのリンクもできるためページ遷移も容易にできる。

  [ページ内リンク](#link)
  [別ファイルへのリンク](hogehoge.md)

振り返り

良かった点

  • マウス操作が、ほぼ不要になった。Atomを利用しないならターミナル上だけで操作を完結できる。
  • Officeソフトのような重たくて編集しづらいソフトから解放されVimだけで資料作成が完結できたことによりストレスから解放された。
  • 修正点をGitLab上で「明確」に確認できる。
  • 修正の反映もgitでpushすればよいだけなので非常に楽だった。
  • 指摘された点を修正した後、GitLabにpushしたことを通知すれば、メンバーはブラウザをリロードするか又は対象のURLにアクセスするだけで最新の仕様書を読むことができる。

悪かった点

  • GitLab上での「表」の表現力が低いため、大きな表を作成すると見辛い。
    • セル内の文字の配置がセンタリングしかできない(左寄せ、右寄せの指定ができない)。
    • 表のセル内で明示的な改行ができない。
    • 表の横幅を指定できない。
    • 表の外枠の横幅が決まっているため、横に長い表を作成すると、デザインがものすごく微妙になる。

悪かった点は、上述したように、文章の表現力の低さ、特に「表」に関する表現力の低さが目立つ。
これが改善されれば、ほぼ言うことはない。

まとめ

特に、修正した内容を確認してもらうときの速度が、かなり早くなったのが印象的だった。

Officeソフトで設計書を作成していると、修正された設計書を確認する人は、設計書が置かれたファイルサーバからローカルに持って来た後にファイルを開かなければならない。
Officeソフトは総じて動作が遅いため一々時間がかかる。

この作業は非常に面倒くさい。

しかし、今回の方式では、GitLab上でプレビューできるため、修正箇所のページのURLを渡せば、修正箇所を即座に確認することができる。既に該当個所のページを参照している場合には、ブラウザをリロードしてもらうだけでよい。

簡単な修正であれば、設計書に対する指摘があったときから修正後の設計書の確認完了まで1分以内に抑えることも可能だ。

スピード感を持った開発を目指すなら、良いアプローチの一つになると思う。

Fog を利用した IDCF オブジェクトストレージ へのアップロード・ダウンロード

0

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

Railsで画像アップロード等を行うにはCarrierWaveを使用するのが便利であるが、これは特定のモデルに紐づくファイルをアップロードする事が基本的な使用方法である。 それに対して、ただ単純に(特定のモデルに紐付かない)ファイルをIDCFオブジェクトストレージへアップロードしたりIDCFオブジェクトストレージからダウンロードしたりするという用途においては、 Gem「fog」を利用すれば簡単に実装できるようになる。

Gemfile

gem 'fog'

アップロード方法

file_uploader = Fog::Storage.new(
  provider:               'AWS', # IDCFでもAWSと記述
  path_style:             true,
  host:                   'ds.jp-east.idcfcloud.com',
  port:                   443,
  scheme:                 'https',
  aws_access_key_id:      'XXX', # アクセスキー
  aws_secret_access_key:  ENV['SECRET_IDCF_SECRET_KEY'],
  region:                 'ap-northeast-1', # 東京
  aws_signature_version:  2
)

file_uploader.put_object(
  'XXX', # バケット名
  '/tmp/xxx/xxx.xxx', # ファイルのフルパス
 'XXX' # ファイル内容(パラメータで受け取る場合は、そのままparams[:xxx]等)
)

ダウンロード方法

file_uploader = ... # アップロード方法と同内容なので省略

File.open(file_full_path, 'w') do |f|
  f.write file_uploader.get_object(
    'XXX', # バケット名
    '/tmp/xxx/xxx.xxx' # ファイルのフルパス
  ).data[:body]
end

3分リファクタリング Rails.root編

0

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

log/ や public/など RAILS_ROOT 以下のファイルへの扱うとき、File や FileUtil などのクラスを使わずシンプルに記述できます。

BEFORE

Logger.new(File.join(Rails.root, "log", "production.log"))

AFTER

Logger.new(Rails.root.join("log", "production.log"))

POINT

Rails.rootが返すオブジェクトはPathnameなので、FileFileUtilでできることのほとんどをメソッドとして持っています。
File.joinなどを改めて呼ぶ必要はありません。

REFERENCE

http://ruby-doc.org/stdlib-2.4.3/libdoc/pathname/rdoc/Pathname.html

VERSIONS

Ruby MRI 2.3.1
Rails gem 'rails', '5.0.0'

CarrierWave を使用した IDCF オブジェクトストレージ保存

0

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

Railsに画像等のファイルをアップロードする機能を実装するgem「CarrierWave」を使用して、ファイルをIDCFのオブジェクトストレージへ保存する方法。

アップローダの編集

「rails g uploader XXX」 にて生成されるアップローダ(app/uploaders/XXX_uploader.rb)を、以下の様に編集する。

class XXXUploader < CarrierWave::Uploader::Base
  storage :fog # オブジェクトストレージに保存する場合は :fog を指定
  ### 以下省略 ###
end

初期化設定

下記の様な設定ファイルを作成し、config/initializers/carrierwave.rb 等として保存。

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:              'AWS', # IDCFでもAWSと記述
    path_style:            true,
    host:                  'ds.jp-east.idcfcloud.com',
    port:                  443,
    scheme:                'https',
    aws_access_key_id:     'XXX', # アクセスキーを記述
    aws_secret_access_key: ENV['SECRET_IDCF_SECRET_KEY'], # シークレットキー
    region:                'ap-northeast-1', # 東京
    aws_signature_version: 2
  }
  config.cache_storage = :fog # 一時ファイルもオブジェクトストレージに保存する場合(LB使用時は必須)
  config.fog_directory = 'XXX' # バケット名を記述

  config.asset_host = 'ds.jp-east.idcfcloud.com' # CDNを使用しない場合
  config.asset_host = 'https://XXX.cdn.jp.idcfcloud.com/' # CDNを使用する場合
end

最近人気な記事