LaravelのMiddlewareについて

アプリケーションを試しに作っているのだが、過去の「結局Laravelに戻って、ぼちぼち始める」で認証の仕組みが簡単に組み込めるよ、てなことを書いて、確かに認証ができていた。しかし、この認証は、未ログイン時に自分を登録するとアカウントが自動的に作成される、ということを想定したものだった。

そこで、ログインした際にのみ登録画面を表示させようと、app/Http/route.phpに以下のように書いてみたのだった。

すると、確かにログインする前に「/register」で登録画面を出そうとすると、ログイン画面にリダイレクトされる。よしよし。と思っていたが、書き足した「’middleware’ => ‘auth’」というのの意味がわからず、「これを書けば認証が必要になるんだな」の程度しか思ってなかった。

さてさて、ユーザー登録に認証が必要になったので良かった。と思って、今度は認証後に登録させようと、ログイン後のプルダウンメニューに登録を追加するため、resources/views/layouts/app.blade.phpに以下のように書き換えた。

そしていざ、ログイン後に登録画面を表示しようとすると、あれ、トップ画面にリダイレクトされちゃう。あれれ、と思って探していたら、これがミドルウェアという仕組みでそうなっているのであった。ミドルウェアとはコントローラーにアクセスする前や後に必ず実施するフィルタみたいなものらしい。

app/Http/Middlewareを見たところ、「RedirectIfAuthenticated.php」というそのもののリストがあり、リダイレクトしているのはここであることがわかった。じゃあどこでこれを呼び出すように定義されているのか、というと、app/Kernel.phpのrouteMiddlewareというマップで定義しているらしい。同じファイルにmiddlewareというのもがあるが、これは必ず実施するミドルウェアで、middlewareGroupsはミドルウェアをグループ分けできるものらしい。routeMiddlewareで定義されたキーと値のペアは、値はミドルウェアの実装クラスで、キーをどう使うか、というところで、route.phpのさっきの

の「’middleware’ => ‘auth’」の’auth’だったのだ。なーるほど。

で、登録時に「RedirectIfAuthenticated」ミドルウェアを通るときにリダイレクトされてしまっていたので、これは’guest’というキーにしたがって動いていることがわかった。んで、今度はコントローラー「app\Http\Controllers\Auth\AuthController.php」を見てみたところ、コンストラクタにそれらしきものがあった。

‘except’って「除く」ってことらしいから、logoutはログイン中の’guest’ミドルウェアからは除きますよ、って定義をしてあるようだ。だからログイン中にログアウトできるということだから、ここを

ってやってみたら(ここはメソッド名を書くようです)、想定通りログイン画面でユーザー登録フォームが出てきた!やった!

で、このミドルウェアって、artisanコマンドで

で、「Middleware」でどのミドルウェアを経由するかを見られるようで、routeMiddlewareに定義されたマップのキーがここに書かれている。「auth」が未認証時に認証画面に飛ばされるミドルウェア、「guest」が認証時にルート画面に飛ばされるミドルウェアであるようで、

のようになっていればOKだと思う。

Laravelのフォームのチェックボックス

前回、モデルについてモデルの属性はどこにかくのだ、とか書いていたが、いろいろやっている間に、フォームでチェックボックスを実現するときどうするのだろう、ということになったのでその覚え。

フォームをLaravelCollectiveというモジュールを使って実現する、っていうのをララ帳などで確認して作業していたが、私の案件では、チェックボックスをたくさんつけて、複数選択をさせる、という必要があった。ララ帳では触れていなかった(ような)ので、最初は、以下のように書いていた。

DBのほうは、booleanで指定するのもいいけど、項目数の変動が想定されるので、そのたびにマイグレーションしたくないな、と思って、選択肢を各ビットと見立て、DBには1つのカラムにOR演算した結果(合計値)を数値として入れておく、ビットでフラグを表現してカラムを1つにすることを想定した。

当初、コントローラークラスで、都度各ラベルの合算をして、とやっていたのだが、どうも腑に落ちない。なんかミューテータとか使えそうじゃないの?と思っていたけど選択肢の名前とDBに書き込む名前が違うので、そのままでは使えなさそう。

