僕のMacセットアップ記録

# 概要

仕事でつかっていたMacがおかしくなったので、再セットアップしました。
その記録
コメントでこんなアプリいれると便利といったことを教えてもらえるとうれしいです。

# 僕について

ライブ配信系の会社につとめていて、
新しい技術・改善案を提案する仕事しています。

Linuxのサーバー側、iPhone、Android、webアプリといろいろ手を出しているので、それらの作業ができるよう環境を構築しないと・・・ですね。

# まずはMac自体を調整

Macのアカウントを作ります。
今回は借りてきたPCで、もともとのアカウントがあるので、アカウントの追加でつくりました。
設定が面倒なので、iClowd経由でアカウントを設定しました。

ちなみに、このときはYosemite状態だったのでHigh sierraでどうなるかはよくわかりません。

## High Sierraにしました。
OSXのバージョンをあげました。
これは貸与してもらったPCがYosemiteだったためです。

## chrome・Firefoxの取得とインストール

chromeはアカウントでブックマークとか同期できますからね。
便利です。
あと検証用にFirefoxも一応いれておきます。

## id_rsaを準備
https://qiita.com/suthio/items/2760e4cff0e185fe2db9
ここを参考に適当につくった。
id_rsa.pubのgithubアカウントとの紐付けをわすれずに

# 開発環境の調整
## Xcodeのインストール

iPhone開発で必要になるxcodeのインストールを実施しておきます。
App Storeから入手しました。時間かかりますね。このインストール

## Brewのインストール

homebrewでライブラリの管理したいので、インストールしました。
https://brew.sh/index_ja.html
ここの内容にしたがってコマンドを１つ実行するだけ

## meld
いれようとおもいましたが、うまく動作しないみたいなので、スルーします。

caskで入れて以下を実施したら動作した。
https://qiita.com/qoAop/items/d76ea5d9b10c43bf1d6a

でも、そのまま

```
$ brew cask install meld
```
で、動作するものが入るようになりましたね。

## 0xED
binaryの内容を確認したりするのに利用しているツール
Hex Fiendをつかってましたが、いつのまにか0xEDが復活してますね。よかったよかった。
http://www.suavetech.com/0xed/0xed.html
ここからダウンロードして、~/Applicationにコピーしてインストール

## ttLibC

自作して利用しているC言語のライブラリをgithubから取得しておく
ここで利用しているのが、だいたい変換系で利用しているもの

c言語のライブラリなので~/Documents/c/にcloneした。

## automake

autotoolsを利用したプロジェクトをつくるのに必要なので、いれておく。

```
$ brew install automake
```

これでautomake、autoconfともに入る模様

## cmake

cmakeを利用したプロジェクトを書く場合に必要

```
$ brew install cmake
```

## ninjaもいれとく

```
$ brew install ninja
```

## yasmとnasm

```
$ brew install nasm
$ brew install yasm
```

android ndk用のlibvpxコンパイルで必要になったので、実施

## libtoolize

```
$ brew install libtool
```

jpeg-turboのコンパイルで必要になった。

## nodeもいれとく

nodeのプログラムを書いたりnpmをつかってjavascriptやtypescriptのプロジェクト書いたりするので、nodeをいれておく。
https://qiita.com/sinmetal/items/154e81823f386279b33c

今回はnodebrewで
brewでいれたら6.x系だったので・・・
nodebrew経由にして9.x系いれたい。
なぜか~/.nodebrewと~/.nodebrew/srcのディレクトリをつくらないとだめっぽかった。

PATHの設定が面倒なので.bash_profileに$HOME/.nodebrew/current/binをPATHにいれるように調整しておいた。

## terminalの設定

ターミナルを開いて環境設定 - プロファイル - シェル
を開いてシェルの終了時の動作を「ウィンドウを閉じる」に設定

## VisualStudioCodeをいれる

https://code.visualstudio.com/
ここから入れる。

とりあえずbinaryのみの取得だったので~/Applicationにコピーした。
起動するのが面倒なので、aliasを設定しておく。

```.bash_profile
alias vscode="open -a visual\ studio\ code ."
```

これでターミナルで

```
$ vscode
```
と打つだけで、そのディレクトリがVisualStudioCodeで開く

# ライブラリもろもろ

## cute
ttLibCのunitテスト動作を実施するときに利用してる、ttLibCのReadmeにしたがって、headerデータを/usr/local/includeにいれとく

