Laravel : 入力のバリデーション

Laravel : 入力のバリデーション

POST メソッドの実装と入力のバリデーションについて

環境

  • macOS Big Sur
    • 11.6.5
  • Docker
    • 20.10.12
  • Laravel
    • 9.21.5
  • PHP
    • 8.1.8
  • Composer
    • 2.3.10
  • MySQL
    • 8.0.29

参考

概要

以下についてまとめる.

  • POST メソッド
  • バリデーション
  • Route に名前をつける

実装

バリデーションクラスの作成

バリデーション用の FormRequest クラスの作成.

$ sail artisan make:request HogeDir/HogeRequest

app/Http/Requests/HogeDir/HogeRequest.php が作成される.

誰でもリクエストできるようにする場合は authorize メソッドの戻り値を true にする.

public function authorize()
{
    return true;
}

バリデーションルールの設定

バリデーションのルールを設定する.

以下は設定例.

  • 入力が必須(required)
  • 140文字制限(max:140)
public function rules()
{
    return [
        'hoge' => 'required|max:140'
    ];
}

バリデーションのルールについてより詳細は以下の公式ドキュメントを参照.
https://laravel.com/docs/9.x/validation#available-validation-rules

バリデーション対象に設定する要素の指定は Blade テンプレートで name="hoge" とした要素がチェック対象となる.

また, Laravel では CSRF(クロスサイトリクエストフォージェリ)対策のため, form の場合 Blade テンプレートに @csrf ディレクティブを付与する.

<form action="{{ route('hoge.create') }}" method="post">
    @csrf
    <textarea id="hoge-content" type="text" name="hoge"></textarea>
    <button type="submit">確定</button>
</form>

Route に名前をつける

Route に名前をつけることでコントローラや Blade テンプレートからパスではなく名前でアクセスできるようになる.

Route::post('/hoge/create', \App\Http\Controllers\Hoge\CreateController::class)->name('hoge.create');

作成した名前は以下のように Blade テンプレートなどからアクセスできる.

<form action="{{ route('hoge.create') }}" method="post">
    @csrf
    <textarea id="hoge-content" type="text" name="hoge"></textarea>
    <button type="submit">確定</button>
</form>

コントローラからアクセスする場合は以下.

    public function __invoke(CreateRequest $request)
    {
        //
        $hoge = new Hoge;
        $hoge->content = $request->hoge();    // データをモデルのメンバに設定
        $hoge->save();                        // DB のテーブルを更新
        return redirect()->route('hoge.index');    // hoge.index にリダイレクト. コントローラでも名前でアクセスができる
    }

エラーメッセージの実装

以下の @error ディレクティブを設定する.
バリデーションエラーがあった場合 {{ $message }} にエラーメッセージが表示される.

<textarea id="hoge-content" type="text" name="hoge"></textarea>
@error('hoge')
<p style="color: red;">{{ $message }}</p>
@enderror

複数項目のバリデーションをまとめる場合は @error に複数の名前を入れる.

@error('hoge', 'fuga')

エラーメッセージを日本語に変更

config/app.php を以下の通り変更

'locale' => 'ja',

... 省略

'fallback_locale' => 'ja',

lang ディレクトリの en ディレクトリをコピーして ja とリネームする.

ja ディレクトリ内の validation.php を日本語向けに編集する.

翻訳済みのバリデーションメッセージを利用する

自分で validation.php ファイルを翻訳するのは大変なので, OSS の翻訳済みバリデーションファイルを流用することも可能.

以下のコマンドでパッケージを入手する

$ sail composer require laravel-lang/lang:~10.3

インストールした ja ディレクトリを lang/ja にコピーする

$ cp -R vendor/laravel-lang/langlocales/ja lang/

これでバリデーションメッセージが日本語化されるが, name が 英語のままとなる.
lang/ja/validation.php の末尾に attributes を定義し name と表示名の対応を追加する.

...省略

    'attributes' => [
        'hoge' => 'ほげ',
    ],
];

画面からデータを取得し DB に保存

以上の実装を踏まえ実際に画面からユーザーが入力した情報を取得し DB に保存する流れを説明する.

RequestForm クラスに取得用メソッドを追加.
form の入力内容は $this->input() で取得できる.

public function hoge(): string
{
    return $this->input('hoge');
}

POST 用のコントローラにデータの取得と DB のテーブル更新処理を追加する

use App\Models\Hoge;

