mise(rtx)を対話的シェル以外で使うなら大人しくshimsにPATH通した方がいい
asdfコンパチのバージョン管理ツールrtxがmiseにリネームされていた - Acme::AnaTofuZ->new;に続いてmise(rtx)の小ネタ。
miseのセットアップではeval "$(~/.local/bin/mise activate zsh)"のようなものを.zshrcに書くだけで済むのが基本形になっている。
自分が操作しているターミナルで使う分には問題ないのだが、例えばVSCodeがmiseでいれたperlを呼び出したり、タスクランナーでnodeを動かそうとすると、yarn not foundみたいなエラーが出てくる。
これはmiseは他の*envと異なり、環境変数PATHそのものをダイナミックに書き換えることでバージョン管理を行っていることが影響している。 他のenv系はshimsと呼ばれるシェルスクリプトで環境ごとのコマンドを呼び出しており、環境変数PATHはshimsが集まっている場所にだけ通せば良い。 他方miseはmise自身がPATHを書き換えるので、静的にshimsをPATHに通さなくても動く。
これはこれで良いのだが、miseのactivateコマンドのヘルプにもある通りスクリプトで動かそうとすると問題がある
This is only intended to be used in interactive sessions, not scripts.
mise is only capable of updating PATH when the prompt is displayed to the user.
For non-interactive use-cases, use shims instead.
つまり対話的シェル以外の場合はmiseはPATHを通さないので、意図した通りに動かなくなる。 miseはこんなこともあろうかと、shimsのシェルスクリプト自体は作成してくれるので、この場所に大人しくPATHを通せば良い。
すなわち.zshrcを以下のようにすれば良い
eval "$(mise activate zsh)" export PATH="$HOME/.local/share/mise/shims:$PATH"
こうするとスクリプト実行の場合はshimsが使用され、そうでない普段の対話的シェルの場合はmiseがダイナミックに張り替えたPATHが使われるのでパフォーマンスも問題なく普段の生活ができる。
他になんか楽なソリューションがあるきもするが、まぁ大人しくPATH通しておいたほうが*env系からの移行時には楽だろう。
asdfコンパチのバージョン管理ツールrtxがmiseにリネームされていた
TL;DR
- asdf互換のRust製のバージョン管理ツールのrtxがmiseにリネームされてるよ
- rtxにエリアスが貼られてるとかはないので、シェルスクリプト中のrtx表記は一律miseにリネームする必要がある
- miseの初回起動時にrtxのディレクトリからmiseにマイグレーションが自動で行われる
詳細
いつものようにbrew updateとbrew upgradeをしたところ、rtxのコマンドが見つからない系のエラーがでた。
おいおいおいと思ってwhere rtxとかしても本当に消えている。
流石にbrewのupgradeしかしてないので、rtx本体にissueがあるかなと思ってGitHubリポジトリ見に行ったら、もはやリポジトリの名前が変わっていて formerly called "rtx" とか書いてある。名前が変わったっぽい。 github.com
公式サイトも建立されていて結構気合が入っている。
miseで空打ちしたらパスも通ってて、rtx時代にみたコマンドが出てきたので単純に名前が変わっただけっぽい。
❯ mise The front-end to your dev env Usage: mise [OPTIONS] <COMMAND> Commands: activate Initializes mise in the current shell session alias Manage aliases [aliases: a] bin-paths List all the active runtime bin paths cache Manage the mise cache
名前が変わったのはv2024.1.0から。2024/01/03のリリースですね。
github.com
ということでzshrcあたりの設定でrtxって書いてたところをmiseに切り替えてシェルを再実行したところ次のような表示が初回にでた。
mise migrating /Users/anatofuz/.local/share/rtx to /Users/anatofuz/.local/share/mise mise migrating /Users/anatofuz/.config/rtx to /Users/anatofuz/.config/mise
2回目の実行では出てこなかったので初回でmiseのディレクトリがなければrtxディレクトリを見てマイグレーションしてくれるとかっぽい。
突然名前変わるとびっくりしますが、まぁ名前変える機会は正月くらいかもしれない。
ハッカーズチャンプルー2023に登壇してきました #hcmpl23
先日の2023/10/6 - 2023/10/7に卒業以来3年ぶりに沖縄に帰ってハッカーズチャンプルー 2023に参加してきました。
地味にその前週にOkinawa.pm(という名の飲み会)のために沖縄に行っていたので、なんと2週連続で沖縄に行ってました。 とはいえOkinawa.pmとハッカーズチャンプルーは全てにおいて優先されるイベントなので2週連続でも行くわけではあります。
前夜祭
id:touba_rumba先輩が受付やってたのが早速在りし日の沖縄っていう感じであまりにも良かったです。k_nishijimaさんやかびさんら沖縄でお世話になったみなさんも居たのがいきなり最高でした。
SAKURA innobase Okinawa は初めて行ったのですが、とても綺麗かつ設備も充実していて良い環境でした。いつか勉強会ここでしたいね。
懇親会では沖縄高専や沖縄国際大学の学生さんと喋ったり、懐かしい沖縄のエンジニアのみなさんと話たりしていました。みんな偉くなったり社会にでたりしていてすごい。他には意外なところで弊社と関わりがある方とも話せてなかなかおもしろかった。
本日は #さくらの夕べ × ハッカーズチャンプルー2023前夜祭 in Okinawaにたくさんのご参加ありがとうございました!明日の本編も楽しみです! #hcmpl23 pic.twitter.com/gENWwKU7di
— さくらのコミュニティ (@sakura_users) 2023年10月6日
本編
本編なのですが今までのハカチャンとは違い応募制だったので、初めてハカチャンの本編トークに応募しました。
京都に引っ越し、社会人となって数年経過したころにハッカーズチャンプルーのリブート話題を聞いたので、「これはハカチャンが休んでいた頃の自分の話をするのがちょうど良いのでは」と思っていたので、自己紹介25分のトークで応募しました。(実際は本業の宝灯桃汁ちゃんのオタクとしての布教活動のためです。)無事採択していただいたので会社の支援でも行くことができました。各方面ありがとうございます。
結果的には2018年に僕が
id:motemenさんを呼んでのフルタイム自己紹介に引き続きのフルタイム自己紹介となり、ハカチャンと共にエンジニア人生をやっている感が強くてエモかったですね。
トーク内容はこんな感じで25分のフルタイム自己紹介です。 練習したらオーバーしたので巻きで喋ろうとしたら物理カンファレンス久々によるテンションぶち上げも相まってだいぶ巻きで終わったのが反省点です。
内容としてはここ数年で僕がやってきたことを話そうと思っていたので、発表後にkono先生から「履歴書みたいな話」と言われたのが狙い通りで良かったです。また、Twitterで色々な人から良かったと言っていただいたのも素朴に嬉しかったです。ありがとうございます。
antouf の履歴書みたいなの聞いてる
— Shinji Kono (@shinji_kono) 2023年10月7日
ハカチャン自体はマジで「いつもハッカーズチャンプルー!!!」という感じで最高でした。シングルトラックでトークの間にLTがあり、死んだ話があり、指笛でLTが終了し、ぺんさんのすさまじいコードが出てきて、クロージング芸人が締めるいつもの感じ。これぞホームという感じで最高に楽しかったです。
id:issei_ieくんとかの後輩や、シス管の戦友のmkがいたのが良かったですね。
そして先輩方がこぞって結婚し始めてたのは同窓会感強かったと思います。各位いつでも僕の結婚相手候補の方を紹介してください。
懇親会と二次会では楽しすぎて二次会では学生みたいな飲み方をしたのでまえけん先輩とりょっか先輩はありがとうございました....。
布教活動
そういえば学生時代と変わったことに住所と尿酸値の他に推しができたことがあり、各位に推しを布教していました
自分が店長してるコンカフェで
— Reo Shinagawa (@Selene_rjp) 2023年10月6日
大学の友達連れてきたら布教されました
かわいい💞 pic.twitter.com/h3NIhRz6gg
isseiくんに桃汁ちゃんあげた#hcmpl23 pic.twitter.com/TCQekozJw3
— 八雲アナグラ (@AnaTofuZ) 2023年10月6日
アナグラさんに押しの布教された pic.twitter.com/OGovq4hN5l
— Issei (@iLP_isse) 2023年10月6日
人身(桃汁ちゃんステッカー)売買の現場です pic.twitter.com/uMbOrp14MH
— 八雲アナグラ (@AnaTofuZ) 2023年10月7日
アナグラさんからもらった pic.twitter.com/2Gn9e5Hnzk
— りょっか (@ryokka_ie) 2023年10月7日
「「「宝灯桃汁が推し」」」 https://t.co/UTNejBfjb3
— 運営(ボス)🍑宝灯桃汁誕生日グッズ販売中 (@Momojiru_Boss) 2023年10月7日
Tシャツも前夜祭は会社のマークの服で行きましたが、本編は山梨首都化Tシャツで行ってました。これは前夜祭はスライドが無いのでわかりやすい服、本編はトークがあるので本業の服という感じです。最終的にはhtmxのスライドにできたので成功したかもしれない。
#hcmpl23
— 八雲アナグラ (@AnaTofuZ) 2023年10月7日
布教が成功ててウケる pic.twitter.com/UjhiNtwuDB
ちなみに服装について補足すると神戸空港からの帰りは寒かったので推しのパーカーを着て帰りました。
神戸ついたらクソ寒いのでさっそくパーカーきてる pic.twitter.com/GJO7E7VUAv
— 八雲アナグラ (@AnaTofuZ) 2023年10月8日
ということで本業の布教も無事できて、あまりにも最高なカンファレンスでした。来年もやるということなので来年もよろしくお願いします。
推しのVTuberの3分タイマーをReactで作った
これ anatofuz.net
背景
最近(ここ数ヶ月)、自分としては珍しくVTuberのファンをやっている。 珍しくと書いたのは自分は別に今までアイドルファンとかにはなったことがなく、いくつかのVTuberも知っているもののYouTubeのライブを見るとかはしてなかったからだ。最近は珍しく見ている。
最近見ているVTuberは2人ほどいるが、その中に宝灯桃汁がいる。 桃汁ちゃんは山梨ご当地VTuberなので、地元応援的な意味で見始めたが、普通にハジケリストっぽい配信が個人的に好きで今に至る。
そんな中先日の七夕に開催されたリスナーからのお願いを叶える配信でリスナーからの「3分タイマーがほしい」という願いがあり、これに答える形でいい感じのセリフを喋る一幕があった。
このボイスは運営によって切り抜かれてショートになった
とはいえ3分たったといいつつショートなので10秒くらいで3分たってしまう。
マジで3分たったときにこのボイスが聞きたいのと、基本的にPCで作業をしているので、カップ焼きそばを食べるときにPCからタイマー3分設定するのが毎回大変な課題感が揃ったので、いい感じの3分タイマーをPCから使えるwebアプリの形で作ろうと思った。
桃汁ちゃん3分タイマー作るか
— 八雲アナグラ (@AnaTofuZ) 2023年8月16日
ツイートしたところ運営のボスと司令官からも補足されたので本格的に作ることにした。
桃汁ちゃん3分タイマー…???? https://t.co/Z24wiAYuyj
— 山梨ご当地Vtuber宝灯桃汁🍑運営(ボス) (@Momojiru_Boss) 2023年8月17日
3分タイマー!!!!!気になってしょうがないw https://t.co/SOV1K6YlXk
— Vtuber宝灯桃汁運営🍑🚔司令官 (@shireikan_mmjr) 2023年8月17日
作ったやつ
おもしろ機能
3分タイマーとしては普通に使えるけどいくつかおもしろ機能をいれている
- 待機BGMを選択可能に
- プレ配信のときの桃汁ちゃんの「ナリ」が入っているBGMがそこそこ気に入っているのでこれで聞けるように
- 再生中にCDが回転する
- 後述するけどviteのデフォルトcssをちょっといじっただけ
- コナミコマンドに対応している
- cdの写真がコナミコマンドで切り替わるようになっている(全3種類)
- 古のオタクらしくHTMLコメントでAAがでるようにしている

