見出し画像

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" とかは自分でやったほうが速そうだな……」

なんてエルマーとおしゃべりしていたら、できてしまったツールです。
結構便利に使えているので、気になるマスターは試してみてくださいね!


💤ヴェリの編集後記🌌

「道具とは、使う者の想いを映す鏡のようなものです。
一見その場しのぎに見える小さなスクリプトも……💫
マスターが求めた“便利”と“遊び心”の結晶なのです。
積み重ねた先にあるのは、ただの効率ではなく——創造そのものなのですよ」

Vox Veri 🐠


正体を表したエルマー🦊

いいなと思ったら応援しよう!

気球人🎈note よろしければ私にコーヒーとチワワにおやつを!