title-feature
Design

グッとくる!デザインの参考になるECサイト特集

こんにちは!新人森田です。
新学期ですねーとか言ってたらあっという間にGW突入ってハヤイヨ!
気がづけばブログの更新さぼっておりましたすみません。

そういえば、無謀と思われていた10kmマラソンは無事に完走出来ました!!
皇居ランも毎週恒例イベントになりつつあり、ハレノヒマラソン部けっこうがんばってます。
ついでにシェイプアップも出来たらいいなと走った後にガッツリ食べながら願ってます。

さて、今回はデザインの勉強ということでECサイトをテーマに見ていきたいと思います。
国内外から気になるものを選りすぐって集めてまいりました!
ではいってみましょう。

豊富な情報がまるで雑貨屋さんのように!

扱う情報量が増えるほど、コンテンツの整理が一苦労。
他サイトとの差別化をはかりつつ、どのように商品を見せるかが腕のみせどころです。

Creema

ec-0

http://www.creema.jp/

こちらはハンドメイド作品の購入・販売が出来るサイトです。
トップバッターにして今回紹介する中でダントツの情報量を誇っています。
でもあまりゴチャゴチャして見えないのはメリハリのきいたグリッドのおかげでしょうか。

ec-0b

トップページの下部です。
スクロールすると[注目の作家]、[RANKING]、[SOLD OUT]、[USER VOICE]、[NEW WORKS]と更にコンテンツが続いています。
商品のジャンルもテイストも違うからか、それぞれに目移りしてどれもクリックしたくなっちゃいます。
( ゚д゚)ハッ!これってまさに、街なかで雰囲気に惹かれてフラッと入った雑貨屋さんの感覚

商品を立たせるために装飾は必要最低限ではありますが、その必要最低限の中にも一工夫を感じます。
ただ情報が多いだけでなく検索機能も豊富でユーザビリティの点でもしっかり作ってあります。
これはウッカリ眺め続けてしまう。。

mon cifaka online store

ec-1

http://mon.cifaka.jp/

岡山市にある雑貨屋さんのオンラインストアです。
オンライン先行であっても不思議じゃないほど充実した内容です。
スクリーンショットでお見せできないのがもどかしい、楽しいスクロール&ホバーアクション!
ロゴや商品周りの◯がぷにぷにふよふよします。

ec-1b

ページを読み込むと新着ニュースが降りてきて、一定時間経つと収納されます。
この新着ニュースと買い物カゴの部分だけ立体的に作ってあって、他と差別化されているなぁと思いきや、ページトップに固定されてスクロールしてもついてくるんです。
なるほど、これならコンテンツに埋もれずに目がいくなあ。
半フラットっていうべきなのか、リッチとフラットをいいとこ取りで使い分けてますね。

プロダクトを魅せるミニマルデザイン!

ECサイトの主役は何と言っても商品です。
実際に触れられないからこそデザインが必要です。
じゃあどんな風に見えたら商品をカゴに入れてもらえるんでしょうか。

sample

ec-2

http://ec-sample.shop-pro.jp/

ちょっとした環境や地域活動をベースに商品を製作販売しているサイトです。
その精神を反映しているみたいに、実直な、整った印象を受けます。
必要以上に文字を出しすぎず、言葉とモノの情報バランスがちょうどいい感じ

ec-2b

商品詳細はこのようなデザインです。
丁寧に撮られた商品写真が、手にとって見るように商品の魅力を物語っています。
そしてテキストが控えめに、けれど的確に情報を提供してくれます。
すごく心地の良い買い物体験が出来そう…これがUXってやつ?!

MAKR

ec-3

http://makr.com/

こちらは先ほどのサイトよりも更にテキスト要素を排除してプロダクト一本で勝負しているサイト。
もちろん必要な箇所にはテキストがありますが、この潔さはすごい。
国内ではこういうサイトはあまりないような気がします。

ec-3b

商品詳細においても徹底されてます。
スクロールすると、それだけで絵になる商品写真がたっぷりとスペースを使って並べられています。
海外のECサイトデザインの◯個のポイントみたいな記事を読んだ時に、「ナビゲーションに言葉を使い過ぎない」的なことが書いてあった気がしますが、それの極みっていうか。
巧みな言い回しじゃなく商品そのものに目がいくし、販売する側も商品そのもので勝負してる所が好感にも繋がりそうです。

canopy

ec-4

http://canopy.co/

はい、出ました。フラットとしか言いようがない完全なるフラットなフラットサイト。
アマゾンの商品をピックアップしてキュレートしているサイトのようです。
この流行突っ走ってます感がたまらなくたまらないです。

