2026/07/03(金) [n年前の日記]
#1 [prog] Emacs系エディタ用のコメント行の名称が分からない
テキストエディタの xyzzy や Emacs は、ソースファイルの最初のあたりにコメント行で色々書いておくと、そこで指定したメジャーモードや文字エンコーディングでそのファイルを開いてくれる機能がある。以下のような感じのコメント行で…。
この、2行目3行目を、何と呼べばいいのかわからないなと…。
ググったところ、「モードライン」と呼んでる場合もあったけれど…。エディタ画面の下のほうにある、現在のモードを表示している行もモードラインと呼ばれることがあるようで…。
「マジックコメント」という呼び方も見かけた。どうやら Ruby あたりから始まった呼び方のようで、今では色々な言語でもその呼び方が使われている、とAIは言っていたけれど。Emacs系エディタの世界ではマジックコメントという呼び名はそもそも使ってなかったそうで…。
このあたりのコメント行は、一体どう呼べばいいのだろう…。
いやまあ、今時フツーのプログラマーはソース書く時に Emacs系エディタは使わんやろ、Visual Studio Code か vim あたりを使うんじゃないの? という気もするので、今更どうでもいい気もするのだけど。
ただ、今回、どういう記述をすればいいのか忘れてしまって、ちょっとググろうとした時に名称が分からなくて困ったという…。
#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2026/07/07 21:25:17 +0900>
- 1行目はいわゆるシバン行。*NIX のシェルが、そこを読んで、どの言語を使えばいいか判別するための行。
- 2行目、3行目が Emacs系エディタ用の記述。mode: でメジャーモードを指定して、Encoding や coding で文字エンコーディングを指定。
- 3行目はファイルを更新した際にタイムスタンプが記録される。
この、2行目3行目を、何と呼べばいいのかわからないなと…。
ググったところ、「モードライン」と呼んでる場合もあったけれど…。エディタ画面の下のほうにある、現在のモードを表示している行もモードラインと呼ばれることがあるようで…。
「マジックコメント」という呼び方も見かけた。どうやら Ruby あたりから始まった呼び方のようで、今では色々な言語でもその呼び方が使われている、とAIは言っていたけれど。Emacs系エディタの世界ではマジックコメントという呼び名はそもそも使ってなかったそうで…。
このあたりのコメント行は、一体どう呼べばいいのだろう…。
いやまあ、今時フツーのプログラマーはソース書く時に Emacs系エディタは使わんやろ、Visual Studio Code か vim あたりを使うんじゃないの? という気もするので、今更どうでもいい気もするのだけど。
ただ、今回、どういう記述をすればいいのか忘れてしまって、ちょっとググろうとした時に名称が分からなくて困ったという…。
◎ 余談。xyzzyに関数を追加してた :
xyzzy の siteinit.l に、このあたりの文字列を挿入する関数を追加していたことを忘れていた。
M-x insert-my-coding-check-string-(utf8n|sjis) で挿入できる、とメモしておくけれど明日には忘れてそう…。M-x insert-m まで打って補完、ぐらいは覚えておきたいけれど…。
;; 文字コード判別用の文字列を挿入 (defun insert-my-coding-check-string-utf8n() (interactive) (insert "-*- mode: <ModeString>; Encoding: utf-8; coding: utf-8 -*-")) (defun insert-my-coding-check-string-sjis() (interactive) (insert "-*- mode: <ModeString>; Encoding: sjis; coding: sjis -*-"))
M-x insert-my-coding-check-string-(utf8n|sjis) で挿入できる、とメモしておくけれど明日には忘れてそう…。M-x insert-m まで打って補完、ぐらいは覚えておきたいけれど…。
[ ツッコむ ]
#2 [pygame] pygameをWebブラウザ上で動かせるpygbagを試用
Python で2Dゲームを作れる、pygame というモジュール/ライブラリがある。ローカル環境で動かすことが前提のライブラリだけど、pygbag というツール? モジュール? を利用すると、pygame を利用しているスクリプトをWebブラウザ上でも動かせると知ったので試用してみることにした。
環境は Windows11 x64 25H2 + Python 3.10.10 64bit + pygame-ce 2.5.6。CPU : AMD Ryzen 5 5600X。GPU : NVIDIA GeForce GTX 1060 6GB。
環境は Windows11 x64 25H2 + Python 3.10.10 64bit + pygame-ce 2.5.6。CPU : AMD Ryzen 5 5600X。GPU : NVIDIA GeForce GTX 1060 6GB。
◎ インストール :
インストールは以下。
今回は pygbag 0.9.3 がインストールされた。
pip install pygbag or python -m pip install pygbag
今回は pygbag 0.9.3 がインストールされた。
◎ スクリプトを修正 :
pygameを使ったスクリプトは、そのままでは pygbag 用にならないので、ほんのちょっとだけ修正が必要らしい。以下を参考にして修正。
_【pygbag】「たった10分で」pygameをブラウザ上で動かす! #Python - Qiita
以下を修正すればいいのかな…?
_【pygbag】「たった10分で」pygameをブラウザ上で動かす! #Python - Qiita
以下を修正すればいいのかな…?
- スクリプト名は main.py にしておく。
- スクリプトや画像の類は任意のフォルダに入れておく。
- import asyncio を最初のあたりに追加。
- def main(): を async def main(): に変更。
- clock.tick() の直後に await asyncio.sleep(0) を追加。
- main関数を asyncio.run(main()) で呼び出すように変更。
◎ pygbagで変換 :
pygbag を呼び出して、Webブラウザで実行できる状態に変換する。スクリプトが入っているフォルダと同階層で以下を打つ。
変換終了後、Webサーバが実行されて待ち状態になるので、Webブラウザで http://localhost:8000/ にアクセスすれば、pygameスクリプトをWebブラウザで実行できる。
終了はコマンドプロンプト上で Ctrl + C。
python -m pygbag フォルダ名
変換終了後、Webサーバが実行されて待ち状態になるので、Webブラウザで http://localhost:8000/ にアクセスすれば、pygameスクリプトをWebブラウザで実行できる。
終了はコマンドプロンプト上で Ctrl + C。
◎ Webサーバに公開 :
フォルダ名\build\web\ の中に公開用のファイル群一式が入っている。今回は以下が入っていた。これをWebサーバ上にアップロードすればいいのだろう…。
Webサーバが Apache の場合、かつ、このあたりのファイル種類について設定がされてない場合は、.htaccess でファイル種類を指定する必要があるかもしれない。
.gz が x-gzip に割り当てられてない場合は以下の記述も必要、とAI (Google Gemini)が言っている。自分の環境では指定しなくても動いてくれた。おそらく Apache2 全体の設定で既に指定されているのだろう…。
AIは、キャッシュを使わないようにする設定も提示してきたけれど、その指定は必要なのかな…。
favicon.png hellopygbag.apk hellopygbag.tar.gz index.html
Webサーバが Apache の場合、かつ、このあたりのファイル種類について設定がされてない場合は、.htaccess でファイル種類を指定する必要があるかもしれない。
AddType application/wasm .wasm AddType application/octet-stream .data AddType application/octet-stream .apk
.gz が x-gzip に割り当てられてない場合は以下の記述も必要、とAI (Google Gemini)が言っている。自分の環境では指定しなくても動いてくれた。おそらく Apache2 全体の設定で既に指定されているのだろう…。
<IfModule mod_mime.module>
AddEncoding x-gzip .gz
</IfModule>
AIは、キャッシュを使わないようにする設定も提示してきたけれど、その指定は必要なのかな…。
◎ サンプル :
Webサーバに置いてみたけれど、実行できるだろうか…。
_pygbag sample
ページを開いて、ロードが終わると、Firefoxの場合は「準備できたからタッチせよ」と英文で言ってくるのでページをクリックすれば動く。はず。動くといいなあ…。Google Chrome の場合は、ロードが終わればそのまま実行開始になった。
Firefox 152.0.4、Google Chrome 150.0.7871.4上では動いてくれた。手元の環境、CPU : AMD Ryzen 5 5600X、GPU : NVIDIA GeForce GTX 1060 6GB 上では結構滑らかに動いている。
ソースと画像は以下。 AI(Google Gemini) に作成してもらった。このくらいのスクリプトなら一発で生成してくれるのね…。
_main.py
_image.png
_pygbag sample
ページを開いて、ロードが終わると、Firefoxの場合は「準備できたからタッチせよ」と英文で言ってくるのでページをクリックすれば動く。はず。動くといいなあ…。Google Chrome の場合は、ロードが終わればそのまま実行開始になった。
Firefox 152.0.4、Google Chrome 150.0.7871.4上では動いてくれた。手元の環境、CPU : AMD Ryzen 5 5600X、GPU : NVIDIA GeForce GTX 1060 6GB 上では結構滑らかに動いている。
ソースと画像は以下。 AI(Google Gemini) に作成してもらった。このくらいのスクリプトなら一発で生成してくれるのね…。
_main.py
_image.png
[ ツッコむ ]
#3 [pc][prog] ripgrepをインストールしてみた
Windows11 x64 25H2上で ripgrep なるツールをインストールしてみた。AI(Google Gemini)によると、Rustで書かれた爆速のgrep、らしい。バイナリファイルを除外したり、色付けされたりするらしい。VSCode(Visual Studio Code)でも使われているのだとか。
_【捜索生活向上1】ファイル検索ツール「ripgrep」を利用して、俊足かつ効率的に見つけ出す。 初心者 - Qiita
今回は choco (Chocolatey)経由でインストールした。管理者権限でコマンドプロンプトを開いて、以下を打った。
rg.exe というのが ripgrep のコマンド名らしい。以下の場所にインストールされた。
AI(Google Gemini)によると、以下のような使い分けがいいだろうとのこと。
元々、VSCodeの拡張の todo-tree が、「ripgrepが見つからないから手動でインストールせよ」と言ってきたので今回インストールしてみたけれど、たしかに VSCode のインストール場所を探したら rg.exe が入っていた。VSCode も使っているというのはおそらく本当らしい。ちなみに以下の場所に入っていた。
_【捜索生活向上1】ファイル検索ツール「ripgrep」を利用して、俊足かつ効率的に見つけ出す。 初心者 - Qiita
今回は choco (Chocolatey)経由でインストールした。管理者権限でコマンドプロンプトを開いて、以下を打った。
choco install ripgrep
rg.exe というのが ripgrep のコマンド名らしい。以下の場所にインストールされた。
> which rg "C:\ProgramData\chocolatey\bin\rg.exe"
AI(Google Gemini)によると、以下のような使い分けがいいだろうとのこと。
- ローカルで日常的に grep を使うなら ripgrep がお勧め。使わない理由はない。
- 例えばサーバ上で grep を使う場合は、ほぼ必ず入っているであろう従来の grep (GNU grep) を使ったほうが安全。
元々、VSCodeの拡張の todo-tree が、「ripgrepが見つからないから手動でインストールせよ」と言ってきたので今回インストールしてみたけれど、たしかに VSCode のインストール場所を探したら rg.exe が入っていた。VSCode も使っているというのはおそらく本当らしい。ちなみに以下の場所に入っていた。
C:\Users\(USERNAME)\AppData\Local\Programs\Microsoft VS Code\4fe60c8b1c\resources\app\node_modules\@vscode\ripgrep-universal\bin\win32-x64\rg.exe
◎ choco経由版をアンインストールした :
zipで入手できる版があると知った。
_Releases - BurntSushi/ripgrep
こちらを使うことにしよう…。ripgrep-15.1.0-x86_64-pc-windows-msvc.zip を入手して解凍。中に入ってる rg.exe をパスの通った場所に置く。今回は D:\home2\bin\ 以下に置いた。
choco経由でインストールした版はアンインストールした。
_Releases - BurntSushi/ripgrep
こちらを使うことにしよう…。ripgrep-15.1.0-x86_64-pc-windows-msvc.zip を入手して解凍。中に入ってる rg.exe をパスの通った場所に置く。今回は D:\home2\bin\ 以下に置いた。
> rg --version ripgrep 15.1.0 (rev af60c2de9d) features:+pcre2 simd(compile):+SSE2,-SSSE3,-AVX2 simd(runtime):+SSE2,+SSSE3,+AVX2 PCRE2 10.45 is available (JIT is available)
choco経由でインストールした版はアンインストールした。
choco uninstall ripgrep
[ ツッコむ ]
以上、1 日分です。