17
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

株式会社POL テックカレンダーAdvent Calendar 2021

Day 2

ターミナルだけで開発をがんばるためのツール

Last updated at Posted at 2021-12-01

これは株式会社POL テックカレンダー 2021 2日目の記事です。前日の記事はこちらです。

はじめに

「黒い画面だけで開発してるのって、なんだかエンジニアっぽくていいよね。」

POLでエンジニアをしているオクと申します。上の言葉は私の上長の言葉です。
私は今年の8月にPOLに入社しましたが、それまでは博士課程とポスドクでの研究業務をしていたため、開発は未経験でした。
そんな私が開発する上で、できるかぎりターミナルだけを使って開発をしたときのツールとTipsをまとめます。
最初のモチベーションは単にNeovimを使いたかったのと、環境構築を楽にしたいのでHomeBrewを使って管理したかったからスタートしました。人の使ってるツールってあんまり知らないので、他に便利なツールや使い方があれば教えていただきたいです。
今では便利なGUIアプリがありますが、黒い画面だけでかっこよく開発してみましょう。

開発環境

環境 名前
OS macOS Big Sur
CPU Intel core i5
サーバーサイド Java, Rust
フレームワーク/サーバーサイド Play2 Framework/Spring Boot
フロントエンド TypeScript/JavaScript
フレームワーク/フロントエンド React, Next.js
データベース MySQL
インフラ AWS, Docker, K8s
リポジトリ管理 GitHub

各ツールの使い方

ここでは、PCの環境構築からコードがプロダクトに取り込まれるまでに使うツールを説明します。
さあ、ターミナルを開いてかっこいいハッカーになりましょう!!
私のdotfilesを参照いただきながらご覧いただくと、理解しやすいと思います。

開発環境設定編

Macの設定

ここの設定は好き嫌いがあると思います。

  1. ファインダーで隠しファイルを表示する。

    defaults write com.apple.finder AppleShowAllFiles TRUE
    defaults read com.apple.finder AppleShowAllFiles
    killall Finder
    
  2. DS_Storeを作成しないようにする。

    defaults write com.apple.desktopservices DSDontWriteNetworkStores true
    defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true
    

HomeBrew

HomeBrewはMacでもLinuxでも使えるパッケージマネージャです。特に説明はいらないと思います。
PCを変えてもHomeBrew bundleのコマンドでソフトウェアが一発でインストールできます(後述)。

  1. 以下のコマンドでHomeBrewをインストールする。

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    
  2. 以下のコマンドでエラーを確認する。

    brew doctor
    

ただし、HomeBrewで入れたものが裏で勝手に動いていて不都合が起きる可能性があります。私はありました。この点は注意が必要です。

dotfiles

様々なソフトウェアの設定ファイルはドット(.)から始まる隠しファイルであることが多いです(例:.bashrc、.vimrc、.Brewfile)。そのため、それらドットファイルをまとめて管理することで、環境構築を楽にします。
また、XDG Base Directoryの仕様に基づき、HOMEディレクトリ配下にある.configディレクトリにドットファイルを配置することも多いので、.configディレクトリも含めて管理します。
私の環境ではdotfilesは以下のようになっています。管理するためにはGitHubを使っています。

    ./dotfiles
    ├── .Brewfile
    ├── .bashrc
    ├── .isort.cfg
    ├── .pypirc
    ├── .textlintrc
    ├── .tool-versions
    ├── .zshenv
    ├── README.md
    ├── config
    │   ├── asdf
    │   ├── coc
    │   ├── fish
    │   ├── flake8
    │   ├── git
    │   ├── htop
    │   ├── latexmk
    │   ├── mypy
    │   ├── nvim
    │   ├── pypoetry
    │   └── yarn
    └── init.sh

各ドットファイルはinit.shでシンボリックリンクを貼っています。init.shは単にシンボリックリンクを貼っているだけなので、もう少し工夫のやりがいがあると思います。

  1. dotfiles をgitからcloneする。

     git clone https://github.com/w40141/dotfiles.git
    
  2. シンボリックリンクを貼る。

     cd dotfiles
     ./init.sh
    
  3. .BrewfileからHomeBrew経由でインストールする。これから使うコマンドは特に断りがない限り、このコマンドでインストールできている仮定で進めます。

     brew bundle --global (--force)
    

fish

