RaspberryPiでAmazonEcho(Alexa)を自作しながら筋トレ

Alexaの最新ライブラリが発表されたのに便乗して

今や音声入力インターフェースが花盛り。
アメリカさんでは一家に一台AmazonEchoなんて言われるくらい浸透してて、GoogleもGoogleHomeで追随中。
もちろん、iOSにはSiriさんがいるし、Windowsにはcortanaくんが。
そして、日本でもLINEが「WAVE(Clova)」という音声インターフェースを発表したことが話題になった。
(先行申し込みした人にはそろそろ届き始めている頃かな。)

そんなこんなで、音声入力インターフェースが「ポスト・スマホの最有力」なんて言われたりするものだから、世界中で巨人達が熾烈な争いを繰り広げている。

そんなさなか、amazonが二週間ほど前に最新のAlexa用公式ライブラリ(SDK)を発表

以前からずっとAlexaを使ってみたいと思っていたので、ちょうど良い機会だし「Amazon Echoもどき」を作ってみようかな、動かしてみたいし・・・という軽い動機にて。
「声」「音」のユーザーインターフェースの雄(英語圏で)となっているAmazon Echo(Alexa)をラズパイで自作(DIY)してみます。
(あと今後のAlexa SDKの勉強も兼ねて!)

ちなみに。
説明する必要も無いと思うけど、Amazon Echoってこれね。

でもって、最新Alexa SDKのGithubリポジトリはこちら。
https://github.com/alexa/avs-device-sdk

AVS(Alexa Voice Service)SDKリポジトリのwikiには、Amazonが最新SDK用の丁寧な”Quick Start Guide”を用意してくれているので、これをなぞるだけで、Alexaが動くよ!(らしいよ。)
なので、コマンドラインを少しでも扱える人なら誰でも簡単にラズパイでAlexaが作れちゃう。(らしいよ。)
いや、コピペするだけなので、最悪コマンドラインが分からなくても作れちゃう!(らしいよ。)

と思っていたら、結果的に「かなりの忍耐力」を要求されたことだけは先に言っておきます。
(エンジニアなら知っているはず、「道を知ることと道を行くことは全く違う(モーフィアス)」。そういうもんだよね。)

もう一度言っておきます。
「コピペ」するだけでラズパイを使ってAlexaを構築可能であることに間違いはない。
が、コンパイルの待ち時間などが超長かったりドキュメントに不備があったりで、「忍耐」が必要という覚悟を持って臨むべし。

前置きが長くなった・・・・。

さぁ、帆を上げろ!
Let’s go!!

何よりもまず、ラズパイを用意する

今回、私は手元に2年前くらいに買った「Raspberry Pi2」があったのでそれを使用します。
ただし、最新ラズパイはRaspberry Pi3で、2よりも随分と処理能力が上がっています。
なので、ラズパイ3を使うと、もしかしたら「私が苦しんだAlexa構築時間」がラズパイ2の半分くらいの時間で済むかも。
ラズパイ3 5500円前後

ラズパイ自体のセットアップ等については、過去記事参照。
Raspberry Pi 2(or 3)で楽しく格安ディスクトップPC構築

ちなみに、Alexaはマイクから音声を拾って、スピーカーを通して返事を返すので、上記説明とは別にラズパイに繋げる①マイクと②スピーカーは必須です。
私は、マイクとスピーカーをamaoznで激安で購入。(ちゃんと動いたよ)
あとインターネットにも繋がる必要があるので、有線LANケーブルかUSBのWifiを用意。
(ラズパイ3だと、WiFiが標準装備なのでWiFi子機は不要だね。)

Alexa(AVS)動作までのステップを確認しておこう

Alexaを構築作業に着手する前に、構築のステップを大まかに把握ね。

  1. 手持ちのラズパイをAmazon Developerに登録する(オンライン)
  2. Alexa SDKを動かすために必要なライブラリをインストールする。(これが時間かかる)
  3. Alexaの実行環境が整ったら、公式サンプルをダウンロードしてきてビルドする。
  4. ビルドしたアプリを立ち上げて、マイクに向かって”Alexa!”と呼びかける。(すると、奇跡が・・・)

ラズパイをAmazon Developerに登録する

(以下の登録は、ラズパイでやってもいいし、PCで作業してもOK。私は普段使っているMacでやりました。)

まずは、Amazon Developerにアクセスし、ログインする(アカウントが無い人はアカウントを作ってログイン)。
https://developer.amazon.com/

Amazon Developerにログインしたら”Alexa”タブを選択して、”Alexa Voice Service”で”Get Started“!!

次に、画面右上の”CREATE PRODUCT“を選択。

これ、全部スクショとってたらアップしてたら記事がめっちゃ読みづらくなりそう・・・。
あと、スクショ撮っても画面やUIって頻繁に更新されてすぐに参考にならなくなるしね、できるだけ文字で解説します。

