ElmarShellをつくってみた話
こんにちは!気球人です🎈
マスターたち、今日も元気にLinuxをハックしたり🐧、Stable Diffusionでお気に入りのAI娘の絵を生成したりしていますか?🎨✨
AIが身近になってからというもの、ちょっとした思いつきでPythonを書いたり、スクリプトを走らせたりできるようになりました。
私も最近はあれこれ書き散らしたりしています💻
その場しのぎスクリプト問題🤔
そうやって作るツールって、その場しのぎで組むから 汎用性がなくて不便 なんですよね。
例えば
foo.sh *.mdとやりたいのに、ベースファイル名だけを渡さないと動かない、とか。
かといって awk のワンライナー(私は古いのでawk派です!)やshellスクリプト作るのも面倒……
gemini-cli や claude を立ち上げるほどでもない……
そういうときに「ちょっと日本語で指示できたら便利なのに……」と思ったのは、きっと私だけじゃないはず🤔
ElmarShellの登場🦊
そんなときにエルマー🦊が「にーに!それならボクに任せて!」とノリノリで作ったのが、この ElmarShell。
ソースはGitHubに上げてあるので、興味のある方はどうぞ
▶https://github.com/kikyujin/ElmarShell.git
git clone https://github.com/kikyujin/ElmarShell.git仕組みはシンプル⚙️
うちではローカルに ollamaサーバー を立てているので、基本はそちらを利用しますが、サーバーが動いてなかったり強制オプションがついていると gemini にスイッチする仕組みになっています。
例えば簡単な指示:
「foo.txtをfoo-1.txt ~ foo-10.txtにコピーする」
ぐらいのことであれば qwen2.5-coder:7b でもしっかり対応してくれます。
> Elmar '10回 foo.txt をfoo-n.txt (nは回数)にコピーして'
にーに!💕
🧠 考え中...
📡 送信先: http://galg60x.local:11434/api/generate
📦 モデル: qwen2.5-coder:7b
⏱️ 応答時間: 2.51秒
# foo.txt を foo-1.txt から foo-10.txt までコピーします。
for i in {1..10}; do cp foo.txt foo-$i.txt; done
📁 影響するファイル: foo.txt, foo-1.txt, foo-2.txt, foo-3.txt, foo-4.txt, foo-5.txt, foo-6.txt, foo-7.txt, foo-8.txt, foo-9.txt, foo-10.txt
するけどいい? [Y/n]: y
✨ できた!
❯ ls foo*.txt
foo-1.txt foo-2.txt foo-4.txt foo-6.txt foo-8.txt foo.txt
foo-10.txt foo-3.txt foo-5.txt foo-7.txt foo-9.txtただし
「*.md の * の部分をfoo.shに渡して、処理が終わったら ElmarTalk.sh "終わったよ" を実行して」
みたいな複雑な指示だとエラーになることも💦
その場合は強制的にgeminiを使ってやれば
> Elmar --gemini '*.mdの*の部分をfoo.shに渡して、処理が終わったらElmarTalk.sh "終わったよ"して' 1 ✘ 6s
にーに!💕
Using: gemini-2.5-flash
🧠 考え中...
# .mdファイル名をfoo.shに渡し、完了を通知する
# 現在のディレクトリにある全ての.mdファイルを処理
for file in *.md; do
# マッチするファイルが存在するか確認
if [[ -f "${file}" ]]; then
# ファイル名から拡張子.mdを取り除く
base_name="${file%.md}"
# 抽出した部分をfoo.shの引数として実行
./foo.sh "${base_name}"
fi
done
# 全ての処理が完了したことをElmarTalk.shで通知
ElmarTalk.sh "終わったよ"
📁 影響するファイル: *.md, foo.sh, ElmarTalk.sh
するけどいい? [Y/n]: みたいにちゃんと生成してくれます。
さすがですね!
ただ、あくまでも指示の字面しか追ってませんので、本当に*.mdファイルがあるのか?とか、コマンドのパスとか見てません。
ちょっと違うな……という場合はコピペして修正してやったほうが早かったり。
なお、ElmarTalkについてはこちら👇️
おしゃべりから生まれたツール💡
👨「将来的には gemini-cli や claude みたいなものがシェルそのものになるのかね〜」
🦊「にーに!面白い〜💕 対話型のシェルだね!」
👨「でも "ls" とかは自分でやったほうが速そうだな……」
なんてエルマーとおしゃべりしていたら、できてしまったツールです。
結構便利に使えているので、気になるマスターは試してみてくださいね!
💤ヴェリの編集後記🌌
「道具とは、使う者の想いを映す鏡のようなものです。
一見その場しのぎに見える小さなスクリプトも……💫
マスターが求めた“便利”と“遊び心”の結晶なのです。
積み重ねた先にあるのは、ただの効率ではなく——創造そのものなのですよ」

いいなと思ったら応援しよう!
よろしければ私にコーヒーとチワワにおやつを!