10月28日追記
Gatsbyブログについて、初noteを書きました。
【完全版】爆速GatsbyでWordPressちっくなブログを作る全手順
こんにちは、筋肉めがねです。
前回の記事「筋肉めがね」という事業の2020年2月の実績振り返りと3月の目標(PL含む)にて、「30Daysトライアル1st」を終わらせる、という目標を3月の目標の1つとして立てました。
そして、昨日、30Daysトライアルの一貫で、日本語でのポートフォリオサイトをGatsbyを使ってたちあげましたので、立ち上げた報告としてツイートしました。
Day 11-21 of #100DaysOfCode @Tokyo_FreeIanceさんの30daysトライアル1st、「DAY18~20. ポートフォリオサイトを作る」にて、ポートフォリオ作成完了。テンプレは、Gatsby starter kitの1つ。webは作るたびに学びがあるから面白いね。#Gatsby#Netlify#デイトラ pic.twitter.com/e5uk0VTjNM
— 筋肉めがね@Gatsbyブログ (@KinnikuMeganeDe) March 13, 2020
本日は、ポートフォリオ立ち上げのプロセス・および幾つかの学んだ点をシェアさせていただきます。
まず、成果物はこちらでございます。
それでは、本日は以下の内容を書いていきます。
先月、英語でのポートフォリオサイトを立ち上げ、その時のプロセスを以下の記事に書きました。基本的には、今回作った日本語のポートフォリオも同じプロセスを経ておりますので、簡潔にポイントを書いていきます。
【保存版】Gatsbyで英語のポートフォリオサイトを0から立ち上げるまでの全行程。(2020年2月11日時点)
ポートフォリオに載せるべき項目を選定する際に参考にさせて頂いたサイトはこちらです。
【30日】未経験からコーディングの副業で月5万を稼ぐためのステップ
ポートフォリオサイトを作る目的は、web制作会社へ営業するためのツールとして使うこと、その目的を果たすために必要な項目として以下を選定しました。
いつも通り、Gatsby starter kitからポートフォリオとして使いやすいテンプレートを選びました。
webreelanceという言葉を使いたかったこと、そして、英語のポートフォリオとは別にしたかったため、webreelancejp.comとしました。
以下の手順を1つ1つ進めていきました。
プロセスの詳細は、以下の記事に書かれております。
【保存版】Gatsbyで英語のポートフォリオサイトを0から立ち上げるまでの全行程。(2020年2月11日時点)
ほぼほぼテンプレートを踏襲しておりますので、基本的な構成にはあまり時間がかかりませんでしたが、幾つかハマったポイントがありましたので、次のセクションで共有させていただきます。
今回のサイト作りで特に学びのあった以下の3点について、書いていきます。
1つ1つ振り返っていきます。
コードエディターにはVisual Studio Codeを使用しておりますが、コードを書く上で、Emmetのショートカットはとても役立ちますよね。ただ、Gatsbyでは、jsxファイルを使用しており、デフォルトでは、Emmetはjsxファイル内でショートカットが使えない仕様となっております。そこで、jsxファイル内でもショートカットが使えるよう設定をしました。
Visual Studio Codeを開き、Code/Preferences/Settingsを開きます。
settings.jsonを開き、以下の情報を追加する。
{
...
"emmet.includeLanguages":{
"javascript": "javascriptreact"
}
}
最後に、Visual Studio Codeを再起動すれば、設定が反映されております。
例えば、jsxファイル内のhtmlセクションにて、div.col-md-4と書いてタブを叩けば、以下のセットを出力してくれるので、とても便利です。
<div className="col-md-4"></div>
設定にあたり、以下の動画を参考にさせていただきました。
Enable Emmet for React.js JSX in VSCode
ポートフォリオを作る上で、フリーの画像素材が必要になる時がありますよね。30Daysトライアルでも紹介されているo-danは僕自身もとても良く使います。
ただ、中には画像の容量が大きいため、そのままサイトに使ってしまうと、サイトの読み込みが遅くなってしまうことがあるので気をつけなければなりません。
今回の日本語ポートフォリオを作った際にも、画像の読み込みがとても遅く、画面のスクロールが正常に機能しなかったので、chrome検証ツールで確認したところ、lighthouseで問題が確認されました。
そこで、lighthouseにて、紹介されているsharp packageを使用して、画像の容量を小さくします。
componentsフォルダー直下にresize.jsを作成し、その中に以下のコードを書きます。
const sharp = require('sharp');
const fs = require('fs');
const directory = '../assets/images'; //容量を変更した画像が格納されているパスです。
fs.readdirSync(directory).forEach(file => {
sharp(`${directory}/${file}`)
.resize(870, 522) // width, heightを必要に応じて変更しますが、870, 522で見栄えの良い、それでいて容量の低い画像が作成されます。(数10kB)
.toFile(`${directory}/${file}-small.jpg`);
});
そして、このjavascriptファイルを実行してあげれば、容量の小さくなった画像が生成されます。
Terminalでsrc/components直下へ移動し、
node resize.js
これで、オッケーです。
最後です。Netlifyを使ってのContact formの設定方法は、以下の記事でも書きましたが、使用するGatsbyのテンプレートによって、必要な設定が異なってきます。ということで、今回使用しているgatsby-starter-fortyのケースを書いていきます。
【保存版】WordPressをGatsby+Contentfulに移行する全工程(2020年2月24日時点)
テンプレートには既にContact formが存在しますが、それだけでは動きません。
大事なことは以下の2点です。
import React from 'react'
const Contact = (props) => (
<section id="contact">
<div className="inner">
<header className="major">
<h2>お問い合わせ</h2>
</header>
<div className="grid-wrapper">
<div className="col-12">
<form name="contact" method="post" data-netlify="true" data-netlify-honeypot="bot-field"> //この行を編集しました。
<input type="hidden" name="form-name" value="contact" /> //この行を追加しました。
<div className="field half first">
<label htmlFor="name">Name</label>
<input type="text" name="name" id="name" />
</div>
<div className="field half">
<label htmlFor="email">Email</label>
<input type="text" name="email" id="email" />
</div>
<div className="field">
<label htmlFor="message">Message</label>
<textarea name="message" id="message" rows="6"></textarea>
</div>
<ul className="actions">
<li><input type="submit" value="Send Message" className="special" /></li>
<li><input type="reset" value="Clear" /></li>
</ul>
</form>
</div>
</div>
</div>
</section>
)
export default Contact
これで、contact formが正常に動くようになりました。メールを受信したら、Netlifyのページで確認できます。Contact formから受信したメールを特定のアドレスへ送信する場合には、Netlifyで設定を行います。
まずは、Netlify上のSettings/Settings/Formsにて、Notificationの設定を行います。
設定が終われば、メールが指定されたアドレスへ転送されるようになります。
いかがでしたでしょうか。ようやく日本語でのポートフォリオができました。このポートフォリオをツールとして利用し、営業をはじめていきたいと考えております。
この記事では大きく以下2点について書きました。
それでは、本日は以上です。