読者です 読者をやめる 読者になる 読者になる

ほろ酔い開発日誌

有意義な技術的Tipsを共有出来たら嬉しいです。Ruby、Railsが好きです。Web開発全般(Rails多め、フロント、サーバー、インフラ)、データ分析、機械学習あたりの記事が中心になる予定です。

RNNやWord2Vec関連のリンクの備忘録

RNN概要

LSTMについての説明が中心。 RNNのRがrecurrentの頭文字であることからも表されるように、RNNは同じネットワークを繰り返して前のネットワークで学習した結果の一部を後続のネットワークに渡すようなことをしています。それは前のネットワークの情報も現在のネットワークで使えるからいいよねって話なのですが、場合によっては直前の情報だけじゃなくて結構前のネットワークの情報も使いたいわけです。それをいい感じにやってくれるのがLSTMというわけです。以下の記事がこのあたりの説明をもっとちゃんと、詳しくしてくれてる記事です。 最近のアテンションというやつについても機会があればまとめたいところです。

Tensorflow tutorialにgreat articleとして紹介されてた記事。

Understanding LSTM Networks -- colah's blog

(日本語翻訳) qiita.com

かなり詳しくて分かりやすい qiita.com

Tensorflowのチュートリアル

Recurrent Neural Networks  |  TensorFlow

Sequence-to-Sequence Models  |  TensorFlow

Word2Vec

word2vecを使えば文章から単語のベクトル表現が出来て、単語の特徴が分かるよという認識です。 その中のアルゴリズムとしてcbowとskip-gramがあるよという感じです。 (word to vec ですもんね。文字をベクトルにってことですね)

word2vec、cbow、skip-gramが簡潔に説明されていてよい。 resola.ai

skip-gramについて詳しめに丁寧な説明。 qiita.com

【Swift3】ニュースアプリ風の横スクロールメニューバーライブラリ3つの検討

Swift

ニュースアプリのメニューバーを実装したくなったので、ライブラリを検討してみました。 イメージとしては以下のGunosyのメニューのようにスライドしてジャンルを切り替えるようなものです。

f:id:seishin55:20170131112756p:plain:w300

調べた結果良さそうだと感じたものは下記です。

  • PageMenu
  • PagingMenuController
  • TabPageViewController

PageMenu

github.com

READMEにあるデモを見るとわかるのですが、見た目がクールでなかなかよさそうだという印象を最初に持ちました。

ただし最終コミットが執筆時点で18 Aug 2016 でSwift3に対応されていません。

以下、上記のレポジトリをフォークしてSwift3に対応しています。 こちらを使えば大丈夫です。

github.com

これはこのQiitaの記事に載っていて、このサンプルアプリを作ってみましたがなかなかよい感じでした。(このデモだと初期のメニュー下のアンダーバーがおかしいので少し手は加えましたが。)

qiita.com

開発がアクティブでないので不安定感はありますが、動作自体はいい感じなので、細かいことを気にしなければこれで十分だと思いました。

PagingMenuController

github.com

This library is inspired by PageMenu とあるようにPageMenu にインスパイアされたらしい。メルカリの人が作っているみたいです。 今月中にもコミット&リリースがなされていて、活発に開発されているみたいです。比較的新しいライブラリでSwift3にも完全対応されています。

ひとつ残念だったのはメニューをスワイプさせるとページが変わってしまうということです。一気に一番右のスライドに移動が出来なかったです。

github.com

issueが立っているのでアップデートを期待です。 これがあればこれに即採用だったのですが、現段階ではPageMenuのほうを採用したいかなという感じです。

TabPageViewController

github.com

VASILYの方が作成したライブラリです。 ブログにも載っています。

tech.vasily.jp

以下を参考にサンプルを作ってみましたが、第一印象は「最高」って感じでした。

hchckeeer.hatenadiary.jp

しかし、一点重大な問題があって選択されているタブを画面外にはずして、他のタブをクリックするとフォーカスされたタブが2つになってしまうのです。

追記 2017.02.13

TabPageViewControllerで問題になっていた箇所を解消して頂きました! ver 0.2.3のアップデートからタブが二重にフォーカスされるバグが消えました。

なので、2017.02.13現在で最もおすすめなのは TabPageViewController ということになりました。

終わりに

以上から結局、PageMenuを採択しようと思います。

