matsuok’s diary

あくまでも個人的意見であり感想です

ruby学習をWindows10にて初めてみました。

f:id:matsuok:20200530120540j:plain

歩数計


 

Why?
昨年12月半ばから、あるソフト会社で、パート(契約は個人事業主として委託契約、額は一般パートレベル)はじめましたがコロナのため、4月半ばで無期限休業となりました。
StayHomeで、自習をはじめました。

そこの会社ではバックエンドでは、rubyが主でしたので、始めてみましたが、現在のIT業界ではもはや、rubyはあまり人気がなくなっているようです。
google検索と書籍で自習しているのですが、インターネットでは3年以上以前のものがほとんどです。
前提がなければ、PythonJavaScriptもしくはPHPなどのほうが良いようです。

題材
愛犬の散歩に携えているカバン(うんち袋入れ)に歩数計を入れているので、そのデータをDBに格納してグラフ化してみるのをゴールとしました。

歩数計 HJ-205IT https://store.healthcare.omron.co.jp/item/HJ_205IT_W.html
取扱説明書(1.8 MB)https://www.healthcare.omron.co.jp/support/download/manual/pdf/hja/HJ-205IT_A_m.pdf

その歩数計は、PCにデータ取り込みが可能です。CSVとして取り出すことができます、
2017年9月1日からPC上に保存されています。以前は製造元がインターネット上でサービスビジネスとして健康管理ホストを提供していましたが、いまはスマホに方針転換して廃止になりました。

https://www.healthcare.omron.co.jp/info/2016/1004.html

https://www.faq.healthcare.omron.co.jp/faq/show/13710?back=front%2Fcategory%3Ashow&category_id=725&page=1&site_domain=wlsoft&sort=sort_access&sort_order=desc

ウェルネスリンク機器専用 測定記録取り込みソフトウェア(以下、本ソフト)では、対象となるウェルネスリンク機器の本体の測定記録データを本ソフトへ取り込むことができます
https://www.faq.healthcare.omron.co.jp/category/show/725?site_domain=wlsoft

f:id:matsuok:20200530122518j:plain



rubyインストール

https://qiita.com/Akari_Hara/items/0478a85c9c9b3974b083

https://rubyinstaller.org/downloads/

どのバージョンをダウンロードすればいいの?

どのバージョンをインストールすればいいのかわからず、Ruby を始めようとしている場合は、Ruby+Devkit 2.6.X (x64) インストーラを使うことをお勧めします。これは最大数の互換性のあるジェムを提供し、Rubyと一緒にMSYS2-Devkitをインストールするので、C-extensionsを持つジェムをすぐにコンパイルすることができます。32 ビット (x86) 版は、カスタム 32 ビットネイティブ DLL や COM オブジェクトを使用する必要がある場合にのみ推奨されます。

RubyInstaller は開発キットとして MSYS2 ツールチェーンを使用しています。Ruby+Devkitインストーラ版には、選択可能なコンポーネントとしてバンドルされているので、追加のダウンロードやインストールは必要ありません。1つのDevkitを複数のRubyバージョンで共有することが可能です。

MSYS2はRuby用のネイティブC/C++拡張機能を構築するために必要で、Ruby on Railsでは必須です。また、Rubyの原石が頼りになる数百種類のオープンソースライブラリをダウンロードして利用することができます。

MSYS2 の開発環境は、実行中の cmd または powershell コンソールで ridk enable を実行することで有効にすることができます。これは make, gcc, pacman, sh などのコマンドを検索パスに追加します。

 

C:\Users\matsuo>ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [i386-mingw32]
C:\Users\matsuo>gem install bundler
C:\Users\matsuo>bundler -v
Bundler version 1.17.2

f:id:matsuok:20200530121535j:plain

f:id:matsuok:20200530121631j:plain

f:id:matsuok:20200530121658j:plain

f:id:matsuok:20200530121727j:plain

データベースインタフェースインストール

C:\Users\matsuo>gem install sqlite3 --platform ruby


コードエディターインストール

https://proengineer.internous.co.jp/content/columnfeature/11725
1.3 Atom(アトム:無料)

GitHubが開発したオープンソースエディターです。
クロスプラットフォームアプリで、WindowsmacOS, Linuxに対応しています。基本機能に加えて、「パッケージ」を追加することで機能拡張が可能です。

コード表示が上品で非常に見やすく、コードの自動補完などWEB開発者向けの機能が充実しています。インストールした時点では英語表記なので、日本語表記にするには別途日本語化パッケージを追加する必要があります。
https://atom.io/

インストしても、起動用アイコンが無いのでショートカット作成