ec-4b

カテゴリー別や、商品のテイスト別でソートして商品を見ることも出来ます。
詳細画面もオールフラットでいちいちカッコいいです。
ナビゲーションも洗練されてるし、ばっちりレスポンシブだし、作りたかったものがそこにある感じでなんかくやしい!

まとめ

今やECサイトなんて山ほどありますが、ピックアップしてみた5つのサイトはどこか似た所があるように思います。
そもそもサイトのトーンがホワイト〜グレー基調なのが大きいのかもしれません。
色味は扱っている商品に任せてナビゲーションはミニマルに、ということなのでしょう。
そのような共通したテーマの元でも、表現の仕方は様々でした。

また、紹介した順序はテキスト情報の多さ順だったりもします。
日本のサイトはそういう風潮なのかテキスト要素がかなり多いように感じます。
それは悪いことではありませんが、後半の2サイトから学ぶ部分も大いにあると思います。
リッチデザインとフラットデザイン、テキストとプロダクト、ユーザビリティとミニマルナビゲーション。
バランスが大事だなぁと思いつつ、かっこいいカタカナ並べたかっただけです。

あと、あまり触れませんでしたが、それらが最終的に購入に結びつかなければならないわけで。
うーむ奥が深いです。

若干迷宮入りし始めたので今回はこの辺で。
最近コーディングを頑張ってるので、その中で気づいたことなども書いていけたらなと思ってます!押忍!

標準
mbd-cover
Releases

真ん中バースデーWebサイトリニューアルしました!

こんにちは!新人森田です。
街で新入生や新社会人な方々を見かけたり、新年度や新学期が始まったりと、新しいことづくめの季節になりましたね。 この空気だけで結構ワクワクしちゃうから春って好きです。
ではフレッシュな感じに今回もはりきって告知します!

なんと! 真ん中バースデーのWebサイトをリニューアルしましたー!

http://www.mannaka-birthday.com/

どのへんが変わったのかというと、

1、ロゴ周辺をリデザイン

0410-1

以前はロゴの下にキャッチフレーズやデモ画面の紹介等を置いていたんですが、ちょっと散漫な印象が。。
あとは、新機能の実装するためのスペース確保をするために周辺要素をひとまとめにしてみました。

まずロゴとデモ機を合わせました。 App Storeのボタンもこのどこかに配置するとのことだったので、リボンをあしらって目立たせ&まとまり感を演出。左側に空いたスペースには無料ダウンロードのメッセージを入れようと試行錯誤していたら、バッジ形式がよさげでした。フォントに他とは違うやわらかい明朝体を使って、ペタッと貼ったようなちょっと変わった質感を出しました。明朝体は単なる思いつきだったけど気に入ってます。 色はリボンと合わせて全体のトーンを整えつつ、これならキャッチコピーは上かな!という流れで完成!

情報が一カ所にまとまったことで、見てほしいポイントが絞られる効果もあったんじゃないでしょうか。
で、この下に空いたスペースに何を置いたのかというと。

2、おためし計算機能実装

0410-2

はいっ!こちらです!

web上で真ん中バースデーをおためし体験できます

名前は入れなくても調べられるので、是非使ってみて下さいね。
ただし、おためしは1日1回までなんですすいません。
もっと調べてみたい時はApp storeからアプリをダウンロードしていただけると嬉しいです!

真ん中バースデー on the App store

単に説明だけだったWebページでしたが、内容が充実してきました。
前に見ていただいた方もよろしければ是非おためししていってみてください。

http://www.mannaka-birthday.com/

次回アップデート予告!

ただいまハレノヒでは現在進行形で真ん中バースデーアプリのアップデート作業を遂行中です。
プログラムの方は師匠がすでにバッチリ作り上げてくださっております。
私の方の素材準備が間に合うかどうかのギリギリなところですが、間に合わせてみせる…!

iPhoneだけどFacebookアカウント持っていなくて真ん中バースデーを調べられなかったという方!
お待たせしました!

次のアップデートでは、Facebookアカウントなしでもアカウント作成出来るように仕様変更いたします。

今までだいぶユーザーが限られてしまって申し訳なかったのですが、これでもう少し広げられるんじゃないかと思います。
また、Facebookアカウントなしでアカウント作成した場合は友だちが0人の状態からのスタートとなります。 そうなっても寂しくないように、もう1つのアップデートをご用意しておりますのでどうぞお楽しみに!!

