Mac 環境設定 2019春ーLightblue Technologyの場合

会社で新しいバイトにMacbook Proを買ってあげたので設定をメモ。
弊社ではAI開発・データ分析を行っていて、主にpythonを使っています。
実務経験ないand初めてMacを使うバイトに1時間で働き出してもらうためのミニマム仕様です。

### 環境
ハード： MacBook Pro (13-inch, 2018, USキーボード)
OS： macOS Mojave 10.14

#### USキーボードな理由
弊社ではUSキーボードを採用しています。
理由は2つあって、1つはひらがなとかが無い分ごちゃごちゃしていなくて綺麗で一つ一つのキーが大きくてコーディングしやすいこと。
もう1つはリセールバリューが高いことです。windowsよりmacの方がメルカリ等で高く売れますが、その中でもUS配列は高いです。


### Dockの設定
買った瞬間はDockが大きく、余計なアプリが表示されています。また、常に表示され続けます。
![macOS_preview_News_screen_06042018_carousel.jpg.large.jpg](https://qiita-image-store.s3.amazonaws.com/0/370065/b2f68f31-5b32-f6d0-25ab-33fa278d9db3.jpeg)
まずは、「Siri」や標準の「メール」、Macでは一生使わないであろう「地図」等のアプリを右クリックで「オプション」→「Dockから削除」を選びます。

次にDockが表示されないように、Dockの設定を行います。右上のリンゴマークを押して、「システム環境設定」を押します。
<img width="394" alt="スクリーンショット 2019-03-03 10.53.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/370065/1c7f2349-c7e2-d043-fa46-1ad508325532.png">
以下の画面から、Dockを押して、設定画面に入ります。
<img width="666" alt="スクリーンショット 2019-03-03 10.54.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/370065/a46f50dd-1395-f615-0cf4-da5e8b09382a.png">
Dockの設定画面で好みに合わせてサイズ調整をして、画面の位置も下にするか横にするか選びます。
最後に、「Dockを自動的に表示/非表示」にチェックを入れることで、Dockを使わないときは表示されなくなります。13インチの画面を最大限活用できるので、コーディングしやすくなります。
<img width="658" alt="スクリーンショット 2019-03-03 10.54.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/370065/26cd6611-0093-1bd4-6423-8523d5a591e9.png">

### 環境構築
弊社では、未経験者の場合はローカルに環境設定を行いません。なぜなら、brew等を使うと簡単になんでも入れられるせいで、ローカルの環境を大きく壊してしまう危険があるからです。特に、xgboost等を入れるためにgccとかをごにょごにょしちゃうと手がつけられなくなっちゃいます。
そこで、dockerを入れて、自然言語処理用のdockerfile、画像解析用のdockerfileといったものを用意して、最初のうちは、環境等を気にすることなくjupyterで分析に集中してもらえるようにしています。その後、試用期間が経ち、リテラシーが高くなった時に自分用にカスタマイズしてもらうようにしています。
### dockerのクイックスタート
#### インストール
[Docker for Mac](https://docs.docker.com/docker-for-mac/)
インストーラに従ってインストール

インストールするとデスクトップにランチャーが追加される
![docker.png](https://qiita-image-store.s3.amazonaws.com/0/370065/be53d86d-04e2-5fe8-23fa-9b878aa34fc4.png)

Docker is runningのステートになるとターミナルからdockerコマンドが使えるようになる 
>$docker

![図1.png](https://qiita-image-store.s3.amazonaws.com/0/370065/0565684b-2774-2a4f-0dd4-c17df9fb2a7d.png)

#### テスト
以下のコマンドをターミナルで打ってみる。
>$ docker run hello-world

以下のような表示が出たら成功。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/370065/302deae2-9f14-4e11-71c2-2e53465193c7.png)

#### docker imageを作る（docker build）
dockerfileを用意する。
以下に、顔認識用のサンプルを用意しました。

```docker
FROM python:3
RUN apt-get -y update
RUN apt-get install -y --fix-missing \
    build-essential \
    cmake \
    gfortran \
    git \
    wget \
    curl \
    graphicsmagick \
    libgraphicsmagick1-dev \
    libatlas-dev \
    libavcodec-dev \
    libavformat-dev \
    libgtk2.0-dev \
    libjpeg-dev \
    liblapack-dev \
    libswscale-dev \
    pkg-config \
    python3-dev \
    python3-numpy \
    software-properties-common \
    zip \
    && apt-get clean && rm -rf /tmp/* /var/tmp/*
RUN cd ~ && \
    mkdir -p dlib && \
    git clone -b 'v19.9' --single-branch https://github.com/davisking/dlib.git dlib/ && \
    cd  dlib/ && \
    python3 setup.py install --yes USE_AVX_INSTRUCTIONS
RUN pip3 install --upgrade pyzmq --install-option="--zmq=bundled" && \
    pip3 install --upgrade jupyter && \
    pip3 install --upgrade \
    numpy \
    scipy \
    scikit-learn \
    matplotlib \
    pandas \
    opencv-python==3.4.1.15 \
    Pillow==4.1.1 \
    Keras==2.0.6 \
    tensorflow==1.3.0 \
    h5py==2.7.1 \
    tqdm==4.11.2 \
    dlib>=19.3.0 \
    tornado==5.1.1 \

ENV LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH
VOLUME /notebook
WORKDIR /notebook
EXPOSE 8888
ENTRYPOINT jupyter notebook --ip=0.0.0.0 --allow-root --no-browser
```

このdockerfileを配置したディレクトリで、docker buildしていきます。これで、いわゆるdockerイメージができます。
-fオプションでDockerfileのパスを指定できます。
>docker image build -t <イメージ名> -f <Dockerfile＞

#### docker containerを作る（docker run）
以下のコマンドで、docker containerを作ります。
>docker run --name <コンテナ名> -v <マウントしたいホストのPATH>:/root -itd -p 8888:8888 <イメージ名>

これで、ローカルのブラウザからhttp://localhost:8888/tree にアクセスすることでjupyterを使えます。

### おわり
ここまででミニマムの設定は終わりです。
すぐにでもデータ分析を始められます。
あとは、US配列なんで、[karabiner](https://pqrs.org/osx/karabiner/)とか使って、キーバインド変えるのと、caps lockとcontolとかを入れ替えたりすると快適になりますね。