React/Redux 使ってみての勘所

前回のエントリでは、React/Redux/ES6のざっくりとした感想をまとめました。

mugi1.hateblo.jp

今回はその続きということで、React/Redux利用時において、

  • こうすればよかった!!
  • こうすべきじゃなかった・・

といったところをまとめてみたいと思います。

Immutable.js は使ったほうが幸せになれた

https://facebook.github.io/immutable-js/

javascriptで不変データ構造を提供してくれるライブラリ。(by facebook) これによって解消される問題が多数。

構造がネストした場合の更新が簡単に

「そもそもネストしないような構造にしろよ」という話なのですが、 大人の事情でネストせざるを得ないときもあります。

ネストしたstoreの場合、action経由で深い階層の値を更新したい場合に結構な手間になります。

たとえば user[0].products[2].item.name みたいになってしまったケース。

Object.assignやlodash#mergeなどを利用するのも手だと思いますが、 動作をきちんと理解せずに利用すると、

  • 同オブジェクト内の存在しないキーが落ちる
  • undefinedの値が落ちる(落ちない)

といった状態になり、ハマってしまうことがありました。 気をつければいいのですが、「気をつけているコード」で溢れかえるとかえって読みにくくなったり。

これがImmutable.jsを利用していると

state.setIn(["user", 0, "products", 2, "item", "name"], "yeah");

でstate自体に影響を与えることなく、新しいstateを得ることができます。

記述が統一できる

reducerで新しいstateを生成する際には、引数として受け取ったstateを書き換えず、新しいstateを生成する必要があります。

そのため、state生成時には操作時に注意することが出てきます。

  • 配列の要素を変更する場合
    • Array#concat などで新しい配列を作って差し替える
  • オブジェクトの生成方法が1つではない
    • Object#assign
    • lodashのメソッド(assign/merge/extend/default...)
    • 普通に自力で作成

これらで対応することそのものが問題ではありませんが、「ネストした場合の更新」の欄でも触れた通り、方法によってundefined状態のフィールドの取り扱いが違ったりするため、複数人での開発時には記法を統一するほうがベターだと思います。

「reducerでのstate操作はImmutable.jsで」としておけばそれだけである程度は操作が統一できるため、心理的負担も少し下がります。

比較が簡単に

Reactでコードを書いていくと、どこかでパフォーマンスチューニングのために、shouldComponentUpdate によるレンダリング抑制を書く機会が登場します。

このとき、とりあえず this.propsnextProps を比較して差異がなければレンダリングしない(return false)とするケースが多いのですが、Immutable.jsを利用していれば、=== を利用して容易に比較することが可能となります。

利用しない場合には自力で比較するか、lodash#isEqualなどを利用することになりますが、細かいところでカスタマイズが必要になるケースが多いです。

Reactの公式docにもImmutable.jsに関する記載はありますね。

facebook.github.io

構造をコード上に定義しておける

redux(flux)を利用した場合、アプリケーションの状態を表すstoreは一箇所で管理されますが、初期状態とすべきstore状態をどこに定義するか?という問題が発生します。

reducerファイル内に直接定義してしまっても大丈夫ですが、規模が大きくなってくるとカオスになりがちです。というかカオスになりました。

そこで、Immutable.jsを利用してデフォルトのstore定義のみを定義しておくことで、store全体がどのような構造かすぐ解るようになり、見通しが良くなりました。

また、reducerを分割管理している場合などは、ベースとなるstoreを定義しておき、そこからImmutable.jsのmergeを利用して拡張することで、継承っぽくstore定義していくこともできます。(お作法的にどうなのかは謎)

export const User = Immutable.fromJS({
  id: null,
  name: "",
  email: ""
});

export const AdminUser = User.merge({
  tel: "",
  address: "",
  permission: false
});
function user(state = User, action) {
  switch (action.type) {
    case 'USER_UPDATE':
      return /* update */;
  }
  return state;
}

function admin(state = Admin, action) {
  switch (action.type) {
    case 'ADMIN_UPDATE':
      return /* update */;
  }
  return state;
}

ただ、Immutable.jsはファイルサイズが大きいのがネックとなるケースもあるようです。

ご利用は計画的に。

connectはひかえめに

connect記述により、任意のstoreをsubscribeすることができます。

これを利用すると、Reactで陥りがちなpropsのバケツリレーをぶった切ることが可能となります。

・・が、実際にはあまりこれはオススメできません。 最初はガンガンconnectを利用してコーディングしてしまっていたのですが、後になって色々と問題が表面化してきました。

再利用しにくくなる

connectしてstoreをsubscribeするということは、そのstoreに依存していると言っても間違いではないと思います。 一概に全てというわけではありませんが、大半のケースでは、connectを利用したcontainerは1つの用途に限定されてしまい、「あー、connectsしてるから使えないじゃーん!」というケースが発生して悲しい思いをしました。

