見出し画像

【後編】プログラミングを部屋に例える

前回の更新から随分時間が経ってしまいました。告知通り、

"ラズベリーパイを使って、PS4のtorne(トルネ)を音声で起動する"

レシピを公開したいと思います。何度も引用しますが、基本はこちらのままです。

【0.分かる人はこのリンクを読めばOK!】

こちら以外にも、いくつもの記事を参考にしましたが、最終的にはこの内容に落ち着きました。しかし!何度も言うように、僕はプログラミングもLinuxもラズベリーパイも、『ずぶの素人』。略して、"ズブシロ"。習うより慣れろで始めた経緯を、追って紹介します。

【1.Amazonでラズベリーパイ3 B+ を買う】

初回の記事で書いたように、まずはこちらを買いました。ヨドバシとかでは売っていますが、手っ取り早いのでAmazonでスターターキット購入。

現在の最新版は、ラズベリーパイ4です。けれど、調べているうちに、

・消費電力が多い
・高性能ゆえに放熱も凄いので、冷却対策が必要
・一般的に3bが、使用率が高く、参考資料も多い

以上の理由により、3bになりました。スターターキットは、必要なものが全てパッケージされているので、迷わずこれ。とはいっても、

・HDMI接続のディスプレイ
・有線マウス(無線も可能)
・有線キーボード(無線も可能)

は、別途用意する必要があります。無線LANモデルもあるので、お家のWi-Fiにすぐにつなぐことはできます。

【2.MacからラズベリーパイOSをインストールする

昔は、インストールするのも大変だったようですが、2020年3月に楽になったようです。まずはこちら。

公式のダウンロードツールです。確かに簡単でした。SDカードをMacに入れて、フォーマットしてから、OSをインストール。SDカードリーダーを持っていないよ!という人は買いましょう。

マイクロも、普通サイズのSDカードも読み込める、USB-C接続のカードリーダーです。

【3.ラズベリーパイ初期設定】

無事に最新のOSをSDカードに書き込めたら、ラズベリーパイ本体にディスプレイとキーボードとマウスを接続して、作業を開始します。手順はこちら。

何度も言うよ。本当に、ここに助けられました。例の”黒い画面と英語”にも、ここから慣れていきましょう。

「本当に何も分からない!!!」という方は、とにかく上記のリンク内容は理解できるようになるまで勉強が必要でしょう。もしくは、丸々真似をして進める。むしろ、

考えるな!従え!

です。

【4.Node Redのインストール】

Node-Red 公式ページから下記のリンクをコピーして、ラズベリーパイのターミナルに入力すると、最新のNode.jsとnpm,Node-Redをインストールできます。これが一番手っ取り早いです。

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

さぁ!ややこしくなってきました!!!

「急におまえ、分かった風に『Node.js , npm , Node-Red』とか言い出したな!」とお思いでしょう。そうです。全然分かっていません(笑)

ただ、分かることが一つあります。これらは、

"たくさんのプログラムを詰め込んだ”パッケージ”と呼ばれるもの" です。

パソコンのOS部分や、アプリケーション類は、こういった”パッケージ”をいくつも連携させて動いているものと理解をしてみて欲しいです。

【余談・例え話】

記事のタイトルにもしましたが、今から変な例え話をします。先ほどのNode-jsなども”パッケージ”のプログラムであり、その内部には様々な機能が含まれています。古くはホームページを造るのに、HTMLやJavaスクリプトなんて言葉がありました。もちろん、今もそれらは動いています。これを家に例えます。

OS = 一戸建て or 集合住宅 
○○パッケージ = 寝室
△△パッケージ = リビング
◇◇パッケージ = 浴槽・洗面台・キッチン

例えば上記のような内容だとします。

「新しい家を造るぞー!」と言っても、近頃は、基礎工事が終わると外部で作成した外壁や内容部品が運び込まれてきて、一瞬で新築住宅ができてしまったりします。これって、プログラムに似ていませんか?という話です。

ラズベリーパイというOS(=住宅)に、Node-Redという(=リビング機能)をインストールして、今回の目的であるPS4を起動するというプログラムを完成させたいわけです。リビングという”パッケージ”には、リビングっぽいソファや、テレビ、椅子・机、などの要素がパッケージされて付いてくるというイメージです。

”寝室”というパッケージをインストールしたら、ベッドと、手元ライトはインストールされていそうですよね。

それぞれは、独立した部屋ですが、一つの住宅にインストールされることで、居住空間というプログラムが完成します。

なぜ、こんなことを思うに至ったかというと、次のプログラムをインストールした時に、思いついたのです。

【5.PS4-wakerをインストールする】

ps4-waker とはネットワーク経由でラズベリーパイのコンソール上からPS4を操作できる npm パッケージです。

この言葉の意味、分かりますか?僕は最初、分かりませんでした。

項目4でインストールした ”npm”というプログラムがあります。それを土台として動くパッケージプログラムが、今回の主役でもある"PS4-waker"なのです。”寝室”という区分の中にある、”ベッド”という道具だと思ってください。この関係性の把握が大事。

*話がそれますが、PS4-wakerのインストールは Root権限で行ってください。
su
と入力してから、パスワードを入力すれば、管理者権限でインストールを実行できるようになります。これが分からずに、なんどもユーザー権限でPS4-wakerのインストールを試みましたが、エラーが返ってきて、1週間以上停滞しました。その間に、沢山の寄り道と時間を使いました。

 さて、無事に、管理者権限でPS4-wakerをインストールしたのですが、エラーがでました。

core-js2.6.5 