https://website-homepage.com/web-design/github-atom-editor-lang-ja/#Atom-3
Windows10でAtom.exeの場所

Windows7からWindows10にアップグレードしたのですが、インストールしたアプリがProgram Files内に無い

AppDataフォルダにあるという情報を見つけて探すも、やはり無い。
なんで?と思い、エクスプローラーのアドレスバーに直接\AppData を打ち込んだら表示できました。
隠しフォルダなんですね。隠しファイルにチェックしても出てこない??わけです。

C:\Users\ユーザー名\AppData\Local\atom\app-1.X.X

C:\Users\ユーザー名\AppData\Local\atom\atom.exe

あとはこのAtom.exe を
・右クリックでショートカット作成
・右ボタン押しながらドラッグしてショートカットにする
・右ボタン押しながらタスクバーにドラッグしてピン留めする

f:id:matsuok:20200530122441j:plain


これで、ruby実行環境、エディタ、データベース利用環境ができた。

さあ始めてみよう

書棚の積読リストをさがすと、以下の本で、まず流し読み

 

 


発売日: 2007/07 なんと古い。当時Ruby on Rails話題になっていたので、購入したものの開発部門ではなかったので積読されていた。

測定記録データがCSV'なので、まず読み込みプログラムにとりかかる
CSVデータ読み込のサンプルソースgoogleで探してくる

最初の疑問


サンプルでは、ソース内定数になっているが、ruby実行時にプログラムにパラメータとしてCSVファイル名をわたしたい

argvの使い方

rubyでは、「ARGV」という配列オブジェクトから、Rubyスクリプト実行時に渡された引数が参照できます。
使い方としては、スクリプト実行時に以下のように引数を渡します。
$ ruby スクリプトファイル名 1番目の引数 2番目の引数 3番目の引数 4番目の引数 5番目の引数....
例えばこの場合は、ARGV[0]には1番目の引数が、ARGV[4]には5番目の引数が設定されています。
コマンドラインスクリプトに引数を渡した順番に配列に格納されます。

こんな感じで、入力CSVファイル名を記述したい
CSV.table("ARGV[#{i}]:#{arg}", encoding: "UTF-8" )

実行時指定は、こんなようにする。

E:\ruby>ruby csv2sqlite3.rb HJ-205IT_1_1_170901-200331utf8noheader.txt
$0:csv2sqlite3.rb
ARGV[0]:HJ-205IT_1_1_170901-200331utf8noheader.txt


データベースのサンプルソースを検索


SQLite3は軽量で、比較的小さいサイズのデータを扱うのに適しています。

SQLite3の準備

RubyでSQLite3を利用する際はgemのSQLite3ライブラリをインストール。

 

$ gem install sqlite3 # sqlite3インストール

 

インストールしたらrequireでSQLite3を読み込みます。

require 'sqlite3' # sqlite3読み込み

DB接続
DBを接続することでSQL文を利用してDBの操作をする事ができます。

変数名 = SQLite3::Database.new( 'ファイル名' )

DB操作
executeメソッドでSQLを実行する事ができます。
DBを操作する際にSQL文を利用しますがSQLにはSQLインジェクションが存在するのでそれを防ぐにはプレースホルダーという記述方法が存在します。

DB接続変数.execute(SQL)
executeメソッドの引数に直接SQLを記述して実行
database.execute(SQL)
直接記述する際にvalueの引数にインスタンス変数を記述する際は式展開「#{}」を利用します。
SQLインジェクションの危険性があり。

SELECT なんかコマンドだと、実行すると結果の配列が帰ってくるので、Array オブジェクトと同様にブロックで処理できる。

db.execute(SQLite コマンド(SELECT)) do |row|
p row # row は結果の行で、各列の値が配列で返ってくる
end

 

複数のコマンドを一つの String に書き込んで実行する
execute では、1つのコマンドしか処理しない

closeメソッドを利用する事でDBを閉じることができます.

database.close

Mac OS X 10.5 Leopard には、Ruby とともに、SQLite 3 も sqlite3-ruby も標準でインストールされている

require 'rubygems'
require 'sqlite3'

WindowsLinux などで使う前提で書いてあるサイトなんかには、require 'sqlite3' だけしか書いてない

データベースの定義

歩数計データのテーブルを定義する。
格納データは、以下

日付
歩数(歩)
しっかり歩数(歩)
Ex歩数(歩)
歩行距離(km)
歩行時間(分)
しっかり歩行時間(分)
Ex量(Ex)
消費カロリー(kcal)
脂肪燃焼量(g)
取込分類
取込日時
機器名
シリアル
個人番号

英語表記をたとえば、

