akadama

そこらへんにいるプログラマが適当にやってます

2014~2015

このエントリーは、誕生日 Advent Calendar 2014の12月25日分です

初日の @trmmy さん、12日遅くなりましたけどお誕生日おめでとうございました
2日目の @yancha さん、7日遅くなりましたけどお誕生日おめでとうございました
3日目の @chiastolite、自分にお誕生日おめでとう

2014年

今年の一番の大きかったイベントはやはり転職。 社会人1年目から9年間所属した会社を辞めるというのは結構勇気いることでした。

あらためて前職を振りかえってっていろいろ書こうとしたんですが、そういえばこれのちょっと前が転職エントリだったし 僕の大好きな広島東洋カープの緒方孝市(現監督)の以下の言葉を思い出したのでやめておくことにします。

1
2
3
4
「愛着」という言葉はチームを出て行く人間が口にしてはいけない。
チームに残る選択をしたやつが初めて口にできるもの。
確かにうちの球団は他球団に比べたらお金がないのかもしれないけど、
僕はそれを分かった上で自分の評価も上げたいし、優勝したいと思った。

余談ですが緒方孝市監督の誕生日も本日12月25日です。
おめでとうございます。来年こそ優勝しましょう。

2015年

そういえば次の誕生日には35歳になるので例の定年とやらを向かえることになります。 だからなんだというわけではないけど、はたして今後もプログラマーとしてやっていけるのか?みたいなことはよく考えています。

正直自分は強みみたいなものが無くて、うわっ…私の知識浅すぎ…?みたいなことがあったりとこの先大丈夫かなーと思ってたりしますが、 幸い新しい知識だったり気付きを得ることに楽しみを覚えられているので、なんとかかんとかまだこの世界で生きていけるのかなと。

今までがあれもやりたいこれもやりたいになって中途半端になってしまってはいるので、今年はちゃんと軸を見につけたいなーと毎年思っていることではありますががんばっていきたいと思います。

最後に

思いつきで作ったアドベントカレンダーに2人の方に参加していただけて感謝感謝です。
来年の12月もウチらで盛り上げてこ。

リモート勤務するにあたって買ってよかったもの

先日の転職でリモート勤務ができるようになった。
今のところマシンは私物を使っていて毎日会社と家を往復させている。
その際に買ってよかったものを紹介してみる。

Transcend JetDrive Lite 130

普段使っていないMacbookAirのスロットにぴったり収まるSDカード。

最初は写真やら音楽やらを移して容量増やしに使おうとしてたんだけど、TimeMachineのバックアップ先にしたことでどこでもバックアップをとれるようになった。

会社と家で別々にバックアップとかした場合連続性無くなっちゃうし(そもそも別々になんて出来るのかな?)、常に手元で継続的にバックアップが取れてるのは安心。

ただ盗難リスクとか天災とかの備えにはなってないのでこの点はまた他の方法も考えたいところ。

ATEN PC・スマホ切替器 CS533

頻繁にマシンを持ち運ぶと気になるのがケーブル類の取り回し。
外部ディスプレイ+電源ケーブルは必須としても、キーボードやトラックボール用のUSB抜いたり挿したりが面倒。
普通にBluetoothキーボード買ってもいいんだけど、なんとなくHHKを使いたい気分だったのでなんとか無線化できないか考えた。

そんな時見つけたのがCS533。
最初はEneBRICKってに目をつけていたんだけど、バッテリーはいらないし評価も高くなかったしでこちらを選んだ。

これがかなりのライフチェンジング。
ケーブル1本減るだけで、抜き差しが楽で机の上もすっきりするのかと。
今は会社についてMacを閉じたまま液晶と電源のケーブルだけさして、すぐ仕事が始められるようになった。

初期設定のまま使っていたときは特にトラックボールの遅延が酷くて「外したかな…」と思ったけど、 ファームウェアのアップデートのおかげか今ではかなりキビキビ動いている。
多分直挿しより遅延はしてるのだろうけど、少なくとも普段使いではまったく気になっていない。
今はHHK Pro2とM570をつけて運用している。

気をつけたほうがいいのがファームウェアアップデートがOSXの10.9.1までしか対応してないこと…
古いMacOSがあるか、Windowsがあるとそこらへんは安心だと思う。


なおこのエントリはAmazonアソシエイトを使ってみたかったので書きました

Unicon PTE ltdにJoinしました

8月末をもって9年間お世話になった会社を辞め、Unicon PTE ltd.にJoinしました。

前職ではBtoB/BtoC、受託業務などいろいろな経験をすることができましたし、 社内では(当時社内で使われてなかった)RubyやGitHubアジャイルなど試したい!ということをいろいろやらせてもらえたと思います。

Unicon PTE ltd.について

