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

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

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 eYYでeYYのラベルがついているボタンをクリックします。

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のコマンドの知識

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

さいごに

今回は邪道ながら,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の回答者が少なくなって回答の多様性が失われている一つの例になっているような気がします。

Julia言語 雑感(2026年2月)

はじめに

仕事の方が忙しく,またJulia言語よりも漢直のT-Codeの練習(目指せ指の運動記憶1200字)に興味が移ったので, あまり情報を収集できていませんが,今月も孤独なミーハー系Julia言語ユーザーによる雑感を書いてみます。

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

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

Julia言語の2026年2月の順位は29位。Ratingは0.54%でした。 先月は28位,Ratingは0.57%なので,他の言語より著しく安定している状態に見えます。

バージョン1.11.9リリース

最新安定版の一つ前の1.11系列の最新版,バージョン1.11.9が2026年2月9日にリリース されました。不思議なことに最新安定版とLTS版以外が更新される,非常に珍しいケースとなっています。

なお,v1.12.5がtesting periodのようなので,もうすぐv1.12.5が正式リリースされる運びとなりそうです。

Unexpected Boolean flag behavior in Julia 1.12 vs 1.10

Julia DiscourseからUnexpected Boolean flag behavior in Julia 1.12 vs 1.10の記事が印象に残りました。

発生条件は限られているのですがわりと致命的なバグなので注意が必要です。 つい先日1.11の最新が更新されたのもおそらくこれが原因ではないかと推測していますが,現時点では確認できていませんが, 1.11.9ではこの不具合は無いようです。 次の1.12系のリリースのリリースノートを確認する必要があるかと思っているところです。

記事内でも触れられているApparent mutation within kwarg functionのイシュー の件と関係があるようです。

プルリクとしてはCompiler: fix typo in can_propagate_conditionalなので, これがマージされた後のバージョンで解消されることになりそうです。なお,v1.12.5のタグのソースには含まれてなさそうなので,v1.12.6以降での解消となりそうです。

さいごに

今回はいつにも増して内容が無いような感じになってしまいましたが,また興味が戻ってくるタイミングもあるのではないかなぁ, とも思っている今日この頃です。

まだまだPlots.jlシリーズもまだまだ書けていない内容もあるので,ボチボチ日記の記事を追加してみる機会もあるかもしれません。

v1.12.5リリース[2026-02-17追記]

リリースされてから1週間近く経ちますが,Julia v.1.12.5がリリースされたとJulia Discourseに記事が掲載されていました。

前述の致命的なバグは直っていませんので注意が必要です。

This month in Julia world - 2026-01[2026-02-17追記]

今月は珍しくThis month in Julia world - 2026-01が早目に公開されています。

この日記よりも豊富で新しいトピックが見られるので,ぜひこちらの方確認してみて下さい。

Promptingtools.jlでollamaを使ってOCR

特にドキュメントを見れば分かる内容なのですが,自分のメモ用として残しておきます。

using PromptingTools
PromptingTools.register_model!(; name="qwen3-vl:8b-instruct", schema=PromptingTools.OllamaSchema())
PromptingTools.MODEL_ALIASES["qwen3-vl"] = "qwen3-vl:8b-instruct"

result = aiscan("画像の文字列をそのまま抽出して下さい";
    image_path="/home/ujimushi/Downloads/test.png", model="qwen3-vl", 
    api_kwargs=(url="http://192.168.1.xx", options=(num_ctx=32768,)))

次の画像で実行した結果を参考例としておいておきます。

julia> println(result.content)
deb http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse

deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted
# deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted
deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security universe

security universe
deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security multiverse
# deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security multiverse
userland@localhost:/etc/apt$ cd
userland@localhost:~$ uim-fep
userland@localhost:~$ ls
emacs-29.4  memo.txt  termux.properties
howm
memo.txt~
userland@localhost:~$ nano memo.txt
userland@localhost:~$ 日本語の入力が可能です
mozc [Mzあ RM]

