新人Androiderに導入してほしい環境

@eaglesakura です。

春ですね。新入社員の季節ですね。
前置きはこのくらいにして、「この環境を最低限用意してほしい」という一覧を書いておきます。

# OS選定

`Windows 10` or `Mac OS` をお勧めします。それ以外のOSを導入できるようなスキルがあるならば、たいていのことは自分でどうにかできるでしょう。

私はWindows10を使用しています。所属しているトップゲート社はほぼ全員Macを使用しているためマイノリティですが、下記のような理由で使っています。

 * 購入時点でMBPより強力なCPUを搭載していた
 * メモリ32GBを搭載可能
 * Visual Studioが使用できる
 * GPUに選択肢がある

特にAndroidアプリ開発においてCPUとメモリは大正義です。メモリ8GBは人権がありません。低消費電力モデルのCPUもあまりオススメしません。

「デスクトップPCを買えよ」みたいにたまにツッコミが入りますが、どうしても打ち合わせ等でPCを持ち歩くので、デスクトップは仕事上難しいです。

デスクトップも欲しいです。
すっごい強いマシンが欲しいです。

# 導入してほしいツール

Androiderの仕事はだいたいAndroid Studioかコマンドラインで行われます。

ASとコマンドラインツールを使いやすくカスタマイズしていないのならば、丸一日かけてでも両者を使いやすく整備しなさい。８時間くらいの時間ロスはすぐにペイできます。

整備しなさい。

## Android SDK

あなたがAndroiderなのであれば、Android SDKはAndroid Studioバンドルではなく、SDK単体でダウンロードして導入してください。
くれぐれも、AS配下のパスに対して `ANDROID_HOME` 環境変数を設定しないでください。

残念なことですが、Android Studioはバージョンアップ時に環境を壊すことがあります。
これも残念なことですが、業務の都合により複数バージョンのAndroid Studioを導入をしなければならない場合もあります。

Android SDKを単体で導入する経験とスキルを身に着けておくと、最悪の場合複数のAndroid SDK環境を自分で用意することができます。

下記のコマンドが実行できることを確認してください。

 * `adb devices`

### ANDROID_HOME

環境変数に `ANDROID_HOME` を設定し、Android SDKへのパスを設定してください。

## Android Studio

Windowsユーザーであればzip/SDK非バンドル版を選択してください。Macユーザーであれば、インストール先は適当なディレクトリ(`~/android/`等)にインストールしてください。

少なくとも、複数バージョンのAndroid Studioがインストールされることを見越してください。

## git

 * https://git-scm.com/

コマンドラインから使えるようにしてください。GUIから使うツールもありますが、コマンドラインから使うほうが楽です。使うのは自由ですが、使い方がわからなくても知りません。

gitはMacのほうが高速に動作します。Windowsユーザーは「そういうものだ」と思って諦めてください。
また、最低限下記のコマンドを打ち込んでおきましょう。

 * `git config --global user.email "your mail address"`
 * `git config --global user.name "your chat id"`
 * `git config --global core.filemode false`
    * Windowsユーザーの場合やっておきましょう。
    * この意味がわかるのは、あなたが呆れるようなコミットをする瞬間です。

user.nameは、少なくとも会社用PCではチャット等のIDと一致させることをオススメします。
チャットの利用率が高いほど、あなたのことをチャットのIDでしか区別できなくなります。逆に言えば、チャットのIDとgitのAuthorを一致させることでコミュニケーションコストを下げることができます。

※弊社の場合です

### git-flow / hookscript

 * http://danielkummer.github.io/git-flow-cheatsheet/index.ja_JP.html
 * https://github.com/eaglesakura/git-flow-hook

git-flowとgit-flow-hookは作業ブランチ管理を楽にします。
プロジェクトが本格稼働した後、masterに直接コミットはギルティです。
また、作業ブランチ名を `feature/id/{issue番号}/master` にしておくことでどんなに英語ができない人間でも少なくとも「今どの作業をしていて」「どんな結末を迎えたいのか」を識別することができます。
ブランチ名に悩むのはやめましょう。

