Wakotech Blog

ポエム

Macの再セットアップの際に行ったツール導入や環境構築【Ruby系エンジニア向け?】

Macbookを新しく購入し、クリーンな状態から再びいろいろ導入したので記録しておきます。
新規購入でなくてもOSアップデートの際にクリーンインストールすることもあるかと思うので何かの役に立てば。
GUI環境はオレオレ感強いですが他は一応最低限って感じだと思います。

作業環境(あると便利)

(これらのツールの一部は前回説明したhomebrew-caskでもインストールできます)

Alfred

Spotlightの代替として。いろいろできます。

Dropbox, Evernote, OneDrive, Pocket, ...

有名な便利サービス。開発以外にも。

YoruFukurou

Mac向けの使いやすいTwitterクライアント。情報収集のお供に。

Google Chrome

必須級。インスペクタが便利。

Better Touch Tool

必須級。画面分割をアシストします。キーボードに操作を割り当てることも。

SublimeText3

強力なエディタ。EmmetやRuby/Erb系のプラグインを入れると劇的に使いやすくなります。基本無料。

QuickRes

有料。Mac規定以外の解像度を変更できるツール。HiDPIでRetinaでの確認にも。MBPR13ではDot by Dotで2560*1600解像度で作業できます(目が痛い)

iTerm2

使いやすいターミナル

開発環境

homebrew

ほぼ必須のパッケージ管理システム。MacPortは廃れたらしい。
以下の1行で導入。

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

以下はbrewで導入するパッケージ群。だいたいbrewで済みます。
Macに元から入っているものでも最新バージョンを保つ為、また管理しやすくするためにbrewで再度導入します。

homebrew-cask

brewど同じパッケージ管理システムでGUIアプリケーションも管理しようというもの。google-chromevagrantvirtualbox等がコマンドラインから導入できるため、コード化して残す/コードからまとめて導入することが容易になる。前回の通り私は結局使うのをやめました。

openssl readline

ssl通信やirbを使える必要があるので。

rbenv ruby-build

rubyの管理システムです。複数バージョンを管理できます。
rbenv install #{version}でバージョンを指定しrubyをインストールされ、rbenv global #{version}で指定したバージョンを適用します。
同様の手順でpythonをpyenvで、perlをplenvで導入できます。node.jsについてはnodeenvより後述のnodebrewが推奨らしい。

git

バージョン管理ツール

mysql

データベース。

imagemagick

rubyで画像処理などを扱う際に必要。gemのrmagickやcarrierwaveと合わせて簡単に画像アップロードを。

ngrok

localhostで建っているサーバに対して外部から繋がるurlを発行してくれる。モバイル等でのテストに便利。rails以外でも有用。

fish

勧められて入れたシェル。もともとカスタマイズされていて補完が使いやすいのでbashrc/zshrcをあまりカスタマイズしてない人にはおすすめ。かわいいです。

nodebrew

nodeの管理システム。nodeとnpmを入れます。詳しくは以前の記事を参照。
nodebrew install stableで安定版がインストールされ、node brew use stableで適用します。パッケージ管理システムのnpmも同時にインストールされます。
npmではcoffee-scriptなどを入れました。用途に応じて。


