Blog

ブログ

コンセプトにぎりが超重要!デザイン制作の裏側をご紹介

株式会社ジョーレンはシステム開発はじめ、デザインの制作についても承っております。

今回はデザインの制作についてフォーカスし、制作の際、大事にしていることをご紹介します!

・ジョーレンのデザイン実績 一例

デザインはコンセプトの認識合わせが超重要

超重要  と書きました。

はい、デザインの制作において最初から最後まで1mmもこぼすことなく一貫して超重要なのです。

何がそんなに超重要なのか。その根拠について今回は綴っていきます!

ヒアリングで大切にしていること

まず始めにクライアント様にヒアリング。ヒアリングする内容は、オリジナルのヒアリングシートのフォーマットが存在し、

これを元にクライアント様の傾向に合わせてカスタマイズしてヒアリングを行っていきます。

制作者にとって少しでも多く情報があることは、アイディアのヒントになり良き制作につながるため、聞けることはなるべくヒアリングするようにしています。

ちなみに雑談内容も制作者にとってはヒントになるのです!雑談って大事。

またクライアント様の雰囲気やオーラを生で感じ取るため、対面でヒアリングを行うこともあります。体感で得られることもあるのです!対面でのヒアリングだったら、その様子を写真撮影しその後デザイナーに共有することも臨場感が伝えられてよいですね。

ヒアリングした内容で疑問に思ったことはそのままにせず必ず解消させ、疑問が残らないようにします。

そしてこのヒアリング内容はコンセプトへと繋がります。

ベースカラーどうする?

さてここでは、ヒアリング項目の中から1つピックアップしてご紹介しましょう。

ヒアリング時に欠かせない「ベースカラー」の取り決めについて。

成果物の印象を左右するものになりますから、クライアント様の気持ちも気合もぐぐっと入る質問内容です。

カラーを決める時に役立つツールがこちら!

感性マッピングツールなるものがあり、

日本カラーデザイン研究所」が研究・開発した配色イメージスケールが活用できます。

http://www.ncd-ri.co.jp/image_system/imagescale.html

シンプルな例でたとえると、

  • 「クールなイメージにしたい!」だったら  青系
  • 「情熱的なイメージにしたい!」だったら  赤系

といったように色を決めていきます。

クライアント様がベースカラーを決めること迷っていたら、すかさずこの配色イメージスケールを用いて取り決めるとよいでしょう?

もし仮にクライアント様から「クールなイメージにしたい!」という希望があるのにも関わらず、

赤系のベースカラーを指定した際には、この資料を元に説明しましょう。説得力が増します!

サイトの骨子となるWFの作成

次にヒアリング内容を踏まえて、WF(ワイヤーフレーム)を作成します。

※WF(ワイヤーフレーム)とは:サイトに掲載する要素を整理し、サイトに見立てレイアウト化したドキュメントのこと

・以下はEC-CUBE社提供のWFサンプル

 

WFを作る時に心がけていることはこちら!

  1. コンセプト(ヒアリングシート)を踏まえた内容か?
  2. グルーピング等して、情報整理が的確にできているか?  
  3. プライオリティを意識した見せ方になっているか?
  4. なぜこの配置にしているか、裏付けが語れるか?
  5. SNS等、必要な外部リンクは漏れなく設置できているか?

 

ここで超重要で触れた「コンセプト(ヒアリングシート)を踏まえた内容か?」が出て来ました。

WFの作成者がコンセプトからブレたものを作成してはいけません。目指す方向を見誤ってはいけません。しっかり振り返りつつWFの作成を行いましょう。

デザインはあくまで手段に過ぎないため、達成したい目的(コンセプト)を正しく伝えられるようWF作りを行いましょう。

余談:

私はまず始めに手書きでWF作りを始めます。その方が思考のスピードが早く、アイディアもまとまりやすいためです。ツールからだとツールベースについつい設計が走ってしまいがちなのです。

実際、手書きから作成する人が多いようです!

 

用意するWFは、

  • ハンバーガーメニュー
  • スマホとPC  両ページ

を欠かさず用意しましょう。1つでも欠けるとデザイナーが迷ったり制作負荷がかかることがあるためです。クライアント様とすれ違いや、デザインにおいて出戻りが発生することもありますので、怠らず作成を行います。

またポイントとして、デザインに近いWFになるよう、写真画像等を反映したカラフルなWFを作ります。(私のポジションとして、ディレクターの立場で依頼しています)

なぜかというと、以下2つの思いがあるからです!

1)クライアント様ご希望のデザインに近いイメージでWFを確認してもらえるため

2)デザイナーにこのWFを超える最高のデザインを作ってほしいため

