ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

Julia言語 雑感(2026年4月)

はじめに

今年もひのき花粉にやられまくっている今日この頃, 少し遅れましたが,今月も孤独ミーハー系Julia言語ユーザーの独断と偏見による雑感をお送りします。

2026年4月のTIOBE Index,Julia言語の順位は32位

今月もいつものTIOBE IndexのJulia言語の順位の紹介です。

Julia言語の2026年4月の順位は32位。Ratingは0.5%でした。 Ruby,Lua,Lispのすぐ下というのは 個人的には比較的納得感のある順位だといえるのではないでしょうか。

Julia言語 v1.12.6リリース

julia Discourseの記事によると, Julia言語 v1.12.6が4月11日にリリースされたようです。

それ以前のバージョンでは色々と謎の挙動とかあったようですが今回は直っているでしょうか?

XLSX.jlが個人レポジトリからJuliaDataに移管

ここ最近,XLSX.jlgithubのJuliaDataに移管しました。 ということで,この1ヵ月かなり更新が進んでいるようです。

まだ内容の方はチェックできていませんが,色々な機能が追加されていると思います。 逆に言うと今まで動いていたものが動かなくなる可能性もある訳で,ここしばらくは個人的に目が離せないといった感じかと思います。

Kaimon.jl(Julialang MCP Server)

AIエージェント等にJulia言語を実行させるためのMCPサーバーを簡単に構築するためのパッケージです。 「Kaimon.jl」と日本語のもじりなのが面白いです。

まだ内容の方は確認できていませんが,AIエージェントからJulia言語を実行させるための 仕組みとして便利に使えるのではないかと思います。

とはいうものの自分は全然AIを利用したコーディングエージェントとか,まだ全然使いこなせていません。

さいごに

だんだんと興味が薄れてきて,いつ書かなくなるかというような感じではあるのですが, 何とか今月も書くことができました。 とはいってもわりと気まぐれなので,気が向けば多分何か書くでしょう。多分。

ubuntu雑感(2026年4月)

はじめに

いよいよubuntuの26.04のリリースも目前に迫った今日この頃, 家のPCも25.10にアップグレードすることなく今日まで来てしまいました。

そのため,5月の始めぐらいには26.04にアップグレードしたいところですが, まぁこの約1年間もよく変な感じになりました。

もう覚えていないことも多いのですが,とりあえず覚えている範囲で思い出して書いたり, してみたいと思います。

Mozc問題

個人的に利用している環境(ibus-mozcの最新を自分でビルド)

基本的に自分の場合はubuntuの素のGnomeを利用,かつ漢直利用のため最新のMozcを利用する必要あり との理由から,ibus-mozcの最新版を自分でビルドして利用しているといった現状です。

漢直(t-code)を利用するメリットとしては,

  • かな漢字交じり文入力への入力に対するMozc本体側の変換機能の修正の影響が少ない (というかほとんど漢字を直接入力しているのであまり変換しない)
  • 変換のほとんどは「交ぜ書き変換」を利用しているが,交ぜ書き変換辞書はユーザー辞書で 登録しているため,本体側の影響をあまり受けない

ということで,最近よくx.com等で見る,最近のMozcの変換ときたら…ということは一切ない, という感じです。

ただ,漢直を利用している限り,かな漢字交じり文がうまく入力できないのをIMEのせいにはできない (自己責任)ので,うまくいかないことを自分以外の人や物のせいにするようなメンタルの 現代人の皆さんにはおすすめをしていません。

26.04のmainからibus-mozcが外れかけた問題

yahooのリアルタイム検索とかでも 話題になっていましたが,26.04のレポジトリからMozcが外されそうになったようですね。

自分もubuntu mozc packageを見た時の Resolute Raccoonのところがrelease(main)ではなくblock-Recommendedとかになっていて, あ,こりゃリリースされんのかな?とか思っていましたが, 何とかメインのパッケージとして維持されそうな感じです。

後の経緯とか見ると,gtk2に依存する部分があったようですね。 そこを解消(具体的にはgtk3.0にポート)するパッチを有志の方が作成してmainを維持できたようです。

関係者の尽力に感謝ですね。