パフォーマンスに影響が出てくる

通常のReactコンポーネントであれば、親要素で shouldComponentUpdate によるレンダリング抑制を行った場合、子の要素も自動的にレンダリングが抑制されます。

とても素直な考えだと思いますが、ここで子がconnectしてしまっていると、親からのprops伝搬とは別に、storeの変更時にもレンダリングが発生することになります。

つまり、子自身の中で shouldComponentUpdate による抑制を行う必要が発生します。別にそれでもいいじゃん、という発想もありますが、数が増えてくると shouldComponentUpdate そのものが大量になってしまったり、パフォーマンス低下時に原因を追求するのが難しくなっていきます。

「親で shouldComponentUpdate ちゃんと動いてんのになんでこんなに描画重くなるんだ・・・」というときにこれが原因でした。

というわけで

などなどの理由から、基本的には、connectするのは最上位階層のみとし、子以下には素直にpropsでバケツリレーとするほうが、最終的には可読性・保守性ともに望ましい形のコードになりました。 SPAの場合は、ルーティング単位でrecducer分割してconnectするとちょうど良い感じですが、そのあたりは作成するアプリケーションに応じて差異があるかと思います。

いずれにしても、乱用しないほうが望ましいかも。

Storeはできるだけフラットな構造に

Immutable.jsの欄で「ネスト時の更新が簡単に!」とか書いてますが、そもそもの話としてはStoreはできるだけネストさせないほうが望ましいです。

理由は

  • ネストしていると、undefined/null を意識する手間が増える
  • そもそも更新がめんどうになる
  • PureRenderMixinが使えるようになる

などです。

normalizeするのも1つの方法ですね。

github.com



思い返すと他にもたくさんポイントとなる箇所はありましたが、また同構成を利用する機会があれば、とりあえずは上記は最初から抑えた状態で着手したいな〜という感じです。

ただ、やはりもう少し軽いもの(実装量的に)があれば嬉しいな〜

めまぐるしく変化し続けている世界ですし、2016年にもまた何か大きい変化があったりするのかな。

React/Redux/ES6をしばらく使ってみての所感

ここ数ヶ月、お仕事で以下構成での開発をしています

  • React
  • Redux
  • ES6

徐々に解ってきたと思う(たぶん)ので、感覚がホットなうちに備忘も兼ねて整理。

※個人的な感想も含みます。

良かったところ

React : コンポーネント再利用時の安心感

いままで → なんか心配

従来は、フロントエンドはjQueryをメインに開発をしていました。

jQueryプラグインするなど、後々再利用可能な形で部品化することは従来も行っていましたが、いざ使う時に「これ本当に大丈夫か?」という気持ちになることも多々。

  • 他のプラグインとの相性は?
  • 名前空間の汚染がないか?
  • 依存するHTML上のid/class/attributeで悪影響がないか?

ルールを徹底したり、ドキュメントとして注意点をちゃんと残しておいたりすればある程度は回避できますが、最後は「ある程度覚悟して信頼する」という工程を通っていたと思います。

React : あんしん

Reactでお約束に則ってコンポーネントを作成していくと、propsベースとなり内部には状態保持せず、かつコンポーネント外のDOMには影響を与えない作りとなります。

直接DOM操作もやろうと思えばできるため、100%安心!というわけではありませんが、ポイントなのは「基本的に作ってれば大丈夫」というところだと思っています。

  1. 気をつけていれば安全なコンポーネントにできる
  2. 特殊なコードを書いたときだけ安全ではないコンポーネントになる

では大きな差があると思っていて、後者のほうが圧倒的に信頼できます。

React : パフォーマンスの改善がしやすい

無心でひたすらコードを書いていくと、徐々にパフォーマンスの劣化が気になってきます。 その時に、パフォーマンス改善のためのツールが用意されているのは大きかったです。

今のところほとんどのケースにおいては

  1. Perfomance Toolsボトルネックになってるコンポーネントを探す
  2. shouldComponentUpdateでがんばる

でだいたい問題とならないレベルまで改善が可能でした。 パフォーマンス劣化時に、問題となる範囲が想定しやすいのも良いですね。

jQueryをdisっているわけではありませんが、 効率の悪いセレクタを探したりDOMの操作回数をできるだけ減らす努力をしたりして地道に頑張っていたのはなんだったのかと。