Date.
Number of steps
Number of steps (steps)
Ex Steps (Steps)
Walking distance (km)
Walking time (minutes)
Walking time (minutes)
Ex quantity (Ex)
Calories consumed (kcal)
Fat burning volume (g)
captive classification
pickup date and time
Equipment name
serial
personal number

カラム名を決める

C:\bin\sqlite3>sqlite3 health.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.

sqlite> create table walking (
...> wdate text, /* 日付*/
...> steps integer, /* 歩数(歩) */
...> usteps integer, /* しっかり歩数(歩) */
...> exsteps integer, /* Ex歩数(歩) */
...> walkingdistance real, /* 歩行距離(km) */
...> walkingtime integer, /* 歩行時間(分) */
...> uwalkingtime integer, /* しっかり歩行時間(分) */
...> exquantity real, /* Ex量(Ex) */
...> calorie integer, /* 消費カロリー(kcal) */
...> fatvolume real, /* 脂肪燃焼量(g) */
...> pickupclass text, /* 取込分類 */
...> pickupdatetime text, /* 取込日時 */
...> equipmentname text, /* 機器名 */
...> serialno text, /* シリアル */
...> personalnumber text /* 個人番号 */
...> );
sqlite>


rubyで、歩数計CSVデータをロード(ソースは後日公開)

 

E:\ruby>c:\bin\sqlite3\sqlite3 health.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> select * from walking;
2017/09/01|4588|0|2395|3.4|67|0|1.7|119|6.7|ファイル|2018/03/01 18:28|HJ-205IT|0C040D059203|1
sqlite> .sch
CREATE TABLE walking (
wdate text, /* 日付*/
steps integer, /* 歩数(歩) */
usteps integer, /* しっかり歩数(歩) */
exsteps integer, /* Ex歩数(歩) */
walkingdistance real, /* 歩行距離(km) */
walkingtime integer, /* 歩行時間(分) */
uwalkingtime integer, /* しっかり歩行時間(分) */
exquantity real, /* Ex量(Ex) */
calorie integer, /* 消費カロリー(kcal) */
fatvolume real, /* 脂肪燃焼量(g) */
pickupclass text, /* 取込分類 */
pickupdatetime text, /* 取込日時 */
equipmentname text, /* 機器名 */
serialno text, /* シリアル */
personalnumber text /* 個人番号 */
);
sqlite> select count(walkingdistance) from walking;
931
sqlite> select max(walkingdistance) from walking;
9.9
sqlite> select avg(walkingdistance) from walking;
4.05553168635875
sqlite>

start:2017/09/01 to:2020/03/31
合計件数:931 平均歩行距離(km):4.056 MAX歩行距離(km):9.9 MIN歩行距離(km):0.2

 
気象庁のサイトから、歩数計データ記録期間の気象データをCSVとして取得
過去の気象データ・ダウンロード
https://www.data.jma.go.jp/gmd/risk/obsdl/index.php

f:id:matsuok:20200530122348j:plain



年月日
平均気温(℃)
平均気温(℃)品質情報
平均気温(℃)均質番号
最高気温(℃)
最高気温(℃)品質情報
最高気温(℃)均質番号
最低気温(℃)
最低気温(℃)品質情報
最低気温(℃)均質番号
天気概況(昼:06時~18時)
天気概況(昼:06時~18時)品質情報
天気概況(昼:06時~18時)均質番号

Date.
Average temperature (°C)
Average temperature (°C) Quality information
Average temperature (°C) Homogeneous number
Maximum temperature(°C)
Maximum temperature (°C) Quality information
Maximum temperature (°C) Homogeneous number
Minimum temperature(°C)
Minimum temperature (°C) Quality information
Minimum temperature (°C) Homogeneous number
Weather report (Noon: 06:00-18:00)
General weather conditions (noon: 06:00 - 18:00) Quality information
Weather conditions (Noon: 06:00 - 18:00) Homogenous number

 

CREATE TABLE weather (
wdate text, /* 年月日 */
avgtemp real, /* 平均気温(℃) */
avgtempqi integer, /* 平均気温(℃)品質情報 */
avgtemphn integer, /* 平均気温(℃)均質番号 */
maxtemp real, /* 最高気温(℃) */
maxtempqi integer, /* 最高気温(℃)品質情報 */
maxtemphn integer, /* 最高気温(℃)均質番号 */
mintemp real, /* 最低気温(℃) */
mintempqi integer, /* 最低気温(℃)品質情報 */
mintemphn integer, /* 最低気温(℃)均質番号 */
Weatherreport text, /* 天気概況(昼:06時~18時) */
weatherqi integer, /* 天気概況(昼:06時~18時)品質情報 */
Weatherhn integer /* 天気概況(昼:06時~18時)均質番号 */
);