ESC / - HOME ↑ END PGUP
← CTRL ALT ← ↓ → PGDN
1 2 3 4 5 6 7 8 9 0
q w e r t y u i o p
a s d f g h j k l
z x c v b n m , .
?123 QWERTY ?123

api_kwargsで指定する名前付きタプルにurl="http://xx.xx.xx.xx"とかで指定すると,別のPCのollamaサーバーに接続可能です。 ただし,サーバー側で外部からアクセス可能となるように別途設定が必要です。

num_ctxの指定とかは以前紹介した内容かと思います。

plantumlのstdlib(Google Material Design)を利用する環境をEmacsで作る

はじめに

Emacsを使って自分が考えていることを図で表現することについて, plantumlを利用できないかと考えています。

ネットでplantumlに関する日本語情報を検索すると, stdlibに関しては,ネットワーク構成図を描くような情報ばかりで, 汎用的な図の描画に利用する方法についてはあまり情報がないような気がします。

そこで,色々なアイコンが利用可能なGoogle Material Design を利用できないかと色々調べてみました。

Material Designのstdlib

stdlibのgithubレポジトリはplantuml-stdlibです。

Material Designのアイコンはバージョン2系と バージョン7系があるようなのですが, バージョン7系について自分が利用しているEmacsで利用する方法について試してみました。

アイコンの検索は次のサイトが有効かと思います。 Material Design

Emacsのplantuml-modeの設定

Emacsでplantumlを利用するには,plantuml-modeをインストールするのがいいかと思います。

インストールする方法は省略します。 下の設定は,javaが実行できる(PATHが通っているところにjavaコマンドがある)前提での設定です。 init.el内相当のところに記入する感じです。

