Monthly Archives: 11月 2016

2016-11-29

Backlog API を使ってみよう!

こんにちは。GMO NIKKO エンジニアのALPHです。

今回、偶然にも

Backlog API を触る機会がありましたので

紹介させて頂きたいとおもいます。

Backlogに関してはこちら

http://www.backlog.jp/

 

使ったことがない皆さんもいるかもしれないので簡単に説明すると

Backlogは課題管理が得意なプロジェクト管理ツールなんですが

WikiやGitまわりが使いやすく、また見やすく本当に重宝させて頂いています。

使ってて微妙にやる気がなくなってくるプロジェクト管理ツールが多いのですが

BackLogに関してはだんだん愛着がわいてきて

多少の不便があってもなぜか利用してしまう

不思議な感じがします。

 

昔、影舞(今は活動がとまっている模様)

を少しつかっていたこともあるせいかもしれませんが

なんとなく同じフィーリングで利用できるので

そのような技術者さんはなじみやすいかもしれません。

 

さらに実は、、、、

Backlogは APIが公開されており

APIを使ってある程度自由にデータを取得、更新等ができる

のです。(意外と地味にきづかない!)

 

Backlog API の詳細は下をクリック

https://developer.nulab-inc.com/ja/docs/backlog

 

例えば、APIを使った業務ツール等に発展できるかもしれません。

ただ、若干情報量が少なく、ネット上でのサンプルも少なく

最初は少し苦労するかもしれません。

まずアクセス方法が、私も最初はわかりませんでした。

 

今回、

誰でも簡単にアクセスする方法を簡単に書こうと思うのですが

まずはライブラリではなくcURLのほうがわかりやすいと思いますので

APIキー + cURL を使ったアクセス方法から説明していきます。

 

Backlog API

基本的な構成はREST API

認証方式は、APIキーとOauth認証があり

今回はAPIキーを使った方法を記載します。

 

APIキーはすぐ手軽に

一般ユーザーでも管理画面から発行できます。

Backlog API設定

 

権限はデータ取得であればゲストビューアーでもOKです。

APIでアクセスするユーザーを準備したら

そのAPIユーザを対象プロジェクトに参加させます。

プロジェクト参加権限がない場合はデータ取得できません。

※書き込みはトラブルの元なので注意してください。

 

それでは、APIキーを発行したら下記のようにcURLでたたいてみましょう
下の例は、プロジェクトの一覧を取得するコマンド

下の例は、課題の一覧を取得するコマンド

戻りの値はJson形式で返ってきます。

※現在MAX100件程度しか返ってこないので、もっとデータをとりたい場合は うまくoffsetを利用してください。

あとは、プログラムを使って、その戻ってきたJsonデータをCSVになおしたりします。
また、追加・更新系の処理はメソッドPOST,PATCH等を利用して行っていきます。

プロジェクトを新規に追加する場合のコマンド例

プロジェクトの更新を行う場合のコマンド例

だんだんめんどくさくなってきましたね(ToT)
やっぱり簡単にライブラリを使ってデータを抽出したいという人は
Backlog-v2 のライブラリをおすすめします。

Backlog-v2 は ここから
https://github.com/atomita/backlog-v2.git

まず、対象のディレクトリにコンポーザーとセットでインストールします。

次に同じ階層に適当な名前でPHPを作り、疎通テストを行います。
その際にautoload.php を読み込んであげてください。

こちらも思ったより、簡単にインストール&疎通テストまでできますね。

基本はこのライブラリを使っている人が多いのではないかと思いますが

イメージがわきやすいcURLとライブラリの比較を中心に今回は記載させて頂きました。

 

 

2016-11-28

RubyとOpenCVで始める画像処理

こんにちは。

GMOアドマーケティング、16新卒エンジニアのT.Iです。

今年4月に入社し、配属後の7月からは主にRuby on Railsを使った開発を行っていますが、学生の頃は画像処理プログラミングを行っていたため、今回はこれまでの経験を活かしてRubyとOpenCVを活用した基本的な画像処理プログラミングを紹介致します。

Continue reading

2016-11-22

docker-composeのススメ

GMOインサイトのインフラ担当Mです。

皆さん、Docker使っていらっしゃいますか?
本日は皆さんのDocker Lifeをより豊かにしてくれる
docker-composeについて綴ってみたいと思います。

docker-composeとは

Dockerで複数のコンテナを連携させてサービスを提供する場合、
コンテナを立ち上げる順番などの管理が煩雑になる場合があります。

docker-composeを利用すると、専用の設定ファイルを使って複数のコンテナを
まとめて、かつ簡易に扱うことが可能になります。

docker-composeの設定ファイル

docker-composeの設定ファイルはYAML書式で記載されており、
可読性が高いことも利点です。

例として、Redmineを起動する設定ファイルを提示します。
これはDBとしてmysqlを利用し、mysqlのデータはBusyBoxに保存するというものです。

煩雑な設定が綺麗な形でまとまるのがおわかりいただけるかと思います。

docker-composeの導入

docker-composeのインストール手順についてはDocker公式にて記載があります。