上記”CREATE PRODUCT”をクリックすると入力フォームが出てくるので、各項目を解説しておきます。

  1. “Product Name”- 任意のプロダクト名を入力
  2. “Product ID”- 任意のプロダクトIDを入力
  3. “Is your product an app or a device?”- “Device”を選択
  4. “Product category”- “Other”を選択。”Rapsberry Pi Project on GitHub”と入力。(って公式ドキュメントに書いている)
  5. “Brief product description”- プロダクトの簡単な説明。(”My first Pi project.”とか入力。)
  6. “How will end users interact with your product?”- “Touch-initiated”と”Hands-free”を選択。
  7. “Upload an image”- プロダクトのアイコンね。私はスルーしました。(公式もスキップしてもOKって書いている)
  8. “Do you intend to distribute this product commercially?”- “No”選択。
  9. “Is this a children’s product or is it otherwise directed to children younger than 13 years old?”- “No”選択。

フォームを埋めたら”NEXT“ボタンを押して次へ。

セキュリティー設定を行う。
CREATE NEW PROFILE“をクリック。

セキュリティー設定のフォーム入力項目はこれだけ。

  1. “Security Profile Name”- プロファイルの名前を入力。(ex.Alexa Voice Service Sample App Security Profile)
  2. “Security Profile Description”- プロファイルの説明。(ex.Alexa Voice Service Sample App Security Profile)

“NEXT”を押すと”Client ID“と”Client Secret“の二つが生成されてます。

で、”Client ID”と”Client Secret”の下に
“Allowed Origins”と”Allowed Return URLs”の入力項目が現れるので、それぞれに
“http://localhost:3000″、”http://localhost:3000/authresponse”と入力して”UPDATE”。

ちなみに、最後に入力したURL二つは、ラズパイでAlexaSDKをインストールした後に、認証するために必要になります。

これで、プロダクト登録完了!!
この後、”Client ID“、”Client Secret“、”Product ID“などはラズパイの設定ファイルに書き込むことになります。

ほい!ではAVS-SDKの必須ライブラリインストール

もうすでにぐったりしている人もいるかもしれないが、ぐったりするのはこれからだから。
とはいえ、この先、コピペで行けるから気は楽に。
Take It Easy.

ということで、ここからは、ラズパイのコマンドラインを立ち上げてひたすらコピペ。
本当にコピペだけでAlexaのサンプルアプリ動作まで行けてしまうんだけど、先に述べたように「忍耐力」は必要だからね。
(あと、公式ドキュメントだけだとハマった部分もあったんだけど、ハマらないようにガイドします。)

では、行きましょう!

1.まずはラズパイに作業フォルダと環境変数を設定

定番ですが。
Linuxのパッケージ管理システムも使うので、まずはapt-get update!


$ sudo apt-get update

環境変数等設定。


$ echo "export SOURCE_FOLDER=$HOME/sources" >> $HOME/.bash_aliases
$ echo "export LOCAL_BUILD=$HOME/local-builds" >> $HOME/.bash_aliases
$ echo "export LD_LIBRARY_PATH=$HOME/local-builds/lib:$LD_LIBRARY_PATH" >> $HOME/.bash_aliases
$ echo "export PATH=$HOME/local-builds/bin:$PATH" >> $HOME/.bash_aliases
$ echo "export PKG_CONFIG_PATH=$HOME/local-builds/lib/pkgconfig:$PKG_CONFIG_PATH" >> $HOME/.bash_aliases
$ source $HOME/.bashrc
$ mkdir $SOURCE_FOLDER

2.Buildツール類をインストール

apt-getだけでなく、ソースからmake(コンパイル)しないといけないライブラリ類もあるので。


$ sudo apt-get install git gcc cmake build-essential

3.ネットワーク系ライブラリ

OpenSSL/HTTP2/libcurlをインストール

・http2 ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://github.com/nghttp2/nghttp2/releases/download/v1.0.0/nghttp2-1.0.0.tar.gz
$ tar xzf nghttp2-1.0.0.tar.gz
$ cd $SOURCE_FOLDER/*nghttp2*/
$ ./configure --prefix=$LOCAL_BUILD --disable-app
$ make -j3
$ sudo make install


この辺りはまあまあ余裕。

・openssl ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2a.tar.gz
$ tar xzf openssl-1.0.2a.tar.gz
$ cd *openssl*/
$ ./config --prefix=$LOCAL_BUILD --openssldir=$LOCAL_BUILD shared
$ make -j3
$ sudo make install


このあたりからいきなりコンパイル時間が長い!
ぶっちゃけ、腹筋30回(インターバル30秒)×3セットやっても、全然時間が余ったので、25kgのハンドグリップをニギニギしつつ待つ。
長すぎて握力死んだ。

・libcurl ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://curl.haxx.se/download/curl-7.50.2.tar.gz
$ tar xzf curl-7.50.2.tar.gz
$ cd *curl*/
$ ./configure --with-ssl=$LOCAL_BUILD --with-nghttp2=$LOCAL_BUILD --prefix=$LOCAL_BUILD
$ make -j3
$ sudo make install


プッシュアップバーを使った腕立て深めで10回×3セットでは時間が余りまくったので、水曜日のダウンタウンみてた。

4.データベース系

・sqlite インストール


$ sudo apt-get install sqlite3 libsqlite3-dev