以下の記事を参考にして作業を進めたいと思います。

qiita.com

x1.inkenkun.com

PagingMenuController、TabPageViewControllerのアップデートがあればそちらのほうを使いたいところです。

群知能(Swarm Intelligence)の実装 (Java) - PSO・ABC-

Java Machine Learning

大学の課題で群知能(Swarm Intelligence)の実装が課題に出て、PSO(Particle Swarm Intelligence) と ABC(Artificial Bee Colony) のアルゴリズムを実装することになりました。

そこで、コードの紹介(github)と参考になったものを載せておきます。

群知能(ぐんちのう、むれちのう、Swarm Intelligence, SI)は、分権化し自己組織化されたシステムの集合的ふるまいの研究に基づいた人工知能技術である。( 群知能 -Wikipedia- )

群知能はたくさんのエージェントを用意してそれぞれが各々相互作用を起こしながら最適解を探し出す人工知能技術です。それぞれのエージェントを中央管理するわけではなく、それぞれが自発的に行動し、結果的に全体としての創発をもたらすところが特徴にあります。

群知能のアルゴリズムは自然界からヒントを得たものが多く、PSOは動物の群れをヒントにしたアルゴリズムですし、ABCは蜂の採餌行動をヒントにしたアルゴリズムになります。

アルゴリズム

まず実装したコードは以下です。PSOとABCの2つを実装してあります。

github.com

以下の関数の最小化問題を解けるようになっています。 (もちろん、自分で定義すれば他の関数でも可)

  • shpere関数 定義域 [-5.0, 5.0]
  • rastrigin関数 定義域 [-5.0, 5.0]
  • rosenbrock関数 定義域 [-5.0, 5.0]
  • griewank関数 定義域 [-600.0, 600.0]
  • alpine関数 定義域 [-10.0, 10.0]
  • 2n-minima関数 定義域 [-5.0, 5.0]

Javaの実装になっています。本当はPythonでやりたかったのですが(それがダメでもRubyがいい)、JavaC言語C++のどれかの制限があったので、Javaにしました。C言語はあまりちゃんとしたコードは書いてこなかったのでやめました。(勉強しておきます。)

PSO

粒子群最適化(りゅうしぐんさいてきか、Particle Swarm Optimization、PSO)とは、群知能の一種。 昆虫の大群や魚群において、一匹がよさそうな経路を発見すると(すなわち、食料を発見したとか安全であるという場合)、群れの残りはどこにいても素早くそれに倣うことができる。( 粒子群最適化 -Wikipedia- )

まず、アルゴリズムなのですがWikipediaで十分わかりました。

粒子群最適化 - Wikipedia

具体的なコードとしてPythonで実装してある下記もわかりやすく参考になりました。Wikipeiaのアルゴリズムを見たあとにこちらを見るとすっきりします。

qiita.com

下記はN-Queens問題をPSOで解いたコードです。アルゴリズム自体は上記の2つを参考にしたのですが、Javaの書き方として参考になりました。

github.com

ABC

In computer science and operations research, the artificial bee colony algorithm (ABC) is an optimization algorithm based on the intelligent foraging behaviour of honey bee swarm, proposed by Karaboga in 2005. ( Artificial bee colony algorithm -Wikipedia- )

↑ ABCアルゴリズムは蜂の採餌行為をもとにした最適化アルゴリズムです、ということですね。(英語版しかなかった)

アルゴリズムはまずWikipediaを参考にしました。

Artificial bee colony algorithm - Wikipedia

Wikipediaだけではちょっと分かりづらかったのですが下記の2つが分かりやすかったです。

Step by Step Procedure of ABC

研究/2012-03-09 - Kondo's Page

下記はN-Queens問題をABCで解いたコードです。Javaの書き方も参考になりましたし、アルゴリズムも分かりやすかったです。

github.com

終わりに

他の講義の課題でカッコウアルゴリズムやホタルアルゴリズムなども調べたのですが、たくさんのアルゴリズムがあるのですね。自然界から発想を得てアルゴリズムにおこすところはディープラーニングも同じで面白さを感じます。 アルゴリズムの発想が詰まったら生命に戻って考える必要があると教授がおっしゃっていたのを思い出しました。

MacでディープラーニングのためにGPUを使いたかった話

Mac Machine Learning