https://docs.docker.com/compose/install/

見ていただければわかるとおりに至極簡単です。

これでdocker-composeコマンドが実行出来るようになります。

あとは実行したい設定ファイルが存在するディレクトリにて
docker-composeコマンドを実行するだけです。

たとえばコンテナを起動する場合であれば

という形で実行すればコンテナ群が起動します。

逆に終了する場合は

という形で実行すれば、関連のコンテナ群がまとめて停止してくれます。
コンテナイメージのPullなどもおこなってくれるため、とても便利です。

まとめ

dockerの目玉は複数の機能をもったコンテナを組み合わせてサービスを構築することですが
docker-composeを利用することで、この思想に沿ったdocker運用が効率的に行えるようになります。

全体的な管理という意味でもYAMLファイルにまとまっているのが大きな利点だと考えます。
ガリガリとdockerを使っていきたい場合には必須の機能かと思いますので
是非、お試しください。

2016-11-10

Virtualboxって必要ですか?

GMOアドマーケティングSSP開発グループのn.yです。

早速ですが、皆さんはローカル開発環境をどの様に構築していますでしょうか?
Vagrant + Virtualboxを使用して仮想環境を作って開発してみたり、
XAMPP(MAMP)を使用してみたり、
はたまたそんなの面倒だと本番を直接イジる強者など他にも様々な方がいらっしゃるかと思います。

そこで今回はDockerによるローカル開発環境構築に関してお話出来ればと思います。
(Docker自体がどの様なものかを知りたい方はコチラのページなどが簡潔にまとまっていて分かりやすいですので是非)

まずDockerを使ってローカル開発環境構築すると何が美味しいの?っていう話をします。

  • より本番に近い環境(むしろ本番そのままの環境)をローカルに構築出来る(これは非常に有り難い)
  • 一度再現した環境は何度でも再現可能(おまけに一度作った環境は更に速く構築可能です)
  • クラウドのサービスを利用しているとより便利さを実感できる(AWS, GCP(個人的はココが1番シンプルで相性良い気がする), Azure, Bluemixなどなど)
  • DockerのGitHub的な存在であるDocker Hubhttps://hub.docker.com/)が存在する(様々なイメージが準備されていてそれぞれのイメージのドキュメントも充実しています)

などなど。

ではマズい点、美味しくない点にも行ってみましょうか。

  • そもそもDocker自体の学習コストが多少なりともかかる(新しいものはどれもそうですけど)
  • Dockerはコンテナという概念を利用するので、Dockerに合わせた環境構築が必要(その為、既存のプロジェクトをDockerに置き換えようとすると色々とハマる)

といったところでしょうか。つまり使って損はしませんし、各社クラウドのサービスを見てると明らかにDockerを前提とした方向へ流れてる気がします。
と前置きをしたところで、タイトルのアレですよね。Virtualboxって必要ですか?って内容に入りたいと思います。
結論、Dockerでローカル開発環境するにあたっては必要ございません。と言うより必要なくなりました。

以前まではDockerで環境構築する際、MacであろうがWindowsであろうがローカルにLinux環境を構築する為にVirtualboxを内部的に利用していました。
なのでDocker Toolboxをダウンロードすると一緒にVirtualboxもダウンロードされる仕様でした。
勿論この状態でも使用可能ですし、開発する上では全然問題ありません。

では何が問題なのでしょうか?

そうです。スピードです。スピード大事ですよね。スピード出ないとイライラしますよね。

Docker Toolboxだと内部でVirtualboxを使用している為、環境の立ち上げるのにそこそこの時間を要しました。(PCのスペックにもよると思いますが)

そこでこれを解決すべく現れた救世主がDocker for Mac(or Windows)https://docs.docker.com/docker-for-mac/)です!(これからはこちらがメインになっていく気がします)

これダウンロードして使ってみると実感して頂けるかと思うのですが、スピードはかなり速くなってます。おまけにPC起動と同時にDockerが使えるようになっているのでストレスフリーです。
※ちなみにWindowsだと10以降のようなので、残念ながらその方々はDocker Toolboxを使って下さい。

Docker for Mac(ここではMacを中心にお話いたしますが、基本的にはWindowsでも同じです)ですが、こちら何故スピードが速いかと言いますと、Yosemite以降で導入されているネイティブの超軽量の仮想化ソフトウェア(xhyve)を利用できるからなんです。

つまり、Virtualboxの代わりのものがあるから、わざわざ重たいVirtualboxを間に挟む必要が無いということなんです。

では試しにDocker for Macを使ってPHPで自身の設定を出力してみましょう。

①まずはDockerfileを作成します。

一応中身を簡単に説明しておきますと、PHP7.0とApache連携済みのイメージ(このイメージだとLinuxのOSはDebian)から(お手軽なので)生成しています。UbuntuだったりCentOS、もしくはDockerゴリ押しの軽量イメージであるAlpine Linuxからも勿論環境を構築可能です。

そしてCOPYでsrc/ディレクトリの中身を/var/www/html/にコピーします。そのままですね。

