RubyKaigi 2015 に参加してきた #rubykaigi

はじめに

rubykaigi.org

先々週の週末 12/11 〜 12/13 に開催された RubyKaigi 2015 に参加してきました とても充実した楽しい時間になりました!

参加したコンテンツ

Dec.11

※ ランチから戻るのが遅れて最初の方少し聞き逃した

Dec.12

Dec.13

動画ももう公開されているようですね!

www.youtube.com

飯テロ

ランチは築地が近かったので毎日海鮮丼 or 🍣でしたw

Dec.11

顔馴染みの @ppworks さんと Money Forword の皆さんと

@yui-knk さんに Ruby の C レベルの話をいろいろ聞いて楽しかったw

Dec.12

そのっつ師匠と一緒に

Dec.13

ほかっちゃ先生と JavaScript 談義など

※ ちょっとうろ覚えで… お名前をあげられなかった方すいません mm

懇親会

Dec.11

高井さん、Wantedly の皆さん、大葉ご夫妻、そのっつ師匠、ほかっちゃ先生等とあぶれ組でインド料理?に行きました

酒の席のノリとは言え「Ruby 書きたいならうちにおいでよ」と言われたの本当に嬉しかったっすw

Dec.12

Official Party

いろいろな人とお話出来ました。tenderlove と直接話せたの嬉しかったー

worst code の @Prodis さんに話しかけたもののボキャブラリーが足りず、思った事を伝えられなくてもどかしい思いをしました

超豪華メンバーが語らっている席に図々しくお邪魔してしまいすいませんでしたー 🙇

(話してる内容に興味があって耐え切れなかったのです…)

Dec.13

都内某所にていろいろな人と美味しいものを食べて、「Rubyist で良かった!!!」と力説してしまいましたw

関係ないけど

汐留はクリスマスムードでしたねー

おわりに

今年はちゃんと書けて良かった…

仕事では主に Ruby を書く仕事をしているのに (この一年はなぜか Perl 書いてましたがw) Node.js の community に比べてボッチになりがちだったんですが、今年は全くそんな感じも無く皆さんと楽しく過ごせました

※ ちなみにおかげさまで来年からは Ruby を書く案件に異動する予定です!

これも日頃から community に対するご恩返しとしてスタッフ業を頑張ってきて皆さんに覚えていただいた事がプラスに働いているんだろうなと思います

来年もまた行きたいですー。あの笑顔を見るために!

package.json で Node.js/npm のバージョンをチェックする

はじめに

qiita.com

このエントリは Node.js Adventcalendar の 13 日目のエントリです。

npm3 と npm2 の互換性

npm2で運用しているプロジェクトでshrinkwrap.jsonが壊れた時、npm3にシュッと移行する手立てはあるか?npmのバージョンを切り替える毎にnode_modulesを作りなおすのは大変だ」と追加質問したんですが、英語が全然しゃべれなくてちゃんと通じたか疑問です……。 maybekatの回答は「そうだね、npm自身も同じ問題に直面したよ。npm2ではじめたプロジェクトはnpm2で頑張り続けた方がいいし、もしnpm3に上げるならnpm2に戻ることは考えたらいけないよ

http://amagitakayosi.hatenablog.com/entry/2015/11/12/023805#NodeDiscuss

東京Node学園祭2015で登壇された amagitakayosi さんのブログエントリからの引用です

現在 Node.js の stable 版は v5.x で npm3、Long-term Support(LTS) の最新版は v4.x 系で npm2 となっています

Mac 環境での Node.js

Mac 上で開発していたとしても個々の好みで homebrew、MacPorts や nvm、nodebrew 等を使ってインストールしているかもしれないですよね

現在の状況は以下の様になっています

package.json の node-version/npm-version

残念ながらこちらはインストールする依存モジュールのチェックに使われているのみで npm install 時に実行している Node.js や npm のバージョンをチェックしているものでは無いようです

Search Results · GitHub

チーム開発時には Node.js と npm のバージョンはそろえるべきなのでその辺の自動的なチェックは出来ないようです

check-engines

www.npmjs.com

このモジュールを使うと package.json に書かれた node-version/npm-version をチェックしてくれます
しかし global にインストールしないとコマンドとして実行できません

これを解決するには package.json に devDependencies として定義してインストールした後に postinstall でチェックを実行するという強引な手法が使えます
でもこれエレガントではないですよね…