...省略

    public function __invoke(CreateRequest $request)
    {
        //
        $hoge = new Hoge;
        $hoge->content = $request->hoge();    // データをモデルのメンバに設定
        $hoge->save();                        // DB のテーブルを更新
        return redirect()->route('hoge.index');    // hoge.index にリダイレクト. コントローラでも名前でアクセスができる
    }

Laravel : MySQL にテーブル作成

Laravel : MySQL にテーブル作成

Laravel の機能を使用し MySQL データベースにテーブルを作成する方法について.

環境

  • macOS Big Sur
    • 11.6.5
  • Docker
    • 20.10.12
  • Laravel
    • 9.21.5
  • PHP
    • 8.1.8
  • Composer
    • 2.3.10
  • MySQL
    • 8.0.29

参考

概要

本記事の概要

  • データベースの確認
  • テーブルの作成
  • シーディングの生成
  • ORマッパー Eloquent の使用
  • Factory の作成

データベースの確認

Sail 環境で使用する MySQL の確認.

以下のコマンドで MySQL にログイン.

$ sail mysql

ログイン後に以下のコマンドでデータベースの一覧を確認.

show databases;

Laravel プロジェクトと同名のデータベースがある. これがそのプロジェクトで使用するデータベースとなる.

以下のコマンドで MySQL からログアウト.

exit;

テーブルの生成

以下のコマンドでテーブル生成用のマイグレーションファイルを生成する.

$ sail artisan make:migration create_hoges_table

hoges がテーブル名になる模様.
テーブル名は Artisan の他機能との連携を考慮すると 複数形にしたほうが無難そう.

database/migrations/yyyy_mm_dd_xxxx_create_hoges_table.php が作成される.
up と down の2つのメソッドが定義されている。up は追加するテーブルや拡張するカラムを指定する. down は戻す際の処理を記述する.

マイグレーションコマンドを実行しテーブルを作成する.

$ sail artisan migrate

以上で, データベースに hoges テーブルが作成される.

シーディングの生成

シーディングとは開発用のデータを生成すること.
以下の Artisan コマンドを実行.

$ sail artisan make:seeder HogesSeeder

database/seeder ディレクトリに HogesSeeder クラスが作成される.
作成されたクラスの run メソッドに追加データを記述する. 以下は追加例.

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class HogesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        DB::table('hoges')->insert([
            'hoge_content' => Str::random(100),
            'created_at' => now(),
            'updated_at' => now(),
        ]);
    }
}

DatabaseSeeder.php の run メソッドに作成したシーダーを追加.

    public function run()
    {
        // \App\Models\User::factory(10)->create();
        $this->call([HogesSeeder::class]);

Artisan コマンドでシーダーを実行

$ sail artisan db:seed

以上で, 対象のテーブルにデータが追加される.

個別でシーダーを実行する場合は以下

$ sail artisan db:seed --class=TweetsSeeder

ORマッパー Eloquent の使用

Laravel の ORマッパー である Eloquent を使用したモデルの作成.
以下のコマンドを実行.

$ sail artisan make:model Hoge

app/Models ディレクトリに Hoge クラスが作成される.
作成されたクラスはクラス名のスネークケースかつ複数形のテーブルと自動でマッピングされる.
これが hoges テーブルのモデルとなる.

モデル名: Hoge -> テーブル名: hoges

マニュアルでの設定

モデルをデフォルトの設定から変えたい場合は以下のようにモデルにメンバを定義することにより変更可能.

モデルがマッピング命名規則に従っていない場合は以下のメンバ定義で紐付け

protected $table = 'hoge_table';    // 紐付けるテーブル名

id 以外の id の場合

protected $primaryKey = 'hoge_id';

主キーが増分整数ではない場合

public $incrementing = false;

主キーが整数でない場合

protected $keyType = 'string';

Factory の作成

Factory とは開発用に使用するダミーデータをシーダーに与える機能.

以下のコマンドを実行

$ sail artisan make:factory HogeFactory --model=Hoge

database/factories ディレクトリに HogeFactory ファイルが作成される.

生成した Factory クラスの definition メソッド、return 内に生成したいデータを記述する.

$this->faker を使用すればランダムでダミーのテキストを生成してくれる.

class HogeFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition()
    {
        return [
            //
            'content' => $this->faker->realText(100)
        ];
    }
}

デフォルトでは英語で生成されるため日本語にしたい場合は config/app.phpfaker_localeja_JP に変更する.

'faker_locale' => 'ja_JP'

Factory を使用してシーディングをする

