CドライブをWSLのルートディレクトリにマウントする

こんにちは、ウチイダです。

WSL設定、今回はUbuntu上でWindows ホストのデータにアクセスする設定です。

CドライブなどのWindows上のデータは、デフォルトではWSLの/mnt ディレクトリにマウントされています。

$ ll /mnt
total 8
drwxr-xr-x  7 root      root      4096 Aug  6 17:44 ./
drwxr-xr-x 19 root      root      4096 Aug  8 17:26 ../
drwxrwxrwx  1 y-uchiida y-uchiida  512 Aug  8 16:47 c/
drwxrwxrwx  1 y-uchiida y-uchiida 4096 Aug  5 20:14 d/
drwxrwxrwx  1 y-uchiida y-uchiida 4096 Aug  5 20:14 e/
drwxrwxrwt  2 root      root        60 Aug  8 17:26 wsl/
drwxrwxrwt  6 root      root       260 Aug  8 17:30 wslg/

ウチイダとしては、mntではなくルートにあったほうが違和感がないのです。

というわけで、Windows ホストのファイルシステムを、WSLのルートディレクトリにマウントする設定を行っていきます。

wsl.conf を作成する

WSLのディストリビューションの構成は、/etc/wsl.conf で設定することができます。

Windowsのドライブのマウント先も、ここに設定項目があります。

/etc/wsl.conf を作成し、以下のように入力します。

etc ディレクトリ上のファイルなので、 sudo コマンドなどでroot 権限を与えるのを忘れないようにしましょう。

# WSL(Ubuntu)のルートディレクトリに、Windowsのドライブ(C:とか)をマウントする
[automount]
enabled = true
root = /

これを保存します。

ディストリビューションを再起動する

設定を反映するために、Ubuntuを再起動します。

PowerShellで以下を実行します。

## ディストリビューション(Ubuntu)を停止
PS C:\> wsl --shutdown Ubuntu-20.04

## 停止していることを確認する
PS C:\> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

ディストリビューションをいったん停止したら、Windows Teminalから該当のディストリビューションのターミナルを開きます。

この際に、起動を行ってくれます。

ターミナルが表示したら、ルートディレクトリにC: ドライブがマウントされていることを確認してみます。

$ ll /c
ls: cannot access '/c/DumpStack.log.tmp': Permission denied
ls: cannot access '/c/hiberfil.sys': Permission denied
ls: /c/MSOCache: Permission denied
ls: cannot access '/c/pagefile.sys': Permission denied
ls: /c/PerfLogs: Permission denied
ls: cannot access '/c/swapfile.sys': Permission denied
ls: '/c/System Volume Information': Permission denied
total 380
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  3 01:25 '$Recycle.Bin'/
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  3 20:44 '$SysReset'/
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  4 04:04 '$WinREAgent'/
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  8 16:47  ./
drwxr-xr-x 24 root      root        4096 Aug  8 20:22  ../
-r-xr-xr-x  1 y-uchiida y-uchiida     30 Aug  5 19:36  AVScanner.ini*
lrwxrwxrwx  1 y-uchiida y-uchiida      8 Aug  2 21:57 'Documents and Settings' -> /c/Users/
-?????????  ? ?         ?              ?            ?  DumpStack.log.tmp
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  8 17:25  Intel/
d--x--x--x  1 y-uchiida y-uchiida    512 Sep 23  2018  MSOCache/
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  3 04:08  OneDriveTemp/
d--x--x--x  1 y-uchiida y-uchiida    512 Jun  5 21:10  PerfLogs/
dr-xr-xr-x  1 y-uchiida y-uchiida    512 Aug  8 16:20 'Program Files'/
dr-xr-xr-x  1 y-uchiida y-uchiida    512 Aug  8 16:21 'Program Files (x86)'/
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  8 16:21  ProgramData/
drwxrwxrwx  1 y-uchiida y-uchiida    512 Aug  2 21:48  Recovery/
d--x--x--x  1 y-uchiida y-uchiida    512 Aug  7 18:59 'System Volume Information'/
dr-xr-xr-x  1 y-uchiida y-uchiida    512 Aug  3 01:27  Users/
dr-xr-xr-x  1 y-uchiida y-uchiida    512 Aug  7 18:04  Windows/
dr-xr-xr-x  1 y-uchiida y-uchiida    512 Aug  3 00:06  WpSystem/
-r-xr-xr-x  1 y-uchiida y-uchiida 384322 Jul 16  2016  bootmgr*
-?????????  ? ?         ?              ?            ?  hiberfil.sys
-?????????  ? ?         ?              ?            ?  pagefile.sys
-?????????  ? ?         ?              ?            ?  swapfile.sys