ディープラーニングをするときは処理速度を上げるためにGPUを使いたいです。GPUを使わないとなれば、大きなデータセットは扱いたくはないです。この前、CPUでやろうとして3日くらいかかった(途中で諦めた笑)やつもGPUだったらどれだけ楽になったことか。

ところで最近、新しいMacbook Pro(2016 late, 13 inch)を買いました。こいつにはGPUがあるとのことで使う気満々でした。

よし、使ってみよう

ひとまず、Tensorflowでやろうと思って調べたら以下のような感じで記事が出てきて、やっぱり出来るんだと嬉しくなりました。

qiita.com

qiita.com

さて、Tensorflowのドキュメントにもご丁寧にMacGPUのセットアップ方法が書いてあったので指示通りにやりました。ほんとにちゃんとやりました。

出来ない。なんかエラーが出てうまくいかないのです。

 CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 35
-> CUDA driver version is insufficient for CUDA runtime version
Result = FAIL

こんな感じのエラーが出てきます。何度もやり直してもうまくいかなかったです。

Macbook ProなのにGPUを利用出来ない??

それで、重要なことに気づいたのですが、そもそも勘違いもしていました。

Macbook Pro (2016 late, 13 inch) のGPUは NVIDIA製じゃない。
だからそもそもまだTensorflowにサポートされていない。

この記事を読んでわかりました。

stackoverflow.com

以前のMacbook ProのモデルのGPUNVIDIA製でした。しかし、現在はAMD製です。なので、Tensorflowにサポートされていないんです。issueはあるみたいなので頑張って欲しいです。

github.com

GPUの話

そもそもGPUディープラーニングで使うために最低限のことをざっくり書いておきます。(厳密じゃないかもです、ただ僕と同じ現象にぶつかった人が腑に落ちるように)

GPUは一般的には画像処理のための演算装置です。単純な計算にはめっぽう強いみたいです。CPUがボスキャラ1体、GPUが雑魚キャラ1000体みたいなものだと思ってます。GPUは単純なことならたくさんの処理を効率よく行ってくれます。

それで、画像処理だけじゃなくても使えるんじゃない?といった感じで他の分野にも使うことになりました。GPGPU(General-purpose GPU)ってやつです。

このGPGPUを使う環境を整えてくれているのがNVIDA社のCUDAという環境です。なのでNVIDA社のGPUを使うときはこの環境を使えるので幸せになれるというわけです。

さて、じゃあそれを使えばいいじゃないという話になるんですが、このCUDAというやつは標準化されてなくてNVIDA製のGPUじゃないとダメみたいなんです。

じゃあGPUが使える標準規格は何かというとOpenCLというやつになります。ただこいつはGPGPUに特化していないです。そういうわけで、ディープラーニングのライブラリ的にはサポートしづらいのではないでしょうか。

そうなると、なんでわざわざAMD製にしたんだという感じですが、既にNVIDIA製に向けて進んでいるみたいです。

www.universityherald.com

ホットな分野はGPGPUが求められますし、割りと大事だと思うんですよね。 次のモデルではNVIDIA製に戻るのではないでしょうか。

そうなると、今回のモデルでたまたまNVIDIA製じゃなかったということで少しだけ残念な気もします。

ただ、外付けのGPUの開発も進んでいるようで期待したいところですね。

www.gizmodo.jp

こちら参考にしました。

qiita.com

Kaggle 「Allstate Claims Severity」を終えての振り返りと整理

Machine Learning Kaggle

約1ヶ月程の期間ちょこちょこ時間を使って、データ分析・データモデリングのコンペのプラットフォームであるKaggleで Allstate Claims Severityというコンペに挑戦しました。

www.kaggle.com

このようなコンペははじめてで学びだらけでした。今回の復習をして今後に活かしていきたいと思うところです。

目次

  1. コンペ期間に行ったこと
  2. 他の方の手法をきいて
  3. 次回以降のアプローチ
  4. おわりに

1. コンペ期間に行ったこと

はじめに順位は、676位 / 3055位 (Public LeaderBoard: 上位22.1%程度) でした。はじめてなのでそんなものですね。(ニューラルネット使えばもっと点数上がったのに時間的にやめておいたのが悔やまれる。。PCスペック低かったし仕方ないと言い訳しときます笑)

データセット

