(このブログにSQLを直接書くとWAFにブロックされてしまうため、画像を貼っています。テキスト版はこちらに貼っておきます。)
「デザインシステムを“システム化”するのは難しい」
コミュニケーションデザインの定義をあえて“ゆるく”する理由
いちはら:確かにそうですね。「コミュニケーションの場を作っていくことじゃないの?」みたいな話は社内でもけっこうありました。モノとかにしちゃうと、samemaruさんが言ったとおりで、「じゃあこの場合は?」と、こぼれちゃうというのはあると思うんですね。だって「コミュニケーション」もメチャクチャ言葉の領域自体が広くないですか? 定義をすればするほど難しくなってきちゃうのも、逆説的に難しいところだなと思うんです。
putchom氏(以下、putchom):デザインシステムというところをシステム化するのが難しいですよね。
samemaru:そうですね。
司会者:固定されたアウトプットというか、なにかしらのわかりやすい成果物がある領域ではないというのも難しいところの1つですよね。
sekig氏(以下、sekig):例えば「場だよね」みたいな話になった時に、同じ職域のメンバーとは「そうだよね」と合意形成しやすいと思うのですが、そこから離れたメンバーとどれだけやれるかこそが大事かなと個人的に思っています。そういう時に「場」という言葉に対する認識がけっこう違うことが多いと思うんですよね。
いちはら:わかります。宣言するのはちょっと難しい。ふわっとさせておきたいというのがあります。
sekig:そうですね。必要性はあるので、どこかでとは思いつつも様子を見ながらやっているという感じですかね。
GMOペパボがコミュニケーションデザインを言語化した理由
司会者:逆にペパボさんが、戦略の再現性を上げるというのと、制作物の生産性を上げるという2つに言語化したところは、どのへんがポイントなんですか?
putchom:今回のイベント自体がデザインシステムにおいて、コミュニケーションデザインをどう扱うかというところかなと捉えています。それでいうと「デザインシステムにそもそもコミュニケーションデザインを組み込むべきなんでしょうか」というところから問いを作っていて、その時に下のほうに書いたんですが、さっきみたいにすべてをシステマチックに処理をするのはけっこう難しいなと思っています。
putchom:ボヤッとしたものを言語化したので、これから共有していこうかなというところですね。
司会者:コミュニケーションデザインは、各社タッチポイントとか、総じてコミュニケーションデザインは広いぞというところとか、場づくりにすごく関連しているところとかは共通していますが、どれぐらい細かく定義していくのかという点においては、少しずつ違いが出てきそうですね。
いちはら:そうですね。
クックパッド社における、コミュニケーションデザイナーの関わり方
司会者:では次の質問に移っていきましょうか。各社のコミュニケーションデザイナーが、仕組み作りだったり、デザインシステムだったりの活動にどういうふうに関わっているのか。
いちはら:どう関わっているかは、けっこうフェーズによってぜんぜん違ったなと思っています。「Apron」の立ち上げ時は本当にガッツリというか、デザインのコアコンセプトを定義するのに、ずっとコミュニケーションデザイナーが関わって社内のみんなを巻き込んで進めていた感じですね。
司会者:すごい。
いちはら:それがお皿の「Sara」と言うんですよ。「Sara」は、主にCSSのコンポーネントを提供していました。その後に「citrus(Design guideline)」でブランドコンセプトやパーソナリティが初めて登場しました。
司会者:コミュニケーションデザイナーならではの関わり方はあるんですか?
いちはら:やはり立ち上げ時期に言語化していくというところ。ふわふわしたブランドのイメージなど、そういうところを定義していくのはけっこう(デザイナー)ならではの関わり方かなと思っていますね。
司会者:チラッと見えているフォトガイドラインも同じくコミュニケーションデザイナーの仕事ですか?
いちはら:そうですね。社内にカメラマンさんがいるんですよね。カメラマンさんと一緒に「いったいどういったものがクックパッドらしい写真なんだろう」というのを定義したりしています。実はクックパッドの写真は全部食べられる写真なんですよ。嘘の写真がないというか、全部手作りで写真を撮ったあとにおいしくいただけるものなんですよ。
samemaru:すごい。
いちはら:おいしそうですよね。実際に食べられるものを嘘なくきちんとコンテンツにするのも精緻化していった感じです。
司会者:なるほど。ありがとうございます。けっこうキーワードが出てきましたね。壊すことを前提に作るところだったり、コアと表層を分けてコアを決めていくみたいなところだったり。
サービスを横断して共通基盤システムを使うGMOペパボ
司会者:ペパボさん、いいですか?
putchom:はい。どう関わっているかというところなんですけれども。コミュニケーションデザインのデザインシステムの設計をする専任のチームを弊社は設けていません。「Inhouse」自体のプリンシプルに、継続的なコミットを促すというのがありますが、そのために各サービスからメンバーを集めて運営をしている感じです。
司会者:Inhouseはペパボさんのデザインシステムですよね。
putchom:そうですね。ごめんなさい、言っていなかったかもしれませんが、Inhouseはペパボの共通基盤デザインシステムです。他のサービスでは珍しいと思いますが、ペパボは社名とサービス名があまり一致していません。会社の名前はペパボですが、minneとかSUZURIとかカラーミーショップとか、いろいろなブランドのサービスを展開しています。また、これは他の企業と一緒だと思いますが、iOS/Androidのマルチプラットフォームでいろいろなサービスを提供しています。
司会者:なるほど。関口さん、samemaruさん、いちはらさん、どうですか? Inhouseはかなり骨太ですよね。すごいなというのが感想なんですけど(笑)。
sekig:マルチドメインだと、こういうふうにきちんと抽象化して構造化するのが本当に必要なんだなと、うかがっていて思いますね。
putchom:この間、別のイベントでAmebaの本田さん(本田雅人氏)と、1つのブランドの中でも色や形状を変えたい時ってあるよねという話をしていました。
司会者:コミュニケーションデザイナーならではのデザインシステムの関わり方はどうでしょうか?
putchom:コミュニケーションデザイナーならではのデザインシステムの関わり方……難しい質問ですね(笑)。
putchom:あとで、伸びしろのところで話そうと思っていたのですが、実は、サービスそれぞれのコミュニケーションデザイナーがデザインシステムを構築しているフェーズが、2022年に入ってからけっこうあります。今、社内でアートディレクション分科会を新たに発足して、アートディレクションに関わるこのあたりのアセットを用意していきましょうというところで活動しています。
sekig:やはり設計には思想が出ますよね。すごく思想を感じます。
putchom:確かに(笑)。
samemaru:そうですね。
司会者:思想が感じられますね。強めの思想が。
sekig:強めの思想を感じますね。
putchom:プリンシプルは、けっこうはっきり出していると思います。
sekig:すごく抽象化しているので固有のものは出てこないんですが、全体にはっきりと思想が見えるなと思いました。
司会者:なるほど。思想もですが、各社色が出ますね。
Cocoda
Cocodaに関する記事をまとめています。コミュニティをフォローすることで、Cocodaに関する新着記事が公開された際に、通知を受け取ることができます。
「デザインシステムを“システム化”するのは難しい」
コミュニケーションデザインの定義をあえて“ゆるく”する理由
いちはら:確かにそうですね。「コミュニケーションの場を作っていくことじゃないの?」みたいな話は社内でもけっこうありました。モノとかにしちゃうと、samemaruさんが言ったとおりで、「じゃあこの場合は?」と、こぼれちゃうというのはあると思うんですね。だって「コミュニケーション」もメチャクチャ言葉の領域自体が広くないですか? 定義をすればするほど難しくなってきちゃうのも、逆説的に難しいところだなと思うんです。
putchom氏(以下、putchom):デザインシステムというところをシステム化するのが難しいですよね。
samemaru:そうですね。
司会者:固定されたアウトプットというか、なにかしらのわかりやすい成果物がある領域ではないというのも難しいところの1つですよね。
sekig氏(以下、sekig):例えば「場だよね」みたいな話になった時に、同じ職域のメンバーとは「そうだよね」と合意形成しやすいと思うのですが、そこから離れたメンバーとどれだけやれるかこそが大事かなと個人的に思っています。そういう時に「場」という言葉に対する認識がけっこう違うことが多いと思うんですよね。
いちはら:わかります。宣言するのはちょっと難しい。ふわっとさせておきたいというのがあります。
sekig:そうですね。必要性はあるので、どこかでとは思いつつも様子を見ながらやっているという感じですかね。
GMOペパボがコミュニケーションデザインを言語化した理由
司会者:逆にペパボさんが、戦略の再現性を上げるというのと、制作物の生産性を上げるという2つに言語化したところは、どのへんがポイントなんですか?
putchom:今回のイベント自体がデザインシステムにおいて、コミュニケーションデザインをどう扱うかというところかなと捉えています。それでいうと「デザインシステムにそもそもコミュニケーションデザインを組み込むべきなんでしょうか」というところから問いを作っていて、その時に下のほうに書いたんですが、さっきみたいにすべてをシステマチックに処理をするのはけっこう難しいなと思っています。
putchom:ボヤッとしたものを言語化したので、これから共有していこうかなというところですね。
司会者:コミュニケーションデザインは、各社タッチポイントとか、総じてコミュニケーションデザインは広いぞというところとか、場づくりにすごく関連しているところとかは共通していますが、どれぐらい細かく定義していくのかという点においては、少しずつ違いが出てきそうですね。
いちはら:そうですね。
クックパッド社における、コミュニケーションデザイナーの関わり方
司会者:では次の質問に移っていきましょうか。各社のコミュニケーションデザイナーが、仕組み作りだったり、デザインシステムだったりの活動にどういうふうに関わっているのか。
いちはら:どう関わっているかは、けっこうフェーズによってぜんぜん違ったなと思っています。「Apron」の立ち上げ時は本当にガッツリというか、デザインのコアコンセプトを定義するのに、ずっとコミュニケーションデザイナーが関わって社内のみんなを巻き込んで進めていた感じですね。
司会者:すごい。
いちはら:それがお皿の「Sara」と言うんですよ。「Sara」は、主にCSSのコンポーネントを提供していました。その後に「citrus(Design guideline)」でブランドコンセプトやパーソナリティが初めて登場しました。
司会者:コミュニケーションデザイナーならではの関わり方はあるんですか?
いちはら:やはり立ち上げ時期に言語化していくというところ。ふわふわしたブランドのイメージなど、そういうところを定義していくのはけっこう(デザイナー)ならではの関わり方かなと思っていますね。
司会者:チラッと見えているフォトガイドラインも同じくコミュニケーションデザイナーの仕事ですか?
いちはら:そうですね。社内にカメラマンさんがいるんですよね。カメラマンさんと一緒に「いったいどういったものがクックパッドらしい写真なんだろう」というのを定義したりしています。実はクックパッドの写真は全部食べられる写真なんですよ。嘘の写真がないというか、全部手作りで写真を撮ったあとにおいしくいただけるものなんですよ。
samemaru:すごい。
いちはら:おいしそうですよね。実際に食べられるものを嘘なくきちんとコンテンツにするのも精緻化していった感じです。
司会者:なるほど。ありがとうございます。けっこうキーワードが出てきましたね。壊すことを前提に作るところだったり、コアと表層を分けてコアを決めていくみたいなところだったり。
サービスを横断して共通基盤システムを使うGMOペパボ
司会者:ペパボさん、いいですか?
putchom:はい。どう関わっているかというところなんですけれども。コミュニケーションデザインのデザインシステムの設計をする専任のチームを弊社は設けていません。「Inhouse」自体のプリンシプルに、継続的なコミットを促すというのがありますが、そのために各サービスからメンバーを集めて運営をしている感じです。
司会者:Inhouseはペパボさんのデザインシステムですよね。
putchom:そうですね。ごめんなさい、言っていなかったかもしれませんが、Inhouseはペパボの共通基盤デザインシステムです。他のサービスでは珍しいと思いますが、ペパボは社名とサービス名があまり一致していません。会社の名前はペパボですが、minneとかSUZURIとかカラーミーショップとか、いろいろなブランドのサービスを展開しています。また、これは他の企業と一緒だと思いますが、iOS/Androidのマルチプラットフォームでいろいろなサービスを提供しています。
司会者:なるほど。関口さん、samemaruさん、いちはらさん、どうですか? Inhouseはかなり骨太ですよね。すごいなというのが感想なんですけど(笑)。
sekig:マルチドメインだと、こういうふうにきちんと抽象化して構造化するのが本当に必要なんだなと、うかがっていて思いますね。
putchom:この間、別のイベントでAmebaの本田さん(本田雅人氏)と、1つのブランドの中でも色や形状を変えたい時ってあるよねという話をしていました。
司会者:コミュニケーションデザイナーならではのデザインシステムの関わり方はどうでしょうか?
putchom:コミュニケーションデザイナーならではのデザインシステムの関わり方……難しい質問ですね(笑)。
putchom:あとで、伸びしろのところで話そうと思っていたのですが、実は、サービスそれぞれのコミュニケーションデザイナーがデザインシステムを構築しているフェーズが、2022年に入ってからけっこうあります。今、社内でアートディレクション分科会を新たに発足して、アートディレクションに関わるこのあたりのアセットを用意していきましょうというところで活動しています。
sekig:やはり設計には思想が出ますよね。すごく思想を感じます。
putchom:確かに(笑)。
samemaru:そうですね。
司会者:思想が感じられますね。強めの思想が。
sekig:強めの思想を感じますね。
putchom:プリンシプルは、けっこうはっきり出していると思います。
sekig:すごく抽象化しているので固有のものは出てこないんですが、全体にはっきりと思想が見えるなと思いました。
司会者:なるほど。思想もですが、各社色が出ますね。
Cocoda
Cocodaに関する記事をまとめています。コミュニティをフォローすることで、Cocodaに関する新着記事が公開された際に、通知を受け取ることができます。
データベースのテーブル定義の仕様書を自動生成しよう
DX本部でのプロジェクトは、開発環境を社内向けに別途用意することが大半なので、取引先に許可を取らないと何かを試すことができないということは今のところほとんどありません。
そのため、実際の開発フローとしては詳細な仕様書を書き起こしてから実装することはあまりなく、大まかな方針を決めてから軽く実装してみて、うまくいきそうであればそれを仕様としてまとめつつ実装することが多いです。
データベースのテーブル定義であれば、それらの定義はGitHub上で管理されており、リリース時に自動もしくは半自動で適用されるため、実運用されているものを正として扱うという考え方です。
DX系のプロジェクトのように協業のような要素を含むプロジェクトでは、成果物の確認の意味も含めて各種仕様書を定期的に提出するような場合もあります。ほかにも複数社が関係して協力して推進するものもあります。
欲を言えば、マイグレーションツールの定義ファイルやテーブル定義のSQLを仕様書としてしまいたいのですが、それだと誰もが読めるものではないのと、場合によってはフォーマットについて取り決めがあるかもしれません。
そのようなケースでは万能なExcelシートをつかって仕様書を管理することが多いと思いますが、DXを推進する部署なので、定義や仕様の二重管理は避けたいところです。自動生成しましょう🚀
データウェアハウスのテーブル定義を抽出する
Snowflakeに限った話ではないですが、データベースにはテーブル定義を表現するシステムテーブルがあることが多いです。SQLで抽出しましょう。
(このブログにSQLを直接書くとWAFにブロックされてしまうため、画像を貼っています。テキスト版はこちらに貼っておきます。)
自動生成するためのテンプレートを用意する
「仕様書」っぽい見た目に仕上げる
素のhtmlだけだとこんな感じです。ここから「仕様書」っぽい見た目に仕上げていきましょう。
データベースのテーブル定義の仕様書を自動生成しよう
DX本部でのプロジェクトは、開発環境を社内向けに別途用意することが大半なので、取引先に許可を取らないと何かを試すことができないということは今のところほとんどありません。
そのため、実際の開発フローとしては詳細な仕様書を書き起こしてから実装することはあまりなく、大まかな方針を決めてから軽く実装してみて、うまくいきそうであればそれを仕様としてまとめつつ実装することが多いです。
データベースのテーブル定義であれば、それらの定義はGitHub上で管理されており、リリース時に自動もしくは半自動で適用されるため、実運用されているものを正として扱うという考え方です。
DX系のプロジェクトのように協業のような要素を含むプロジェクトでは、成果物の確認の意味も含めて各種仕様書を定期的に提出するような場合もあります。ほかにも複数社が関係して協力して推進するものもあります。
欲を言えば、マイグレーションツールの定義ファイルやテーブル定義のSQLを仕様書としてしまいたいのですが、それだと誰もが読めるものではないのと、場合によってはフォーマットについて取り決めがあるかもしれません。
そのようなケースでは万能なExcelシートをつかって仕様書を管理することが多いと思いますが、DXを推進する部署なので、定義や仕様の二重管理は避けたいところです。自動生成しましょう🚀
データウェアハウスのテーブル定義を抽出する
Snowflakeに限った話ではないですが、データベースにはテーブル定義を表現するシステムテーブルがあることが多いです。SQLで抽出しましょう。
(このブログにSQLを直接書くとWAFにブロックされてしまうため、画像を貼っています。テキスト版はこちらに貼っておきます。)
自動生成するためのテンプレートを用意する
「仕様書」っぽい見た目に仕上げる
素のhtmlだけだとこんな感じです。ここから「仕様書」っぽい見た目に仕上げていきましょう。
なぜrangeが必要なのか
C#の場合は IEnumerable というインタフェースが全てのコレクションの基底になっているので、これを利用することであらゆるコレクションを受け入れることができます。さすが後発の言語だけあってスマートな仕様です。さらには LINQ を使って色々な処理を噛ませたイテレートが可能です。そこらへんは https://zenn.dev/rita0222/articles/9950ff78cab71371c085 にも書いてあるので、読んでみてください。
で、我らがC++先生にもそんなインタフェースがあればいいんですが、値型でゴリゴリにパフォーマンスを追求することが至上命題であるC++においてインタフェースは甘えです。C++が古くから提示してきたのは「イテレータがあれば十分でしょ!」という回答でした。
上記の for ループは、 std::vector が std::list や std::set になったとしても、意図通りに動作します。その統一性は、それはそれでありがたいんですが、コンテナをイテレートするのにわざわざこれをタイプせにゃならんかったり、イテレータなるものを意識したコードを書かなくてはならないのは、利便性に難があると言わざるを得ませんでした。
- begin() と end() というメンバ関数を持ち、それらが範囲の先頭と末尾を示すイテレータを返すこと
- 上記で得られるイテレータは * 演算子で要素への参照が取得でき、 ++ 演算子で次の要素を指し示すこと
- イテレータが end() と等しいと判定された時点でループを終了すること
ちなみにC++20以降では、この要件は range concept として定義されています。範囲for文で使えるために最低限の要件に加えて、更に細かな条件(begin()を呼び出しても何もオブジェクトに影響を与えない、など)が定められたり、逆に制限が緩和されたり(begin()とend()が同じ方じゃなくてもよい、など)レンジの定義 しています。詳しくは こちら をご参照ください。
range の意義と定義が理解できたならば、「 ++ で素直に1つずつ次に進めるのではなく、条件を満たすものまで進めるようにする」とか「 * で得られる参照を、異なる値に変換できるんじゃないか」などと妄想が膨らみます。膨らみませんか?膨らませましょう。
間違えました。それがまさに range アダプタであり、それで得られるものが view です!
というわけで、次回はC++17以前の環境で range アダプタを自作して、メタプログラミングに親しんでもらおうと思います。
コメント