BILAB Tutorial

主にラボの新入生がマシンのセットアップを自分でできるようになるためのtutorialです. 研究室生活においてある程度の環境を揃えておいた方が困った時に助けてもらいやすく, また複数人で作業する時に お互いの環境が異なるせいで合わせるのに時間がかかるなどといったことがあると辛いので一つの指針として書きたいと思います.

レッツ┌(┌ ^o^ )┐ラボォエンジョイ

Contribution

このtutorialはmdbookで運用しています.

ラボ外に公開できるTipsなどを増やしていけるといいですね.

追記してくれる方はmdbookをインストールしたのち, このリポジトリをforkしてください. SUMMARY.mdに追加したいページを記入して新たなページを作っていきましょう.

Terminal

ターミナルとは、キーボード入力と画面の文字表示のみでコンピュータを操作するときに使うアプリケーションです。

このキーボードのみの操作インターフェースのことを一般に CUI (Character User Interface) と呼び、ウィンドウやアイコンなどをマウスで操作して、キーボードで文字入力を行うタイプの仕掛けである GUI (Graphical User Interface) と区別して呼ばれます。

1980年代前半に Apple 社が Lisa や Macintosh を発表したことで一般にもGUIというものが知られていきましたが、それまでは、コンピュータを使うと言えばCUIのシステムを使っていました。

GUI の利点は、文字だけでなくアイコンなどの絵も表示できて操作できる対象物が明確な点や、マウスで比較的簡単に操作できる点にあります。コンピュータ内の状態や様々な情報を分かりやすく表現し、即座に操作結果が反映されることから一般の人には非常に使いやすいものと言えます。しかし、大量のファイルを一度に処理したり、複雑な操作を行ったり、それらを連続して処理させる場合などは、非常に使いづらいという欠点があります

CUI の場合は、コマンドを知らないと何も操作できない(ファイルの一覧すら見ることができない)、操作結果が即座に画面に反映されるとは限らない、など GUI と比べて不便と思える特徴が見受けられます。しかし、逆にコマンドさえ憶えていれば、複雑な操作や連続した処理も簡単に操作できます

ターミナルの起動

macOSとLinuxの場合は必ずプリインストールされています。macOSの方は[アプリケーション] > [ユーティリティ] > [ターミナル]を選択することでターミナルが起動します。よく使うことになるので、Dockに入れておきましょう。

Linuxの場合も、アプリケーション一覧にターミナルが必ず入っているはずです。または、適当にデスクトップ画面の上で右クリックすると「ターミナルを起動する」メニューがあるので、それを選択することでもターミナルが起動します。

シェルについて

bashとかzshとかfishとか

Homebrewを利用したプログラム管理(macOS用)

インストール方法

HomebrewはmacOSで様々なプログラムのインストールを助けてくれる非常に優秀なソフトウェアです。まずは以下のコマンドをターミナルに貼り付けて実行してください。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

途中質問がいくつか出ますが、Yesと答えればインストールが行われます。

基本的な使い方

Homebrewではformulaという、Ruby言語で記述されるインストールスクリプトの中にパッケージ定義が書かれています。通常、 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/のディレクトリに存在する任意のfoo.rbファイルがこれに当たります。ここに存在するプログラムのmacOSへのインストールは、ターミナルを開いて以下のコマンドを打ちます。

brew install formula

すでにインストールされているformulaの一覧を確認するためには

brew list

formulaのバージョン更新は

brew upgrade formula

formulaのアンインストールは

brew uninstall formula

で行います。

他にも様々なコマンドがありますが、詳細な使い方はこちら

インストールしておくべきもの

以下のコマンドで、早めに有用なプログラムをインストールしておきましょう。

# 基本プログラムコマンド・コンパイラ系
brew install bzip2 gcc gnuplot gnu-sed gawk emacs vim automake autoconf cmake ninja open-mpi parallel python@2 python bash tcsh zsh fish tmux wget
# バイオインフォでよく使う系
brew tap brewsci/bio
brew install blast clustalw clustal-omega fftw hmmer pymol xssp
# その他有用なプログラム
brew install pandoc

