MacBook Pro (Retina, 13-inch, Late 2012)にEl Capitanをクリーンインストール

プライベートで使っているMacBook Proに、El Capitanをクリーンインストールしました。
Yosemiteの時から、OSのアップデートのタイミングでクリーンインストールするようにしています。
理由は、開発環境をリセットしたり、インストールするアプリケーションやパッケージを整理したいから。あと、Macを使ってるとストレージを圧迫する「その他」を一掃するため。

クリーンインストールの方法については、去年書いたMacBook Pro (Retina, 13-inch, Late 2012)にYosemiteをクリーンインストールと同じ方法で問題なく行えました。
いくつか聞いていた不具合にも遭遇することなく、スムーズにインストールが完了。

設定の変更と、インストールしたアプリケーションなどをメモ。

システム環境設定

一般

  • 「書類を閉じる時に変更内容を保持するかどうかを確認」にチェック
  • 「アプリケーションを終了するときにウィンドウを閉じる」にチェック
  • 「最近使った項目」を5に変更

Dock

  • 「ウィンドウタイトルバーのダブルクリックで」を「しまう」に
  • 「ウィンドウをアプリケーションアイコンにしまう」にチェック
  • 「Dockを自動的に隠す/表示」にチェック

セキュリティとプライバシー

ファイアウォール

キーボード

  • 「キーのリピート」をもっとも速く
  • 「リピート入力認識までの時間」をもっとも短くs

トラックパッド

  • 全ての項目にチェック
  • 「軌跡の速さ」をもっとも速く

アクセシビリティ

マウス/トラックパッド

トラックパッドオプション

  • 「ドラッグを有効にする」にチェックを入れ、「3本指のドラッグ」を選択

今までトラックパッドの設定でドラッグの方法を選択できていたのですが、El Capitanではアクセシビリティの方に移動しています。

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

Apple Store

Xcodeのインストール後は、ターミナルで以下のコマンドを入力してコマンドラインツールをインストール

$ xcode-select --install

インターネット経由

ChromeはHomebrew Caskでもインストールできるのですが、1Passwordのエクステンションをインストールすることができなかったのでホームページからダウンロードしたものをインストールしています。
Carthageは今まではhomebrewで管理していたのですが、OSのアップデートでSwiftのバージョンが2にあがり、ビルドできなくなってしまったのでここからパッケージをダウンロードしてインストールしています。
インストールしたパッケージを削除する時はMacでインストールしたパッケージを削除するを参考に。

Homebrew

  • git
  • nodebrew

nodebrewでnodeをインストールする際にFailed to create the fileのエラーが出たので、以下のコマンドでディレクトリを作成。

$ mkdir -p ~/.nodebrew/src

Homebrew Cask

以下のコマンドでCaskをインストール

$ brew install caskroom/cask/brew-cask
  • Dropbox
  • iTerm2
  • Atom
  • PSequel
  • AppCleaner
  • Flux
  • CheatSheet
  • Alfred
  • Colors

ひとまずはこんな感じで。
El Capitanになって、画面の切り替えなどがスムーズになったような気が。
ライブ変換は最初は戸惑うけど、変換精度もかなり高くて便利かも。
Split ViewはWindow Tidyを使うから、自分はあまり使わないような気が。左右だけじゃなくって、上下とかも対応していたらよかったのですが。

AWS上の Node.js アプリケーションに HTTPS でアクセス可能にする

9月からのプロジェクトでは AWS を使っています。
今までインフラを扱ったことがほとんどなくて、AWS も今回初めてアカウントを作って恐々触っているレベルですが、タイトルのことは割とすんなりと。
ただやっぱりある程度インフラのことは気にする必要があって、改めて Heroku はおかん。

EC2 インスタンスに Node.js と npm をインストールする

公式のガイドを参考にインスタンスを起動
User Guide for Linux Instances

ssh でアクセスし、まずビルドに必要なライブラリをインストール

$ sudo yum update

$ sudo yum install gcc-c++ make
$ sudo yum install openssl-devel

GitHub からバージョン指定で clone してインストール
yum を使うと v0.10 系となるため、この方法を取っています

$ sudo yum install git

$ git clone --depth=1 -b v0.12.7 git://github.com/nodejs/node.git

$ cd node
$ ./configure
$ make
$ sudo make install

Amazon Linux は root のパスが特殊らしいので、以下の変更を実施

$ sudo su
$ visudo
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

続いて npm をインストール
Node.js の v0.12.7 にバンドルされているバージョンの npm をインストールし、npm コマンドでアップデートを行いました

$ git clone --depth=1 -b v2.11.3 https://github.com/npm/npm.git
$ cd npm
$ sudo make install
$ sudo npm update -g npm

How to install node and mongodb on Amazon EC2
上記のページを参考にしています。
nodebrew とかを使わなかったのは root のパスの問題と EC2 ならバージョンを上げるのならまた一から作るんだよね、というようなことを考えつつ。
この辺りの考え方はどうなのでしょうか、教えてえらい人。

ELB の作成と SSL 証明書の設定

ELB の作成と証明書の設定は公式のドキュメントの通りに
Developer Guide

SSL 自己証明書の作成

ELB に設定する SSL 自己証明書は、オレオレ証明書をopensslで作る(詳細版)を参考に。

以下のコマンドで秘密鍵、証明書署名要求ファイル、証明書を作成

$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr
$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

ELB の SSL Termination は、秘密鍵に鍵がついているとダメなのようなので、以下のコマンドで解除

$ openssl rsa -in server.key > server-released.key

AWS で設定する際は、PEM 形式じゃないとだめ。
openssl はデフォルトで PEM 形式で出力されるようなので、cat で秘密鍵と証明書の中身を表示して貼り付け。