➜  npm_test  cat package.json
{
  "name": "npm_test",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "engines": {
    "node": "5.x",
    "npm": "3.x"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "postinstall": "check-engines"
  },
  "keywords": [],
  "author": "kysnm <tokyoincidents.g@gmail.com> (http://kysnm.hatenablog.com/)",
  "license": "MIT",
  "devDependencies": {
    "check-engines": "^1.2.0"
  }
}
➜  npm_test  npm i
npm WARN package.json npm_test@0.0.1 No description
npm WARN package.json npm_test@0.0.1 No repository field.
npm WARN package.json npm_test@0.0.1 No README data

> npm_test@0.0.1 postinstall /Users/jps/work/node/npm_test
> check-engines

[Error: Error: node version (4.2.1) does not satisfy specified range (5.x)
Error: npm version (2.14.7) does not satisfy specified range (3.x)]

npm ERR! Darwin 13.4.0
npm ERR! argv "/Users/jps/.nodebrew/node/v4.2.1/bin/node" "/Users/jps/.nodebrew/current/bin/npm" "i"
npm ERR! node v4.2.1
npm ERR! npm  v2.14.7
npm ERR! code ELIFECYCLE
npm ERR! npm_test@0.0.1 postinstall: `check-engines`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the npm_test@0.0.1 postinstall script 'check-engines'.
npm ERR! This is most likely a problem with the npm_test package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     check-engines
npm ERR! You can get their info via:
npm ERR!     npm owner ls npm_test
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/jps/work/node/npm_test/npm-debug.log

Ruby の bundler

Bundler: The best way to manage a Ruby application's gems

➜  bundler_test  cat Gemfile
# A sample Gemfile
source "https://rubygems.org"

ruby "2.1"

gem "pry"

➜  bundler_test  bundle
Your Ruby version is 2.2.3, but your Gemfile specified 2.1

一方 Ruby ではバージョンチェックする仕組みがあります
出来ればこういう風にしたいですね

おわりに

本当は変更箇所のふわっとした当たりはついているので出来ればパッチを送りたかったんですが、npm へのパッチは初めての事になるし、ちょっと時間がかかりそうなので今回は見送りました
時間を見つけてパッチは書きたいなと思っています

もっと良い方法をご存知の方がいらっしゃったらぜひ教えて下さい!

ELECTRON MEETUP #BOOST02 に行ってきた

はじめに

前々から気になっていた electron を触る機会を作りに参加してきました

boost.connpass.com

ちなみに Boost は "エンジニアのための evernote を目指した markdown editor" という事でした
(うろ覚えなので微妙にニュアンスが間違っていたらすいません…)

b00st.io

せっかくなので一度使ってみましょう!
electron アプリ作りの参考になると思いますよ

午前の勉強会

A humble start · GitHub

Use NPM · GitHub

Electron x React x Webpack · GitHub

この辺の説明を一通りライブコーディングしながら説明してくれました
課題としてはコンパクトでわかりやすいものだなと思いました
個人的には若干資料の表現に不正確なところがあるかなと思いましたが、初心者が概要をざっくり把握するためには調度良い感じだなとも思います

3番目の gist 資料は以下の Qiita の記事を参考にした方が良いそうです
React と babel などを使うことを前提にしたもので勉強会では Boost 自体を例題にしていました (Boost のソースコードは今のところ未公開だそうです)

qiita.com

あと参考になると教えていただいたリンクです

github.com

飛び込み LT

nodejs.connpass.com

当日は実はレバレジーズさんで Nodeschool in Tokyo が開催されていました

午前中の勉強会を聞いていて

と思ったので、せっかくの機会なので宣伝を兼ねて飛び込みで LT をさせていただきました

※ 僕にしては珍しい事ですw

こちらの記事を参考に rawgit を使ってみたのですが、あまりちゃんと読んでいなくて失敗してしまいました。。。
(10 分くらいでやっつけで資料を作ったので…)

www.axlight.com

コミット ID を削ると最新版を参照するという記事があったので次回もし利用する事があったら注意したいと思います

qiita.com

多分この URL だったら更新しても最新が見られるはず

https://cdn.rawgit.com/kysnm/c6248b71df619912c398/raw/electron-meetup-boost02.html

懇親会にて