XQuartzのインストール(macOSのみ)

Homebrewでインストールした一部のプログラム(PyMOLやグラフ描画ソフトウェアなど)は、GUIを使って操作することを前提としています。この描画エンジンとして、Xquartz を入れておきます。

インストール方法は簡単で、https://www.xquartz.org/ にアクセスして XQuartz-2.7.11.dmg をダウンロードし、展開してインストールするだけです。インストールが終わると、[アプリケーション]→[ユーティリティ]の中にXQuartzが入っているはずです。

Linux OSの場合はXQuartzに相当するアプリケーションがはじめからインストールされています。

zsh

zshとは

Z shell (zsh) はUnixのコマンドシェルの1つです。zsh の名前は、当時プリンストン大学のティーチングアシスタントであったイェール大学教授 Zhong Shao のログイン名 "zsh" に由来して名付けられた……らしいです(Wikipedia)。

zshの使い方

macOSの場合

[システム環境設定] から [ユーザーとグループ] を選択して、左下の鍵マークをクリックしてパスワードを入力したあと、自身のユーザーアカウントの上で右クリックを押します。すると、詳細オプションというものが表示されますので、これを左クリックし、中の設定画面に移ります。

詳細オプション にはログインシェルという項目があるので、そこを /bin/zsh に変更してOKを押します。これで、ターミナルを起動したときのシェルがzshになります。

fish

tmux

editor

command

Python環境構築編

研究室に所属して一番初めに触る言語がPythonだと思うのでPythonの環境構築を進めていきます.

インターネットを検索するとPythonの環境構築方法がたくさん出てきますが, 初めての場合どれを参考にすれば良いかわからず, 挙句様々なソースから切りはりして持ってくるということをしてしまいかねないので偏りはあるとは思いますが一つの例としての環境構築を示してみたいと思います.

これは一つの正解であって絶対ではないので, 慣れてきてもっとこうしたいとかこういうやり方の方が良いと思えるものができてきたらそちらにシフトしていきましょう.

まずは使えるPython本体をがないことには始まらないのでインストールしていきましょう.

Install

for Mac 🍎

❯ brew install python

for Ubuntu18.04 🐧

デフォルトで入ってる...気がする.

❯ python --version

このコマンドで3.6以上の数字が返ってきたら大丈夫です. 次に進みましょう.

pipenv

Pythonの環境を作りたいなら1番に考えるべきものはこれから紹介するpipenvです.

pipenvはプロジェクト毎に仮想環境というものを作っていくのですが, 取り敢えず仮想環境はわからなくても良いです. 別の機会に理解していきましょう.

今回これをオススメするのは今後半年後, 1年後自分が見直す時, また卒業して後進にプロジェクトを引き継ぐ際に非常に楽になるためです.

私が学部4年でとあるプロジェクトを引き継いだ時, 悲惨な目にあったのでそうならないようはじめから意識していきましょう.

Install

for Mac 🍎

❯ brew install pipenv

for Ubuntu18.04 🐧

❯ sudo pip install --user pipenv

Usage

新入生課題をPythonで解くことを考えましょう. まずは適当な作業ディレクトリを作成し, そこに環境を整えていきます.

❯ mkdir new_comer_works; and cd new_comer_works
❯ pipenv install numpy jupyter sklearn matplotlib

上記のコマンドでnew_comer_worksディレクトリ以下にはPipfileとPipfile.lockという二つのファイルが生成されていると思います. しばらくはこれらのファイルは必要ないのでそのままにしておきましょう.

今回インストールしたライブラリを使いたい時には仮想環境というものの中に入る必要があります.

❯ pipenv shell
.venv ❯

このコマンドで入るとプロンプトが二行目のように変化すると思います. この状態でpythonを起動すると先ほど入れたライブラリを呼び出すことができます. この仮想環境から出るためにはCtrl+Dを押すことによって抜けることができます.