E:\ruby>C:\BIN\SQLITE3\sqlite3.exe health.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> CREATE TABLE weather (
...> wdate text, /* 年月日 */
...> avgtemp real, /* 平均気温(℃) */
...> avgtempqi integer, /* 平均気温(℃)品質情報 */
...> avgtemphn integer, /* 平均気温(℃)均質番号 */
...> maxtemp real, /* 最高気温(℃) */
...> maxtempqi integer, /* 最高気温(℃)品質情報 */
...> maxtemphn integer, /* 最高気温(℃)均質番号 */
...> mintemp real, /* 最低気温(℃) */
...> mintempqi integer, /* 最低気温(℃)品質情報 */
...> mintemphn integer, /* 最低気温(℃)均質番号 */
...> Weatherreport text, /* 天気概況(昼:06時~18時) */
...> weatherqi integer, /* 天気概況(昼:06時~18時)品質情報 */
...> Weatherhn integer /* 天気概況(昼:06時~18時)均質番号 */
...> );
sqlite> .sch
CREATE TABLE walking (
wdate text, /* 日付*/
steps integer, /* 歩数(歩) */
usteps integer, /* しっかり歩数(歩) */
exsteps integer, /* Ex歩数(歩) */
walkingdistance real, /* 歩行距離(km) */
walkingtime integer, /* 歩行時間(分) */
uwalkingtime integer, /* しっかり歩行時間(分) */
exquantity real, /* Ex量(Ex) */
calorie integer, /* 消費カロリー(kcal) */
fatvolume real, /* 脂肪燃焼量(g) */
pickupclass text, /* 取込分類 */
pickupdatetime text, /* 取込日時 */
equipmentname text, /* 機器名 */
serialno text, /* シリアル */
personalnumber text /* 個人番号 */
);
CREATE TABLE weather (
wdate text, /* 年月日 */
avgtemp real, /* 平均気温(℃) */
avgtempqi integer, /* 平均気温(℃)品質情報 */
avgtemphn integer, /* 平均気温(℃)均質番号 */
maxtemp real, /* 最高気温(℃) */
maxtempqi integer, /* 最高気温(℃)品質情報 */
maxtemphn integer, /* 最高気温(℃)均質番号 */
mintemp real, /* 最低気温(℃) */
mintempqi integer, /* 最低気温(℃)品質情報 */
mintemphn integer, /* 最低気温(℃)均質番号 */
Weatherreport text, /* 天気概況(昼:06時~18時) */
weatherqi integer, /* 天気概況(昼:06時~18時)品質情報 */
Weatherhn integer /* 天気概況(昼:06時~18時)均質番号 */
);
sqlite>

rubyで、CSVデータをweatherテーブルに格納

(ソースは後日公開)

 
日付をキーとして、歩行データと気象データのビュー作成する

E:\ruby>c:\bin\sqlite3\sqlite3.exe health.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .sch
CREATE TABLE walking (
wdate text, /* 日付*/
steps integer, /* 歩数(歩) */
usteps integer, /* しっかり歩数(歩) */
exsteps integer, /* Ex歩数(歩) */
walkingdistance real, /* 歩行距離(km) */
walkingtime integer, /* 歩行時間(分) */
uwalkingtime integer, /* しっかり歩行時間(分) */
exquantity real, /* Ex量(Ex) */
calorie integer, /* 消費カロリー(kcal) */
fatvolume real, /* 脂肪燃焼量(g) */
pickupclass text, /* 取込分類 */
pickupdatetime text, /* 取込日時 */
equipmentname text, /* 機器名 */
serialno text, /* シリアル */
personalnumber text /* 個人番号 */
);
CREATE TABLE weather (
wdate text, /* 年月日 */
avgtemp real, /* 平均気温(℃) */
avgtempqi integer, /* 平均気温(℃)品質情報 */
avgtemphn integer, /* 平均気温(℃)均質番号 */
maxtemp real, /* 最高気温(℃) */
maxtempqi integer, /* 最高気温(℃)品質情報 */
maxtemphn integer, /* 最高気温(℃)均質番号 */
mintemp real, /* 最低気温(℃) */
mintempqi integer, /* 最低気温(℃)品質情報 */
mintemphn integer, /* 最低気温(℃)均質番号 */
Weatherreport text, /* 天気概況(昼:06時~18時) */
weatherqi integer, /* 天気概況(昼:06時~18時)品質情報 */
Weatherhn integer /* 天気概況(昼:06時~18時)均質番号 */
);

sqlite> create view vwalking as
...> select
...> a.wdate as wdate,
...> walkingdistance,
...> avgtemp,
...> Weatherreport
...> from walking a, weather b
...> where a.wdate = b.wdate
...> ;