Permission denied がいくつかありますが、Usersや ‘Program Files’が表示されています。

今回の内容は以上です。

これで、PowerShellなどWindows ホストのCLI環境に近づけることができました。

あなたのお役に立てればうれしいです。

Windows 11のWindows Terminal設定

こんにちは、ウチイダです。

今回もWindows 11の環境構築についてです。

前回インストールしたWSLを、Windows Terminalから利用しやすくしていきます。

WSLのインストール手順は、以下の記事に書きました。

なお、この記事を作成している時点でのウチイダの環境は以下です。

  • Windwos 11 Pro (21H2 ビルド 22000.120)
  • WSL カーネル バージョン: 5.10.16
  • Windows Terminal バージョン: 1.9.1942.0

Windows Terminalの設定を変更する

以前はsetting.jsonを直接編集する必要がありましたが、現在では設定画面上から変更できる項目が増えました。

一般的な設定変更だけなら、jsonを開く必要はありませんでした。

1. デフォルトの起動プロファイルを変更する

Windows Terminal を起動した際に最初に開くプロファイルを、PowerShellからUbuntuに変更します。

Windows Terminal のタブ右端のにある「∨」をクリックして「設定」を開き、「既定のプロファイル」をUbuntuに変更します。

これで、Windows Terminalを起動した際にUbuntuがすぐに使えるようになります。

2. カラープロファイルを設定する

続いて、カラープロファイルを設定します。こちらも、設定画面上から変更できるようになっています。

設定画面で「Ubuntu」を選択し、「外観」タブの「配色」を選択します。

ウチイダはデフォルトの中の「One Half Dark」が気に入っているので、これに設定します。

「外観」タブで、プロファイルごとに配色(カラープロファイル)を設定できます

設定画面右下の「保存」ボタンを押してから、Ubuntuのターミナルを開きなおすと、配色が変更されます。

Ubuntuのターミナルを開くと、配色設定が反映されています

LS_COLORSの設定を変更

One Half Darkを設定しておけば、おおむね見やすくてよいのですが、一部どうにも視認できないものがあります。

lsコマンドの出力の際、他ユーザーからの編集を許可しているファイルが緑背景に青文字になってしまい、とても読みづらいです。

主に、権限が0777のファイル名が見えづらい…っていうか読めない…💦

とりあえずこの部分だけは、追加で変更していきます。

.dir_colors を作成して編集

ls コマンドの出力結果の色指定は、$LS_COLORSという環境変数で管理されているので、これを変更します。

dircolors コマンドで、現在の$LS_COLORSの設定値が出力されるので、まずはこれを.dircolors ファイルに保存します。

$ dircolors -p > ~/.dircolors

## ファイルを編集(vim)
$ vim ~/.dircolors

## Visual Studio Code がインストールされていれば、以下のコマンドでホームディレクトリを開くのもよいです
$ code ~

そして、.dircolors に記載されているOTHER_WRITABLE の設定を変更します。

今回は、文字色を黒に変えるだけにしておきます。

# ウチイダの環境では、60行目にありました
# 34;42 を 30;42 に変更します
OTHER_WRITABLE 30;42 # dir that is other-writable (o+w) and not sticky

利用できる色番号の一覧は、こちらのページの「ISO 6429 (ANSI) カラーシーケンス」に記載があります。

該当部分を引用しておきます。

0 デフォルトカラーを復元
1 より明るい色
4 下線付きのテキスト
5 点滅するテキスト

30 文字表示色:黒
31 文字表示色:赤
32 文字表示色:緑
33 文字表示色:黄 (または茶)
34 文字表示色:青
35 文字表示色:紫
36 文字表示色:シアン
37 文字表示色:白 (またはグレー)

