macOSで[zsh, vim, tex, python]の環境構築をしよう!

# はじめに
環境がごちゃごちゃしてきてmacOSを一旦初期化して再インストールしたので, 自分なりの環境構築の仕方を備忘録として書いてみたものです.

本記事ではmacOSでやっていますが, Ubuntuでも同様に出来るはずです.
`brew install` を適宜 `sudo apt install` などにすれば出来ると思います.
そのうち暇になったらubuntu版も組み込みたいと思います.


< 環境 >

| OS | version | date |
|:------------:|:-------:|:--------:|
| macOS Mojave | 10.14.3 |2019/02/07|

# brewをinstallしよう
macOSを使っていてbrewを使わないことはないでしょう. HomebrewはmacOS用のパッケージマネージャーです. Linuxでいうapt-getのようなもの. 

```shell
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
参考 : https://brew.sh/index_ja

# iterm2をinstallしよう
defalutのターミナルでも良いですが, テーマなどいろいろカスタマイズできるのでiterm2を使っている人も多いかと思います.

DL先 : https://www.iterm2.com/downloads.html

# bashからzshに変更しよう
defalutのshellはbashになっています. bashも使いやすいですが, zshはもっと使いやすいです. 特に補完機能が最強で, ハマります. installしましょう.

```shell
$ brew install zsh
```

この時点で, `$ zsh` と打てばzshに切り替わります. が, それでは面倒なのでログインshellをzshに変更します.
chsh(change shell)します.

```shell
$ chsh -s /bin/zsh
```
これ, 打ち間違えるとログイン出来なくなる可能性もあるので気をつけましょう.
ターミナルを再起動すると, zshになっていると思います.
`$ echo $SHELL` で現在のshellが返ってくるのでそれでも確認できるでしょう.

次にzshの設定をしましょう. フレームワークPreztoを使います. やろうと思えばあれこれ自分でshellの設定を書いてカスタマイズ出来るんでしょうが, 僕にはそこまで興味ないので誰かが作ってくれたものをありがたく使わせてもらいます.

```shell
# 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
```
これでターミナルを再起動すると見た目がかなり変わっていることに気づくと思います.
次はテーマの変更です. 

```shell
# テーマ一覧
$ prompt -l
 
# テーマをプレビュー
$ prompt -p <テーマ名>
 
# すべてのテーマをプレビュー
$ prompt -p
 
# テーマを適用(再起動したら戻る)
$ prompt <テーマ名>
```
ここで気に入ったものを選んでおきます. ~/.zpreztorcを書き換えます.

```shell:~/.preztorc
(中略)
zstyle ':prezto:module:prompt' theme 'テーマ名'
```
大体のthemeはこれでOKなのですが,Powerlineはthemeをinstallする必要があります.

```shell
# themeファイルの配置
$ curl https://raw.github.com/davidjrice/prezto_powerline/master/prompt_powerline_setup > ~/.zprezto/modules/prompt/functions/prompt_powerline_setup
```

Powerlineはフォントの関係上, このままでは表記が崩れてしまいます. Powerline専用のフォントをinstallします.

```shell
# tapでリポジトリを追加する
$ brew tap sanemat/font

# フォントのinstall
$ brew install ricty --with-powerline

# 展開
$ cp -f /usr/local/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/

# キャッシュの削除
$ fc-cache -vf
```
後は, iterm2のフォントをRichy Discord Regular for PowerlineにすればOKです.
私はPowerline使っていませんが.

# zshrcの設定しよう(Update済み)
aliasなどを設定しましょう. 自分は現在このような中身になっています.

```zsh:~/.zshrc
#
# Executes commands at the start of an interactive session.
#
# Authors:
#   Sorin Ionescu <sorin.ionescu@gmail.com>
#

# Source Prezto.
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
  source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
fi

# Customize to your needs...
# PATHを通す
export PATH="/usr/local/bin:$PATH"

# Beep音をなくす
setopt no_beep

# Ctrl+Dでログアウトしてしまうことを防ぐ
setopt IGNOREEOF

# 日本語を使用
export LANG=ja_JP.UTF-8

# 色を使用
autoload -Uz colors
colors

# 補完
autoload -Uz compinit
compinit

# 他のターミナルとヒストリーを共有
setopt share_history

# ヒストリーに重複を表示しない
setopt histignorealldups

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000

# コマンドミスを修正
setopt correct
# 補完後、メニュー選択モードになり左右キーで移動が出来る
zstyle ':completion:*:default' menu select=2