## sdkman

 * http://sdkman.io/

各種環境を自動で入れてくれるツールです。sdkmanはバージョンの切り替えをサポートしているので、一時的にバージョンを戻す等が簡単にできて便利です。
sdkman経由で下記をインストールしてください。

 * groovy `sdk install groovy 2.4.9`
 * gradle `sdk install gradle 3.3`
 * jdk `sdk install java 8u121`

## node.js

 * https://nodejs.org/ja/

Firebase CLI等、一部のツールはnode.jsに依存します。
導入しておいてください。

`node --version` が実行可能であれば良いです。
筆者の環境では `v7.6.0` となります。

## Docker

 * http://docker.io/

`Docker for Windows` `Docker for Mac` を導入してください。
ちょっとした確認環境はこれで構築できます。自分の開発環境をDockerfileに閉じ込めておくと、環境構築が非常に楽です。

Windowsの場合は `Hyper-V` が必要だったりして敷居が高いですが、 [Virtual Box版](https://www.docker.com/products/docker-toolbox) でも頑張ればわりかしなんとかなります。

例えば、一時的に `gcloud` 等のツールが必要になったときに既存のImageから簡単に実行できます。

また、確実に動作可能（ビルド可能）なDockerfileを用意しておけば、コードが悪いのかあなたの環境が悪いのかを判断することができます。CIがPASSしているのにあなたの手元でビルドできないならば、あなたの環境が悪い。

`docker run --rm hello-world` が実行できれば、ひとまずは問題ありません。

必要な人は常時実行すれば良いですが、不要であれば基本的に起動しなくて良いです。

## Cygwin(Windows)

 * https://www.cygwin.com/

Windowsでbashっぽい環境を構築できる。
スクリプトの多くは `bash` での動作を前提にされるので、コレを導入しておくとプロジェクト内でのスクリプトメンテナンスコストが下がる(Windowsの `bat` はMacじゃ動かないが、 `.sh` はCygwinを通すとWindowsでも動かせる)。

## ConEmu(Windows)

 * https://conemu.github.io/

複数タブでターミナルを扱える。
Cygwinやコマンドプロンプトと組み合わせると便利。

## Homebrew(Mac)

 * https://brew.sh/

Macのパッケージ管理ツール。
導入したいツールがあったらこいつを使うとだいたい降ってくる。

# GUIツール

## Atom

 * https://atom.io/

ちょっとしたテキスト変更で活躍します。
「ちょっとコードを修正したいけどviは辛いしAndroid Studioを起動するほどでもない」みたいなケースは結構あるので、導入しておきましょう。

## Slack Desktop

Chrome等のブラウザでも見れますが、デスクトップアプリのほうが通知が概ね使いやすいです。Chromeだけで見てもいいですが、その状態でNotificationに気づかないのならばおこります。

## mono snap

 * https://monosnap.com/welcome

撮影したスクリーンショットに注釈を入れたりできます。
issueに何行もつらつらと解説テキストを書くより、画像に注釈を入れたほうが理解されやすい場合のほうが多いです。

# 環境（物理）

## デュアルディスプレイ

ディスプレイの数は正義です。
概ね、ディスプレイ２~３台までであれば、あなたの脳内作業メモリを一時的に上昇させることができます。４台を超えるディスプレイを使ったことが無いので、それ以上は知りません。

できれば4kか、21:9のゲーミングディスプレイをオススメします。
Android StudioのLayout Editorを使うとき、横長ディスプレイや高解像度大画面ディスプレイは非常に役立ちます。

もしあなたが「MacBook（ノートPC）の備え付けモニタで十分」というならばそれでよいでしょう。省スペースが好きな人もいます。
エライのは無数の画面を使いこなすことでも、省スペースで仕事をこなすことでもありません。
いっぱいコミットして、いっぱいレビューを受けて、あなたの実力を伸ばして、炎上せずにプロジェクトを完遂させることがエライのです。

# 最後に

このリストは適当にメンテします。