シェルをfishにします。これは本当に好き嫌いがあると思います。
fishのいいところは補完が優れている、色がカラフルなところだと思います。だめなところはbashとzshのコマンドとの互換性がないところです。

  1. fish のパスの確認する。

    which fish
    
  2. シェルの変更する。

    sudo vi /etc/shells
    
  3. 末尾にfishのパス (例:/usr/local/bin/fish) を追加する。

  4. ログインシェルをfishに変更する。

    fish
    chsh -s /usr/local/bin/fish
    
  5. fisher をインストールする(fisherのコマンドは変わることがあるので、インストールする前に確認したほうがよいです)。

    curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
    
  6. fisherプラグインを入れる。以下の例ではfzfを入れています。

    fisher install jethrokuan/fzf
    
  7. 必要があればfisherプラグインを更新する。

     fisher update
    

asdf

asdfはプログラミング言語やCLIツールのバージョン管理ツールです。私は言語の管理をほとんどasdf経由にしています。理由としては楽だから、それだけです。ただし、Rustに関してはHomeBrewでrustupをインストールし、それ経由で管理しています。

  1. 以下のコマンドでインストールする。

     echo -e "\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
    
  2. 各種プログラミング言語をインストールする(ここに一覧があるので参照したほうがよいです)。yarnとpoetryは言語ではないですが、ここでインストールすることで、バージョン管理ができます。

     asdf plugin-add danhper/asdf-python
     asdf plugin-add asdf-vm/asdf-ruby
     asdf plugin-add asdf-vm/asdf-nodejs
     asdf plugin-add twuni/asdf-yarn
     asdf plugin-add asdf-community/asdf-poetry
     asdf plugin-add halcyon/asdf-java
    
  3. 各種プログラミング言語のバージョンをインストールする.

     asdf install python 3.9.0
     asdf install nodejs latest
     asdf install ruby 2.7.4
    
  4. 各種プログラミング言語のバージョンをglobalで指定する.

     asdf global python 3.9.0
     asdf global nodejs latest
     asdf global ruby 2.7.4
    
  5. poetryの補完を設定する(後述するNeovimでPythonの仮想環境を使うのでインストールする)。

     poetry completions fish > ~/.config/fish/completions/poetry.fish
     poetry config virtualenvs.in-project true
    

Neovim

Neovimが使いたいがためにここまで設定しました。ここまでくれば、ひとまずの環境構築は終わりです。

  1. python関連を設定する。poetryを使い仮想環境を構築します。.config/nvim配下にNeovim用の仮想環境を用意します。pythonの環境構築と仮想環境ツールは様々な候補がありますが、私はasdfでpythonを入れ、poetryで仮想環境を作り、pipxで全体で必要なコマンドをインストールするのをおすすめします。

     cd ~/.config/nvim/neovim3
     poetry install
    
  2. ruby関連を設定する。

     gem install neovim
    
  3. node関連を設定する。

     yarn global add neovim
     yarn global add coc
    
  4. nvimのエラーを確認する。nvimで空ページを開き、:checkhealthで確認する。

Neovimの便利プラグイン

最近のVScodeはとても便利です。VScodeに負けないためにも、ターミナルだけで頑張るためにも、必要だと思うプラグインを7つだけピックアップします。もちろん他のプラグインも使っています。

  1. CoC(入力補助、補完、フォーマット等)
  2. lightline(ステータスライン)
  3. fzf(ファジーファインダー)
  4. defx(ファイラー)
  5. eskk(日本語入力)
  6. treesitter(シンタックスハイライト)
  7. vista(各シンボルの表示)

開発準備編

fzf

fzfはターミナルであいまい検索ができるツールです。
例えば、ctrl-rで過去に入力したコマンドのあいまい検索ができたり、以下のようにghqを使う関数を書くことで、ローカルリポジトリのあいまい検索もできます。

$HOME/.config/fish/config.fish
function ghq_fzf_repo -d 'Repository search'
  ghq list --full-path | fzf | read select
  [ -n "$select" ]; and cd "$select"
  echo " $select "
  commandline -f repaint
end

# ctrl-gであいまい検索ができます。
function fish_user_key_bindings
  bind \cg ghq_fzf_repo
end

Neovimなどで使うためにもHomeBrewでインストールする必要があります。

ghq