まいっか、と他の部分をいろいろ実装していたが、解決のきっかけとなったのは以外にもバリデーションだった。バリデーションをやろうとしたとき、「どれか1つ以上を選択してください」というやつをこの書き方では簡単には実現できないことに気づき、いろいろ調べることとなる。

チェックボックスや、ラジオボタンなどのグループ化をどうやってるんだろう、とかいろいろ探していたら、以下のように書いて配列で実現できるとの情報を見つけた。

こうすると、choiceという配列1つでチェックボックスの選択肢が表現できる。そして1つ以上のチェックをつけてねというバリデーションチェックは、以下のように簡単に実現できるようになった(FormRequestという機能で、Requestクラスの拡張クラスを使っています)。

また、こうすると、複数のチェックボックスが1つの変数で表現できるので、ああミューテーターが使える!

こんな感じで実現できた!途中いろいろはしょっている、とにかくララ帳がすばらしいのでララ帳でわかんなかったところのみをメモとして残している。

LaravelのMVCのモデル

前回、データベースの1対多について悩んだことをメモ書きしておいたが、ただ、そもそもMVCのモデルをどう定義すりゃいいのよ、ということを全く考えていなかった。

Javaのクラス的な考え方で、make:modelで作った時に作られる、appディレクトリ直下に作られるモデル名のPHPファイルで、クラス変数として定義しなきゃなんないんだろうな、と思い込んでいて、それらしい記事を探すけどどこにもない。モデルの要素をどこに定義すればいいのよ、と探していたが、実際は少なくともクラス変数として定義する必要はなかった。

モデルを作った時に、make:modelで作った時に「-m」オプションをつけると、database/migrationsディレクトリにマイグレーション用のファイルができる。どうやらここに定義したテーブル名が、そのままモデルの要素と考えていいような印象を受けた。

ではappディレクトリ直下に置かれるモデル名のPHPファイルは何をするのか、というので、前回はDBのテーブル名の定義などをやってたが、何かDBとPHPの変数の間をコンバートする必要があるときに、それを定義できる「ミューテータ」という機能があることがわかった。たとえupdate_atなどの日付のデータはテキストになってしまいますが、これをPHPのCarbonというDateTimeを扱うクラスのインスタンスに変更してくれる、など。

あとは、マスアサインメントといって、登録できるカラム名を定義しておき、それを配列で渡すことでレコードを操作できるような仕組みがあって、それの定義をここでやるみたいです。

ここらへんの知識の大半は、「ララ帳」というすごくわかりやすいホームページが参考になっている。対象バージョンが5.1ではあるのだが、最初から進め方がきちんと押さえられているので、とても理解がし易い。昨年7月から更新が止まっているので残念なんですが、とても助かっている。

でも、私がJavaから先に入っているので、どうしてもモデル名のphpファイルに定義されたモデル名のクラスに、クラス変数を定義しなきゃいけないんじゃないの?と思ってしまうのって、誰もわかってくれないか・・・

QuietComfort20を修理に出した

BOSE QuietComfort20を買った」で買ったQuietComfort20、今日修理に出してきました。

どうなったのか、というまえに、実際2年以上はちゃんと使っていましたよ。きちんと計算すると、買ったのが2013年8月26日発売日当日なので、修理に出したのが今日なので、1013日、おおよそ2年と10ヶ月ですね。1日あたりの料金は約37円です。ま、どうでもいいです。

最初に異常に気づいたのは、私は使っていない機能だったのですが、このQuietComfort20には、通常のノイズキャンセリングモードと違い、「Awareモード」という別のモードがあります。通常のノイズキャンセリングだと外の音が聞こえ「なさ」すぎるんで、ノイズキャンセリングを聞かせつつ人の話す声を聞きやすくするモードなのですが、これらのモードを切り替える「ボタン」がついています。このボタンが効きづらくなって、おそらく内部断線だろうな。ということ。

この時点で修理に出すという選択肢もあったが、気づいた時点で1年以上が経過していたため、どのみち修理代がかかってしまう。ノイズキャンセリング機能はそのままだったので、使い続けることにした。