database/seeders/HogesSeeder.php の run メソッドに対象のモデルの factory() メソッドを使用して作成する.
以下例

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Hoge;

class HogesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        Hoge::factory()->count(10)->create();
    }
}

Artisan でシードを作成する

$ sail artisan db:seed

シードが生成されていることを MySQL で確認する.

Laravel : リクエストを受け取り HTML を表示

Laravel : リクエストを受け取り HTML を表示

クライアントから GET リクエストを受け取り HTML を返す一連の流れの構築方法について記載.

環境

  • macOS Big Sur
    • 11.6.5
  • Docker
    • 20.10.12
  • Laravel
    • 9.21.5
  • PHP
    • 8.1.8
  • Composer
    • 2.3.10
  • MySQL
    • 8.0.29

参考

概要

Laravel での実装方法の大まかな流れは以下となる.

  1. コントローラを作成する
  2. HTML のテンプレートを作成する
  3. 作成したコントローラに HTML 表示の実装を追加する
  4. ルータに作成したコントローラへのルーティングを追加する

コントローラを作成する

Artisan で自動作成.

$ sail artisan make:controller HogeDir/HogeController

上記で app/Http/Controllers/HogeDir/HogeController.php が作成される.

ひとつのコントローラにひとつのエンドポイントの制約を課したい場合は以下のコマンド.

$ sail artisan make:controller HogeController --invokable

自動生成されたコントローラには __invoke メソッドが定義され, このメソッドにしかリクエスト処理ができないよう制約を付与できる.

HTML のテンプレートを作成する

Blade という動的に HTML を作成するテンプレートを使用する.

resources/views/hoge/index.blade.php を作成する.
Blade は {{ $hoge }} の記述で動的に値を設定できる.

<!doctype html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0,
          maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>アプリタイトル</title>
</head>

<body>
    <h1>アプリボディ</h1>
    <p>{{ $hoge }}</p>
</body>

</html>

作成したコントローラに HTML 表示の実装を追加する

先程作成した HogeController.php に表示用のメソッドを追加する.
シングルアクションコントローラの場合は __invoke メソッドに実装する.

作成したメソッド内で view をコールし HTML を返す.
第一引数は表示する HTML テンプレートでドット区切りでフォルダ階層を表す.
以下の場合は hoge フォルダの index.blade.php を指定.

第二引数は動的に表示する変数({{ $hoge }})の変数名と値.

通常のコントローラ場合

// メソッド名は任意
public function show()
{
    // 変数 hoge に laravel という文字列を設定
    return view('hoge.index', ['hoge' => 'laravel']);
}

シングルアクションコントローラの場合

public function __invoke(Request $request)
{
    // 変数 hoge に laravel という文字列を設定
    return view('hoge.index', ['hoge' => 'laravel']);
}

ルータに作成したコントローラへのルーティングを追加する

ルータ(routes/web.php)にルーティングを追加する.

  • 通常コントローラ
    • Route::get('/hoge', [\App\Http\Controllers\HogeController::class, 'show']);
    • hoge は アクセスされる URL のパス
    • HogeController は作成したコントローラ
    • show はアクセスするメソッド
  • シングルアクションコントローラ
    • Route::get('/hoge', \App\Http\Controllers\HogeController::class);
    • シングルアクションコントローラの場合メソッドの指定は不要

おわり

sail up -d でサーバを立ち上げた状態でブラウザから http://localhost/hoge にアクセスすると作成した HTML にアクセスできる.
ルーティングのイメージは大まかに以下の感じ.

Laravel ルーティング

Laravel : プロジェクトの作成

Laravel : プロジェクトの作成

Laravel プロジェクトの作成方法についてまとめる.

環境

  • macOS Big Sur
    • 11.6.5
  • Docker
    • 20.10.12
  • Laravel
    • 9.21.5
  • PHP
    • 8.1.8
  • Composer
    • 2.3.10
  • MySQL
    • 8.0.29

参考

前提

Docker コンテナ上に Laravel プロジェクトを作成する形で進める.
Docker コンテナ上に作成した Laravel プロジェクトは Sail という Laravel に同梱されたコマンドを使用して操作, 連携する.
Sail を使用することで, コンテナ上への各種環境(PHP, Composer, MySQL)を自動で構築してくれて楽.

環境構築

Docker コンテナ上に Laravel プロジェクトを作成するため, ローカル環境には Docker のインストールだけでよい.

Laravel プロジェクト作成