なお,mozcの最新版はgtkではなくqt6に移向しているので,自分でビルドする時は問題なさそうですが, とにかくソースがメインにないことには話にならないので,本当に良かったです。

gtk4でなくていいのか?という話もあるのですが,Gimpがまだgtk3を利用しているので, ubuntuでのgtk3のサポート切れは当分先になるかと思います。

Gnomeとibus-mozcとGnome以外とFcitx5-mozc

ubuntuの場合,Gnome以外を利用する時は,ibusではなくFcitx5-mozcを利用することがいいかと思います。

GnomeというかGtk利用の場合は明確なWaylandコンポジターがある訳ではなく, mutterを経由してWaylandの処理を行うので,それ以外の環境では ibusを利用するメリットはあまりない,という感じではないかと思います。

また,mozcのビルドシステムが完全にbazelに移行してしまっていて, この動的なビルドシステムが現在のdebianやubuntuのビルド環境と非常に相性が悪いということもあり, ある時点での対応で止まってしまっています。

より新しいMozcをDebianでも使いたい に書かれている通りです。

なお,fcitx5-mozcを自分でビルドしたい,ということであればfcitx5-mozcあたりを 参考にすればいいのではないかと思います。自分はあまり確認できていませんが。

VirtualBoxとHWEカーネル

NVIDIA製のグラフィックカードを使っていて,そのドライバを使っているとだいたい,半期に一度の新しいバージョンのubuntuが出るたびに,HWEカーネルのバージョンが上がって, Virtualboxのカーネル依存部分のdkmsのビルドが失敗して色々問題を起こす,というのを繰り返していました。

私の場合,家のPCはHWEカーネル,会社のPCは元のカーネルを利用していて,家のPCは結局Virtualboxの最新を 利用して,会社のPCは標準のaptのパッケージを利用する,といった感じで利用しています。

基本的には「ソフトウェアとアップデート」の「追加のドライバー」の中から「検証済み」がついているものを選ぶという方針です。 ただ,会社のPCはサーバーモードのドライバ(NVIDIA製のグラフィックカードを画面表示には利用しない)を利用しているので, 「検証済み」が出てこず,なるべくそれまでに使っているバージョンの最新版を使う方針で処理していました。

ログイン可能な場合は基本的にこの設定画面からいけそうなのを選んでアップデートして再起動するぐらいで,改善することが多いです。

NVIDA製ドライバのあれこれ

NVIDA製ドライバを利用していると,サスペンドしたら画面がぐっちゃになるのでおちおちサスペンドさせられません。 ただ,今はちょっとやそっとではサスペンドしない設定になっているので,現在は直っているのかもしれませんが,真相は自分ではよく分かっていません。

また,会社で利用しているPCのようにサーバーモードのNVIDAのドライバを利用する時は, バージョンが上がる毎にXサーバーがデフォルトになったりして (実際は画面表示にNVIDIAのグラフィックカードを利用していないにもかかわらず) かなり変な動作をします。

この辺りは「そういうものだ」という感じで,問題が起こった時に対処療法的な対応をしています。

とにかくNVIDA製ドライバを利用していると苦労は尽きないのですが, サスペンド問題以外は特に困ったことはないですし,サスペンド問題も最近はサスペンドさせないので, 今となってはあまり問題として認識していない感じです。

ibus-mozcを自分でビルドする方法(ubuntu系)

以前に説明 したこともあるのですが,とりあえず必要な項目を以下のスクリプトっぽいものにまとめました。

最新ではなく,現時点での最新のタグ3.33.6133版をビルドするものになります。

#!/bin/bash

# 必要なパッケージのインストール
sudo apt install build-essential -y
sudo apt install libglib2.0-dev libibus-1.0-dev qt6-base-dev -y
sudo apt install curl git -y

# bazeliskのインストール
curl -OL https://github.com/bazelbuild/bazelisk/releases/download/v1.28.1/bazelisk-amd64.deb
sudo apt install ./bazelisk-amd64.deb

# 最新リリースの3.33.6133のソースダウンロード
git clone https://github.com/google/mozc.git -b 3.33.6133 --depth 1
cd mozc/src
# ビルド
bazelisk build package --config oss_linux --config release_build

# 続けて次のコマンドでインストールできるが
# 既存のパッケージを破壊するため
# ここではコメントアウトしています