apt-getが癒し。
やっぱりサクッとインストールできるね。

5.マルチメディア系

マルチメディア系ライブラリのgstreamerをインストールする前に、依存関係のライブラリをインストール


$ sudo apt-get install bison flex libglib2.0-dev libasound2-dev pulseaudio libpulse-dev
$ sudo apt-get install libfaad-dev libsoup2.4-dev libgcrypt20-dev

・gstreamer-1.10.4 ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.10.4.tar.xz
$ tar xf gstreamer-1.10.4.tar.xz
$ cd *gstreamer*/
$ ./configure --prefix=$LOCAL_BUILD
$ make -j3
$ sudo make install


まだまだ続くよ。
ぶっちゃけ、夜から構築作業し始めたから、make放置して寝ようかと思った。

・gst-plugins-base-1.10.4 ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.10.4.tar.xz
$ tar xf gst-plugins-base-1.10.4.tar.xz
$ cd *gst-plugins-base*/
$ ./configure --prefix=$LOCAL_BUILD
$ make -j3
$ sudo make install


ここらあたりになってくると、なんのライブラリを入れているのかよくわからない。

・gst-libav-1.10.4 ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.10.4.tar.xz
$ tar xf gst-libav-1.10.4.tar.xz
$ cd *gst-libav*/
$ ./configure --prefix=$LOCAL_BUILD
$ make -j3
$ sudo make install


記憶が定かではないが、確かこの辺りでお風呂に入ったけど、出てきてもまだmake終わってなかった。

・gst-plugins-good-1.10.4 ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.10.4.tar.xz
$ tar xf gst-plugins-good-1.10.4.tar.xz
$ cd *gst-plugins-good*/
$ ./configure --prefix=$LOCAL_BUILD
$ make -j3
$ sudo make install


プラグインのGoodってなんやねん。

・gst-plugins-bad-1.10.4 ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.10.4.tar.xz
$ tar xf gst-plugins-bad-1.10.4.tar.xz
$ cd *gst-plugins-bad*/
$ ./configure --prefix=$LOCAL_BUILD
$ make -j3
$ sudo make install


プラグインのBadってなんやねん。
待ち疲れて、make放置して寝た。
また明日〜。

6.サンプルアプリ用音声録音・再生

・portaudio ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ wget http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz
$ tar xf pa_stable_v190600_20161030.tgz
$ cd *portaudio*/
$ ./configure --prefix=$LOCAL_BUILD
$ make -j3
$ sudo make install


インプットされた音声を録音したり再生したりするライブラリらしい。
なるほど、SDKでは、話しかけた音声をストリーミングで解析するのではなく、一度音声ファイルに保存して、保存したファイルを音声解析するのかな。

7.Sensory wake word engine

音声検出エンジン "Sensory"
これ結構重要なんだよね。
たとえば、Siriって、ホームボタンを押して音声入力モードにしてから話かけるわけじゃん。
音声入力インターフェースって、なんらかのトリガーで音声入力モードにすることで音声認識をスタートさせるわけだけど、Siriはホームボタン長押しがトリガー。
Alexaはその起動に物理的なボタンではなくてAlexaと呼びかける「音声」をトリガーにしている。
実はこれって結構大変で、それを担ってくれるのがSensory。
(間違ってたらごめん。)

・Sensoryの依存ライブラリインストール


$ sudo apt-get -y install libasound2-dev
$ sudo apt-get -y install libatlas-base-dev
$ sudo ldconfig


apt-getは癒し。

・Sensory ダウンロード&インストール


$ cd $SOURCE_FOLDER
$ git clone git://github.com/Sensory/alexa-rpi.git

$ bash alexa-rpi/bin/license.sh

$ cp alexa-rpi/lib/libsnsr.a $LOCAL_BUILD/lib
$ cp alexa-rpi/include/snsr.h $LOCAL_BUILD/include
$ mkdir $LOCAL_BUILD/models
$ cp alexa-rpi/models/spot-alexa-rpi-31000.snsr $LOCAL_BUILD/models


また、魔のconfigure & make。

やーっと、AVS本体のビルドー!

1.AVS Device SDK ダウンロード


$ cd $HOME
$ mkdir AVS_SDK
$ cd AVS_SDK
$ git clone git://github.com/alexa/avs-device-sdk.git
$ echo "export SDK_SRC=$HOME/AVS_SDK/avs-device-sdk" >> $HOME/.bash_aliases
$ source $HOME/.bashrc

2.Sensory, GStreamer, PortAudioとともにSDKをビルド


$ cd $HOME
$ mkdir BUILD
$ cd BUILD
$ cmake $SDK_SRC -DSENSORY_KEY_WORD_DETECTOR=ON -DSENSORY_KEY_WORD_DETECTOR_LIB_PATH=$LOCAL_BUILD/lib/libsnsr.a -DSENSORY_KEY_WORD_DETECTOR_INCLUDE_DIR=$LOCAL_BUILD/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON
-DPORTAUDIO_LIB_PATH=$LOCAL_BUILD/lib/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=$LOCAL_BUILD/include -DCMAKE_PREFIX_PATH=$LOCAL_BUILD -DCMAKE_INSTALL_PREFIX=$LOCAL_BUILD