以下のコマンドで Laravel プロジェクトを作成する. プロジェクト名は sample-project.

$ curl -s "https://laravel.build/sample-project?php=81" | bash

コンテナを起動する

Sail を実行しコンテナ上のサーバーを起動する.

  1. 作成したプロジェクトに移動する
  2. $ ./vendor/bin/sail up を実行する
  3. ブラウザから http://localhost にアクセスする
  4. Web サーバに繋がることを確認する

初回 Sail 実行時は Docker イメージのインストールなどで時間がかかる.
以降は $ ./vendor/bin/sail up をすることでコンテナ上のサーバが起動しブラウザからアクセスできる.

Sail のエイリアスを設定する

いちいち $ ./vendor/bin/sail up を入力するのは手間なのでエイリアスを設定する.
.bashrc などの rc ファイルに以下を追記する.

alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

# テストコマンドで sail ファイルがカレントにあるかチェックし, あれば `bash sail` を実行.
# なければ `vendor/bin/sail を実行する.

.bashrc 更新後は $ source .bashrc で更新内容を反映する.
以降は sail up で実行可能.

Sail のデーモン起動と終了

  • Sail のデーモン起動
    • $ sail up -d
  • Sail の終了
    • $ sail down

コンテナに入る

  • コンテナに入る
    • $ sail shell
  • コンテナから出る
    • $ exit

コンテナ環境のカスタマイズ

コンテナ設定のための Dockerfile の更新方法について.

カスタマイズ用の Dockerfile の作成

以下のコマンドを実行する

$ sail artisan sail:publish

アプリケーションルート(プロジェクトのトップディレクトリ)に docker/ ディレクトリが作成される.
docker/ ディレクトリ内には各バージョンごとのフォルダ(8.0, 8.1 など)が作られる.
適用されるバージョンは docker-compose.ymlservices.laravel.test.build.context に設定されているバージョンのディレクトリ内 Dockerfile が使用される.

この Dockerfile を変更することでコンテナ環境をカスタマイズできる.

更新した Dockerfile の反映

Dockerfile 更新後は以下のコマンドで Docker イメージを再ビルドする.

$ sail build --no-cache

タイムゾーンを変更する

デフォルトではコンテナのタイムゾーンUTC となっているため日本時間に変更する.
docker/x.x/Dockerfile を以下の通り変更する.

  • 変更前
    • ENV TZ=UTC
  • 変更後
    • ENV TZ='Asia/Tokyo'

更新後は Docker イメージをビルドする.

一旦 sail down, sail up -d して立ち上げ直してから
sail shell でコンテナ内に入り date コマンドで日本時間(JST)になっていることを確認する.

MySQL文字コード変更

日本語での開発に合わせて文字コードの設定を変更する.
x.x は使用しているバージョンに合わせて適宜読み替える.

  • docker/x.x ディレクトリに my.cnf ファイルを以下の通り作成する
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin

[client]
default-character-set = utf8mb4
  • 作成した my.cnf ファイルを MySQL コンテナの /etc/ に配置し設定が反映されるよう docker-compose.yml に以下を追記する
mysql:
    volumes:
        - './docker/x.x/my.cnf:/etc/my.cnf'
  • $ sail down でコンテナを停止する
  • $ sail up -d でコンテナを起動する
  • MySQL にアクセスして文字コードが変更されたことを確認する
    • $ sail mysql を実行する
    • show variables like '%char%'; を実行する
    • 各パラメータが utf8 系統になっていることを確認する
  • exitMySQL から出る

git clone 後にやること

作成した Laravel プロジェクトを GitHub などで管理し, git clone で ローカル環境に持ってきた後に実施する手順について.

Sail を使えるようにするため以下を実施する.

docker run --rm ¥
    -u "$(id -u):$(id -g)" ¥
    -v $(pwd):/var/www/html ¥
    -w /var/www/html ¥
    laravelsail/php81-composer:latest ¥
    composer install --ignore-platform-reqs

Laravel : まとめ

Laravel : まとめ

Laravel ノウハウまとめ記事.

プロジェクトの作成

Laravel 9 でのプロジェクトの作成方法や初期環境設定についての記事は以下.

Docker + Apache + Laravel で Web アプリケーションつくる

Docker コンテナ上に構築した Apache サーバー上で Laravel アプリケーションを 動かす環境を構築する.

kita127.hatenablog.com

Laravel : Docker + VSCode でデバッガ環境構築

