ブログを作成したので技術スタックと導入フローを話します
この度、ブログを開設することになりました。 初投稿の今回は、このブログの技術スタックと導入フローについて解説していきます。
ブログを作るモチベーション
私は、大学時代に機械学習関連の研究室に所属していました。そのため、Pythonでデータ分析やAIモデルの開発に関しての知見はありましたが、そのほかのWeb周りの開発経験はよくわかっていませんでした。大学院1年まではHTML、CSSすらロクに書いたことが無かったほどです。
ただ、何か作りたいとは思っていて、HTMLとCSSオンリーで自己紹介サイトを作ってみたりReactを入門してみたりしていましたが、結局作りたいアプリが思い浮かばず放置していました。そんな時に「技術ブログがとっつきやすい」と知人から聞きました。確かに技術ブログは求められる機能要件がそこまで多くなく、(記事次第では)他開発者と競合しにくいと感じたので作ってみることにしました。
先述の通り最近までフロントエンドで何か作ったの経験があまりない身であり、今後のキャリアがそれになる可能性も低いと考えていたため、、インプット含めて一ヶ月程度でさっくり作ってしまおうという意気込みで作りました。
開発環境
- MacBook Air (M1)
- Visual Studio Code
- Google Chrome
使用した技術・ツール
フロントエンド
Next.js
Reactをベースにして作られた、フロントエンドフレームワークです。SG(Static Generation)によって高速なブログサイトの構築ができます。当初は、静的サイトジェネレータのHugoを用いて作ることを検討していましたが、Next.jsでも比較的簡単に自作が可能であることを知りました。半年前くらいにReactのUdemy講座を受けていたこと、今後も軽くアプリを作る可能性があることから学習のついでに採用しました。
TailwindCSS
CSSフレームワークです。HTMLタグにプロパティを並べることで簡単にスタイルを当てられます。元々、CSSには苦手意識があり何かしらのフレームワークを使いたいとは思っていました。そんな中、いくつかTailwindCSSが良いというタレコミを聞いていたため、学習のついでに採用して見ることにしました。
Vercel
Next.jsを作成した会社と同じ会社が作っている、デプロイ環境です。Next.jsとは特に相性が良く、簡単にデプロイできること、無料であることから採用しました。ただし、Hobbyプランでは収益化が不可となっているようです。
その他
Route53
ブログのドメイン名を独自ドメインにするために使いました。
Markdown
ブログ本文の執筆のため採用しました。
Figma
ブログの画面設計のため採用しました。
導入フロー
1. 技術のインプット
まず、ブログ作成時はNext.jsの知識はないためインプットする必要がありました。今まで、0を1にするときにはUdemyを使ってきたので今回もそうのようにしました。受講した講座はNext.jsでブログを作成するという非常にマッチしたものでした。その後、TailwindCSSに関するインプットもUdemyで行いました。受けた講座に関しては、参考文献としてページ下部に掲載しておきます。
2. 画面設計
ブログ作成にあたり、Figmaを用いたデザイン設計をしました。シンプルで見やすいサイトの設計をこころがけました。
3. 開発
設計完了後に、プログラム作成に取り掛かりました。Next.js固有の部分はインプットで作成したコードと大きな変更はありませんでしたが、マークダウンのサニタイズだけは実装しました。設計された画面通りになるようにHTMLとTailwindCSSの実装に多くの時間を割きました。
実装した所感
良かったこと
実装する機能を最小限にした
技術ブログにも様々機能があります。例えば以下のようなものです。
- ページング機能
- タグによる分類機能
- 単語検索機能
しかし、これらの機能は基本的に記事が充実してからでないと機能しません。先述したとおりフロントエンドエンジニアになる可能性が低いこと、デプロイすることが第一目的であることから、必要な機能を最小限に絞って開発しました。結果的に、初めてだらけの技術でデプロイまでこじつけたと思います。
TailwindCSSを使用した
TailwindCSSには好き嫌いがあるようですが、個人的にはこれのおかげでスタイルの適用が簡単になったと思っています。特に、レスポンシブデザインの設計はかなり楽になりました。学習コストがあったことは否定しませんがそれでも利用価値はあったと思います。
コーディングの前にFigmaで画面設計をした。
今までは、思いついたらとりあえずコードに移すことが癖でしたが、フロントエンド初心者であることから一度画面設計することにしました。そこでFigmaを知ったのですが、MacやiPhone等の画面に沿って設計ができるため、非常に便利でした。実装後もフォントサイズやカラーコードを見ながら実装できたのでとてもスムーズでした。
改善点
もちろん、初めてということもあり改善点はあると思います。今回は、記事が充実していないと意味をなさない機能は削りましたが、それ以外にも実装を省いた点はあります。
- TypeScriptへの移行
- 単体テストの作成
- GitHub Actionによる自動デプロイ
これらはフロントエンド開発を続けていく上で、必ず必要になってくると思うので、早めに実装したいと思います。
それとは別に収益化の観点も課題です。Vercelのhobbyプランは商用利用が不可であり、広告やアフィリエイトの掲載ができません。現時点で収益化する必要性はないと考えていますが、できるに越したことはないので他のデプロイ先も検討してみます。Firebase HostingやS3 + CloudFrontなどが視野に入ります。
今回は以上です。想像よりも簡単に実装できたので、みなさんも作ってみてはいかがでしょうか。
参考
- 公式ドキュメント
- Next.js (https://nextjs.org/docs/)
- TailwindCSS (https://tailwindcss.com/docs/)
- Vercelの料金利用形態(https://vercel.com/docs/concepts/limits/fair-use-policy#commercial-usage)
- Udemy
- 【Next.js入門】ReactフレームワークのNext.jsでマイクロブログを構築しながら基礎と本質を学ぶ講座(https://www.udemy.com/course/nextjs-microblog-for-beginner/)
- たまたまUdemyで見かけて購入しました。Next.jsのチュートリアルをベースに作成された講座ですが、動画ベースの方が自分とマッチしており、非常に役に立ちました。結果的にブログを立ち上げるきっかけになった教材です。ただし、こちらの講座で使用しているNext.jsが若干古いバージョンであるため要注意です。
- 【Tailwincss3.0】利用者急増中!作って学ぶ爆速で理解したい人向けのTailwindcss完全入門パック(https://www.udemy.com/course/tailwindcss-for-beginner/)
- TailwindCSSを習得するために利用しました。
- Webサイト
- TailwindCSS Cheat Sheet (https://nerdcave.com/tailwind-cheat-sheet)
- TailwindCSSのプロパティのチートシートです。これとVSCodeの補完があったからこそ素早くCSSの実装ができたと思っています。
- VercelでホスティングしているサイトにRoute53で取得したドメインをサブドメインとして設定する
- (https://dev.classmethod.jp/articles/vercel-custom-domain-route53/
- ブログのドメインを独自ドメインにする際に参考にしました。
- Zenn
- エンジニアなら自分でブログを作れ!①導入編 (https://zenn.dev/miketako3/articles/9b2b1a9ec13901)
- 自分がブログを作成するモチベーションとなった記事です。
- Next.js を S3 + CloudFront にデプロイする(https://zenn.dev/hamo/articles/0a96c4d27097bd
- 当初はS3 + CloudFrontの構成を考えていました。結果的には、Vercelを利用しましたが、参考にしたのは間違いないので、掲載させていただきます。
- Vercel の料金形態と内容についてまとめた - 2020冬 (https://zenn.dev/lollipop_onl/articles/eoz-vercel-pricing-2020)
- Vercelでの商用利用について参考になりました。
- 静的サイトジェネレーターとは?(https://www.cloudflare.com/ja-jp/learning/performance/static-site-generator/)
- こちらで、Next.jsが静的サイトジェネレータとして機能することを知りました。