40 背景色:黒
41 背景色:赤
42 背景色:緑
43 背景色:黄 (または茶)
44 背景色:青
45 背景色:紫
46 背景色:シアン
47 背景色:白 (またはグレー)

Man page of DIR_COLORS – linuxjm.osdn.jp

bashrsへの登録と設定反映

.dircolors の設定変更ができたら、.bashrcに以下のコマンドを追記し、起動時に.dircolorsの設定内容が反映されるようにします。

# 以下を追記する
eval $(dircolors -b ~/.dircolors)

ターミナルを起動しなおすか、 source ~/.bashrc を実行すると、設定が反映されます。

文字色が黒に変わり、視認性が上がりました

今回の内容は以上です。

dircolorsの設定もしたのでちょっと範囲が広くなりましたが、Windows TerminalからWSL を快適に使う最低限の設定をしました。

あなたのお役に立てればうれしいです。

Windows 11にWSL Ubuntuをインストール

こんにちは、ウチイダです。

Windows 11での開発環境として、WSL をインストールしていきます。

最短の手順では、PowerShellでコマンドを2,3実行するだけです。

画像などを含めた詳細な内容は、別のブログで改めて紹介するかもしれません。

1. WSLの有効化

まずWSLを有効化します。管理者権限で実行したPowerShellターミナルから以下を実行。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

処理終了後、再起動します。

2. Ubuntuのインストール

次はwsl コマンドで、ディストリビューションのインストールを行います。

ここでは、Ubuntu-20.04を選択します。

PS C:\> wsl --install -d Ubuntu-20.04
ダウンロード中: Ubuntu 20.04 LTS
インストール中: Ubuntu 20.04 LTS
Ubuntu 20.04 LTS はインストールされました。
Ubuntu 20.04 LTS を起動しています...

ダウンロードに時間がかかるので、しばらく待ちます。

インストール処理終了後、ユーザー名入力のプロンプトが表示されたら完了です。

3. WSLのバージョンの確認・変更

Windows 11では、WSL2がデフォルトに設定されているようなので変更の必要はなさそうです。

以下のコマンドで確認ができます。

PS C:\> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
PS C:\>

もしVERSION が1になっているようであれば、以下のコマンドでデフォルトの設定を変更できます。

PS C:\> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
この操作を正しく終了しました。

インストール作業は以上です。

Ubuntuをセットアップしたら使い始められます。

あなたのお役に立てればうれしいです。

Windows 11のPowerShellで日本語が文字化け→フォント変更で改善した

こんにちは。ウチイダです。

先日からWindows 11の設定作業をこまごまと進めているのですが、なぜかPowerShellの日本語部分が文字化けしてしまいました。

日本語部分だけ表示されない

アイコンを右クリック>管理者として実行 でも同じだったのですが、

Start-Process powershell.exe -Verb runas

で起動したターミナルは文字化けしていませんでした。

これをよくみると、なんだかフォントの形がちょっと違うんですよね…

ウィンドウ左上のアイコンをクリック>プロパティ を開いてみたところ、フォントの設定が「Consolas」になっていました。

ためしに「MS ゴシック」に変更してみたら改善しました。

フォントを変えたら文字化けが解消した

Consolasには、日本語が含まれていないのでしょうか。

そもそも初期インストールしたばかりで、設定を変えた覚えもないのですが…。

せっかくなので、Ricty Diminished をインストールしてPowerShellの規定フォントに設定しました。

フォントも少しだけ大きく。

Ricty Diminishedを適用した後の見栄え

Windows Terminal 経由でPowerShellも利用するので、色の設定などは行いませんでした。

以上です。あなたのお役に立てればうれしいです。

Windows 11で、タスクバーを左端に配置する

こんばんは。ウチイダです。

Windows 11をインストールして使い始めていますが、どうにもタスクバーが中央配置になったことになれません。

従来通り、左端に配置するように設定を変えました。

  1. スタートメニューから「設定」を起動
  2. 設定のウィンドウで、個人用設定 > タスクバー を開く
  3. タスクバーの動作の設定項目で、配置を「左揃え」に変更