②設定出力用のディレクトリとPHPファイルを作成

任意の場所でsrcディレクトリを作成し、その中でtest.php(設定出力用)を作成

test.phpの中身は下記の通り。

現在、ディレクトリ構成はこの様な感じになっているはずです。

③ではビルドしてデプロイしてみましょう!

どうやら順調に起動しているようです!!

それではlocalhost/test.phpでブラウザからアクセスしてみましょう。

下記の様に設定一覧が表示されれば成功です!
docker_localhost

簡単ですよね?速いですよね?
まだまだ自分自身使いこなせていない箇所が多々ありますが、結局はLinuxの知識がある方が使えば「なるほど。なるほど。」と思える箇所が多々あるハズだと思います(自分はここら辺の知識が不足していたので初めは少し戸惑いました。)

以上、Virtualbox一先ずローカル開発環境では要らないよね?ってお話でした。

 

2016-11-07

New Relic(Application Performance Management)を利用して、アプリケーションの性能を改善してみましょう!

こんにちは。GMOアドマーケティングエンジニアのchoiです。

今回ご紹介するのはApplication Performance Management(= APM)です。
そして、APMを利用してアプリケーション(言語: Ruby On Rails)の性能を測定、改善してみます。

■ Application Performance Management (= APM)とは?
文字通りにアプリケーションの性能管理という意味です。
アプリケーションの性能を測定やモニタリングすることで、クライアントにもっと質がいいアプリケーションを提供することが可能となります。
APMといえばJenniferAppDynamicsNew Relicなどがありますが、今回改善してみるアプリケーションの言語(Ruby On Rails)をサポートするのはNew RelicしかいないのでNew Relicを利用して改善してみます。(JavaやPHPなどのサポートをするのは多いですが、Railsをサポートするのはあまりなさそうです。)

■ New Relic インストール
1. アカウント作成
まずは、以下のアドレスでからアカウントを作成します。
New Relic

2. 言語選択
アカウントを作成してログインし、APMをクリックすると以下の画面が表示されます。
Rubyを選択します。
dfdfdfdfdf

3. インストール
以下のイメージの順番の通りにNew Relicをインストールします。
111111111111111111111111111111

ghngjgjfbfbfb

4. アクセス
アプリケーションからNew Relicにデータが送信されることを確認したら、APMをクリックし My Applicationをクリックします。
(アプリケーションの名などはConfig/newrelic.ymlファイルで設定しておいた名となります。)

bbbg6uyu6u76

5. 完了
以下のようにグラフなどが表示されたら完了です。
all-new

■ New Relic 機能
New Relicで、提供する基本的な機能についていくつかを紹介します。

1. web transactions time
transactionsの実行にかかった時間を表示します。
transactions
Middleware: Rails側の処理時間(routingなどの時間)
Ruby: 実際に開発したアプリケーションの処理時間
MySQL: クエリーの要請~レスポンスまでの時間
Web external: 外部APIの処理時間(request、response)

2. transaction trace
トランザクションの処理時間を詳しく見ることができます。どの部分が遅いのかを把握してチューニングすることができます。

trac-new-win2

trac-new-win3
3. Apdex score

サーバーでリクエストの処理時間とブラウザーでリクエストの処理時間が見れます。特定時間の間にリクエストの処理時間が設定しておいた時間を満たさないとalertを発生します。

apdex-new
デフォルトは以下の通りです。
サーバー: 0.5秒
ブラウザー: 7秒

4. Throutghput
1分単位のリクエストを確認できます。どの帯にリクエスト量が多いのかが分かります。

throutghput-new

5. database
クエリーの時間を知ることができます遅いクエリーなどを測定してチューニングができます。
databassss-new

6. error
アプリケーションでエラーが発生した場合、どのエラーだったのかどのURLにアクセスしようとしたかなどのエラーが追跡できます。

error-new-win34 error-new-win35

■ 実戦
実際にNew Relicを利用して、アプリケーションの改善をしてみます。

1. transaction trace
transaction traceを利用して、処理速度が遅い箇所を探します。
平均の処理時間:  810ms
new-trac-win12113

2. 原因分析
transaction traceの画面の右にはクリックしたトランザクションに対しての詳細を確認することができます。
平均の処理時間: 810msで、Net::HTTPの処理が一番遅いのを特定できます。

korekore242-win

3. 改善方法を探す。
私の場合は、
– 既存にHTTP通信で利用していたGEMを利用せずに、以下のようなさまざまなサイトで速度のよいGEMを探して切り替えました。
http://qiita.com/cuzic/items/694646c42162de4da0c8

– HTTP通信関連のコードを読みながら、改善箇所を探して改善しました。
このメッソド内では、同期で2回のリクエストを行う処理があって、それを非同期に変えました。

4. 改善結果
平均の処理時間: 810msから417msに改善されました!

new-kaizen2311

■ まとめ
一言でいうと、便利で使いやすいと思います。
最初はインストールや使い方を覚える必要がありますが、使い方に慣れたら性能がいいアプリケーションをユーザーに提供することがもっとやりやすくなると思いました。