公式サイトにありますが「モバイルゲームの開発者支援」をやる会社です。 友人に声をかけてもらえたことや、海外を視野にした業務ができたりいろいろあって決めた感じです

制度として週2日リモート勤務が出来たり、毎週英語の勉強の時間があったりいろいろおもしろい感じですね。 特に自分は家が遠方にあるのでリモート勤務があるのはありがたいですね。

では今後ともよろしくお願いします。

WishList

JAWS-UG TOKYOに行ってきた

http://jawsug-tokyo.doorkeeper.jp/events/11988 http://togetter.com/li/669904

今回のテーマは「AWS運用管理自動化祭り(Immutableもあるよ)」 もしかしたらJAWS-UG初参戦だったかも

NulabとAWSと私(仮) - ヌーラボ 中村(@ikikko)さん

Nulabさんの中での自動化の取り組みについてのお話。 構成図は何度かネット見たことがあったけど、お話を聞くのは初めてだった。 「プロセスも回数を重ねて洗練させていく」というは本当重要だと思うので、ちゃんと回せるように環境を整えないといけないなぁと。 毎週作っているAMIの管理とか、そこらへんの話聞きそびれた…

運用自動化時代のドキュメンテーション - 運用設計ラボ 波田野さん

「What,Howはコードに残るが、Whyは人が自らドキュメントに書かなれば残らない」 ここらへん、自分はコミットメッセージに関して思っていることだったので、 ドキュメント化する場合も同じこと気をつけよう。

KAIZEN platform Inc.における運用自動化 - KAIZEN platform 伊藤直也(@naoya_ito)さん

この日一番聞きたかったセッション KAIZEN platformの行動指針「3度同じ事を繰り返す時は自動化」とかは、是非取り入れたい。 BrowserStackなどのサービスやEC2とpecoを組み合せた使い方など、すごいためになる話ばっかりだった。 botとbotを協調させるって発想はなかった

AWSアカウント開設からインスタンスを立ち上げるまでの作業自動化について - gumi 本間さん

(そういえばAWSのイベントだったw) サービスや子会社などでアカウントを細かく分けているとのこと。インフラの面倒見れるようならあのやりかたのほうが、制約が少なくてよさそう。 aws-cli、いろいろできそうなのでちゃんと調べてみないと

Sensu on AWS - Amazon 吉羽(@ryuzee)さん

Sensuは前のDevOpsDaysあたりで聞いてからずっと気になってるんだけど、業務上使う機会がなかなかない… チェックスクリプトも書き易そうだしどっかで試してみたい。

監視項目について「絶対壊れちゃいけないオンプレ」と「壊れてもいい(復旧できることが重要)クラウド」の特性の違いはちゃんと考えるべきというのはその通りで、既存のをそのまま持ってくるんじゃ意味ないよなぁと思った。

ちょっといいSensuの話(仮) - cloudpack 山口さん

最近作ったプラグインの紹介。便利そうだ。 懇親会で聞きそびれちゃったんだけど、こういうプラグインのテストってどうすんだろう?

Pandora FMSを使って監視もオートスケール対応 - Rworks 北川さん、山田さん

Pandora FMSって知らなかったんだけど、公式見たらデザインもおしゃれだしなんかよさそう。 時間あったら調べてみよう

懇親会にて

@naoya_itoさんとお話できる機会があったので、気になったところをいろいろ聞いてみた。(話かけるきっかけにもなるしプルリクはしておくものだなぁ)

  1. 今の開発フローやChatOps等々の設計とかはやったりしたんですか?
  2. 自然とああなっていった感じ。必要であれば今後また変わっていくかもしれない。

  3. bot等々の管理とかは俗人化しないですか?

  4. そこらへんもPRベースでやってるので人依存とかはしてない。hubotの使い方とかはhelpやログからわかるようになってる

  5. 今の仕組みってどれぐらいで構築したんですか?

  6. ここ3ヶ月ぐらいに大きく動いた。効率開発をミッションとするメンバーを置けたのが大きい(2人程度で開発業務よりも効率化を優先している)。あと、元々Qiita::Teamでの共有文化の形成していた(努力や工夫の見える化)のも大切

その他

懇親会でChefかAnsibleかみたいな話をしていたら@ijinさんにSaltStackというプロダクトを教えてもらった。調べてみないとだ

Ruby2.1.0以降をTravisCIでテストするには

Ruby2.1.0以降のバージョニングルールの変更されてから初のリリース、Ruby2.1.1が出た いろいろあってTravisCIでの2.1.0以降のテストについて調べた

発端は@sonotsさんのツイート

そして口は災いの元の見本

調べたのは以下の2点

  1. すでに2.1.1と指定できるのか
  2. 2.1.*のようにした場合はどうなるか

2.1.1を指定した場合

  • 2.1.1動いた
  • Travisのコンテナには入ってないバージョンのため取得用のダウンロードが走る(+30secぐらい)