今回勉強会の講師だった Dick Choi さんは以前 Nodeschool in Fukuoka をやりたいという申し出をしてくださった方で、実は gitter 上で会話していました。世間は狭いものですねw
現在は九州大学の学生をやりながら CTO をされているという事で月曜日には学校があるという事、いやー、ハードな生活をされていますね!

おわりに

非常に有意義な時間を過ごす事ができました
参加者のみなさま、主催のみなさまお疲れ様でした!
次は Nodeschool か 東京Node学園でお会いできると良いですねw

東京Node学園祭を支える技術 2015 #nodefest

はじめに

あっという間の一週間でした。先週 11/7(土) 東京Node学園祭2015が開催されました。

nodejs.connpass.com

強力なデザイナー

今回ノベルティのデザインは @t32k さんにお願いしました。

t32k.me

JS Girls のノベルティ作成経験をお持ちだったので手放しでお任せしてしまいました。 本当にありがとうございました!

公式サイトのデザインも @t32k さんです!

公式サイト

2011 からずっとお世話になっている Pixel Grid さん、そしてバックエンドにニフティクラウド の MQTT を利用させていただきました。

株式会社ピクセルグリッド / PixelGrid Inc.

クラウド 機能・サービス(MQTT(β)) | ニフティクラウド

イカなギミック楽しんでいただけましたか?

esa.io

esa.io

たまたま遊びに行った TokyuRuby会議09 - Regional RubyKaigi で「esa は技術カンファレンスに積極的にご協力させていただきたいと思っております」というお話を伺い、ご相談したところ快く引き受けてくださいました。esa スタッフの間でも評判いいです!!

ステッカー

今回はスポンサーのパエリア様にお願いしました。 ステッカー作成サイトの Hexi は io.js で動いています

paeria.co.jp

hexi.pics

懇親会飛び込み LT のステッカー作成に関するナレッジはイベント運営者に取っては貴重なお話でした!

www.slideshare.net

Tシャツ

前回は tmaker さんにお願いしましたが、今回はフルカラーでという要望が出たので予算の関係でデジタさんにお願いしました。 若干サポートが心もとないところもありましたが仕上がりは問題ありませんでした。

www.digitaprint.jp

エコバッグ

f:id:TokyoIncidents:20151106201747j:plain

こちらは昨年同様 トートバッグ専門店のトートバッグ工房 さん

パンフレット

f:id:TokyoIncidents:20151106201510j:plainf:id:TokyoIncidents:20151106201521j:plain

こちらも昨年同様 印刷の通販(R)グラフィック|ネットプリントで顧客満足度97%

名札

f:id:TokyoIncidents:20151106201555j:plainf:id:TokyoIncidents:20151116001550j:plain

中紙は上記同様グラフィックさん、ストラップとケースは昨年の絡まりやすいという問題の反省を踏まえ、t32k さんのエントリーにあった straps.jp さんにお願いしました。単価高めですw

www.straps.jp

おわりに

今年は去年より比較的楽に事前準備を済ませる事が出来ました。 当日はちょっとバタバタしてしまって。もう少し段取りを考えるべきだったなと反省しています。

こんな機会にしか言えないので言いますが、今回海外ゲストが非常にフレンドリーに親密に接してくれたのはやはり @yosuke_furukawa が io.js にコントリビュートし、Nodeconf に出向き直接コミュニケーションを取ってくれたからだと思います。

要するに古川さんへの信頼があった事が、これだけ楽しいイベントになった一因だと思います。普段面と向かうと言えないのでこの場を借りて言っておきます。

明日からは普段通りスベっている古川さんでいてください :P

運営には拙いところがあったかと思いますが、参加してくださったみなさま本当にありがとうございました!

次世代Webカンファレンスを運営してきた #nextwebconf

はじめに

あっという間に1ヶ月が過ぎ、すっかり旬を逃してしまった感が半端ないんですが、2015/10/18(日) 法政大学外濠校舎にて次世代Webカンファレンスが開催されました。

http://nextwebconf.connpass.com/event/19699/

次世代Webカンファレンスとはなんだったのか

今回開催するカンファレンスは、この「議論」だけからなるものです、それ以外のことはしません。 この趣旨に賛同してくださった、各分野のプロフェッショナルに協力頂き、「次世代 Web カンファレンス」として、開催させていただくことになりました。