(とはいえ、対応できないレベルのパフォーマンス問題にぶつかったら考えは変わるかもしれません・・

ES6 : たくさんの幸せ

ES6が便利すぎて半端じゃないです。ES6なしではjs書けない体になりました。

アロー関数
  • コールバック系が書きやすいし読みやすい
  • self = this がいらない幸せ
spread operator
  • argumentsって書く頻度が激減
スコープまわりのあれこれ
  • ブロックスコープとか
  • const/let とか
  • 即時関数もあまり使わなくなった気がする

これだけじゃないですが、本当に痒いところに手が届くようになった感じ。もう戻れない。

つらかったところ

記述が超増える!!

React/Reduxともにですが、どうしてもコード量が大幅に増えます。

Reactの場合、Reduxのところでも少し触れましたが、propsが怒涛のリレーになることが多いです。 階層が深くなればなるほど propsが増えていき、コードの記述量が増えて行くのはなかなか大変。

Reduxについては、ビジネスロジックとデータ(store)の管理を綺麗に分離することができますが、確実に大幅にコードが増えます。

レイヤーが増えるから仕方ないとは思うのですが、簡単な画面の作成時でも

  • view
  • container
  • component
  • action
  • reducer

などと、多岐に渡る修正が必要となり、新規ファイル作成量も多いです。 「1つボタンを増やして、押したらAPIを読んで結果を別のとこにレンダリング」というだけでも、結構なコードを書く必要があります。

おまじない的にコードを書かないといけない感じもあり、java/strutsを使ってweb開発していたころを思い出しました。

役割を分離できることで粒度の細かいテストを書けるなど、 恩恵が大きいのも理解はできるのですが、恩恵以上にすごい勢いでコードが増えていくな〜と。

実際には作業スケジュールも加味しないといけないので、 全コードに対してテストを書いている余裕がないのが現実だったりもします。 その時に、コードが多ければ多いほどネガティブな影響を受けやすいのではないかと。

とはいえ、Fluxのデータフローを1方向にするという思想自体はとても良いものだなと思います。 コードが増えるは増えるのですが、実際に読む際には流れを追いやすい。

このあたりは実装側の問題もあるかもしれませんが、 同じような問題に悩んでいる人は多いのかな〜・・?

ES6 : 使う準備が大変

ES6が、というわけではありませんが、ビルド環境の整理が大変です。 このあたりは私の先輩がゴリゴリに組み込んでいましたが、それでも大変そうでした。

あとは使っているとあれもこれも入れたくなってくるので、 どんどんカオスになっていくpackages.json

ある程度自重するのも大事なのかもしれません。


まだまだ解ったような解っていないような感じですが、トータルでまとめると

  • React : 良い
  • Redux : つらい
  • ES6 : 良い

といった感じです。

React/Reduxについては、ベストプラクティスと言うのはおこがましいですが、 円滑に開発を進めるための勘所みたいなところも多々あると思います。

そのあたりについてはまた別の記事でまとめてみます。

Toyama.rb #03 「倉貫義人さんと語らう会」を開催しました!

f:id:mugi1:20160206131126j:plain

2/5(土)に、Toyama.rb #03 かつスペシャル企画として、「倉貫義人さんと語らう会」を開催しました!

toyamarb.doorkeeper.jp

語らう会?

今回お招きしたゲストは、株式会社ソニックガーデンの代表取締役 倉貫義人さんです。 「納品のない受託開発」という新しいビジネスモデルや、リモートワークを積極的に実施されるなど、様々な新しい取り組みを行っている方です。

私個人としては、以前から書籍を購入して拝読していたのもあり、お名前は知っていたのですが、「あの有名な凄い人」のような、雲の向こうの人だと思っていました。

身近なつながり

きっかけとなったのは、Toyama.rbにも参加してくれている私の会社の先輩が、倉貫さんと知り合いだったことです。その先輩からの紹介で、今回のイベントに繋がりました。いずれにしても、Toyama.rbをやっていなければ実現しなかったと思うので、思い切って始めて良かったです。

内容

どんな内容にしたらいいか?と相談・検討していた結果、「ビアバッシュにしたらいいんじゃない?」という話に。

いいですね、ビアバッシュ!やりましょう!ビアバッシュってなんですか!!?


(...googleで検索 )


どうやら普通のセミナーとは違い、お酒や軽食を片手にわいわいとゆるい感じで歓談するイベントのことを指すようです。たのしそう!ということでビアバッシュに決定。

メインテーマは、今回倉貫さんが2冊目の書籍「リモートチームでうまくいく」を出版されたこともあり、リモートワーク・リモートチームを軸に進めることとなりました。

準備

こちらのブログを鬼のように参考にさせていただきました。 本当にありがとうございます。

d.hatena.ne.jp

イベント当日

イベント当日は以下のようなタイムスケジュールでした

  • 1時間ほど : 倉貫さんによるセッション
  • 15分ほど : 準備
  • 2時間ほど : ビアバッシュ

初めて参加してくれた方も多く、普段のもくもく会の倍ほどの人数が集まりました。 (Ruby!というテーマではないので、あまりToyama.rbの名前を出さなかったのもあるのかもしれません)

f:id:mugi1:20160206140412j:plain

最初の1時間は倉貫さんのセッションです。

富山県という地域の特性か、SIerのエンジニアの方が多い印象で、リモートワークという刺激的なテーマに対して、かなりのめりこんで聞いていた方が多かったように思います。

私自身は内心、「ちゃんとビアバッシュのピザ届くのか・・!?」とドキドキしていたのは秘密。


(ちゃんととどいた)

f:id:mugi1:20160206150103j:plain


ピザが届いたタイミングでビアバッシュ開始!
ピザーラのピザはとてもおいしかった。)

