正規表現の greedy と non-greedy — なぜ同じパターンで結果が変わるのか
正規表現の * や + は「直前の文字が何回続いてもいい」という意味だが、実際にマッチする範囲は「できるだけ長く」なのか「できるだけ短く」なのかで挙動が変わる。これが greedy(貪欲)と non-greedy(非貪欲 …
WP Maintenance Manager の開発・運用で得た技術ノート
正規表現の * や + は「直前の文字が何回続いてもいい」という意味だが、実際にマッチする範囲は「できるだけ長く」なのか「できるだけ短く」なのかで挙動が変わる。これが greedy(貪欲)と non-greedy(非貪欲 …
アプリのログを見ていると、同じ「記録」なのに DEBUG INFO WARNING ERROR という別々のラベルが付いていることに気づく。なぜ単純に「起きたことを全部書く」のではなく、わざわざ段階を分けているのか。今回 …
SSH の秘密鍵を扱っていると、「600 にしてください」という指示によく出会います。逆に設定ファイルには 644、実行可能なスクリプトには 755 が使われる場面もあります。これらの3桁の数字は何を表していて、なぜファ …
保守ツールのテストスイートを見ていると、ひとつの疑問にぶつかることがあります。すでにその関数のテストがあるのに、なぜ別のファイルにもう一本テストを追加するのか。同じ機能を検証しているように見えて、実は目的がまったく違う2 …
デスクトップアプリを終了ボタンで閉じたはずなのに、タスクマネージャーやアクティビティモニタを見るとプロセスが残っている——という状態に遭遇したことがある人は多いはずだ。この記事では、起動時に「前回終わり損ねたプロセス」を …
ソフトウェアのバージョン番号を見ると、多くの場合「1.6.11」のように数字が3つ並んでいる。これは思いつきの命名ではなく、セマンティックバージョニング(Semantic Versioning、通称SemVer)という広 …
デスクトップアプリでサーバーのSSHパスワードやAPIキーを扱う場合、毎回入力させるのはユーザー体験として現実的でない。かといって設定ファイルに平文で保存すると、そのファイルがバックアップに含まれたり、別のツールに共有さ …
WordPressのプラグインやテーマを更新したとき、PHPエラーも出ず管理画面上は「成功」と表示されるのに、実際にサイトを開くとレイアウトだけが崩れている——というケースがある。CSSの読み込み順が変わった、フォントの …
Pythonで書いたデスクトップアプリをローカルで動かすと何の問題もないのに、PyInstallerで1つの実行ファイルにビルドした途端、特定の機能を使ったときだけ ModuleNotFoundError で落ちる——と …
配布用のデスクトップアプリをビルドしていると、macOS では「開発元が未確認のため開けません」という警告に、Windows では SmartScreen の「発行者不明の実行可能ファイルを実行しますか」という表示に遭遇 …