ぶていのログでぶログ

思い出したが吉日

業務で使っているPCをLinuxデスクトップにしてから3年半が経った

f:id:buty4649:20211205160131p:plain

この記事はGMOペパボエンジニア Advent Calendar 2021の5日目とLinux Advent Calendar 2021の10日目*1の記事です。 昨日ははらちゃんのブログをもっといい感じにするでした。 差分転送することでアップロードを高速化するのは目から鱗でしたね。 データのアップロードが遅いと更新のモチベーションが下がってしまうことがあるので、ブログを長く続けるためにも高速化は重要ですね!


2018年のアドカレで業務で使っているPCをLinuxデスクトップにしてから半年が経ったという記事を書いたのですが、それから3年経って今はどうなったかという記事を書いていきたいと思います*2。

現状はどうなのか?

相変わらずUbuntuデスクトップをインストールして開発環境として利用している。 前回の記事では、Ubuntu18.04であったが順当にバージョンアップを繰り返し今はUbuntu21.10を使っている。LTSではない理由は後述。 Ubuntu18.04のころは、かなりハマりどころが多く特にマルチディスプレイ環境では挙動がおかしいということが多々あった。 しかしながら、Ubuntu20.10ぐらいから?(うろ覚え)かなり改善され今ではそのような問題は起こっていない。 デスクトップまわりはこの3年でかなり改善されたと言える。

なぜLTSを使わないのか?

前回の記事のブコメにLTSを使わないことについての言及があった。 UbuntuではLTSが10年サポートされることもあり、LTSを選ぶことが鉄板だろう。 特にプロダクション環境など長期的に利用が見込まれる部分においては、10年間サポートされその間いつでも同じ環境が構築できるのはかなり魅力的だ。

しかし、開発環境だとLTSを使うより新しいバージョンを使ったほうがメリットが大きい。 具体的には新しいバージョンのソフトウェアやカーネルが使えることだ。 前述したデスクトップ環境の不具合修正などもそれに当たるし、新しいLinuxカーネルで追加される機能もある(eBPFなどなど)。 それらを享受するためにLTSを使わず都度最新のバージョンをインストールしているというのが私の理由である*3。

使用機種について

前回まではDell New XPS13(9370)を使っていたが、2年経ったくらいにPCのアップデートということで、DellのLatitude 7310に変更した。 この機種は、XPS13のビジネスモデルというポジションの機種でハイエンドモデルになっている。 XPSからLatitudeに変えたのは会社のPC調達の兼ね合いによるものであるが、ビジネスモデルだからか、HDMIとUSB-Aポートがあったりして地味に便利である*4。 そのかわり、給電できるUSB-Cポートが左にしかなくここは不便なところである…。

Linuxデスクトップを選ぶ利点

今改めてLinuxデスクトップを選ぶ利点を考える。 WindowsではWSLがかなり安定して動くようになりノウハウも蓄積されてきているし、Macのペチペチキーボードも3年前にくらべてかなり改善された(と聞いている)。 また、私の関わっている範囲では、Dockerやk8sなどのコンテナ技術をサービスで利用していて、それらの環境があればどのOSを選んでも差異がなくなってきた。 3年前にLinuxデスクトップを選んだ時は、ここまで環境が整備されていなかったのでネイティブLinuxを開発環境として普段使いするというメリットがあったものの今となってはそのメリットは少ないかもしれない。 Dockerだけについていうと、Docker Desktopのライセンス変更があったがLinux環境ではそもそもDocker Desktopが提供されていなかったり、CLIから使うことが多いために影響がなかったのはメリットかもしれない。

それでも私がLinuxデスクトップを使い続けているのは、慣れしまったから移行がめんどくさいとか、会社の設備も更新されて積極的にWindowsやMacにする必要もなくなった(後述)とか、サーバ環境でも使っているUbuntuを普段から使うことでいろいろな機能になれておくとかそういう理由が主になっている。

業務への影響