f:id:mugi1:20160206151530j:plainf:id:mugi1:20160206151524j:plain


倉貫さんのお話しされる内容は、いい意味で心に「グサリ」と来ることも多かったです。参加される方も色々思うところがあるのか、時折全員が空を見つめてしんみりしているのが印象的でした。笑

でも、そうやって改めて考える、というのも貴重な機会になったのではないかと思います。

リモートワークに限らず様々な質問も飛び交い、気づけばあっという間に時間となりました。


最後は全員で記念撮影をして終了!

f:id:mugi1:20160206174216j:plain


主催としては多々至らぬところもありましたが、無事にイベントを終えることができたと思います。

個人的な感想

個人的に倉貫さんのセッションやビアバッシュでの話で印象に残っているのは、「そもそもなぜ採用するのか?」というところに多くのテーマが集約していくところでした。

たとえば、リモートワークでセキュリティの部分が気になっていましたが、まず、オンプレ環境よりそもそもAWSなどのクラウド環境のほうがむしろ安全なのでは?というのは前から思っていた部分でした。

それでもセキュリティ面を課題とされるのは、個人による情報の不正利用などをリスクとして懸念している部分が少なからずあると思います。

であれば、「なんで信用できない人を採用するの?」ということに。

逆に言えば、チーム内・お客さんも含めて適切な信頼関係を築くことができていれば、柔軟に仕事に対応することができるようになり、コスト面などにおいても恩恵が大きいと。

採用してからのリスク対策などのためにコストをかけるより、最初の採用時点でじっくり労力とコストをかけることで、全体が円滑にまわる仕組みができているのはとても興味深かったです。

どうしてもこの業界にいると「そんなのは理想論だ」という意見も聞きがちですが、実現されているチームが存在している限り、これは理想ではなく真理なのでは、と思いました。

イベントを終えて

なんとも緊張しましたが、とても充実した1日となりました。
参加者の方にも楽しんでもらえた(と私は思っている)ようです。

そして、はるばる富山まで来てくださった倉貫さん、本当にありがとうございました!



次回

次回は平常運転でもくもく会を行います。

興味のある方はどうぞ!(今回も富山&東京の2会場開催です!)

toyamarb.doorkeeper.jp toyamarb.doorkeeper.jp

Toyama.rb #02 もくもく会とリモート

仕事が激務で更新できていませんでしたが、Toyama.rb #02 / #03(ex回) を開催しました!

とても充実した内容となりました!

今回は #02 の主催レポートです。(ex回となった #03 については近日中更新)

Toyama.rb #02 - もくもく会

f:id:mugi1:20160109132608j:plain

第1回と同様、もくもく会を開催しました。

が、1回目と決定的に違う点が1つ。

リモート開催

第1回目の参加者のうち、数名は 「心は富山、体は東京」という方でした。

(東京からわざわざ来ていただいたことに本当に感謝)

参加したいけど、さすがに毎回富山にくるのは難しい。。。ということで、@kunitoo さんにリモート側の主催者を担当していただき、東京側との2拠点同時開催とすることに!

課題

いいですね!やりましょうやりましょう!!!と勢いで言ったものの、課題がもりだくさん。

  • どうやって繋ぐの?
  • 安定した回線確保できるの?
  • 機器類とかはどうするの?

いろいろと相談・検討した結果。。。

解決案

  • 接続
    → appear.in, だめなら GoogleHangout
  • 回線
    → Toyama Free Wi-Fi に託す。だめならLTEテザリング)で頑張る。
  • 機器
    → 私がなんとかして用意

といった具合に。

特に心配だったのが回線。安定とかそういう以前に、そもそもポートとかの関係でまったく繋がんなかったらどうしよう?とも思いましたが、事前にiPhone + LTE + appear.in での接続確認をしたところ、意外と問題なく接続できることが判明。

つまり、私のパケット上限さえ無視すればいける!!

(とはいえ、第1回開催時のもくもく中は意外と静かだったので、開始と終了時だけ繋がれば最悪なんとかなるかな〜という算段でした。)

当日

