(https://github.com/exploreの模様)
このような方におススメ
- GitHubのexploreで表示されている模様が気になる
- Railsで作った管理画面にワンアクセントを加えたい
GitHubのサイト内で利用されている幾何学模様が気になった事がある方はきっと多いと思います。HTMLを見るとこの幾何学模様は画像ファイルではなく、SVGを使ったデータ文字列が背景に指定されているのが分かります。
(https://github.com/exploreの模様)
今回はジオメトリクスイメージを生成するRubyのgem「geo_pattern」を紹介します。
URL: https://github.com/jasonlong/geo_pattern
geo_patternのインストール
それでは実際に動かすためgemをインストールするところから初めます。オフィシャルの説明にはRailsやRackで利用する方法が含まれていますのでRailsから利用される方はそちらもご確認下さい。
URL: https://github.com/jasonlong/geo_pattern
$ gem install geo_pattern --no-ri --no-rdoc
出力結果
Fetching: color-1.7.1.gem (100%) Successfully installed color-1.7.1 Fetching: geo_pattern-1.4.0.gem (100%) Class style pattern names are deprecated as of 1.3.1 Successfully installed geo_pattern-1.4.0 2 gems installed
gemが問題なくインストールされました。あまり見慣れないgemの「color」も一緒にインストールされましたのでこの「color」について少し調べて見ます。
gem「color」
colorはRuby上でカラープロファイルを使わずにカラーパレット、グラデーション、カラー名のサポートを行うライブラリです。
URL: https://github.com/halostatue/color
どのように使うのかテストコードから見て行きます。以下コードは青を軸にブライトネス(明るさ・輝度)の操作をするテストコードです。
引用(https://github.com/halostatue/color/blob/master/test/test_rgb.rb)
def test_adjust_brightness
assert_equal(“#1a1aff”, Color::RGB::Blue.adjust_brightness(10).html)
assert_equal(“#0000e6”, Color::RGB::Blue.adjust_brightness(-10).html)
end
直観的に輝度の操作が行えていますね。
以下コードはHTML/CSSで利用するカラー名とカラーコードが一致するかを検証するテストです。
引用(https://github.com/halostatue/color/blob/master/test/test_rgb.rb)
def test_html
assert_equal(“#000000”, Color::RGB::Black.html)
assert_equal(Color::RGB::Black, Color::RGB.from_html(“#000000”))
assert_equal(“#0000ff”, Color::RGB::Blue.html)
assert_equal(“#00ff00”, Color::RGB::Lime.html)
assert_equal(“#ff0000”, Color::RGB::Red.html)
assert_equal(“#ffffff”, Color::RGB::White.html)assert_equal(“rgb(0.00%, 0.00%, 0.00%)”, Color::RGB::Black.css_rgb)
assert_equal(“rgb(0.00%, 0.00%, 100.00%)”, Color::RGB::Blue.css_rgb)
assert_equal(“rgb(0.00%, 100.00%, 0.00%)”, Color::RGB::Lime.css_rgb)
assert_equal(“rgb(100.00%, 0.00%, 0.00%)”, Color::RGB::Red.css_rgb)
assert_equal(“rgb(100.00%, 100.00%, 100.00%)”, Color::RGB::White.css_rgb)
end
Color::RGB::Redを.htmlと.css_rgbなどのメソッド名で操作できるのも分かり易いですね。
geo_patternを動かして見る
少し話が脱線しました。colorの仕組みを見た所でここからgeo_patternを使ったデモに移ります。
生成されるのが画像データのため、ブラウザ上で表示したい所ですがデモのためにRailsやSinatraなどのフレームワークを使うのも少し大げさなので、今回はWEBrickを利用してブラウザから動作確認します。irbを起動して直接WEBrickを起動します。
$ irb
require 'webrick' require 'geo_pattern' # HTMLのbody内に含めるタグを生成する。 def body pattern = GeoPattern.generate('Mastering Markdown') %|<div style="background-image: #{pattern.to_data_uri}; min-height: 600px; width: 800px;">sample #{body}| res.body = content res.content_length = content.size res.content_type = "text/html" end trap(:INT){server.shutdown} Thread.new {server.start}
最終行「Thread.new {server.start}」は継続してirbを利用するためにWEBrickサーバーをメインスレッドと切り離す目的です。
上記コードを実行してhttp://127.0.0.1:10080/にアクセスすると、幾何学模様が表示されます。HTMLのコードを見るとSVGが文字列で出力されているのが分かります。
(コードを実行した結果のサンプル)
geo_patternのパターンと変化を試して見る
次にgeo_patternがサポートしている各パターンを表示してみます。irb上で以下コードをそのまま実行して再びhttp://127.0.0.1:10080/にアクセスすると縦に各パターンのジオメトリックイメージが表示されます。前回との違いはbodyメソッドの置き換えたです。
# 文字列を自動生成するためにsecurerandomを利用。 require 'securerandom' def body s = "" [:chevrons, :concentric_circles, :diamonds, :hexagons, :mosaic_squares, :nested_squares, :octagons, :overlapping_circles, :overlapping_rings, :plaid, :plus_signs, :sine_waves, :squares, :tessellation, :triangles, :xes].each{|pattern_name| pattern = GeoPattern.generate(SecureRandom.hex(16), patterns: pattern_name) s += %|<div style="background-image: #{pattern.to_data_uri}; min-height: 150px; width: 800px; text-align: center; padding-top: 80px; color: #fff; font-size: 48px;">#{pattern_name}</div>| } s end
(各パターンを表示するコードを実行した結果のサンプル画像)
次にcolorを使って色調に変化を与えて見ます。base_colorで背景色の指定が可能ですので、徐々に明るくしていきます。
require 'securerandom' def body s = "" [:chevrons, :concentric_circles, :diamonds].each{|pattern_name| string = SecureRandom.hex(16) # 5段階に分けてだんだん明るくします。 5.times{|index| color = Color::RGB::Green.adjust_brightness(index * 24).html pattern = GeoPattern.generate(string, patterns: pattern_name, base_color: color) s += %|<div style="background-image: #{pattern.to_data_uri}; min-height: 120px; width: 800px; text-align: center; padding-top: 10px; color: #fff; font-size: 48px;">#{pattern_name}
#{color}</div>| } } s end
(色調に変化を加えたパターンのサンプル画像)
だいぶ仕組みが分かってきたと思います。試して見ると意外と使い易い印象です。
最後に
gemを使ってカッコいい幾何学模様をかんたんに作れました。他ライブラリに依存せずにgem内だけで完結するため導入も楽です。
GitHubのようにタイル背景に利用する以外では、大見出しの背景パターンとしての利用や、BootstrapのJumbotronの背景に幾何学模様が使われているのを見かけます。
システム管理部門と運用・オペレーター部門はお互いの顔を知らない事も少なくありませんし、接点はブラウザに表示される画面ぐらいしか無い事もままあります。バグが起こって動かなくなったとクレームを入れる時ぐらいしか声を聴く機会すらない事もあります。
そんな殺風景になりがちな業務系システムのウェブUIにオシャレなワンアクセントを入れて心をほぐすのにピッタリなgemかも知れません。
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。

No Comments