WindowsでUNIXっぽいシェル/環境を用意する2026

Microsoftがcoreutilsを出したみたいな話と、個人的に最近色々発展があり見直したのでまとめておく。WSL2については死ぬほど情報があるのでMSYS2中心

主要な方法

WSL2MSYS2この2つが圧倒的におすすめ。自分も両方入れて使い分けている

他にGit Bashが人気だが、追加でパッケージを入れられないのでちょっとツールが足りないというときに非常に困るのでMSYS2がおすすめ。またCygwinも存在しているはずだが最近使ったことがないのでわからん

用途

WSL2は言わずもがな、Linuxの軽量VMをつくるのでほぼすべての用途に向いている。向いていないのは2つだけ

  1. Windows側のファイルを高速にread/writeしたいとき: 典型的な例としてWindows側のFSにあるGitレポジトリを使うときなどがこれに当たる。信じられないほど遅くなるため、Git for Windowsの代替などとしては使えない
  2. USBやCOMポートなどを利用したいとき: Androidアプリ開発や組み込みのマイコン開発などがこれにあたる。一応usbipdなど手段もありますが動作の不安定さや制約が多く、WSL2をあきらめてWindows側で開発を行う人が多い

向いていない用途ではWindowsをベースにMSYS2で便利シェルとcliツールを補完できる

MSYS2とは

UNIXっぽいアプリやライブラリを薄い互換ライブラリとともにgccやclangでwindowsネイティブにビルドするためのツールキット。ビルドに必要なmakeやらbashやらを動かすために互換レイヤとパッケージマネージャ (pacman) をつけたらビルド以外でも便利になり色々使われるようになった

導入

公式ドキュメントを見てインストール www.msys2.org

Windows Terminalで起動できるようにする

ご存知とは思いますがWindows Terminalがあまりにも良いので、旧コマンドプロンプトやMSYS2についてくるMinttyは使うべきではない

Windows TerminalのSettingsで左下の "Open JSON file" を押して設定ファイルを開きます。profilesの中にCommand PromptやPowerShellやWSLなどがあると思うので下記も追加。Windows TerminalのメニューではこのJSONの要素の順番に並ぶので必要に応じて上の方にしておくと使いやすい。

            {
                "antialiasingMode": "cleartype",
                "commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys",
                "font": 
                {
                    "face": "Cascadia Mono"
                },
                "guid": "{71160544-14d8-4194-af25-d05feeac7233}",
                "icon": "C:/msys64/msys2.ico",
                "name": "MSYS / MSYS2",
                "startingDirectory": "C:/msys64/home/%USERNAME%"
            },

後述するがbash以外を使いたい場合はcommandlineで C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys -shell zsh のように設定できる。事前にそのシェルをインストールしておく必要がある

Symlinkを使えるようにする

MSYS2はデフォルトではsymlinkを作成できず、 ln -sなどがただのコピー作成になってしまうという歴史的仕様がある。最近はwindowsでもオプションだけでsymlinkを作れるようになったのでそれを使う

まずWindowsの設定から"システム" → "環境設定" で開発者モードをオンにする必要がある

次にmsysの起動cmd (C:\msys64\msys2_shell.cmd) でコメントアウトを解除する。ちなみに rem はCMDでの行コメントになる。他言語での // xxxx みたいなもん

rem set MSYS=winsymlinks:nativestrict
↓
set MSYS=winsymlinks:nativestrict

これで適当なファイルを ln -s して ls -al してsymlinkっぽく矢印が出ていたら成功

Gitをいれる

git というパッケージ名で入る方は遅いことで有名。今までは別途Git for Windowsをインストールしてそのgit.exeを呼ぶのがベストだったが、2026年2月にMSYS2で公式にGit for Windows(かそれに近しいパフォーマンス)のgitがパッケージ化された。

(わからない人は読み飛ばして良い)MSYS2ではなく各ビルド環境(ming64, ucrt64など)でしかパッケージがないため、それらでインストールしてパスを通す必要がある。MSYS2的お行儀としては悪いので気に食わない人は別の方法をとるか、単にUCRT64などをデフォルト環境にしてほしいが、単にsymlinkで ln -s /mingw64/bin/git.exe /usr/bin/git.exe などとするのは他の依存dll (zlib1.dllなど) が読み込めなくてエラーとなるため動かない

