はじめに
概要
fwywd(フュード) ではプロとして働く実力を養うことができる
採用試験 を
無料で公開しています。
リリースから3週間ほど経ち、早速1次試験をクリアして応募してくださる方が嬉しいことに出てきました。
応募いただいた方には
fwywd(フュード) チームから良い点や更に改善できる点のヒントをまとめたフィードバックを個別にお送りしています。
今回はそのフィードバックを通して見えてきた
Web サイトをリリースする前に必ず確認したいチェックリストを紹介します。
React / Next.js / Tailwind CSS を使って Web サイトや Web アプリケーションを作っていきたいという方に参考になると幸いです。
fwywd の採用1次試験
まずはじめに fwywd(フュード) で公開している採用の1次試験の内容を簡単に紹介します。
React / Next.js / Tailwind CSS を使って、準備されたデザインで1ページの自己紹介サイトを作っていただきます。
フロントエンド実装に慣れている人には簡単ですが、日頃はバックエンドを中心に書いている人にとっては Tailwind CSS を含めた CSS の書き方の勉強が必要となります。
また、HTML / CSS のフロントエンド実装に慣れている人には React / Next.js を学んでいただく必要があります。
問題設定こそ簡単ですが、どのような役割の人にとっても学びのハードルが少しある良い問題となっています。
2次試験以降はフロントエンドも含めたバックエンド実装を課している中で、わざわざフロントエンドの実装も習得していただきたい理由があります。
新規事業の Web アプリケーションを作り込む際は日々の機能追加に耐える能力が必要であり、フロントエンドからバックエンドまで、どのパートも対応できる幅広い力がある方が圧倒的に有利です。
そのため、
fwywd(フュード) のチームで働く初期のエンジニアには、フロントエンドからバックエンドまですべて対応できるようになって欲しいと考えています。
今回はこの一見簡単そうに見える1ページの Web サイトでも、プロとして意識して臨むとどのような点まで配慮しておくと良いのかを紹介します。
レベル1:表示系
ここは基本的なことであり、見た目で判断可能なことばかりです。
Tailwind CSS でよく使うクラスの一例も併せて紹介します。
fwywd(フュード)の1次試験ではレベル1がクリアできていれば合格できるはずです。
内容の確認
- ユーザーが読みたいと思える内容になっているか推敲
- 1次試験の自己紹介サイトの場合はみなさんのプロフィール情報に編集しましょう
- 自己アピールをうまく書いておければポートフォリオとして活躍します
表示崩れの確認
- Google Chrome の Developer Tools で PC 版やスマホ版の解像度で確認
- Google Chrome, Firefox, Safari, Edge と各ブラウザで確認
文字のフォントや間隔の調整
- 文字の大きさ:
text-sm
など
- 文字の太さ:
font-bold
など
- 文字の色:
text-white
など
- 文字の間隔:
tracking-wider
など
- 文章の間隔:
leading-5
など
- ホバー時:
hover:opacity-75
など
CSS
_app.tsx
の global.css
に Tailwind CSS 周りを設定
- Tailwind CSS を中心に書き、不要な CSS Modules を生み出していないか
- 不要なグローバルの CSS はつくらない
style.module.css
のようにモジュールとして読み込む
- できれば
sass
をインストールして SCSS を使用
tailwind.config.js
の設定を使っているか
- 余白:
py-2
, mx-1
など
- レイアウト:
flex
と grid
の使い分けなど
- グリッド間の線:
divide-x
など
- 縦横の位置:
flex
+ justify-center
や items-center
など
- レスポンシブ対応
- 画面に合わせた横幅の指定:
max-w-xs sm:max-w-sm lg: max-w-lg
など
- 横方向のマージン:
mx-auto
など
- 順番の変更:
order-2
など
- Tailwind CSS の JIT 対応:
w-[800px]
, bg-[#59d3d4]
など
画像
width
と height
を指定して縦横に変な歪みがないか
alt
を指定して画像非表示にも対応
- アイコン
- 解説用は Skitch などで手順を見やすく加工できていると良い
レベル2:SEO 系
それでは、及第点としての合格の先にあるチェックリストを確認していきましょう。
クオリティの高い合格を目指す人はレベル2以降も挑戦してみましょう。
- Next.js での設定:
Head
- 基本的な設定:
_document.tsx
- 可変な設定:
PageHead
などを作り、引数にデフォルトの値を必ず指定
- ファビコン
favicon.ico
を設定
- 画像やファビコンは
${domain}/ogp.png
や ${domain}/favicon.ico
などわかりやすいと親切かつディレクトリ構造が判別されにくい
OGP 画像
- 画像サイズ:1200px x 630px
- 文字の 20% ルールはなくなったが、なるべく文字は小さい方が統計的に良い
- freepick などでベースとなる画像を探すと良い
- Facebook
- Facebook OGP Debugger で確認
- Twitter
- Twitter Card Validator で確認
- Twitter は画像が相対パスでは取得されないため注意(絶対パスを使用)
シェアボタン
- 各ページに対応するリンクが表示されるか確認
- シェア時の初期の文言やハッシュタグを設置しておく
- 日本語や記号は
encodeURIComponent
で文字をエンコード
- SVG はコードの見た目が複雑になりがちなため、コンポーネント化推奨
- ボタンはなるべく自作せずに公式ページ参照:例. はてぶ参照
- 各デバイスごとにシェアしやすい位置にボタンを配置
サイトマップ
- クローラーから効率的な検索のために設置
- 購読されやすいように RSS フィードを設置
- Google Search Console に
sitemap.xml
と feed.yaml
, atom.yaml
を設定しておく
レベル3:パフォーマンス系
デプロイ前は Google Chrome の Developer Tools にある Lighthouse で確認します。
デプロイ後は Contents Delivery Network (CDN) へのキャッシュも考慮したパフォーマンス測定ができるため、PageSpeed Insights を使うと良いでしょう。
この場合、キャッシュを考慮して計測は2回行いましょう。
画像
next/image
による最適化
- 以下のような処理が自動化される
- 解像度が無駄に大きすぎる画像は適切なサイズに加工
- 画像の圧縮
- WebP などの形式も検討
- デバイスの解像度に合わせて出し分ける
- 非同期で取得され初期画面の表示を邪魔しない
- ビューポートに入ったタイミングでの遅延読み込み
next/image
での確認事項
- レスポンシブ対応の場合に
config
に指定
- 外部ドメインを使用する場合
config
に指定
- 画像が粗い場合は
quality
を指定
- 背景画像に使用する場合は
objectFit
を指定
- ロゴなど初期表示から欲しい場合は
loading
を eager
に指定
リンク
CSS
duration
でアニメーションの時間を調整する
@headlessui/react
で動作付きの実装にも挑戦する
- Tailwind CSS を使用する場合は本番環境で Purge CSS を有効にする
- 不要なクラス名の増加を抑えるためになるべく Tailwind CSS を利用
- グローバルに CSS を読み込まず、CSS Modules を使う
- 読み込んで使用しているクラスを意識して必要な分だけ実装
パッケージ
dependencies
と devDependencies
を区別する
- 開発
dev
時にのみ必要な場合は yarn add --dev ***
と --dev
オプションをつける
- 不要なパッケージの読み込みの除去
- 手動で探すのは困難であるため VSCode などエディタの力を必ず借りる
chunk
が大きい場合は非同期での読み込みなど検討
動作
memo
や callback
を使って、不要な親要素のレンダリングを防ぐ
- スムーズなスクロールなどユーザーとしての使いやすさを意識
- 検索機能を付けて記事の探しやすさを向上
- Google Analytics や Tags を導入
レベル4:プロジェクト管理系
Git
- 最新の Git にバージョンを上げる
- Visual Studiuo Code の Source Tree で GUI 管理
.gitignore
で不要なファイル形式のコミットを避ける
- Next.js のプロジェクト作成時に標準で作成される
- gitignore.io で Windows, macOS, Linux の OS 環境向けも追加しておきたい
GitHub
- GitHub とは SSH で通信するように設定
- なるべく HTTPS は使わない(毎度手間がかかるためパスワード認証を避ける)
- 開発を始める前に Project を作る
- ToDo リストを書き出す
- 着手するときに Issue に変換する
- Pull Request で
fix
を使い、イシュー番号と紐付けることでマージして閉じる
- 小規模な場合はブランチモデルとして GitHub Flow を採用する
- 不要なブランチはマージ後に削除し、ローカルも定期的に削除
README.md
に必要な情報を記載
package.json
もプロジェクト名などを変更しておくと良い
静的検証ツール
- ESLint と Pretier、必要に応じて Stylelint を導入(超推奨)
- Visual Studio Code の拡張機能もインストール
- 保存と同時に ESLint が適用されるように設定
- JavaScript はシングルクォーテーションに統一
- セミコロンを最後につける
- インデントは 2
- husky で pre-commit 時の確認
- ESLint のフォーマット確認を最低限入れておき、従っていないコードはコミットさせない
- テスト駆動開発時にはテストの通過も pre-commit で必須とする
レベル5:実装系
命名規則
- コンポーネントはファイル名含めてパスカルケース:
PageHeader.jsx
- 変数や関数名はキャメルケース:
searchClient.js
環境変数
.env
ファイルに格納して必要に応じて .gitignore
の対象にする
ディレクトリ
TypeScript
- JavaScript に慣れてきたころに TypeScript へ移行を推奨
- Visual Studio Code や ESLint との相性が良い
- サーバーでの動作前にコード上の問題が発見できる
- 1次試験で合格した後に2次試験に入る前に1次試験の内容を TypeScript 化することを推奨
- 2次試験ではバックエンドの内容などに加えて TypeScript も必須になるため、難易度の低いうちに習得しておくと良い
おわりに
たかが Web サイト、されど Web サイト
Web サイトは昔から存在し、HTML と CSS を書いて FTP (File Transfer Protocol) でサーバーにアップロードするといった時代もありました。
今でも構造上の仕組みが変わっていないのですが、その手順が大幅に変わっており、当時よりも学習コストはかなり増えています。
その一方で、多彩な動作を表現できたり、読み込み速度といったパフォーマンスの良い Web サイトを作ることができるようになっています。
カスタマイズ性と学習コストのトレードオフは常に存在しています。
今回はたかが Web サイト1ページの構築でしたが、新しい技術の React / Next.js / Tailwind CSS を使うと、これだけ確認しておきたいことがありました。
最初からすべて覚えておく必要はありませんので、レベル別に覚えていきましょう。
React や Next.js に関わる方の知見になっておりましたら幸いです。
今回も長文をお読みいただきまして、誠にありがとうございました。