Docker コンテナで動作する Laravel のデバッグ環境構築手順. ステップ実行や変数の状態を確認できるようになりとても便利.

kita127.hatenablog.com

リクエストを受け取り HTML を表示

クラアントから GET リクエストを受け取り HTML を返す一連の流れの構築方法について記載.

MySQL にテーブル作成

Laravel の機能を使用し MySQL データベースにテーブルを作成する方法について.

入力のバリデーション

POST メソッドの実装と入力のバリデーションについて

画像のアップロード

Gist

無分類でのまとめは Gist に

Raspberry Pi と VPN で監視カメラ制作

Raspberry PiVPN で監視カメラ制作

作ったモノ

自宅にいる犬の様子を外出先からでもリアルタイムで見てみたいと思い システムを Raspberry Pi で構築してみました.

Raspberry Pi に犬の様子の撮影と, 動画配信サーバーをやらせます.

動画配信サーバーには MJPG-streamer, ネットワークの構築にはお手軽に VPN を構築できる Tailscale を使用しました.

犬監視システムの構築手順の覚書を全2回に分けて記事にします.

1回目は Raspberry Pi の導入とリモート接続するまでをまとめました.

2回目となる本記事では Raspberry Pi に動画ストリーミングサーバーの構築と Tailscale を使用した VPN ネットワークの構築を説明します.

技術要素とアイテム

手順

動画ストリーミングサーバー構築

Raspberry Pi のカメラ設定はこの記事では扱いません. カメラ接続済みの状態から説明します.

  1. 必要なパッケージを Raspberry Pi にインストール.
$ sudo apt install -y build-essential imagemagick libv4l-dev libjpeg-dev cmake
  1. MJPG-streamer を GitHub から clone し, make する
$ git clone https://github.com/jacksonliam/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental
$ sudo make
$ sudo make install
  1. make したディレクトリと同じ階層で以下のコマンドを実行し動画ストリーミングサーバーをポート 8080 で起動する
$ sudo ./mjpg_streamer -i "./input_uvc.so -f 10 -r 640x480 -d /dev/video0 -y -n" -o "./output_http.so -w ./www -p 8080" 
  1. PC のブラウザから Raspberry Pi サーバーにアクセスする
http://raspberrypi.local:8080
  1. MJPG-streamer の画面になったら動画は Stream で, 静止画は Static で閲覧可能

動画だけ閲覧する場合は以下の URL でアクセス.

http://raspberrypi.local:8080/stream_simple.html

Tailscale で VPN 構築

ここまでで, Raspberry Pi にブラウザからアクセスしてカメラの情報がリアルタイムで閲覧できるようになりました.

しかし, これではプライベート IP からしかアクセスできないため, 外部からグローバルにアクセスできるようにします.

いくつか方法がありますが, 今回は家族だけで共有したいため, VPN を構築しそこを経由して外部から閲覧できるようにします.

Tailscale を使用すれば手軽に VPN を構築し外部から自宅にあるサーバーに簡単アクセスできます.
しかも, VPN 接続のため, セキュリティ的にもポートフォワーディングよりも安心感があります.

Tailscale のアカウントを取得する

Tailscale はアカウントを取得し, アカウントに登録した端末間で VPN を構築します. そのためまずは以下の Tailscale のウェブサイトにアクセスし, アカウントを取得します.

googleGitHub のアカウントがあれば, そこから取得できます.

http://city.takarazuka.hyogo.jp

PC にクライアントソフトをインストールする

  1. Tailscale にログイン
  2. Download を押下
  3. 自分の PC 用のクライアントソフトをダウンロードし, インストールする

Raspberry Pi に Tailscale クライアントをインストールする

Raspberry PiVPN ネットワークに参加させるためにクライアントソフトをインストールします.

公式の Raspberry Pi へのインストール手順はこちら.
https://tailscale.com/download/linux/rpi

  1. Tailscale のインストール
$ sudo apt-get install apt-transport-https
$ curl -fsSL https://pkgs.tailscale.com/stable/raspbian/buster.gpg | sudo apt-key add -
$ curl -fsSL https://pkgs.tailscale.com/stable/raspbian/buster.list | sudo tee /etc/apt/sources.list.d/tailscale.list
$ sudo apt-get update
$ sudo apt-get install tailscale
  1. Tailscale に Raspberry Pi をコネクト
$ sudo tailscale up

URL が表示されるためコピーしてブラウザにアクセスする.
Authorization successful が表示されれば OK.

  1. Tailscale のマイページにアクセスし Raspberry Pi の IP アドレスを確認する