3.設定ファイルに設定を書き込む

(ここどハマりポイント)

viでもvimでもnanoでもなんでもいいですが、設定ファイルを編集します。
設定ファイルは以下のパスに。
~/BUILD/Integration/AlexaClientSDKConfig.json

ちなみに、ここは私がどハマりしたポイントです。
設定ファイルの項目に何を書き込めばいいかわからない部分がいくつかあって悩んだ。
(公式ドキュメントに書いていない。)


 {
    "authDelegate":{
        "clientSecret":"${SDK_CONFIG_CLIENT_SECRET}",
        "deviceSerialNumber":"${SDK_CONFIG_DEVICE_SERIAL_NUMBER}",
        "refreshToken":"${SDK_CONFIG_REFRESH_TOKEN}",
        "clientId":"${SDK_CONFIG_CLIENT_ID}",
        "deviceTypeId":"${SDK_CONFIG_DEVICE_TYPE_ID}"
     },

   "alertsCapabilityAgent":{
     "databaseFilePath":"${SDK_SQLITE_DATABASE_FILE_PATH}",
     "alarmSoundFilePath":"${SDK_ALARM_DEFAULT_SOUND_FILE_PATH}",
     "alarmShortSoundFilePath":"${SDK_ALARM_SHORT_SOUND_FILE_PATH}",
     "timerSoundFilePath":"${SDK_TIMER_DEFAULT_SOUND_FILE_PATH}",
     "timerShortSoundFilePath":"${SDK_TIMER_SHORT_SOUND_FILE_PATH}"
   }
 }

まず"authDelegate"内の値。

"refreshToken"は、後の認証作業で自動的に書き込まれるので今は空欄にしておいてOK。
(これは公式にそう書いていたので安心。)

"clientSecret"、"clientId"の二つは、上記ラズパイのデバイス登録したときに表示された値を書き込みます。

で、"deviceTypeId"ですが、こんな値はデバイス登録したときに与えられおらず、Amazon Developersで登録したデータをあちこち探してもそんな値はない。
"deviceTypeId"とは何なのか、さっぱりわからなかったが、登録データに載っていて考えられそうな値としては"Product ID"あたり。
ということで、"deviceTypeId"には"Product ID"の値を書き込んでおく。
(結果、これで正解。)

次に、"deviceSerialNumber"。
これが一体何なのかさっぱりわからない、Amazon Developersのデータを見ていても「それらしい」雰囲気のものすらない。
一体どんな値を設定すればいいのかさっぱりわからないので、適当に”12345678”といれたら通った
(のちに、何処かのサイトでIDはなんでもいいと書いていた。とりあえずサンプルなので。)

次に、"alertsCapabilityAgent"内の値。

"databaseFilePath"は、データベースのファイルパスなんだけど、とりあえず任意の場所でOK。
ex./home/pi/alexa/database.db
データベースがなければ、そのパス上にDBが作成されるので、ご安心を。

で、問題はその下。
"alarmSoundFilePath","alarmShortSoundFilePath","timerSoundFilePath","timerShortSoundFilePath"
これらの値の意味がわからない。

意味がわからないので、空でいいや、と全部の値を空文字に設定してコンパイルしたら以下のようなエラーがでるし。


Failed to create default SDK client!

(SampleApp:12043): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
2017-08-25 06:15:24.808 [  2] E MediaPlayer:doStopFailed:reason=gstElementGetStateFailed

つまり、上記4つの値は空にはできないと思い、公式githubのissueを手当たり次第に当たっていたら、アラームとタイマー用の音声ファイルを設定しないといけないってことが判明。

https://developer.amazon.com/public/solutions/alexa/alexa-voice-service/content/alexa-voice-service-ux-design-guidelines

ここからタイマーとアラームの4つの音声をラズパイ上の任意の場所にダウンロード。
でもって、4つのファイルパスを上記の設定ファイルに書き込む。

これで、設定ファイルの編集は完了!

4.いよいよAVS-SDKのインストール


$ cd $HOME/BUILD
$ make -j3
$ make install


またこのmakeが長い。

5.SDKの認証


python AuthServer/AuthServer.py

上記コマンドで、ラズパイ内にWEBサーバーが立ち上がる。
その後、ラズパイのWEBブラウザを立ち上げて、http://localhost:3000 にアクセスする。

すると、ページがリダイレクトされて、Amazonの認証ページに進むので

認証ボタンを押す。

認証に成功すると以下のような画面が現れて、先ほどの設定ファイルに"refreshToken"が自動的に書き込まれる。

祝!Alexaインストール完了!

ということで、こんな感じでDIY Alexa誕生。
(ちょっとブサイクなAlexaだけど)

いよいよAlexa on RaspberryPiとお話

よし!Alexa起動!


TZ=UTC ./SampleApp ~/BUILD/Integration/AlexaClientSDKConfig.json $LOCAL_BUILD/models

Alexaのコマンドが表示されAlexaがスタートした!

早速、Alexaに話しかけてみる。