前述したとおり、普段の業務ではLinuxサーバへアクセスするので問題は起こっていない。 Officeツールは3年前と変わらずGoogle Workspace(旧G suite)をペパボでは使っているので問題はない。 MS Officeが使いたくなっても今ではOffice360があるので特に問題は発生しないと思う*5。 ブラウザで使えるアプリは、ブラウザがあれば動くのでとても便利だ。 ただ、 なぜか Chrome/FirefoxでアクセスしているのにUAのOS情報だけみて弾くサイトがたまに存在していて(Yahoo!ニュースとか)困ったりすることがある。 そういう時は、UAを詐称すれば見られるのでTwitterで愚痴をつぶやいてからアクセスしている。

前回の記事では、LinuxデスクトップとWindowsのデュアルブートにしていた。 これは、勤怠や一部の業務を行うためにSSL-VPNを使う必要がありこのクライアントがWindows/Macにしかなかったためだった。 しかし、ペパボの情報システム部*6の頑張りによりアップデートされ、SSL-VPNがLinux対応した!!!最高!!!!!!!!!1

ビデオチャットツールについて

ZoomやGoogle Meetは問題なく使える。 ZoomもGoogle Meetも仮想背景が使える*7ので他のOSと比べて遜色なく使える。 しかし、WaylandになったせいかZoomの画面共有で特定のウインドウが選べなくなったのは少し不便だ。 私はそこまでZoomを使わないので影響はないが、メインでZoomを使っていたら少し悩んでいたかもしれない。

利用しているアプリケーションについて

ここからは私が普段使っているアプリケーションを紹介する。 矢印(->)があるものは3年前からどう変わったかというのを示している。

  • ターミナル: Alacrittyにパッチを当てたやつ -> Alacritty
  • エディタ: GVim ->Visual Studio Code
  • ランチャー: Ulauncher -> なし(GNOME標準)
  • シェル: bash -> fish shell
  • バージョン管理: **env -> asdf
  • アプリ一元管理ツール: なし -> Rambox -> Ferdi
  • スクリーンショット: Flameshot
  • 入力メソッド: fcitx-mozc
  • ブラウザ: Firefox, Chrome
  • コンテナ: Docker Engine
  • 仮想化: Vagrant, Multipath
  • セキュリティ: ClamAV, CROWDSTRIKE Falcon

ターミナル: Alacritty

変わらずAlacrittyを使っている。 以前まではOSC52で送れるバッファのサイズがとても小さく、それを増やす独自パッチを当てていたがv0.5.0くらい?(うろ覚え)からバッファがかなり増えたので今はパッチを当てていない。 しかしながら、今度はdebパッケージを公式では配布しなくなってしまったので、自分でパッケージングしている。

github.com

ランチャー: なし(GNOME標準)

Ulauncherを使っていたのだけど、私の使い方だとGNOME標準のランチャー(Superキー押すと出てくる画面)で十分なので消してしまった。

アプリ一元管理ツール: Ferdi

もともとこの手のツールは使わずにブラウザで管理していたのだが、タブが増えて辛くなってきたので一元管理ツールを使うことにした。 そこで、Ramboxというアプリを使っていたのだが、最近あまり開発されていないようにみえたのでFerdiに乗り換えた。 FerdiはFranzをハードフォークしたOSS。 Franzでもよかったのだが、面白そうだからFerdiを使っている。 Franzと違いサポートしているサイトが少なかったりするが、自前で拡張を書けば対応できるので便利。 自作したFerdiの1Passwordプラグイン -> https://github.com/buty4649/ferdi-1password-plugin/

スクリーンショット: Flameshot

Macを利用した際にSkitchを愛用していた。 それと同等の機能があるスクリーンショットアプリが欲しくFlameshotを使っている。 しかし、これをインストールしただけではPrintキーを押してもGNOMEのScreenshotが起動してしまうため、カスタムキーバインドでFrameshotを起動するようにしている。 f:id:buty4649:20211205150419p:plain

コマンドで設定する場合は以下のような感じ。

$ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
$ gsettings set 'org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/' command 'flameshot gui'
$ gsettings set 'org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/' name 'screenshot'
$ gsettings set 'org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/' binding 'Print'

入力メソッド: fcitx-mozc

UbuntuではiBusが標準だがFcitxのほうが安定していると聞いたのと、Wayland/mozcを利用する場合はFcitxのほうが使い勝手がよいらしいので変更している。 切り替え自体は簡単なので、リンク先の記事を参照のこと。