# 補完で大文字にもマッチ
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# alias
alias lst='ls -ltr'
alias l='ls -ltr'
alias la='ls -a'
alias ll='ls -l'
alias vi='vim'
alias vz='vim ~/.zshrc'
alias vv='vim ~/.vimrc'
alias c='clear'
alias sz='source ~/.zshrc'
alias sv='source ~/.vimrc'
alias mkdir='mkdir -p'
alias rm='rm -i'
alias ..='cd ..'
alias jn='jupyter-notebook'


function tex() {
    platex $1.tex &&
    dvipdfm -p $2 $1.dvi &&
    open $1.pdf &&
}

function pycheck() {
    pycodestyle --show-pep8 $1;
    pydocstyle --ignore=D100,D203,D212 $1;
}

function mkdircd() {
	mkdir -p $1; cd ./$1
}

# prompt setting
autoload -Uz vcs_info
zstyle ':vcs_info:*' formats '[%b]'
zstyle ':vcs_info:*' actionformats '[%b|%a]'

bindkey -v
source ~/anaconda3/etc/profile.d/conda.sh

precmd () {
  # 1行あける
  print
}

#zshプロンプトにモード表示####################################
function zle-line-init zle-keymap-select {
  case $KEYMAP in
    vicmd)
    PROMPT="%{$reset_color%}%~(%{$fg_bold[red]%}NORMAL%{$reset_color%}%{%})\$%{$reset_color%} "
    ;;
    main|viins)
    PROMPT="%{$reset_color%}%(%{$fg_bold[cyan]%}INSERT%{$reset_color%}%{%})\$%{$reset_color%} "
    ;;
  esac
  zle reset-prompt
  vcs_info
}
zle -N zle-line-init
zle -N zle-keymap-select

bindkey -M viins 'jj' vi-cmd-mode
```

僕は下で述べる通り, 基本はvimを使います.
**なのでterminalもvimのキーバインドです**.
この設定ではnormal modeとinsert modeを可視化してくれます.

# vimの設定をしよう(Update済み)
まずは.vimrcを設定しましょう. 自分はNeoBundleを使っています.

```shell
# プラグインのinstall
$ curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh > install.sh
$ sh ./install.sh

# キャッシュの削除
$ rm -rf install.sh
```

次に, `$ touch ~/.vimrc` でinit fileを作成し, 

```vimscript:~/.vimrc
" ***** pluginの設定
" Bundle Scripts-----------------------------
if &compatible
  set nocompatible
endif

" Required:
set runtimepath+=~/.vim/bundle/neobundle.vim/

" Required:
call neobundle#begin(expand('~/.vim/bundle'))

" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'

" Add or remove your Bundles here:
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'tpope/vim-fugitive'
NeoBundle 'ctrlpvim/ctrlp.vim'
NeoBundle 'flazz/vim-colorschemes'
NeoBundle 'nanotech/jellybeans'
NeoBundle 'romainl/Apprentice'
NeoBundle 'jacoborus/tender.vim'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'lervag/vimtex'
NeoBundle 'plasticboy/vim-markdown'
NeoBundle 'kannokanno/previm'
NeoBundle 'tyru/open-browser.vim'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'surround.vim'
NeoBundle 'Yggdroot/IndentLine'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 'Shougo/vimfiler.vim'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'scrooloose/nerdtree'
NeoBundle 'davidhalter/jedi-vim'
NeoBundle 'ervandew/supertab'

" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplete.
let g:neocomplete#enable_at_startup = 1
" Use smartcase.
let g:neocomplete#enable_smart_case = 1
" Set minimum syntax keyword length.
let g:neocomplete#sources#syntax#min_keyword_length = 3


" Define dictionary.
let g:neocomplete#sources#dictionary#dictionaries = {
    \ 'default' : '',
    \ 'vimshell' : $HOME.'/.vimshell_hist',
    \ 'scheme' : $HOME.'/.gosh_completions'
        \ }

" Define keyword.
if !exists('g:neocomplete#keyword_patterns')
    let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns['default'] = '\h\w*'

" Plugin key-mappings.
inoremap <expr><C-g>     neocomplete#undo_completion()
inoremap <expr><C-l>     neocomplete#complete_common_string()

" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"

" Enable omni completion.
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

" Enable heavy omni completion.
if !exists('g:neocomplete#sources#omni#input_patterns')
  let g:neocomplete#sources#omni#input_patterns = {}
endif

" For perlomni.vim setting.
" https://github.com/c9s/perlomni.vim
let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::'

NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }

" Required:
call neobundle#end()

" Required:
filetype plugin indent on
" End NeoBundle Scripts-------------------------