インフラ初心者でもいちおうなんとかなるっぽい。
ただセキュリティグループとかどう整理すればいいのかはまだわからない。。
この辺りは多分技術書を読んだ方が早そう。

Apple Watch対応のiPhoneアプリ「Glancely」のリリース

プライベートで開発していたApple Watch対応のiPhoneアプリ、「Glancely」がApp Storeに公開されました。

Open Weather MapAPIを利用した、今日の天気を素早く確認するためのアプリです。
Swiftでの開発、Carthageを用いた依存ライブラリの管理、Embedded Frameworkを使ったWatch Kit Extensionとのコードの共有など、いろいろ試してみたのでまたブログに書きたいと思います。

無料のアプリなので、気軽にダウンロードいただければと思います。

Swift強化月間

5月は仕事、プライベートともSwiftをがっつり書いた月でした。

Xcode 6からフレームワーク用のテンプレートが用意され、独自フレームワークの開発や公開が簡単になりました。
そこで、他のアプリケーションで使いそうな機能とかをいくつかフレームワークとしてまとめ、Carthageで管理できるように、Githubに公開しました。

AKIRA-MIYAKE/SwiftyEvents

Node.jsのEventEmitterのような使い方ができる、イベント通知のためのライブラリ。
GenericsクラスのサブクラスはGenericsでなければならないというSwiftyの制約のため、EventEmitterのサブクラスを定義する際はこういう方法を取る必要がありますが。。

AKIRA-MIYAKE/OpenWeatherMapper

今はプライベートで開発中のアプリで使う部分のみの実装。
パース処理は共通で大丈夫だから、もしかしたら今後拡張するかも。

AKIRA-MIYAKE/EasyBeacon

iBeaconのモニタリング、レンジングの処理を簡単にアプリに組み込むためのライブラリ。
リージョンの出入り、リージョンに入った際のもっとも近いビーコンの取得に機能を限定していますが、多くの場合それで十分なのではないかと。
あんまり細かい部分までいじれるようにすると、単なるラッパーになってしまうし。

Apple Watchのアプリ開発も行ったので、その時の気づきなどは後日まとめたいと思います。

MEAN を動かしてみる

MEAN は MongoDB、Express、AngularJS、Node.js で構成される Web アプリケーションを構築するための アーキテクチャであり、LAMP (LinuxApatchMySQLPHP) に変わる技術として注目されています。
全て JavaScript で記述でき、データを JSON でやり取りするので、シンプルにアプリケーションを構築することができます。

MEAN の環境を容易に構築するためのツールMEAN.IO から提供されています。
MEAN をインストールし動作の確認までを行っていきます。

MEAN のインストール

最初に、MEAN を動かすのに必要なものをインストールします。
Node.js、MongoDB、Git が必要で、さらに npm で Gulp と Bower がインストールされていなければなりません。
MongoDB 以外はすでにインストールされているので、MongoDB のインストールを行います。

MongoDB のインストール

MongoDBのドキュメントを参考にインストールを行います。

最初に Homebrew をアップデート。

$ brew update

続いて MongoDB をインストール。
SSL を利用するためのオプションをつけて実行しました。

$ brew install mongodb --with-openssl

インストールが完了したら最後に表示される指示通りにコマンドを実行。

$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

MongoDB にアクセスできるかを確認。

$ mongo
MongoDB shell version: 3.0.2
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings:
2015-04-15T19:05:12.483+0900 I CONTROL  [initandlisten]
2015-04-15T19:05:12.483+0900 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

問題なく動作しているようです。

mean-cli のインストール

mean-cli は Node.js の v0.10.x が必要ですとのことなので、nodebrew を使って v0.10.x の最新である v0.10.38 をインストールして切り替え。
そして、npm で mean-cli をインストール。

$ npm install -g mean-cli

完了後、バージョンを確認。

$ mean -v
0.9.29

コマンドでアプリケーションの作成

作業ディレクトリに移動後、以下のコマンドを実行。

$ mean init HelloMEAN

HelloMEANディレクトリに移動し、依存するモジュールをインストール。

$ npm install

完了後、gulp のデフォルトタスクを実行。

$ gulp

localhost の 3000 ポートでサーバ起動。
無事にアクセスすることができました。

$ node server  

server.js からサーバが起動することも確認。

nodebrew を使った node.js のバージョン管理

今まで homebrew で直接 node.js をインストールしていたのですが、nodebrew を使ってバージョン管理できるようにしました。

node.js のアンインストール

最初にすでにインストールされている node.js をアンインストールします。

npm をアンインストール。

$ rm -rf /usr/local/lib/node_modules
$ rm -rf /usr/local/bin/npm

homebrew を利用してインストールした node.js をアンインストール。

$ brew uninstall node

パッケージでインストールした際はここを参考に。

nodebrewのインストール

node.js のバージョン管理を可能にする nodebrew をインストールします。
hodebrew を利用してインストールすることができます。

$ brew install nodebrew

パスの設定

nodebrew へのパスを設定します。
以下を.bash_profileに記載。

export PATH=$HOME/.nodebrew/current/bin:$PATH

.bash_profileの変更を反映します。

$ source .bash_profile

node.jsのインストール

node.js の最新版をインストールします。 バイナリでインストール可能な最も新しいものを指定します。

$ nodebrew install-binary latest

完了後、ローカルにインストールされているバージョンの確認を行います。
v0.12.2 が最新のようです。

$ nodebrew list
v0.12.2

current:none

続いてインストールしたバージョンを利用するように設定します。

$ nodebrew use v0.12.2

別のバージョンで利用していた npm パッケージの移行

nodebrew でインストールした node.js のあるバージョンで利用していた npm パッケージを、他のバージョンに移行する際は、以下のコマンドを実行すればよいようです。

$ nodebrew migrate-package [version]