もう一つ仮想環境に入る方法があり, こちらの方法はコマンドごとに仮想環境に入って実行して抜けるといった動作をするものになります.

❯ pipenv run python

ある実行ファイルhoge.pyを引数--foo=barで実行したい場合にも先頭にpipenv runをつけるだけで,

❯ pipenv run python hoge.py --foo bar

で実行することができます.

pipenv環境の再現

Pythonのパッケージは日々更新されているものも多く, 今最新のライブラリを使っていたとしても時が経てば古くなってしまいます. さらに個々のパッケージは他のパッケージとの整合性に関係なくそれぞれ更新されていってしまいます. これがどういう自体をもたらすかというと, 今現在動いているスクリプトも将来的には動かなくなってしまうかもしれない危険性があるということを意味します. 自分用の書き捨てのスクリプトならいざ知らず, 研究室に残るプログラムであれば後進がぐちゃぐちゃの依存関係を解決するなんてもってのほかです. そのため自分が書いたスクリプトに責任を持つようにしましょう.

そこで今回用いるのがPipfile.lockです. Pipfile.lockにはpipenv installしたときに実際にインストールされたパッケージのバージョン情報が記されています. このファイルは自分で編集することは決してないのですが, このファイルのおかげで他の人のPCであったり, 自分のPCに新しく同じ環境を用意したりすることが容易にできるようになります.

❯ ls  # Pipfile.lock ...
❯ pipenv sync

これで実験した当時のPython環境が再現されます. 人とのやり取りはもちろんですが, 過去の自分とのやり取りで苦労することのないよう, このような技があることを覚えておくと良いでしょう.

Try!

  • pipenvを使った仮想環境からJupyter notebookを起動してみましょう.

pyenv

pyenvはPython本体ののバージョン管理をするツールです. 2019年現在, 流石にPython2を使うことがあるとは思いたくありませんが, Python2.7, 3.5, 3.6, 3.7といった複数のバージョンを使わなければならない場面も出てくるかもしれません.

基本的にPythonのバージョンは3.7を使っていきたいところですが, プロジェクトが依存するライブラリが3.6までしか対応していないだとか, そもそもPython2.7から移行するつもりのないライブラリさえ存在しています. 普通に考えてそのようなライブラリは淘汰されるべきなのですが, 使わなければならない事情もあるでしょう.

そうなったらpyenvの出番です. ただし, まずはpyenvを使わずに実現できないか熟慮し, どうしても必要な時のみ導入するようにしましょう.

Install

for Mac 🍎, Ubuntu18.04 🐧

❯ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

本体をインストールしたら環境変数を設定しましょう.

❯ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
❯ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
❯ echo 'status --is-interactive; and . (pyenv init - | psub)' >> ~/.config/fish/config.fish

Usage

ここでは競技プログラミングのAtcoderが提供する環境であるPython3.4.3をインストールしてみましょう. ちなみにこのバージョンは非常に古いため, 特定用途以外には決して利用しないでください. では, 適当な作業ディレクトリを作成していきましょう.

❯ mkdir competitive_programming; and cd competitive_programming
❯ pipenv install --python 3.4.3

このように1度pyenvをインストールしてしまえばpipenvからPythonのバージョンを指定することができるので, その後あまりpyenvを意識することなく使えてしまうので便利です.

ただし, pyenvに関しては個人で実験, 開発をする場合には必要のないことがほとんどですので, よく考えて導入しましょう.

conda

condaも使うことがあると思うので一応紹介しておきます. condaは先に紹介したpipenv, pyenvを統合した仮想環境のようなものです. そのため, これらのツールとは相性があまり良くなく, condaを使うならこれ一つにしていきましょう.

condaを使う場面は限られていて, condaでないとインストールが難しい, できないライブラリを利用する場合のみです. というのもcondaは諸悪の根源で, 突如として環境が破壊されることが多く, 非常に扱いにくいからです. また, condaで入れたnumpyが速いという話もありますが, それを期待して入れるくらいならおとなしくJuliaRustを書きましょう.