# cd bazel-bin/unix
# sudo unzip mozc.zip -d /

さいごに

いよいよ26.04のバージョンがリリースされますが,今回は家で利用しているPCはLTSからの移行となるので, かなり心配をしています。家のPCは19.1024.04まで半年毎のリリースにあわせて 順次アップグレードしてきたのですが,24.04以降はアップグレードをためらっていてここまで来てしまいました。

LTS間のアップグレードは色々ありがちなので,果たしてどうなるか…といったところです。

まぁネットで情報を集めつつ,5月半ばぐらいまではアップグレードせず様子見となるような気がします。

もう少し若ければ,地雷を踏むのも楽しかったのですが,そんな体力も無くなってきた今日この頃です。

ターミナル上のテストやデモのgif動画を作成できる「VHS」

はじめに

つい最近,VHSという ターミナル上の操作を動画にできるものを見つけました。

これを使うと,この日記での説明とかにも色々利用できそうです。

とりあえず試してみました。

インストール方法

とりあえず,ubuntu上で利用するので,Releasesからdebパッケージをダウンロードしてインストールしました。

その他のインストール方法はReadmeファイルを見ると,色々書いているかと思います。

使い方

インスール後,

vhs new demo.tape

とコマンドを入力すると,demo.tapeというvhs用で 利用するtapeという拡張子のテキストファイルが生成されます。

この中身を見ると,コメントアウトされた使い方が色々書いてあって, このコメントを参照することで,色々利用できそうです。

利用例

次のようなdemo.tapeファイルを作成しました。

Output demo.gif
Require echo
Set Shell "bash"

Set FontSize 15
Set FontFamily "UDEV Gothic JPDOC"
Set Width 600
Set Height 400
Set Padding 10
Set Theme "Pro Light"
Set TypingSpeed 0.2

Type "rm -rf demo.txt"
Enter
Type "emacs -nw demo.txt"
Enter

Sleep 3s

Type "Emacs"
Ctrl+\
Type ";gehpcjsla"
Ctrl+\
Type T-Code
Ctrl+\
Type ";g/tlj,f;ahkyohg,fhf"
Enter
Type "ufkdjwydkgjdl4fvjgyohsjzdf7t;sgglghdkslc"
Ctrl+J
Type "ywhskd/tlj;gqdnp,f;ahcnfhg;ywakdpc/w;snmjkl;erhg,fhf"
Sleep 3s
Ctrl+X
Ctrl+S
Sleep 3s
Ctrl+X
Ctrl+C
Sleep 3s
Enter
Sleep 5s

そして,

vhs demo.tape

とすると,demo.gifというファイルに上記tapeファイルで指示した通りに ターミナルで動作させた結果をgifファイルに出力します。

出力結果のgifは次の通りです。

emacsを実行させて,文字を入力して終了させる,というデモです。

技術的には,ターミナルをchrome(モードレス)上で動作させて,chromeの画面を録画しているような感じのようです。

そのため,最初の実行時にchromeをダウンロードするので少し余分に時間がか薬るようです。二回目以降はダウンロード済みのchromeから実行するので,初回は時間がかかるのに注意が必要です。

さいごに

今回は,ターミナルの操作を再現させるVHSというものを紹介しました。

この日記で何かを紹介する時に色々利用できそうな気がします。

UCRT64のEmacsはコンソール出力が無効化されている[勝手に回答]

今回は誰かのx.comのポストから勝手にピックアップしました。

UCRT64のEmacsはコンソール出力が無効化されているとのこと。

$ emacs --bat --eval '(print "hoge")'

とかしても何も表示されないのだそうです。

とは言うものの,提示されているものを実行するのであれば, Emacsをサーバーモードで立ち上げておいて, emacsclientを使う方がEmacsのプロセスをいちいち起動しない分お得のような気もします。

初期化ファイルの中で,