私:"Alexa!"
A:"Yes"
私:"How are you?"
A:"Great! Ready to help."

私:(よし!やったー!うまくいったどー!)

いやー、ラズパイちゃんにAlexaさんが載って、ちゃんとお返事してくれています!

難しいことはしていないけど非常に時間がかかっただけに、Alexaさんの反応を聞けて嬉しい限り。

ま、ここまではね。

・・・・・・。

ええ、ここまではね。

この先、話しかけるとなぜかアプリが落ちる。

"hello!"と、挨拶のやりとりまではいいんだけど、その後"What's the weather in Kyoto now?"とか、Alexaさんと別の会話をしようとすると一気に機嫌を損ねてしまうようで。
急にブチ切れて、落ちちゃう。

う〜ん・・・。

公式のGithubにもissueが結構溜まってきてるし、Sampleアプリの不具合なのか、私の設定がどこかでミスっているのか・・・。

とりあえず、今回は一旦この辺りにしておいて、近いうちに修正していきます。

おまけ(費用のお話)

昔買ったラズパイを使いまわしているので、現在の価格と相違があるかもしれませんが、予算的なことを。
ちなみに、ラズパイ本体以外は、全部格安のもので揃えました。

  • RaspberryPi 2 Model B 5140円 (2年以上前の2015年に購入)
  • SDカード 360円
  • USBマイク 790円
  • USBスピーカー 1290円
  • WiFi 1000円

合計 8580円

※今回はリモートディスクトップ(VNC)を使ってラズパイを操作したので、モニター等は使っていません。
ということで、9000円以内であなたもAlexaをDIYできちゃいます!(^^)

すっげー!!

ただし、ebayとかだと、本体4000円+送料3000円くらいで正規のAmazon Echo(Dot)が買えるんだけどね(^^)
orz

このエントリーをはてなブックマークに追加

日本一大きく、そして、日本一寂しい大仏さん

日本一大きな大仏って奈良?鎌倉?

よく「奈良の大仏」と「鎌倉の大仏」どちらが大きい?
というクイズがあったりする。

答えはどっち?

正解は、奈良の大仏さん。

奈良の大仏(東大寺の大仏さん)が、14.98m(約15m)。
鎌倉の大仏(高徳院の大仏さん)が、11.31m(約11m)。
ということで、奈良の大仏さんのほうが、3mも大きい。

やっぱり奈良の大仏さんデカいねー。

さすが、東大寺(奈良)の大仏さん、「坐像(座っている大仏)」で日本一大きくて有名なわけです。
(「立像(立っている仏像)」で一番大きいのは牛久大仏120mだけど。)

小学校の修学旅行で奈良の大仏さんを見たときは、子供ながらに「でかい!すごい!」って思ったよね。

そして、それ以降ずっと「大仏といえば奈良の大仏さん」だったわけだけど、先日、その常識に対して考えさせられる衝撃の事実に直面した。

福井県の大仏さん

それは、2017年のゴールデンウィークのど真ん中。
「恐竜好きの聖地」として有名な福井県立恐竜博物館まで旅をした日のこと。

(博物館の中で動くティラノサウルス)

恐竜博物館からの帰り、まだまだ時間があったのでのんびりとお土産もの屋さんに寄ったりしていたら、
お土産のパッケージとか、お店に設置している観光マップとかにちょくちょく「大仏」って言葉でてくる事に気がついた。

しかも、なぜかやたらと「日本一の大仏」って書いている。
しかし、「福井県の大仏」って全く聞いたこと無いよな〜。

どういうこと?
そもそも、福井県に大仏さんがいるの??
しかも、「日本一」ってどういうこと??

特に自社仏閣や大仏さんが好きなわけではないんだけど、「奈良でも鎌倉でもない、福井県にある日本一の大仏?」ってのがあまりにも謎で気になったのと、
地図を見ると「恐竜博物館」から近いことがわかったので、ついでに大仏さんのお姿を拝見しに行ってみることにした。

大仏さんがあると言われる「大師山清大寺(全く聞いたことがない)」に着くと、とんでもなく大きな駐車場。
おそらく500〜600台は軽く入るのではないか。
その広さを前にして、直感的に「自分が知らなかっただけで、これは高名なお寺に違いない!」と思ってワクワク。

ただし・・・。

駐車場に止まっている車は1台・・・。
時は、ゴールデンウィークのど真ん中。

さっきの恐竜博物館なんて、駐車場待ちの行列ができてたのに・・・。

「恐竜目的以外の観光客って少ないのかな〜」なんて思いつつお寺の前の「門前町」の入り口まで歩いていく。

京都に住んでると有名なお寺の門前町とかは、お土産物屋とか飲食店とかのお店がズラーっと軒を連ねて活気があるわけだが、
まぁ、この駐車場の感じだと観光客も少なめで、お土産物屋さんとかもそんなにないのかな・・・、と思いつつ門前町の入り口にたどり着いてみると・・・
以下のような光景が。

うん??