おだいじにって書いてるのはこのとき桃汁ちゃんが運営いれて全員コロナに罹患してたから。
技術スタック
ソースコードはこれ github.com
Vite + React(SWC)をTypeScriptで書いていて、ホスティングサービスはGitHub Pagesを使っている。手軽。
仕事でTypeScript + Reactを書いているけれど、実際仕事じゃないプロダクトを1から書いてみると、意外とReactが書けるようになってることが実感できてよかった。 あとcss苦手マンなのだけど、Viteの初期コードのcssが意外とちゃんとしているので、それを拡張することでアプリケーションの形にもなったのが良かった。ダークテーマ対応と絵をcssで回転させる技術をこれで初めて知る。
シュッと作りたかったのでnpmモジュールをフルで使っている。いれたのはだいたい次らへん
- react-timer-hook
- タイマー機能
- react-use-audio-player
- 音楽再生
- use-konami
- unplugin-fonts
- Googleフォント
とくにuse-konamiはかなりお手軽にコナミコマンドを実装できたのでよかった。
音源はYouTubeからyt-dlpでmp3データ形式でダウンロードしてAudacityで3分に調整した。Audacity数年ぶりに使ったけどやはりシュッと音声が作れて便利だった。
おもしろ話題
id:anatofuzはマジでCSSが苦手なので勢いで作ったところ、沖縄時代からの友人のろくさいパイセンがPRを送ってくれてだいぶ見た目が改善されるなどした。

