更新日時で差をつけろ

むしろ差をつけられている

開発環境を晒す2023

EEIC(東京大学工学部電気電子・電子情報工学科)Advent Calendar 2023の22日目の記事です。てっきり23日目だと思っていたので、あせりながら書いています。eeicで人々のPCを見ていると、MacbookVSCodeな人が多いので、少しでも変な構成にしてくれる人が出ることを願って筆者の環境を晒してみます。筆者はLinuxをメインで使っていますが、かなりの部分はmacOS環境にも適用できるはずです。

eeicでは3年の春にそれぞれにラップトップが配布されます。とはいえ常用している学生は少ないようです。ポートたくさんあるし、持ち運べるWindowsがこれしかないので重宝しています。

入力装置

  • キーボード:Corne Cherry Light
    • 左右分割です。キットを買ってきてはんだづけしました。
    • 静音赤軸にしました。結構底打ちする癖があるので、もうちょっと重めのキーにしたり、指ごとに重さを変えてみたりしたりんですがやれてない…。アプリに応じて左手でペンを握っているときに右手だけで操作できるようなショートカットを設定すると便利です。

Corne Cherry Light
オタクは黙って無刻印

  • マウス:Logicool Ergo M575S
    • 先月買いました。トラックボールマウスは初めてです。モノだらけの狭い机だと便利ですね。ゲームとかだとちょっと苦労しそうではあります。

出力装置

デスクトップ環境

いわゆる「パソコンの画面」のことです。デスクトップがあって、ファイルがちらかっていて、その上でウィンドウを滑らせることで作業する…というのが一般的な体験ですね。

「この画面はLinuxの画面で〜」と言い方をよくしますが、厳密にはこの見た目を司るのはLinux本体(kernel)ではなく、Desktop environmentとかWindow manager(DE, WM)というソフトウェアです。ウィンドウの動きを管理するのがWMで、その周りのメニューなど他のUIを管理するのがDEと考えるといいです。当然DE, WMはただのソフトウェアなので、入れ替えることができます。UbuntuのデフォルトDEはGNOMEですが、筆者は好みのKDEに差し替えて、さらにWMをタイル型のi3wmにしています。これはタイルのようにウィンドウを敷き詰める(下画像参照)というもので、狭い画面にもってこいです。キーボードで操作が完結するのも利点です。

画面
みっちり

自室のデスクトップPCも同様の設定です。そちらはディストリビューションがそもそもArch Linuxなので、はじめはDEが入っていません(!)。学科PCもUbuntuを吹き飛ばしてArchにしたいくらいなのですが、実験用のソフトウェアなどのインストールが大変になるので、DE/WMの入れ替えで我慢しています。

デスクトップやエディタのカスタマイズはどこまでもこだわれて、すごく楽しいです。 r/unixporn にはハッカーっぽい見た目の設定例がよく上がっています。

エディタ・シェル

EEICの講義中に、シンタックスハイライトのないエディタで非等幅フォントでCを書いているのが見えて、仰天したことがあります。悪いエディタを使っているとすぐに間違えて、イライラしてしまいます。パソコンを触る時間の5,6割はここにいるので、なるべく使いやすくしたいです。

筆者はエディタをHelixVisual Studio Codeを気分で使い分けています。Helixは雑に言ってしまえばVimの兄弟です。:wq! みたいな謎コマンドを打つ点は変わらないのですが、コマンドの補完やガイドが充実しているので覚えるときの苦しさは減っています。

ターミナルベースのエディタはやっぱり素直にサクサク動くのが楽しくて手放せません。VSCodeにもVimやHelixのキーバインドを再現するものがありますが、完璧には再現できないのでむず痒い気持ちになります。その一方、VSCodeはすごくプラグインが豊富です。GitHub Copilotが便利なのでVSCodeを使うことも増えてきました。Microsoftに包摂されていく…。

  • シェル:コマンドを打ち込むときはfish。シェルスクリプトPOSIX互換になるように書いています。shの文法はいってしまえば非直感的でなかなか覚えられず、ChatGPTに頼りきりです。
  • sed, awkあたりはよく使います。なかなか文字列操作のためだけにコマンドを覚えようという気にもならず、かといって自然に覚えるほど頻繁にも使わないし、使い捨てなので別にエレガントに正しく書く必要もありません。こういうケースでもChatGPTが便利だと思います。