・・・頭が混乱する。
京都の清水寺の二年坂・三年坂のように「お土産物屋が軒を連ねている」というイメージはもともと全くなかった。
なので、すぐにお寺への入り口かあるのかと思ったが、意外とそうでもなく、予想外に「お土産物屋さんが軒を連ねる門前町」が目の前にある。
参道の両側にお店がたくさんある・・・。

しかしだ・・・。
お店が一軒も開いてない。

すべてのお店のシャッターが下りている。
一軒残らず。

今日は町全体の定休日??
定休日にきちゃったかな?

あまりにも気になって、一軒づつよくよく観察してみると、どうもお店の看板が「裏返し」になっている。

つまりこれは・・・「定休日」ではない、、、
確実に、全店閉店(廃業)している?

これだけのお店があったことを考えると、昔はたくさんの参拝者で賑わっていたのかもしれない。
しかし、「何かの理由」によって、どうやら今の門前町は「廃墟化」しているようだ・・・。

しかも、駐車場には車が一台しかなかったが、この参道を歩いているのも私一人。

おいおい大丈夫か?ここ?

「もしかして、本当は大仏なんてないんじゃないの?」
「そういえば、自分の他に参拝者が誰一人としていないんだけど?お寺やってる?」
「え?なんか騙されてる?」

などと、考えつつ、
廃墟と化した門前町で、自分一人しかない状態に軽くビビりながら、拝観券売り場まで行き「第一寺人発見」。

第一寺人:「拝観料500円になりますー。」
私:「500円ですね。はい。」
第一寺人:「ごゆっくりどうぞー。」
私:「あ、あの、、、」
第一寺人:「・・・・」

・・・聞けなかった。
とても聞ける雰囲気ではなかった。
「なぜ門前町がこんなに荒廃してしまったのか・・・?」なんて。

とはいえ、騙されているわけではない。
なぜなら、目の前には素晴らしい巨大な仁王門が。

そして、仁王門の中には、東大寺にも負けるとも劣らない巨大仁王像が左右に二体どーーん。

(参拝者が私しかいないので、大きさ比較ができずわかりにくいがとにかくデカイ。)

そして、仁王門をくぐると、はるか先に超巨大大仏殿がどーーん。

(なんども言う、人がいないので大きさがわかりにくが、デカイ、広い。)

覚悟は決めて歩き出す。
こうなれば、もはや大仏とタイマンである。

中に入ると、大仏さん登場。
(大仏さんの写真撮影をしても良いのかどうかわからなかったので、パンフレットの写真。)

かなり大きい。
しかも、そのどデカイ大仏の周りを1メートルくらいの仏像が無数に配置されている。
圧巻の光景である。

パンフレットを見ると、無数の仏像は1,281体あるらしい。
千体以上の仏像・・・まさに、「無数の仏像」。
さらに、パンフレットを見ると、仏像の大きさが17.00mとなっていて、「奈良の大仏よりも大きい」と書いている。

なんと、本当に日本一大きな大仏である。

色々とわけが分からなくなってくる。
日本一の大仏は「奈良の大仏」だと学校で習って育ってきた。

しかし、私は、奈良の大仏よりも大きな大仏と現実に対峙している。
タイマンで・・・。

いまここに日本一大きな大仏が存在し、しかし、学校では奈良の大仏が日本一であると教えられる。

「なぜこの目の前にいる大仏はほとんど誰にも知られずにひっそりと存在しているのか?」
「なぜこの目の前にいる大仏は社会的にその存在を抹殺されなければならなかったのか?」

色々と考えを巡らせつつ、パンフレットを開くと大仏殿の近くに五重塔があると書かれている。
しかも、「京都の東寺の五重塔よりも大きい」と、、、つまり日本一大きな五重塔らしい。

マジかよ・・・。なんだここは・・・。

大仏殿をでると五重塔が見えたので歩いて行って登った。
もちろん、五重塔までの道のりの前後に参拝者も観光客もいない。
静寂の道のりである。

五重塔の最上階まで登ると、なんとついに先客が!!
若い男の子二人がベンチに寝そべってマンガを読んでいた。
(日本一高い五重塔のてっぺんで。)
意味わからん、、、スルースルー。

ある意味、ここでの読書は最高だろうな〜と思いつつ、写真をパチリ。

そこには福井県勝山市の気持ちの良い光景。
左下に見えるのが大仏殿。
(写真:お寺の向こう側に一般の家屋が点在しているので、家の大きさと比較すると大仏殿の大きさがわかるかも。)

相変わらず下に他の参拝者の姿は見えないが・・・。

結局、一つ一つの造形物は本当に素晴らしいものばかりで圧巻。
正直なぜ「廃墟化」しているか、さっぱり理解できないままこの山を降りた。

ちなみに、帰り際に受付の前を通ったら、一組だけ観光客が拝観券を買っていて「御朱印帳」を渡していた。
一応御朱印もあるみたいね・・・。

では、この大仏は一体なんなのか?

調べてみた所。
この大仏は「越前大仏(えちぜんだいぶつ)」と呼ばれ、近隣ではそこそこ知られているらしい。

大仏の大きさが日本一であるのも事実であり間違いない。
(坐像として、そして五重塔も)