そしてクライアント様から了承取った上、

レイアウトはいじってよい前提でデザイナーに依頼します。

デザイン依頼。目指している山の頂上は同じか!?

ヒアリングシートを元にコンセプトを整理して、デザイナーにデザインを依頼するステータスを向かえました。

心がけている点は、クライアント様から受けた内容プラスアルファ、デザインの際に参考となりそうな情報をデザイナーに伝えることです。

それを受けてデザイナーから発信されるアイディアは

「ああ、こう来たか!」「なるほど、こういった表現もできるか」「わーそこまで熟考できていなかった」

と多くの気づきを得ることがあります。またデザイナーからこういった指摘を受けることは、次に活かす学びにも繋がります。

その後デザイナーからデザインがUPされた時、UIが更に磨きがかかって仕上がっていた時は感動です。

見やすさや情報整理具合が、レベルアップ!!

デザイナーの存在に頼もしさ(後光が見えるっっ)を感じる瞬間でもあります。

そしてこの時、必ずコンセプトからブレていないかチェックを行うことは欠かせません。

なぜって。

みんなで目指す山の頂上は同じだから!

です。

※この言葉、この後でも出てきます。

クライアントプレビューそしてFIX。ここで武器となるのは!?

デザインが仕上がったら、コンセプトを添えてクライアント様にプレビューを行います。

そしてデザインを見たクライアント様からフィードバックが届くステータスを向かえました。

届いたフィードバックを確認してみたら、

時には1からデザインを修正しなければならないフィードバックが届くことがあります(ガクブル。

しかし!こちらには強力な武器があります!!

エビデンスとして用いる武器、コンセプトの元となるヒアリングシート!!!

コンセプトからブレているフィードバックを受け取ったら、

必ずクライアント様とコンセプトに立ち戻って一緒に確認を行いましょう。

そこでコンセプトからズレているフィードバックをしていること、クライアント様が気づきます。

みんなで目指す山の頂上は同じだから!

そうです。

クライアント様は違う山の頂上を目指してしまっていたのです。

それゆえコンセプトと異なるフィードバックをしてしまったのです。

冒頭で超重要と書いた理由はここにありました。

コンセプトを握らずデザインすることは、目指す方向を共有せず山を登ってしまうことを表します。

想像してみただけで、恐怖ですね。

トラブルを招くだけで、クライアント様はじめチームメンバーも安心して一緒に山の頂上を目指すことができません。

認識合わせって超重要ですね?

さて今回はデザインを行うに当たって制作の裏側のお話をさせて頂きました。

株式会社ジョーレンはShopify構築、EC-CUBE構築案件においてもデザインから制作を承っておりますのでお気軽にご相談ください。具体的なデザインイメージがなくてもお客様と伴走してご提案することが可能です。

 

▼EC-CUBEの実績はこちら

https://www.ec-cube.net/product/cases/backnumber.php?search_partner_id=1431

 

バナー

LINQ の基本を理解しよう

LINQ とは

LINQ とは コレクション・XML・SQLなど様々なデータソースに対する検索・操作を行うもので、System.Linq を参照することにより提供される拡張メソッド群(標準クエリ演算子)ことを指します。
本稿では特に利用する機会の多いコレクション(IEnumeable)に対する LINQ to Object の解説を行います。

メソッド構文とクエリ構文

LINQ は拡張メソッドで提供されることから、当然コレクションのメソッドとして利用する(メソッド構文)ことが可能です。
また一部の標準クエリ演算子に対しては言語仕様としてキーワードが割り当てられており、それを用いることでSQLライクに記述する(クエリ構文)ことも可能です。

例)メソッド構文とクエリ構文
 ※本稿のサンプルコードではメソッドの引数としてラムダ式を使用します。

var source = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// いずれも結果で得られるコレクションの型はIEnumerable<int>となり、
// 列挙することで { 1, 2, 3, 4, 5 } の結果(要素)を得ることができます。

// メソッド構文
// 処理しない値を取り出す場合はSelectを書略可能
var methodResult = source.Where(x => x <= 5);

// クエリ構文
// クエリ構文ではselectを省略不可
var queryResult =
    from x in source
    where x <= 5
    select x;

またクエリ構文で記述したコードはコンパイルを通して標準クエリ演算子に変換されますので、最終的に得られる結果は同一になります。
前述のコードから得られる実行形式のファイルを逆コンパイルした結果は下記となります。

// Program
using System.Collections.Generic;
using System.Linq;