よく使うコマンドラインのツールも挙げます。

  • rg:速くて賢いgrep
  • exa, bat:それぞれls, catの代替。見やすくなります。
  • qalcコマンドラインで使える電卓。こちらの気持ちをいい感じに汲み取ってくれます。
  • z: かしこいcd. 移動したいディレクトリの名前の一部を打つと、過去の履歴を考慮していい感じに飛ばしてくれます。
  • fzf: いろいろなあいまい検索ができます。ファイルを探す時によく使います。

  • フォント:Jetbrains Mono。見やすいし、なんとなくプログラミングしてる感があって好き。

  • ターミナルエミュレータAlacritty。とにかく軽量。タブ機能などはありませんが、それはtmuxやzellijでやるのでかまいません。GNOMEでいう「端末」やmacOSの「ターミナル」アプリを置き換えるものです。

ブラウザ

  • ブラウザ:Vivaldi。いい感じの左タブバーにできるので使っています。
  • 検索エンジンDuckDuckGo. 検索結果のスイッチがあって、これをつけたり消したりすると検索結果の言語を切り替えられます。プログラムの話をすると、Qiitaにちらばった断片的な個人のメモが大量に出てくることがあるので、そういうときに便利です(そういうメモをとること、公開すること自体は良いことだと考えています)。

DuckDuckGoのスイッチ。
地味に便利

メモとノート

ノートにはタブレットの手書きノートから、Markdownファイルを使っています。数式や図をたくさん書きたい講義は手書き、そうでもない講義はMarkdownにしています。このあたり未だに悩んでいて、いっそ全部紙に戻してしまおうかと思うときもあります。ただのテキストファイルなので先述のエディタでも書けるのですが、プログラムを書く時と文章を書く時は気分を切り替えたくて、ツールも使い分けています。

  • Notion:色をつけたり表を置いたり資料をたくさん置くには便利。UIも洗練されています。普通はこれで事足ります。
  • Obsidian:PCでMarkdownファイルを編集するのに使います。Notionに比べると機能は落ちますが、速いのでざくざく書きたいときに重宝します。
  • Silverbullet:まだ荒削りで(それがいい)、そんなに使っている人はいないかも。Live Queriesなどの実装が面白くて、コードを書く人には楽しいと思います。とりあえずは個人のサーバー(VPS)に立てっぱなしにして、 https://sb.2done.club からアクセスできるようにしています(いまは認証がかかっているので、筆者以外閲覧できません)。
  • Workflowy, Scrapbox, Org-modeあたりも楽しいツールです。

この手のツール・オーガナイザーは文房具みたいなもので、あれこれ試すこと自体が楽しさをもたらしてくれます。新しいものが出ると目移りしてそれを使いたくなってしまうので、なるべくMarkdownなど一般的な形式でデータを出力・引き継ぎできるものを選んでいます。たとえばObsidianとSilverbulletはMarkdownファイルの入ったディレクトリを直接参照する(Local-first)ので、「出先ではブラウザからSilverbulletで書いて、部屋でObsidianを使って編集する」なんてこともできます。12日目のObsidian+Webdavでストレージサービス非依存のノート環境を用意した話 - 強炭酸と10%の砂糖にも似た話がありました。自宅サーバかっこいい!大学のGoogle Workspaceも容量制限が導入されたことだし、学科で勝手に巨大容量のnextCloudでも立ててやりたいです。

データをファイル単位で持っておくとバックアップが楽になります。とはいえバックアップ用にNASを買う金もないので、Raspberry Piに外付けHDDをつないでNASだということにしています。Syncthingで端末間のファイルを同期していますが、このところエラーやコンフリクトが頻発するのでNextCloudの導入も検討しています。ひとつ自宅サーバーなりVPSなりを借りてドメインを取っておくと、こういったソフトウェアを手軽に試せて便利ですね。

syncthing
Syncthingでいろいろ同期

スプレッドシートは計測データの記録には必須ですし、私的にもたまに使います。それこそ編入試験対策のときはヘビーに使っていました。表計算はある程度規則・構造が安定しているデータを流しこんで、いろいろな見方をするには良いツールなんですが、文章や階層構造が得意ではないのでなかなか使いどころに悩みます。

予定については、vivaldi.net のカレンダーを各端末で(CalDAVで)同期しています。PCではThunderbird, スマホでは標準のカレンダー。その他のTODOなどは適当にMarkdownに書いて先述の方法で管理しています。