では、なぜこの寺は廃墟化していたのか。
そして、なぜこの大仏は社会的に抹殺されているのか。

結論的には、その出自にあるようだ。

このお寺(大仏を含め)は、「多田清」という人物がビジネスで成功しその資材を投げ打って(総工費380億円)、昭和六十二年に立てたものらしい。
なるほど、かなり新しい建造物ということか。
でもって、私はこの多田清という人物を私は知らなかったが、大阪最大のタクシー会社「相互タクシー」の創始者だそうな。

つまり、由緒もなく歴史もないこの越前大仏は、社会的に抹殺されたのではなく、そもそも社会的・宗教的に認められていないということなのだろう。
文化財保護法でいうところの文化財にも含まれないから認定されないのかもしれない。
厳密にはどういう状況かは分からない。

ただ、そう考えるとこのお寺と大仏さんの荒廃っぷりというか廃墟っぷりに、ある程度の納得はいく。

歴史が浅く、宗教的な価値も薄い。
そうなってくると、どれだけ大仏が大きかろうと誰もありがたがらないわな〜。
奈良の大仏さんの持つ時代背景や物語・その壮大なる歴史と比べるなんておこがましいにも程があるレベルだろう。

やはり、「人の心を動かすにはモノではなく文脈(ストーリー)」なんだな、としみじみ。

とはいえ。

実際に目にすると圧倒される出来栄えだった。
仁王門、大仏殿、五重塔などの建造物や大仏を作った職人さんたちは、きっと魂を込めて作ったのではないのだろうか。
アレだけのものが、ちょっとやそっとで出来るものじゃないということは素人目にもわかる。

文脈が乏しく価値薄弱な大仏さんだけど、少なくとも彼(彼女?)にはなんの罪もない。
(なんか仏に罪っていう言う方も妙な感じだけど。)

そんな福井県勝山市の日本一大きい大仏さんは、
多くの人の目に触れることもなく、一人きりでひっそりと癒しの笑顔を贈り続けていた。

真の意味で俗世から離れ、心穏やかに人々の平和と繁栄を願っているのかもしれない。

このエントリーをはてなブックマークに追加

美容師とプログラマーに共通する「失敗するクライアントワーク」

先日、行きつけの美容室に髪を切りに行った時、サロンの店長さんと話した内容が少し印象的だったから軽くメモ。

基本的に、いつも髪を切ってもらいながら店長さんと話しているのは、日常的などうでもいいような話。
「あそこのコンビニのカラアゲが美味しい、あっちは美味しくない。」とか「あそこの角に、新しいカフェができるらしい」みたいな。

ただ、先日はいつもと違う話を美容師さんとしていた。

カットを終えて、セットをしてもらっている時の話

私:「(鏡を見ながら)こんなん言うのも失礼だと思うんですけど・・・、さすがの腕前ですよね〜。髪を切るの。」

店長さん:「(ハニカミながら)まぁ、もう十数年やってるプロですからね〜。」

私:「いや〜、いつも『全部おまかせ』で何も言わないのに、毎回上手にイイ感じに仕上げてもらえるから、すごいなーと思ってますよ。」

美容院でカットしてもらうけれども、髪型にあまり頓着しないので、いつも「店長さんにおまかせ」でカットしてもらっている。
(以前は、激安散髪屋とかも結構使ってたけど、髪の切れ端がガタガタだったり、左右揃ってなかったりと、「いい感じかどうか」という以前の「基本的な問題」が頻発したので、個人的に今の美容院に落ち着いた。)

続き。

店長さん:「実は、それって逆かもですねー。『おまかせ』してもらえてるから上手くできる部分もありますよ。」

私:「へぇ〜、そうなんですか?
でも、そもそも、店長さんくらいだったら、『今回のカットはダメだったなー』とか『納得いかないなー』なんて事は、ほぼないですよね??
失敗とかほぼ無いでしょ??」

店長さん:「うーん、そうですね~、なんていうか〜・・・・・、正直言うと、ありますよ(笑)。」

私:「え!?あるんですか?」

店長さん:「1年で軽く1000人以上カットしてますからね(笑)
そりゃ、ありますよね。。。。もちろん、まれに、ですけど!(笑)」

私:(確かに、一日平均5人カットして300日営業で、1500人か、、、たぶん、もっとだろうな・・・。そう考えると、凄い。。。などと、妄想しつつ・・・。)
「まぁ、確かにアレですよね・・・、毎日仕事してりゃ、風邪気味とか体調が悪いとか、そういう時もありますしね。人間だから仕方ないっていうか(笑)」

店長さん:「ははは、さすがにそれは関係ないっす(笑)
体調管理とか自己管理の問題であって、また別ですね。体調不良にならないようにすごく気を使ってます!接客サービスですからね、そこは重要ですよ。」

私:「じゃ、沢山髪切ってりゃ、そりゃ稀に失敗することもあるさ、っていう感じですかね?単に『確率論』的な?」

店長さん:「そういう感じじゃないですねー。実は、『失敗したなー』と感じる時とか、イケてない感じになる時って、ほぼパターンが決まってるんですよ。あくまでも僕の中で、ですけど。」

