個人的に便利なアプリや開発ツールをまとめてみた(開発ツール編)
今回は、「開発ツール編」として筆者がRailsで開発環境を構築するときに導入する開発ツールをまとめてみました。
いつかまたセットアップする機会がきたときに役に立てばいいと思っております!
neovimを使ってRails開発が行えるところまでをゴールとします。
前回のアプリ編もどうぞ
導入するもの
名前 | 用途 |
---|---|
Homebrew | パッケージマネージャ |
Alfred | 万能ランチャーアプリ |
白源 | フォント |
iTerm2 | 高機能ターミナル |
zsh | シェル |
prezto | zsh用コンフィグフレームワーク |
neovim | エディタ |
iceberg | テーマ |
Git | バージョン管理 |
rbenv | Rubyのバージョン管理 |
Docker | 仮想プラットフォーム |
Homebrew
MacOSXシステム上でソフトウェアの導入を単純化してくれるパッケージマネージャ。
これで導入したソフトウェア群を、brewfileを用いて他環境へ簡単に移行することが可能です。
必要なものを一カ所に集めてくれるので、管理の手間が省けて便利ですね。
これから記載するものはほとんどこのツールを用いて導入していくので、最初にインストールしておくのが吉。
インストール手順
公式サイトの通り、ターミナル上で下記コマンドを実行するだけです。
Command + SpaceでSpotlight検索を起動して、「Terminal」と入力するとターミナルが起動します。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
途中、パスワードを求められますのでMacにログインしているユーザのパスワードを入力してください。
$ Password:
また、Homebrewは「Command line tools for Xcode」というソフトウェアに依存しており、途中でこのソフトウェアのインストールを求められますので、インストールしてください。
※画像は参考ですが、同じようにソフトウェアアップデートが立ち上がりインストールを求められます。
以下のように出力されたら完了。
一応doctorコマンドで正常にインストールできたか確認します。
==> Next steps: - Run `brew help` to get started - Further documentation: https://docs.brew.sh $ brew doctor Your system is ready to brew.
Alfred
Alfredはアプリ編に記載したかったのですが、Homebrewを使ってどのような環境であっても必ず持って行きたいアプリなのでこちらに記載しました。
Mac標準のSpotlightと同じようにアプリランチャーとしても働きますし、システムの機能をショートカットから呼出してファイルを一括で編集したり、スニペット登録機能があったり色々な機能があります。
課金すると上記のスニペット登録機能・ファイル操作機能が使えますが、そもそもSpotlightより便利で高機能なので導入しておいて損はないと思います。
筆者は全然使いこなせていないですが、かなり生産性が上がるみたいで少し余裕ができたら学んでいきたいと思っております。
インストール手順
Homebrewを使ってインストールします。
Homebrewは基本的にCUIをインストールするものなのですが、homebrew-caskという拡張機能を使用することによりGUIをインストールすることが可能となります。
この拡張機能をまず有効にしましょう。 下記のコマンドを実行すると、Homebrewにcaskが追加されます。
$ brew cask
本来はcaskのあとにインストールしたいアプリの名前を入れる必要があり、「Error: Invalid usage: No subcommand given.」と出力されますが、コマンドの実行方法がおかしいってだけでcaskは追加されるので気にしないでください。
その後、Alfredをcaskを介してインストールします。
もちろん上記のcaskのインストールを飛ばしてこちらを実行してもらっても構わないです。
$ brew cask install Alfred alfred was successfully installed!
Spotlightと同じCommand + Spaceで起動したい場合は、インストール出来たらMacのシステム環境設定→キーボード→ショートカットを開きSpotlightのショートカットを無効化してください。
その後、Alfredを起動してショートカットを変更して導入は完了です。
白源
エディタ上で見やすいフォントを色々試したのですが、個人的に一番見やすくてCUI上でアイコンをフォントとして出力するNerd Fontsに対応しているのでおすすめ。
プログラミング用のフォントとして有名なRictyをカスタマイズしているので完成度が高く、今でも定期的に更新され視認性がどんどん上がっていっており、非常に活発なフォントなのであります。
詳しくは作者様の記事をご覧ください。
インストール手順
cask同様にフォント用のHomebrewの拡張機能をインストールして、そちらを介して白源フォントをインストールします。
$ brew tap homebrew/cask-fonts $ brew cask install font-hackgen-nerd
以降の項目でこちらのフォントは使用しますので、ここでは導入のみにとどめます。
もしお気に入りのフォントがあるなら、cask-fontsをインストール後に下記コマンドでHomebrewで扱われているか調べて、そちらを利用しても構いません。
$ brew search フォント名
iTerm2
Mac標準のターミナルを高機能にしたもの。
後述するエディタ用テーマ「iceberg」が、ターミナルではフルカラー出力に対応しておらず色味が思い通りに表示されなかったので導入した。
以下の記事を見てtmuxを入れなくてもコピーモードで色々できるんだなと思ったのも大きい。
インストール手順
下記を実行してインストール。
$ brew cask install iTerm2
導入はこれでいいですが、例えばダウンロードとかのディレクトリにアクセスしたときにiTermにアクセス許可を与えるかどうかの通知が表示されます。
この通知がいろんなディレクトリにアクセスしたときに表示されるので気になる人は、システム環境設定→セキュリティとプライバシーのフルディスクアクセスにiTerm.appを追加してください。
後述するicebergの項で配色に関しては設定しますので、ここではステータスバーとフォントの設定を行います。
まずPreferences→Profileにある+マークで新しいプロファイルを作成しましょう。名前は適当でいいです。筆者は「iceberg」としました。
次にTextタブを開き下にあるFontを、先ほど入れた「白源」にします。
また、ステータスバーの表示位置がデフォルトでは上なので、Preferences→AppearanceのStatus bar locationで下などに変更できる。
Sessionタブに移り、一番下のStatus bar enabledにチェックをつけます。
あとはConfigure Status Barボタンを押して表示させたいアイテムをActive Componentsにドラッグして、Advancedで色とフォントの設定を行います。
筆者の場合は、背景色とアイテムの区切り線の色はicebergの背景色と同じ#161821にして、フォントも白源としました。
(iMacの場合、バッテリー表示は不要ですがMacbookとかと設定を同期したい場合はつけてもいいかもしれません。)
設定できたらOKを押して閉じます。
作ったプロファイルは、左下のOther Actionsを押してデフォルトに設定してください。
その後再起動すると反映されます。
また、このプロファイルはOther Actionsで、JSONとしてエクスポートできますので、他のPCでインポートすれば設定を同期できるので覚えておくと便利です。
zsh
Catalinaを使っていたら導入する必要はありませんが、Homebrewで最新バージョンをインストールしてそちらを利用します。
インストール手順
Catalinaの場合、ログインシェルがzshなのでそのコマンドの位置と、バージョンを見ておきます。
$ which zsh /bin/zsh $ /bin/zsh --version zsh 5.7.1
次に、Homebrewを介してzshをインストールしてそれをログインシェルとするために、/etc/shellsをvimで編集します。
パスワードを求められるのでログインユーザーのパスワードを入力してください。
$ brew install zsh $ sudo vim /etc/shells Password:
開いたらファイルの一番下に「/usr/local/bin/zsh」を追記して、下記コマンドでシェルを変更します。
$ chsh -s /usr/local/bin/zsh
実行できたらターミナルを再起動。
起動したらもう一度、zshの位置とバージョンを確認して、変更が確認できたら完了です。
$ which zsh /usr/local/bin/zsh $ zsh --version zsh 5.8
prezto
zshrcファイルをあれこれいじるのが面倒な場合、preztoを入れればある程度便利に設定を行ってくれます。
またプロンプトも少しおしゃれにできます。
インストール手順
ターミナルを起動して下記を実行していきます。
# 先に変数を定義してpreztoの配置場所及び、設定ファイルの保存場所を決めておく $ ZDOTDIR="~/.config/zsh" # prezto本体をクローンする $ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" # 設定ファイルを生成する $ setopt EXTENDED_GLOB for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" done # シェルをデフォルトにする $ chsh -s /usr/local/bin/zsh # ZDOTDIRの箇所に生成された.zshenvをルートディレクトリに移動し、編集します。 $ mv ~/.config/zsh/.zshenv ~/.zshenv $ vim .zshenv
# 省略 # 設定ファイル保存先 export ZDOTDIR="$HOME/.config/zsh"
次にpreztoに便利なモジュールを追加します。
$ vim ~/.config/zsh/.zpreztorc
32行目あたりの箇所を編集します。
zstyle ':prezto:load' pmodule ¥ 'environment' \ 'terminal' \ 'editor' \ 'history' \ 'directory' \ 'spectrum' \ 'utility' \ 'completion' \ 'syntax-highlighting' \ # これを追加 'autosuggestions' \ # これも追加 'prompt'
シェルを再起動すれば完了。
neovim
vimを拡張した派生エディタ。
JetbrainsなどのIDE、VSCODEとこれが現時点で最良の選択なのかなーっと思ってます。
正直、あれこれカスタマイズしてメンテナンスしていかないといけないので、それらが一番楽なのはIDEです。
ただVimの操作ってすごい楽なんですよね。で、IDEもVSCODEもそれらのメリットを享受できるけど、完璧じゃないんです。
ここはもう好みの問題だとは思いますが。
インストール手順
下記コマンドを実行。
$ brew install nvim
インストール自体は完了しており、続けて設定ファイルを作成する。
$ mkdir ~/.config/nvim $ touch ~/.config/nvim/dein.toml $ touch ~/.config/nvim/dein_lazy.toml $ touch ~/.config/nvim/init.vim $ vi ~/.config/nvim/init.vim
作成したら設定を色々編集していくのだが、dein.vimを導入し、最低限のものをまとめたのが以下になる。
dein.vimはプラグインマネージャで、vimに拡張機能をもたらすモジュールを一括管理してくれる。
以下のように書き換えて、再度neovimを起動したら自動的にインストールしてくれる。
エラーなどは気にしなくてよい。
" dein.vim settings let s:dein_dir = expand('~/.cache/dein') let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim' " dein installation check if &runtimepath !~# '/dein.vim' if !isdirectory(s:dein_repo_dir) execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir endif execute 'set runtimepath^=' . s:dein_repo_dir endif " begin settings if dein#load_state(s:dein_dir) call dein#begin(s:dein_dir) " .toml file let s:rc_dir = expand('~/.config/nvim') if !isdirectory(s:rc_dir) call mkdir(s:rc_dir, 'p') endif let s:toml = s:rc_dir . '/dein.toml' let s:lazytoml = s:rc_dir . '/dein_lazy.toml' " read toml and cache call dein#load_toml(s:toml, {'lazy': 0}) call dein#load_toml(s:lazytoml, {'lazy': 1}) " end settings call dein#end() call dein#save_state() endif " plugin installation check if dein#check_install() call dein#install() endif " plugin remove check let s:removed_plugins = dein#check_clean() if len(s:removed_plugins) > 0 call map(s:removed_plugins, "delete(v:val, 'rf')") call dein#recache_runtimepath() endif filetype plugin indent on syntax enable " リーダーキーの変更 let mapleader = "\<Space>" colorscheme iceberg set termguicolors set encoding=utf-8 set nrformats= set tabstop=2 set softtabstop=2 set shiftwidth=2 set expandtab set autoindent set smartindent set nobackup set noswapfile set clipboard& set clipboard^=unnamed set number set norelativenumber set title set nocursorline set list set listchars=tab:\|\ ,trail:-,eol:↲,extends:»,precedes:«,nbsp:% set showmatch set matchtime=1 set hlsearch set whichwrap=b,s,<,>,[,] set tags=./tags; set completeopt=menuone,noinsert set viminfo+=n~/.config/nvim/.viminfo " j,kキーで表示行移動 nnoremap <silent> k gk nnoremap <silent> gk k nnoremap <silent> j gj nnoremap <silent> gj j " 折り返し移動 set whichwrap=b,s,<,>,[,] " 補完のEnterでは挿入しない inoremap <expr><CR> pumvisible() ? "<C-e>" : "<CR>"
iceberg
色々テーマはあるが、寒色で目に優しい配色が気に入っている。
公式サイトを見て気に入ったら使ってみてほしい。
インストール手順
iTerm2とneovimそれぞれに導入していく。
まずはneovim。
dein.tomlを開いて、icebergを追加。
ほかにdein.vim自体と、vimのステータスバーを格好良くするairlineを追加。
vi ~/.config/nvim/dein.toml
[[plugins]] repo = 'Shougo/dein.vim' [[plugins]] repo = 'cocopon/iceberg.vim' [[plugins]] repo = 'vim-airline/vim-airline'
その後、neovimを起動したら自動的にインストールされる。
次にiTerm2の設定をしていく。
vimでiTermのカラー設定用ファイルを作成して、以下の記述通りに保存する。
$ vi iceberg.itermcolors
長いので省略
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Ansi 0 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.12941177189350128</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.094117648899555206</real> <key>Red Component</key> <real>0.086274512112140656</real> </dict> <key>Ansi 1 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.47058823704719543</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.47058823704719543</real> <key>Red Component</key> <real>0.88627451658248901</real> </dict> <key>Ansi 10 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.55686277151107788</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.7921568751335144</real> <key>Red Component</key> <real>0.75294119119644165</real> </dict> <key>Ansi 11 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.5372549295425415</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.69411766529083252</real> <key>Red Component</key> <real>0.91372549533843994</real> </dict> <key>Ansi 12 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.81960785388946533</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.67450982332229614</real> <key>Red Component</key> <real>0.56862747669219971</real> </dict> <key>Ansi 13 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.82745099067687988</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.62745100259780884</real> <key>Red Component</key> <real>0.67843139171600342</real> </dict> <key>Ansi 14 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.80784314870834351</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.76862746477127075</real> <key>Red Component</key> <real>0.58431375026702881</real> </dict> <key>Ansi 15 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.87058824300765991</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.83137255907058716</real> <key>Red Component</key> <real>0.82352942228317261</real> </dict> <key>Ansi 2 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.50980395078659058</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.7450980544090271</real> <key>Red Component</key> <real>0.70588237047195435</real> </dict> <key>Ansi 3 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.47058823704719543</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.64313727617263794</real> <key>Red Component</key> <real>0.88627451658248901</real> </dict> <key>Ansi 4 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.7764706015586853</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.62745100259780884</real> <key>Red Component</key> <real>0.51764708757400513</real> </dict> <key>Ansi 5 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.78039216995239258</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.57647061347961426</real> <key>Red Component</key> <real>0.62745100259780884</real> </dict> <key>Ansi 6 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.7607843279838562</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.72156864404678345</real> <key>Red Component</key> <real>0.5372549295425415</real> </dict> <key>Ansi 7 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.81960785388946533</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.78431373834609985</real> <key>Red Component</key> <real>0.7764706015586853</real> </dict> <key>Ansi 8 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.5372549295425415</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.43921568989753723</real> <key>Red Component</key> <real>0.41960784792900085</real> </dict> <key>Ansi 9 Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.5372549295425415</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.5372549295425415</real> <key>Red Component</key> <real>0.91372549533843994</real> </dict> <key>Background Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.12941177189350128</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.094117648899555206</real> <key>Red Component</key> <real>0.086274512112140656</real> </dict> <key>Badge Color</key> <dict> <key>Alpha Component</key> <real>0.5</real> <key>Blue Component</key> <real>0.0</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.1491314172744751</real> <key>Red Component</key> <real>1</real> </dict> <key>Bold Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.87843137979507446</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.70980393886566162</real> <key>Red Component</key> <real>0.54901963472366333</real> </dict> <key>Cursor Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.81960785388946533</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.78431373834609985</real> <key>Red Component</key> <real>0.7764706015586853</real> </dict> <key>Cursor Guide Color</key> <dict> <key>Alpha Component</key> <real>0.25</real> <key>Blue Component</key> <real>1</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.9268307089805603</real> <key>Red Component</key> <real>0.70213186740875244</real> </dict> <key>Cursor Text Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>1</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>1</real> <key>Red Component</key> <real>0.99607843160629272</real> </dict> <key>Foreground Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.81960785388946533</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.78431373834609985</real> <key>Red Component</key> <real>0.7764706015586853</real> </dict> <key>Link Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.73423302173614502</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.35916060209274292</real> <key>Red Component</key> <real>0.0</real> </dict> <key>Selected Text Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.81960785388946533</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.78431373834609985</real> <key>Red Component</key> <real>0.7764706015586853</real> </dict> <key>Selection Color</key> <dict> <key>Alpha Component</key> <real>1</real> <key>Blue Component</key> <real>0.25882354378700256</real> <key>Color Space</key> <string>sRGB</string> <key>Green Component</key> <real>0.17254902422428131</real> <key>Red Component</key> <real>0.15294118225574493</real> </dict> </dict> </plist>
このファイルをiTermのPreferences→Profile→Color Presetsでインポートを行うと適用される。
Git
ソースコードなどの変更履歴を追跡できるバージョン管理システム。
インストール手順
Homebrew経由でインストールします。
まず元から入っているgitのバージョンを調べて、Homebrewでインストールします。
$ git --version git version 2.24.3(Apple git-128) $ brew install git
このままでは元からMacに入っているgitが使われてしまうので、パスを通します。
$ vim ~/.config/zsh/.zshrc
export PATH="/usr/local/bin/git:$PATH"
一度ターミナルを再起動して、gitのバージョンが変わっていれば成功です。
$ git --version git version 2.29.1
rbenv
Rubyのバージョンを切り替えたり、管理することが簡単にできます。
とりあえず入れておいて損はない。
インストール手順
Homebrewでインストール。
$ brew install rbenv $ rbenv -v 1.1.2
次にパスを通します。
またRBENV_ROOT変数にrbenvのshimsとversionsがあるディレクトリの位置を指定します。
最後のrbenv initは必須です。
$ vim ~/.config/zsh/.zshrc
export RBENV_ROOT="~/.local/share/rbenv" export PATH="$RBENV_ROOT/bin:$PATH" eval "$(rbenv init -)"
次にこのrbenvを通してRubyをインストールします。
# 下記コマンドでインストール可能なRubyのバージョンが一覧で見られます $ rbenv install -l # バージョンを決めたらインストールします $ rbenv install 2.7.2 # インストールしたバージョンを実行可能にします $ rbenv global 2.7.2 # 下記コマンドを実行して、指定したバージョンにアスタリスクがついていたらおk $ rbenv versions system * 2.7.2
Docker
仮想環境で開発を行うプラットフォームを提供するツール。
インストール手順
以下からDocker for Macをダウンロードしてインストールする。
公式サイト
まとめ
最終的にこのようになります。
Dockerを使って実際に仮想環境を作成する方法は、以下の記事を参考にしてください。
Vimの他のプラグインや、細かい設定は省いていますがここは個人の好みが含まれるため、色々設定してみるといいかもしれません。
筆者もまだ試している状態なので、揃ってきたら記事にしたいと思います。
最後までお読みいただきありがとうございました!