ghqはローカルリポジトリを管理するツールです。
はじめはなぜこれを使うかわからず、適当に$HOME/programの配下にソースコードを管理していました。しかし、ghqを使うとどこにローカルリポジトリの配置管理がなくなり、加えてghqのコマンドでgit cloneができます。
ghqはHomeBrewでインストールできます。どこにローカルリポジトリを配置するかは以下のように設定します。以下の例ではGo言語のしきたりにならっています。

$HOME/.config/.git/config
[ghq]
	root = ~/dev/src

簡単な例を示します。

  • git cloneに対応するコマンド

      ghq get ユーザーネーム/リポジトリネーム
    
  • ローカルリポジトリを作成するコマンド

      ghq create リポジトリネーム
    

ローカルリポジトリの削除ができないのがネックです。

gh

ghはGitHubをターミナルから操るためのコマンドです。リポジトリの作成などいろいろなことができます。もちろんHomeBrewからインストールします。
使用するためには以下のコマンドでログインします。

    gh auth login

リモートリポジトリを作成する場合は以下のコマンドを叩きます。

    git init リモートリポジトリネーム
    cd リモートリポジトリネーム
    gh repo create

fzfとghqを組み合わせると

    ghq create test
    # ctrl-g であいまい検索し、testと入力することで上で作成たローカルリポジトリへ飛ぶ。
    gh repo create
    git add .
    git commit -m "first commit"
    git push --set-upstream origin master

でターミナルからローカルリポジトリを作成しプッシュできます。

forgit

forgitはfzfと組み合わせてインタラクティブにgit関連の操作ができます。

例えば以下のコマンドがあります。

    ga # fzfであいまい検索しながらインタラクティブにgit addするファイルを選べる。
    gi # fzfであいまい検索しながら.gitignoreに加えるファイルを選べる。

HackGen

HackGenはプログラミング向けフォントです。プログラミングするならフォントにもこだわりたいですね。
HackGenはNerdフォントも含まれているものもあるため、プログラミング言語のシンボルなどなども表示できます。特にお気に入りは全角スペースが可視化されるところです。

開発編

Java

JavaのソースコードをNeovimで書くためにCoCのプラグインであるcoc-javaを入れています。
また、VScodeでマウスカーソルを関数に置いたときに出てくるマウスホバーを導入するためにCoCの設定ファイルにhoverの設定をしています。

coc.nvim
function! ShowDocIfNoDiagnostic(timer_id)
  if (coc#float#has_float() == 0 && CocHasProvider('hover') == 1)
    silent call CocActionAsync('doHover')
  endif
endfunction

function! s:show_hover_doc()
  call timer_start(500, 'ShowDocIfNoDiagnostic')
endfunction

autocmd CursorHoldI * :call <SID>show_hover_doc()
autocmd CursorHold * :call <SID>show_hover_doc()

ただし、上の設定ではいちいちホバーを出すので、それが面倒であれば下の設定にします。

coc.nvim
" ノーマルモードで単語上でHと押すとホバーがでる。
nnoremap <silent> H :call CocAction('doHover')<CR>

ビルドにはGradleを使っています。Intellijからもビルドできますが、ターミナルからビルドします。

    ./gradlew hogehoge

Rust

RustのソースコードをNeovimで書くためにcoc-rust-analyzerを入れています。coc-rust-analyzerをNeovim上で入れるだけで、勝手にrust-analyzerを入れてくれるので、HomeBrewで入れる必要はありません

coc-rstもありますが、coc-rust-analyzerのほうが体感としていい気がします。
rustに関してまた別の日に記事を書きます。

docker, k8s, MySQL

dockerはGUIアプリであるdocker desctopを使って起動させます。起動後はターミナルからコマンドを叩きます。

k8sへの接続はLensを使います。k8sはまだ不慣れすぎるので、便利さに乗っかります。ちょっと悔しいです。一応コマンドとしてkubectlがあります。

データベースへのアクセスもSQLクライアントアプリを使います。ターミナルからでも見ることはできますが、見づらいので便利さに乗っかります。ちょっと悔しいです。

GitHub

GitHubのCLIであるghをインストールしましたが、マージや諸々の操作やブラウザからやります。こればっかりは仕方ありません。

おわりに

これだけがんばってはみたものの、結局GUIアプリに頼るのは楽です。これからもターミナル道を邁進したいと思います。
12/3の記事はサタンさんです。よろしくお願いします。

17
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?