Next.jsの環境構築方法

目次

システム要件

システムが次の要件を満たしていることを確認してください。

自動インストール

新しいNext.jsアプリを作成するには、 create-next-app を使用します。
必要な環境が自動的にセットアップされます。プロジェクトを作成するには、 次のコマンドを実行します

npx create-next-app@latest

インストール時に、次のプロンプトが表示されます。

What is your project named? my-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like your code inside a `src/` directory? No / Yes
Would you like to use App Router? (recommended) No / Yes
Would you like to use Turbopack for `next dev`?  No / Yes
Would you like to customize the import alias (`@/*` by default)? No / Yes
What import alias would you like configured? @/*

create-next-app 実行時に表示される質問は、プロジェクトの初期設定を簡単に選択できるようになっています。それぞれの意味は以下の通りです。

  • What is your project named? my-app
    プロジェクトのフォルダ名(アプリ名)を指定します。my-app の部分がディレクトリ名になります。

  • Would you like to use TypeScript? No / Yes
    TypeScript を使うかどうかを選びます。Yes を選ぶと自動的に TypeScript 用の設定ファイル(tsconfig.json など)が作成されます。

  • Would you like to use ESLint? No / Yes
    コードの品質チェックツールである ESLint を導入するかどうかを選びます。Yes を選ぶと、コードの書き方を統一しやすくなります。

  • Would you like to use Tailwind CSS? No / Yes
    CSS フレームワークの Tailwind CSS を導入するかどうかを選びます。Yes にすると、すぐにユーティリティクラスを使ったデザインが可能です。

  • Would you like your code inside a src/ directory? No / Yes アプリのソースコードを src/ ディレクトリ以下にまとめるかどうかを選びます。Yes を選ぶとプロジェクトのルートが整理されやすくなります。

  • Would you like to use App Router? (recommended) No / Yes
    Next.js 13 以降で推奨される App Router を使用するかどうかを選びます。Yes を選ぶと最新の構造(app/ ディレクトリベース)でプロジェクトが作成されます。

  • Would you like to use Turbopack for next dev? No / Yes
    開発サーバー起動時に新しいビルドシステム Turbopack を使うかどうかを選びます。Turbopack は従来より高速ですが、まだ実験的機能です。

  • Would you like to customize the import alias (@/* by default)? No / Yes
    @/ を使ったインポートのエイリアスを変更するかどうかを選びます。Yes にすると、自分の好みのパスエイリアスを設定できます。

  • What import alias would you like configured? @/
    インポートに使うエイリアスを指定します。デフォルトは @/ です。例えば ~/src/ なども指定可能です。


手動インストール

Next.jsアプリを手動で作成するには、下記の必要なパッケージをインストールします。

npm install next@latest react@latest react-dom@latest

次に、以下のスクリプトをpackage.jsonファイルに追加します。

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  }
}

これらのスクリプトは、アプリケーション開発の異なる段階を指します。

  • next dev:開発サーバーを起動
  • next build:本番用にアプリケーションをビルド
  • next start:本番サーバーを起動
  • next lint:ESLintを実行

appディレクトリを作成する

Next.jsはファイルシステムルーティングを使用しており、アプリケーションのルートはファイルの構造によって決定されます。

appフォルダを作成します。次に、app内にlayout.tsxファイルを作成します。このファイルはルートレイアウトです。これは必須であり、<html><body>タグを含める必要があります。

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  )
}

初期コンテンツを含むホームページapp/page.tsxを作成します。

export default function Page() {
  return <h1>Hello, Next.js!</h1>
}

ユーザーがアプリケーションのルート(/)にアクセスすると、layout.tsxpage.tsxの両方がレンダリングされます。

publicフォルダを作成する(オプション)

プロジェクトのルートにpublicフォルダを作成して、画像やフォントなどの静的アセットを保存します。public内のファイルは、ベースURL(/)から始まるコードから参照できます。

これらのアセットはルートパス(/)を使用して参照できます。例えば、public/profile.png/profile.pngとして参照できます。

import Image from 'next/image'
 
export default function Page() {
  return <Image src="/profile.png" alt="Profile" width={100} height={100} />
}

開発サーバーの起動

  1. npm run devを実行して開発サーバーを起動します。
  2. http://localhost:3000にアクセスしてアプリケーションを表示します。
  3. app/page.tsxファイルを編集して保存すると、ブラウザで更新された結果が表示されます。

Unityで車両物理を実装する #2 – 入力とステアリング制御

はじめに

前回は Unity プロジェクトの準備と、モジュール分割による基本構造を紹介しました。
今回はその続きとして、プレイヤーの入力処理ステアリング制御を実装していきます。


入力処理の抽象化

直接 Input.GetAxis を呼び出しても動きますが、処理が複雑になると管理が大変です。
そこで、入力をまとめて管理する VehicleInput クラスを作ります。

using UnityEngine;

public struct VehicleInputData
{
    public float throttle; // アクセル
    public float brake;    // ブレーキ
    public float steer;    // ステアリング
}

public class VehicleInput : MonoBehaviour
{
    public VehicleInputData Capture()
    {
        VehicleInputData data;
        data.throttle = Mathf.Clamp01(Input.GetAxis("Vertical"));
        data.brake    = Input.GetKey(KeyCode.Space) ? 1f : 0f;
        data.steer    = Input.GetAxis("Horizontal");
        return data;
    }
}
  • アクセル・ブレーキ・ハンドルの入力を一つの構造体にまとめています。
  • CarController から呼び出して使えるようにします。

3. ステアリングモジュール

ステアリングモジュール

次に、入力データをもとに WheelCollider にステア角を適用する SteeringModule を作ります。

using UnityEngine;

public class SteeringModule : MonoBehaviour, ICarModule
{
    float maxSteerAngle;
    AnimationCurve steerVsSpeed;
    Rigidbody rb;

    public void Configure(VehicleConfig cfg)
    {
        maxSteerAngle = cfg.maxSteerAngle;
        steerVsSpeed  = cfg.steerVsSpeed;
        rb = GetComponent<Rigidbody>();
    }

    public void Tick(ref VehicleInputData input, in VehicleState state, ref WheelCommands cmd)
    {
        float speed = rb.velocity.magnitude;
        float steerLimit = steerVsSpeed.Evaluate(speed);

        float steerAngle = maxSteerAngle * steerLimit * input.steer;

        // 前輪にステア角を適用
        cmd.steerFL = steerAngle;
        cmd.steerFR = steerAngle;
    }
}

ポイント

  • maxSteerAngle:低速時の最大舵角(例:30度)
  • steerVsSpeed:速度ごとにステアリングを制御するカーブ
    • 低速 → 大きく切れる
    • 高速 → 少ししか切れない
  • 実車っぽい挙動を実現するために重要な部分です。

4. CarControllerとの連携

CarControllerとの連携

CarController で入力を取得し、ステアリングモジュールに渡します。

public class CarController : MonoBehaviour
{
    VehicleInput inputModule;
    SteeringModule steering;

    void Awake()
    {
        inputModule = GetComponent<VehicleInput>();
        steering    = GetComponent<SteeringModule>();
    }

    void FixedUpdate()
    {
        var input = inputModule.Capture();

        VehicleState state = new VehicleState(); // 今後拡張予定
        WheelCommands cmd = new WheelCommands();

        steering.Tick(ref input, in state, ref cmd);

        // WheelCollider へ反映(仮)
        // 実際には WheelManager などを通じて cmd の値を適用
    }
}

5. 実際の動作

実際の動作

  • Unity の Game ビューで再生し、矢印キーでハンドル操作、Spaceキーでブレーキを確認します。
  • steerVsSpeed のカーブを設定すると、低速では大きく曲がり、高速では自然に曲がるようになります。

5. 実際の動作

実際の動作

  • Unity の Game ビューで再生し、矢印キーでハンドル操作、Spaceキーでブレーキを確認します。
  • steerVsSpeed のカーブを設定すると、低速では大きく曲がり、高速では自然に曲がるようになります。

Unityで車両物理を実装する #1 – プロジェクト準備と基本構造

はじめに

Unity には WheelCollider という車両物理を扱うためのコンポーネントが用意されています。しかし、そのまま使うだけでは「走る」ことはできても、思った通りの挙動にならなかったり、調整が難しかったりします。

そこでこの連載では、ECU(車載コンピュータ)風にモジュールを分割した設計で、車両物理を Unity 上に実装していきます。最初は最低限の走行ができるところから始めて、ステアリング、サスペンション、ブレーキ、ギア比、UI と段階的に拡張していく予定です。


この連載で目指すこと

  • 実車に近い挙動の再現
    横転しない、スピードに応じて自然に曲がる、路面に追従するようなサスペンション挙動を表現します。

  • モジュール化された設計
    車両制御を「入力」「ステアリング」「駆動」「ブレーキ」「サスペンション」といったモジュールに分割し、管理しやすい構成を目指します。

  • 実験しやすい環境
    パラメータを ScriptableObject で管理し、車種や挙動の違いをすぐ試せるようにします。


プロジェクトの準備

  • Unity バージョン:2021 LTS 以降を推奨
  • 新規 3D プロジェクトを作成
  • フォルダ構成例:
Assets/
└─ Scripts/
└─ Car/
├─ Controller/
├─ Input/
├─ Modules/
└─ Config/

最低限のシーン構成

  1. 平らな地面(Plane)
  2. 車体オブジェクト(CubeでもOK)
    • Rigidbody 付き
    • WheelCollider を前後4輪に配置
  3. CarController.cs
    • 入力を受け取り、各モジュールに処理を渡す中枢

まとめ

今回は連載の第1回として、プロジェクトの準備と基本構造の方針を紹介しました。次回は実際に「入力とステアリング制御」を実装し、車を動かしていきます。

【釣行記】2025/5/20 午前釣り|ミノー使用

はじめに

2025年5月20日高知県嶺北地域の川へ釣りに行ってきました。
天候や水量の状況、自分の釣りスタイル(ルアー・エサなど)についても簡単に紹介します。


釣行データ

  • 日付:2025年5月20日(火曜日)
  • 場所高知県 嶺北地域
  • 時間帯:朝6時半〜昼11時
  • 天候:晴れ

使用したタックル

  • ロッド:スピニングロッド
  • リールシマノ ミラベル 2500SHG(スピニングリール)
  • ライン:ナイロンライン 6ポンド
  • ルアー/エサ:ミノー

釣果

  • 釣れた魚種とサイズ
    • アマゴ ×3

感想・気づいたこと

釣行中はチェイスが多く見られましたが、反応してきたのは小さなアマゴが中心でした。
サイズアップを狙うには、ポイントの見極めやアプローチの工夫が必要だと感じました。


次回へのメモ

まだ行ったことのないポイントにも足を運び、より反応のあるアマゴのポイントを探したいと思います。

【釣行記】2025/5/8 朝釣り|ミノー&スプーン使用

はじめに

今回は2025年5月8日に、高知県嶺北地域の川へ釣りに行ってきました。
天候や水量の状況、自分の釣りスタイル(ルアー・エサなど)についても簡単に紹介します。


釣行データ

  • 日付:2025年5月8日(木曜日)
  • 場所高知県 嶺北地域
  • 時間帯:朝6時半〜昼11時
  • 天候:晴れ

使用したタックル

  • ロッド:スピニングロッド
  • リールシマノ ミラベル 2500SHG(スピニングリール)
  • ライン:ナイロンライン 6ポンド(号数・種類)
  • ルアー/エサ:ミノー、スプーン

釣果

  • 釣れた魚種とサイズ
    • ニゴイ ×2

感想・気づいたこと

アマゴの反応がなかったため、もっと積極的にポイントを移動して反応のある場所を探すべきだったと感じました。


次回へのメモ

まだ行ったことのないポイントを試し、魚の反応を確認してみる。

教習2日目。少し進歩、少し課題

教習前の気持ち

前回の教習から3日空いていたので、半クラッチなどの感覚がちゃんと残っているか不安でした。


実際にやった内容

  • 急制動
  • 教官について検定コースを走行し、ルートを覚える練習

感想・気づき・学び

急制動では、今回は余裕をもって止まることができました。
次回は、停止までの操作にも落ち着きを持てるよう意識したいです。

一本橋は、まだバランスに不安があり余裕をもって渡りきれませんでした。
引き続き繰り返し練習して、少しずつ慣れていきたいと思います。


次回に向けての目標・まとめ

卒業検定のルートがまだしっかり覚えられていないので、次回までに2つあるうちの1つは確実に覚えておきたいです。

二輪免許教習 1日目

教習所に行くまでの気持ち

今日から約7年ぶりに教習所へ通い始めました。
初めてのMT(マニュアル)の二輪ということもあり、正直かなり緊張していました。


実際にやった内容

  • ハンドルの機能説明
  • ハンドル操作の練習
  • 坂道発進
  • S字・クランク走行 など

今日の感想・印象に残ったこと

教官が丁寧に教えてくれて、思っていたよりも楽しく教習を受けることができました。
最初はエンストの連発でしたが、少しずつ感覚がつかめてきて、後半はエンストの回数も減ってきました。

ただ、坂道発進はまだうまくできなかったので、今後の教習でしっかり感覚を掴んでいきたいと思います。


まとめ

次回の教習まで少し日が空くので、1日目で学んだ内容を忘れないようにして、2日目に備えたいと思います。