普段の作業風景紹介

Posted by rhoboro on 2022-12-18

この記事は RevComm Advent Calendar 2022 の18日目の記事です。

はじめに

わたしが所属しているRevCommでは2年ごとに貸与PCの交換が行われます。 早いものでわたしも入社から2年が経ち、つい先日新しい14インチMacBook Proが届いたのでセットアップを行いました。
そのセットアップ中にMac向けウィンドゥマネージャアプリMagnetを上司に相談して購入したのですが、後日1on1にてその上司から「作業フローなどをもっと共有してもらえると嬉しい」という話をいただきました。 そこで、この記事ではわたしが普段どのように作業をしているか紹介します。

同僚の作業風景を隣で見る、そんな気持ちで読んでいただけると嬉しいです。

作業環境

前提となる作業環境はこんな感じです。

  • ディスプレイ: EIZO EV3285
    • コロナ禍でコワーキングスペースよりも自宅で作業することが増えたため定額給付金で購入しました。
  • キーボード: HHKB Professional HYBRID Type-S
    • 自宅では墨/無刻印を愛用中。
    • コワーキングスペースには初代の墨を置いてます。
  • 貸与PC: M1 MacBook Pro 14インチ

マルチディスプレイだと酔ってしまうため、自宅ではMBPはクラムシェルにしてディスプレイ1枚で作業しています。 仮想デスクトップを複数使うのも苦手なため、Cmd+Tabや後述のAlfred、Ctrl連打でアプリを切り替えながら作業するスタイルです。

desk.jpg

作業スタンス

効率的な働き方、作業の仕方というのは人それぞれです。 好みが作業効率やモチベーションに与える影響は非常に大きいですし、自分に合わないツールや働き方をしても効率は上がりません。

ここではわたしの作業フローを紹介しますが、その前にわたしの作業スタンスを書いておきます。 ツールと書いてますが、サービス、アプリケーション、コマンド、ライブラリ、フレームワーク、デバイスどれも同じです。

  • 使うツールを増やしすぎない
  • 使うからにはちゃんと使いこなしたい
  • 標準でできることは標準で
  • 作り手やツールの思想から離れた使い方は避ける
  • 公式や組込以外の3rd partyプラグインを使うのは苦手
  • カスタマイズをする場合は自分で理解、管理できる範囲で行う

例えば、わたしはvimをよく使いますが組込プラグイン以外のプラグインは使っていません。 ただし、少しずつ育ててきた190行程度の小さな?.vimrcはあり、どの環境でもこの.vimrcを使っています。 zshも同じでプラグインは使っていませんが、.zshrcに記述したいくつかの自作関数はなくてはならないほど便利に使っています。

いま現在の.vimrcと.zshrcはこちらのGistに置いたので、もし興味があれば参考にしてみてください。

わたしの作業風景

どう書くのが良いか悩みましたが、作業風景そのままに記載することにしました。

朝イチの打刻

朝PCを開いてログインしたら、次の操作をしています。

  • Ctrl+SpaceでAlfredを起動
  • 「ch」と入力してGoogle Chromeを起動
  • Ctrl+Lでアドレスバーに打刻サイトのurlの最初数文字を入力
  • 打刻サイトが開いたら打刻ボタンをクリック
  • 同じようにAlfredに「sl」と入力し、Slackを開いて未読がゼロになるまで確認

ここまでが朝イチのルーティンです。
Alfred は個人的に愛用しているツールの1つで、ランチャー機能以外にクリップボード履歴の検索、スニペット機能、ワークフロー機能を中心に活用しています。

alfred.png

32インチのディスプレイは3分割で使うことが多く、右側1/3にSlackかメモ帳代わりのSublimeText。 残り2/3にGoogle ChromeやPyCharm、TerminalアプリのKittyを開いてメインの作業をしています。 この辺りのウィンドウ操作は冒頭で書いたMagnetを使ってショートカット操作で切り替えています。

desktop.png

ターミナルでの作業

さて、打刻を終えて、Slackの未読がゼロになったら、Ctrl連打でターミナルを表示します。 ターミナルに関してはIDE組み込みのターミナルは全然使っておらず、常にKittyを使っています。 ターミナルはAlfredのワークフロー機能を使ってCtrl連打でいつでも表示したり隠したり切り替えられるようにしています。