仮想化: Vagrant, Multipath

今まであまり仮想化環境を使ってこなかった。 必要があれば、会社のプライベートクラウドに建てるかvirt-managerを都度インストールして使っていた。 しかし、久しぶりにVagrantを使ってみたらVagrant Libvirt Providerがかなり改善されており、VirtualBoxプロバイダを利用したときと遜色なく使えるようになっている。 また、Vagrant Cloudでもlibvirt向けのイメージが充実していてスムーズに利用できるようになっている。相変わらずイメージのダウンロードは遅いが….。

最近Windows対応したことで話題になったCanonicalのMultipath*8も時折使っている。 こちらは、snapでインストールできる手軽さもありさっくり利用でき、また仮想マシンのブートもそこそこ速いのでちょっとした検証に使えて便利だ。

セキュリティ: ClamAV, CROWDSTRIKE Falcon

セキュリティ関連のソフトウェアについては会社の方針としてこれらを入れているという感じ。 アンチウィルスソフトとしてClamAVを、エンドポイント対策としてCROWDSTRIKE Flaconをインストールしている。

おわりに

前回の記事から3年経ったので改めて振り返ってみた。 3年前に比べ不具合も減っていて業務PCとして普段使いしていても特に困ることがなくなった。 UbuntuやGNOMEなど開発されている人たちには感謝しかない 🙏

来年4月には新しいLTSである22.04(Jammy Jellyfish)がリリースされる。 私がLinuxデスクトップ環境に移行してから3つ目のLTSである。 だいぶ長く使っているなぁ〜と思うとともに、許される限りはこのままLinuxデスクトップ環境を使っていきたい。

*1:空いていたのでせっかくなので追加

*2:自作シェルのことについて書こうと思っていたけど、だらだらと特に内容もないことを書いてしまったのでこの内容に変更した。こういう機会でもないと振り返られないと思うので。自作シェルの話については、別の記事で書く予定たぶん

*3:半年ごとにアップデートがくるとお祭り気分でテンションがあがるという理由もあるw

*4:ちなみに、今のXPS13はUSB-Cが2ポートに減ってたりして地味に不便である

*5:使ったことはないが、ブラウザで利用できるので問題はないだろうと思っている

*6:ペパボではコーポレートエンジニアリンググループ(CEG)と呼ばれている

*7:Zoomは最近対応した

*8:ググらビリティがとても低い…

' }) e.innerHTML = codeBlock; // コピーボタンを設置 // https://syu-m-5151.hatenablog.com/entry/2023/05/09/181943 var copyButton = document.createElement('button'); copyButton.className = 'copy-button'; copyButton.textContent = 'copy'; copyButton.onclick = function() { var codeElem = this.parentNode.parentNode.querySelectorAll('div.code-line:has(> div.codeline)'); var copyText = ""; codeElem.forEach(e => copyText += e.innerText + "\n"); navigator.clipboard.writeText(copyText); var oldText = this.innerText; var self = this; self.innerText = "copied!"; setTimeout(function() { self.innerText = oldText; }, 2500); } var container = document.createElement('div'); container.className = 'copy-button-container'; container.appendChild(copyButton); e.insertBefore(container, e.firstElementChild); }); var quoteBlock = document.querySelectorAll('blockquote > p'); quoteBlock.forEach(function(e) { const match = e.textContent.match(/^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\n/); if (!match) { return; } var type = match[1]; var a = document.createElement('p'); a.classList.add('markdown-alert-title'); switch (type) { case 'NOTE': a.innerHTML += ''; break; case 'TIP': a.innerHTML += ''; break; case 'IMPORTANT': a.innerHTML += ''; break; case 'WARNING': a.innerHTML += ''; break; case 'CAUTION': a.innerHTML += ''; break; } a.innerHTML += type.charAt(0) + type.slice(1).toLowerCase(); e.textContent = e.textContent.replace(`[!${type}]\n`, ''); e.parentElement.classList.add("markdown-alert"); e.parentElement.classList.add(`markdown-alert-${type.toLowerCase()}`); e.parentElement.insertBefore(a, e); }); });