任意の構成のSandbox的な環境をTmuxのwindowとして用意するようにしたところターミナルから出ずにサクっと動作検証とかが行えてハッピーになったよ、という記事。ここではvanillaなGoのプロジェクトの例を紹介しますが、お好みの構成でSandbox環境を作ってみてください。

全然大したことをやっているわけではないですがTmux, Neovimやそれらのプラグインの普及活動になれば嬉しいので書いてみます。

動作イメージ

こんな感じでvanillaのGoプロジェクトをTmuxのwindowに開いておいて、確認したくなったときにすぐwindowを切り替えてコードを書いて実行結果を確認できるようにしている。(Gifの例はGoの書式指定子%+vの動作を忘れて試してみているところ)

go-playground

Gifでやっていることは以下

  1. GoのSandbox環境を開いたNeovimが起動しているwindowに切り替え
  2. コードを書く
  3. Neovim上でターミナルを表示
  4. make runを実行してコード実行
  5. 結果を確認
  6. 元いたwindowに戻る

tmux-fzfなど筆者のターミナル環境については以下参照

開発の効率化のためにやっていること ターミナル編

筆者はGoの動作を確認したいことがほとんどなのでこういった構成にしているが、必要に応じてよく使うFWをセットアップした環境を作っておくと便利そう。

プロジェクトの内容

Go固有の内容もあるので参考程度で。

├── .git
├── .gitignore
├── go.mod
├── go.sum
├── main.go
├── main.go.sample
├── main_test.go
└── Makefile

基本的にmain.goの中身を編集して、go run .で実行して実行結果を確認するということをしている。

Makefileの中身は以下のような感じになっていて、make runでコード実行、make clearmain.goをまっさらにできるようにしているだけである。

.PHONY: run clear

run:
  @go run .

clear:
  @cp ./main.go.sample ./main.go

main.go.sampleの内容は以下。

package main

func main() {
}

あとはよく見返したくなるコードはmain.go以外のファイル名で保存したり、commitしておくと後からでもさっと確認できてよさそう。(筆者はそこまでやってない)

感想

ターミナルから出ずに作業が完結できてうれしい。

同様のことはGoの場合はブラウザからThe Go Playground(※)を開いても行えるが筆者は何でもターミナルでできると嬉しい人なのでできるようにしてみた。

※ブラウザ上で実行できるGoのエディタ + 実行環境がセットになったやつ。https://go.dev/play/

あとやるとしたらThe Go PlaygroundにあるURL発行機能とかを実現できると他の人への共有も楽になっていいのかもしれない。(今のところあんまり他の人に共有する機会がないので困っていない)

補足

最後に補足としてGif内で使っているNeovimのプラグインを紹介します。

ターミナル表示

voldikss/vim-floaterm

floaterm

GoのSandbox環境のmain.goに書いたスクリプトを実行するために、Neovimからターミナルを表示するシーンで使っている。

コード編集してサクっと動作確認したいときなどに便利。(といいつつ最近動作の重さが目立ってきたので<C-z>でNeovimの起動元に戻ってターミナルを操作することが多い)

カーソル移動

yuki-yano/fuzzy-motion.vim

fmt.Printf("u: %v\n", u)uから%vの位置にカーソル移動する際に使っているプラグイン。

動作のイメージはこんな感じ。

fuzzy-motion

起動すると文字がグレーアウトするのでジャンプしたい文字列を入力するとその文字にジャンプするためのキーワードを表示してくれるというプラグイン。

同様の機能をもつプラグインとしてはeasy-motionなどのプラグインが有名だが、fuzzy-motionはジャンプしたい文字列をfuzzy-finder形式で絞り込んでくれるのが大きな特徴。(詳しくはリポジトリのREADME参照)

筆者はノーマルモードでfキーを押下するとプラグインが起動するように設定している。

カーソル移動の効率がよすぎて正直もうこれなしでは開発したくない。

LSP Server

neoclide/coc.nvim

Language Serverをホストするためのプラグイン。

すごく簡単にいうと補完や関数定義を表示したり定義ジャンプできるようにしたりしてくれる。

coc-nvim

以上です。ここまで読んでくれてありがとうございました。