使い続けた結果どうなったか、というと、私の場合は断線ではなく、被服がはげてしまって、いつブチッと切れてもおかしくない状態になってしまいました(ノイズキャンセリング機能はきちんと使えています)。私の使い方では、大きなユニットの両端のいずれかが断線するのではと思っていたんですが、左側の耳栓側の付け根部分という意外な場所でした。

私が住む福岡には、実はBOSEの直営店がありません。数年前までは天神のIMSビルにあったのですが、いつのまにか撤退していました。調べたら一番近いのは佐賀の、鳥栖プレミアムアウトレットだそうなので、車でそのためだけに行ってきました。

店員に現象を説明して、故障機を渡したら、「新品が送られてきますので、修理代15120円を代引きでお支払いください」と言われ、さらにイヤーチップとクリップを外してもらって「新品についていますけど、予備品として使ってください」とわざわざ返却してくれました。すばらしい。クリップは、ケーブルの途中につけることができるクリップで、これでシャツなどにケーブルの一部を留めることができるのですが、このクリップが意外に重宝してるんですよねー。

これから2週間は、ノイズキャンセリングなしのインナーイヤホンを使うことになるんですが、修理から帰ってきたときにまた「やっぱ違うな」と思えることを楽しみにして待ちます。ただ1つ後悔しているのは、今週出張で飛行機乗るんだったなー、ということだけです。飛行機ノイズにすごく効くんで、飛行機で寝られない私はすごく助けられていたんですよねー。出張から帰ってきてから出せば良かったかな・・・。

LaravelのEloquentで悩む

前回から、モデルを定義して、モデルと密接に関係しているデータベースとの関わり合いをうまいところやってくれるらしいEloquent ORMというものをいろいろ探って試行錯誤してみていたけど、よくわかっていない。とりあえずやったことを書き残す。

前回、troubleというモデルをartisanコマンドでひな形を作ったところで終わった。で、私の設計上、このtroubleというモデルは、自らに対して1対nの関連性を持つような想定だ。親のtroubleに、複数のtroubleがぶらさがる、ツリー構造のようなイメージだ。

で、troubleがもつカラムとしては、長文のテキスト「document」の1つのみとした。

まずは前回atrisanコマンドで作ってもらったマイグレーション用のファイルdatabase/migrations/~create_troubles.php をいろいろなドキュメントを見よう見まねで修正した。因みにupメソッドが作成するとき、downメソッドが元に戻すときのことを書くらしい。

この5行目でdocumentカラムの定義だが、6行目では、自分の親のidを納めるtrouble_idカラムを定義している。そして、9行目で、外部キー束縛を定義している。これでマイグレーションをし直す。

> php artisan migrate:refresh

すると、MySQLのデータベースを見ると、テーブルに「document」と「trouble_id」のカラムが追加されている。よしよし。

そして、今度は、App\Trouble.phpを以下のように修正した。

ここでテーブル間の相関関係を定義するらしい。便宜上ツリーに見立てて1を親、nを子として説明するが、hasManyが、子クラス(App\Trouble)と親のApp\Trouble間には、子のtrouble_idに親のidをもつ形で複数の関係あるよ、ということになって、belongsToは、その逆、子から1つの親があるよ、ということになるらしい。

さらに、Seederっていって、データベースの初期状態を定義できる仕組みを使って、操作方法を確かめてみる。databases\seeda\DatabaseSeeder.phpを以下のように修正した。

で、artisanにてseedを実行!

> php artisan db:seed

そしてt_troubleテーブルを見ると、「ぶらさがります」と「こっちもぶらさがり」のtrouble_idに、「こんにちは世界」のidが入っているのがわかる。うまくいっているようですねー。

親を先にsaveでDBに格納しておかないと、親のIDがわからないので、当然うまくいかないようだ。そしてtrb1のtroublesで関連づけたくてtrb2を書き込むときは、「$trb1->troubles()->save($trb2)」って書くところがなかなか思いつかないのねー。

この状態で、

とやると、idが1のレコードにぶら下がるレコード群をdata変数へ得ることができるようです。

今日はここまで…

結局Laravelに戻って、ぼちぼち始める。