(require 'server)
(server-start)

と記述してEmacsを立ち上げておいてから,

$ emacsclient -e '(print "hoge")'

とかで望む結果が得られそうな気がします。

ということでやってみました。

WindowsのEmacsが標準出力には何も出力しないのはまさに投稿者のおっしゃる通りなのですが, 代替の方法があるのに「直せ」とは,いったい投稿者は何と闘おうとしているのでしょうか?

Julia言語でplaywright-cliを使ってブラウザを自動操作する

はじめに

Julia言語でブラウザを自動操作するとなると,勢い WebDriver.jlを使うことになるのですが, 割と手間がかかります。

最近はPlaywrightが使われることが多いような気がしますが, 対応している言語はJavaScript,Python,Java, .NETで,残念ながらJulia言語は 対応していません。

ただ,最近ローカルLLMを利用して,opencodeを使おうとか思って調べているうちに, Playwright-mcp以外に,Plyawright-cliがあることを知りました。

本来の目的としては,LLMによるオーサリングでブラウザを自動操作する感じなのでしょうが, bash上からコマンドラインで操作できるということは,Julia言語からrunコマンド等でも 十分操作可能ということです。

なので,今回は邪道とは思うのですが,Julia言語上からplaywright-cliを使ってブラウザを 自動で操作するのを試してみました。

playwright-cliのインストール

何はともあれPlyawright-cliをインストールします。

基本的にはリンク先の通りにインストールすればいいのですが,

  1. node.jsのインストール
  2. playwright-cliのインストール
  3. playwright-cli用のchromeのインストール

の順にインストールしていきます。

1.は基本的にnode.jsのインストール方法でインストールするだけです。 ubuntuに関しては,snapのNode.js Runtimeを利用してインストールしました。

バージョンは24.4.1です。

2.

npm install -g @playwright/cli@latest

でOKのはずですが,snapパッケージだからなのかインストール先が/usr/local/...なのでsudoを頭につける必要があります。

playwright-cli --help

等で何か表示されればOKです。

その後,

playwright-cli install-browser

でブラウザをインストールできると思います。(忘れました…。ただ,npx playwright install chrome等とかと共通かと思います。)

Windowsの場合は普通にchromeをインストーラでインストールすれば利用できます。

playwright-cliをjulia言語から使う

基本的にはplaywright-cliはシェルから実行する仕組みなので,Julia言語から利用するのは基本的に,

  1. mylog = read(`playwright-cli ...`, String)
  2. run(`palywright-cli ...`)

のような形で利用することになるかと思います。

なお,Windowsの場合は,playwright-cli.cmdでないとうまくいかないので, 何かの変数に定義しておいて,それを利用する感じにするといいでしょう。

chromeでないとダメと書いていたりするのですが,--browser=msedgeとオプションをつけると ちゃんと動いている(ms-edgeはchromeのフォーク)ようなので,業務用とかにも応用できそうな気がします。

次がwindowsのJulia言語のREPLから少し実行させてみた例になります。

julia> playwright_cli = "playwright-cli.cmd"
"playwright-cli.cmd"

julia> run(`$playwright_cli open https://www.yahoo.co.jp/ --headed --browser=msedge`)
### Browser `default` opened with pid 9180.
- default:
  - browser-type: msedge
  - user-data-dir: <in-memory>
  - headed: true
---
### Ran Playwright code
```js
await page.goto('https://www.yahoo.co.jp/');
```
### Page
- Page URL: https://www.yahoo.co.jp/
- Page Title: Yahoo! JAPAN
- Console: 3 errors, 1 warnings
### Snapshot
- [Snapshot](.playwright-cli\page-2026-03-25T12-21-44-713Z.yml)
### Events
- New console entries: .playwright-cli\console-2026-03-25T12-21-42-633Z.log#L1-L4
Process(`playwright-cli.cmd open https://www.yahoo.co.jp/ --headed --browser=msedge`, ProcessExited(0))

ここで,標準出力に出力されている文字列の中に,[Snapshot](.playwright-cli/page....yml) という箇所があります。このファイルの中身はHTMLの構成要素をYAMLにしたものが保存されているので, この中身を解析して処理することになります。

次のようにyahooの検索サイトで検索してブラウザを開くような処理を実行してみます。

playwright-cli fill eXX ...eXXのラベルがついているsearchboxに文字列を記入し, playwright-cli click eYYeYYのラベルがついているボタンをクリックします。

function open_and_search_yahoo(search_string, session="yahoo")
    first_log = read(`playwright-cli -s=$session open  https://www.yahoo.co.jp/ --headed`, String)
    m = match(r"\[Snapshot\]\((.*)\)", first_log)
    yml_1st = read(m.captures[1], String)
    m_search = match(r"searchbox .*\[ref=([0-9e]+)\]", yml_1st)
    m_button = match(r"button.*\"検索\".*\[ref=([0-9e]+)\]", yml_1st)
    run(`playwright-cli -s=$session fill $(m_search.captures[1]) "$(search_string)"`)
    run(`playwright-cli -s=$session click $(m_button.captures[1])`)
    nothing
end

自動テストの場合は,画面表示しない方が便利なことが多いので,--headedフラグを外す方が多いかと思います。

その他playwright-cli closeでセッションを閉じる等,javascript等の言語を直接知らなくても

  • Julia言語
  • 正規表現の知識
  • playwright-cliのコマンドの知識

だけで,ブラウザの自動操作が可能となります。 まぁTypeScriptJavaScriptを利用する方が手っ取り速いとは思いますが…

さいごに

今回は邪道ながら,Julia言語を利用してplaywright-cliでブラウザを自動操作する方法について紹介してみました。

いわゆる「目的外使用」ということになると思いますが,正規表現の利用がしやすいPerlやRuby等でも 同じような事ができそうです。

Julia言語 雑感(2026年3月)

はじめに

年末年始のバタバタがようやく落ち着いてきて,ボチボチ通常運転に戻ろうかと思っている今日この頃。 と言いながらも出張が入って放置したまま3月ももう半ば。 今月も孤独系ミーハーJulia言語ユーザーの雑感をお送りします。

Julia Popularity Graph

Julia Discourseからの記事です。 いつもはTiobe Indexの順位から紹介することが多いのですが,大体その月の第2週の月曜日発表となり, まだまだ時間があるのでその代替といった感じの内容です。

https://discourse.julialang.org/t/julia-popularity-graph/135966

ようするに,Tiobe Indexのratingのグラフですね。 2013年から漸増といった感じで,バイオリズムのような増減がありますが, 底だけを見ていくと徐々に最低ラインが切り上がっている感じが見受けられます。

2026年3月のTIOBE Index,Julia言語の順位は安定の29位

今月もいつもと同じで,わりとどうでもいいTIOBE IndexのJulia言語の順位の紹介です。

Julia言語の2026年3月の順位は29位。Ratingは0.59%でした。 先月は29位,Ratingは0.54%でしたので,やはり先月と同じコメントと同じなのですが,著しく安定した順位となっています。

ただ,正直Rubyよりも(わずかながら)上の順位というのは個人的に間違っていると思います。 歴史も格もRuby言語の方がJulia言語より上だと思いますね。

This month in Julia world - 2026-02

Julia Discourseより,今月は早目に投稿されています。

本体側の話題も気になるところですが,個人的にはTachikoma.jlという ターミナル上でのUIフレームワークが気になるところです。

Julia言語 v1.10.11がリリース

Julia Discourseより2026年3月11日にJulia言語の最新LTS版 v1.10.11がリリースされました。

なお,最新の安定版はv1.12.5です。

さいごに

段々おざなりになりつつあるJulia言語の雑感ですが,今月はこれぐらいにしようかと思います。

また,興味が戻ってきたら中身のある内容となることでしょう。

急にプロセスが止まる(Julia言語) [勝手に回答]

はじめに

いつも勝手気ままに答えている「勝手に回答」。しばらくぶりですが, 今回は急にプロセスが止まるteratail上での質問です。

色々調べてみましたが, 結論としては

「そもそもメモリを100%使い切る状態が悪いのでは?」

ということに尽きます。それでは順に調べたこと等を説明していきます。

プロセスが止まる原因は?

最初は色々思っていたのですが,結論としてはいたってシンプルです。

質問者の話からすると,メモリ使用量は100%近くで, 外部ストレージ上にあるページファイルにメモリの内容が一部移っている状態です。

ネットの検索,AI検索等からシーク時間(記憶領域から必要な情報を引っぱるまでの時間)を比較したものを調べると, 次のような情報がありました。

デバイス シーク時間 / アクセス遅延 速度の目安(HDD比)
HDD 約 4 ~ 15 ms (ミリ秒) 基準(最も遅い)
SSD 約 0.08 ~ 0.16 ms (100 µs前後) 約 50 ~ 100倍 高速
メモリ (RAM) 約 0.00001 ms (10 ~ 100 ns) 約 100,000倍以上 高速

これだとメモリとSSDでも処理時間の差は 0.1 ms / 0.00001 ms → 10,000倍となり 1秒かかっていたものが1万秒,すなわちおよそ2.8時間ほどになります。

で,おそらく図のようにJulia言語で使用中のメモリの一部が外部ストレージに 移動していると考えられ,特にdf(データフレーム)の内容が移動していると考えられます。

そのため,「プロセスが止まる」というのは物理メモリ量不足により,外部ストレージに 移動したデータを参照していて,その時の処理時間が1万倍かかっているから, ということになりそうです。

別にエラーが発生している訳ではない,ということになります。

なので,「停止している」のではなく「きわめて遅い速度で動作している」状態ではないでしょうか?

対策は?

Julia言語の特徴は「とにかくメモリを使いまくって高速化する」というものです。

なので,自分が取り扱うデータ量に対して少なくても2~3倍ぐらいのサイズのメモリが確保できないと正直話になりません。

ということで対策は

  • PCの物理メモリ量を増やす
  • 処理するデータ量を減らす

のどちらかということになります。

質問に対するteratail上での回答やコメントについて

自分が試した限りでは別にpush!を使っても使わなくても状況は変わらなかったので, おそらくほとんどの回答は的外れだと思います。

結局はソースリストに関係なく「処理するデータに対するメモリ不足」ということに尽きます。

回答者・質問者はおそらくJulia言語を使わないユーザーなのでしょう。

唯一「分割して一度に処理するデータ量を減らしてみれば?」というコメントが正しい回答になります。

仮のデータで実行してメモリ使用量を確認してみた例(メモリ容量が十分の場合)

メモリの使用量について

Windowsの場合はtasklistコマンドで使用量が確認できるそうです。なのでその出力を 利用してメモリ使用量を確認してみます。

次のような関数を作成すると文字列(~ KB)として取得可能です。

function memory_usage_string()
    最後の二つ(x) = last(x, 2)
    s = read(`tasklist /FI "IMAGENAME eq julia.exe"`, String) |> split |> 最後の二つ
    "$(s[1]) $(s[2])"
end

上の関数内部のsの配列について,parse(Int64, replace(s[1], "," => ""))とすると, 数値(KB)が得られます。

仮のテスト用のDataFrameを次のように作成して メモリ使用量を確認してみました。

using DataFrames
using Dates

df = begin
    entry_dates = repeat(Date(2011):Day(1):Date(2026), inner=2600)
    exit_dates = map(x -> x + Day(rand(1:10)), entry_dates)
    invests = map(_ -> randn(), entry_dates)
    codes = map(x -> rand() > 0.5 ? x : "cd$x", eachindex(entry_dates))
    DataFrame(entry_date = entry_dates, exit_date=exit_dates, invest = invests, code=codes)
end

次の図がそのメモリ使用量の推移です。ループの数が横軸,縦軸がメモリ使用量です。

ガーベジコレクションが働いた時にメモリ使用量が大きく減少し, 配列(eventsという変数名のもの)の再配置が起きた時にメモリ使用量が大きく増加しているということではないかと思います。

今回もし仮に

events = Vector{NamedTuple{(:date, :type, :trade_idx, :invest, :code),
                           Tuple{Date,Symbol,Int,Float64,String}}}(undef, 2n)

のような形で最初に確保した場合,1GBのメモリを一度に確保することになり, 参照元のdfのメモリ領域はループに入る前にページファイルに移動することになるので, おそらく1回もループが回ることなく停止(見かけ上だけで実際は1万分の1の実行速度で 少しずつ動作している)することになると考えられます。

今回,回答者の回答が的外れと自分が思った理由となります。

さいごに

今回の場合は質問者がかなり緻密な情報を提示しているので, 一番回答者にとって身近な「ソースリスト」の中に原因があるとミスリーティングされています。

現在Teratailの回答者が少なくなって回答の多様性が失われている一つの例になっているような気がします。