pacman -Sy mingw-w64-x86_64-git
echo 'export PATH=$PATH:/mingw64/bin' >> ~/.bashrc

これでターミナルを開き直すとgitが使えるはず

お気に入りのパッケージをいれる

お好みで

pacman -Sy zsh vim ruby python openssh rsync

WindowsのPATHを引き継ぐ

msys2_shell.cmdを呼ぶときに -full-path オプションをつけるかmsys2_shell.cmdの中の下記をコメントアウトする。意図せずWindows側のアプリケーションを呼び出してしまう副作用も多いのでこれを使うか、個別でPATHに追加するかは個々人で判断するべき。自分は使っていない

rem set MSYS2_PATH_TYPE=inherit

JenkinsをDaguに置き換えた: 実行記録付きcronの最適解

長年、個人サーバーでバックアップの実行などちょっとした用途でJenkinsを利用していた。cronを使わない理由としては成功/失敗や実行ログを取るのが面倒という理由があった。 tee ... &2>1 ... echo 'success' とか色々やればできるのですが複雑さや実行確認の手間が割に合っていない

JenkinsはJenkinsで問題があり、メモリ消費量が大きいこと。この程度の用途でも1GB以上消費していた。そんなわけでちょうどいい置き換えを探していたのだが。Daguというものを試してみたらうまく行った。

DaguはGo製のworkflow実行ツールで自分がやりたかったスケジュール実行はもちろんできるし、他の色々なトリガーも使えるらしい。 Goらしくインストールは簡単で、ついでにsystemdでenableするのも最初の対話的導入スクリプトで選択したらできた。

インストールが独自スクリプトでaptパッケージがないのは面倒だがインストールスクリプトを見たらシステムでいれるかユーザーレベルでいれるかを含め色々とインストールに柔軟性を持たせているので、しょうがない気もした。

Webインターフェースがあり、UIの思想は違うがJenkinsから乗り換えるには気楽である。

グラフィカルな依存関係図っぽいものが自動作成されたりしているが無視して良い。記法としてはかなりGitHub Actionsっぽい

ちなみにメモリ消費量は1週間ほど起動させても100MB程度でJenkinsの1/10になり満足している

青色申告にhledgerを使い始めた話(テキストベース会計のススメ)

今年は青色申告用の会計簿にhledgerを使っている。

去年はマネーフォワード クラウド会計を試したのだがあまり良い体験ではなかったのは前の記事で書いた通り。

vector.hateblo.jp

そういうわけで、別の会計ソフトを使うことにしたのだがその際の要件が下記のようになっている

  • 青色申告決算書に必要な集計済み情報が出力できる。ただしe-Taxに手で転記してもいいので国税庁のテンプレートにしたがった出力そのものができる必要はない
  • 経営の把握という意味での本来の会計機能は不要(フリーランスで収入に対する経費の割合が低いのであまり把握する意味がない)
  • UIが悪くないこと。ExcelやテキストベースなどでもOK
  • オフラインで使えること。税務と違い会計はそうそう仕組みが変化しないため、一度作業できるようにしたらそのまま何年も使い続けられるものが好ましい。クラウドサービスは頻繁に変更が入ったり、値上げしたり、サービス終了するリスクがある
  • できれば無料であること、ついでにExcelも持っていないのでExcelでないものでも使えること

そういう条件で調べるとPlain Text Accountingというやり方とソフトウェアがあるのがわかった

Plain Text Accounting とは

plaintextaccounting.org

こんな感じで複式簿記が付けられる。

2025-01-01 大家
  expenses:地代家賃         50000
  assets:cash

2025-01-03 JR東
  expenses:旅費交通費      200
  assets:cash            -200 ; ←この-200は付けても付けなくても同じ

ExcelCSVみたいに行志向ではなく、一つの記録が複数行になる。理由としては1行が長すぎると情報量的に手入力しづらい、幅が広くなりすぎる、追加情報を記述しづらいなどがありそう。その場合Yamlでもいいような気もするが、こういう形式が普及しているというならそれでいい

日本はともかく、英語圏では一定のユーザーがいるらしく情報もフォーラムも整っていてソフトも複数あるということで手を出してみた。

Hledger

おおむね3つ人気ソフトがあるらしい。Ledger (検索不能なためLedger Cliと書かれる), hledger, Beancountの3つだ。 Ledgerが一番古く2003年からある、自分はこれから試したがhledgerの方が便利な機能が多そうだったためhledgerを使っている。Beancountは試していない