sqlite> select count(wdate), avg(avgtemp) from vwalking;
931|15.9209452201934
sqlite> select count(wdate), avg(avgtemp) from weather;
943|15.8728525980912
sqlite> select count(wdate), avg(walkingdistance) from walking;
931|4.05553168635875
sqlite> select wdate, wdate,walkingdistance,avgtemp,Weatherreport from vwalking;
2017/09/01|2017/09/01|3.4|26.1|快晴
2017/09/02|2017/09/02|2.6|26.0|晴
2017/09/03|2017/09/03|4.6|25.6|晴
2017/09/04|2017/09/04|2.3|24.2|曇後一時晴
2017/09/05|2017/09/05|2.6|24.6|曇一時晴
2017/09/06|2017/09/06|0.6|22.7|雨後曇
2017/09/07|2017/09/07|2.2|24.1|雨時々曇
2017/09/08|2017/09/08|3.1|26.1|快晴
2017/09/09|2017/09/09|3.0|25.2|晴後一時薄曇
2017/09/10|2017/09/10|4.1|26.7|晴後一時薄曇
2017/09/11|2017/09/11|2.2|25.4|曇
2017/09/12|2017/09/12|0.7|24.0|雨後曇
2017/09/13|2017/09/13|1.7|25.4|晴
2017/09/14|2017/09/14|2.7|24.4|晴後一時曇
2017/09/15|2017/09/15|3.5|23.0|薄曇
2017/09/16|2017/09/16|2.6|19.2|雨
2017/09/17|2017/09/17|4.1|22.1|曇一時雨
2017/09/18|2017/09/18|2.4|24.8|晴一時雨
2017/09/19|2017/09/19|1.8|23.5|晴時々薄曇
2017/09/20|2017/09/20|3.0|22.9|曇後一時雨
2017/09/21|2017/09/21|2.0|22.9|晴
2017/09/22|2017/09/22|2.4|20.7|曇後一時雨
2017/09/23|2017/09/23|2.5|23.7|薄曇時々晴
2017/09/24|2017/09/24|3.6|23.2|晴時々薄曇
2017/09/25|2017/09/25|2.9|23.1|晴
2017/09/26|2017/09/26|1.9|23.7|快晴
2017/09/27|2017/09/27|2.4|23.2|曇後雨
2017/09/28|2017/09/28|1.2|20.7|曇一時雨
2017/09/29|2017/09/29|4.1|19.9|晴
2017/09/30|2017/09/30|3.4|21.0|曇後晴

------------------------------------

2020/02/29|2020/02/29|5.1|7.8|雨時々曇
2020/03/01|2020/03/01|7.0|11.0|晴後一時曇
2020/03/02|2020/03/02|5.2|12.7|曇後晴
2020/03/03|2020/03/03|6.3|10.5|曇時々晴
2020/03/04|2020/03/04|5.1|8.8|雨時々曇
2020/03/05|2020/03/05|4.2|6.0|雨
2020/03/06|2020/03/06|5.8|7.4|晴一時曇
2020/03/07|2020/03/07|5.2|8.4|曇時々晴
2020/03/08|2020/03/08|5.3|8.1|雨後時々曇
2020/03/09|2020/03/09|5.8|12.7|晴
2020/03/10|2020/03/10|2.7|13.4|大雨後一時曇
2020/03/11|2020/03/11|3.9|12.0|晴一時雨後曇
2020/03/12|2020/03/12|4.7|10.1|晴
2020/03/13|2020/03/13|6.6|11.1|晴後一時曇
2020/03/14|2020/03/14|6.1|8.6|雨時々曇
2020/03/15|2020/03/15|4.4|7.6|晴後時々雨
2020/03/16|2020/03/16|2.6|5.7|雨時々曇後晴、みぞれを伴う
2020/03/17|2020/03/17|6.0|7.1|晴
2020/03/18|2020/03/18|6.2|11.7|晴
2020/03/19|2020/03/19|5.0|13.9|晴時々曇
2020/03/20|2020/03/20|5.6|11.1|晴一時雨後曇
2020/03/21|2020/03/21|3.2|12.4|晴
2020/03/22|2020/03/22|6.7|14.0|曇時々晴一時雨
2020/03/23|2020/03/23|3.9|11.7|晴
2020/03/24|2020/03/24|1.8|8.4|晴後一時雨
2020/03/25|2020/03/25|5.7|9.4|晴
2020/03/26|2020/03/26|2.6|14.2|晴
2020/03/27|2020/03/27|3.3|13.0|雨後時々曇
2020/03/28|2020/03/28|6.3|13.6|曇時々雨
2020/03/29|2020/03/29|2.4|9.3|雨後曇時々晴
2020/03/30|2020/03/30|2.9|10.1|曇時々雨
2020/03/31|2020/03/31|3.5|11.8|雨時々曇
sqlite>