このコンペでは保険会社のデータが使われていて、データとしてはtrain dataが20万弱、test dataが10万強のサンプル数で、カラムはカテゴリカラムが116、数値カラムが14で目的変数であるlossが1つあるといった感じのデータセットです。 手頃な感じでやりやすいもののようです。(普通はもっとデータ量が多くてラップトップPCではきついものが多いようです。。)

Forum

コンペを進めていく上で重要だったのは Forumという意見交換の場を利用していくことでした。初心者からするとものすごい貴重な情報がたくさん載っています。戦略を立てる上でForumに載っている手法を真似して試していきました。

さて、Forumを眺めて点数が取れている手法はXgboostというGradient Boostingのライブラリを用いた手法とNeural Networkの手法(Kerasを用いたもの)でした。 そこで、ひとまずXgboostingの手法を試してみることにしました。

XGBoost のスクリプト

最初に試したのは以下のスクリプトでした。

https://www.kaggle.com/iglovikov/allstate-claims-severity/xgb-1114/code

こちらはxgboostのスクリプトでこれだけである程度の点数がとれます。 xgboost自体も使うのがはじめてだったので参考になりました。

ポイントとしては

  • カテゴリ変数がファクトライズされている(A->0、B->1、、のように数値化)
  • 目的変数を調整している (logを使ってるところ)
  • パラメータが調整されている
  • 評価関数をMAEに変更している(今回の評価関数がMAE)

といったところだと思います。すっきりしたスクリプトでしたが参考になるところは多かったです。これが今回のベースになりました。

パラメータの調整

次にパラメータを調整しようと思いました。

  • グリッドサーチ
  • ランダムサーチ
  • 手動で狙いうち

sklearn とかにも用意されていたり、hyperoptなるものも人気らしいです。 しかし、今回は使わなかったです。なぜかというと時間がかかりすぎると思ったからです。先程のサンプルのコードを1回まわすのに100分強の時間がかかっていたので例えばグリッドサーチなどをやるにしてもある程度どれくらいの値がいいかの感覚もないのできついです。(まだ新しいPC届く前でスペックが低く、実行中は他の作業も出来ない) ただ少しはやってみようと数個値を変えてやってみたところ、max_depthというパラメータをちょっと大きくすると精度があがりました。他は逆に下がるばかりでだめだめでした。 max_depthは木を深くすれば精度が上がるのはまあ当たり前だなーって感じで、むしろ実行時間が長くなってしまって今思うと微妙でした。このあたり、精度と時間のトレードオフも学びです。また、あとから聞いたのですが、このスクリプトはパラメータはある程度調整は出来ていてこれ以上のパラメータ調整はそんなに意味をなさなかったらしいです。

データの処理・加工

順番が前後したのですが、ここでデータがどうなってるかを考えました。(本来なら一番最初にやらなきゃいけないですが) まず、今回のデータセットは欠損値がないというミラクルが起きていたようです。欠損値があれば、そのサンプルは消すが他のサンプルの平均で穴埋めするかとかしないといけなかったです。

あと、カテゴリ変数はファクトライズ(A->0, B->1、、)してあったのですが、XGBoostの場合はこれで問題ないようです。モデルによってはonehot-encodingとかしないといけないのでちょっと困惑ポイントでした。直感的には木で分岐していくのでonehot-encodingじゃなくてもよいようです。

データ分析については以下の投稿が参考になりました。

https://www.kaggle.com/achalshah/allstate-claims-severity/allstate-feature-analysis-python

次元削除・特徴量作成

これ以上同一モデルで点数を上げるには特徴量をいじるしかないということで取り組むことにしました。

PCA

まず、やったのはPCA (主成分分析)という次元削除の手法を試してみました。PCAはざっくりいうと出来るだけ情報量を失わないように特徴量を減らす手法です。

今回は数値のデータが14つあるので、14->7に次元を削除してみました。それで予測を行うと点数が下がってしまいました。ただ、これは当たり前でそもそも情報量を落としているので基本的には点数は下がります。特徴を適当にいじれば点数上がるような感じでやってみてもダメですね。次元削除と特徴量を作ることは別ですね。次元を下げると計算量が少なくなるので今後効果的に使えるといいなと思います。

相関