富山会場6名、東京会場5名(残念ながらおひとりは風邪で欠席)が集まってくれました!

あわせれば11名なので、1回目よりも多い人数に。いやほんと皆様ありがとうございます。

イベント企画

ソニックガーデン伊藤さんのブログでもかなり前にご紹介いただいていますが、今回は東京とのリモート開催に加え、西脇.rb&神戸.rb さんともリモートで接続し、ちょっとしたイベントを盛り込みました。

同じ日に勉強会開催で、かつ同じ日にリモート開催という、なんとも色々と偶然が重なった結果実現に至りましたが、まず発案していただいた伊藤さんに感謝です。

イベント内容

短い時間でパッとできるもの!ということで、会場別対抗 Rubyクイズ大会を開催。

私は事前に問題を知っていたので、背後でニヤニヤしながら見ていました。


総力で挑む富山会場の図 f:id:mugi1:20160109145855j:plain

クイズ自体も盛り上がりましたが、何よりも、普段Rubyにはそこまで関心の無い参加者の方(※)からも「Rubyにちょっと興味が出た」と言ってもらえたことが嬉しかったです。

※Toyama.rbでは、Rubyがベースだけど何やっても別にいいよ!というスタンスでございます。

最後に記念撮影をして、無事にイベントは終了!

f:id:mugi1:20160211164455p:plain

第2回をやってみて

リモート開催でも意外となんとかなりました。不安いっぱいでしたが、致命的なトラブルはなかったように思います。

Toyama Free Wi-Fi が想像以上に安定していたのもあります。ありがとう富山県

ただ、やはりすべてがうまくいったわけではなく、改善すべき点もいくつか。

発表がしづらい

クイズ大会終了後は、再度Toyama.rb側はもくもくに戻り、最後には例のごとく成果発表会を行ったのですが、これがいまひとつだったかな〜というのが反省点です。

まず、発表者がappear.inに入っていただき、両会場でそれをスクリーンに映すような形をとったのですが、空気感がうまく共有できず、あまり質問もなく淡々と進む感じになってしまいました。

マイクをちゃんと用意できなかったのが根本原因なので、次回はなんとか改善したいな〜と思います。

ともあれ

全体で見ればうまくいったのではないかな?と思います。何事もやってみるもんですね!!

西脇.rb&神戸.rbのみなさん、勉強会に参加していただいたみなさん、本当にありがとうございました!

3月開催予定のもくもく会も同様に2拠点開催予定なので、興味のある方は気軽にご参加をどうぞ!


ちなみに....

今回のもくもく会で、私は react-rails を触っていました。
基本はこちらのQiita投稿を参考に写経。

仕事でRubyは使わないものの、react/redux/es6 あたりはガッツリ使うので、せっかくなのでそれ絡みで何かやってみよう!という感じ。

サーバサイドレンダリングの動きを確認できたようなできなかったような。。

react-railsに限った話ではないですが、Railsとエッジなフロントエンド技術を併せた場合の無難な着地点ってどこになるんでしょうね?次回はそのあたりをやってみようかな〜


懇親会のもつ鍋。うまかった。 f:id:mugi1:20160109180921j:plain

Toyama.rb もくもく会 1st を開催しました!

f:id:mugi1:20151205124515j:plain

2015/12/5 富山県民会館にて Toyama.rb もくもく会 1st を開催しました!

そもそもの成り立ち〜開催終了までのレポートです。

もくじ

  • Toyama.rb ができるまで
  • 事前準備
  • 当日の流れ
  • 主催してみて
  • 今後

Toyama.rbができるまで

よくよく考えると、私が10月に西脇.rb&神戸.rb主催のRubyプログラミングキャンプに参加してきたことが始まりなのかもしれません。

mugi1.hateblo.jp

人生初の勉強会でしたが、 そのまま勢いで金沢で行われているkanazawa.rbにも参加してみたりしました。

結果、「富山にもRubyコミュニティがあればいいのに・・」と思うように。

そんなことをFacebookなんかで呟いていると、

「それなら作っちゃえばいいじゃん!」

という意見もいただきました。

いっちょやってみるか!と思う気持ちはありましたが、主催するとなると、ただ勉強会に参加するのとはわけが違うよなぁ〜と思ってました。

何よりも、負荷もかなり違うという話を聞いたのもあり、自分だけではなくもう一人主催者が欲しかったです。

社内勉強会で「誰かやろうぜ」みたいなことを言ってもみましたが、予想通りというか誰も反応せず。結局動けずに悶々としておりました。



が、ある日このブログに1件コメントが。




f:id:mugi1:20151206225804p:plain

衝撃でした。 何よりも世の中の狭さに驚き。


まさか西脇.rb&神戸.rbの伊藤さん経由で富山のRubyistを紹介されるとは....