" paste
nnoremap ,i :<C-u>set paste<Return>i
autocmd InsertLeave * set nopaste
set showcmd
set noswapfile
set clipboard+=uunnamedplus,nnamed

" yank + change
nnoremap cip ciw<C-r>0<ESC>

" ***** 外観の設定
set number 
set showmatch 
set list 
set laststatus=2
set ruler
set showmode
set cursorcolumn
set cursorline
highlight CursorLine ctermbg=darkcyan
highlight Cursorcolumn ctermbg=darkcyan
highlight Cursorcolumn ctermfg=White
set title
set whichwrap=b,s,h,l,<,>,[,],~
set scrolloff=5
set fenc=utf-8 
set virtualedit=onemore
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set listchars=tab:▸\ ,eol:↲,extends:❯,precedes:❮ 
hi LineNr ctermfg=Black
hi MatchParen ctermfg=LightGreen ctermbg=blue

" 色の設定
if &term !~ "xterm-color"
autocmd BufEnter * if bufname("") !~ "^?[A-Za-z0-9?]*://" | silent! exe '!echo -n "^[k[`basename %`]^[??"' | endif
autocmd VimLeave * silent! exe '!echo -n "^[k`dirs`^[??"'
endif

" 全角スペースの表示
function! ZenkakuSpace()
    highlight ZenkakuSpace cterm=underline ctermfg=red guibg=darkgray
endfunction
if has('syntax')
    augroup ZenkakuSpace
        autocmd!
        autocmd ColorScheme * call ZenkakuSpace()
        autocmd VimEnter,WinEnter,BufRead * let w:m1=matchadd('ZenkakuSpace', '　')
    augroup END
     call ZenkakuSpace()
endif


" ***** 検索関連
set ignorecase
set smartcase 
set wrapscan 
set hlsearch 
set incsearch 
nnoremap <expr> / _(":%s/<Cursor>/&/gn")

" 検索時にその数も表示する
function! s:move_cursor_pos_mapping(str, ...)
    let left = get(a:, 1, "<Left>")
    let lefts = join(map(split(matchstr(a:str, '.*<Cursor>\zs.*\ze'), '.\zs'), 'left'), "")
    return substitute(a:str, '<Cursor>', '', '') . lefts
endfunction

function! _(str)
    return s:move_cursor_pos_mapping(a:str, "\<Left>")
endfunction


" ***** カーソル移動関連
set mouse=a
set ttymouse=xterm2
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-h> <Left>
inoremap <C-l> <Right>
inoremap <silent> jj <Esc>
inoremap <silent> っj <ESC>
noremap <C-h> ^
noremap <C-l> $

" ***** その他
nnoremap <C-s> <Nop>
nnoremap <S-u><S-u> vu 
nnoremap <S-u> vU 
nnoremap cw ciw
nnoremap yw yiw
nnoremap dw diw
nnoremap z zz
nnoremap <C-x> "_X
nnoremap <S-x> "_x
noremap <S-H> ^
noremap <S-L> $
nnoremap ; :
nnoremap <CR> A<CR><ESC>
nnoremap <C-c><C-c> : <C-u>nohlsearch<cr><Esc>
nnoremap C c$
nnoremap Y y$
nnoremap O :!open .
nnoremap F :VimFiler
noremap G Gzz
nnoremap <silent><C-e> :NERDTreeToggle<CR>
let mapleader = ","
set backspace=indent,eol,start
syntax enable
set history=10000
au BufRead,BufNewFile *.md set filetype=markdown
highlight jediFat ctermbg=darkblue
highlight Pmenu ctermfg=Black
autocmd BufNewFile *.tex 0r ~/.vim/template/std.tex
```

をコピペします. 
ザッと特徴を述べると,

- `jj` でnormal modeに切り替え
- `return` でnormal modeのまま空白行挿入 
- `ctrl-h,j,k,l` でinsert modeでも移動
- `shift-u` でカーソル上文字を大文字化
- `shift-u shift-u` (2回)カーソル上文字を小文字化
- `/` で検索した際にヒット数も記載
- `ctrl-c ctrl-c` (2回)でハイライト解除
- `ctrl-h,l` , `shift-h,l`でnormal modeで文の先頭, 文末に移動
- `Y,C` でカーソル以降の文字をヤンク, ペースト(`D` と同じ感覚)
- `yw, dw, cw` でカーソルが単語のどの位置に合ってもその単語全体を対象とする
- `yw` で単語をヤンクし, `cip` でカーソル内単語をヤンクした文字で置き換える
- `shift-x` はカーソル左文字, `ctrl-X` はカーソル文字の削除, レジスタに登録しない
- `y` ヤンクとクリップボードの連携(後述のvim installが必要)
- ペースト時のインデントの整形
- swapファイルの無効化

といった感じです. もちろん他にも設定しているので, あれ他の記事で書いてある操作を試しても同じ挙動にならないときはこの設定ファイルを見返してみてください.
jjで切り替えはもはやvimを使う上で必須ですね. いちいちescなんて押していられません.
vimを起動し, `:NeoBundleInstall` とするとpackageのinstallが始まります.

defalutのvimではclipboardと連携していません. そこで新たなvimをinstallします.

```shell
$ brew install vim
```

ここでdefalutのvimの名前を変更しようと

```shell
$ sudo mv /usr/bin/vim /usr/bin/old_vim                            
mv: rename /usr/bin/vim to /usr/bin/old_vim: Operation not permitted
```
となり, 弾かれます.
これはシステムの保護で以下のようにして直せます. まず再起動します. この時に, `command + R`を押し続けて, リカバリーモードで起動します. 上のメニュー画面からターミナルを起動し, 

```shell
$ csrutil disable
```
とします. その後, `$ reboot` としてから名前を変えてみましょう.

```shell
# 名前の変更
$ sudo mv /usr/bin/vim /usr/bin/old_vim  

