3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

私の作成したマッスルブログについて

Last updated at Posted at 2025-04-21

この記事について

筋トレ活動を発信するために作ったブログ「マッスルブログ」の制作記録です。
Next.js × Tailwind CSS を使って、Vercelの公式テンプレートをベースにカスタマイズしました。
初心者がポートフォリオとしても使えるブログを作った過程や、GitHub Copilotを活用して開発効率を爆上げした話を紹介します!

作ったもの:マッスルブログ

技術スタックと採用理由

技術 理由
Next.js ページを素早く表示できる(SSR対応),使いやすくてテンプレ豊富
Tailwind CSSを細かく書かずにデザインできる
Vercel デプロイが早い,Next.jsとの相性◎
Markdown 記事投稿を楽にしたかったので採用(テンプレに元からある)
Github Copilot コーディング速度と学習効率を爆上げしてくれるAIペアプロ

Copilotが役に立ったポイント

  • 今回の開発では、GitHub Copilotをがっつり活用しました。
    特に以下の場面で「手が止まらない」感覚を得られたので、紹介しておきます。

1. Tailwindのクラス補完が神

  • Tailwindは自由度が高い分、クラスを毎回思い出すのが地味に手間。
    Copilotが文脈に合わせて適切なクラスを提案してくれるので、ほぼ手入力いらずでした。
<div className="bg-white rounded-xl shadow-md p-4">
  <h2 className="text-xl font-bold mb-2">タイトル</h2>
  <p className="text-gray-600">本文</p>
</div>

2. App Router周りの学習に最適

  • Next.jsのApp Routerは新しくて難しいですが、Copilotの提案がちょうどよいお手本に。コードを参考にしながら仕組みを理解でき、自然とキャッチアップできました。

3. 認証・ミドルウェアの実装支援

  • NextAuth.jsとミドルウェアを使って、管理者ページの保護などを行いましたが、
    Copilotの提案でトークン管理・リダイレクト処理もスムーズに実装できました。
if (!token) {
  return NextResponse.redirect('/admin/login');
}

4. 繰り返し処理やUIコンポーネントの雛形生成

  • 「カードをリスト化する」「テーブルを作る」など、面倒な定型処理を瞬時に提案してくれるので、繰り返し作業に時間を取られず、UI/UX改善に集中できました。

カスタマイズしたポイント

1. デザイン面

  • 部員紹介ページ(プロフィールカード)
    • Instagramリンク付きで、専門種目と自己記録も一目で分かる!
<div className="flex gap-4 items-center mb-4">
  <p className="text-gray-600 dark:text-gray-300">
    <span className="font-bold">専門種目:</span> {member.speciality}
    <Link href={member.instagram} target="_blank" rel="noopener noreferrer"
      className="ml-2 inline-flex items-center text-pink-500 hover:text-pink-600"
    >
      <InstagramIcon /> <span className="ml-1 hidden sm:inline">@{member.instagram.split('/').pop()}</span>
    </Link>
  </p>
</div>
  • イベントカレンダー(日本語対応)
    • イベントがある日に色が付く+詳細がポップアップ表示
    • 次のイベントまでのカウントダウンも!
// カレンダーの日付ごとにイベントを表示
{hasEvents && (
  <div>{event.title}</div>
)}
  • 大会実績ページ
    • 出場選手や順位が一覧表で見やすい
    • 写真は大きくヒーロー風に!
<table>
  <thead>
    <tr><th>選手名</th><th>カテゴリー</th><th>順位</th></tr>
  </thead>
  <tbody>{/* 結果を表示 */}</tbody>
</table>

2. 管理機能の追加

  • NextAuth.js による認証システム
    • 管理者しか見れないページを設定
    • トークン(JWT)でログイン管理
if (!token) {
  return NextResponse.redirect('/admin/login');
}
  • 簡易データベース(ローカルストレージ利用)
    • 本格DBがまだいらない段階での軽量設計
    • 新しい部員の追加や削除も可能!
localStorage.setItem("members", JSON.stringify(updatedMembers));

3. UI/UX改善

  • ダークモード切り替え(システム連動 or 手動選択)
  • SNSシェア機能(Twitter/Facebook/LINEボタン)
  • レスポンシブ対応(スマホでもPCでも見やすい)

4. コンテンツ管理

  • マークダウンベースでブログ管理
    • タイトル・タグ・日付などの「メタ情報」も記述可能
  • タグ表示・フィルター機能もあり!
  • イベント管理:表示・参加者管理・カウントダウン付き!

苦労したポイント・学び

苦労したところ

  • ReactとNext.jsのバージョンの相性問題(RC版は注意)
  • NextAuth.jsでの認証の設計(セッションの扱い)
  • ローカルDB→本格DB移行を検討中
  • Git操作(ブランチ統合・競合解決)に苦戦
  • .env.localの管理(開発/本番の分け方)

学びになったこと

  • Next.js App RouterやServer Componentsの使い方
  • JWT認証の流れ、ミドルウェアでのページ保護
  • 再利用できるUIコンポーネント設計
  • 無料サービス(Vercel, MongoDB, Cloudinaryなど)の活用
  • CRUD機能と非同期処理の基本
  • Tailwindでのレスポンシブなデザイン
  • 実際の開発フローの体験(要件定義〜公開まで)  

💡 今後の改善アイデア

  • 認証機能の強化(ロール・外部ログイン対応)
  • イベント機能の拡張(申込み・通知・Meet連携)
  • コミュニティ機能(コメント・掲示板)
  • データ分析機能(トレ記録・成長チャート・PDF出力)

最後に

Vercelのテンプレを活用すれば、初心者でもポートフォリオとして十分通用するブログが作れます。さらにGitHub Copilotを活用することで、実装スピードも学習効率も格段にアップしました!筋トレ × Web開発のように、「好きなこと × 技術」=最高のモチベになるので、興味ある方はぜひチャレンジしてみてください!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?