この機会を逃すわけにはいかん!

というわけで、ここからToyama.rbがスタートしました。

事前準備

内容は「もくもく会をしたい!」とスパッと決まりましたが、会場選びで悩む。何より、どこもかしこも富山の会場は値段が高め!

お、ここいいんじゃないのか?と思っても、

  • 富山駅から超遠い
  • ネットは別料金
  • 空調は別料金(死ねる)
  • とんでもなく早く閉館する

などなど。

10〜20人程度の参加を確定で見込めるなら良いのですが、ここは富山県。そもそも地元でRubyの仕事なんて聞いたことがないし、Rubyist存在するのか?

最悪2〜3人で開催っすね!みたいなことも話していたので、下手に大きい会場をとってしまって赤字になってしまっては私の個人的な財布が悲しいことになります。

いろいろ考慮した結果、最終的な会場は「富山県民会館」になりました。

f:id:mugi1:20151205120356j:plain

決め手は以下。

  • 財布に優しい
  • wifiが使える
  • 富山駅から近い(徒歩圏内)


さて、会場は決まりましたが、もう一つ決めなければいけないことが!



コミュニティ名はどうする!?

今でこそToyama.rbと書いていますが、最初は以下の候補がありました。

もう後半は正気とは思えないネーミングですが、富山県らしくていいんじゃないか!?と一瞬思ったので候補にあげてました。

結果、他の地域Rubyの名前を参考に素直にToyama.rbにしました。(理性が勝った。)


募集

募集はDoorkeeperで。初めて使ったのでドキドキしましたが、ここはスムーズでした。

あとは人が集まることを祈る・・

当日の流れ

13時開始だったのですが、「早く着かなきゃ!!」と思った私は、なぜか11時半には現地にいたことは大きな声では言えない。

早すぎたので近くの喫茶店でオムライス食べてました。


最終的に集まった人数ですが、なんと8人でした。
「最悪二人っすね」とか言っていたので、これはかなり驚き。


当日は以下のような流れで進めました。

  1. Toyama.rbについて簡単なお話 (by 私)
  2. 各自自己紹介 & やること発表
  3. もくもく
  4. 成果発表会


参加者は多種多様で

  • 独学でやってる。いつか会社で使いたい。普段はJava/javascript (私)
  • 普段からバリバリ使ってるぜ!
  • リモート勤務です!
  • 神奈川から来ました!

などなど。
そしてやるテーマも個性的!

募集時にはRubyで縛るかどうかも悩んだのですが、
交流自体も立派な目的だな〜と思ったので、
あくまでも主軸がRubyで、関係なくてもOK!ということにしました。


(もくもくの図) f:id:mugi1:20151205152509j:plain


slackの利用

西脇.rb & 神戸.rb や kanazawa.rb の内容をパク・・
参考にさせていただいている部分がとても多かったのですが、
この点だけはオリジナル要素なのかな?と思ってます。

以前参加させていただいたプログラミングキャンプ時の個人的な反省として、「もくもくに集中しすぎてコミュニケーションとるの忘れてた」というのがありました。

でもよーく考えると、

  • みんな集中してるのに喋るのはためらいがある?
  • えー、でも聞きたいことは聞きたいよ?

と、意外と難しい課題であることに気づく。


そこで、普段業務で利用しているslackを使ってみました。

slack.com

要はチャットなのですが、メンバー全員をslackのmeetup用チャンネルに招待し、そこで自由に独り言でもなんでも発言していいですよ!という扱いにしてみました。

そして意外とこれが(思いつきで導入したわりに) 好評でした。
目の前にいるのにチャットってどうなの!?という気持ちもわかりますが、もくもくに集中しだすとまったく見なかったりもするので、ちょうどいい具合で関わりを作ってくれたんじゃないかと思います。


ちなみに招待は⬇︎をherokuにデプロイして利用しました。

rauchg/slackin · GitHub


発表会

もくもく後は発表会を行いました。

f:id:mugi1:20151205163704j:plain

良い意味で予想外だったのですが、これが思いのほか盛り上がり、ちょっと時間が足りない状態になってしまいました。

懇親会会場の予約が17:30で、発表中に17:35になっていて一人こっそり焦っていたのですが、さすがに参加者にはバレているかもしれません。

次回以降は、もう少し余裕をもって発表会の時間の確保しよう。


...といった具合で、あとはお片づけをして懇親会に繰り出し、
良い具合に酔っ払ったところで解散となりました。

主催してみて

勉強会に初参加したときも同じ事を言ってますが、「意外となんとかなるもんだな!」というのが感想です。

参加者がみなさん良い人だったのも大きいです。

勢いで全部やってしまった

私自身が一度必要な準備作業をすべて体験してみたかったのもあるのですが、ついついほぼ全部一人でやってしまった感が・・