確認した IP アドレスで Raspberry Pi にアクセスできることを確認する.

http://<Raspberry PiのIP>:8080

終わり

以上で MJPG-streamer と Tailscale を使用した Raspberry Pi 監視カメラシステムが完成です.

Raspberry Pi 環境構築

Raspberry Pi 環境構築

記事の内容

自宅にいる犬の様子を外出先からでもリアルタイムで見てみたいと思い システムを Raspberry Pi で構築してみました.

Raspberry Pi に犬の様子の撮影と, 動画配信サーバーをやらせます.

動画配信サーバーには MJPG-streamer, ネットワークの構築にはお手軽に VPN を構築できる Tailscale を使用しました.

犬監視システムの構築手順の覚書を全2回に分けて記事にします.

1回目は Raspberry Pi の導入とリモート接続するまでをまとめました.

モノ

環境構築手順

Raspberry Pi を単体で起動

  • SD カードを装着する
  • Raspberry Pi に ディスプレイ, マウス, キーボードを接続
  • Raspberry Pi に USB-C AC アダプタを接続し電力を供給

Raspberry Pi のデフォルトのユーザー名は pi

VNCリモートデスクトップ設定

Raspberry Pi 側の設定

Raspberry Pi にはデフォルトでリモートデスクトップソフトであるVNC(Virtual Network Computing)が搭載されている. そのため, VNC の設定を有効にして, リモートデスクトップ接続の準備をする.

  1. スタートメニューをクリック
  2. 「設定」を選択
  3. Raspberry Pi の設定」を選択
  4. 「インターフェース」タブを選択
  5. VNC を有効にする

また, VNC のセキュリティ設定を変更しておかないと MacVNCクライアントから接続できないため, そちらも設定変更しておく.

以下を参考にさせていただきました.
https://qiita.com/karaage0703/items/9650e7aeceb6e1b81612#comment-467f53a421bea472cf81

  1. ラズパイ画面右上に表示されている V2 をクリック
  2. ハンバーガーメニューをクリックし Option を選択する
  3. Security を選択し以下の設定にする
    • Encryption
      • Prefer off
    • Authenticatior
  4. Users & Permissionsで、Standard userをダブルクリック
  5. パスワードを設定する

Raspberry Pi の IP アドレスを確認する. terminal から ip addr などで Raspberry Pi の IP アドレスを調べておく.

PC(Mac) から VNC リモート接続

以下で Mac から Raspberry Piリモートデスクトップ接続できる.

  • Finder を起動
  • 「移動」タブを選択
  • 「サーバーへ接続」をクリック
  • vnc://raspberrypi.local を入力
  • 「接続」を押下

SSH でリモート接続

SSH でもリモート接続できることを確認しておく.

terminal から ssh pi@raspberrypi.local で接続. pi はユーザー名.

HDMI接続なしでもデスクトップ起動に設定

このままだと, Raspberry Pi がディスプレイに接続された状態でないと VNC 接続できないため, ディスプレイに接続されていない状態でも接続できるように設定を変更する.

以下を参考にさせていただきました.
https://algorithm.joho.info/raspberry-pi/cannot-currently-show-the-desktop-raspberry-pi/

  1. Raspberry Pi で以下のコマンドを実行し設定ファイルを開く
    • sudo nano /boot/config.txt
      • エディタは vi とかもある
  2. #hdmi_force_hotplug=1コメントアウトをはずし hdmi_force_hotplug=1 に変更する

以上で Raspberry Pi をディスプレイに接続していない状態でも VNC 接続できるようになる.

解像度の設定をする

このままだと, 解像度があっていないため変更する. Raspberry Pi 側で以下の設定をする.

  1. terminal を起動
  2. raspi-cofig を入力
  3. Diaplay Option
  4. Resoltion
  5. DMT Mode 82 1920x1080
  6. sudo nano /boot/config.txt
  7. 以下コードの設定となっていることを確認する
  8. 解像度の変更
    1. Raspberry Pi のデスクトップ画面で
    2. メニュー ー> 設定 ー> Screen Configuration
    3. Configure -> Screens -> HDMI-1 -> 解像度 -> 1920x1080
    4. Configure -> 適用
# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=82

環境構築完了

ここまでの設定で Raspberry PiVNCSSH で接続できる環境が整う.

次回, 動画ストリーミングサーバーの構築と VPN ネットワークの構築.