Rubyの会を久々やります

f:id:hondabin:20141029111919j:plain
※今回は和室ではありません

約1年振りの開催となりますが、実施します。


第6回『Rubyで何か作ろうかい(会)』@武蔵小山

11/14日(金)19:30〜 の実施となりますが、18:00から空いていますので
ご都合がつく方は早めに来て頂いて、一緒にもくもくしましょう。

場所は、品川区が提供するスクエア荏原さんの場所をお借りして行います。

施設が出来てからそれほど年数が経っていないため、館内は非常に綺麗です。
比較的安い料金で施設を利用できるため、仕事場やお住まいが近辺の方は、
勉強会などで利用してみるのもいいかなと思います(wifiはないのんですが)。

武蔵小山のパルム商店街終端くらいと少し駅から歩く場所となりますが、
名所となる商店街ですので、是非楽しみながら起こしください。
焼き鳥屋さんなどの誘惑に負けないよう..お願い..します..。

こちらの会は毎月1〜2回ほど定期的に実施を行う予定です。
仕事終わりに気軽に立ち寄って勉強できる場になればいいなと思っています。

と、またまだ空きございますので、ご都合がよろしければ是非!!

第6回『Rubyで何か作ろうかい(会)』@武蔵小山

オープンソースにて開発を一緒にしませんか?

5〜6名程度のグループワークにてオープンソースで開発を行うイベントをイノベーション東北さんと現在企画中です。
(おそらく10月〜11月のどこかで実施を予定しています。)

作るものは、とある事業者さんのサイトをリニューアルするという内容になりますが
開発現場の第一線で使われている技術を利用し、その技術習得をできる場となればとも思っております。

言語は今のところ未確定(Ruby on Rails or Go ..etc)となりますが、GitHub、CIツール、PaaSを使って開発を進めます。

  • Gitの理解を深めたい
  • GitHubでの開発フローを経験したい
  • CIツール、PaaSを使った開発フローを経験したい
  • テストコードの理解を深めたい(単体、結合と両方書く予定です)

方であったり

  • 普段ぼっち開発なので..チームでの..開発を..経験..したい..
  • テーマが決まらない..(作ろう会メンバーの方)

また、企画の段階から一緒に参加頂く事を予定していますので、開発プロジェクトを一から経験する場にもなると思っています。

興味のあるデザイナー・プログラマーの方、上記技術を得意とするエンジニアの方(是非サポート頂きたいです..)と、
本イベントをきっかけに、一緒にワイワイ開発を行いませんか??

尚、普段お仕事が忙しい方や、時間の都合がつかない方も沢山いると思いますので、
無理のないスケジュールで、かつ、リモートでもお手伝い頂ける環境を整えたいと思っています。

本会のイベント詳細が決まりましたら、別途、makewith.Eventにて告知を行いますが、
現時点で興味がある方がいましたら是非、honbinまで!!

Enjoy!!

私の作業場所

先日の合宿昨日の準備会にてプロトタイプができた。

f:id:hondabin:20140713175809j:plain

makewith.Place

  • 登録は誰でもできるけど管理者が承認
  • 情報に変更があったら、だれでも管理者に変更のリクエストを投げれる仕組み
  • 実際に行ってきた感想をコメントで共有できる仕組み

イメージはgithubに近いです。 

herokuでhubotをhipchatに

hipchatのユーザー制限がなくなったので、チャットをhipchatに移行した。hubotをherokuにて動かす作業をしていたら、思いのほか時間がかかってしまったのでそのとき対処した内容をメモに残しておきたいと思います。

※詳細な手順は以下記載しておりませんが、コマンド履歴はhttps://gist.github.com/honbin/64af90e4a5684c221deeに書いておきました。

 !     Push rejected, no Cedar-supported app detected

herokuへデプロイ時に上記エラーがでてあげられず、当該環境(Node.js)にて必要なファイルがない時に本エラーが起きるとのことだったので、https://devcenter.heroku.com/articles/getting-started-with-nodejsのマニュアルを確認。Node.jsのアプリとして認識するために、package.jsonが必要とのことなのでnpm install --save hubot-hipchatとせずに、package.jsonからライブラリをインストール。そして、node_modulesを.gitignoreに設定した。

