tag:crieit.net,2005:https://crieit.net/users/ktmouk/feed ktmoukの投稿 - Crieit Crieitでユーザーktmoukによる最近の投稿 2019-05-28T10:06:48+09:00 https://crieit.net/users/ktmouk/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 tag:crieit.net,2005:PublicArticle/15013 2019-05-23T11:54:13+09:00 2019-05-23T11:54:36+09:00 https://crieit.net/posts/Hackaru 時間を管理できるオープンソースなアプリ「Hackaru」を作りました。その経緯と実装について。 <p><a href="https://crieit.now.sh/upload_images/5f974061f5400e367579c49bfc30ecf45ce60a763e52b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5f974061f5400e367579c49bfc30ecf45ce60a763e52b.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>今年の4月に公開したばかりなのですが、すでに本格的に使用されているユーザさんもいて、フィードバックをいただいたり大変助かっています。本当にありがとうございます。</p> <p>今回、投稿を始めた経緯は、個人開発を通して学んだことをシェアしていきたいなと思ったからです。技術的なナレッジはネット上に沢山ありますが、個人開発のナレッジは比べて少ないですし、私自身も試行錯誤しています。今後、個人で開発をされる方の参考に少しでもなれば幸いです。</p> <p>本稿では、私が今開発しているHackaruがどんなアプリか、なぜ作ったのか、どうやって作ったのかを簡単に書いていきたいと思います。</p> <h1 id="どんなアプリ? - 時間を振り返るためのアプリです。"><a href="#%E3%81%A9%E3%82%93%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%EF%BC%9F+-+%E6%99%82%E9%96%93%E3%82%92%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%81%A7%E3%81%99%E3%80%82">どんなアプリ? - 時間を振り返るためのアプリです。</a></h1> <p>仕事や勉強などの時間を計測して、日々をどのように過ごしたか振り返りできるアプリです。</p> <p>作業を始める前に計測を開始して、</p> <p><a href="https://crieit.now.sh/upload_images/630a74a1a1db27c0864c22f1cd2104b25ce609384fcbf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/630a74a1a1db27c0864c22f1cd2104b25ce609384fcbf.png?mw=700" alt="0.png" /></a></p> <p>作業が終わったら計測を停止します。そして、一日の終わりにカレンダーやレポートで振り返ることができます。今日はどんなことをしたか、逆に何もしていない時間がどれくらいあるか確認できます。</p> <p><a href="https://crieit.now.sh/upload_images/ba4b86b4411a613d85a97f918ede6f685ce6094c920ac.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ba4b86b4411a613d85a97f918ede6f685ce6094c920ac.png?mw=700" alt="1.png" /></a></p> <h1 id="なぜ作ったの? - 自由で連携しやすいタイムトラッキングアプリが欲しかった。"><a href="#%E3%81%AA%E3%81%9C%E4%BD%9C%E3%81%A3%E3%81%9F%E3%81%AE%EF%BC%9F+-+%E8%87%AA%E7%94%B1%E3%81%A7%E9%80%A3%E6%90%BA%E3%81%97%E3%82%84%E3%81%99%E3%81%84%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%88%E3%83%A9%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8C%E6%AC%B2%E3%81%97%E3%81%8B%E3%81%A3%E3%81%9F%E3%80%82">なぜ作ったの? - 自由で連携しやすいタイムトラッキングアプリが欲しかった。</a></h1> <p>以下のようなタイムトラッキングアプリが欲しかったからです。</p> <blockquote> <p>・マルチプラットフォームで使用できる。<br /> ・Slackのような外部サービスと連携ができる。<br /> ・サードパーティ製アプリが作りやすい。<br /> ・無料で使用できる。<br /> ・オープンソース。</p> </blockquote> <p><strong>Web、iPhone、Android等のマルチプラットフォームで使用できる。</strong><br /> Hackaruは<a target="_blank" rel="nofollow noopener" href="https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ja">PWA</a>という技術に対応しています。ホーム画面に追加するだけで、アプリストアからダウンロードしたアプリのようにさくさく使用できます。</p> <p><strong>Slackのような外部サービスと連携ができる。</strong><br /> Webhookの送信に対応しています。<a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/appengine/docs/whatisgoogleappengine?hl=ja">Google App Engine</a>などを使えば、計測を完了したらSlackに送信、といったこともできます。</p> <p><strong>サードパーティ製アプリが作りやすい。</strong><br /> OAuth2.0を提供しています。サードパーティ製のアプリでも、OAuth経由で時間を測ったり止めたりすることができます。</p> <p><strong>オープンソース。</strong><a target="_blank" rel="nofollow noopener" href="https://github.com/ktmouk/hackaru">GitHub</a>に公開しているので、自宅のサーバでも簡単に構築できます。</p> <h1 id="どうやって作ったの? - Nuxt.js + Rails + AWSで構築しています。"><a href="#%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%A6%E4%BD%9C%E3%81%A3%E3%81%9F%E3%81%AE%EF%BC%9F+-+Nuxt.js+%2B+Rails+%2B+AWS%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82">どうやって作ったの? - Nuxt.js + Rails + AWSで構築しています。</a></h1> <p>APIサーバとWebサーバに分割しています。お互いはRESTfulで通信しています。</p> <p><a href="https://crieit.now.sh/upload_images/88a9e4f10cd3fbb8f01ea9813ded2ed05ce6096e2be86.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/88a9e4f10cd3fbb8f01ea9813ded2ed05ce6096e2be86.png?mw=700" alt="2.png" /></a></p> <p>APIサーバはRails5のAPIモードを使用しています。OAuth2.0とRESTfulの提供を担当しています。Webサーバからのリクエストをもとにデータを操作します。HTML/CSSは出力しません。表示はすべてWebサーバにお任せします。</p> <p>WebサーバはNuxt.jsを使用しています。APIサーバと通信して、データをブラウザに表示することが役目です。データを直接操作することはありません。APIを経由して操作します。</p> <p>どちらもDockerコンテナ化して、AWSのECSで動作させています。DynamoDBのようなAWS独自のサービスは使っていません。自宅サーバでも構築できるようにするためです。</p> <p>すべて<a target="_blank" rel="nofollow noopener" href="https://github.com/ktmouk/hackaru">オープンソースとして公開しています</a>ので、気になる方は覗いてみてください。</p> <h1 id="デスクトップ版もあります。"><a href="#%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%89%88%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82">デスクトップ版もあります。</a></h1> <p>デスクトップ版はElectronとVue.jsで構築しています。特徴として、自動で時間を測ってくれる機能があります。</p> <p>たとえば、プログラミングをするときはAtomEditorを開いたり、絵を書くときにはPhotoshopを開いたり・・・。作業を開始するタイミングとソフトを開くタイミングって同じことが多いですよね。それを利用して、ソフトを開く、閉じるをトリガーに自動で計測してくれます。パソコンで作業される方は、ぜひ使ってみてください。</p> <p><a href="https://crieit.now.sh/upload_images/43a17fbefd64beba83d9a25db2cb1fcf5ce60985558c8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/43a17fbefd64beba83d9a25db2cb1fcf5ce60985558c8.png?mw=700" alt="3.png" /></a></p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/ktmouk/hackaru-desktop/blob/master/README.ja.md">インストールはGitHubからできます。</a> Windows、Mac、Linuxで使えます。</p> <h1 id="ご意見、プルリクエスト、Issueもお待ちしております。"><a href="#%E3%81%94%E6%84%8F%E8%A6%8B%E3%80%81%E3%83%97%E3%83%AB%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%80%81Issue%E3%82%82%E3%81%8A%E5%BE%85%E3%81%A1%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82">ご意見、プルリクエスト、Issueもお待ちしております。</a></h1> <p>こんな機能が欲しい、もっと綺麗にコード書けるよ、バグあるよ、などなどご意見やプルリクエストがあれば気軽にご連絡ください。TwitterのDMやGitHubで受付しています。</p> <p>また匿名で投稿したい方は、<a target="_blank" rel="nofollow noopener" href="https://devtalk.jp/">開発会議</a>の<a target="_blank" rel="nofollow noopener" href="https://devtalk.jp/products/71/feedbacks/new">フィードバックページ</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> <h1 id="ちなみに本稿の作成には約6時間かかりました。"><a href="#%E3%81%A1%E3%81%AA%E3%81%BF%E3%81%AB%E6%9C%AC%E7%A8%BF%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%AB%E3%81%AF%E7%B4%846%E6%99%82%E9%96%93%E3%81%8B%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82">ちなみに本稿の作成には約6時間かかりました。</a></h1> <p>実は本稿の作成中も時間を計測していたのですが、6時間かかっているようです。初めてのnoteなので仕方ですが、時間かかりすぎですね。</p> <p><a href="https://crieit.now.sh/upload_images/c1c790f2ee7507c00363064ec7df0c635ce6099820fbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c1c790f2ee7507c00363064ec7df0c635ce6099820fbe.png?mw=700" alt="4.png" /></a></p> <p>慣れている方ならどれくらいで完成させられるものなのでしょうか。気になります。</p> <p>今回はアプリ紹介だけになりましたが、他にもいろいろ書いていく予定ですので、お暇なときに覗いてくれると嬉しいです。それでは。</p> <p>公式サイト: <a target="_blank" rel="nofollow noopener" href="https://www.hackaru.app">https://www.hackaru.app</a></p> ktmouk