グラフ機能をインストール

ruby 2.6.6p146 (2020-03-31 revision 67876) [i386-mingw32]

C:\Users\matsuo>gem install 'gruff'
Fetching gruff-0.8.0.gem
Fetching rmagick-4.1.2.gem
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Successfully installed rmagick-4.1.2
Successfully installed gruff-0.8.0
Parsing documentation for rmagick-4.1.2
Installing ri documentation for rmagick-4.1.2
Parsing documentation for gruff-0.8.0
Installing ri documentation for gruff-0.8.0
Done installing documentation for rmagick, gruff after 19 seconds
2 gems installed

C:\Users\matsuo>

 

https://imagemagick.org/script/download.php

Windows バイナリリリース
ImageMagick は、Windows 10 (x86 & x64)、Windows 8 (x86 & x64)、Windows 7 (x86 & x64)、Windows Server 2012Windows XP (x86)、Service Pack 3、Windows Vista (x86 & x64)、Service Pack 2、Windows Server 2003 (x86 & x64)、Service Pack 2 (MSXML6 が存在することを確認)、Windows Server 2003 R2 (x86 & x64)、Windows Server 2008 (x86 & x64)、Service Pack 2、Windows Server 2008 R2 (x64) で動作します。

特に大きな画像を扱う場合は、メモリの量が重要な要素となります。最低 512 MB の RAM を推奨しますが、RAM は多ければ多いほど良いでしょう。ImageMagick はシングルコアコンピュータでも動作しますが、マルチコアシステムでは自動的に並列実行されるため、実行時間が大幅に短縮されます。

Windows 版の ImageMagick はセルフインストールです。以下の適切なバージョンをクリックすると、自動的に起動し、いくつかのインストールに関する質問が表示されます。名前に Q8 が付いているバージョンは 8 ビット/ピクセルコンポーネント(例:8 ビット赤、8 ビット緑など)ですが、ファイル名に Q16 が付いているバージョンは 16 ビット/ピクセルコンポーネントです。Q16バージョンでは、精度を落とすことなく16ビットの画像を読み書きすることができますが、Q8バージョンの2倍のリソースを必要とします。

ファイル名に dll が含まれるバージョンには、ダイナミックリンクライブラリとして ImageMagick ライブラリが含まれています。Windows 32ビットOSをお持ちでない限り、64ビットWindows用のImageMagickのこのバージョンをお勧めします。

www.DeepL.com/Translator(無料版)で翻訳しました。

Windows Binary Release
ImageMagick runs on Windows 10 (x86 & x64), Windows 8 (x86 & x64), Windows 7 (x86 & x64), Windows Server 2012, Windows XP (x86) with Service Pack 3, Windows Vista (x86 & x64) with Service Pack 2, Windows Server 2003 (x86 & x64) with Service Pack 2 (verify MSXML6 is present), Windows Server 2003 R2 (x86 & x64), Windows Server 2008 (x86 & x64) with Service Pack 2, and Windows Server 2008 R2 (x64).
The amount of memory can be an important factor, especially if you intend to work on large images. A minimum of 512 MB of RAM is recommended, but the more RAM the better. Although ImageMagick runs well on a single core computer, it automagically runs in parallel on multi-core systems reducing run times considerably.
The Windows version of ImageMagick is self-installing. Simply click on the appropriate version below and it will launch itself and ask you a few installation questions. Versions with Q8 in the name are 8 bits-per-pixel component (e.g. 8-bit red, 8-bit green, etc.), whereas, Q16 in the filename are 16 bits-per-pixel component. A Q16 version permits you to read or write 16-bit images without losing precision but requires twice as much resources as the Q8 version. Versions with dll in the filename include ImageMagick libraries as dynamic link libraries. Unless you have a Windows 32-bit OS, we recommend this version of ImageMagick for 64-bit Windows:

 

 


https://github.com/rmagick/rmagick

ウィンドウズ
Windows版のRubyInstallerから入手できる最新のRuby+Devkitパッケージをインストールします。
環境変数PATHをコンパイラのある場所に設定する必要があるかもしれません。(例:set PATH=C:\Ruby27-x64\msys64\usr\bin;C:\Ruby27-x64\msys64\mingw64\w64\bin;%PATH%)