$ npm init
$ vi package.json
{
  "name": "hemhem",
  "version": "0.0.1",
  "private": true,
  "description": "hemhem is my company's hubot",
  "dependencies": {
    "hubot":         "*",
    "hubot-scripts": "*",
    "hubot-hipchat": "*"
  },
  "engines": {
    "node": "0.10.x",
    "npm": "1.2.x"
  },
  "devDependencies": {},
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "honbin",
  "license": "MIT"
}
$ npm install
$ vi .gitignore
node_modules

デプロイ完了後にheroku psにてプロセスを確認したところ、crashしてしまい動いていなかったのでheroku logsにてログを確認。

bash: bin/hubot: No such file or directory

PATH=vendor/node/bin:bin:node_modules/.bin:$PATHとheroku側でパスを通してくれているとのことだったので、Procfileを以下に修正。

vi Procfile
bot: hubot -a hipchat -n hemhem

修正後にプロセスを確認したところ、またcrashしていたので再度ログを確認。

/usr/bin/env: coffee: No such file or directory

coffee-scriptを入れていなかったので、dependenciesに追加。

$ vi package.json
{
  "name": "hemhem",
  "version": "0.0.1",
  "description": "hemhem is my company's hubot",
  "dependencies": {
    "hubot":         "*",
    "hubot-scripts": "*",
    "hubot-hipchat": "*",
    "coffee-script": "*"
  },
  "engines": {
    "node": "0.10.x",
    "npm": "1.2.x"
  },
  "author": "honbin",
  "license": "MIT"
}
$ git push heroku master
$ heroku ps:scale bot=1

再度プロセスを確認し問題ないことを確認。hipchatにてhubot用に作成したアカウントからhttps://hipchat.com/account/xmppの情報を環境変数へセット。

$ heroku config:add HEROKU_URL=http://example.herokuapp.com
$ heroku config:add HUBOT_HIPCHAT_JID="12345_12345@chat.hipchat.com"
$ heroku config:add HUBOT_HIPCHAT_PASSWORD="password"
$ heroku config:add HUBOT_HIPCHAT_ROOM="12345_hogehoge@conf.hipchat.com"
$ heroku config:add TZ=Asia/Tokyo

※最後のタイムゾーン設定はhttps://github.com/miyagawa/hubot-cronを使いたかったため

$ mkdir scripts
$ vi scripts/ping.coffee
module.exports = (robot) ->
  robot.respond /PING$/i, (msg) ->
    msg.send 'PONG'

 

f:id:hondabin:20140620062501p:plain

参考にさせて頂いたサイトm(_ _)m

特定のプロセスを殺したいとき

特定のプロセスをgrep→確認→killするという一連の操作を対話式で書いてみた。

PS=`pgrep -lf "${1:?引数に殺したいプロセス名を渡してね}"`

echo $PS

if [ -z "${PS}" ]; then
    echo "殺したいプロセス名は存在しないようですね、ウィー"
    exit 1
fi

echo "これらのプロセスを殺してもよろしいですか? [Y/n]"
read ANSWER

case `echo $ANSWER | tr y Y` in
    "" | Y* ) {
            pkill -f "${1}"
            echo "ヒーハー!!"
        };;
    *       ) echo "フー!!";;
esac

休日(週末)のカフェ作業

チェックポイント

  • 駅前、ショッピング街のカフェは避けた方がよい
  • 飯があるカフェはランチタイムとか時間をはずした方がよい(15時くらいがよい)
  • オシャレカフェは貸し切りがある場合があるので確認した方がよい
  • ソファ席があるとよい
  • 日曜日やっていないケースがあるので確認した方がよい
  • タバコが嫌いな方は禁煙席があるか確認した方がよい
  • コンセントがあるか確認した方がよい(2時間とかなら気にしなくてよい)
  • サラリーマン街のカフェは狙い目でよい(やってない、早くしまるケースがあるので確認した方がよい)
  • 長居する時はドリンク2杯とかご飯食べるとかすると精神衛生上よい
  • イヤホン持参した方がよい

総括

ルノアールよい

エコシステム

http://event.makewith.jp/ のサービスを作ったときに使った各種ツールを紹介します。 Rails、各種ホスティングサービスの恩恵をうけ、なんとか形にすることはできました。これからサービスを作ろうと考えている方の参考になればうれしいです。