タスクバーが左寄せになった

左寄せになりました。

ウチイダは基本的にカスタマイズをたくさんするのを好まないので、そのうち中央配置に直すかもしれません。

ですが、今はほかに慣れていかないといけないことが多いので、タスクバーの配置は従来と同じにしておきます。

以上です。あなたのお役に立てればうれしいです。

Windows 10からアップデートしたPCに、Windows 11をクリーンインストールする

こんばんは。ウチイダです。

いよいよWindows 11がインサイダープログラムで流れてきました。

いまメインで使っているPCはマウスコンピュータのスリムタワーで、いくつかパーツを増強して使っています。

LUV MACHINES Slim LM-iHS320S Core i5/8GBメモリ/1TB HDD 搭載モデル – 価格.com

https://kakaku.com/item/K0000933246/

購入から4年が経過していて、古いデータが残っていることもあり動作が遅くなることがあります。

せっかくの機会なので、心機一転、クリーンインストールしてみたいと思います。

リセットで調子が戻れば、このままあと2,3年は使いたいですね。お金ないので。笑

データのバックアップをしっかり取って、Windows 10の環境は別のPCで用意しておきます。

後戻りできない可能性が高いので、試される場合は自己責任でお願いします。

クリーンインストールの手順

以下の手順でクリーンインストールをおこないました。簡単です。

1. Windows Updateで、Windows 10 からWindows 11に更新

とりあえず、まずはWindows 11にアップデートしましょう。結構時間がかかります。

2. 更新後、スタートメニューから「設定」を起動

管理回りはそれほど変わっておらず、Windows 10とほぼ同じです。

まずはWindowsキーを押してスタートメニューを表示し、「設定」を開きます。

3. 設定のウィンドウで、システム > 回復へ移動

設定のウィンドウの画面左にメニュー項目が並んでいるので、そこから「システム」を選択します。

画面右側のシステム関連の設定項目の中に「回復」があるので、そちらを開きます。

4. 「PCをリセットする」をクリック

「回復」の画面を開くと、「回復オプション」に「このPCをリセット」があります。

「PCをリセットする」をクリックして、リセットの設定ウィンドウを開きます。

設定から、システム > 回復でリセット機能を利用する

5. 削除オプションで、「すべて削除する」を選択する

リセットの設定ウィンドウが表示されたら、個人用ファイルを残すかどうかを選択します。

必要なデータは別のドライブに退避する前提で、「すべて削除する」を選択します。

バックアップ漏れが心配な場合は、「個人用ファイルを保持する」を選択するほうが良いかもしれません。

6. 再インストールの方法で、「クラウドからダウンロード」を選択する

次に、再インストール方法を選択します。今回は「クラウドからダウンロード」を選択しました。

「ローカル再インストール」の場合、10と11のどっちでインストールされるかわからなかったので…

7. 「追加の設定」が表示されるので、必要に応じて変更

ドライブのクリーニングをするかどうか、システムドライブ以外もデータ削除するかを決めます。

ウチイダはドライブクリーニングなし、システムドライブのみ削除を選択しました。

8. リセットの設定内容を確認し、「リセット」ボタンをクリックする

追加の設定が終わったら、リセットの設定は以上です。

さいごに確認画面が出てくるので、「リセット」ボタンをクリックしましょう。

インストール用のデータをダウンロードされ、初期化の動作が始まります。

しばらくすると再起動され、Windows 11の初期セットアップ画面が表示されます。

9. リセット終了後、初期セットアップを行う

Windows 11の初期セットアップを行います。画面のデザインや見栄えは変わりましたが、
設定項目自体はWindows 10のときとほぼ変わっていないので、初期設定を行ったことがあれば大丈夫のはずです。

Windows 11 初期設定画面の開始

Windows 10では初期セットアップ時にコンピュータ名を勝手に設定されてしまっていたのですが、Windows 11では
初期設定の際に決めることができるようになっていたのが地味にうれしいです。

セットアップ完了後に、設定から直して再起動するのが面倒だったので…

リセット後のシステム状況

全データをまるごと削除したので、だいぶ軽くなりました。