それで次にloss(目的変数)と相関の高い特徴量を生み出すことに挑戦しました。今回のコンペのデータはカラムの名前に意味がなく全く手がかりがないので相関で考えることにしました。数値データのうちランダムに組み合わせて(足し合わせたり、logをとったり)相関が既存のカラムより高くなったものを新たな特徴量として追加しました。(大体20個くらい新しい特徴量が出来ました) しかし、逆に点数が下がってしまい失敗でした。

カテゴリデータの組み合わせ

Forumで上がっているもので点数が上がっている特徴量作成のやり方として、カテゴリデータを使ったものがありました。 任意の2つのカテゴリデータから1つの新たな特徴量を作成します。 例えば一方がAでもう片方がBならABというカラムが出来上がります。 その後に、数字にするのですがA、B、...、Z、AA、AB、...、AZ、BB、のような順に数をつけます。例えば、A->0、B->1、AA->27のような数です。

カテゴリデータは116個あるので全部使うと数が多すぎるので35個の特徴量を使いました。Forumに載ってるものをそのまま使いましたが、おそらくXGBoostのfeature importanceの上位35個を使ったものと思われます。feature importanceは分岐の使われた回数を示すらしいです。xgboostのライブラリ中のメソッドから簡単に順位を出すことが出来ます。

これは点数アップにつながりました。

アンサンブル

違うモデルを組み合わせると点数が上がるということでやってみようと思いました。本当はNearal Networkを使いたいところだったのですがまわす時間がなくて諦め、他のモデルも試さずにコンペが終わりそうだったので、とりあえず、XGBoostのいくつか試したものを加重平均してみました。これだけでも点数が上がったのでアンサンブルすごいなーと思いました。

2. 他の方の手法をきいて

コンペが終わってから、同じコンペに挑戦していた研究室の先輩のお話を聞いてとても参考になったのでまとめます。(今回のコンペの上位4%以内の方)

XGBoostのチューニング

今回はForumのスクリプトがパラメータのチューニングを行っていたのでもともといい感じにチューニングしてありました。実際のところはどのようにやればいいのかききました。

大体の感覚として以下のような感じらしいです。

eta: 0.3~0.01 (0.3はチューニング用で、0.01でトレーニングをやる)
Max depth: 6~12
Subsample: 0.5~1.0
Colsample: 0.25~0.7,0.8
Round: 100000 (Early stopping を利用)

randomサーチかマニュアルでパラメータを探すようです。Kaggleの上位者程、勘でパラメータを調整するらしいです。 今回調整したのは上記のパラメータの範囲で適当に試して決めたとのことです。 学習率はパラメータ調整のときは高めに設定して学習して100epochくらいまわして比較したみたいです。 僕はパラメータ調整のときも時間をかけてしまっていたので参考になりました。

ちなみに、Nearal NetworkのほうはForumに出てるスクリプトのunit数、epoch数を増やしたものを使ったとのこと。

目的変数変換や目的関数の重要性

今回の目的変数のlossは歪度が正で、右に裾が広がる形をしていました。これにlogを取ると正規分布に近いかたちになります。このあたりの調整はForumでは先人がやってくれていたので、今回は大丈夫でKaggleでは基本的に誰かが見つけてくれるようなのですが、もしこれに気づかないと勝負にならないので注意が必要だということです。また、今回の評価関数のMAEは2回微分までを用意出来ない形なので近似した関数を目的関数におきました。これも適切に設定することが大事のようです。テーラー展開とかを使って近似させることもあるようです。

このあたりは、Kaggleでは誰かが先にやってしまうので単純にこれによって点数差がつくことはほとんどないらしいのですが、上位を狙うためにはForumで共有される前段階で気づいて他の施策を行わないと時間的に勝てないみたいです。

特徴量作成 (XGBoost)

特徴量の作成方法としては、上記のカテゴリの組み合わせと同様のことをやっていたみたいです。

feature importanceの上位50個くらいをとってやったみたいです。さらに2つの組み合わせだけではなく、3つ、4つまで行ったとのことです。

それでどのカテゴリを組み合わせればよいかは以下のxgbfiというものを利用するとよいみたいです。

github.com

また、数値カラムも適当な組み合わせで+-×÷の四則演算を試したようですが点数には寄与しなかったみたいです。

カテゴリと数値のカラムも両方をカテゴリデータとして扱うか、療法を数値データとして扱うことで特徴量を作ることも出来るとのことでした。