やること自体は私は何ら苦ではないというか、色々経験できてむしろ少し楽しいぐらいだったのですが、コミュニティ自体の継続開催を考えたときに、一人で全部やってしまっていると、私が参加できない場合に開催できなくなってしまうので、これは反省点だな・・と思いました。

というわけで、次回以降少しずつタスクを分けていければみんな安心ですね! (@zappar200 さんよろしくお願いします!)


今後

確定というわけではないですが、極力月1回程度のペースで継続開催を考えており、次回2016年1月にも #02 を開催する方向で現在進めております。


そして・・


次回は東京にリモート会場も設けて開催予定です。

今回の #01もくもく会 で関東在住の方が数名参加されていたのがきっかけです。

ちゃんと回線繋がるのか!?といった不安要素も多いですが、もくもく会中はslackがつながればいいんだからなんとかなるでしょう!といった、とりあえずやってみようぜ精神で開催します。

詳細はまたDoorkeeperで告知すると思いますので、興味のある方はぜひ一緒にもくもくしましょう!



最後に、参加していただいた皆様、
そしてきっかけを作っていただいた 西脇.rb 伊藤さん、
本当にありがとうございました!


以上、主催レポートでした。

おわり

Toyama.rb もくもく会 1stを開催します!

富山でRubyコミュニティがあればいいのにー!

と言っていたところ、
Toyama.rb が本当に誕生しました。

第一回イベントのお知らせ

2015/12/5に第一回もくもく会を行います。

toyamarb.doorkeeper.jp

詳細は上記Doorkeeperイベントページから!