上記に尽きますが、いろいろな意見を耳にしました。

趣旨に賛同していただける各分野のプロフェッショナルにお声がけした結果のコンテンツであった事をご理解いただけると幸いです。

今回運営は主催の Jxck、登壇者、動画配信班と私のみで行われました。

こんなカンファレンスがほしいとお考えの方がいたら、ぜひ今回のイベントを参考に開催していただけたらと思います。

(初心者など)聞き手のレベルを意識せず、話したいレベルで話してください 録画を公開させてください(声だけも可)

ここも肝で、わからなかった事を録画で見返せる事が主眼にあります。

※ ちなみに今回僕はアドバイザー的な立場で、過去の運営経験から意見を言っていた位なので、企画、運営についてはほぼ主催が頑張っていた事になります。

平凡なエンジニアの生存戦略

各分野のプロフェッショナルと席を並べて受付をするのは本当に貴重な体験でした。今後こういった機会はもう無いんじゃないかと思います。

次世代Webカンファレンスに参加しました #nextwebconf - YAMAGUCHI::weblog

いずれにせよ、カンファレンスの運営が次世代な感じでした

こういったご意見もいただいて嬉しい限りですね。

主催の Jxck とは東京Node学園祭2011以来の付き合いで良くしてもらっています。

正直このイベントに登壇するエンジニアの方々には遠く及ばない僕ですが、イベントの運営に参加する事で登壇者の皆さんが普段どんな媒体から情報を得ているのか、どういった事に興味を持っているのか、などその人の背中を見る事が出来ます。

やはりエンジニアの端くれとしては少しでも近づきたいし、話を聞きたい、と思うと自然と難しい事にチャレンジする気になります。

こういう機会をくれた Jxck には感謝しています。

おわりに

このイベントが無事運営できたのは協力してくださった登壇者の皆様やスムーズな受付に協力していただいた参加者の皆様のお陰です。 この場を借りて感謝の気持ちを伝えさせていただきたいと思います。本当にありがとうございました!

mruby-hibari を ngx_mruby で (ry

こんなお言葉をいただいたのでとりあえず ngx_mruby を

$ git clone git@github.com:matsumoto-r/ngx_mruby.git
$ cd ngx_mruby

build_config.rb に mruby-hibari を追加

$ git diff
diff --git a/build_config.rb b/build_config.rb
index 2d7d1bf..7dc33ec 100644
--- a/build_config.rb
+++ b/build_config.rb
@@ -46,5 +46,6 @@ MRuby::Build.new do |conf|
   # Linux only for ngx_mruby
   # conf.gem :github => 'matsumoto-r/mruby-capability'
   # conf.gem :github => 'matsumoto-r/mruby-cgroup'
+  conf.gem :github => 'kentaro/mruby-hibari'

build して make して install

$ sh build.sh && make && make install

config ファイルを書き換え

 diff -u build/nginx/conf/nginx.conf.default build/nginx/conf/nginx.conf
--- build/nginx/conf/nginx.conf.default 2015-09-20 15:18:40.000000000 +0900
+++ build/nginx/conf/nginx.conf 2015-09-20 16:20:03.000000000 +0900
@@ -33,7 +33,7 @@
     #gzip  on;

     server {
-        listen       80;
+        listen       8080;
         server_name  localhost;

         #charset koi8-r;
@@ -45,6 +45,21 @@
             index  index.html index.htm;
         }

+        location /mruby {
+            mruby_content_handler_code '
+
+            hibari do
+              res.code = 200
+              res.headers["content-type"] = "text/html; charset=utf8"
+              res.body.push("Hello, World!")
+              req.params.each do |k,v|
+                res.body.push("#{k}: #{v}")
+              end
+            end
+
+            ';
+        }
+
         #error_page  404              /404.html;

         # redirect server error pages to the static page /50x.html

server 起動して /mruby にアクセス

$ ./build/nginx/sbin/nginx
$ curl http://localhost:8080/mruby?hoge=fuga
Hello, World!hoge: fuga

出来た!

ちなみに mruby_content_handler ってフルパス指定じゃないとダメなんでしょうか?

mruby-hibari を h2o で動かしてみた

blog.kentarok.org

あんちぽ先生のエントリーを見てさっそく試してみました。

手元の h2o のディレクトリでこんな感じで動きました。

gist.github.com

なんて簡単なんだ!!!