ブラウザやセキュリティソフト、Slackなどのメッセージングアプリなど、いくつかのソフトウェアを入れた後の状態で、ディスク容量が45.3GBです。

もともと300GBくらい使っていたので、ここからどのくらいデータが膨らむかわかりませんが…

少なくとも現時点では軽快に動いています。

PCリセット実行後のディスク利用状況

なお、PCの性能は以下のような感じです。

もともとWindows 11の動作要件に含まれておらず、あとから追加された第7世代Core i5 搭載です。

基本的な動作は、今のところ大丈夫そう。

基本スペックはこんな感じ

この後、WSLなどのインストールを行って、プログラミング環境を整えていきます。

余談ですが、Windows terminalは初期インストールされていました。

42の課題とか、お仕事で引き受けている案件の開発ができるところまで設定出来たらまたまとめます。

あなたのお役に立てればうれしいです。

phpbrew からインストールしたPHPでartisan migrae できない

プロジェクトごとにPHPのバージョン管理をするため、先日、phpbrewを導入しました。

しばらくは問題なく使えていたのですが、Laravelの開発のためartisanコマンドを実行したときにエラーが。

$ php artisan migrate

   Illuminate\Database\QueryException  : could not find driver (SQL: select * from information_schema.tables where table_schema = laravel_chap5 and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll format the error
    666|         // message to include the bindings with SQL, which will make this exception a
    667|         // lot more helpful to the developer instead of just the database's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e
    671|             );
    672|         }
    673|

  Exception trace:

  1   PDOException::("could not find driver")
      /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=localhost;port=3306;dbname=laravel_app", "laravel_user", "laravel_passwd", [])
      /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

PDOExeption::(“coult not find driver”) となってます。PDOドライバーがない??

phpのインストール状況を見てみました。

$ php -i | grep PDO
PDO
PDO support => enabled
PDO drivers =>

むむ…。確かに設定されていない…

defaultバリアントにもpdoは含まれているんですけどね…念のためインストールしなおし。

$ phpbrew install 7.4.21 +default +pdo +mysql
===> phpbrew will now build 7.4.21
===> Loading and resolving variants...
Checking distribution checksum...
Checksum matched: 36ec6102e757e2c2b7742057a700bbff77c76fa0ccbe9c860398c3d24e32822a
===> Distribution file was successfully extracted, skipping...

# 中略 #

* We found that you enabled 'mysql' variant, you might need to setup your
  'pdo_mysql.default_socket' or 'mysqli.default_socket' in your php.ini file.

* To configure your installed PHP further, you can edit the config file at
    /home/uchiida/.phpbrew/php/php-7.4.21/etc/php.ini

To use the newly built PHP, try the line(s) below:

    $ phpbrew use php-7.4.21

Or you can use switch command to switch your default php to php-7.4.21:

    $ phpbrew switch php-7.4.21

Enjoy!

バリアントをつけなおしてみても、状況は変わらず。うーんなんなのか…

メッセージをよく見てみると、「mysqlバリアントを有効にするには、php.iniでソケットをセットアップする必要があるかもよ」と書かれています。

改めてGithubのREADMEを見直してみたところ、phpbrew config でiniを修正することができると書いてあります。

https://github.com/phpbrew/phpbrew/blob/master/README.ja.md#extention-installer

記載の通りにコマンド入力したら、エディタが立ち上がったので、そのまま保存して終了しました。

これで直ったのかな~と思いつつ、PHPの情報を見てみると、、、

$ php -i | grep PDO
PDO
PDO support => enabled
PDO drivers => mysql
PDO Driver for MySQL => enabled

直ってました。artisan migrate コマンドも実行できました。

iniファイルの変更は、別途行わないといけないみたいですね…

以上です。あなたのお役に立てればうれしいです。

何度も調べちゃう英単語: via

なかなか意味が覚えられなくて、そのたび検索している単語がいくつかあります。

そろそろループをbreakしたいので、メモリークリップに書き留めておきます。

Ciscoのルーティングテーブルに登場するvia。

プログラムやサーバーのエラーメッセージなどでも、たまに見かけます。

カタカナ表記だと「ヴァイア」という発音です。