アンサンブル

今回は加重平均を使ってXGBoostとNeural Networkをアンサンブルさせたとのことですが、もっと点数をあげるにはスタッキングというやり方を行うとよかったとのことです。

加重平均したモデルとしては、Neural Network 1つとXGBoost3つでした。その3つは違う特徴量によって作られたものです。

スタッキングは複数の分類器でtrainデータを用いて予測を出し、その結果をまとめて新たな特徴量にし、それを新たなモデルにかける手法です。

ちょっと面倒ですが精度は出るみたいです。

他の分類器

色々な分類器を試した(もしくは試したかった)ようです。例えば、

  • SVR
  • KNN
  • Xtra Trees
  • Random Forest
  • Liner Regression
  • Regularized Regression
  • Light GBM
  • Vowpal Wabbit

その他諸々、聞きたいことをことごとく聞けたので良かったです笑 今回のわからない部分を聞けたの一般論的な部分もちょっとわかった気がします。 それと上位に食い込むにはどうすれば良いかのイメージが出来ました。

3. 次回以降のアプローチ

ここはすごくざっくり。

まず、データを分析する。特に

  • データの基本情報を見る。(データ数、特徴量、相関、分布、など)
  • 欠損値がないか

とか。

XGBoostとNeural Networkのアンサンブルをやってみる。この2つである程度の精度は基本的に出るらしい。 目的変数、目的関数、評価関数はちゃんと考える。 epoch数少なめにパラメータ調整。

特徴量を考える。feature importanceとかxgbfiとか。特徴量の意味がわかる場合はそこから考える。

過去に終わったコンペですが、下記のコンペを復習も兼ねてやります。

www.kaggle.com

ちなみに、今回僕がやったコンペも期間は終わりましたが、サブミットして点数も返ってくるので挑戦出来ます。

Neural Networkのスクリプトは3日かかったよ、とも聞いたので根気強く待つのも大切ですね。(今回僕は1日まわしても終わらなくて諦めました)

あと、Forumに上位者がどういうことをやったかを共有してくれているので見ようと思います。

#1st Place Solution - Allstate Claims Severity | Kaggle

#2nd Place Solution - Allstate Claims Severity | Kaggle

Faron's 3rd Place Solution - Allstate Claims Severity | Kaggle

GIBA - #7 Place Solution - Allstate Claims Severity | Kaggle

#8 solution - Allstate Claims Severity | Kaggle

12th place solution - Allstate Claims Severity | Kaggle

#16 place solution and some questions about it. - Allstate Claims Severity | Kaggle

コンペが終わっても学びが多いです。

4. 終わりに

細かいことの説明はしていませんが、大まかにやったことをログとして書きました。学びが多かったので次に活かしたいです。 Forumなどを読んで理解を深めたいと思います。

また、学習したことは共有したいと思っています。

XGBoostをPythonで動かす on Mac

Python Machine Learning

XGBoostは、Gradient Boostingのframeworkを提供してくれるライブラリです。Gradient Boostingは決定木のような弱学習機をアンサンブルする形態のモデルを生み出します。

高い精度が期待出来るためコンペでもよく登場するライブラリです。Deep Leaningより気軽に使えるところも嬉しいです。

Kaggleより: xgb 1114

今回はMacへのインストール方法をメモしておきます。

この内容はXGBoost Installation Guideに書いてあります。

Build

$ git clone --recursive https://github.com/dmlc/xgboost
$ cd xgboost; cp make/minimum.mk ./config.mk; make -j4

Package Installation

$ cd python-package; sudo python setup.py install

終わりに

ひとまずメモ程度にインストール方法を書いたので、今度もっと詳しいことを書くかもしれないです。

MacBookを購入後に最初に行う環境構築 (エンジニア向け)

Mac Environment

f:id:seishin55:20161210145007j:plain

新しくMacBookを購入しました。初期設定を色々としないといけなかったので備忘録も兼ねて設定手順を書きます。

こういう設定は正解もないですし、あまり教わる機会もないので参考になればと思います。

初心者エンジニアの方でこれを真似してご自身のスタイルを模索してはいかがでしょうか。先輩エンジニアの皆さんには是非おすすめ設定等ありましたら教えて頂きたいです。また、少しでも参考になる部分があれば幸いです。