## すでにはいってた
mp3lame x264 avcodec jpeg swscale swresample
ま、いいか仮PCだし、うごいたらいいや。

lameとx264はbrew経由ですでにはいっていて、latestみたいだった。
ffmpegは特になにも指定せずにはいっているみたいなので、調整しておこうと思う。

```
$ brew install ffmpeg --with-fdk-aac --with-libvorbis --with-libvpx --with-openh264 --with-opus --with-rtmpdump --with-speex --with-theora --with-x265
```
これでいってみる。

すでにはいっていたライブラリの影響か、brewでインストールしたライブラリのincludeファイルがおかしくなっていたので、chmodで変更してまわった。
なぜか644？になってたので、755に書き換えてまわった。

## はいってなかった
現状このあたりはない。
faac:brewで入れました。~~今回はなしで・・・すでにfdkaacで済んでるし~~
faad:同上なくていい、必要ならavcodecでdecodeするし
daala:あとで余力があったらいれる。たぶん、av1使うからいれることないと思う。
speexdsp: brewでいれた。
soundtouch:いれる。
libyuv:いれる。

libyuvから
https://chromium.googlesource.com/libyuv/libyuv/

まずcloneする。

```
$ cd Documents/c/
$ git clone https://chromium.googlesource.com/libyuv/libyuv
$ cd libyuv
$ vi CMakeLists.txt
$ mkdir build
$ cd build
$ cmake ..
$ sudo make install
```

CMakeLists.txtをいじっているのは
https://chromium.googlesource.com/libyuv/libyuv/+/master/CMakeLists.txt#41
この次の行に

```
target_link_libraries( ${ly_lib_shared} ${JPEG_LIBRARY})
```

これを追記しないと、jpegのlibraryが見えずにコンパイルがこける。
linuxだと問題なかったはず。

soundtouch

```
brew install sound-touch
```

これで済んだ

この時点でttLibCのコンパイルが
faac faad daalaenc daaladec webrtc libyuvがoffでコンパイルしてcuteのユニットテストも実行可能になっているので、ひとまずよしとしたいと思う。

faac

```
$ brew install faac
```

これでOK

## ttLibC

```
$ cd Documents/c/
$ git clone git@github.com:taktod/ttLibC
$ cd ttLibC
$ autoreconf
$ ./configure --enable-all --enable-test

Result ...
license: GPLv3
debug:            on
test:             on
file feature:     on
socket feature:   on
opencv:           on
openal:           on
mp3lame(encoder): on
mp3lame(decoder): on
faac(encoder):    on
faad(decoder):    off(faad library is missing.)
openh264:         on
x264:             on
x265:             on
theora:           on
daala(encoder):   off(daalaenc library is missing.)
daala(decoder):   off(daaladec library is missing.)
vorbis(encoder):  on
vorbis(decoder):  on
speexdsp:         on
speex:            on
opus:             on
avcodec:          on
jpeg:             on
apple:            on
webrtc:           off(no compile data detection.)
soundtouch:       on
fdkaac:           on
libyuv:           on
swscale:          on
swresample:       on
```

こんな状態になった

やること：とりあえずあとでlibyuvのヘッダ参照まわりの動作をなければ、/usr/local/をみにいくで調整しておきたい。

11/28追記：brewでfaac入れたのとlibyuvのconfigure動作を変更した結果、利用可能に変わりました。

## ttLibJsGypをいれる。

```
$ cd Documents/node/
$ git clone git@github.com:taktod/ttLibJsGyp
$ cd ttLibJsGyp
$ git submodule init
$ git submodule update
$ npm install
$ node
> require(".")
```