ちなみにフォーマットは似通っているが、それぞれ拡張(といいつつ取引先の記述などの基本的な部分含む)はまったく互換性がないので、同じファイルで複数ソフトの相互利用は難しい

それぞれC++, Haskell, Pythonで書かれており、自分で手を入れられるように慣れてる / 使いたい言語で選ぶ人もいるらしいが、どれも活発にメンテされているのでそこまで気にしなくてもいい気もする

青色申告のためだけの会計簿の付け方

  • 1年単位でファイルを作る。hledgerは複数年にまたがった使い方もできるが、個人事業主の場合 1年単位で把握できれば良く、事業主借 / 事業主貸も年始に0にリセットするし現金や口座残高も専用口座がない場合は適当に設定するものであるため連続性は不要
  • 数年にわたる減価償却費がある場合だけは注意が必要。また減価償却費の計算もhledgerは実施できないため自分で計算して計上する必要があることに注意
  • hledgerにはcsvなどをインポートする機能もある、ただそのルールは自分で記述する必要がある。それなりに使えるがスクリプト言語などに慣れている人は慣れた言語で変換スクリプトを書いたほうが早いかもしれない
  • フォルダはgitなどで管理すると良い。Dropboxなどなんとなくでリビジョン管理してくれるソフトがあるのであればそれでもいいだろう
  • 消費税については自分はまだやっていないのでやるときに考える予定

2025.ledger

; 大項目にはデフォルト設定的に英語のassets / expensesなどの名前を使ったほうがいい
; とはいえ長いのでaliasで短縮する。このaliasはhledger独自機能
; 資産 / 経費 / 収入 / 負債
alias a = assets
alias e = expenses
alias r = revenue
alias l = liabilities

2025-01-01
  expenses:地代家賃         50000
  l:事業主借

; 取引先はhledgerでpayeeと呼称される
; | を使うと左側がpayee, 特に | を付けないと全体がpayeeになる
; 取引先を指定せずにメモだけしたい場合は "2025-01-03 | 新宿から池袋" のようにする

2025-01-03 JR東 | 新宿から池袋
  expenses:旅費交通費      200
  l:事業主借

2025-01-20 電気代 | 100000を按分
  e:水道光熱費     30000
  l:事業主借

; 収入
2025-01-25 取引先A
  a:bank       100000
  r:sales

; ちなみに日付の順番はバラバラでいい
; 自分は収入と支出や毎月固定の支出などは位置をなんとなくでグループ化しても見やすい
2025-01-01 取引先B
  a:bank       150000
  r:sales

2025-02-25 取引先A
  a:bank       100000
  r:sales

2025-02-01 取引先B
  a:bank       150000
  r:sales

cliでの操作はこんな感じ

$ export LEDGER_FILE=2025.ledger

# ざっくり
# 青色申告 損益計算書 / 貸借対照表

$ hledger bal
              500000  assets:bank
               50000  expenses:地代家賃
                 200  expenses:旅費交通費
               30000  expenses:水道光熱費
              -80200  liabilities:事業主借
             -500000  revenue:sales
--------------------
                   0  

# 月ごとの収入・支出
# 青色申告 月別売上(収入)金額及び仕入金額

$ hledger bal -M
Balance changes in 2025-01-01..2025-02-28:

                      ||     Jan      Feb 
======================++==================
 assets:bank          ||  250000   250000 
 expenses:地代家賃    ||   50000        0 
 expenses:旅費交通費  ||     200        0 
 expenses:水道光熱費  ||   30000        0 
 liabilities:事業主借 ||  -80200        0 
 revenue:sales        || -250000  -250000 
----------------------++------------------
                      ||       0        0 

# payeeごと
# 青色申告 売上(収入)金額の明細 / 仕入金額の明細
# ※Income StatementのExpensesには資産計上して減価償却するものが含まれないため注意

$ hledger is --pivot payee --sort-amount
Income Statement 2025-01-01..2025-02-25

          || 2025-01-01..2025-02-25 
==========++========================
 Revenues ||                        
----------++------------------------
 取引先B  ||                 300000 
 取引先A  ||                 200000 
----------++------------------------
          ||                 500000 
==========++========================
 Expenses ||                        
----------++------------------------
          ||                  50000 
 電気代   ||                  30000 
 JR東     ||                    200 
