バイオインフォマティクス関係のトラブルシューティング集（なぐり書き）

# はじめに

　こんにちは！バイオインフォマティクス系オタク修士学生のroadricefieldです！僕は学部は生物科学科卒で今いる大学院は生物科学専攻なのでプログラミングやコマンドライン操作などはほとんど独学で勉強しました. （冗談抜きで『学校では教えてくれない』）  

　さて, 2020年, 僕がいるラボではたくさんの人たちがバイオインフォマティクスを触るようになりました.  

　みなさん急に馴染みの無い黒画面に, 右も左もわからない状態（僕も最初はそうでした. そして僕のときは周りに教えてくれる人がいなかった...）でコマンドを打ち込むものですからエラーがラボ内で頻発しています...  

　そこでこの記事ではバイオインフォマティクスでよく遭遇するエラーを解決する方法を書きなぐっていこうと思います.  

# コマンドライン関係  

## "No such file or directory"  

　**ファイル指定で打ち間違えとるんや確認してくれ！！！！** それから**相対パスの参照はあっとるんか？** コマンド叩いた位置から`cd`でその相対パスを指定してちゃんと飛べるんか？ そこでも`-bash: cd: hoge: No such file or directory`って言われるんやったらパスが間違えとるんやで. 頼むわほんま.  

## "Command 'hoge' not found"  

　**コマンドの名前打ち間違えてないか！！？？** ちゃんと確認してくれ！ **大文字と小文字も間違えたらあかん！！**  

## コマンド名ちゃんと確認して打ち間違えてないのにそんなコマンドは無いって怒られる！！ 

　**落ち着け！！** 落ち着いてまずは`which`コマンドを使ってパスが通っとるか確認や. 例えば`bamCoverage`というコマンドが動かへんとするで. そしたら以下を実行してくれ.  

```
which bamCoverage
```
  
　ちゃんとパスが通っとる場合は下のようにその位置が出力される.  

```
/mnt/c/linux_home/tools/deepTools/bin/bamCoverage
```  

　何も出力されへん場合はパスが通ってへんのやわ. パスっていうのはコマンドの実行ファイル（コンピュータ語で書かれた命令文）が入ってるディレクトリのことやな. コンピュータはコマンドを渡されたら登録されとるパスの中から渡されたコマンドと同じ実行ファイルを探し出してそれを読んで命令を実行するんや.  
 
　例に挙げた`bamCoverage`は`deepTools`っていうパッケージの中のコマンドの一つや. たぶん`deepTools`のコマンドの実行ファイルは`deepTools`のフォルダの中の`bin`っていう名前のディレクトリに入っとる. パッケージにもよるけど実行ファイルは`bin`っていうディレクトリに集められとることが多い. ここでは`$HOME/tools/deepTools/bin`に実行ファイルがあるとするで. `$HOME`はホームディレクトリのことな.  

　ホームディレクトリに戻ってくれ. `cd`コマンドに何も指定せんかったら戻れる. そこで以下を実行してくれ.  

```  
vim .bash_profile
```  

　`.bash_profile`っていうのはパスを書き込んだりするテキストファイルのことや. vimっていうエディタが開くからescキーを押してからiのキーを押してinsert modeにしてくれ. もうすでに何か書いてあるかもしれんけど新しい行に以下のように書いといてくれ.  

```:.bash_profile
PATH=$PATH:$HOME/tools/deepTools/bin
```  

　書けたらもう一回escキーを押して`:wq`と入力してEnterや. これで保存できた. このあとターミナルを再起動させるか以下のように入力してくれ.  

```
source .bash_profile
```  

　これで`.bash_profile`への変更が反映された. これで`bamCoverage`が動くはずや. `bamCoverage`って実行してヘルプが出たり「引数が与えられとらへんやんかい！！」とか言ってキレてきたらちゃんとパスが通って使えるようになっとる.  

　それから基本的にソフトは全部AnacondaかMinicondaで管理したらめっちゃ楽や. 全部`conda install`で簡単にインストールできるし, パスを通す必要もない. ワイが書いた以下の記事の最初の方でMinicondaを使った環境構築のやり方を説明してるから参考にしたってや.  

　[ゼロからはじめるChIP-seq解析](https://qiita.com/roadricefield/items/419270fed2e3e7659a0b)  

　
## プログラムが途中で止まってもてエラーで何か違うプログラムの名前が書いてあるで  

　**ちゃんとその動かしてるプログラムのRequirements確認したんか？？** そのプログラムが依存してる他ののプログラムが入ってない可能性が高い. 例えば`samtools`とか`bedtools`とか. インストールできたらもう一回試してみてや.  

## 何か`File "hoge.py", line 31, ~ SyntaxError:~` みたいなようわからんエラーが出るんやけど  

　出た！エラーの形式的に多分それは**Python2系, 3系問題や**！！！！この問題は世界を混乱に陥れてるから**将来歴史の教科書に載る**.  

　たぶんそのソフトはPython2系で書かれとるんやと思う. 実はPython2系からPython3のメジャーアップデートされたときに文法が変わりまくってPython2系で書かれたプログラムは基本的にPython3系では動かされへん.  

　でも基本的にワイらのコンピュータのPythonは3系や. Python2系の環境を作る必要がある. そこでAnaconda/Minicondaや. どっちかをインストールしてPython2系の仮想環境を作るで. 

```
conda create -n py27 python=2.7
```  

　これは`py27`って名前のPython2.7が動く仮想環境を作ってやって意味な. もろもろインストールが終わったら以下を実行や.  

```  
conda activate py27
```  

　これでターミナルのユーザー名の左に,  

```
(py27) roadricefield@hogehoge:$
```
　
みたいな感じで`py27`って表示されてたら成功や`python --version`を実行してPythonのバージョンを確認してな.

　元の環境に戻るときは,  

```
conda deactivate
```  

を実行してな. `py27`の環境でもう一度プログラムを実行してみてほしい. もしかしたら`pysam`とかPythonのライブラリが必要かもしれんからよくRequirementsを確認して`conda install`してくれ. Python2になったら改めて入れなあかんで.  

`conda activate py27`のときに何かエラーが出た人は`conda init`って実行してからやってみてな.  

## 結果が画面に垂れ流しになってまうんやけど...  

　**リダイレクトしてくれ！！！** 今使っているソフトは結果を標準出力っていうところ, つまり黒画面自体に出力するタイプや. たとえばHOMERの`annotatePeaks.pl`がこのタイプや. こんなふうに結果をテキストファイルに書き込むことができるで.  

```
annotatePeaks.pl Peaksfile.txt mm10 > Results.txt
```  

　これで結果は`Results.txt`に保存されたで.


# 今日(2020/06/10)はここまで  

　この記事では今後もよくあるトラブルをシュートしていくで！タグも付けとるけどR関係のトラブルも説明していく予定や！期待しててや！！  

# 絶対に肝に銘じてほしいこと  

　**エラーメッセージでググれ！！！！！！！！！！** 大抵のエラーはもうすでに誰かが経験してて対処法をネットに残してくれてることが多い！ それこそQiitaや！！！ これがあるからワイは今日も研究ができてる. エラーメッセージでググってほしい. さすれば汝は救われん. あとエラーメッセージは最後の最後の文が一番大事な. それでググるんやで！ ほな！！