今回リニューアルした真ん中バースデーwebサイトでおためししたい方は、
http://www.mannaka-birthday.com/

真ん中バースデーアプリをダウンロードしたい方は、
真ん中バースデー on the App store

どうぞよろしくお願いします!!

標準
ruby-on-rails
Development

[Rails] has_many through な関連をチェックボックスで操作するときに苦労した話

WordPressのカテゴリー選択UIみたいのをつくりたい

Railsで多対多の関係を定義する方法として has_and_belongs_to_many ではなく has_many through を使うようになって久しいですが、accepts_nested_attributes_forfields_forを使って関連データを親モデルのフォームから操作するのは未だに慣れません。

ググって調べたところによると、RailsCastsで紹介されている方法が紹介されている方法が一般的なんですかね。

#196 Nested Model Form (revised)

Github ryanb/nested_form

この方法だとテキストフィールドをつけたり外したりするのが便利なんだけど、既に用意されているリストから選ぶUIの場合、つまりWordPressのカテゴリー選択みたいなのを作るのはキツイのかなと。

スクリーンショット 2014-04-08 9.40.56
↑こんなやつ

[問題]fields_forは関連データを持っていないとブロックを実行しない

そもそも fields_for はオブジェクトが関連データを持っていないとフォームを作成してくれませんよね?

このようなモデルの関係があった場合に

class Article < ActiveRecord::Base
  has_many :categorizations
  has_many :categories, through: :categorizations

  accepts_nested_attributes_for :categorizations, allow_destroy: true
end

class Categorization < ActiveRecord::Base
  belongs_to :article
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :categorizations
  has_many :articles, through: :categorizations
end

これだけじゃ fields_for の中は実行されず…

- @article = Article.new

= form_for @article do |f|
  = f.fields_for :categorizations do |cf|
    = cf.collection_select :category_id, Category.all, :id, :name

@article.categorizations.length == 0 だからブロックが実行されないんですよね。
そこで nested_form というgemの出番で、f.link_to_addとかcf.link_to_removeというヘルパーが追加されるので超便利。というのはわかるんだけどこのUIじゃないんですよ作りたいのは。

name属性手書きとか、JavaScriptで対応するの嫌なんです

上記の方法でだめなら fields_for 捨ててinput要素手書きしますか?

- Category.all.each do |cat|
  %label
    %input{ type: 'checkbox', name: 'article[categorizations_attributes][][category_id]', value: cat.id }
    = cat.name

自分で書いててそんなに悪くないかな…とちょっと思ってしまったんですが、やっぱりこんなのダメだと思う。てゆうかこれだと一度つくった関連消せないしね。

となるとチェックボックス外した時にJSで _destroy キーに true をセットする hidden 要素を生成するのか・・・!
いやいやこれも無いでしょ。処理があちこちに散らばるからね。viewをパッと見ただけじゃなんで動いてるのかわからないよ。

そうだ、Helper作ってやろう

となるとどうすりゃいいんだ!あーーー!とか思ってた時にこんな記事を見つけました。

Complex Rails Forms with Nested Attributes

全部読んだわけじゃないんですが、参考にしたのはControllerにもViewにも置きたくない複雑な処理をHelperに書いているところ。なんだ普通のコトじゃないかと思うかもしれませんが、いや僕もこれ書いてて普通だなって思いましたが見つけた時は結構目からウロコだったんですよね。

なので僕のViewコードはこうなりました

= form_for setup_categorizations(@article) do |f|
  %ul
    = f.fields_for :categorizations do |cf|
      %li
        %label
          = cf.hidden_field :id
          = cf.hidden_field :category_id
          = cf.check_box :apply, { checked: cf.object.persisted? }
          = cf.object.category.name

setup_categorizations でArticleモデルを渡して既に関連付けられていないcategoryだけをbuildしてセットしています

module ArticleFormHelper
  def setup_categorizations(article)
    Category.all.each do |cat|
      unless article.categorizations.select{ |c| c.category_id == cat.id }.any?
        article.categorizations.build({ category_id: cat.id })
      end
    end
    article
  end
end

categorizations_attributes として渡すパラメータに apply というキーの真偽値を仕込んであるのでこれを元に以下の処理をController側で行います

  1. applyキーが0でpersistedなデータなら_destroyフラグを立てる
  2. applyキーが1ならcategory_id付きで残しておく

この処理をRails4ならstrong parameter使いつつこんな感じにしておいて