私:「ほぉ!失敗パターンってのがあるんですか、それって面白いですね!(興味津々)それってどういう時なんですか!?」

店長:「うーん、なんて説明したらいいですかねー、『お客さん自身がどうしたいのか、どうしたらいいのか分かってない時』っていうか『決めきれていない時』というか。そういう場合、たまに納得が行かない髪型になることがありますね。」

私:「でも、それって、僕も全く分かってないし、なーんも決めてませんよ??(だから、おまかせなわけで。)」

店長:「いや、お客さん(私)の場合は、『全部おまかせ』してくださるじゃないですか。
むしろ、その場合が、一番上手く行きます。一番チカラが発揮できるというか(笑)
そうではなくて、お客さん自身が、自分でどうしたいか分かってなかったりスタイルも決めてもいないけれども、カット中に都度都度、細かいスタイルのオーダーが入る場合ですかね。」

私:「『分かってないし、決めてもいないけど、注文が多い』ってことですか?
でも、細かいオーダーって普通じゃないですか?」

店長:「はい、それは普通ですよ〜。『お客さんがどうしたいか分かっていたり』『自分のスタイルやこだわりを持っている』時の細かいオーダーは、全く問題ないです。それに合わせて、僕もいい髪型に仕上げられます。」

私:「ですよねー。」

店長:「そうじゃない場合ですね・・・・『お客さんが何がしたいのか分かってない』場合ですー。
たとえば、髪型全体の事は置いておいて、『前髪の長さだけは残したい』という要望があった場合に、前髪の長さに合わせて、うまく全体を整えたところに、急に『どうしてもサイドは短くしたい』とかいう、チグハグなオーダーとか。
もちろん、お客様の要望に合わせて、最大限いい感じにカットを仕上げるわけですが、全体が整ってきた時にいきなり、なんていうか・・・、『全部の調和を台無しにするオーダー』が出ることがあります。
もちろん、こちらもプロですから一生懸命話をしたり提案したりしますけど、最後の最後は『お客さんの好み』を優先することになるので、『どうしたいのか良くわからない細かいオーダー』に答えているうちに、『これはさすがにいかがなものか?』という髪型になることがありますね。」

「で、結局、最後に私もお客さんもあまり納得いかない髪型ができているというダメなパターンです。」

「一言で言うと、『分かってないのに自分で決めたい』みたいな時ですかね。」

「何度も言いますけど、可能な限りイイ感じに仕上げる努力はします!でも、そういう時が、失敗する可能性は高くなります(笑)
しかも、序盤でヤバイ雰囲気を察します(笑)」

私:「なるほどぉ〜。
『自分自身がよくわかってないのに、細かくオーダーはする、自分で決めたい』ですか・・・。
なんか、全く交わりがないような他業種の店長の話なのに、なぜか、めちゃくちゃ共感しちゃいました・・・。」

という会話・・・。

これってクライアントワーク全般の話では?

いつも通り、「世間話の延長」くらいな気持ちで「美容院の店長さんが失敗するパターン」の話を聞いていたつもりだったんだけど。

この失敗パターンを聞いて、これってソフトウェア開発やWEB開発、デザインなど、自分のいる業界において、いつも問題なっている話そのものじゃないか!と。

そして、美容室とプログラマーという似ても似つかない業種同士であったとしても、同じ認識を持つってことは、おそらくその他の「クライアントワークに関わる全ての業種」にも通じるのではないか?と思ってしまった。

もちろん、この話は、プロと名乗ることができるレベルのスキルをキチンと持った人の話だとは思う。
経験不足の美容師やスキル不足のクリエイターが、失敗を自己正当化するために、「お客さんの要望が曖昧だったので〜」という話を引き合いに出すのはお門違いだろうと思うが。

どちらにしろ、「如何にクライアントと一緒に納得のいくものを作り上げるか」というモノは、どのようなクライアントワークでも最大の課題なのだろう。

ある意味、最近のWEB業界でのUXブームってのは、ここに一つの理由がある。
WEB・アプリ・サービスのユーザー体験を高めて、成果物の価値を最大化することができるってことが、1次的には言われるわけだけど。
実は、2次的な意味のほうもかなり重要だったりする。

制作へ丸投げではなく、設計にクライアントさんが参加することで、クライアント自身も深く考え、一つ一つ決定していくプロセスに関わる。
それによって、クライアントが十分納得の行く成果物になる。

この深い納得が得られるってのは、目に見えない価値を作る業界ほど、重要度がめちゃくちゃ高いしね。

そういう意味では、
サロンでも、WEB制作でも、「お客様と業者」という関係で物事を見るよりも、「一緒に価値を作るパートナー同士」と「両者が思え」たほうが、きっと上手く行く可能性が格段に上がるだろうね。
そして、それは、とても広く(いろんな業種に)通用するお話だと思う。

あと、社会的にみても、「提供者」と「被提供者」という文脈ではなく、「パートナー」と捉えたら色々な事がスムーズに行くことも沢山あるだろうな。
(お互いの意識が大事。)

ポエムお粗末様でした。

このエントリーをはてなブックマークに追加