こちらのプログラムが古くてサポートしてないから、VersionをCore-js3以上にしたものをインストールしてくださいよ!と英語で言われます。

Core-jsのインストールは

npm install -g core-js@3.6.5 

これでOK。このあたりも、行き詰まって部分でした。

PS4-wakerを動かすのに必要な、Core-jsというプログラムを手動で、Version3以上にしなさいというのは、ズブシロにはハードルが高いです。

こんな記事も読んだのですが、頑張って読み込もうと思っても、専門用語でサンドイッチされて、ズブシロにはきついのです。その中で現れた、【依存関係】という言葉。

Aというプログラムは、Bのプログラムと依存関係がある

なんのこっちゃ?でしょう。

もう一度、住宅の例えに戻ります。

『風呂場とトイレは、共通の水道設備を使用しているので依存関係にある』

としたら、どうでしょう?日常生活で使う言葉ではないですが、さっきよりは理解度があがりませんか?

キッチン・リビング・寝室・浴室。これらの中で、水を使用するのは、キッチンと浴室という“パッケージ”ですが、その設備が旧時代のもので、新しい規格にバージョンアップしないと、生活に支障がでる不具合があるよ!と言われている感じです。少なくとも、僕はそのように理解しました。

こうして考えると、コンピューター内部におけるプログラムは、持ちつ持たれつの関係性にあると言えます。職業エンジニアの方に言わせれば、「何を当然のことを!」と怒られるかもしれませんが、ズブシロは、そういう点からして、ずぶの素人なのです。全ての作業を終えた後に、こういう点について気づいて、言語化するに至りましたが、分からない渦中にいたときは苦しかったです。

さて、この記事で一番伝えたいことを説明できました。

PS4-wakerのインストールが終わったら、黒い例の画面でコマンドを入力すれば、PS4が起動したり、特定のアプリケーションが遠隔で起動できるようになります。これは、結構感動的でした。詳しい手順は、記事冒頭の 0(ゼロ)のリンクを参照してください。

【6.音声操作のために】

Node-Red Alexa Home Skill Bridgeを設定します。

自分自身のアカウントを作成して、これから音声操作をしたい機器の登録を行ったり、Alexaアプリに検出させたりという作業をします。

【7.Node-RED エディタで処理フローを作成する】

ラズベリーパイ本体を起動して、黒い画面ではなく、ビジュアルのアイコンを操作して指示をプログラムする、Node-Redを起動します。

スクリーンショット 2020-08-24 22.23.14

何年も前から憧れていた Node-Redの完成したフロー図。

「アレクサ!トルネをつけて」と言えば、動くようになっています。

一つずつが、node(ノード)と呼ばれるプログラムです。それらをつなげることで、指定のプログラムを動かすことが出来るという意味で、コマンド入力だけのプログラムよりも、視覚的に捉えることができるので、多方面で採用されているようです。しかし、自分は、基礎のことよりも、とにかくPS4が起動できればよかったので、細かいことは無視!

では、ひとつずつのnodeの内容を添付します。

<Swithchノード>

スクリーンショット 2020-08-24 22.27.38

<Changeノード上>

画像3

これで、トルネが起動します。書くPS4アプリをインターネットで検索すると、CUSA____以下の数字が分かりますので、それを入力するだけ。msg.payloadとか意味が分からなくても、真似しておきましょう。

<Changeノード下>

画像4

プレステ消して!トルネ消して!と言うと、スタンバイ指示が起動します。

<execノード>

画像5

ここのコマンド部分に、シェルスクリプトを導入する方法、というのがあって、一時期調べたのです。当然ズブシロなので、シェルスクリプトという単語も初耳です。追加のプログラムファイルという感じなのですが、結果的には、上記のようなシンプルな内容で、シェルスクリプトは不要でした。

あとは、すべてのノードを選択して、コピペすることもできるので、

CUSA01065  : Youtube
CUSA00442 : トルネ
CUSA00130 :  Amazonプライム

など 登録すればOK。里崎チャンネル(野球)や、B-life(ヨガ)ですが、どちらもYoutubeが起動するだけです。本当は

「アレクサ!Youtubeをつけて!」

が、できればいいのですが、ビデオアプリが有効になっていません、と言われてエラーが出てしまいます。これは、もっと優先順位が上の部分でアレクサが認識してしまうので、Node-Redからの指示は、通らないのでしょう。

この辺の上下関係も、今はなんとなく理解できるようになりました。

さて、これで、完了。あとは、忘れずにデブロイ(英: deploy 「配置する」)をして、自宅になるアレクサスピーカーに

「アレクサ!トルネをつけて!」で起動すれば、大成功!です。

どうでしょう?

改めて書いてみると、なんてことない過程に思えてきます。けれど、これらを理解して、運用するまでに3週間かかりました。ですが、やはりやってみてよかったと思えます。

プログラムというものが、”特別”なものではなく、以外と、我々の生活の中に息づいているものという意識が生まれました。これは、今回の体験がなければ気づけなかったことです。

【まとめ】

後半は駆け足になりましたが、それは(面倒になってきた(笑)だけではなく、この世界の情報は偉大なる先人の切り開いた世界になりたっているとも言えます。

とにかく、本当に分かりやすくて、詳しい解説は、冒頭の0(ゼロ)に書いたものです。その上で、そういった情報を組み合わせて、自分の血肉にしていった結果が、今回の自分の経験であり、このnoteでまとめた内容です。

どうか、これがまた、まだ見ぬ誰かの為になることを願っております。

長々とお付き合いいただき、ありがとうございました!


あなたの生活にお役に立ちましたら、ご協力いただけると幸いです!