参考: https://travis-ci.org/chiastolite/travis-test/builds/19588293

2.1.*のようにした場合

Travisでは2.1.0が動作した

1
2
3
4
5
6
7
$ curl -sSL https://get.rvm.io | bash -s 1.25.14
$ rvm --version

rvm 1.25.14 (version) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

$ rvm use 2.1.* --install --binary --fuzzy
Using /home/travis/.rvm/gems/ruby-2.1.0

試しにdocker上でrvmを最新ver(1.25.19)して同様に2.1.*を渡してみたところ、この場合は2.1.1で動作した

1
2
3
4
5
6
7
$ curl -sSL https://get.rvm.io | bash -s stable
$ rvm --version

rvm 1.25.19 (version) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

$ rvm use 2.1.* --install --binary --fuzzy
Using /home/travis/.rvm/gems/ruby-2.1.1

これにより、現在のTravisCI上ではrvmのバージョンが古いため、2.1.*が最新にはならないことがわかった

rvmを更新できないかというIssueも上がっていたが現状動作を確認することができていない

Update RVM before selecting Ruby by henrikhodne · Pull Request #139 · travis-ci/travis-build

TravisCI側でコンテナが更新されるのを待つしかなさそう

まとめ

2.1.などの指定ではTravisCIの更新を待つ必要があるが、バージョンを直接指定すればRubyの最新バージョンを追うことができることがわかった ビッグウェーブに乗る必要がある人はリリースの度にバージョンを更新して、それ以外の場合は2.1.などとしてTravis側の対応を待てばいいと思う

(Travisの更新速度がどれぐらいかわからないけど)

RubyMotionでPixateを使う

数ヶ月触ってなかったRubyMotionのリハビリついでに、前から使ってみたかったPixateが使えるのかを試してみた

RubyMotionとPixate

ちなみにRubyMotionとPixateというとすでに以下のような事例が出てます

ただどのエントリもPixateのSDKを別途ダウンロードすることが前提だったので、それcocoapodsとかでなんとかならないのかなーと思ってた

結論としてはなんとかなった
そのときのリポジトリはこれ↓

https://github.com/chiastolite/rubymotion_pixate_sample

gemの追加

追加したgemは以下の2つ

  1. cocoapodsを使うためのmotion-cocoapods
  2. pixateを使うためのmotion-pixate

ちなみにdotenvが入ってるのは後述するPixateのLicense keyをリポジトリに入れたくなかったから

Gemfilelink
1
2
3
4
5
6
7
source 'https://rubygems.org'

gem 'rake'
# Add your dependencies here:
gem 'motion-cocoapods', '~> 1.4.0'
gem 'motion-pixate', github: 'Pixate/RubyMotion-Pixate'
gem 'dotenv'

Pixate

Pixateのインストールはcocoapodsでできるようになってたので、Rakefileに追記してrake pod:installをすればインストールは完了

ちなみにPixateは無料利用も可能だけどライセンスキーは必要なのでサイトでユーザー登録が必要
http://download.pixate.com/key

Rakefilelink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project/template/ios'

begin
  require 'bundler'
  Bundler.require
rescue LoadError
end

Dotenv.load

Motion::Project::App.setup do |app|
  # Use `rake config' to see complete project settings.
  app.name = 'pixate_test'

  app.pods do
    pod 'Pixate' # Pixateをcocoapodsを利用してインストール
  end
  app.pixate.user = ENV['PIXATE_USER'] # pixateのユーザー名
  app.pixate.key  = ENV['PIXATE_KEY']  # pixateのライセンスキー
  app.pixate.framework = 'vendor/Pods/Pixate/Framework/iOS/Pixate.framework/' # インストールされたPixateの場所を指定
end

あとは↓のようにコマンドを叩けば使えるようになる

Rakefilelink
1
2
3
4
5
6
7
8
# デフォルトのsass/cssファイルを作成(初回のみ実行)
$ rake pixate:init

# sassのコンパイル(sass/*.sassを変更した場合のみ)
$ rake sass

# 実行
$ rake

便利!

Quine-Relayを気軽に試せるようにVagrantの設定を作った

Quine-relayはみんな「すごい」「意味がわからない」とか言ってるわりに、実行してみたとかの話が無かったので手軽に動かせる環境を作って Shibuya.rbで実行してきた。

chiastolite/vagrant-quine-relay

vagrantが入ってる環境ならgit clone後にgit submodule updateしたら、vagrant upすれば実行が完了します。

Quine Relayは50個の処理系が必要ですが手元で環境構築するのは大変ですが、Vagrantを使えば既存環境への影響無く試すことができます。
サービスを作った場合にもVagrantで動かせるようにしておけば、いろんな人に試してもらえるかもしれませんね。