ということでcondaを入れる際には細心の注意を払うようにしましょう.

Install

for Mac 🍎, Ubuntu18.04 🐧

❯ wget https://repo.continuum.io/miniconda/Miniconda3-3.7.0-Linux-x86_64.sh -O ~/miniconda.sh
❯ bash ~/miniconda.sh -b -p $HOME/miniconda
❯ echo 'source (conda info --root)/etc/fish/conf.d/conda.fish' >> ~/.config/fish/config.fish

Usage

まずはじめに仮想環境を作りましょう. 今回は適当にpracticeという名前にします.

❯ conda create -n practice python=3.7

condaの仮想環境はこれで作成されるので, 次に仮想環境に入ってパッケージを追加していきましょう.

❯ conda activate practice  # conda環境の有効化
❯ conda install jupyter ...  # 必要なパッケージのインストール

condaを使うとpipとは違う場所からパッケージをダウンロードし, 依存関係などをよしなにしてくれるので基本的にconda installコマンドを用います. ただ, 中にはcondaでは提供しておらず, pipでないとインストールできないものもあるのでそのような場合にはconda環境が有効になっていることを確認したのち, pip installのコマンドでインストールすることができます. この辺りは環境が壊れやすい操作ですので注意して行いましょう.

condaで管理したPythonを利用する場合には, パッケージの追加のときと同様, condaを有効化したのち, pythonの環境を立ち上げることで可能となります.

また, conda環境から抜ける場合には次のコマンドを実行して下さい.

❯ conda deactivate

VS Code環境構築編

プログラミングをするときにはエディタというものを使っておこないます. もちろんWindowsでおなじみのメモ帳であったり, MacのTextEditであったりでもプログラムを書くことは可能ですが, あまりにも効率が悪いため普通はプログラムを書くためのエディタというものを用います. 先に紹介したvimemacsもエディタの一つであり, これを使いこなすことがスーパープログラマの第一歩なのですが, 人によってはこれらを使いこなすのが難しかったりするのでこれから紹介するVisual Studio Codeをお勧めします.

Install

for Mac 🍎

brew cask install visual-studio-code

for Ubuntu18.04 🐧

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt install apt-transport-https
sudo apt update
sudo apt install code

Settings

VS Codeではなにかを行うときコマンドパレットというものを開いて実行することが多々あります. Macではcmd+Shift+P, UbuntuではCtrl+Shift+Pで開くので試してみましょう.

開いたら, まずはターミナルからcodeのコマンドで起動できるようにしたいのでその設定をしていきます.

コマンドパレット上でshellと検索してください.

"Shell Command Install 'code' command in PATH”を実行すると次からターミナルから開けるようになって便利です.

コマンドパレットは様々なことができるので何ができるのか眺めてみるのも良いでしょう.

次に左下の歯車アイコンからSettingsを開きます. ここではフォントの種類やサイズの変更から拡張機能の設定まであらゆる設定をすることができるのでなにかと開くことが多いと思います.

VS Codeはデフォルトで使いやすいように設定されているのでこの設定にすると誰もが使いやすいというのはあまりない気がするので各自色々試してみて欲しいと思います.

plugins

VS CodeにはMS公式が配布するものからユーザーが個人で開発したものなど様々な拡張機能がありますが, デフォルトで多くの機能が付いているためあれもこれも入れないと使えないなんてことはありません.

そこでここではあると便利な必要最低限のもののみ紹介します. もちろん他にも使い勝手の良いものはたくさん存在しているので慣れてきたら探してみてください.

Install

VS Codeを開いたとき, 左側にアイコンが並んだバーが表示されると思います. その中から上記画像の一番下の四角が組み合わさったものをクリックするとEXTENSIONSというタブが現れるのでそこから検索してInstallを実行しましょう.

Recommend

Python

