おはこんばんにちは、 2023年12月に入り、寒さが身にしみています。いかがお過ごしでしょうか!
NervesJP のポジローです。
#NervesJP のアドベントカレンダーの隙間を埋めようとしたことを若干、若干ね、後悔しています。
などと弱音は吐きますけど、始めていきましょう!
本記事は、 Nerves 開発の際にうっかり忘れがちなことを機械的にサポートする tips を紹介します。
MIX_ENV の設定忘れ
MIX_TARGET
は設定しないとターゲット用のファームがそもそも作れないので忘れないのですが、 MIX_ENV
の設定を忘れてしまうことがあります。
プロダクションとして出すファームウェアは必ず MIX_ENV=prod
で出したいです。それは prod
と dev
で config
が異なったり、 prod
はファームウェアサイズが小さくなるように Nerves で工夫されているからです。dev
で作っても出さなければ問題ないですが、作り直すのも手間ですし、間違えて作ったことに「イーーー」っとなるのも嫌です。
これはなんとか仕組みでカバーしたいです。
Aliases を使う
mix には 現在のプロジェクトに固有のショートカットやタスク
を作るための Aliases があります。
これが使えます。ちょっと試しに使ってみます。
mix nerves.new hello_aliases --target rpi4
cd hello_aliases
mix deps.get
[好みのエディター] mix.exs
で mix.exs を開き、編集します。
...
def project do
[
app: @app,
version: @version,
elixir: "~> 1.11",
archives: [nerves_bootstrap: "~> 1.12"],
start_permanent: Mix.env() == :prod,
deps: deps(),
releases: [{@app, release()}],
preferred_cli_target: [run: :host, test: :host],
aliases: [hello: &hello/1] # この行を追加
]
end
# 以下を追加
defp hello(args) do
Mix.shell().info(Enum.join(["Hello" | args], " "))
end
...
追加ができたら保存して、シェルで呼び出してみます。
mix hello
Hello
mix hello pojiro
Hello pojiro
hello
タスクができました。
Aliases で mix firmware
のラッパーを作る
Aliases を使えば、既にある mix firmware
のラッパーを以下のように作ることができます。
...
def project do
[
app: @app,
version: @version,
elixir: "~> 1.11",
archives: [nerves_bootstrap: "~> 1.12"],
start_permanent: Mix.env() == :prod,
deps: deps(),
releases: [{@app, release()}],
preferred_cli_target: [run: :host, test: :host],
aliases: [firmware: [&env_prod/1, "firmware"]] # この行を追加
]
end
# 以下を追加
defp env_prod(_args) do
:ok = Mix.env(:prod)
end
...
として、mix firmware
を実行すれば
export MIX_TARGET=rpi4
mix firmware
...
* [Nerves] validating vm.args
* skipping runtime configuration (config/runtime.exs not found)
* creating _build/rpi4_prod/rel/hello_aliases/releases/0.1.0/vm.args # prod で生成
Updating base firmware image with Erlang release...
Copying rootfs_overlay: /home/pojiro/Sandbox/hello_aliases/_build/rpi4_prod/nerves/rootfs_overlay
Copying rootfs_overlay: /home/pojiro/Sandbox/hello_aliases/rootfs_overlay
Building /home/pojiro/Sandbox/hello_aliases/_build/rpi4_prod/nerves/images/hello_aliases.fw...
Firmware built successfully! 🎉
Now you may install it to a MicroSD card using `mix burn` or upload it
to a device with `mix upload` or `mix firmware.gen.script`+`./upload.sh`.
prod
で生成できています🎉
まとめ
簡単なプロジェクト固有タスクは Aliases を使えば、簡単に作れるよ!という tips でした。
便利なオレオレタスクを作りたい時に便利です。
寒くなってきているので、体調に気をつけて健康に過ごしましょう💪💪💪
それではまた!