(至るまでの経緯などはまた開催後に詳細なレポートを作成します。

参加について

2015/11/29現時点では6名/最大10名と、まだ4名分の枠があります。
興味がある方はぜひ気軽にどうぞ!

よくありそうな疑問・質問
  • Ruby初心者なんですけど・・
    →そもそも私が初心者なので大丈夫です!

  • Rubyじゃないとダメですか?
    →交流自体もひとつの目的なので全然okです!

  • 勉強会がはじめて or あんまり行ったことないので心配です
    →人生初参加の勉強会で富山から兵庫まで行った人が言うには、
    行ってみれば意外と「あ、大丈夫だ」と思うそうです。

終わった後には懇親会も予定しています!(自由参加です)

あなたのご参加をお待ちしています!

富山から西脇.rb & 神戸.rb主催 Rubyプログラミングキャンプ 2015 に参加してきました

2015-10-10〜2015-10-11にて、
西脇.rb & 神戸.rb主催の Rubyプログラミングキャンプ 2015に参加してきました!

主催の伊藤さんのブログにも掲載されております。blog.jnito.com

他の参加メンバーと違うのは、
私は「富山県からの参加」というところだと思います。

実際にやったことやタイムテーブルなどは
伊藤さんのブログをご参照いただければ良いかと思うので、
私は勉強会初参加&遠隔からの参加という観点でレポートにしてみます

もくじ

  • 申し込みまでの経緯
  • 初勉強会
  • 遠方からの参加について
  • 今後


申し込みまでの経緯

趣味のRuby

仕事ではJava/JavaScriptを主に利用していますが、
以前からRuby/Railsを趣味で触っていました。
ただ、やっていることといえば

と、出家したかのように写経ばかり。

一体次は何をしたら?と、独学の限界を感じ始めていたころ、以下ページに辿り着きました

nishiwaki-koberb.doorkeeper.jp

一泊二日のプログラミング合宿!
これは面白そう!でも・・

距離の壁

そもそも私は富山県に住んでます。
最近東京と新幹線が通りました。

そして会場は三木というとこだそうです。

三木!?どこ!?

約380km

これは遠い!

それでも参加してみたい

今まで勉強会というものへの参加に意欲的ではありませんでした。
参加したとしても、

  • ほぼ会社の命令で参加
  • 出たほうがスキルアップできるかなぁ〜みたいな義務感で参加

みたいなケースがほとんど。

自分から「参加してみたい!」と思ったのは初めてだったので、こういう機会は逃したくないー!

でも、どうやら参加には定員があるようで、
パッと見たところ定員はあと1名・・・

「やっぱり人気なんだな。すぐ埋まるだろうし、埋まれば諦めもつくな」

と自分に言い訳をしつつも案内ページをちらちらチェックしていたのですが、これがまた意外と埋まらない。

それとなく妻に見せる

おもいきって妻に見せてみました。
だめ!って言われたらそれで諦めようと・・・


私「こんなのあるんだよねー、でも遠いからねー、きびしいよねー」


そして


妻「行きなさい!」
(※実際は富山弁)


まさかの背中を押してくれる結果でした。
これが決め手になり、その日の夜には参加ボタンをポチってました。

正直これが無かったら行ってなかったかもしれません。妻に感謝です。

初勉強会

というわけで飛び込んできた勉強会でしたが、ありきたりですが

  • とても楽しかった!
  • もっと早く参加すればよかった!

という感想です!

Rubyでもくもくしに行ったつもりだったのですが、むしろ技術への考え方や姿勢というものを改めて見つめ直すことができたほうが大きかったかもしれません。

そして何よりみなさん優しかったです。

実は勉強会前日からすごい体調が悪く、
声もほとんど出ないような状態で参加していました。
(この芸人さんに近かった)

「うわぁ、変な声のやつが田舎から来たわぁ」
と思われるな、と泣きそうになってたんですが、
そんなことは微塵もなく、とてもフレンドリーに接していただけました。

手を動かすことって大事

いままで勉強会といえば、話を聞くだけのようなものがメインでした。
けど正直、そういったスタイルで参加した社外勉強会は、90%は内容を忘れています。

しかし、手を動かして得た経験は習得具合がかなり違うと思っています。

社内でも定期的に勉強会が行われていますが、これもやはり講師の話を聞くだけの形がほとんどなので、ハンズオン形式も取り入れていきたいですね〜

発表会って大事

そして、発表会があったのも個人的には大きかったです。

1日目と2日目の終わりに中間・終了発表の機会があり、一人5分くらいと短いものではありますが、これが集中具合をかなり上げてくれたと思っています。

発表会があるんだ、という簡易的なゴールが設定されていると

  • これを先にやったら間に合わないな
  • 細かく作って成果として残そう
  • とりあえず中間までは〜を目標にしよう

と、必然的にダラダラしないで作業をすることができました。
メリハリって大事ですね。

遠方からの参加について

よかった点

違う世界に触れられた

私が調べた限りでは、富山にはRubyコミュニティがありません。
そして、いわゆるWEB系企業というのもそこまで多くないという認識です。

働き方というよりも、生き方のレベルから違う人々と触れ合えるのは
とても貴重な体験になったと思っています。

環境を変えてみる、というだけでも得られるものは多かったです。

凄まじく集中できる

遠方じゃなくても集中できるから!という意見もありますが、
遠方の場合は以下のような状態が自動的に発生します

  • お金の問題
  • 時間的制約

遠方参加の場合はどうしても交通費などが発生します。
今回の私のケースでは、前泊もしたので、+1日の宿泊費も発生しています。

さらに、気軽に出かけて参加というわけにはいかないので、次に参加できるのは一体いつになるのかはわかりません。もしかしたらもう参加できないかもしれません・・

こうなるともう「やるしかねえ!」という気持ちも少しは発生します。
生々しいですが、こういうのは単純で効果的なのかもしれません・・

よくなかった点

少し寂しくなる

参加者のみなさんと仲良くなれた(と私は勝手に思っている)のですが、これで次に会えるのが一体いつになるのか解らない、というのが寂しく、一番残念な点かもしれません。

本当に素晴らしいコミュニティだと思ったので、気軽に行けるなら毎回でも参加させていただきたいくらいでした。

慌ただしい

土日での合宿でしたが、私は金曜のお仕事終了後から移動したのですが、これがまたなかなかハード。

移動に5時間以上かかるうえ、体調も悪いということで正直ちょっとしんどかったです。「いけるっしょ!余裕余裕!」とナメてかかっていたのですが、もう学生の時のような若さはないんだな、と悲しい現実を突きつけられた気分でした。

次に遠方の勉強会に参加する機会があるならば、もう少し余裕をもったスケジュールを組んだほうがよさそうです。

今後

「ああ面白かった」で終わってしまうともったいない。
そういうわけで今後どうする?というところを考えてみました。

他の勉強会への参加

今回の参加で思ったのは
「参加してみればなんとかなる」というところでした。
積極的に(妻に頼んで)他の勉強会にもどんどん出てみようかと思います。

※ちなみに先週に早速他の勉強会に行ってきました。

Ruby/Railsでちゃんと形にする

今回の勉強会で作ったのは、プライベートネットワーク向け共有ファイルの検索システムでした。未完成ですが、そもそもは社内利用を目的に考えていたので、これを社内で稼働させて使ってもらえるところまではなんとか持っていきたい・・

とりあえず今もじわじわ機能を足してコミット中です

富山のRubyコミュニティをなんとかする

もくもくできるようなコミュニティが富山にもほしい!
なんとかしたい・・!
まずは仲間探しかな〜

本屋にRubyの本が売ってるんだから
きっと他にも富山でRuby好きな人はいるはず!

まとめ

  • 参加してよかった!
  • 悩んでる時間は無駄だった
  • 西脇.rb & 神戸.rbのみなさんありがとうございました!