意味は、「~を経由して」とか、「~を通じて」。場所やものを表す名詞を後ろにつなげることが多いです。

Ciscoルータのテーブルでは、ルート情報をどのネイバーから学習したのかを表す部分で用いられてます。

なんとなく英語っぽくない単語だと思ってましたが、ラテン語由来なのですね。

以上です。あなたのお役に立てればうれしいです。

Laravel 6 にlaravel/ui をインストールしたらエラー

Laravel 6で新規プロジェクトを立ち上げて、composerでlaravel/uiをインストールしようとしたらエラーになってしまいました。

$ composer require laravel/ui
Using version ^3.3 for laravel/ui
./composer.json has been updated
Running composer update laravel/ui
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - laravel/ui[v3.3.0, ..., 3.x-dev] require illuminate/console ^8.42 -> found illuminate/console[v8.42.0, ..., 8.x-dev] but these were not loaded, likely because it conflicts with another require.
    - Root composer.json requires laravel/ui ^3.3 -> satisfiable by laravel/ui[v3.3.0, 3.x-dev].


Installation failed, reverting ./composer.json and ./composer.lock to their original content.

バージョン要求を満たしてないみたいです。

Laravel 6 の公式ドキュメントを見たら、laravel/uiのバージョンを指定するように記載がありました。

https://laravel.com/docs/6.x/frontend

The Bootstrap and Vue scaffolding provided by Laravel is located in the laravel/ui Composer package, which may be installed using Composer:
composer require laravel/ui:^1.0 –dev

https://laravel.com/docs/6.x/frontend

指定のコマンドで再チャレンジします。

$ composer require laravel/ui:^1.0 --dev
./composer.json has been updated
Running composer update laravel/ui
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking laravel/ui (v1.3.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' or '7z' may remediate them.
  - Downloading laravel/ui (v1.3.0)
  - Installing laravel/ui (v1.3.0): Extracting archive
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
67 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

unzipがない、という警告が出てますが、とりあえずインストールはできたみたいです。

bugfixサポートも2021年9月に切れるので、そろそろLaravel6の利用も終えたほうがよさそうですね。

以上です。あなたのお役に立てればうれしいです。

Laravelで存在しないコントローラへのルーティングを書いたらInvalid route action エラーになった

久しぶりにLaravelを触っていて、変なところでつまづいたのでメモしておきます。

発生したのはLaravel 6.20 です。

新しくコントローラを作成しようとして、artisan でmake:controllerを実行したらエラーになりました。

$ php artisan make:controller NewSingleActionController --invokable

   UnexpectedValueException  : Invalid route action: [App\Http\Controllers\NewSingleActionController].

  at /var/www/laravel_app/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php:92
    88|      */
    89|     protected static function makeInvokable($action)
    90|     {
    91|         if (! method_exists($action, '__invoke')) {
  > 92|             throw new UnexpectedValueException("Invalid route action: [{$action}].");
    93|         }
    94|
    95|         return $action.'@__invoke';
    96|     }

  Exception trace:

  1   Illuminate\Routing\RouteAction::makeInvokable("App\Http\Controllers\NewSingleActionController")
      /var/www/laravel_app/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php:47

  2   Illuminate\Routing\RouteAction::parse("new_route", ["App\Http\Controllers\NewSingleActionController", "App\Http\Controllers\NewSingleActionController"])
      /var/www/laravel_app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:162

  Please use the argument -v to see more details.

最初はartisanコマンドを間違えたのかと思ったのですが、Execption traceのところをよく見てみると、Route.phpで例外発生しています。

そういえば、この後コントローラを作るからと、NewSingleActionContoller へのルーティングを書いておいたんだった。

web.phpから、NewSingleActionContllerへのルーティング情報をコメントアウトしたら解消しました。

artisanコマンドって、Routeなどの直接関係してなさそうなソースの例外も拾って動作停止するんですね…知らなかった。

こちらのQiita記事を見て、原因に気づいたのですが…名前空間の制御、意識してないとまた忘れそうです。

https://qiita.com/Okkun555/items/3a8c5df75a3f45d0474c

以上です。あなたのお役に立てればうれしいです。