一時作業用ディレクトリを作って何かしらの処理をおこなうシェルスクリプトを書くときに、便利なtrapコマンドとmktempコマンドについて紹介します。
また、setを使ってエラーが発生したときにすぐに止まるようにする方法についても少し紹介します。
ちょっとした作業に便利なテンプレートというかスニペットを紹介します。
続きを読む一時作業用ディレクトリを作って何かしらの処理をおこなうシェルスクリプトを書くときに、便利なtrapコマンドとmktempコマンドについて紹介します。
また、setを使ってエラーが発生したときにすぐに止まるようにする方法についても少し紹介します。
ちょっとした作業に便利なテンプレートというかスニペットを紹介します。
続きを読む体感で先月くらい(2026年6月)からVSCodeで愛用していたTodo Treeという拡張機能が、以下のような警告メッセージを出し、動作しなくなりました。
確認してみるとTodo Treeは長くメンテナンスされていないらしく、Better Todo Treeというフォークされた拡張機能への乗り換えをおこないました。
Todo Treeは、ソースコード上に書いたTODOやFIXME、XXXといったコメントをハイライト表示したり、ワークスペース内をツリー状のビューにして表示してくれる拡張機能です。
後で直すからTODOって書いたけど、どこだったかわからなくなってしまったり、直し忘れてリモートブランチにプッシュして指摘されたりを避けるために使っていました。
さて、問題の警告メッセージは以下のとおりです。
Todo-Tree: Failed to find vscode-ripgrep - please install ripgrep manually and set 'todo-tree.ripgrep' to point to the executable
vscode-ripgrepがインストールされていないというように見えますが、イマイチよくわかりません。
しかし、ありがたいことに同じ拡張機能を使っている人は多く、GitHubのイシューで話されていました。
Failed to find vscode-ripgrep · Issue #929 · Gruntfuggly/todo-tree
このイシューは5月末に作成されたようです。
さて、この拡張機能を使い続けるには、拡張機能が依存しているripgrepをインストールし、settings.jsonでそのパスを指定することが必要というのがイシュー内で言及されています。
また、vscode-ripgrepという拡張機能が別に存在していますが、これは無関係とのことでした。
さらに、Todo Treeはメンテナンスがされていないため、フォークされたBetter Todo Treeを推奨する声もありましたので、今回乗り換えることにしました。
Better Todo Treeも同じくVSCodeの拡張機能なので、VSCode上の拡張機能マーケットプレイスで「Better Todo Tree」と入力し、インストールを押すだけで完了です。
特にスクショはないですが、コメントアウトされたTODOやFIXMEがツリービューで表示されることを確認しました。
拡張機能の設定を全く変更していないため、自分としてはこれで満足です。色が少し変わったような気がします。
Better Todo TreeはもとのTodo Treeの設定と互換性のあるそうで、Todo Treeを駆使していたひとには朗報だと思います。
Apache HTTP Serverのhttpdコマンドを使って設定ファイルの構文チェックをおこなうときのコツをメモしておきます。
$ httpd -t -f /tmp/apacheconf-test/test-httpd.conf Syntax OK続きを読む
Linuxを使っているとき、特にDockerのコンテナの中などで、OS情報やシステム情報、ネットワーク情報を確認することはよくあります。
そんなときに使える便利なコマンド(とファイル)をまとめました。
なるべくどのディストリビューションでも使えるものを中心に紹介します。
確認に使ったOSは以下のとおりです。
シェルスクリプトでTOTPのコードを算出する方法を2つ紹介します。 1つ目はoathtoolというライブラリを使う方法、2つ目は外部ライブラリを使わずに自作実装した方法です
続きを読むNode.jsのバージョンによってJSON.parse()でエラーが発生したときのメッセージが異なります(parseメソッドだけではありませんが)。
正確にはNode.jsのバージョンではなく、Node.jsに梱包されているV8エンジンのバージョンによります。
この記事ではそれぞれのNode.jsのバージョン、V8エンジンのバージョンとメッセージを確認していきます。 実行したJavaScriptのコードは以下です。
JSON.parse('a');
Node.jsに含まれているV8エンジンのバージョンは、以下のコマンドで確認できます。
$ node -p process.versions.v8
https://nodejs.org/docs/latest-v24.x/api/process.html#processversions
$ node -v v16.20.2
$ node index.js
undefined:1
a
^
SyntaxError: Unexpected token a in JSON at position 0
at JSON.parse (<anonymous>)
at Object.<anonymous> (<my-directory>/index.js:1:6)
at Module._compile (node:internal/modules/cjs/loader:1198:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1252:10)
at Module.load (node:internal/modules/cjs/loader:1076:32)
at Function.Module._load (node:internal/modules/cjs/loader:911:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:22:47
$ node -p process.versions.v8 9.4.146.26-node.26
$ node -v v18.20.8
$ node index.js
undefined:1
a
^
SyntaxError: Unexpected token a in JSON at position 0
at JSON.parse (<anonymous>)
at Object.<anonymous> (<my-directory>/index.js:1:6)
at Module._compile (node:internal/modules/cjs/loader:1364:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
at Module.load (node:internal/modules/cjs/loader:1203:32)
at Module._load (node:internal/modules/cjs/loader:1019:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:128:12)
at node:internal/main/run_main_module:28:49
$ node -p process.versions.v8 10.2.154.26-node.3
$ node -v v20.20.0
<anonymous_script>:1
a
^
SyntaxError: Unexpected token 'a', "a" is not valid JSON
at JSON.parse (<anonymous>)
at Object.<anonymous> (<my-directory>/index.js:1:6)
at Module._compile (node:internal/modules/cjs/loader:1521:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
at Module.load (node:internal/modules/cjs/loader:1266:32)
at Module._load (node:internal/modules/cjs/loader:1091:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
at node:internal/main/run_main_module:28:49
$ node -p process.versions.v8 11.3.244.8-node.3
$ node -v v22.22.0
$ node index.js
<anonymous_script>:1
a
^
SyntaxError: Unexpected token 'a', "a" is not valid JSON
at JSON.parse (<anonymous>)
at Object.<anonymous> (<my-directory>/index.js:1:6)
at Module._compile (node:internal/modules/cjs/loader:1706:14)
at Object..js (node:internal/modules/cjs/loader:1839:10)
at Module.load (node:internal/modules/cjs/loader:1441:32)
at Function._load (node:internal/modules/cjs/loader:1263:12)
at TracingChannel.traceSync (node:diagnostics_channel:328:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:171:5)
at node:internal/main/run_main_module:36:49
$ node -p process.versions.v8 12.4.254.21-node.3
$ node -v v24.13.1
$ node index.js
<anonymous_script>:1
a
^
SyntaxError: Unexpected token 'a', "a" is not valid JSON
at JSON.parse (<anonymous>)
at Object.<anonymous> (<my-directory>/index.js:1:6)
at Module._compile (node:internal/modules/cjs/loader:1804:14)
at Object..js (node:internal/modules/cjs/loader:1936:10)
at Module.load (node:internal/modules/cjs/loader:1525:32)
at Module._load (node:internal/modules/cjs/loader:1327:12)
at TracingChannel.traceSync (node:diagnostics_channel:328:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:245:24)
at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
at node:internal/main/run_main_module:33:47
$ node -p process.versions.v8 13.6.233.17-node.40
バージョンとメッセージは以下の表の通りになりました。
| Node.js | V8 | メッセージ |
|---|---|---|
| v16.20.2 | 9.4.146.26-node.26 | Unexpected token a in JSON at position 0 |
| v18.20.8 | 10.2.154.26-node.3 | Unexpected token a in JSON at position 0 |
| v20.20.0 | 11.3.244.8-node.3 | Unexpected token 'a', "a" is not valid JSON |
| v22.22.0 | 12.4.254.21-node.3 | Unexpected token 'a', "a" is not valid JSON |
| v24.13.1 | 13.6.233.17-node.40 | Unexpected token 'a', "a" is not valid JSON |
現時点でのLTSの最新バージョンしか調べていませんが、v20からメッセージが変わって、わかりやすくなっています。 エラーメッセージで分岐を作るようなことはしないようにしましょう。