前日のTmuxのセッションが残っている場合はそのまま続きの作業に入ります。 作業中のセッションがなければCtrl+Jでその日作業するリポジトリへ移動します。 わたしはずっと同じセッションを使い続けるよりも、いつでも気軽に破棄できる状況をキープしたいタイプなので、管理が面倒になってきたらすぐにセッションを破棄する傾向にあるようです。

cagure.gif

Ctrl+Jで動くsk-srcはこちらの記事で紹介されていたpeco-srcを参考にした下記の自作関数です。 目的のリポジトリへのcdがとても簡単にできます。

# sk-src
bindkey '^J' sk-src
function sk-src() {
  local src=$(ghq list | sk -q "$LBUFFER")
  if [ -n "$src" ]; then
    src=$(ghq list --full-path | grep "$src$")
    BUFFER="cd $src"
    zle accept-line
  fi
  zle -R -c
}
zle -N sk-src

なお、仕事で使うリポジトリは全て $HOME/go/src/github.com/revcomm/xxx にあるため、direnvを用いてrevcomm/以下に移動した際には開発環境用AWS_PROFILEが自動的にエクスポートされるようにもしています。

メインとなるディレクトリへ移動した後は、tn workなどのコマンドでtmuxセッションを立ち上げます。 ペインの分割はいつも適当ですが、左右に分割して片方でdocker compose up、もう片方を上下に分割してmypyやpytestを動かしていることが多いです。
別リポジトリで作業を行う際にはtmuxのタブを増やし、それぞれのタブにリポジトリ名に対応したわかりやすい名前をつけています。

なお、docker compose ...のような長いコマンドを打つのは疲れるので、よく使うコマンドをCtrl+Yから簡単に選択して実行できるようにしています。 このsk-cmdは以前こちらの記事で紹介したものを改変したものですが、これがないともうやっていけない...というレベルでよく使っている自作関数です。 Ctrl+J, Ctrl+Y以外にもCtrl+Gでディレクトリ移動、Ctrl+FでVimで開くファイルを検索できるように.zshrcで定義しています。 最近はbatrigprepfdなどRust製の高速、マルチプラットフォームなコマンドをよく使っていて、Fuzzy FinderにはSkimを使っています。

sk-cmd.png

コーディング

ちょっとした変更であればターミナル上でggでgrepした結果をvimで開いて編集することも多いですが、ほとんどのコーディングはPyCharmで行っています。
もともとAndroidStudioを使っていたこともあり、IDEは昔からPyCharmを使っています。 JetBrains製IDEはデフォルトで必要十分な機能が揃っていること、言語問わず同じ使用感で使えるところがプラグインをたくさん入れるのが苦手な自分には合っています。 いまPyCharmで使っているプラグインは下記の3つでした。

コードの変更が終わったらGitHubにプッシュしますが、git関連の操作はすべてgitコマンド(一部ghコマンド)で行っています。 この辺りはg="git"のようなちょっとしたエイリアスを使っている以外は普通の作業フローですが、最近はgh-dev-prという自作エクステンションを使っています。 RevCommではfeatureブランチをmainブランチとdevelopブランチの両方に入れるブランチ戦略を取っているプロジェクトがいくつかあり、このgh-dev-prはmain向けPRと同じタイトルでdevelop向けPRを作ってくれます。 小さなエクステンションですが、想像以上に便利だったので個人的に手放せないツールになりました。

番外編: 環境構築

.vimrc, .zshrc などの設定ファイル群は個人のプライベートリポジトリrhoboro/dotilesで管理しています。 brew install に渡す一覧brewlistもまたこのリポジトリに置いています。 ツールは特に使わず、素朴なwhile文でbrew installに渡して使っています。

環境構築はこのリポジトリをcloneした後、各種シンボリックリンクを作成するだけなので楽ちんです。 上記brewlistに記載したもの以外はGoogle Chrome, Slack, Alfred, PyCharm, Python, 1Password, Docker Desktopくらいなのでこれらはポチポチして入れています。 よく使うもの以外は必要になった時に必要になったものを入れるスタイルです。 いま入れているアプリケーションはこれだけでした。

apps.png

最後に

何気なく行っている作業も1つずつ書き出すとなかなか大変でした。。。笑
RevCommのようなリモートワークが当たり前の環境だと、隣の席の同僚の作業風景を見る機会はなかなかありません。 この記事が少しでも誰かの参考になればと思います。
また、もっと良いツール、効率的な作業フローはあるはずなので、もし良かったらみなさんの作業風景もまとめて教えていただけたら嬉しいです。