ミドルウェア、インフラ周り

  • Ruby
  • Rails4
  • Heroku(+unicorn
  • AWS(RDS、S3)
  • SendGrid
  • CircleCI

を使用しています。herokuは、マニュアルがしっかり書かれているので設定周りで困ったことはありませんでした。heroku最高!!メール送信ではSendGridをフリープランで使用しています。一日200通の制限がありますが、当面は大丈夫そうです。作った後の運用も踏まえ、自分で出来ること、出来ないことを一度考えてから、技術選定をしてあげるとよい思います。

デザイン・フロントエンド関連

デザイナーではないので、一番苦しいフェーズでした。WebフォントやCSSフレームワーク、 フリーアイコン、勉強会でとった写真の素材を活用しなんとかしましたが、一番時間がかかったフェーズです。

WEBフォント(google

https://www.google.com/fonts

フリーアイコン(Font Awesome)

https://github.com/bokmann/font-awesome-rails

アイコン表示のヘルパーを用意してくれます。

CSSフレームワーク(bootstrap)

今回はrails_layoutを使って、大枠のレイアウトを作ってからカスタマイズしていきました。 また、 http://bootsnipp.com/ にてスニペットと本家のマニュアルを参考にしながら、作りたいレイアウトのサンプルをピックアップし当て込んでいきました。bootstrapつらいですが、こういった所は、やはり利点と感じています。

※その他参考にしたサイト
http://railsapps.github.io/twitter-bootstrap-rails.html

pjax

https://github.com/kossnocorp/jquery.turbolinks

rails4からturbolinksがデフォルトで導入されていますが、onloadイベントが発火されない問題があるため、上記Gemをいれて解消しています。その他問題がいくつかあるようなのですが、今のところはそのまま利用しています。

ページ更新の進捗

https://github.com/caarlos0/nprogress-rails

youtubeライクにページ更新の進捗が表示されます。(ページ上部に表示される、ニョキニョキー、クルクルクルーのところです。)herokuなのでページ表示に少し時間かかる、また、pjaxの遷移だと更新を待っている間に少し違和感が出てしまうため、更新の進捗状況を表示した方がよさそうです。

フォーム

https://github.com/plataformatec/simple_form

イベント新規作成画面などで利用しています。

入力補助

日付

https://github.com/Nerian/bootstrap-datepicker-rails

時刻

https://github.com/tispratik/bootstrap-timepicker-rails

イベント新規作成画面で使っています。カレンダーからの日付入力、時間のところは上下キーを押すと時刻が入ります。

機能関連 ・認証

普通のログインと、facebook認証で使っています。https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview deviseでの連携の仕方が記載してあるので、参考にしてみてください。

ページング

https://github.com/amatsuda/kaminari

bootstrapのviewを作成するジェネレーターも用意されています。

マークダウン表示

https://github.com/vmg/redcarpet

イベント登録時に記載する内容はmarkdownの整形ルールを採用しています。

タグ

https://github.com/mbleigh/acts-as-taggable-on

イベントにつけるタグはこれを利用しています。

画像アップロード

https://github.com/thoughtbot/paperclip

s3へアップロードするインターフェースも用意されています。 が、今回herokuを使って運用しているため、画像アップロードする際にかなり時間がかかってしまいます。http://qiita.com/anoworl/items/35e75a20e70d2ad0f658 に書いている通り、herokuの場合はダイレクトでs3にアップロードする仕組みを作ってあげたほうがよいと思います。

URL

https://github.com/norman/friendly_id

カテゴリ別イベント一覧ページのURLで利用しています。 ユーザー名でアクセスすると、その人の情報を表示させるような利用シーンが一般的だと思います。

テスト・デバック関連

group :test do 
  gem 'spring-commands-rspec' 
  gem 'database_cleaner' 
  gem 'launchy' 
  gem 'factory_girl_rails' 
  gem 'simplecov' 
  gem 'simplecov-rcov' 
  gem 'coveralls', require: false 
  gem 'capybara' 
  gem 'rspec-parameterized', git: 'git@github.com:tomykaira/rspec-parameterized.git' 
end 

group :development, :test do 
  gem 'pry-rails' 
  gem 'pry-doc' 
  gem 'pry-remote' 
  gem 'rspec-rails' 
  gem 'mailcatcher' 
  gem 'marginalia' 
end 

紹介がめんどくさくなってきたので、その部分のgem貼ります。各種リードミーをよんでみてください。

その他

デコレーター

https://github.com/amatsuda/active_decorator

viewがすっきりする

初期データの投入

https://github.com/mbleigh/seed-fu

どーん

環境変数管理

https://github.com/laserlemon/figaro

ヤムラー

パフォーマンス、死活監視

http://newrelic.com/

ちぇけらちょ

そんじゃーね!1