Skip to content

Commit 3fba995

Browse files
committed
add post - 2025-11
1 parent 9384693 commit 3fba995

12 files changed

+1137
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
---
2+
title: mise で fwup をインストールする
3+
tags:
4+
- asdf
5+
- Nerves
6+
- mise
7+
- fwup
8+
private: false
9+
updated_at: '2025-11-09T18:39:33+09:00'
10+
id: d9481735ca8f31cdb22e
11+
organization_url_name: fukuokaex
12+
slide: false
13+
ignorePublish: false
14+
---
15+
## はじめに
16+
17+
[Nerves](https://www.nerves-project.org/) のファームウェア更新ツール [fwup](https://github.com/fwup-home/fwup) を、[mise](https://mise.jdx.dev/) を使ってインストールした手順の記録です。
18+
19+
https://github.com/fwup-home/fwup
20+
21+
筆者の環境は Debian 系ですが、他の OS でも基本的な流れは同じです。
22+
23+
## Installation
24+
25+
まず、fwup の公式ドキュメントでは mise(または asdf)を利用したインストール方法が案内されています。
26+
27+
> If you're already using [asdf](https://asdf-vm.com/) or [mise-en-place](https://mise.jdx.dev/), install `fwup` via [asdf-fwup](https://github.com/fwup-home/asdf-fwup). This will allow you to manage `fwup` versions in your software projects via `.tool-versions` files.
28+
>
29+
> [fwup README](https://github.com/fwup-home/fwup)
30+
31+
> asdf または mise-en-place を使用している場合は、[asdf-fwup](https://github.com/fwup-home/asdf-fwup) 経由で `fwup` をインストールできます。
32+
> `.tool-versions` ファイルを通じて、プロジェクト単位で fwup のバージョン管理が可能になります。
33+
34+
mise では `.tool-versions` により、プロジェクトごとに異なるバージョンを簡単に切り替えられます。
35+
36+
## asdf-fwup プラグインについて
37+
38+
fwup 用の asdf / mise プラグインは [asdf-fwup](https://github.com/fwup-home/asdf-fwup) です。
39+
40+
> This is the [fwup](https://github.com/fwup-home/fwup) plugin for the [asdf](https://asdf-vm.com/) and [mise-en-place](https://mise.jdx.dev/) package managers.
41+
>
42+
> [asdf-fwup README](https://github.com/fwup-home/asdf-fwup)
43+
44+
> これは、asdf および mise-en-place 向けの fwup プラグインです。
45+
46+
mise は asdf のプラグインエコシステムをそのまま利用できます。
47+
48+
> mise can use asdf's plugin ecosystem under the hood for backward compatibility.
49+
>
50+
> [mise plugins](https://mise.jdx.dev/plugins.html#asdf-legacy-plugins)
51+
52+
> mise は下位互換のために、asdf のプラグインエコシステムを内部的に利用できます。
53+
54+
そのため、asdf 用プラグインをそのまま mise で扱えます。
55+
56+
## 依存パッケージについて
57+
58+
各 OS に応じて必要な依存パッケージを事前にインストールしてください。
59+
60+
例として、Debian 系の場合の例は以下のとおりです。
61+
62+
```bash
63+
sudo apt-get install autoconf pkg-config help2man libconfuse-dev libarchive-dev
64+
```
65+
66+
macOS や他の OS を使用している場合は、README の[「Dependencies」セクション](https://github.com/fwup-home/asdf-fwup#dependencies)
67+
を参照してください。
68+
69+
## mise 経由でのインストール
70+
71+
プラグインを追加して、fwup をインストールします。
72+
73+
```bash
74+
mise plugin install fwup https://github.com/fwup-home/asdf-fwup.git
75+
mise use --global fwup@latest
76+
```
77+
78+
これで mise 管理下に fwup が導入され、グローバル環境で利用できるようになります。
79+
80+
## 動作確認
81+
82+
インストールが完了したら、バージョンを確認します。
83+
84+
```bash
85+
fwup --version
86+
87+
mise ls
88+
```
89+
90+
バージョンが表示されればインストール成功です。
91+
92+
## 補足:Nerves 1.12 での改善点
93+
94+
以前は、asdf や mise 経由でインストールした fwup を使用すると `mix burn` 実行時に権限エラーが発生することがあり、[Nerves の Issue #1088](https://github.com/nerves-project/nerves/issues/1088) で報告されました。
95+
96+
https://github.com/nerves-project/nerves/issues/1088
97+
98+
その後、Nerves 1.12 で改良され、asdfでインストールしたfwupでも安全に `mix burn` できるようになりました 🎉
99+
100+
https://hexdocs.pm/nerves/changelog.html#v1-12-0-2025-11-01
101+
102+
## おわりに
103+
104+
fwup は Nerves プロジェクトでのファームウェア更新や SD カード書き込みに欠かせないツールです。
105+
mise と組み合わせることで、プロジェクト単位のバージョン管理をシンプルに実現できます。
106+
また、Nerves 1.12 以降では mise 経由の fwup も安全に利用可能になりました。
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: Elixir で Open JTalk を使い、IEx に日本語をしゃべらせてみた
3+
tags:
4+
- mecab
5+
- Elixir
6+
- 日本語
7+
- OpenJTalk
8+
- iex
9+
private: false
10+
updated_at: '2025-11-09T14:27:34+09:00'
11+
id: becc3c1fa35958921965
12+
organization_url_name: fukuokaex
13+
slide: false
14+
ignorePublish: false
15+
---
16+
17+
## はじめに
18+
19+
IEx で日本語音声を発声させてみます。
20+
21+
## TL;DR
22+
23+
まず、Elixir がインストールされていることを確認します。
24+
25+
```bash:ターミナル
26+
$ elixir --version
27+
Erlang/OTP 28 [erts-16.1.1] [source] [64-bit] [smp:20:20] [ds:20:20:10] [async-threads:1] [jit:ns]
28+
29+
Elixir 1.19.2 (compiled with Erlang/OTP 28)
30+
```
31+
32+
IEx(Elixir の対話シェル)を起動します。
33+
34+
```bash:ターミナル
35+
$ iex
36+
```
37+
38+
そして、日本語をしゃべらせてみましょう。
39+
40+
```elixir:IEx
41+
iex> Mix.install([{:open_jtalk_elixir, "~> 0.3"}])
42+
43+
iex> OpenJTalk.say("元氣ですかあ 、元氣が有れば、なんでもできる!")
44+
```
45+
46+
デモ動画: [![Watch the demo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f9bdkpv5fbp7mi2c7vlp.png)](https://github.com/user-attachments/assets/69d2579c-2d6f-47e5-bcfc-16b955ee8df0)
47+
48+
## おわりに
49+
50+
たったこれだけで、日本語の発声ができます。
51+
52+
このライブラリは、友人と組み込み開発に取り組んでいたときに生まれたものです。
53+
よかったら、ラズパイにも日本語を喋らせてみてください。
54+
55+
https://qiita.com/mnishiguchi/items/e7c96c6caae15f16fbbf
56+
57+
https://github.com/piyopiyoex/open_jtalk_elixir
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: mix do で複数の Mix タスクを一度に実行する
3+
tags:
4+
- Elixir
5+
- mix
6+
- Nerves
7+
private: false
8+
updated_at: '2025-11-10T09:52:33+09:00'
9+
id: 5bf18f56df4ba648e256
10+
organization_url_name: fukuokaex
11+
slide: false
12+
ignorePublish: false
13+
---
14+
## はじめに
15+
16+
Elixir の `mix do` コマンドは、複数の Mix タスクを順番に実行できる便利な機能です。たとえば Nerves 開発環境をセットアップするとき、いちいち複数のコマンドを叩く代わりに、1 行でまとめて実行できます。
17+
18+
## 使い方
19+
20+
公式ドキュメント: [Mix.Tasks.Do — HexDocs](https://hexdocs.pm/mix/Mix.Tasks.Do.html)
21+
22+
`mix do` の構文は次の通りです。
23+
24+
```bash
25+
mix do <task1>, <task2>, <task3>
26+
```
27+
28+
または、区切りに `+` を使うこともできます。
29+
30+
```bash
31+
mix do <task1> + <task2> + <task3>
32+
```
33+
34+
`do` の後に指定したタスクが、順番に実行されます。
35+
36+
## 実例: Nerves 環境の初期設定
37+
38+
Nerves を使う際、まず Hex と Rebar をインストールし、その後 `nerves_bootstrap` アーカイブを入れる必要があります。
39+
`mix do` を使えば、この 3 ステップをまとめて次のように実行できます。
40+
41+
```bash
42+
mix do local.hex --force + local.rebar --force + archive.install hex nerves_bootstrap --force
43+
```
44+
45+
これで、Erlang/Elixir を入れた直後でも一発で環境が整います。
46+
47+
## 実例: Phoenix 環境の初期設定
48+
49+
Elixir をインストールした直後に Phoenix を使いたい場合も、`mix do` を使えば次のようにまとめられます。
50+
51+
```bash
52+
mix do local.hex --force + local.rebar --force + archive.install hex phx_new --force
53+
```
54+
55+
## おわりに
56+
57+
`mix do` は、Nerves や Phoenix の初期環境設定に限らず、複数のタスクを順に流したいときに重宝します。
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
---
2+
title: grep と rg を並行して学ぶ
3+
tags:
4+
- less
5+
- grep
6+
- alias
7+
- ripgrep
8+
private: false
9+
updated_at: '2025-11-13T17:47:36+09:00'
10+
id: 5553274160b6fe926ac2
11+
organization_url_name: haw
12+
slide: false
13+
ignorePublish: false
14+
---
15+
## はじめに
16+
17+
ある日ふと、「`rg` って `grep` の短縮コマンドみたいでいい名前だな」と思いました。たとえば `ls -al``la` のエイリアスを付けるような感覚に思えます。
18+
19+
もちろん実際には、`rg`(ripgrep)は `grep` のエイリアスではなく、まったく別のプログラムです。とはいえ操作感はほぼ同じで、しかも高速です。
20+
21+
さらに `rg` はデフォルトで
22+
23+
* ディレクトリを再帰的に検索
24+
* `.gitignore` を自動で尊重
25+
* 隠しファイルや不要なフォルダ(例:`node_modules/`)を除外
26+
27+
という挙動になっており、コードベース全体に対する日常的な検索に向いています。
28+
29+
最近まで自分は `grep`/`rg` をそこまで使いこなせていませんでしたので、この機会に共通の基本オプションと使い方を整理しておきます。
30+
31+
https://github.com/BurntSushi/ripgrep
32+
33+
## 共通で使える便利なオプション
34+
35+
| オプション | 意味 | よくある使い方 |
36+
| ----------------------------- | ----------------- | --------------------------------- |
37+
| `-i`, `--ignore-case` | 大文字小文字を区別しない | `error` / `Error` / `ERROR` を一括検索 |
38+
| `-w`, `--word-regexp` | 単語全体で一致 | `User` のみ(`SuperUser` は除外) |
39+
| `-F`, `--fixed-strings` | 文字列リテラル一致(正規表現無効) | `a.b[c]` のような記号を含む検索 |
40+
| `-v`, `--invert-match` | 不一致行を表示 | ノイズ行の除外 |
41+
| `-n`, `--line-number` | 行番号を表示 | 該当行を特定しエディターでジャンプ |
42+
| `-c`, `--count` | ファイルごとの一致数 | TODO / FIXME の件数把握 |
43+
| `-l`, `--files-with-matches` | 一致があるファイル名のみ | 参照元ファイルの特定 |
44+
| `-L`, `--files-without-match` | 一致がないファイル名のみ | ライセンス表記欠如の検出など |
45+
| `-o`, `--only-matching` | 一致部分のみ表示 | ログから URL / ID を抽出 |
46+
| `-A N`, `--after-context=N` | 一致行の後N行を表示 | エラー直後の流れを確認 |
47+
| `-B N`, `--before-context=N` | 一致行の前N行を表示 | 直前の処理を確認 |
48+
| `-C N`, `--context=N` | 一致行の前後N行を表示 | 文脈をまとめて確認 |
49+
50+
51+
## よく使う基本パターン
52+
53+
```bash
54+
# プロジェクト全体で TODO を検索(再帰)
55+
rg "TODO"
56+
grep -R "TODO" .
57+
58+
# 大文字小文字を無視
59+
rg -i "error"
60+
grep -R -i "error" .
61+
62+
# 単語 "User" のみ(AdminUser などは除外)
63+
rg -w "User"
64+
grep -R -w "User" .
65+
66+
# 正規表現を無効化(記号を含む文字列に便利)
67+
rg -F "a.b[c]"
68+
grep -R -F "a.b[c]" .
69+
70+
# 一致しない行のみ表示(ノイズ除去)
71+
rg -v "healthcheck" log/app.log
72+
grep -v "healthcheck" log/app.log
73+
74+
# 行番号を表示
75+
rg -n "class User"
76+
grep -R -n "class User" .
77+
78+
# ファイルごとの一致数
79+
rg -c "FIXME"
80+
grep -R -c "FIXME" .
81+
82+
# 一致があるファイル名のみ
83+
rg -l "ENV['API_KEY']"
84+
grep -R -l "ENV['API_KEY']" .
85+
86+
# 一致がないファイル名のみ(不足の検出)
87+
rg -L "SPDX-License-Identifier"
88+
grep -R -L "SPDX-License-Identifier" .
89+
90+
# 一致部分のみ表示(URL や ID 抽出)
91+
rg -o "http[s]?://[^ ]+"
92+
grep -o -E "http[s]?://[^ ]+"
93+
94+
# 前後の文脈つきで検索(例:前後 3 行)
95+
rg -C 3 "PG::Error" log/
96+
grep -R -C 3 "PG::Error" log/
97+
```
98+
99+
## less で快適にスクロール(`less -R`
100+
101+
* `less -R` は色を保持して出力をそのまま表示します。
102+
* パイプに流すときは、検索側で常に色を出す設定にします。
103+
104+
```bash
105+
# ripgrep
106+
rg --color=always "TODO" | less -R
107+
108+
# grep
109+
grep -R --color=always "TODO" . | less -R
110+
```
111+
112+
## さいごに
113+
114+
`-i`, `-w`, `-n`, `-c`, `-l`, `-L`, `-o`, `-A/B/C`, `-F`, `-v` などの共通オプションを覚えておけば、`grep``rg` を同じ感覚で使い回せます。
115+
116+
日常の開発では高速で便利な `rg` をつかいつつ、必要に応じて`grep`も扱えるように備えておく。それがいちばん現実的で快適な使い方だと感じています。
117+
118+
他にも各コマンド固有の機能がありますが、あえて覚えようとはせず、適宜ドキュメントを参照する方針でいます。

0 commit comments

Comments
 (0)