Vagrantfileはどう管理

Twitterとか勉強会でVagrantfileやcookbooksはどう管理すべきか?って話題がたまに上がるので、自分の考えをまとめてみる。

自分の意見は「Vagrantfileもcookbooksもアプリと一緒に管理する」
理由をつらつらと

「すぐ使えるようにしたい」

リポジトリからcloneしてすぐvagrant upしてすぐ動作させられるのが理想だと思っているので、 仮に別のリポジトリやブランチに置いた場合、開発者間での環境を統一が面倒になる。その為にはアプリと同じリポジトリに必要だなぁと。

VagrantfileはGemfileと一緒だと思ってるのでそう考えると同じリポジトリだよなぁと。

cookbooksに関して

ではcookbooksも同じリポジトリで管理するか?と言われると…

出来ればcoookbooksは再利用可能にしたい。なので同一リポジトリでは扱いづらくなるよなってことで、代替案としてはcookbooks自体は別リポジトリ等で管理してアプリケーションリポジトリにはBerksfile+Bersfile.lockを置くのがいいんじゃないかなと。

Vagrant Meetupに行ってきた

Vagrant meetup 〜作者 Hashimoto氏の来日講演〜 - Chef Meetup | Doorkeeper

作者の @mitchellh さんが来日するとのことで、これ逃すと直接話を聞けるチャンスはないと思い参加してきました。

@mitchellh さんは写真とかでもわかる通りイケメンすぎてやばすぎ。
話はVagrantを使うことによるメリットや今後の展望、おまけでPackerの話など。

簡単に話のまとめ

Vagrantの思想

“最高の開発フロー”の提供

Vagrant利用のメリット

  • 開発/テスト/本番を同じOSで動かせる
  • OSXは本番環境では使わないよね?
  • 開発者間での環境の差異を無くせる
  • 構築の時間削減
  • 手順書のメンテナンスやヒューマンエラーもない
  • 再構築が簡単なので気軽に今の環境を捨てられる
  • 仮想マシンへの接続が簡単
  • 動作/テストをVagrantの中で行って編集はローカルのエディタとかで行える
  • ポートを開けたりネットワークの設定もできるので使い慣れたブラウザ/デバッガが使える
  • プロダクション環境のモデル化が行える
  • multi-machineを使ったクラスタの構築

今後のVagrant

  • Boxの構築を自動化(1.3)
  • Mac/Win(1.3以降)

まとめ

Use Vagrant
(Vagrant使え)


余談

「ChefとかでProvisioningしてると、halt -> upで時間食うんだけどどうすれば」って質問しようとしてたらそれっぽいことを質問してる人がいた。ちゃんと聞けてないけどなんかPackerにいい機能があるのかなーって感じなので調べてみよう。

RubyMotionでユーザーテンプレートを使ってみる

今日は RubyMotionTokyo meetup#2 に行ってきました。
あまりやることを決めてなかったのでエディタ周りを調べた後は、ProMotionを試したりソースを読むことに。

便利そうだなと思ったんだけどmotion createするたびに毎回Gemfile作って、app_delegate.rbをProMotion用に修正というのはちょっと面倒。
そこで @watson1978 さんにRailsのApplication Templateのような仕組みは無いか聞いてみたところ、 RubyMotionは標準のios,osxのテンプレート以外にも、ユーザーが定義したテンプレートも利用可能とのこと。

試しにテンプレートを作ってみることにした。

/Library/RubyMotion/lib/motion/project/template.rb を見るとユーザーテンプレートの置き場は ~/Library/RubyMotion/template になっているのでこれを作る。
とりあえず既存のios用テンプレートをコピーしてこのテンプレートが呼べるかを確認。

mkdir -p ~/Library/RubyMotion/template/
cd ~/Library/RubyMotion/template/
cp -r /Library/RubyMotion/lib/motion/project/template/ios user_template
motion create sample --template=user_template

sampleにテンプレートにiosを使ったときと同じファイルが出来ていることを確認。
次にProMotionを導入してみる。

と言っても、やるべきはテンプレートのフォルダのfilesにちょっと変更をするだけ。
Gemfileを作って Rakefile、app_delegate.rbにも手を加える。

  • Gemfile
source 'https://rubygems.org'

gem 'rake'
gem 'ProMotion'
  • Rakefile
# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project/template/ios'

require 'bundler'
Bundler.require

Motion::Project::App.setup do |app|
  # Use `rake config' to see complete project settings.
  app.name = '<%= name %>'
end
  • app_delegate.rb
class AppDelegate < PM::Delegate
  def on_load
  end
end

bundle installをして再びmotion create。

bundle install
motion create sample --template=user_template

ProMotionが使えるようになってる!
使うライブラリだったりがまとまってきたら、あらかじめテンプレート化することで開発が捗りそうですね。