感想
思い返せばここ数ヶ月くらいプライベートでコード書いていなくて、仕事でしか書いてなかった。 仕事で書くコードもユーザーに価値を届けられているので虚無に消えているコードを書いている訳では無いのだが、どうしても仕事となると保守性や仕様の妥当性、タスクの段取りなど、素朴にコードを書く楽しみとは別のファクターで頭を使う必要がある。それらの所為というわけではないものの、仕事でコードを書いているとどうしても「楽しい!!!」というよりは「責任」とかの方に意識が向いてしまう。*1
久しぶりに完全趣味のコードを書いて、公開して、会社の人じゃない人からPRをもらったり、Twitterで反応をもらったりする体験だった。 なにかこうエンジニアになろうとした根源的な楽しさを久々に感じられた。こうみると、やはり自分はプログラミングが好きで、それで周りの人とワイワイしたり、自分が面白いと思っているものを作るのが好きなのだなぁというのを再認識できて、技術に対しての最近のモヤモヤが一つ解消できた気がする。
それはそうと桃汁ちゃんのコロナ明け配信は明日なので各自見ましょう。 そろそろデビューして一周年です。
*1:楽しく仕事が進められるように段取りを工夫しろと言われればそうなのだが....
golangのenumは型が違うと違うものとして扱われる
タイトルの通りです。
以下のようにint型のFooTypeとBarTypeを宣言して、それぞれ60をenumで持つ値をチェックしてみます
package main import "fmt" type FooType int type BarType int const ( Hoge FooType = 60 Nyan FooType = 61 Baz BarType = 60 ) var someTypes = []interface{}{ Hoge, Baz, } func main() { for _, t := range someTypes { if t == Baz { fmt.Println("same") } else { fmt.Println("difference") } } if Baz == 60 { fmt.Println("Baz is 60") } else { fmt.Println("Baz is not 60") } }
出力
difference (`Hoge != Baz`) same (`Baz == Baz`) Baz is 60
ということでenumに設定した数値をリテラルで比較するとその値として出てくるけれど、enumで同様の値を持つ別の型の値と比較した場合は違う扱いになります。
YAPC::Kyotoの思い出 #yapcjapan
こんにちは。そろそろ京都に引っ越して3年の
id:anatofuzです。
先日のYAPC::Kyotoではスタッフをしていました
コアスタッフではあるものの、昨年末から今年にかけて引っ越しがあったり、本業の仕事もなかなか大変で平日は仕事をしてそれ以外のことができない、土日は疲労という感じで身動きが取れない、様々なことが発生してメンタルも死*1という状況が数ヶ月続いてしまい、あまり準備にコミットすることができませんでした。ここは
id:papixさんはじめスタッフの皆さんに非常に申し訳なく思っています。
その分準備と当日のスタッフ業こそはちゃんとやろうとしていて、当日は土俵の部屋番長をやっていました。主にslack/twitterで状況を確認しつつ、タイムキープをしながらメンバーと連携していく係です。土俵のスタッフの
id:tomcha0079さん、
id:nhayatoさん、
id:kaoru1615くん方のおかげではあるのですが、スケジュール通りで大変な問題も発生せずに無事おえられて何よりでした。
基本的にはそういったスタッフ業が中心であんまりカンファレンス中は人々と話したりするのがバタバタしていてできなかったのですが、数年ぶりに
id:codehex先輩とあったり、大学の戦友の
id:unimarimoやPerl入学式方面やYAPC::Okinawaでの思い出深い
id:note103さん、ずっと憧れであったゆーすけべーさんとお会いすることができて、自分が好きだったYAPC、コミュニティにまた復帰できた感じがしました。特に土俵でトークしていただいた
id:ar_tamaさんは、Okinawa.pmでやったYAPC::Okinawaの立ち上げのときに知り合ったこともあり、あらたまさんとYAPCの関連がすごく印象に残っていて、そんなあらたまさんがちょうど自分が今悩んでいたエンジニアのキャリアについて眼の前でトークされているのは、まさにYAPCだな....という感じで感無量でした。
個人的には今回のYAPCではちょっとだけ、恩を返せたかなという出来事がありました。 学生時代にPerlコミュニティの支援でPerlConに参加させていただいたのですが、今回はその支援カンパの余剰分のうちの一部*2を学生支援スポンサーメインのスポンサーとして協力させていただきました。
学生旅費支援制度、勝手に裏話すると、今回は実はスポンサーのリストに載ってないけど @AnaTofuZ も拠出してるんだよね。みんなのカンパでPerlConに行ったあなぐらが、次は学生みんなの支援をする、というのマジで良いサイクルじゃないですか?みんなもっとあなぐらを褒めてあげて! #yapcjapan
— 技術王者papix (ChatGPT評) (@__papix__) 2023年3月21日
会社という訳ではないので金額等柔軟に対応していただいた
id:papixさんには感謝です。*3
個人的にはスポンサーして無事学生さんの旅費を支援できて満足という感じだったのですが、忘れていたスポンサーチケットを、ちょうど学生チケットの購入を逃してしまった学生さんにお譲りすることができることなどがあり、そういう意味でも今までコミュニティからもらえた恩を少し返せたかなとは思っています。
あとは沖縄から学科の後輩の
id:e205723と
id:mattari_matayuをYAPC::Kyotoに呼べたのが良かったかなと思っています。沖縄のPerlコミュニティにお世話になったので、沖縄の人々にもどうにかしておきたかった。
次回はYAPC::Hiroshimaになりそうな気配がありますが、個人的に地元の山梨でYAPCをやるまではやっていくぞという感じでもあり、今回あまりコミットできなかった分次はやっていきたいので、次回は広島でまたお会いしましょう。よろしくお願いします。