```
> require(".")
{ Frame: { [Function: Frame] fromBinaryBuffer: [Function] },
  reader: 
   { FlvReader: [Function: FlvReader],
     MkvReader: [Function: MkvReader],
     WebmReader: [Function: WebmReader],
     Mp4Reader: [Function: Mp4Reader],
     MpegtsReader: [Function: MpegtsReader] },
  writer: 
   { FlvWriter: [Function: FlvWriter],
     MkvWriter: [Function: MkvWriter],
     WebmWriter: [Function: WebmWriter],
     Mp4Writer: [Function: Mp4Writer],
     MpegtsWriter: [Function: MpegtsWriter] },
  decoder: 
   { AudioConverterDecoder: { [Function: decoder] enabled: true },
     AvcodecVideoDecoder: { [Function: decoder] enabled: true },
     AvcodecAudioDecoder: { [Function: decoder] enabled: true },
     JpegDecoder: { [Function: decoder] enabled: true },
     Mp3lameDecoder: { [Function: decoder] enabled: true },
     Openh264Decoder: { [Function: decoder] enabled: true },
     OpusDecoder: { [Function: decoder] enabled: true },
     SpeexDecoder: { [Function: decoder] enabled: true },
     TheoraDecoder: { [Function: decoder] enabled: true },
     VorbisDecoder: { [Function: decoder] enabled: true },
     VtDecompressSession: { [Function: decoder] enabled: true } },
  encoder: 
   { AudioConverterEncoder: { [Function: encoder] enabled: true },
     FaacEncoder: { [Function: encoder] enabled: false },
     FdkaacEncoder: { [Function: encoder] enabled: true },
     Mp3lameEncoder: { [Function: encoder] enabled: true },
     JpegEncoder: { [Function: encoder] enabled: true },
     Openh264Encoder: { [Function: encoder] enabled: true },
     OpusEncoder: { [Function: encoder] enabled: true },
     SpeexEncoder: { [Function: encoder] enabled: true },
     TheoraEncoder: { [Function: encoder] enabled: true },
     VorbisEncoder: { [Function: encoder] enabled: true },
     VtCompressSessionEncoder: { [Function: encoder] enabled: true },
     X264Encoder: { [Function: encoder] enabled: true },
     X265Encoder: { [Function: encoder] enabled: true },
     MSAacEncoder: { [Function: encoder] enabled: false },
     MSH264Encoder: { [Function: encoder] listEncoders: [Function], enabled: false } },
  resampler: 
   { AudioResampler: { [Function: resampler] enabled: true },
     ImageResampler: { [Function: resampler] enabled: true },
     SoundtouchResampler: { [Function: resampler] enabled: true },
     SpeexdspResampler: { [Function: resampler] enabled: true },
     SwresampleResampler: { [Function: resampler] enabled: true },
     SwscaleResampler: { [Function: resampler] enabled: true } },
  MsSetup: 
   { CoInitialize: [Function],
     CoUninitialize: [Function],
     MFStartup: [Function],
     MFShutdown: [Function],
     setlocale: [Function] },
  MsLoopback: { [Function: Loopback] listDevices: [Function] },
  rtmp: 
   { __esModule: true,
     NetConnection: [Function: NetConnection],
     NetStream: [Function: NetStream] } }
```

とりあえずちゃんとコンパイルできて、利用可能状態になってる模様。
よきかなよきかな

## ttLibGoもやっとく

```
$ brew install go
$ go get github.com/taktod/ttLibGo
# github.com/taktod/ttLibGo/ttLibGoFaac
In file included from ttLibC.c:4:
src/github.com/taktod/ttLibGo/ttLibGoFaac/../ttLibC/ttLibC/encoder/faacEncoder.c:21:10: fatal error: 'faac.h' file not found
# github.com/taktod/ttLibGo/ttLibGoFfmpeg
In file included from ttLibC.c:4:
src/github.com/taktod/ttLibGo/ttLibGoFfmpeg/../ttLibC/ttLibC/decoder/avcodecDecoder.c:155:15: warning: 'avcodec_decode_audio4' is deprecated [-Wdeprecated-declarations]
/usr/local/Cellar/ffmpeg/3.4/include/libavcodec/avcodec.h:4943:1: note: 'avcodec_decode_audio4' has been explicitly marked deprecated here
/usr/local/Cellar/ffmpeg/3.4/include/libavutil/attributes.h:94:49: note: expanded from macro 'attribute_deprecated'
In file included from ttLibC.c:4:
src/github.com/taktod/ttLibGo/ttLibGoFfmpeg/../ttLibC/ttLibC/decoder/avcodecDecoder.c:426:15: warning: 'avcodec_decode_video2' is deprecated [-Wdeprecated-declarations]
/usr/local/Cellar/ffmpeg/3.4/include/libavcodec/avcodec.h:4992:1: note: 'avcodec_decode_video2' has been explicitly marked deprecated here
/usr/local/Cellar/ffmpeg/3.4/include/libavutil/attributes.h:94:49: note: expanded from macro 'attribute_deprecated'
```

