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

ターミナルの操作を快適にする2つのツール

zsh fish

ターミナルの操作で普段からよく使っている2つのツールを紹介します。

環境

1. peco

github.com

Simplistic interactive filtering tool ということでフィルタリングツールです。 主にコマンドの履歴を探すのに使っています。 インクリメンタルサーチができるので目的のコマンドを大変見つけやすいです。 peco コマンドはパイプで渡すと渡されたものを検索できるようになります

例)

$ ps aux | peco

インストール

Homebrew で簡単にインストールできます。 go で書かれているのであわせてインストールされます。

$ brew install peco

これで peco のコマンドは使えるようになりました。 しかし、コマンドの履歴でシームレスに使えるようにするために、シェルの設定を追加します。

zsh の場合

function peco-select-history() {
   local tac
   if which tac > /dev/null; then
       tac="tac"
   else
       tac="tail -r"
   fi
   BUFFER=$(\history -n 1 | \
       eval $tac | \
       peco --query "$LBUFFER")
   CURSOR=$#BUFFER
   zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

fish の場合

oh-my-fish, fisherman 等で plugin を入れておくと楽です。

# oh-my-fish
$ omf install peco
# fisherman
$ fisher oh-my-fish/plugin-peco

以下をシェルの設定に書きます。

function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
end

使用方法

ctrl + r でコマンド履歴を検索できます。

2. z

github.com

ディレクトリを簡単に移動できるツールで、他には autojump などがあります。 以前は autojump を使っていましたが、z に移行しました。

インストール

$ brew install z

シェルの設定を追加します。

zsh の場合

. /usr/local/etc/profile.d/z.sh

fish の場合

oh-my-fish, fisherman 等で plugin を入れておくと楽です。

# oh-my-fish
$ omf install z
# fisherman
$ fisher z

使用方法

$ z hoge
$ zo hoge

zhoge というワードで一番マッチしたディレクトリに移動します。 zohoge というワードで一番マッチしたディレクトリを finder 等で開きます。

autojump は標準ではコマンドが j なので、 j に慣れている場合は割り当てちゃいましょう。

El Capitan で Ruby, gem のインストールではまったこと

Mac Ruby gem

Ruby や gem はしばらくインストールをしていなかったが、 El Capitan にアップデート後に一度 rbenv でインストールした Ruby を削除したので、再インストールした。また、gem もインストールしたが、いろいろとエラーが出て悩んでいた…。いろいろ調べて解決したがそれをまとめておく。

rbenv で Ruby がインストールできない

以前は以下のコマンドでインストールしていた

$ RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 2.2.3

しかし、これでビルドが止まってしまう。

checking whether CFLAGS is valid... no

以下を足すことでで解決

CC=/usr/bin/gcc

pg がインストールできない

gem の pg もインストールができなくなった。

Can't find the PostgreSQL client library (libpq)

以下を足すことで解決

ARCHFLAGS="-arch x86_64"

bundle install する際も頭につけておく

$ ARCHFLAGS="-arch x86_64" bundle install

gcc とかいろいろアップデートして環境が変わったからかもしれない。

Rails Girls Tokyo 5th でコーチしてきました

Rails

エンジニア人生がだいぶ変わった Ruby/Rails について少しでも貢献できればとコーチで参加してきました。

プログラミング初心者がほとんどだったのでできるだけ難しい言葉は使わず Ruby, Rails, Web について説明しました。 heroku へのデプロイまで何とかうまく行ったので満足されていたと思います。

Rails は半年くらい触ってなかったのでキャッチアップしたり、 Windows マシン担当になったので Windows で セットアップしてみたり、会社の人に練習台になってもらったりと準備は万端でした(笑

次回も機会があれば…。

そういえば、転職して2年が経った

1年間とおしてどうだったのだろう…。

ざっと

一応、プロダクトの責任者の1人になっていた。コーディングだけでなく、プロダクトの成長・方向性を考える1人になっていた。また、メンバーをまとめたり、教育したりといろいろ経験出来た。失敗も多かったけど得られたモノのほうが大きかったと思う。ビジネス側と開発側の折衝って難しいなあと改めて感じられた。

エンジニアとしてやってきたことを振り返る

  • ScalaHadoop の job を書いた。Scalding を使って。
  • ApacheMySQL 等ミドル系に触れることが多かったのでいろいろ身についた。
  • SVN -> github にソースを移したり、ビルド環境を整えたりと環境構築・以降などをバシバシ実施した
  • 古い画面システムを Rails でリプレースしようと決心した。
  • 障害対応・予防についていろいろ経験出来た。

この1年はどうするか

  • Scala 熱を増やす?今いる現場は Scala 推し。積極的に導入していきたい。簡単な集計処理は Java とかで書くよりスマートで、可読性もいいのでバグが起こりにくいと思う。
  • やっぱりテスト。チームにテスト文化を根付かせる。
  • 新しい言語を試す。何にしよう。Haskell をとりあえずまじめにやってみるか。
  • Spark?
  • スマートフォンアプリを作るか。
  • gem を1個は公開してみよう。

限られた時間のなかで無駄を少し削り、勉強やモノを作る時間を増やそう。 広く浅くになってしまうのなら、少数を深堀りした方がいいとはお思うけど、尊敬できるすごい人たちってやっぱり幅広く深い知識を持っている気がする。そうなりたい。

転職して1年

daily

転職して丸1年が立ちました。

ちょっと酔っていますが、超簡単な振り返りをします。

前職は…

現職は3社目です。前職は業務委託・派遣でいろいろなところに常駐するSESの会社でした。いろいろな現場(主に金融系)で経験を積んで来ましたが、会社のために何かしたかというとほとんど何もしてませんでした。職場は常駐先なので同僚と顔を合わせるのは年に数回の会議だけでした。

これじゃあ、会社に属している意味が…と思ったり、常駐先で商品等を開発するのと、自社サービスとではいろいろと意識が違うので自社サービスをやりたいと思い転職に踏み切りました。もちろん、前職でも作ろうと試みましたが、社員の意識・経験不足等で簡単なWebサービスを始めましたが、すぐに放置されました。

画面、サーバ、バッチ

入社して、最初はフロントの画面を担当しました。いろいろアレでしたがなんとか踏ん張り、その後サーバサイドも手をつけて、バッチ処理も触ったりといろいろやらせてもらっています。 Ruby, Java, Scala, Hadoop etc... まだまだ勉強不足でいろいろ助けてもらっていますが、1年前に比べると確かに成長できているなと実感出来ます。

特に直近では Ruby ばかりだったので Java はブランクがあり、Ruby に慣れているとまどろっこしく感じられますが、IDE である IntelliJ の優秀さを実感したり、興味はあったけどあまり触れてなかった Scala を本格的に使ったりといろいろな技術に挑戦できる環境はすごくいいです。

仲間

優秀なエンジニアが揃っています。意識高い()です!私が入社したときは少なかったですが、今は当時の倍近くになり、活発に社内勉強会や自主的なもくもく会が行われています。勉強会で発表するときに、プレゼンの資料を作って発表するのは大変だなーと発表の経験をするというのはとてもいいことだと思いました。

エンジニアだけでなく、営業さんたちと同じフロアにいるのでいっしょにサービスを作っている感が素敵です。時にはぶつかり合うことももちろんありますが、仲が良いだけで慣れ合いになるのはダメなのでそこは遠慮せずにこれからもやって行きたいです。 エンジニアとは明らかに違う雰囲気を持っている営業さんたちはいろいろと参考になります…。

2年目は

きっちり目標を立ててまた半年後、1年後に振り返ったときにまた書けるようにしたいです。 Ruby, Scala をもっと強くし、テストをさらに意識してやって行きます。 またサービスが盛り上がるように積極的にコードを書くだけではなく活動したいと思います。

Ruby を始めてちょうど2年になりますが、それの振り返りは次の機会に…。

Play2 Scala で heroku にデプロイしてみる

Play2 Scala heroku

今更ながら、 Scala 熱を上げて行きたいということで Play framework 2 を heroku にデプロイしてみた。 IntelliJ IDEA12 Ultimate を使用している。 Scala, Play のプラグインをインストール済み。

heroku, Scala をインストール

Mac, homebrew 前提で。 Java 1.7.0_21 をインストール済み。

$ brew update
$ brew install play scala

Play プロジェクトを作成

以下の様に作成してみる。

f:id:kaz_shu:20130602225655p:plain

「Play 2 Home」 は install したディレクトリを指定。

Heroku にデプロイするための設定ファイルを作成

以下の2つのファイルをルートディレクトリに作成する。

heroku でデプロイするには、Procfile というファイルを作成して以下を記載しておく。

web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS}

公式サイトにあるやつだと起動できなかった…。

あと、 Java 7 を使用する際には system.properties というファイルを作成して以下を記載。 デフォルトは Java 6 である。

java.runtime.version=1.7

コミットしてデプロイ

後は Rails アプリとか同じように push していく。

$ git init
$ git add .
$ git commit -m "initial commit"
$ heroku login
$ heroku create [app name] # 現在は --stack cedar を入れなくてもデフォルトで cedar になる。
$ git push heroku master

※ [app name] はオプション扱いなので入力しなかったら適当な名前で作られる。

最初は結構時間がかかるが、無事成功したら

$ heroku ps
=== web (1X): `target/start -Dhttp.port=${PORT} ${JAVA_OPTS}`
web.1: up 2013/06/02 22:46:58 (~ 1m ago)

無事成功していることを確認。

$ heroku open

ブラウザで確認。

intelliJ ほとんど関係なかった…。play new してないバージョンということで。 次は簡単なCRUDアプリを作ってみようと思う。

Heroku に Ruby 2.0 + Rails 4.0beta1 をデプロイ

heroku Rails

久々に heroku で簡単な Web アプリを作成しようと思ってどうせなら 最新バージョンでやろうと Ruby 2.0 + Rails 4.0 にした。 Rails に関しては 4.0beta1 である。

単純に deploy しただけでは Ruby 2.0 を使ってくれず、しかも 1.9.2 を使用していたみたいで、 Rails のインストールすらできなかった。 以下に方法を示す。

heroku ツールをインストール

gem i heroku を実行したところ、heroku toolbelt を推奨されたので以下のサイトからダウンロードしてインストール。

https://toolbelt.heroku.com/

ローカルで作成

Rails アプリを作成
# test は作成せず、 bundle install を実行しない
$ rails new heroku_app -T --skip-bundle
Gemfile の調整
# heroku 上 で Ruby 2.0 を使う
ruby '2.0.0'

# 開発時のみ sqlite
group :development do
  gem 'sqlite'
end

# プロダクションのみ postgres
group :production do
  gem 'pq'
end
各種コマンドの実行
$ git init
$ heroku create [app_name]
$ bundle install --without production
$ rake db:migrate
$ git add .
$ git commit -m 'first commit'

heroku へデプロイ

push と migration
$ git push heroku maseter
$ heroku run rake db:migrate

これで無事に動くはずである。

Gemfile に ruby '2.0.0' だけを忘れないようにしよう。