# 新しいvimを使えるようにする
$ sudo ln /usr/local/Cellar/vim/8.1.0001/bin/vim /usr/bin
```

# pythonをinstallしよう
python2系はmacOSにdefaultでinstallされていますが, python3系はinstallされていません.
pythonには`/usr/local/bin/`に入れる方法とanacondaやpyenvなどの仮想環境を構築する方法の2つやり方があります.
後者は環境がごちゃごちゃになっても切り替えが出来たり, バージョンを複数持つことができるというメリットがあります. 機械学習などでライブラリを使いたい場合, 最新のpythonのバージョンでは上手く動かない場合があったりします. そのような時にあれこれいじれるというメリットはあります. デメリットとしては一部のライブラリと相性が悪いことがあって泥沼にはまる時があることです. Worldのラッパであるpyreaperをanacondaの下でinstallしようとしたところ, 相性が悪くinstallできませんでした. 
どちらも構築しておいて,　基本は仮想環境で, installが上手くいかない場合はシステムで実装する, というのが最適でしょうか?
とりあえず, 前者のシステムに直接入れるやり方でinstallします.

```shell
$ brew install python3
```

これで最新のpythonが入ります. 2019/02/07現在, python3.7.2が入りました. これでpip3も入ります.
後はNumPy, Pandasなどのよく使うライブラリを導入しておきましょう.

```shell
$ which python3                                                    
/usr/local/bin/python3

$ python3 --version                                                
Python 3.7.2

$ which pip3                                                       
/usr/local/bin/pip3

$ pip3 --version                                                   
pip 18.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

$ pip3 list                                                        
Package    Version
---------- -------
pip        18.1
setuptools 40.6.3
wheel      0.32.3
```

次に解析toolを導入します. PEP8に準拠した解析toolとしてpycodestyleとpydocstyleをinstallします.

```shell
$ pip install pycodestyle
$ pip install pydocstyle
```

ところで, pydocstyleには何故かお互いに衝突するエラーがあります. 
D212とD213 https://stackoverflow.com/questions/45990301/pep257-d212-and-d213-conflicts
D203とD211 https://github.com/PyCQA/pydocstyle/issues/141

自分はD203とD212をignoreしています. また, D100はファイルごとのdocをつけましょうという警告ですが, 自分はいらないと思っているのでこれもignoreしています. これらは, ~/.zshenvの

```shell:~/.zshenv
function pycheck() {
	pycodestyle --show-source --show-pep8 $1;
	pydocstyle --ignore=D100,D203,D212 perceptron.py $1;
}
```
で書いています. 

# vim+texの環境を構築しよう
理系ならば当然使っているtex. これをこの機にvimと連携させてみましょう.
まずは, texのinstallから.

```shell
# GUIなしでinstall
$ brew cask install mactex-no-gui

# TeX Live のパッケージ管理ツールの更新
$ sudo tlmgr update --self --all