PHPixieでいろいろやってたけど、私の読解力不足で、なんともならなかったので、結局Laravelに戻ってきた。Laravelに戻ってきた理由はいろいろあるけど、英語が苦手な私も日本語ドキュメントや日本人によるユーザー事例(ブログなど)が充実していたことが一番大きい。でも、最新版を使うのなら、結局英語のドキュメントを参照せざるを得なくなるのだけれど。

不安もある。これはフレームワーク全般に関する不安だろうが、マイナーバージョンアップでも結構な変更点がありそうなところだ。でもセキュリティサポートのパッチが同一バージョンで2年?3年リリースされるようなので、とりあえず大丈夫だろう。

フレームワークを使おうとした一番の理由は、セキュリティの問題だ。もちろん開発者が考慮していなければならないのは変わらないが、フルスクラッチで組むよりは遙かに考慮点が少なくなる(のではないかという希望を与えてくれる)ということだ。また、ユーザー認証の仕組みなども、フレームワークで考慮されていれば、とりあえず導入するのもフルスクラッチに比べれば手間はかからない(のではないかという希望を与えてくれる)ということもある。

ということで、ぼちぼち作り始める。手順はLaravelのサイトにあるDocumentの中にあるチュートリアルの、「Basic Task List」をやっていきながら、同じような目的のことをやっていくことにした。

とりあえず「Laravelの続き。quickstart-basic-masterをやってみる。」でやったように、プロジェクトの作成およびhttp.confでAliasの設定、そして.htaccessファイルの修正を行った。

そのまえに、ユーザー認証の機構を使うので、ユーザー認証の仕組みはあらかじめ追加しておいた。

> php artisan make:auth

これだけで認証の仕組みができるんだから、フレームワークはありがたいね。

最初に、モデルを作成してみる。モデルは、Eloquentという仕組みを使うらしい。解説ページを見ながら、とりあえずやってみた。

> php artisan make:model -m Trouble

これでいいのかな?結果、app直下に各クラス定義のphpファイルが、database/migrationsにマイグレーション用と思われるファイルが生成されていた。

最初にDBのテーブル名を定義する。クラス変数「$table」に定義しておくと大丈夫らしい。たとえば

のように。

今日はここまで・・・

今度はPHPixieを試してみる

フレームワーク行脚の旅、というか、PHPも初心者、フレームワークもそんなに使ったことない、という私が、どんなものがあるのだろうと探し回っている中、初心者にお勧めだというフレームワーク「PHPixie」を見つけたので試しにXAMPP環境でちょっと使ってみた。

データベースがMongoDBというオブジェクト指向DBというのが気になるけど、ま、最悪DB操作は直接PHPで書けばいいわけだし。あ、ユーザー認証どうしよう。

プロジェクトの作成と最初のページの表示まで

まずはLaravelと同様、XAMPPのhtdocsのディレクトリに行き、composerを使ってプロジェクトを作成する。

> composer create-project phpixie/project phpixie