(require 'plantuml-mode)
(setq plantuml-jar-path "/home/ujimushi/.local/opt/plantuml.jar")
(setq plantuml-output-type "png")
(setq plantuml-default-exec-mode 'jar)
(setq plantuml-indent-level 2)
(setenv "PLANTUML_LIMIT_SIZE" "8192")

Emacsのauto-completeの設定

今ではもう化石と化しているEmacs補完パッケージauto-completeですが, plantumlのようにわりと単純な補完だけでいいケースでは, 自分で制御しやすいauto-completeもわりと使い勝手がいい面もあります。

今回は今さらですが,auto-completeで編集環境を構築してみます。

auto-completeの辞書登録機能

元々,plantuml-modeはcapfやcompany-modeでのキーワード補完が可能なのですが, auto-completeはcapf対応がそれほど良くないので, 個別に辞書に登録することにします。

Emacsのauto-completeでは,ac-dictionary-directoriesで設定されているフォルダに モード名のファイルを作成してキーワード辞書を登録しておくと, そのモード名に登録したキーワードを補完するようになります。

plantumlのキーワードの登録

Emacs上で*scratch*バッファ上で, (print plantuml-kwdList) と入力してctrl+jとすると,plantumlのキーワードのリストが表示されます。 2つ目の(とそれに対になる)の間をテキストファイルに保存します。

その後,そのテキストファイルに対して,Julia言語で次のような処理をして, 一行ーキーワードのテキストファイルを作成します。

open("plantuml-dict-example.txt", "w") do io
    kwds = map(
        replace(read("kwdlist.txt", String), " t " => "\n") |>
            IOBuffer |> readlines
    ) do x
        strip(x, ['\"'])
    end
    for s in kwds
        println(io, "$s")
    end
end

Material Designのインクルードファイルの補完の工夫

auto-completeだと直接Material Designのinclude補完は難しいので, githubのmaterial7.4.47のフォルダ構造と同じ構造のダミーファイルを作成, そのフォルダを自分がplantumlのファイルを置いているフォルダ内に シンボリックリンクを作成して,auto-completeのファイルパスの補完機能を使って 補完させようと考えました。

using JSON

function make_plantuml_stdlib_materail7_dummy_files(srcdir, destdir)
    categories = open(joinpath(srcdir, "all.json"), "r") do io
        JSON.parse(io)
    end
    isdir(destdir) || mkdir(destdir)

    mydict = Dict()

    for category in categories
        files = readdir(joinpath(srcdir, category))
        mydict[category] = map(x -> first(splitext(x)), filter(x -> endswith(x, ".puml"), files))
    end

    for (key, values) in mydict
        module_path = joinpath(destdir, key)
        isdir(module_path) || mkdir(module_path)
        for v in values
            touch(joinpath(module_path, v))
        end
    end
    nothing
end

の後, plantuml-stdlibのレポジトリからソースをダウンロードして展開してから,

rootfolder = "/home/ujimushi/Downloads/plantuml-stdlib-master/stdlib/material7.4.47"
destfolder = "material7.4.47"
make_plantuml_stdlib_materail7_dummy_files(rootfolder, destfolder)

ぐらいでダミーのファイルを作成してから,作業フォルダ内から生成したダミーファイルを格納しているフォルダにシンボリックリンクを貼るといいでしょう。

Material Designのスプライトキーワードの登録

最後に,スプライトのキーワードの登録を考えてみます。先ほどplantumlのstdlibのgithubのアーカイブのフォルダ 構成から生成をしてみます。次のような関数を作成します。

using JSON
function write_stdlib_mdi7_kwdfile(srcdir, destfile)
    categories = open(joinpath(srcdir, "all.json"), "r") do io
        JSON.parse(io)
    end
    tmpdict = Dict()

    for category in categories
        files = readdir(joinpath(rootfolder, category))
        tmpdict[category] = map(x -> first(splitext(x)), filter(x -> endswith(x, ".puml"), files))
    end
    open(destfile, "w") do io
        for (_, values) in tmpdict
            for v in values
                if v != "all"
                    println(io, "<\$mdi$(uppercasefirst(v))>")
                end
            end
        end
    end
end

から,

rootfolder = "/home/ujimushi/Downloads/plantuml-stdlib-master/stdlib/material7.4.47"
destfile = "plantuml-icon-keywords.txt"
make_plantuml_stdlib_materail7_dummy_files(rootfolder, destfolder)

を実行すると,できたテキストファイルの中身は次のような感じです。

<$mdiTooltipAccount>
<$mdiTooltipCellphone>
<$mdiTooltipCheck>
<$mdiTooltipCheckOutline>
<$mdiTooltipEdit>
<$mdiTooltipEditOutline>
<$mdiTooltipImage>
<$mdiTooltipImageOutline>
<$mdiTooltipMinus>
<$mdiTooltipMinusOutline>
<$mdiTooltipOutline>
<$mdiTooltipPlus>
...

これを先ほどのkwdlist.txtと結合して,plantuml-modeという拡張子なしのテキストファイルを用意しておきます。

auto-completeの設定

最後にauto-completeの設定をします。

(require 'auto-complete-config)
;; 自分で登録した辞書を置くディレクトリ
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")

(ac-config-default)

;; Emacs 30用のワークアラウンド
(add-hook 'auto-complete-mode-hook
          (lambda ()
            (setq ac-sources (remove 'ac-source-abbrev ac-sources))))

;; 文字列内でも補完をする設定
(setq ac-disable-faces nil)

;; plantuml用の補完候補の登録
(add-hook 'plantuml-mode-hook
      (function (lambda ()
              (setq ac-sources
                '(ac-source-dictionary ac-source-filename ac-source-words-in-same-mode-buffers)))))

;; auto-completeをplantuml-modeで自動で有効にする設定
(add-to-list 'ac-modes 'plantuml-mode)

先ほど作成したplantuml-modeファイルを~/.emacs.d/ac-dictフォルダの中に保存します。

そして,作業用フォルダ内に先ほど作成したダミーファイル群のフォルダをターゲットに シンボリックリンクを作成すると環境作成は完了です。

使用例とか

基本的にはplantumlのスプライトの利用方法を見ていただければと思います。 後は,配置図とかのヘルプが参考になるでしょうか。

ちょっとした利用例です。 !includeのところは個別にincludeするとコンパイルの時間も短くてすむかと思います。

@startuml
!include <material7/all>

card 自宅 [
自宅
<$mdiHome,color=orange>
]
card 会社 [
会社
<$mdiOfficeBuilding,color=blue>
]
card 駅1 [
家の最寄り駅
<$mdiTrain,color=red>
]
card 駅2 [
会社の最寄り駅
<$mdiTrain,color=green>
]

自宅 -> 駅1 : <$mdiBike,scale=0.4>自転車
駅1 -> 駅2 : <$mdiTrain,scale=0.4>電車
駅2 -> 会社 : <$mdiWalk,scale=0.4>徒歩

@enduml

まとめ

とりあえずEmacsでplantumlを利用しやすいように環境を構築してみました。 といっても,普通はcompany-mode等でセットアップすると思うので, 非常に古めかしい環境での構築となりました。(単に日本語の補完パッケージとの兼ね合いです。)

ただ,図を描くのはまだまだ勉強中でこれからといった感じです。

Julia言語 雑感(2025年12月~2026年1月)

はじめに

先月は漢直アドベントカレンダーのネタ製作に忙しかったので,お休みしたJulia言語雑感。 仕事も忙しくあまり調べていないのですが,とりあえず少しだけやっておきます。

Tiobe Index 2025年12月は29位,2026年1月は28位

いつものどうでもいいTIOBE Indexの順位ネタです。 Julia言語の2025年12月の順位は29位。Ratingは0.48%でした。 また,2026年1月の順位は28位。Ratingは0.57%でした。

順位の急激な変動がなく非常に安定しています。

JuliaLang Japan 2025 2025年12月13日に開催される

JuliaLang Japan 2025が2025年12月13日(土)のPMに開催されました。

漢直アドベントカレンダー2025のネタ書きに忙しかったので参加できなかったのですが,盛況だったようです。 上のリンク先に当日の発表の資料等があったりするので,興味のある方は覗いてみてはいかがでしょうか。

自分もオンライン参加の登録をしかけていたのですが,明らかに学生や教職の方向けのフォームで, おまけにオンライン参加なのに撮影の同意とか確認させられて,気分的に嫌になって結局途中でやめました。

土日は家事等があってどのみち参加は難しいというのもあります。 実際13日は子供用の昼ご飯作ったり洗い物したりもろもろ。 土日は妻が働いているので,貧乏暇なしといったところです。

その他のネタ

仕事も忙しくなって,最近はJulia言語のネタをあまり仕入れていません。 また,Newsletter系もあまり更新されていないような気がします。

とりあえず,次の二つのリンクを貼っておきます。

さいごに

X.comとか久しぶりに日本語でのJulia言語ネタが盛り上がっているような気がしますが, いつも同じ人がポストしているだけのような気もします。

新ネタをポストするのはいいのですが,自分の過去のネタのリポストだけ何度も何度も繰り返すのは本当に止めて欲しい。 一回見たら内容分かるし,ウザいから。

仕事が忙しくなってきているので,しばらく日記の方は放置になるかと思います。 Julia言語や漢直以外のネタも書きたいものがあるのですが,しばらく先になりそうです。

Julia v1.12.4リリース [2026-01-11追記]

Julia言語の最新安定版v1.12.4が2026年1月8日にリリースされました。

This month in Julia world 2025-12 [2026-01-11追記]

毎月更例のニュースレターThis month in Julia world 2025-12が公開されています。

先月のJulia言語界隈(ただし主に海外)を知るにはいい情報源だと思うのでチェックしてみてはどうでしょうか。