Windows バイナリリリースから ImageMagick-7.XXXXX-Q16-x64-dll.exe (ImageMagick-7.XXXXX-Q16-x64-static.exe ではありません) のバイナリをダウンロードするか、Windows バイナリリリースから ImageMagick 6 をダウンロードすることができます。

ImageMagickをインストールします。システムパスにアプリケーションディレクトリを追加する」と「RMagick用インストーラにCとC++用の開発ヘッダとライブラリをインストールする」のチェックボックスをオンにする必要があります。


RMagickのインストール

 

バンドラ経由でのインストール
Gemfileに追加します。

gem 'rmagick'

その後、実行します。

bundle install

RubyGems経由でのインストール
実行します。

gem install rmagick

バージョニング

RMagickはSemantic Versioningに基づいてバージョン管理されています。Ruby 1.8+と互換性のある安定版は ~> 2.0 を使用してください。バージョン >= 3 は Ruby >= 2.x のみで動作します。
RMagickの利用方法
以下のようにプロジェクトにRMagickを必要とします。
require 'rmagick'
詳細は https://rmagick.github.io/usage.html を参照してください。

Windows
Install latest Ruby+Devkit package which you can get from RubyInstaller for Windows.
You might need to configure PATH environment variable to where the compiler is located. (Ex: set PATH=C:\Ruby27-x64\msys64\usr\bin;C:\Ruby27-x64\msys64\mingw64\bin;%PATH%)
Download ImageMagick-7.XXXX-Q16-x64-dll.exe (not, ImageMagick-7.XXXX-Q16-x64-static.exe) binary from Windows Binary Release, or you can download ImageMagick 6 from Windows Binary Release.
Install ImageMagick. You need to turn on checkboxes Add application directory to your system path and Install development headers and librarries for C and C++ in an installer for RMagick.


Installing RMagick
Installing via Bundler
Add to your Gemfile:

gem 'rmagick'
Then run:
bundle install
Installing via RubyGems
Run:
gem install rmagick
Versioning
RMagick is versioned according to Semantic Versioning. For stable version compatible with Ruby 1.8+, use ~> 2.0. Versions >= 3 work on Ruby >= 2.x only.
Using RMagick
Require RMagick in your project as follows:
require 'rmagick'
See https://rmagick.github.io/usage.html for links to more information.


https://www.rubydoc.info/gems/gruff/0.8.0
http://topfunky.com/clients/rails/gruff/doc/

 

クラス

gruffの中にあります。
lib/gruff/base.rb

 

メソッド


add_color add_color clip_value_if_greater_than_data draw draw_label draw_legend draw_line_markers draw_no_data draw_title get_maximum_by_stack graph_height graph_left graph_top graph_width larger_than_max? make_stacked max max min new normalize render_gradiated_background render_image_background render_transparent_background replace_colors replace_colors reset_themes scale scale_fontsize scale_measurements setup_drawing setup_graph_height setup_graph_measurements significant sort_normal_data sums theme= theme_37signals theme_keynote theme_odeo theme_rails_keynote to_blob total_height write

 

含まれるモジュール

RMagick

定数
データラベルインデックス=0
データ値インデックス=1
データカラーインデックス=2

属性

色彩
棒や線の描画に使用する色のリストを取得または設定します。

 

フォント


タイトルやラベルなどに使われるフォント。TTFフォントファイルのフルパスを指定すると効果的です。この機能を正しく動作させるためには、Freetypeライブラリを使ってRMagickをビルドする必要があります。
ENV['MAGICK_FONT_PATH']で指定した場所にあるBitstream Vera (Vera.ttf)を見つけようとします。それ以外の場合はデフォルトの RMagick フォントを使用します。

hide_legend
様々な要素を隠す
隠線マーカー
隠蔽タイトル

ラベル


個々のカラムの名前のハッシュで、キーはこのラベルが表すカラムの配列インデックスとなります。
すべてのカラムに名前をつける必要はありません。
例: 0 => 2005、3 => 2006、5 => 2007、7 => 2008


凡例フォントサイズ

 

オプションでフォントの大きさを設定できます。800x600pxのグラフを基準にしています。デフォルトは20です。
グラフの幅が800pxより小さい場合は縮小されます。

 

マーカーの色

補助ラベルとラインの色
マーカーフォントサイズ

 

グラフ周辺のラベルのフォントサイズ

最大値
パーセンテージベースのグラフで常に100になるような最大値を手動で設定することができます。
これを使用する場合は、すべてのデータをグラフオブジェクトに渡した後に設定する必要があります。
最小値
値を推測させる代わりに、手動で最小値を設定することができます。
すべてのデータをグラフオブジェクトに渡した後に設定してください。

no_data_message
データがない場合に表示されるメッセージ。最大20文字まで対応します。デフォルトは "データなし "です。

 