----------++------------------------
          ||                  80200 
==========++========================
 Net:     ||                 419800 

最後に

そういうわけで自分は最小限の手間で記帳し集計できる環境が整い快適である。学習コストが莫大にかかったためあまり人に勧める方法ではないが、

  • CLIでの作業に抵抗がない
  • 英語がわかる (Plain Text Accountingの資料はほぼすべて英語のため)
  • 一人で記帳している

という方は試してみてもいいかもしれない。

会計ソフトは確定申告を簡単にしない

『会計ソフトを使えば確定申告が楽になる』という謳い文句を信じた方も多いでしょう。私もその一人でした。しかし、マネーフォワード クラウド確定申告を実際に使って気付いたのは、会計ソフトが税務の本質的な課題を解決しない現実です。

2024年分についてe-Taxの代わりにこのサービスを使ってみたのでその経験を語りたいと思います

仕訳帳入力の難

仕訳帳入力について基本的にクレジットカードの明細などをスクレイピングで取得するMFお得意の方法が想定されているようです。 私は件数が非常に少ないのと専用カードや口座は作っていないので手入力したのですが、そうすると劣化ExcelのようなUIで非常に使いにくい。お金払ってこれかという気持ちになる

青色申告の難

せっかく会計をつけたのに青色申告決算書に完全に自動反映をというわけではなく、いくらか手入力があります。 面倒な点でいうと「売上(収入)金額の明細」などの項目は自分で取引先ごとの総額を計算して上から手入力して言う必要があります。なぜ…

確定申告の難

確定申告では多数の項目を入力する必要があります。やっていると途中で気づいたのですが「これe-Taxと入力項目同じでは?」 そう、e-Taxを似たような別のUIで実現しているだけで、ここではマネーフォワードは何も効率化してくれていないのです。

さらに私の場合海外ETFについて外国税額控除を申請しているのですが、これの明細出力にはマネーフォワードはまったく対応していません。結局、煩雑なエクスポートとe-Taxでのインポート(xtx形式なので確定申告書作成コーナーでは使えずWindows版をインストールして悪戦苦闘するなど)作業をするはめになりました。

最初からe-Taxを使っていれば半分くらいの時間で終わっていたのに…

会計ソフトへの期待が間違っている問題 ── 会計と税務は「別物」──

このあたりで自分の認識が間違っていることに気づきました。会計ソフトは会計を効率化してくれるソフトであり、確定申告は90%の作業が税務です。 そして会計ソフトの税務はおまけなので劣化版e-Taxにしかならないですし、e-Taxがやっていない効率化などは税務判断になってしまう可能性があるため積極的ではありません。

会計ソフトの『確定申告機能付き』という宣伝文句は、ESTA代行サイトが『手数料で楽に申請』と謳いながら、結局は自分で入力させる構造と本質的に同じです。検索上位の代行サイトは手数料を取るだけで、結局は自分で公式サイトと同じ情報を入力させる。同様に、会計ソフトの税務機能も「入力フォームを提供する」以上の価値を発揮しないわけです。どちらも『手間を省く』という幻想を売り、実際には形式上の効率化しか提供しません。

会計ソフトも自社を使ってほしいため税務は支援しませんとは言わないのでなかなか気づくことがないわけですが。

どうすればよかったのか

会計ソフトは帳簿作成ツールと割り切りましょう。そのため任意のソフトを使うことができ青色申告機能については気にする必要はありません。青色申告に必要な損益計算書を作る機能はほぼすべての会計ソフトについているため、その出力をe-Taxで手動で転記(勘定科目ごとのまとめなど、20項目くらいの数字)すれば済みます。自分の場合記録の数が少ないこともあり、2025年についてはオフラインの簡易的なソフトを使っています。

確定申告については税務の学習コストを明確に認識して気合をいれてやるしかありません。複雑な控除を申請する場合、国税庁ガイドラインやQ&Aを自ら読解する時間を確保しなければならないです。これを効率化したい、代行してほしい場合はソフトやサービスでの選択肢は存在せず、税理士に頼む必要があります。

申請自体はe-Taxでやりましょう。Webの確定申告コーナーの使い勝手はそこそこです。Windows版は全然違うし使いづらいのでやめておきましょう

つまり

我々が確定申告と認識していたものは「会計」と「税務」に分かれていた。会計は事実を整理する作業だが、税務は法律を適用する行為でした。後者は自分でやるか税理士に頼むかの二択しかありません。