ざっと書きましたがrubyおよびruby on railsの開発にはだいたいこれくらいで大丈夫なのではないかと。
昨日リリースしたわこつアドベントカレンダー(http://yutaszk.gehirn.ne.jp)はこの環境で問題なく開発できました。どうにかクリスマス前までにリリースしようと23日に思い立ってぱぱっと作った物なのでもう少し作ります。
近いうちに最低限まともなrailsアプリを作るのに使ったgemや実装について(オレオレにならないように)少し書いて今年を締めくくりたいと思います。

homebrew-caskを使おうとしてやめたお話

homebrew-caskとは

Macユーザの皆さんはhomebrewでパッケージ管理をしている方も多いかと思います。
しかしよく使われるDropboxChromebrewでは提供されておらず、従来では.dmgファイルをWeb上からダウンロードしてきて展開しインストールするという手順をとっていました。
そのようなアプリケーションのインストールを開発環境導入と同様にコード化し、簡単にコマンドで再現できるようになるのが、homebrew-caskです。(boxenにも見られた動きですね。)

導入

homebrew(Homebrew — OS X用パッケージマネージャー)は入っているものとします。

$ brew tap phinze/homebrew-cask
$ brew install brew-cask
使い方

Chromeを導入する際にはこのようになります。

$ brew cask install google-chrome

これでchromeが/opt/homebrew-cask/Caskroom/google-chrome/latest/にダウンロードされ、~/Applicationsにシンボリックリンクが生成されます。

caskと併せてAlfredを使用する際の問題点と解決策

Alfredはシンボリックリンクを読みにいってくれないため、上記の/opt/homebrew-cask/Caskroom/をにある本体を見に行くように設定に追記するか、Alfred自体をcaskで導入している場合は以下のコマンドで設定を変更できます。

$ brew cask alfred link

なぜか私の手元ではほぼクリーンなMacにもかかわらず実行できなかったため、この時点でほぼ諦めてしましました。

不満点

linkがなぜかできない

上記の通り。設定ファイルも存在しているのにalfred linkが行えませんでした。うーん

Caskで導入できるSublimeTextのバージョンが2

3を使用しているため、最新バージョンが使えないのではあまり……という感じがしました。

AppStoreにあるものはそちらで管理したい

Alfredをはじめとして、AppStoreからインストールしたものはそちらの方が更新が通知されるので便利そうであるため。
特にこの理由からAlfredをAppStoreからインストールした場合Caskroom以下へのリンクは手動になりますし、中途半端にばらけるくらいならdmgでインストールしても同じかなあ、と。

結論

私はこのような理由からcask導入を断念しましたが、開発環境構築をコード化する必要度が高い場合はcaskを導入するべきかと思います。
特にvagrant等のように開発環境構築に必須級かつ、コマンドからのみしか呼ばないものならばあまり弊害がなく導入できるのではないでしょうか。(とはいえ、vagrantを使うのであればvagrant内の環境構築コードにいろいろ書けばいいため、結局vagrantだけ手動で入れればいい気も。)
結局boxenも管理コストに見合わないという形で流行が過ぎ去ったため、個人で使う分にはdmgからインストールしても管理できるので、caskを使うほどでもないかなあと感じました。
caskの今後によっては使うことになるかもしれませんが、まずはSublimeTextが3にならないと、パッケージ管理している意味があまり……という感じでした。

手元のガジェット類を手放します。買い手求む。

金策のライフハック(?)として、手元で使っていないガジェット類を手放したいと思います。

複数人希望者がいる場合は手渡しできる方(主に大学関係者の方)を優先とさせて頂きたいと思います。また手渡し可能な方は現物を見せての確認も可能です。なお郵送の場合は送料はご負担頂きます。
対象は大学、仕事での知り合いもしくは各種SNSでのフォロー関係にある方のみとさせて頂きます。(横から失礼しないでください。)
中古相場を踏まえての価格提示となりますが、場合によっては価格交渉応相談です。タイミングの都合で売約済、取り置き、確認次第で購入、という方が出てきてしまった場合には申し訳ないのですが順を追ってとなります。ご了承ください。
我が家で眠っているガジェットと私のさらなるガジェット活動のためにもぜひともお願いします。

Macbook Air 13inch mid '13(MD231J/A) \80,000

最小構成(ストレージ128GB/core i5/メモリ4GB)をメモリ8GBにカスタマイズしたモデル
=> ストレージ128GB/core i5/メモリ8GB

状態: 目立つ傷無し。良品。OS X 10.9 Mavericks
購入日: 2013年6月末日

ケースもしくはバッグのPC収納スペースに入れて持ち運んでいたため良品とします。なお背面に頂きもののシールを貼っていたため、はがし跡が多少残る場合がございます。
メモリ8GBということですので、そのような用途で使われる方に特におすすめとなります。通常のプログラミング用途では特に困ることはありません。現在でも満足に正常動作しています。
現行のEarly'14モデルとはCPUがHaswell Refleshに変わったことと、値下げのみとなりほとんど変わりはありません。こちらの記事の通り、性能面も微々たる変化ですので、おおよそのスペックとしては現行モデルとほぼ変わらないとみて頂ければ。
参考: MBA13(early'14)メモリ8GB構成新品価格 => \108,600円(税抜)

Lenovo Miix2 8 32GBモデル(59404411) \15,000

状態: 画面保護フィルム無しで使用、目立つ傷無し。角に一か所削りキズあり。office無し。
購入日: 2014年2月後半

Windows8.1搭載タブレットで正常動作します。艦隊コレクションをはじめFlashが公式にサポートされており動作するタブレットになります。PDFリーダーとしても是非。
購入日は2月ですが、5月以降持ち運び度合・使用頻度ともに大きく減っています。ここ数か月は使用していません。キズの度合いについて確認希望の方はご連絡ください。可能な場合は直接現物で確認できます。

Y!mobile Nexus5 (SIMフリー) レッド 16GB 白ロム \25,000

状態: 普通(画面: 美, 背面: 傷アリ) Android5.0 Lollipop更新済
購入日: 2014年3月中旬

一括購入済白ロムです。ついこの間まで画面フィルムを付けて使用していましたが、ボロボロになったためはがしました。その後はほとんど持ち歩いていないため画面状態は美としています。
ケースを付けていなかったため、背面は使用感のある傷がついていますが、落下等はないため通常の使用傷程度です。

Softbank AQUOSPHONE Xx mini 303SH レッド 白ロム \11,000 (確認待)

状態: 普通(画面: 美, 背面: 傷アリ)
購入日: 2014年6月

一括購入済白ロムです。ケース無し保護フィルム無しで使用していましたが、使用期間が短いため美品です。背面が傷つきやすいそざいのため、使用感のある傷が見られます。
IGZOディスプレイ、防水の小型端末です。


欲しい、現物か写真で確認したい、値段交渉したい、という方がいましたら、プライベートな手段(LINEやメール、SNSのDM/メッセージ等)でご連絡ください。お待ちしております。

node.jsをインストールし直す際に苦戦した結果nodebrewを使いました

はるか昔にMac OS Xインストーラから直接インストールしていたNode.js。
バージョン管理が面倒だったり、npmをどうインストールしたかも覚えてないせいでsudoが必要だったり、一部パッケージがうまく動いてくれなかったり、問題ばかり発生していたのでnodeごとインストールし直したのでメモしておきます。
結論からいうとbrewでインストールするのが大変だったのと、バージョン管理出来た方が後々楽そうなのでnodebrewをインストールしました。

まずnodeをアンインストールします。
こちらのStack Overflowを参考にコマンドで削除します。

lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom \
| while read i; do
  sudo rm /usr/local/${i}
done
sudo rm -rf /usr/local/lib/node \
     /usr/local/lib/node_modules \
     /var/db/receipts/org.nodejs.*

これでnodeが消えました。
次に、nodebrewを導入します。nodebrewについては公式のgithubの通りに。
hokaccha/nodebrew · GitHub

curlperlも入っているので一行でインストール。PATHも追記しておきましょう。

curl -L git.io/nodebrew | perl - setup
export PATH=$HOME/.nodebrew/current/bin:$PATH

nodeをインストールします。バージョン指定以外にもstableで安定版、latestで最新版を指定できます。今回は安定版(v0.10.33)にしました。
$ nodebrew use (バージョン) で使用バージョンを指定できますが、エイリアスを設定できるので、安定版であるv0.10.33に対してstableとつけておきます。

nodebrew install stable
nodebrew alias stable v0.10.33
nodebrew use stable

パッケージ管理を行うnpmも入っているかと思います。
ためしにいくつかパッケージを入れてみると、パッケージの方にも上記のpathで通っているかと思います。
npmについてはここでは説明しませんが、$ npm install -g (パッケージ名) でインストールすることができます。-gはglobalで、有効にしているnode全体で使えるようになります。-gを指定しないと、現在のディレクトリ以下にインストールされます。
(ここで勘違いをして詰まっていたのですが、expressのインストールはexpress-generator、coffeeのインストールはcoffee-scriptなんですね。ここが原因でpathが通っていないと勘違いしていました……。)

とりあえずyeomanでangularのひな形を作って動かしてみます。

npm install -g yo grunt-cli bower generator-angular
yo angular
grunt server

以前のnpmでうまく動かなかった部分が動きました!というわけで勘違いさえしなければnodebrewですぐ環境が整いました。



……ついでにbrewでインストールしようとした際に失敗したことも書いておきます。
$ brew install node を叩くとビルドで失敗しました。ビルド中にnodeコマンドでcli.jsを実行しているようなのですが、nodeがないので実行できず、エラー……と。
nodeがないと言われても今から入れるんだから当たり前でしょと思い、それ以上の原因も調べてもあまりでてこず(npm導入にnodeのpathが貼られてない問題ばかり)、nodebrewに行き着きました。

8月の終わり(近況報告)

毎日書くとはなんだったのかという感じですが、色々あったのであっという間に8月が終わってしまいました。
とりあえず技術的なことと、そのほかにしたことをまとめておく感じです。

まず今月は一旦rubyから離れてjavascriptを主に触っていました。先月はrailsから離れてrubyをしっかり触ろうという感じだったのですが、やりたいことは一通り終わったので。調べたり本を読んだりで新しいものを実際に書くところまではあまりできませんでしたが、coffeescriptをはじめ、書けそうなときはcoffeeで書くようにはしました。
それと、インターンシップでスタッフとして参加してきました。そちらはハイブリッドアプリの開発だったので、主にMonacaとNifty Cloud Mobile Backendを利用したhtml+jsでの開発のお手伝いという形でした。
OnsenUIというモバイルアプリ向けフレームワークを利用していて、当時は大変でしたが、慣れてきたので今後使っていきたいと思います。angularjsとの親和性も高いようなので。

開発以外では、サークルの旅行で海に行ったり、実家に帰ったり、本をとてもたくさん読んだり、色々な人と飲んだり。山の上にある大学から花火が綺麗に見えるということで、4年目にしてはじめて大学から調布の花火大会を見たりもしました。去年は開発をずっと勉強していて充実していたのですが、今年はやり残すことが無いように自由に過ごせている方かとは思います。

今後としてはcoffeescriptが好きになってきたので、それを踏まえてnode.jsやangularjs、yeomanやbower等でのweb開発をやっていくとともに、ruby on railsでのAPI開発で実際にモバイル向けアプリを開発していこうと思います。
インターン中のお話にもあった某サービスのAPIを使ったマッシュアップの開発も余裕があればしたいと思います、が、まずはTwitter関連で作りたいものがあるのでそれを……という感じです。

夏休み、まだ半分近く残っているので、色々楽しんでいきたいと思います。厳しい暑さもどうにかなってきて、夏が苦手な僕にも多少過ごしやすい気候になってきたので、自由に充実した時間を過ごそうと思います。

TwitterでリプライやRTが来たときにYOで通知してくれるのを実装しました

毎日何かしらはやってはいるんですが、記事にできるような区切りがつかないのでなかなか難しいものでした。
今回は、Twitterの通知を独自実装するのに際して、とりあえずYOで通知してくれるようにと思い実装しました。
YOはフレンドとして登録した特定の相手にYOとだけ送る事ができるハイコンテクスト(?)なサービスです。yoserverisdownなどのサービスもあり当初は盛り上がっていたのですが、最近では下火、ですが、APIを公開しているため、使ってみる事にしました。

http://dev.justyo.co/でログインし、YOを送る側のアカウント(アプリケーション)を登録し、APIキーを取得します。
あとはでapi_tokenとusernameを指定してPOSTするだけです。

require 'net/http'
require 'uri'

uri = URI.parse('http://api.justyo.co/yo/')
params = {api_token: API_TOKEN, username: USERNAME}
Net::HTTP.post_form(uri, params)

という形でYOすることができたので、TwitterのStreamingAPIと組み合わせて、YO通知を実装します。
@clientはhttp://yutaszk23.hatenadiary.jp/entry/2014/06/05/142337の通りに宣言されたStreamingAPI用のClientとします。

require 'twitter'
require 'net/http'
require 'uri'
require 'yaml'

def justyo
  uri = URI.parse('http://api.justyo.co/yo/')
  puts Net::HTTP.post_form(uri, {api_token: @YO_TOKEN, username: @YO_USERNAME})
end

def stream
  @client.user do |status|
    if status.is_a?(Twitter::Tweet)
      # reply判定
      if status.in_reply_to_screen_name == @user_screen_name
        justyo
      end

      # RT判定
      if status.retweeted_status.user.screen_name == @user_screen_name
        justyo
      end
    end

    # favorite判定
    if status.is_a?(Twitter::Streaming::Event) && status.name == :favorite
      justyo
    end
  end
end

@YO_TOKEN = YOUR_API_TOKEN
@YO_USERNAME = YOUR_YO_NAME

stream

これでこのプログラムが動いている間は(手元のPC上でOK)通知がYOで来るので、是非試してみてください。永続化したければPCを付けっぱなしにするかサーバで動かすか、で。
これで通知のないTwitterクライアントでも大まかな通知を受け取る事が出来るようになりました(公式併用すればいいのですが)。
これからはPush通知で詳細な内容を通知されるようにしたいのですが、ネイティブ側をいじらなければならないので厳しそうです……まずはAndroidからがんばってみます。

夏休みが開始したので毎日記事を書くことを心がけます

8月になりました。私は夏休みです。
毎日記事を書けるように新しいことに取り組んでいきたいです。

途中まで書いてまだ終わっていないこと
Windowsへの環境構築、カスタマイズ(minttyがうまくいかなくて中断)
rubyでのTwitterリマインダーbot開発(進めていますが寄り道してrubyで遊んでばかり)
・冷蔵庫管理アプリ(ハイブリッドアプリでのjsをしっかり理解したらがんばります。あとネイティブpush通知部分)
ruby単体でActiveRecord+Migrationを使用してのDB管理(作りながらbotに応用して使ってます)

やりたいこと
・wakolab.jpのデザインリニューアル、モバイル対応。全体的なjsの修正
Twitterのツイートを簡易解析してライフログ
・↑を応用して睡眠時間ベースや予定ベース、もしくはbotへの起床時間コマンドによる時間自動設定の目覚ましアプリの開発
Scala本(去年買った)
Android本(去年(ry
・生活に関連するものをまとめてPush通知実装

軽い目標としてはこんな感じです。夏の帰省ではテキストを持ち帰らなくても実家でコードが書けそうなので捗りそうです。おそらく気温も低くて過ごしやすいので。



それと、今日は卒業演習の中間発表を見てきました
前期は特に研究が多かったようで、作るものがはっきり決まっている人も多く、興味深いものもたくさんあったので、最終が非常に楽しみです。
デザイン系の人のスライドを見る機会もあまりなかったので、フォントやらレイアウトやら色使いやらとても参考になりました。きれいなスライドっていいですね。
自分がものをある程度作れるようになるにつれて、どのように作られるのかを考えると以前より楽しめるようになってきたと感じます。こういう部分でもプログラミングを勉強してきてよかったなと思います。
僕は卒業論文も制作もないので、自由に好きなことを研究できる身なので、自由にrubyやらtwitterやらで遊んでいますが、卒業までにはruby+twitter+スマホで生活を便利にできるようにしたいなと思ってます。
とりあえず次はruby関連で書くと思います。