題名

上部に表示されるグラフの大きなタイトル
タイトルフォントサイズ

グラフ上部の大きなタイトルのフォントサイズ

 

パブリッククラスのメソッド

new(target_width=800)
1つの数値引数が与えられた場合、グラフは与えられた幅に応じて4/3の比率で描画されます(800は800x600、400は400x300など)。
または、他の比率のためのジオメトリ文字列 ('800x400', '400x225') を送ることもできます。
デフォルトのフォントとして Bitstream Vera を探します。環境変数 MAGICK_FONT_PATH が設定されている必要があります。(それ以外の場合は RMagick のデフォルトフォントを使用します)。

パブリックインスタンスメソッド
add_color(colorname)
線に使用可能な色のリストに色を追加します。

例。
add_color('#c0e9d3')
 add_color(colorname)
線に使用可能な色のリストに色を追加します。
例。
add_color('#c0e9d3')


data(name, data_points=, color=nil)
パラメータは配列で,最初の要素はデータセットの名前,値はプロットする値の配列です.
複数の値を持つグラフを作成するために、異なるデータセットで複数回呼び出すことができます。
color 引数が nil の場合、デフォルトのテーマの次の色が使用されます。
注意: プリセットテーマを使用したい場合は、 data() を呼び出す前にそれを設定しなければなりません。

例を示します。
data("Bart S.", [95, 45, 78, 89, 88, 76], '#ffcc00')
グラフの高さ

グラフレフト

グラフトップ()

グラフの幅

replace_colors(color_list=)
カラーリスト全体を新しい色の配列に置き換えます。描画するデータセットの数よりも1つ多くの色を持つ必要があります。colors=セッターメソッドとも呼ばれています。

例を示します。
replace_colors('#cc99cc', '#d9e043', '#34d8a2')
replace_colors(color_list=[])
カラーリスト全体を新しい色の配列に置き換えます。描画するデータセットの数よりも1つ多くの色を持つ必要があります。colors=セッターメソッドとも呼ばれています。

例を示します。
replace_colors('#cc99cc', '#d9e043', '#34d8a2')


scale_measurements()

 

テーマ=(オプション)

テーマを手動で設定することができます。データを送信する前に、このメソッドにハッシュを割り当ててください。
graph.theme = {
colors => %w(オレンジ・パープル・グリーン・ホワイト・レッド)。
:marker_color => 'blue' とします。
:background_colors => %w(黒灰色)
}
:background_image => 'squirrel.png'も可能です。
(できればそれよりも見栄えの良いものを)
theme_37signals()
人気のユーザビリティブログの色から摘み取った配色。
theme_keynote()
人気のプレゼンテーションソフトと同じような配色。
theme_odeo()
人気のポッドキャストサイトで使われているような配色。
theme_rails_keynote()
RubyConfで行われた2005年のRails基調講演で使われていた色からの配色です。

to_blob(fileformat='PNG')
レンダリングされたバイナリブロブとしてグラフを返します。

total_height()

write(filename="graph.png")
グラフをファイルに書き込みます。デフォルトは'graph.png'です。
例:write('graphs/my_pretty_graph.png')

保護されたインスタンスメソッド
clip_value_if_greater_than(value, max_value)

ドロー
グラフの実際のプロットを行うためにサブクラスでオーバーライドされます。
サブクラスは、このメソッドのために super() を呼び出すことから始めなければなりません。

draw_label(x_offset, index)
グラフの下に、x_offsetを中心とした列ラベルを描画します。
draw_legend()
データセットの名前を描画に用いた色に合わせた凡例を描画します。
draw_line_markers()
背景の水平線とラベルを描画します。
draw_no_data()

draw_title()

get_maximum_by_stack()

larger_than_max?
スタックドバーなどのサブクラスでオーバーライドされます。

less_than_min?

make_stacked()

max(data_point, index)

min(data_point, index)

ノーマライズ()
値が0~100の間でスケーリングされたデータのコピーを作成する
render_gradiated_background(top_color, bottom_color)
グラデーション(またはソリッドカラー)の背景を描画するためにテーマ定義メソッドと一緒に使用します。
render_image_background(image_path)
イメージ(800x600オリジナル)の背景を使用するためにテーマと一緒に使用します。
背景を透明にする()
テーマで使用して背景を透明にする

reset_themes()

尺度

scale_fontsize(値)

setup_drawing()
飾りを描きます。
ラインマーカー

題名
setup_graph_height()

setup_graph_measurements()

sort_norm_data()
描画されたグラフに正しく表示されるように、全体の合計値が最大となるように配列の前に並べ替えます。
sums(data_set)