環境

  • MacBook Pro late 2016
  • OS: Sierra 10.12.1
  • USキーボード
  • Vimつかい

大きく上記環境に依存することはないと思いますが、部分的に差異が出る可能性があります。

目次

  • システム環境設定
  • Finder設定
  • homebrewの準備
  • zshの設定
  • アプリケーションのインストール
  • vimの設定
  • iTerm2の設定
  • gitの設定
  • PHPの環境構築
  • Rubyの環境構築
  • Pythonの環境構築

システム環境設定

デスクトップとスクリーンセーバ

  • デスクトップ: 無地の色 → ソリッドアクア・ブルー
  • スクリーンセーバ: Arabesque
  • ホットコーナー (ウィンドウの右下辺りにある)
    • 左上、右上: Mission Control
    • 右下: Launchpad

Dock

  • サイズ: 「小」よりに調節
  • 画面上の位置: 左
  • 「Dockを自動的に隠す/表示」にチェックを入れる
  • 「起動済みのアプリケーションにインジゲータを表示」のチェックを外す

トラックパッド

  • 「ポイントとクリック」
    • 「調べる&データ検出」: チェックを外す
    • 軌跡の速さ: 「速い」側に完全によせる(最速)
  • 「その他のジェスチャ」
    • 全てのチェックを外す

アクセシビリティ

  • 「一般」タブ
    • 「マウスキー」のチェックを外す
  • 「マウスとトラックパッド」タブ
    • タブルクリック間隔: 「速い」側に完全によせる(最速)
    • トラックパッドオプション
      • スクロールの速さ:「速い」側に完全によせる(最速)
      • ドラッグを有効にする: 「ドラックロックあり」を選択

キーボード

  • 「キーボード」タブ
    • キーのリピート: 「速い」側に完全によせる(最速)
    • リピート入力認識までの時間: 「短い」側に完全によせる(最短)
    • 修飾キー(ウィンドウ右下): 「Caps Lock」→「Control」
  • 「ショートカット」タブ
    • 「Spotlight」→「Spotlight検索を表示」: 「Option + Space」に変更
  • 「入力ソース」タブ
    • defaultのものは使わずに「Google 日本語入力」を使用(以下の手順でセッティング)
    • Google 日本語入力からインストール
    • インストール出来たら「英数(Google)」と「ひらがな(Google)」の2つだけにする
    • 一旦、再起動すると反映される

省エネルギー

  • 「バッテリー」タブ
    • 「ディスプレイをオフにするまでの時間」: 1時間
    • 「バッテリー電源使用時はディスプレイを少し暗くする」チェックを外す
  • 「電源アダプタ」タブ
    • 「ディスプレイをオフにするまでの時間」: 1時間

サウンド

  • 「サウンドエフェクト」タブ
    • 主音量: 消音
    • メニューバーに音量を表示: チェックを入れる

Finder設定

環境設定

( 左上タブ 「Finder」→ 「環境設定」)

  • 「一般」タブ
    • 「デスクトップに表示する項目」: すべてのチェックを外す
    • 「新規FInderウィンドウで次を表示」: 「ホームディレクトリ」(家アイコン)
  • 「サイドバー」タブ
    • ホームディレクトリ(家のアイコンとユーザー名)のチェックを入れる
    • 「ハードディスク」にチェックを入れる
  • 「詳細」タブ
    • 「すべてのファイル名拡張子を表示」にチェックを入れる

隠しフォルダを表示

ついてでにLibraryの表示も。以下のコマンドをターミナルに打ち込む

$ defaults write com.apple.finder AppleShowAllFiles -bool YES
$ chflags nohidden ~/Library/
$ killall Finder

homebrewの準備

Command Line Toolsのインストール

$ xcode-select --install

homebrewのインストール

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

バージョンを確認出来たらインストール完了。

$ brew -v

zshの設定

defaultシェルの変更

$ chsh -s /bin/zsh

ターミナルを立ち上げ直すとzshに変わる

補足

defaultシェルはbash

$ echo $SHELL
/bin/bash

上記のシェルの変更を行うとzshになったことが確かめられる

% echo $SHELL
/bin/zsh

zshrcの設定

.zshrc_kuboshizuma.zshrcとしてホームディレクトリに置く。

.zshrc_mac_kuboshizuma.zshrc_macとしてホームディレクトリに置く。

