hogashi.*

日記から何から

git gitをgitにするgit alias

 なんかの拍子に思考が割り込むとこうなりがち。

$ git git status
git: 'git' is not a git command. See 'git --help'.

The most similar command is
	init

 .gitconfig で alias すると解決できる。 git のサブコマンドじゃなく外部コマンドとして git を実行し直すことにする。 Git - Git エイリアス

[alias]
  git = !git

 こうなって便利。

$ git git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

 ちなみに別プロセスとして実行され直すようなので、 ps を見るとたくさん出現する。例えば $ git git git git git log とか実行しているとこうなって面白い。

git git git git git log中のプロセスの様子
$ ps u
USER      PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
hogashi 47840   0.7  0.0 435310272  14368 s003  Ss    3:46午後   0:00.11 -bash
hogashi 49413   0.0  0.0 435300624   1936 s002  S+    3:49午後   0:00.00 /bin/sh -c /opt/homebrew/share/git-core/contrib/diff-highlight/diff-highlight
hogashi 49412   0.0  0.0 435312640   8512 s002  S+    3:49午後   0:00.01 /opt/homebrew/opt/git/libexec/git-core/git log
hogashi 49411   0.0  0.0 435304480   7152 s002  S+    3:49午後   0:00.01 /opt/homebrew/opt/git/libexec/git-core/git git log
hogashi 49410   0.0  0.0 435305184   7136 s002  S+    3:49午後   0:00.01 /opt/homebrew/opt/git/libexec/git-core/git git git log
hogashi 49409   0.0  0.0 435304384   7152 s002  S+    3:49午後   0:00.01 /opt/homebrew/opt/git/libexec/git-core/git git git git log
hogashi 49408   0.0  0.0 435304912   7280 s002  S+    3:49午後   0:00.02 git git git git git log
...

自動で曲のBPMを一定にしてHouse remixをつくるアプリケーションをGemini/Claudeに書いてもらった

 年末年始の時間をちょっと使って、自動で曲の BPM を一定にして House remix をつくるアプリケーションを Claude に書いてもらっていた。 https://github.com/hogashi/house-remix-engine

 まだ手元で実行する形でしかやっていないものの、それなりに動いている。 FFmpeg と Node が入っていればいいっぽい。アプリケーションを立ち上げると、 HTTP サーバが起動して、素朴なアップロード画面が出てくる。好きな mp3 をアップロードすると BPM が揃い、 remix もできる、というものを目指している。

 今のところ BPM を揃えるほう (quantize と言うらしい) はそれらしくなっている。まさに指定した BPM になっているわけではないが、 BPM のぶれが小さくなり、指定した数字に近い BPM になっているように見える。
 remix をつくるほうは、用意したドラムループを付け足すだけの簡単なつくりなのだけど、ちゃんとリズムがあっているとまあそれらしく聞こえはする。ただリズムをあわせるのが至難の業っぽく、 BPM の正確な推定もうまくいっていないし、拍子の切れ目がどこかを見つけることが全くできていない (3拍目から始まる曲とかだとその分普通にずれる)。

 しかし FFmpeg の無限のオプションを全く知らずに、できてない、こうなってて変、と言うだけでだんだんオプションを修正したりしてそれらしくなっていくので、学習されたモデルがえらいものだなと思う。それでも、時たま「さっきまでやってたこれはすっかりやめて別のアプローチに」と言いだし、人間が待てを差し込む必要がある (差し込めば軌道修正できるのでよくできてはいる)。
 ここまで書いている通り、コードの内容を細かく見てはいない。やっとります、という表示をぼんやり眺めたり、何も見なかったりしながら、結局動いたかどうかだけでやっている。元来こういうものは調べながら自分でやりたいものだけど、そうやっているといつも全然出来上がらないので、諦めて肩代わりさせている。

 最初はブラウザで Gemini にやり方を聞いていた。「簡単な方法と複雑な方法」を紹介され、ふーんと思って canvas モードでシュッと書いてもらった。よく読むと、複雑なほうは複雑なのでやりませんと言っていて、せっかく計算の速い計算機でやっているのに妥協していてもったいなかった。言って複雑なほうを実装してもらった。
 途中からブラウザからコピペするのが面倒になって、ターミナルで Claude を起動して交代した。 1行でごく簡単に経緯を説明するだけで、 package.json や README を用意し、実装も直していってくれた。実際の動作は人間が mp3 ファイルを聞く必要があるので、 npm start してもらうところまで任せ、人間が mp3 をアップロード/ダウンロードして、どうなっているかフィードバックする、という作業になった。

 特に BPM を一定にするという部分ができると、 70s くらいの曲を DJ で流すときにとても助かるな〜というのが原初のアイデア。おそらく世間には BPM を一定にしたり remix をつくったりするソフトウェアが存在して、みんな使っているのだろうと思うのだけど、それらも技術によってなされていることなので、実装したらできるのかな? (できるはずだな?) というのが今回の動機。あとそういうソフトにお金を払う前に、どれだけのものができるか試したかった。*1
 試した結果、まあまあのところまではできることがわかって納得。 BPM 一定化技術としては、曲を細かく切ってから伸ばすか縮めるかしてくっつけるということをやっていそう。テンポの推定が具体的にどういう技術なのかは npm パッケージを読むとわかりそう。
 remix は世間に色んな (AI を使った) サービスが存在するので、みんな何か頑張っていそう。既存の曲などの学習次第なんだろうか。コーディングのように、部分的に人間が関与する余地があると嬉しい気がする。

 あと AI を会話しながらやっていったときの、会話の様子をうまくブログなどに残したいとき、みなさまがどうしているのか気になる。そのまま貼るには長すぎるし、体裁も空白が多くて変なので……。


 はてなエンジニア Advent Calendar 2025 - Hatena Developer Blog 36日目の記事でした。