# defalutをa4用紙に設定する
$ sudo tlmgr paper a4
```
理由は分かりませんが, `$ sudo tlmgr update --self --all` と `$ sudo tlmgr paper a4`は上手く行かない時があります. ターミナルを再起動したり, 何度か実行してみたら上手くいきました.

次にtexのコンパイルの設定をします. `tex → dvi → pdf`の流れで実行します. これを1つのコマンドで行えるようにshellに書き込みます.

```shell:~/.zshrc
(中略)
function tex() {
	platex $1.tex &&
	dvipdfmx -p $2 $1.dvi &&
	open $1.pdf &&
}
```

これで, `$ tex filename papersize`とすることでコンパイルしてプレビューするところまで出来ます.
vimで書きながらコンパイルを試す場合, `:!tex filename papersize`とすれば出来ます.
(.zshrcだけにaliasやfunctionを書くとvimのshellで読み込まれません. .zshenvにも書きましょう.)
次にtexのテンプレートを書いていきます. 特にヘッダーなどは使うことがないので余白をなるべく削った形にしました. これを, `~/.vim/template/`に作成します.

```~/.vim/template/std.tex
\documentclass[8pt, b5paper]{jsarticle}
\usepackage{setspace}
\usepackage{ulem}
\usepackage{layout}
\usepackage[dvipdfmx]{graphicx}
\usepackage{bm}

% ##### Margin Setting #####
\setlength{\topmargin}{-15.4truemm}
\setlength{\headheight}{0truemm}
\setlength{\headsep}{0truemm}
\setlength{\marginparwidth}{0truemm}
\setlength{\textwidth}{\paperwidth}
\addtolength{\textwidth}{-1truein}
\setlength{\textheight}{\paperheight}
\addtolength{\textheight}{-30truemm}
\setlength{\hoffset}{-0.5truein}
\setlength{\footskip}{10truemm}

\newcommand{\f}[2]{\displaystyle \frac{#1}{#2}}
\newcommand{\itg}[4]{\int_{#1}^{#2} {#3}\;d{#4}}
\newcommand{\di}[2]{\frac{d{#1}}{d{#2}}}
\newcommand{\ddi}[2]{\frac{d{#1}}{d{#2}}}
\newcommand{\pa}[2]{{\frac{\partial{#1}}{\partial{#2}}}}
\newcommand{\ppa}[2]{\frac{\partial ^2{#1}}{\partial{#2}^2}}
\newcommand{\s}[3]{\sum_{#1}^{#2}{#3}}
\newcommand{\limit}[3]{\lim_{{#1}\to{#2}}{#3}}
\newcommand{\fr}[2]{\begin{itembox}[l]{#1}{#2}\end{itembox}}
\newcommand{\scr}[2]{\begin{screen}{#1}{#2}\end{screen}}
\newcommand{\ctr}[1]{\begin{center}{#1}\end{center}}
\newcommand{\doubleline}{\uuline{\hspace{\textwidth}}}

\begin{document}

\end{document}
```

このテンプレートは, .vimrcで`autocmd BufNewFile *.tex 0r ~/.vim/template/std.tex
`としていることで読み込まれます. 他にも, C言語などの`int main(){}`などのテンプレートも作っても良いかもしれません.

# カーソル, キーボードを設定しよう
**システム環境設定 > トラックパッド** でカーソルの速さを速くします. また, タップでクリック動作になるように変更します.
**システム環境設定 > キーボード** でキーのリピート, リピート入力認識までの時間のどちらも速めて高速移動できるようにします.
また, 入力ソースで, "￥"キーで入力する文字を" \ (バックスラッシュ)"にします. 


# オススメのApp
## Magnet
https://itunes.apple.com/jp/app/magnet-マグネット/id441258766?mt=12

画面をAppごとに綺麗に分割するのに非常に便利です. これがないとマルチタスクしづらいです.

## Mathpix Snipping Tool
https://itunes.apple.com/jp/app/mathpix-snipping-tool/id1349670778?mt=12

スクリーンショットで撮ったものをlatex形式に変換する優れものです. 精度が結構良いので理系は必須です.

追記 2019/11/25
アカウント制になり, 無料で使える回数が月50回になっていました.
残念です...

## Clipy
https://clipy-app.com

コピーの履歴をたくさん保存しておけるものです. あ，何回か前にコピーしたやつもう一回ペーストしたい...なんて時に使います.
後はスニペットを編集することでよく使うもの(メアドなど)も瞬時にペースト出来ます.
vimであればこれを使うよりレジスタ機能を使ったほうが良さそうですが.

## Googleのバックアップと同期
https://www.google.com/intl/ja_ALL/drive/download/backup-and-sync/

どのフォルダを同期するかなどを設定していないと同期で非常に重くなってしまうので設定はしっかりした方が良いです.

# もしもMacintosh HDを削除してしまったら...?
初期化する際に誤ってHDを消してしまったらどうするのか...
ちなみに僕はやってしまいました...

[もしもMacintosh HDを削除してしまったら...?](https://qiita.com/north_redwing/items/012033274b633f1062a8)

こちらにまとめてあるので自己責任で参考にしてみてください.