Pyhonを書くことになったら必須レベルの拡張機能です. 次項で詳しく見ていきます.

Python以外の言語を書く場合, その言語の拡張機能を入れることによってVS CodeのIntelliSense(コード補完)やその他便利な機能が使えるようになるので, 目的にあったものを入れましょう.

Material Icon Theme

ファイル名の前に表示されるアイコンが格好よくなります(主観).

Nord

NordはVS Codeのカラーテーマの数ある一つで, とても格好よくなります(主観). カラーテーマは自分好みのものを選べば良いと思いますが, VS Code以外の様々なアプリケーションに展開しているものを選ぶと統一感が出ておすすめです.

例としてsolarizedやmolokaiがあります.

Bracket Pair Colorizer

プログラムを書く上で避けられない'()'を対応づけて色付けてくれるので少し見やすくなります.

デフォルトのカラーは少し品がないので, Nordのカラーに寄せておくと素敵です. VS Codeの設定ファイルである, settings.jsonに記述しておきましょう.

{
  "bracketPairColorizer.consecutivePairColors": [
    "()",
    "[]",
    "{}",
    ["#eceff4", "#d08770", "#b48ead"],
    "#bf616a"
  ]
}

Python

VS CodeでPythonを使いこなすTipsを紹介していきます. この項ではpipenvもしくはconda, およびVS CodeのPythonの拡張が入っていることを前提とするので, まだ入れていない方は前に戻って入れてください.

Start Project

ではまずプロジェクトのディレクトリを作成します. pipenvの項と同じものを作成するので既に存在していれば作らなくて良いです.

mkdir new_comer_works; and cd new_comer_works
pipenv install numpy jupyter sklearn matplotlib

ターミナルからはcodeというコマンドでVS Codeを立ち上げることができます. codeのあとの.は現在のディレクトリを表すので覚えておくと良いでしょう.

code .

VS Codeを立ち上げたら適当なファイルを作成します. ここではmain.pyとしておきましょう. Pythonのファイルを作成するとVS Codeの左下にPythonと書かれたフィールドができていると思うのでクリックしてみます. すると使えるPython環境の一覧が出てくると思うので, 使いたいものを選んでください. ここでは一番下のpipenvの環境を使います.

右下にいくつか警告が出るかもしれません. 今はテストのフレームワークは必要ないので無視して構いませんが, Linterというものは有用なので有効化していきましょう. ただし, ここではVS Code上ではインストールせずターミナルからインストールしていきます.

pipenv install --dev flake8 yapf

Linter

Linterとは書いたコードがきちんと構文に従っているかチェックしてくれるもので, 見た目が統一されて綺麗になります. 他人の綺麗ではないコードを読むのは苦痛に耐えないので慣れておくようにしましょう. しかし, 一つ一つの規則を覚えていくのは不毛なのでVS Codeにやってもらいましょう.

では左下の歯車アイコンからSettingsを開いてみましょう. Search settingsからPythonを検索し, 次の項目の設定をしておきましょう.

さらにファイルを保存したときにコードを整形しておくと便利なのでformat on saveを検索しチェックを入れておくと良いでしょう.

Jupyter

PythonにはJupyterという実行環境があって, データの可視化や1ステップごとにコードを実行することができます. Jupyter Lab(Notebook) というWebベースの環境で実行するのが大半ですが, VS Code上でも実行することができます. VS Codeで実行するメリットとしては

  • IntelliSenseが使える
  • デバッグが容易
  • .pyでも気軽に実行できる

などがあります.

Usage

#%%[markdown]
# # これはMarkdownのセル
# #%%でセルを生成,
# Shift + Enterで実行して次のセルに移動

#%%
lab = '┌(┌ ^o^ )┐'
lab + 'ラボォエンジョイ'

Try!

上記のコードが動くことを確認した後, 好きなグラフを出力してみましょう. matplotlibのギャラリーにたくさんサンプルがあるのでとりあえずコピペしてきてもいいと思います.

Machine Learning