goのpkgをさかのぼってみたところ

```
$ ls -l
total 7200
-rw-r--r--  1 taktod  staff  593990 11 25 20:31 ttLibGo.a
-rw-r--r--  1 taktod  staff  214594 11 25 20:31 ttLibGoFdkaac.a
-rw-r--r--  1 taktod  staff  265724 11 25 20:31 ttLibGoFfmpeg.a
-rw-r--r--  1 taktod  staff  195336 11 25 20:31 ttLibGoJpeg.a
-rw-r--r--  1 taktod  staff  227946 11 25 20:31 ttLibGoLibyuv.a
-rw-r--r--  1 taktod  staff  195622 11 25 20:31 ttLibGoMp3lame.a
-rw-r--r--  1 taktod  staff  277728 11 25 20:31 ttLibGoOpenh264.a
-rw-r--r--  1 taktod  staff  199282 11 25 20:31 ttLibGoOpus.a
-rw-r--r--  1 taktod  staff  200762 11 25 20:31 ttLibGoSoundtouch.a
-rw-r--r--  1 taktod  staff  195112 11 25 20:31 ttLibGoSpeex.a
-rw-r--r--  1 taktod  staff  190800 11 25 20:31 ttLibGoSpeexdsp.a
-rw-r--r--  1 taktod  staff  197086 11 25 20:31 ttLibGoTheora.a
-rw-r--r--  1 taktod  staff  196914 11 25 20:31 ttLibGoVorbis.a
-rw-r--r--  1 taktod  staff  243950 11 25 20:31 ttLibGoX264.a
-rw-r--r--  1 taktod  staff  260012 11 25 20:31 ttLibGoX265.a
```

こうなってた。
よきかなよきかな

## テスト用のリソースデータを別のPCから取得
test.h264.aac.mp4といった変換動作テストに利用しているデータを別のPCからscpコマンドでコピーを実施
これで必要なものはそろったはず。

この時点であと80Gほどになった。
もともと113Gあった。

webrtcのコードをgclientで取得するのはちょっときびしいか＿な・・・

## AndroidStudio準備

https://developer.android.com/studio/index.html
からAndroidStudioを取得してインストールしておく

指示にしたがって順番にいれるだけ
Projectのlocationだけ~/Documents/androidにしたいが・・・

ndkのtoolchainも準備しておく。
これはすでに資料があるので、それにしたがってやるだけ。

r１４bを利用するとplatform=android-8は利用できないみたいですね。9以降サポートか・・・

ここまでで10Gも食われた・・・

## emscriptenやっておこう。

https://kripken.github.io/emscripten-site/
ここからDownloadする
とりあえずemsdk-portable.tar.gzを入手した。
emsdk-portableを~/tools/にコピー

```
$ cd ~/tools/emsdk-portable
$ ./emsdk update
$ ./emsdk install latest
$ ./emsdk activate latest
$ export PATH=~/tools/emsdk-portable/emscriptem/1.37.22/
```

この状態でjavaが必要らしいのでjdk8も取得する。

とりあえず過去につくったemscriptenをつかうライブラリをコンパイルしてみる。

## ttLibJsEmc_nextしとく

```
$ cd Document/node/
$ git clone git@github.com:taktod/ttLibJsEmc_next
$ cd ttLibJsEmc_next
$ ./native/makenative.sh
$ npm install
$ npm run build
```

ttLibJsEmc_nextに問題があって時間かかったけど、最終的にこれで完了するようになったのでよしとしよう。

## php56を入れておく

仕事の関係でphp5系のextensionも作っているのでそれ用の準備もしておきます。

```
$ brew update
$ brew upgrade
$ brew tap homebrew/homebrew-php
$ brew info php56
$ brew install php56
```

note: 昔のライブラリとしては、/usr/includeに入っていたみたいだけど、Sierraから/usr/includeというディレクトリが作成不能になったので、コンパイルコードがわを調整する必要がある。
(GDのincludeとか参照したいため、これが入ってる。)

## boost入れる

```
$ brew install boost
```

# 終わりに

リストアップしてみたところ
特にかわったものを準備している感じではないですね。
editorは基本 Visual Studio Codeでいじる。
コンパイル等は ターミナルで実施するので特に・・・