tag:crieit.net,2005:https://crieit.net/tags/atomic_design/feed 「atomic_design」の記事 - Crieit Crieitでタグ「atomic_design」に投稿された最近の記事 2019-05-28T10:06:48+09:00 https://crieit.net/tags/atomic_design/feed tag:crieit.net,2005:PublicArticle/15014 2019-05-23T12:06:29+09:00 2019-05-28T10:06:48+09:00 https://crieit.net/posts/Atomic-Design Atomic Designでランディングページを作ったので、作成手順とかまとめました。 <p><a href="https://crieit.now.sh/upload_images/5f974061f5400e367579c49bfc30ecf45ce60df66025d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5f974061f5400e367579c49bfc30ecf45ce60df66025d.png?mw=700" alt="eyecatch.png" /></a></p> <p>こんにちは、@ktmoukです。時間を管理できるアプリ「<a target="_blank" rel="nofollow noopener" href="https://www.hackaru.app">Hackaru</a>(測る)」を一人で開発しています。</p> <p>最近、ユーザが最初に訪れるページ、いわゆるランディングページをリニューアルしました。Atomic Designを参考に、Vueのコンポーネントを分割しています。</p> <p>本稿では、個人開発でAtomic Designを使うときの作成手順をまとめてみました。Web制作の参考になれば幸いです。</p> <p><a href="https://crieit.now.sh/upload_images/36ef9cc3228f35d45f8b15390af45f295ce60d15e333d.jpeg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/36ef9cc3228f35d45f8b15390af45f295ce60d15e333d.jpeg?mw=700" alt="0.jpeg" /></a></p> <p>ランディングページ: <a target="_blank" rel="nofollow noopener" href="https://www.hackaru.app">https://www.hackaru.app</a></p> <h1 id="その前にAtomic Designとは?"><a href="#%E3%81%9D%E3%81%AE%E5%89%8D%E3%81%ABAtomic+Design%E3%81%A8%E3%81%AF%EF%BC%9F">その前にAtomic Designとは?</a></h1> <p>Atomic Designは、UIのパーツを「原子(Atom)」「分子(Molecule)」「有機体(Organism)」「テンプレート(Template)」「ページ(Page)」に分類しようという考え方です。分類することでパーツが再利用しやすくなります。</p> <p>詳しくは、<a target="_blank" rel="nofollow noopener" href="https://design.dena.com/design/atomic-design-%E3%82%92%E5%88%86%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%A4%E3%82%82%E3%82%8A%E3%81%AB%E3%81%AA%E3%82%8B/">DeNA DESIGN BLOGの記事</a> や <a target="_blank" rel="nofollow noopener" href="http://atomicdesign.bradfrost.com/chapter-2/#atomic-design-is-for-user-interfaces">Atomic Design Methodology</a> が参考になります。</p> <p><a href="https://crieit.now.sh/upload_images/ba4b86b4411a613d85a97f918ede6f685ce60d39a576a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ba4b86b4411a613d85a97f918ede6f685ce60d39a576a.png?mw=700" alt="1.png" /></a></p> <p>引用元: <a target="_blank" rel="nofollow noopener" href="http://atomicdesign.bradfrost.com/chapter-2/#atomic-design-is-for-user-interfaces">Atomic Design Methodology</a></p> <h1 id="1. 簡単なワイヤーフレームを作る。"><a href="#1.+%E7%B0%A1%E5%8D%98%E3%81%AA%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%BC%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%80%82">1. 簡単なワイヤーフレームを作る。</a></h1> <p>Atomic Designとは逸れるのですが、コーディングに入る前にワイヤーフレームを作るようにしています。</p> <p>ワイヤーフレームとは、ざっくりとした外観と、画像や文章のようなパーツの位置を整理した設計図のことです。ワイヤーフレームを作ることで、頭の中で考えているイメージが本当に実現できるか確認できます。</p> <p>ワイヤーフレームを作らずにコーディングを始めると、「このパーツを入れるスペースがない!」とか、「次何するんだっけ?」という感じで、手戻りや長考する時間ができてしまうんですよね。</p> <p>ワイヤーフレームはFigmaなどのソフトを使うこともできますし、紙とペンでも作成できます。私はノートにざっくり描きました。</p> <p><a href="https://crieit.now.sh/upload_images/f0426b14862133dd4f2f4847f88237635ce60d5951be4.jpeg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f0426b14862133dd4f2f4847f88237635ce60d5951be4.jpeg?mw=700" alt="2.jpeg" /></a></p> <p>ポイントとして、色やイラストのような見た目を書かないようにしています。「何を置くか」と「どこに置くか」を整理できれば十分です。ざっくり書くように意識しています。所要時間は、1ページあたり10分〜15分くらいを目安にしています。</p> <h1 id="2. とりあえず、1ファイルに全部書く。"><a href="#2.+%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E3%80%811%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%85%A8%E9%83%A8%E6%9B%B8%E3%81%8F%E3%80%82">2. とりあえず、1ファイルに全部書く。</a></h1> <p>ワイヤーフレームが出来たら、コーディングをします。ポイントとして、最初は分割せず、1ファイルに1ページ分のHTMLとCSSを全部書いてしまいます。完成させてから整理したほうが効率が良いからです。</p> <p>Atomic Designを意識してボタンやラベルなどのAtomから作りたくなりますが、もしかすると不要なパーツが出てくるかもしれません。一旦完成させてから整理すれば、手戻りを避けることができます。</p> <p>というわけで、1ファイルに全部書いてみました。<br /> コードは<a target="_blank" rel="nofollow noopener" href="https://github.com/ktmouk/hackaru-official/blob/2051b82865000fdd75abebdb9330bf88890b065a/pages/index.vue">GitHubから見ることが出来ます。</a></p> <p><a href="https://crieit.now.sh/upload_images/43a17fbefd64beba83d9a25db2cb1fcf5ce60d70c8b05.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/43a17fbefd64beba83d9a25db2cb1fcf5ce60d70c8b05.png?mw=700" alt="3.png" /></a></p> <h1 id="3. 重複している箇所をAtomic Designでまとめる。"><a href="#3.+%E9%87%8D%E8%A4%87%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E7%AE%87%E6%89%80%E3%82%92Atomic+Design%E3%81%A7%E3%81%BE%E3%81%A8%E3%82%81%E3%82%8B%E3%80%82">3. 重複している箇所をAtomic Designでまとめる。</a></h1> <p>完成させたら、パーツを分類していきます。私は分類の基準を以下のように決めています。Templateは使っていません。</p> <blockquote> <p>・<strong>Atom</strong> 分割できない小さなパーツ。ボタンやラベルなど。<br /> ・<strong>Molecule</strong> 検索欄やメニューのような小〜中くらいのパーツ。<br /> ・<strong>Organism</strong> ヘッダーやフッターのような大きなパーツ。<br /> ・<strong>Pages</strong> 最終的にユーザが見るもの。完成品。</p> </blockquote> <h2 id="Atom"><a href="#Atom">Atom</a></h2> <p>Atomは、ボタンと言語のセレクトボックスにしました。</p> <p><a href="https://crieit.now.sh/upload_images/c1c790f2ee7507c00363064ec7df0c635ce60d8195b97.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c1c790f2ee7507c00363064ec7df0c635ce60d8195b97.png?mw=700" alt="4.png" /></a></p> <h2 id="Molecule"><a href="#Molecule">Molecule</a></h2> <p>Moleculeは、機能の説明部分と、「その他の機能」にある4要素にしました。</p> <p><a href="https://crieit.now.sh/upload_images/dcd469349860db183524aee465332d505ce60d8d33665.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dcd469349860db183524aee465332d505ce60d8d33665.png?mw=700" alt="5.png" /></a></p> <h2 id="Organism"><a href="#Organism">Organism</a></h2> <p>Organismはヘッダーとフッター、主要機能とその他の機能の部分にしました。Organismの中にAtomとMoleculeが含まれています。</p> <p><a href="https://crieit.now.sh/upload_images/d8f450f798dbf3238647fbc0846fe4205ce60d9f76450.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d8f450f798dbf3238647fbc0846fe4205ce60d9f76450.png?mw=700" alt="6.png" /></a></p> <h1 id="適度に分割しよう。"><a href="#%E9%81%A9%E5%BA%A6%E3%81%AB%E5%88%86%E5%89%B2%E3%81%97%E3%82%88%E3%81%86%E3%80%82">適度に分割しよう。</a></h1> <p>分割するときのポイントとして、なるべく「再利用する必要がないもの」は分割しないようにしています。</p> <p>たとえば、⚡マークのロゴはAtomに分割できるかもしれません。ただ、今の所、使用しているのはヘッダーの1箇所だけです。そのため、ヘッダーのOrganismに直書きしています。ロゴを別の箇所でも使いたい、となったタイミングで分割するつもりです。</p> <p>または、再利用はしないけど、複雑なものは分割しています。今回でいうところの言語のセレクトボックスです。内部にI18nを変更するスクリプトが含まれています。分割したほうがメンテナンスがしやすいためです。</p> <p>とくにAtomとMoleculeはいくらでも分割できてしまうので、適度に分割するのがいいかもしれませんね。</p> <p><a href="https://crieit.now.sh/upload_images/da017ff790b2a1161ffbf5678bc94c1f5ce60dac61831.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/da017ff790b2a1161ffbf5678bc94c1f5ce60dac61831.png?mw=700" alt="7.png" /></a></p> <p>Atomをたくさん分割してみました。</p> <h1 id="GitHubでソースコードを公開しています。"><a href="#GitHub%E3%81%A7%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82">GitHubでソースコードを公開しています。</a></h1> <p>題材にしたランディングページは、<a target="_blank" rel="nofollow noopener" href="https://github.com/ktmouk/hackaru-official">GitHubにソースコードを公開しています。</a> また、<a target="_blank" rel="nofollow noopener" href="https://www.hackaru.app">ランディングページも実際に見れます</a>ので、よろしければ覗いてみてください。本稿がみなさんのお役に立てれば幸いです。それでは。</p> <p>ランディングページ:  <a target="_blank" rel="nofollow noopener" href="https://www.hackaru.app">https://www.hackaru.app</a></p> <blockquote> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/ktmouk/hackaru">GitHub</a><br /> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/hackaru">公式のTwiiter</a><br /> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/ktmouk">開発者のTwitter</a></p> </blockquote> ktmouk