厳しい現実ではありますが、『会計ソフトは帳簿作成、税務は自分か専門家』という線引きを明確にすれば、無駄な期待を捨て、時間を有効活用できます。2025年の確定申告では、この割り切りがあなたのストレスを軽減するはずです。

URLを好きなブラウザで開けるBrowser Picker代替を自作した

Windowsで色々な行うようになって不便なのが規定のブラウザの切り替えである。 コンテキスト(URLの中身、現在起動しているブラウザなどなど)によってSlack, DiscordなどのアプリからURLをクリックした場合に起動するブラウザやプロファイルを変更したい。

そういうツールがないか調べたところ Browser Picker というものがあり、やりたいことの8割はできるのでこれでいい感じだった。ただ一点、細かい不満があるとすれば起動が遅いことである。リンクをクリックしたあと、一瞬遅れてブラウザが起動するのでもっさりを感じる。.netC#で書かれているからだろうか

我慢できないほどではないが、いい機会なので自分で作ってみようと思ったのが以下のものである

github.com

アーキテクチャ

Visual C++ 2022でWindows APIをゴリゴリに使う形でやっている。C/C++もある程度わかるのでいけるかと思ったが、Linux / UNIXっぽいものに慣れた人間としては別の宇宙というか学習コストが高すぎる。ChatGPT の助けを借りながらこの小さいアプリケーションを作るのでさえ苦労した。

解決したこと

自由にロジックが書けるのでやりたいことは全部できるようになった。またBrowser Pickerで感じていた動作のもっさりは完全になくなり、ネイティブにブラウザでURLが開かれるのと遜色ないスピードとなった。

現状の問題点

おそらくこれはWindows 11の制限なのだが、レジストリをどう設定しても設定アプリからHTTP/HTTPSにこのアプリを選択することができない。どうもHTTP/HTTPS/MAILTOなどのリンク系の関連付けにはアプリがWindowsにインストール / 登録されている必要があるのかもしれない。

妥協案

もうBrowser Pickerはいらないので、レジストリのBrowser Pickerの起動コマンドを自作ツールの実行ファイルに書き換えたところ、あっさり動いた

[HKEY_CLASSES_ROOT\BrowserPicker\shell\open\command]
@="\"C:\\BrowserLauncher\\BrowserLauncher\\x64\\Debug\\BrowserLauncher.exe\" \"%1\""

釈然としないが、このちょっとした自分用ツールでインストールの仕組み(や、もしかしたら署名関係など)まで導入するやる気はないのでこのままである

Windowsもう少しこの辺自由度高いとうれしい

NUROがダメになったので回線品質をモニタリングした

NUROにもかかわらず今まで問題なく耐えていた自宅サーバー仲間の友人宅がついにダメになったということで、みんなでモニタリングしてクソ回線を可視化してバトって遊ぶことになった

こういう場合監視ツール何にするかが問題となるのだが、全員Mackerelを使っていたのでそれを利用することに。雑にGitHubで "mackerel speedtest" で検索したところそれっぽいGolangスクリプトが発見されたのでちょっといじって使えるようにした。

github.com

結果

見事にピークタイムになるとDownload速度が低下し、pingとjitterが暴れる様子が観測できた。今回の回線ではパケロスは検出せずでしたがこのjitterだとゲームにも向かなそう

こういう時に難しいのは観測先サーバーがボトルネックになっていないかという点なのですが、自分もNTTのIPoEでXpassなプロバイダから同じサーバーで試したところ無風だったのでやっぱNUROではないかという

その他

  • MackerelはSlackにアラートを送れるのでクソ回線アラートでみんなでワイワイ盛り上がれる
  • Mackerel無料だと1日分しかメトリクスを保存できなかったような気もするが遊びなのでOK
  • ↑のレポジトリにあるやつをcronで叩けば投稿してくれるのでモニタリングして遊ぶと楽しいと思います

追記 一日分のグラフ出た。これはひどい

どうやったらSREになれるのか

@rosylilly とSREやISUCONについて話しました。 SRE(インフラエンジニア)になるキャリアパスというものが昔とかなり異なってきていて、いまはどうなっているのか、どういった教育が必要なのかなどについて議論ができました。そういったことについて語る機会はなかなかなかったのでおもしろい話になったんじゃないかと

anchor.fm