とりあえずそれらしいファイル群はできたようだ。で、クイックスタートのページにあるように、まず、プロジェクトルートファイルに「.htaccess」を以下のように作っておく。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !web/
RewriteRule (.*) /web/$1 [L

そして、ApacheのDocumentRootをプロジェクトルートに向ければ、「http://localhost/」でテストページが表示された。

Processor

次の節、Processorをページの内容そのままで進めて、「HTTPProcessors」フォルダ直下に「Quickstart.php」を作成してQuickstartクラスを定義したあと、「App」フォルダ直下の「HTTPProcessor.php」にbuildQuickstartProcessorメソッドを定義して、再実行してみたところ、ちゃんと「http://localhost/quickstart」で「Quickstart tutorial」という文字が表示された。

うまくいっているようだ。仕組みはあとで考えよう…

Routing

そんでもってRoutingをこれもまたページの内容そのままで進めてみる。QuickStart.phpにviewActionメソッドを追加するところまでは良かったが、「config」フォルダ内の「routeResolver.php」の追加が、どこに追加するのかよくわかんなかったので、結局以下のようにしてみた。

<?php

return array(
    'type'      => 'group',
    'resolvers' => array(
        
        'default' => array(
            'type'     => 'pattern',
            'path'     => '(<processor>(/<action>))',
            'defaults' => array(
                'processor' => 'greet',
                'action'    => 'default'
            )
        ),
        'view' => array(
            'type'  =>  'pattern',
            'path'  =>  'quickstart/view/<id>',
            'defaults'  => array(
                'processor' => 'quickstart',
                'action'    =>  'view'
            )
        )
        
    )
);

そうしたところ、うまく「http://localhost/quickstart/view/5」で「5」って表示されたから、大丈夫なのだろう。仕組みは後で考えよう。

とりあえず今日はここまで。

Laravelの続き。quickstart-basic-masterをやってみる。

あれからちょっと間が開いたが、公式のドキュメントを読んで、チュートリアル的な物をやってみようと思った。

コマンドプロンプトで「php artisan」とやってみて、ヘルプを表示させたら、頭に「Laravel Framework version 5.2.20」と表示されて、Laravel 5.2だということを知った。私が見ていたドキュメントは日本語版の5.1までのやつだったので、どうせなら新しいのを見てやろうということで、5.2のドキュメントを見始めた。そこでチュートリアル的なものを探していたら、「クイックスタート」があったのでやってみることに。どうやらタスクを追加したり削除したりするだけの単純なアプリケーションらしい。

指示に従い、GitHibからソースをダウンロードし、xamppのApacheのhtdocsにフォルダ(laravel)を作ってコピーした。その後、以下のようにしてLaravelのコンポーネントをインストールする。

> cd laravel
> composer install

そして、XAMPPのMySQLで、PHPMyAdminからデータベースを新規作成し、「.env」ファイルでデータベースの設定を上書きしたあと、マイグレーションを実施してみた。

> php artisan migrate

とりあえずテーブルができたようで、実行してみた。ルートに前回見つけた「.htaccess」を置いてみたところ、とりあえず最初の画面の表示がされたが、タスクを追加しようとするとエラーに…

どうやらリダイレクトがうまくいっていないようで、リダイレクトの無限ループを起こしているらしい。ということでリダイレクトの仕組みをやり替える。まず、最初に置いた「.htaccess」を消して、わかりやすいAliasを使ってみる。httpd.confの、alias_moduleのくだりで、以下のように書いてみた。

<IfModule alias_module>
…
  Alias /laravel "C:\xampp\htdocs\laravel\public"
  <Directory "C:\sampp\htdocs\laravel\public">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
      Order allow,deny
    Allow from all
  <Directory>
</IfModule>

やってみたが、やはりトップ画面のみ表示されて、追加しても同じエラーに。いろいろググってみると、publicフォルダの「.htaccess」ファイルを修正しなければならないことが判明。「RewiteEngine On」の下に、以下を追加した。

RewriteRule ^(.*)/$ /laravel/$1 [L,R=301]
RewriteBase /laravel

とりあえずこれでタスクの追加まではうまく動いた。で、今度はタスクを削除させようとクリックすると、アプリケーション名が消えてしまう。生成されたソースを見ると、追加のformタグのactionは「http://localhost/laravel/task/」となっているのに、削除のformタグのactionは「/task/1」などとなっている。これはビューを書き換えればなんとかなりそうなので、以下のように書き換えてみた。

<!-- Task Delete Button -->
<td>
  <form action="{{ url('task')}}/{{ $task->id }}" method="POST">

とりあえず動いてくれた。今日はここまで・・・

xamppとlaravelの覚え(PHP初心者)

NetBeansインストール

私は昔Javaをやってましたが、今回はPHPの環境のみを選んでインストール。OK。
昔に比べてずいぶん軽くなっていますね。

xamppインストール

OK。ただ、MySQLのrootパスワードを変えたらPHPMyAdminが起動できなくなる。xampp\phpMyAdmin\config.inc.phpの接続情報を書き換えて解決。

Composerのインストール

https://getcomposer.org/ から取得しインストールOK。

Laravelのインストール

http://readouble.com/ のチュートリアルを参考にやってみた。

xamppのコントロールパネルからShellを起動しそこで実施。

# composer global require "laravel/installer=~1/1"

インストール完了。プロジェクト作成。

# cd htdocs
# laravel new test
# cd test
# copy .env.example .env

完了。アプリケーションキーを入れようとすると、エラー発生!

# php artisan key:generate
PHP Warning:  require(C:\xampp\htdocs\test\bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in C:\xampp\htdocs\test\bootstrap\autoload.php on line 17

どうやらプロジェクトにもcomposerをインストールせねばならないらしい。

# composer install

でもどうやら以下でやるのが一番早そうだった。インストールから暗号化キー生成まで一気にやってくれる。

# composer create-project laravel/laravel test --prefer-dist

NetBeansのプロジェクト追加

新規プロジェクトで「PHP」の「既存のソースを使用するPHPアプリケーション」を選択。
あとはソースフォルダでxampp\htdocs\test を選ぶ。PHPのバージョンは5.6にした。プロジェクトURLはそのまま。OK。一部のフォルダに赤いアラートマークがついているけど、気にしない。

早速実行。するとディレクトリツリーが表示されてしまう…

どうやら、publicというパスでデフォルトが表示されるようで。困った。

調べていたら、http://w.builwing.info/2015/05/14/xampp%E3%81%ABlaravel5%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/ で、ルートフォルダに以下のような「.htaccess」を書いて、ApacheのRewriteEngineを使って処理するとよいようで。

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteRule ^$ laravel/public/ [L]
 RewriteRule (.*) public/$1 [L]
</IfModule>

OK。デフォルトページが表示された。

とりあえずここまで。

 

BOSE QuietComfort20を買った

このブログの更新、なんと2年ぶりです。

私はずいぶん前から、ノイズキャンセリングヘッドホンに興味を持っていた。たまぁに家電量販店に入って、サンプル展示品を見かけると、ちょっと試してみたりしていた。だけど私のノイズキャンセリングヘッドホンのイメージが強力すぎて、「こんなもんなのか、こんなもんでこの価格か・・・」と躊躇していた。また、躊躇するのにはさらに理由があって、電車の中でオンイヤータイプのヘッドホンを被るのが恥ずかしくてイヤ!ってのもあってのことだった。

で、ウェブサイトをいろいろ見てたら、BOSEのインイヤータイプのノイズキャンセリング「イヤホン」が出るよ、すごいよ、って噂を聞いて、いろいろ調べているうちに、以下の動画を見つけた。発表会の様子。

特に動画の10:00ぐらいから始まるプレゼン。どんなものでも商品の魅力は「驚き」だけど、それがダイレクトに伝わってくる。ということで最近ボードゲームも買ってないし、懐具合はぎりぎりだけど、このプレゼン見せられたら財布のひもが緩んでしった。私はBOSEオンラインストアで航空機用アダプタとともに即予約。

発売日当日の26日午前中、宅配便で到着。午後までそしらぬ振りして粘ったが、昼過ぎに子どもが荷物を見つけてしまう。「あ~け~て~」と言うのでやむなく開けてあげたが、もちろんよくわからない様子のまま子どもの昼寝の時間が来てしまい、事なきを得た。その後即充電をはじめた。説明書にも最初使うときには充電してね、って書いてあるので、充電したままとりあえず夜を待つことに。

そして子どもが就寝後、自分の部屋にこもって初装着。うちのマンションは道路に面しているが、部屋は幸い道路とは反対側にあり、比較的静か。エアコンもつけず、網戸で風を通せば涼しかったので、ノイズの発信源は外からのみ。外からのノイズで目立つのは航空機。空港が比較的近いので「あ、飛んでるな」と音でわかるし、昼間はテレビの音が聞き取りづらくなる時もあるぐらいだ。

装着後、とりあえずは何も繋がずに電源を入れる。約1秒後、耳がすっと抜けたような、不思議な感覚に襲われた。静かだと思っていた自分の部屋が、さらに静かになって、「これが無音なのかな?」という間隔。わずかにホワイトノイズが感じられるが、そんな程度。

そしてスマホ(ブログを書かない間にガラケーからスマホに変えてました)で音楽を聴いてみる。小さな音がどのくらい聞こえるかをチェックするため、最初から最後までクレッシェンドが続く、ラベルのボレロを聞いてみた。そんなに音量は上げずに、最初の小説から聞くことが出来てびっくりする。今までは周囲のノイズにかき消されて、「いつのまにか始まっていた」という聞こえ方か、最初の方でボリュームを上げておくと、最後の部分では大きすぎてボリュームを下げなきゃならなくなってしまうのだが、見事に聞き取れる。

約13分程度でボレロが終わって、ヘッドホンを外すと、「ゴー」っという騒音におののく。といっても自分の部屋で静かな夜なので、そんなにうるさいと思ったことは1度もないのだが、「あぁ普段こんなうるさい中に居るのか・・・」と日常のノイズに改めて気づかされ、そっちのほうがびっくりするのだった。途中飛行機も飛んだのだが、ボレロにマスキングされて全く聞き取れなかった。

もちろんすべてのノイズが聞こえなくなるわけではない。特に高周波の音や突発的な音は残る。でもそれでもいくらかはミュートされている間隔になる。上記の発表会の体験者も、ある程度の音量で音楽を聴いていて、かすかに残ったノイズはその音楽でマスキングされていたんだと思う。

翌日出勤のため外で装着。玄関を出てスイッチをオンにすると、またスっと静かに。そして音楽を聴きながら歩いてみた。車の通過音等は「ブーン」ではなく「スーン」という感じで聞こえてくる程度、ヒールの高い靴の音は聞こえるが、普通の靴の音、自分の靴の音も聞こえない。でも聴いている音楽のベース音とか、いままでボリュームを上げないと聞けないパートの音も普通の音量で聞けてしまう。クラクションや救急車等のサイレンは、よっぽど大音量で音楽を聴いていない限り、聞こえなくなることはないと思う。不安だったら音楽の音量を下げれば充分歩きながらでも使えるのではないか。安全の保証は出来ないけど。

ボリュームを上げなくてもいいということは、音漏れの心配をする必要もないし、耳にも優しい。

そのまま駅に行き、電車に乗る。私が乗る電車はその駅が始発で、座ってワンセグを見ながら発車を待つのが日常なのだが、外からそのまま電車に入って、普通にワンセグを見ていた。途中で耳がかゆくなり、耳を掻こうとイヤホンを外すと、これまた「ゴゴー」っという騒音に驚く。「こんなに(止まっている)電車の中ってうるさかったっけ?」とまたまた日常のノイズの大きさに驚かされた。

電車の走行中は、レールの継ぎ目の音や、ポイントでの金属のこすれる音などは入ってくる。社内アナウンスもかろうじて聞き取れる。しかし音楽と重なると車内アナウンスは聞き取りづらくなるまでボリュームが絞られる。静かな車内に流れる音楽。電車の中でこんな音量で、この音楽のベース進行なんて聞こえてなかったよなぁ、と感慨に浸る。

会社の近くの比較的大きな駅で降りる。きれいな床はカツカツ音がしやすい床だが、聞こえ方をたとえたら「大きなホテルのロビー」ぐらいのノイズだった。カツカツというヒールの音のみがちょっと聞こえる程度。そのまま屋外へ出て会社へ向かうが、人の会話や電車の走行音など、普段聞こえるべき音が聞こえない空間に不思議な感覚だった。
image

弱点は形状。消音回路とバッテリーを内蔵しているユニットの両端からケーブルが出ているが、補強はすこしあるものの、ケーブルが直接出ているので、将来的には断線が気になるところ。ここが特殊形状でもいいからコネクタ式になっていたら、修理時は部品交換等で対応できるはずだからいいのにな、と思ったぐらいで、使い勝手は良好。このユニットの置き場に困るかもしれない。私はBluetoothアダプタを先につけているので、スマホの取り扱い時にケーブルを意識しないでいいけど、直接指すとスマホにユニットがついてくる(スマホとユニットの間のケーブルが3~4センチしかない)ので戸惑うことが多いかもしれない。将来はこのユニットにBluetoothが内蔵されるモデルが出そうな気がする。

大切に使っていきたい。