class ArticlesController < ApplicationController
  include ArticleFormHelper

  def create
    @article = Article.new(article_params)
    ....
  end

  private
    def article_params
      _params = params.require(:article).permit(:title, :body, categorizations_attributes: [:id, :category_id, :apply])
      setup_categorizations_attributes(_params)
    end
end

先ほどのArticleFormHelperにsetup_categorizations_attributesメソッドを追加します

module ArticleFormHelper
  ....

  def setup_categorizations_attributes(params)
    # キーが数字の文字列のhashになっていたため配列にする "0" => {id: 1}
    attrs = params[:categorizations_attributes].dup.map{ |k, v| v }
    params[:categorizations_attributes] = attrs.inject([]) { |res, attr|
      if attr[:apply].to_i == 0
        res.push({ id: attr[:id], _destroy: 1 }) if attr[:id].persent?
      else
        res.push({ id: attr[:id], category_id: attr[:category_id] })
      end
      res
    }
    params
  end

自分的にはこれでスッキリしたんですが、もっといい方法あったら是非教えて欲しいです。
あとモデルの命名どうなの?とかもあったらコメントしてもらえると嬉しいです!

標準
title
Design

Javascript修行

こんにちは!新人森田です。
エイプリルフールというイベントもありつつ、今日からいよいよ新年度ですね。
今年度はがっつり活躍するのが私の目標です。
その為にも修行あるのみ!

コーディングの修行をいくつかやったところで、Javascript(以下js)の勉強を再開しました。
というのも、流行っている内に一度はパララックス作ってみたいんです。
いまだに私のjsコードは師匠からのアドバイス9割で出来ているので、少なくとも今の自分のhtmlやcssの知識くらいに、試行錯誤しながら作っていけるレベルにはなりたいところ。

師匠に色々教わった中でも、今回は基礎中の基礎である“jsを書く時の注意点”をまとめてみます。
これを絶対守らなければだめだという訳ではなく、こういったことに気をつけると見やすいコードになるよという目印ですね。
ブログが練習ノートみたいになってますすいません。

Javascriptを書く時の注意点

コーテーション

0401_01

htmlでは<div class=“”>のようにダブルコーテーションを使うのが一般的ですが、たとえばRubyではダブルコーテーションには特別な意味があったりします。様々な言語に共通して使えるという面もあり、特別な理由がない限りはシングルコーテーションを使うと無難そうです。
ただし文字列の中にコーテーションが使われる場合はダブルコーテーションで囲います。例:“I’m …”

オブジェクト

0401_03_03

{}で囲われるオブジェクトは、中身が複雑化しがちなため括弧の内側にスペースをあけて見やすくします。
また、オブジェクト内に複数の要素が入る場合はカンマで区切ったあとにスペースをあけて次を記述します。

配列

0401_05

一方、[]で囲われる配列にはスペースを使わずに記述します。
複数の要素を書く場合はオブジェクトと同じです。

引数

ここではif文の引数という形で見てみます。
関数(function)の時も同じです。

0401_07

ifと()の間にはスペースをあけて、()と{}の間は続けて書くことが多いです。
引数、つまり()内はスペースをあけません

0401_09_09

ifの後にelse ifを書く場合、if(){…}に続いていることを明確にするため}の隣にスペースをあけて書き始めます。

また、条件定義する時に同じ項目を使う場合は左項にまとめたりすると見やすいです。
≦≧はそれぞれ“<=”、“>=”と書きます。

キャメルケースとスネークケース

0401_11

関数定義に使う名前はキャメルケース(上の行)、それ以外の定義ではアンダーバーでつなげるスネークケース(下の行)を使います。

0401_15

また、戻り値が真偽値の時は“is~”という形式でキャメルケースを使って名前を付けます。

計算式

0401_13

計算式を記述する場合は、数字と記号の間にスペースをあけて書きます。
このとき記号は、足す“+”、引く“-”、掛ける“*”、割る“/”を使います。
通常の数式と同じで掛け算割り算が優先して行われるので、足してから掛けたい場合は()でくくります。

まとめ

細かい部分ではありますが、細かい部分が疎かになっているとコードが膨大になった時に散々な目にあうかも知れません。
私が高校大学でやってきた弓道でも、どんなに的に当たっても型が疎かではいけませんでした。
出来る人っていうのはそういう部分からしっかりしてるから結果的に出来てるんじゃないかなと思ったり。

あとjsが思った以上に計算地獄で、もともとない数学の頭をフル稼働してしんどいです。
でも書いたものが稼働してるのを見るとそんなの吹っ飛んじゃうんですけどね!
早くコードがすっと頭に入ってくるようになりたいです。押忍!

標準