private static void <Main>$(string[] args)
{
	int[] source = new int[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	IEnumerable<int> methodResult = source.Where((int x) => x <= 5);
	IEnumerable<int> queryResult = source.Where((int x) => x <= 5);
}

なお全ての標準クエリ演算子をクエリ構文で記述することはできないため、それらの機能が必要な場合はメソッド構文で記述する必要があります。
※メソッド構文とクエリ構文を混ぜて使用することも可能ですが、式を分けるかどちらかに統一したほうが可読性の面からも無難です。

基本的な使い方

Where によるデータの抽出と Select によるデータの選択・処理

Where メソッドでは、コレクションから条件に合致する要素を抽出することが可能です。
Select メソッドでは、コレクションの全要素に対して処理を行った結果を取得することができます。
Where メソッドと Select メソッドを組み合わせてコレクションの条件に合致した要素に処理を行った結果を取得する、といった用途で利用することが多いようです。
ここでは、数値のコレクションから条件に合致する要素を抽出し二乗したコレクションを取得する例を示します。

var source = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// メソッド構文
var methodResult = source.Where(x => x <= 5).Select(x => x * x);

// クエリ構文
var queryResult =
    from x in source
    where x <= 5
    select x * x;

// 結果は { 1, 4, 9, 16, 25 } となる。

また、数値型のコレクションで利用する以外にも、オブジェクトのコレクションに対して処理を行うことも可能です。
例えば人物を定義するPersonクラスのコレクションから20歳以上の人を抽出して氏名をつなげた文字列を取得するといった処理の場合、下記のように書くことができます。
※本稿のサンプルコードではnullチェック等を行っていませんが、実際に利用する場合は例外が発生しないように条件式に気を付けましょう。

/// <summary>
/// 人物を定義するPersonクラス
/// </summary>
class Person
{
    /// <summary>名</summary>
    public string FirstName { get; set; }
    /// <summary>姓</summary>
    public string LastName { get; set; }
    /// <summary>年齢</summary>
    public int Age { get; set; }

    public Person(string firstName, string lastName, int age)
    {
        FirstName = firstName;
        LastName = lastName;
        Age = age;
    }
}

/// <summary>
/// サンプルクラス
/// </summary>
class Sample
{
    static void Main()
    {
        var persons = new[] {
            new Person("Terrance", "Huff", 18),
            new Person("Deven", "Cyrus", 26),
            new Person("Dave", "Corbett", 53),
            new Person("Brion", "Shoebridge", 12),
            new Person("Terence", "Long", 31)
        };

        // メソッド構文
        var methodResult = persons.Where(x => x.Age >= 20).Select(x => $"{x.FirstName} {x.LastName}");

        // クエリ構文
        var queryResult =
            from x in persons
            where x.Age >= 20
            select $"{x.FirstName} {x.LastName}";

        // 結果は { "Deven Cyrus", "Dave Corbett", "Terence Long" } となる。
    }
}

GroupBy によるデータの組み分け

GroupBy メソッドでは、コレクションの要素から取得した値をもとにグルーピングを行い、グループごとにデータを抽出することが可能です。
下記のサンプルコードでは、前述のPersonクラスのコレクションを元にFirstNameの頭文字でグルーピングを行っています。

// メソッド構文
var methodResult = persons.GroupBy(x => x.FirstName[0], x => $"{x.FirstName} {x.LastName}");

// クエリ構文
var queryResult =
    from x in persons
    group $"{x.FirstName} {x.LastName}" by x.FirstName[0];

// 結果は、下記となる。
// Key 'T'
//   { "Terrance Huff", "Terence Long" }
// Key 'D'
//   { "Deven Cyrus", "Dave Corbett" }
// Key 'B'
//   { "Brion Shoebridge" }

OrderBy / OrderByDescending による並び替え

OrderBy メソッドは昇順、OrderByDescending メソッドは降順で、コレクションの要素の並び替えを行います。
クエリ構文の場合は orderby 句と ascending 句または descending 句の組み合わせで並び替える順序を指定します。
数値を降順で並び替える場合は、下記のようなコードになります。

var source = new int[] { 3, 5, 7, 1, 10, 8, 4, 6, 2, 9 };

// メソッド構文
var methodResult = source.OrderByDescending(x => x);

// クエリ構文
var queryResult =
    from x in source
    orderby x descending
    select x;

// 結果は { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 } となる。

最後に

今回は割と利用頻度が高いと思われるメソッドを簡単に説明しましたが、これらを組み合わせることで複雑なデータの抽出処理を可読性を上げつつ簡単に記述することができます。
ただし LINQ は気軽に使える反面、書き方によっては非常に大量のメモリを使うことがあるため、Web アプリケーションのように複数スレッドで同時実行されるようなプログラムで大量のデータを扱う場合は、問題がないか十分気を付ける必要があります。
適切な場所でうまく活用できるようにしましょう。