$ source ~/.zshrc

として設定を読み込む。

アプリケーションのインストール

homebrew-bundleを用いて初期に必要なアプリケーションを一括でインストール。

以下のコマンドでインストールが始まる。

$ brew tap Homebrew/bundle

ホームディレクトリにBrewfileというファイル名で以下のファイルを作成する。 (emacs使いの皆さんはvimのような感じでemacsも追加してみてください)

cask_args appdir: '/Applications'
tap 'caskroom/cask'

brew 'tmux'
brew 'wget'
brew 'mysql'
brew 'node'
brew 'vim'
brew 'git'

cask 'google-chrome'
cask 'firefox'
cask 'java'
cask 'iterm2'
cask 'dropbox'
$ brew bundle

vimの設定

vimrcの準備

vimrc_kuboshizumavimrcとしてホームディレクトリに置く。

プラグイン管理

$ mkdir -p ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

vim を開いて

:NeoBundleInstall

補足

プラグイン自体の説明はあまりここではしませんが、vimを開いて「ctr + o」とか「ctr + e」とかしてファイルを変えるのはよくやるのでコメントしておきます。 あと以下のようにすればes6シンタックスにも対応出来ます。

:set filetype=javascript

ついでに、プラグインではなく.vimrcの設定ですが、「; + v」、「; + s」で画面分割も出来るので便利だと思います。

vimの設定に関しては慣れた人は自身の好きな設定があると思いますのでそれを適用させてください。これから使い始めるかたはここで紹介したものをベースにいらないものは捨て、よさそうなものを試して追加していくことをおすすめします。

iTem2の設定

「iTerm2」 →「Preferences」から設定ウィンドウを開く。

  • 「Profiles」タブ
    • 「Window」タブ
      • Transparency: ちょっと「transparent」側にする
      • 「Settings for new window」: columns 90, Rows: 30
    • 「Terminal」タブ
      • Scrollback Buffer
        • Scrollback Lines: 10,000
      • Notifications
        • Silent bell: チェックを入れる

僕はターミナルの代わりに「iTerm2」を使っています。

gitの設定

gitの諸設定

.gitconfig_kuboshizuma.gitconfigとしてホームディレクトリに置く。

ファイル内の[user][core]user_nameuser_emailはご自身のものを入れてください。

githubとの連携

以前書きました以下記事を参照ください。

gitHubでssh接続する手順~公開鍵・秘密鍵の生成から~

PHPの環境構築

MAMPのインストール

MAMPを利用。(「Macintosh」、「Apache」、「MySQL」、「PHP」の頭文字。)

MAMPのサイトよりダウンロード。 インストールまで完了したら「MAMP」を起動して「サーバを起動」をクリックする。(PCを再起動するときは再度「サーバを起動」することになります)

MySQLは基本MAMPMySQLを今後使っていく。 .zshrc_macでaliasをはっているので以下のようにMySQLを使える。 (初期はユーザー名 root、パスワード root)

$ mysql -uroot -p
root

ポートの変更

これでlocalhostにアクセスすれば/Applications/MAMP/htdocsのファイルにアクセス出来るようになる。

Rubyの環境構築

rbenvとruby-build のインストール

brew install rbenv ruby-build

rbenvとreadlineのパスを通す

$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ brew link readline --force

readlineを利用してRubyをインストール

$ RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)"
$ rbenv install 2.3.1

補足

$ rbenv install --list

でインストール出来るRubyのバージョンを表示させることが出来ます。

Rubyのバージョン選択

$ rbenv rehash
$ rbenv global 2.3.1
$ ruby -v
2.3.1

必要なバージョンを適宜追加する。

Railsのインストール

ついでにRailsもインストールしておく。

$ gem install bundler
$ gem install rails
$ rbenv rehash
$ rails -v

Pythonの環境構築

以前書きました以下記事を参照ください。

Pythonの環境構築 on Mac ( pyenv, virtualenv, anaconda, ipython notebook )

その他 (必要に応じて)

ここまでで一通り出来ましたが、補足的なものを書きます。

Chromeの設定

などなど設定してみるとよいと思います。

おすすめのアプリケーション

終わりに

これだけの設定ができればとりあえず作業出来るのではないでしょうか。

僕個人の環境構築ですが、皆さんのお役に立てれば幸いです。