*1:一応書いておくと、僕は音楽ジャンルなどの細かいことをあまり知らずに BPM 一定化とか House remix とか書いてこういうことをやっていますが、音楽を頑張ってやっていっている人には敬意を持っています。こうして難しさを目の当たりにすると、それがなおさら大きくなるな〜と思えました

Claudeに3000番ポート使ってるプロセスを確認して停止してもらった

 たま〜にやる、 netstat だっけ? lsof だっけ? とかなる作業を Claude にやってもらった。 lsof -i はアドレスを指定できるらしい。

 -i [i]
      selects the listing of files any of whose Internet address matches
      the address specified in i.  If no address is specified, this
      option selects the listing of all Internet and x.25 (HP-UX)
      network files.
      (snip)

 やり取りはこんなの:

> なんかやったときのプロセスが残ってそうで、3000番ポートがあいてない。プロセスを確認して

⏺ 3000番ポートを使用しているプロセスを確認します。

⏺ Bash(lsof -i :3000)
  ⎿  COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
     node    55491 hogashi   15u  IPv6 0xXXXXXXXXXXXXXXXX      0t0  TCP *:hbci (LISTEN)

⏺ 3000番ポートでnodeプロセスが動いています:

  - プロセス: node
  - PID: 55491
  - ユーザー: hogashi

  このプロセスを停止する場合は、以下のコマンドを実行できます:

  kill 55491

  または、強制終了する場合は:

  kill -9 55491

  プロセスを停止しますか?

> y

⏺ Bash(kill 55491)
  ⎿  (No content)

⏺ Bash(lsof -i :3000)
  ⎿  Error: Exit code 1

⏺ プロセスを停止しました。3000番ポートは現在空いています。

 ブレインスリープ ピロー | BRAIN SLEEP OFFICIAL SITE を実店舗に見に行った。(金額が)高い枕を実際に試せるのはありがたい。ストレートネック直す用枕とかも教えてもらって気になったのだけど、寝返りが少し難しくなる感じで心配は心配だったので、結局普通のを買った(少ししたら届く)。店員さんから色々話を聞けたのがよくて、つぶれてきたら40〜50度のお湯で戻せるのだけど50度以上でやるとふにゃふにゃになるので注意、とか教えてもらえた。寝具を長いスパンで少しずつ買い替えるフェーズにある。

 よしなに貼り付けるChrome拡張機能Haruyoshiを公開しました - hogashi.* をやった後、まったくメンテのモチベがない。全部 Claude に書かせたらコードの詳細がわからないので一から読むことになるのだけど、全然読む気にならない、 issue 立てたら勝手に直しておいてほしいと思う。
 こうならずにうまく勉強の機会とするには歯を食いしばってやるしかないのか考えたい。 vibe coding はどうやったら面白くなるのか?

よしなに貼り付けるChrome拡張機能Haruyoshiを公開しました

 Chrome 拡張機能 Haruyoshi を公開しました。よしなに貼ることができます。まだ試しに実装した程度なので自己責任のもとお使いください (なんか変だったら消してください) 。

chromewebstore.google.com

 URL とタイトルをリッチテキストでコピーしたあとの、各サイトでの貼り付けの形式を設定できます。例えば、 MDN Web Docs を貼り付けるとき:

  • GitHub では [MDN Web Docs](https://developer.mozilla.org/ja/) で貼り付ける
  • はてなブログでは [https://developer.mozilla.org/ja/:title=MDN Web Docs] で貼り付ける
  • Cosense では [MDN Web Docs https://developer.mozilla.org/ja/] で貼り付ける

……とかを設定しておくという意味。 [{{title}}]({{url}}) みたいなテンプレートを書けるので、好きな形式にもできます ([{{title}} - {{url}}]({{url}}) とか URL: {{url}} とか) 。
 リッチテキストでコピー、の部分は cocopy - Chrome Web Store などで各自頼みます、という姿勢です。

設定画面

 cocopy を使うときにやっている「各サイト向けの形式でコピーする」から連想して、「貼り付けるときに勝手に各サイト向けの形式で貼り付けられる」はできるのか? を試したくてつくりました。勢いで Claude に書かせたところなんとなくできあがったので公開してみました。

 ただ、今試したらはてなブログの貼り付けモーダルが出なくなるようでした。たぶん貼り付けイベントを遮って色々やってるせいだと思うんだけど、ちょっと直さないといけなそう。全体的に Claude に書かせているせいで実装の詳細を知らない状態なので、ちゃんとコードを見ないと詳しいことがわからなくて、こんなことではコードを書く体力も勉強をする体力も失われていくので、なんかうまく知識を吸収したい。