$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$
はじめに
私達ハウインターナショナル(福岡県飯塚市)は、毎月月末の金曜日に社内ハッカソンを開催しています。
社名に引っ掛けて ハウッカソン と呼んでいます。
本日(2024-09-27)、私が取り組んだことをご紹介します。
私はElixirというプログラミング言語が好きです。
理由を挙げればキリがありません。
端的に言うと、「好きなものは好きなのです」これしかありません。
これ以上の理由が必要でしょうか。
hello_phoenix
今回、題材にしたhello_phoenixを説明します。
ElixirにはIoT開発に特化したNervesというフレームワークがあります。簡単にRaspberry Piなどのデバイス上で動かすことができます。
またElixirには、Phoenixという、これまたすんごいWebアプリケーションフレームワークがあります。
Nervesの上で、Phoenixのアプリケーションを動かしてみましょうという欲張りなことをするサンプルプロジェクト ── それが、hello_phoenixです。
データベースはSQLiteを使用してCRUDを楽しめるサンプルです。
実行環境
実行環境を記しておきます。
- macOS Sonoma 14.6.1
- Elixir: 1.17.2-otp-27
- Erlang: 27.0.1
- Nervesを楽しむためのセットアップ済
- Raspberry Pi 4
Elixirのインストールはいつも @zacky1972 先生の記事を参照しながらやっています。
常に最新版での手順を更新し続けられています。ありがとうーーーッ!!!ございます。
Run
READMEの通りにやればできました。
コマンドを羅列しておきます。
git clone https://github.com/nerves-project/nerves_examples.git
cd nerves_examples/hello_phoenix
export MIX_TARGET=rpi4
export NERVES_NETWORK_SSID=your_wifi_name
export NERVES_NETWORK_PSK=your_wifi_password
cd ui
mix deps.get
mix assets.deploy
cd ../firmware
mix deps.get
mix firmware
mix burn
以下、補足です。
-
MIX_TARGET
に指定する値はお使いのデバイスを指定してください-
rpi4
以外に指定できるものは、Supported Targets and Systemsをご参照ください
-
-
NERVES_NETWORK_SSID
とNERVES_NETWORK_PSK
の値はお使いのWi-Fiの認証情報で読み替えてください(Wi-Fiを使用せずにLANケーブルでネットワークに接続する場合は不要です) -
mix burn
コマンドはファームウェアをmicroSDカードへ焼き込むコマンドです -
mix burn
コマンドを実行するまえに、microSDカードを開発PCに差し込んでおいてください - ファームウェアの更新は
mix upload
で、Over the Airで更新することができます- ここで言う Over the Air とは、例としては、Wi-Fiで開発PCをネットワークに接続しているとして、Raspberry Piが同じネットワークにあると、開発PCから
mix upload
コマンドを叩くだけでRaspberry Piを一切触らずにファームウェアを更新できることを指しています - microSDカードをデバイスから抜かずに更新できるのでけっこううれしい開発体験です
- 仕組みが氣になる方は以下のドキュメントをご参照ください
- https://hexdocs.pm/nerves_ssh/readme.html
- https://hexdocs.pm/ssh_subsystem_fwup/readme.html
- SSHが使われています。ファームウェアには開発PCが持っている公開鍵が焼き込まれていて、秘密鍵を持っているPCからの更新要求のみを受け付けているというのがざっくりとした説明です。
- ここで言う Over the Air とは、例としては、Wi-Fiで開発PCをネットワークに接続しているとして、Raspberry Piが同じネットワークにあると、開発PCから
microSDカードにファームウェアを焼き込んだあと
こんがり焼き上がったmicroSDカードをデバイスに装着し、 迷わず 電源ONです。
10秒程度まったあと、 http://nerves.local にブラウザでアクセスしてください。
こんな画面が表示されるはずです
(mDNSという仕組みで(ちゃんと説明できない、ごめん🙏)で、nerves.local
でアクセスできるはずですが、うまくいかないときは arp -a
とかでネットワークに新しく接続されたデバイスのIPでアクセスを危ぶむことなく、踏み出してみてください)
CRUDを楽しむ!
http://nerves.local/users
にアクセスしてみてください。
Create
Createを楽しめます。
Read
Readを楽しめます。
Update
Updateを楽しめます。
Delete
Deleteをもちろん楽しめます。
Phoenixアプリの開発
さらに機能を追加したい場合には、このあたりを参考にして機能追加をしてください。
画面をここではお見せすることはできませんが、Phoenix LiveView Courseというオンデマンドのビデオ教材(つまり通信教育)で学んだ、景気のいい売上ダッシュボード(Snappy Sales)を組み込んだら、もちろん動かすことができました。
ランチ
福岡県飯塚市には、レイダックという、とてもおいしいハンバーガーショップ 🍔 があります。
ハウッカソンの日は、会社の経費で、ハンバーガーランチを食べています!!!
本当においしいです! 吉田松陰先生や坂本龍馬さんが長崎へ行く際にきっと立ち寄った、おそらく一泊くらいはしたはずの飯塚にお立ち寄りの際はレイダックのハンバーガーをぜひ食べてみてください!
さいごに
「Raspberry PiにRailsサーバーを立てて運用する」という記事を会社のメンバーが書きました。
それをみて、「Ruby on Rails ON Raspberry Pi OSももちろんいいですけど、hello_phoenixもいいですよ。ぜひこちら(Elixir)がわの世界へお越しください」と誘いました。
ちょっと待てよ、と。自分自身がhello_phoenixを動かしたことがないことに愕然としました。そこで、ハウッカソンで楽しんでみました。
ハンバーガーが本当においしかったので、そのこともお伝えしたく、記事をしたためました。
これからも、ハンバーガー片手に、NervesやPhoenix、つまりはElixirを楽しんで行きます!!!
そうそう、ビッグニュースがありました!!!
paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」というキャンペーンで、 @haw_ohnuma が最優秀賞(Apple Watch)を受賞しました
そして私もギリ!?、入賞(Amazonギフトカード500円分)を果たすことができました!
paizaさん、Qiitaさん、ありがとうーーーッございました!!!
闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。
$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$