2017-12-11

私的 Rails Girls 2017の振り返りと2018にやりたいこと

この記事は、Rails Girls Japan アドベントカレンダーの10日目の記事です。

昨日は、okuramasafumiさんの「 Rails Girlsのコーチを初めてやってみて」でした。
More! のコーチにも参加して頂いて、ありがとうございます!


2017年ももうすぐ終わりなので、今年これをやったぞーと、来年はこれやってみたいぞーというのをあげてみたいと思います。

2017年振り返り

2017年、コーチなどでお手伝いした Rails Girls Japanのイベントは、
以下の3つでした。

Tokyo 7th

Tokyo 7thは、Kyotoでもオーガナイザーをしていた atttsumi さん と、Tokyo 5thからコーチで手伝って頂いている sinamon129 さんがオーガナイザーでした。
いつもの熟練コーチの他にも、初参加して頂いた学生コーチの方がいて、
新しい風~が吹き始めた感がしました。

atttsumi さんと sinamon129 さんのコンビが、どんどん動いてくれたので、
私はアフターアフターのお店探しと、当日の写真係くらいでした。
二人のパワーすごい~と感心した回でした。

Toakasaki 1st

群馬で初開催ということで、お手伝いに行ってきました。
オーガナイザーの近藤さんと大畑さんには、Tokyo 7thのスタッフで参加して頂いてのですが、すごく頑張ってる雰囲気が伝わってきたのが印象的でした。
インストールデイを終えて、satomicchy とご飯でも軽く~と思っていたら、
河野夫妻と合流 & 意気投合して、忘れられない 高崎の夜を過ごしました。

あと、実は同僚が申し込んで参加していましたw
普段は組み込みの仕事をしている方なのですが、Rubyコミュニティの楽しさを体験して欲しくて、前々から誘っていたのですが、今回の高崎でやっと重い腰をあげてくれました。
参加した感想聞いたら、「すごっく美味しかった!(ランチの鳥めしと焼きまんじゅうが気に入ったようです) 楽しかった!」だそうです。


Tokyo 8th

Tokyo 1st 参加者で、More!も参加して頂いている shokolateday さんがオーガナイザーでした。
コーチの素振りで、「この業界に入った理由」をコーチの方々に聞いてみたいということで、皆さんに質問したのですが、そういう話を聞いたことがなかったので、
知らなかったーというお話も聞けて、普通に面白かったです。
SNS映えしそうないいね♡の枠を作ったりと、デザイナー魂が火を噴いた回でした。
いつもの心強いコーチ以外にも、マネフォや万葉さんからのコーチも多く参加して頂きました!
女性コーチも増えて、本当にうれしい限りです!

Rails Girls Tokyo, More!

毎月開催している Rails Girls の参加者の方や、Rails に興味ある方のための勉強会です。
3月の年度末に、年度の振り返りということで、ゆる~いLT大会をして、
skypeで yotii23さんとkatorieさんに参加して頂いて、
おふたりの赤ちゃんを拝見しました~!とってもかわいい!!!
当時、育休中で、この機会に色々勉強をされているとのことでした。
お子さんのいる方でも、More!に参加できる方法とかも今後検討していきたいなー。

また、今年は参加して頂いたコーチの方から、色々アドバイスを頂けました。
「こうしたらもっとよくなるんじゃないかな?」とか、「こういうのやるのはどうだろうか」とか、本当にありがたいです。
2018年、少しずつ進めていきたいなーと思っています!

Rails Girls Japanメンバーとして

Rails Girls 開催のお手伝いの他に、年間スポンサーの方にメールを出したりしました。
前は、何度も見直していた英語メールも、だいぶ慣れた気がします!
だいぶ、鍛えられました。

その他

Rails Girls とはあまり関係ありませんが、
RubyKaigi 2017の時に、「エモリハウス」というのをやりました。
女性で一人でホテルに泊まるのが抵抗ある人もいるかなーと思ったのもありますが、
「みんな一緒だと、楽しいじゃん?」というのが一番の理由です。

いつも一緒にわいわいやっている Rails Girls のメンバーの他にも、
pupupopo88 さん、shio_chanさん、imaz さん(...台風で来られず...😢)もご応募頂いて、ありがとうございました!

2018年やりたりこと

Rails Girls Tokyo, More!

先日参加された方がお話されていたのが、「プログラミング教室に通っているけれど、講師も参加者も男性ばかりで、すごくいずらいので、More!ありがたい」ということだったので、毎月開催を、2018年もやっていこうという気持ちです。
あと、先日、okuramasafumiさんと話していて出てきた案なのですが、
今の月1回週末に昼頃から集まり、夕方までする以外に、
平日の夜、時間を決めて、チャットをオンラインにしておいて、作業を行う。
作業をしていてわからなかったら、その時に質問するというのはどうかな?というのがありました。

でね、気づいちゃったんですよ。
チャットなら、Tokyoだけで限定する必要もないんですよね。
ということは、More!開催しているところで、協力しあえば、開催回数も増やせるのでは?

【業務連絡】More!を主催している方々、後で連絡するので、↑相談させてください!


あとは、Rails Girls 参加の後、どうやってRailsの勉強を進めていくか... というところが課題となっています。
作りたいアプリがある人は、それを作ればいいのですが、作りたいものないけど、
勉強は続けたい人は、どうしよう?というのが悩みどころです。
gitコマンドの勉強の回とか、簡単なアプリとか、カリキュラムのようなものをいくつか準備しておくといいのかなーというがあったので、それも2018年検討してみたいなーと思っています。

最後に

来年も皆さんに協力してもらいながら、やっていこうーと思っていますので、
ご協力お願いします!

明日は、TakayaKanatoさんです!
参加者の方ですね!楽しみ~!

2017-12-09

女子エンジニア忘年会でLTしてきた話

この記事は、株式会社ケーシーエスキャロット アドベントカレンダーの8日目の記事です。

昨日、女子エンジニア忘年LT会 2017 で、LTしてきたので、そのお話を。

Wedding Parkで開催されました。
CyberAgent, GitHub, Goolgle もスポンサーだったようです。
フォトジェニックなカップケーキ!!! もちろん撮りました。





今回は、「技術のお話してください」とお声がかったので、何を話そうかと考えていたのですが、Rubyでない方も多いかなーと思って、
”What's your favorite method?" というタイトルで話をしてきました。

初めてRubyKaigiで発表した後に質問しにきてくれた方にされた質問で、
その後、何度かこの質問されたことがあるので、
知らないエンジニアと話すきっかけ言葉 みたいなものだと、個人的に思っています。

今回知らない方も多そうだったので、この話をしてきました。
自分の好きなメソッドの話と、 この一言をきっかけに、 ライブラリ(gem) のコードの中、ライブラリを作った人とつながって、世界が広がっていくと楽しいよ!というお話をしてきました。

プログラマーの方が多かったのだけれど、言語聞いたら、Rubyはほとんどいなかった...
PHPの方が多かったみたいです。
参加者の方もCyberAgentグループの方が多かったのかな?
スタッフの方に聞いたら、CyberAgentグループの女性エンジニアの方たちで、
もともとLT大会みたいなことをやっていて、
今回は公開して開催したそうです。

新人の方や、急にCTOになった方、プロジェクトリーダーされている方と
色々な方のLTがあって、和気あいあいした感じで楽しんできました!
もちろんお料理も美味しかった!



Rubyコミュニティや、他のイベントに出かけるようになって気づけたことなのだけれど、社外の色々な人と話をするのは、とても刺激になります。
色々な話を聞いていると、「あ、これ、あれで試せそう~」と新しい考えがわいてきたり、
新人の方の話も、当然私の頃とは時代が違うわけで、聞いているだけで、
「おぉぉぉー、すごい」と素直に思います。
新人の頃なんて、よくC言語で無限ループ作って、Ctrl+C を押してた記憶しかないですもん。

今回このアドベントカレンダーを勢いで作ったのも、
ちょっと、こういう社外のイベントに参加してもらうきっかけになったらいいなーと
個人的に思ったからなのでした。


「私なら何書くだろ?」って考えて、社外の何かに興味をもってもらえたら嬉しいなー。

2017-12-04

家に未来がやってきた

我が家に Echo Dot がきた。

実は、会社の忘年会のBINGOの景品に、Google Homeと、Echo Dotのリクエストをだしていたんだけれど、
Twitterで、抽選しているのを見かけて申し込んだら、抽選にあたったのでした。

前に見ていた FOXのキャッスルというドラマで、スマートスピーカのネタの回があって、「未来だ!!!」と思ってみていたのだけど、
まさか、我が家にもそんな未来がやってくるなんて!

配達されてすぐに実家に行く用事があったので、そのままAmazon段ボールごと実家へ持って行って、開封。

wifiのセットアップもしてたら、姪っ子と甥っ子が来て、設定終わるなり、
「アレクサ!〇〇かけて!」「アレクサ!〇〇かけて!」... 彼らが飽きるまで、曲最後まで聞けなかった...


まだ家電の環境はないので、音楽やラジオかけたり、スケジュール確認したり、
時間や、交通情報確認したりするくらいかなーと。
あとは、レンタカーで遠方に行くときに、iPadでAmazon Prime Musicをよく聞いていたので、
これ、持っていったら、とても快適そう!

今週、リアルえもりハウス忘年会があるので、BGMとか勝手に選んでもらおう!


あと、実は Google Home もポチっとしたので、近日中にやってきます。

2017-12-03

ActiveRecordを使って複数DBにアクセスする(その1)

この記事は、株式会社ケーシーエスキャロット アドベントカレンダーの2日目の記事です。
ちょっと公開が遅くなってしまいましたが、やっていきます。

1日目に準備をしたので、今日はいよいよプログラムを書いていきましょう。
以下のような構成で作成していきます。


config/database.yml


own(development) / other(other_development) のKEYで接続情報を記載します。


default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password:
  socket: /var/lib/mysql/mysql.sock

development:
  <<: *default
  database: multi_connect_development

other_development:
  <<: *default
  database: other_multi_connect_development

lib/common/user.rb


own /other のUserクラスの親クラスとなるクラスです。

同じ構造のテーブルにアクセスするので、共通のクラスを作って、
このクラスは、AciveRecord::Baseを継承します。


class Common::User < ActiveRecord::Base
end

lib/own/user.rb, lib/other/user.rb のそれぞれのデータベースにアクセスするためのクラスとしています。

lib/own.rb


lib/own.rb には、autoload でUserクラスの読み込みと、DBの情報を返す connectメソッドを定義しておきます。


module Own
  autoload :User, 'own/user'

  def connect
    MultiConnectConfig.config["development"]
  end
  module_function :connect
end

DB接続は、establish_connection をモデルクラスに記載するとできるとの情報を見つけたので、
lib/own/user.rb には、establish_connection を記載します。

lib/own/user.rb



class Own::User < Common::User
  establish_connection Own::connect
end

また、other 側も同様に記載しておきます。


bin/multi_connect.rb


実際の呼び出すプログラムは、以下のように書きました。
config/database.ymlを管理するクラス(MultiConnectConfig)を記載しています。
(別ファイルにすることが望ましいです)

そして、Own側とOther側のUserの1件目をそれぞれ呼び出すプログラムです。


class MultiConnectConfig
  file_path = "./config/database.yml"
  @@config = YAML.load_file(file_path)

  def self.config
    @@config
  end
end

p Own::User.first
p Other::User.first



結果


以下のエラーになりました。
(2.5からbacktraceの出力が逆になる予定で、この2.5-devのバージョンも逆になっています


[vagrant@rg batch]$ bundle exec ruby bin/multi_connect.rb
Traceback (most recent call last):
        14: from bin/multi_connect.rb:19:in `
' 13: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/querying.rb:3:in `first' 12: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/relation/finder_methods.rb:122:in `first' 11: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/relation/finder_methods.rb:531:in `find_nth' 10: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/relation/finder_methods.rb:538:in `find_nth_with_limit' 9: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/relation/delegation.rb:44:in `primary_key' 8: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/attribute_methods/primary_key.rb:74:in `primary_key' 7: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/attribute_methods/primary_key.rb:88:in `reset_primary_key' 6: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/attribute_methods/primary_key.rb:74:in `primary_key' 5: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/attribute_methods/primary_key.rb:86:in `reset_primary_key' 4: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/attribute_methods/primary_key.rb:98:in `get_primary_key' 3: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/model_schema.rb:331:in `table_exists?' 2: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/connection_handling.rb:88:in `connection' 1: from /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/connection_handling.rb:116:in `retrieve_connection' /vagrant/adventcalendar/batch/vendor/ruby/2.5.0/gems/activerecord-5.1.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:930:in `retrieve_connection': No connection pool with 'primary' found. (ActiveRecord::ConnectionNotEstablished)

No connection pool with 'primary' found.
primary って何でしょう? 次はこのエラーを見ながら、進めていきます。

そして3日目は、naokishi の 「資格取得のススメ(仮)」です。

naokishi と一緒に青物横丁で仕事していたのは...もう17年くらい前!?
チームが変わって、同じプロジェクトで仕事することはなくなったけれど、
いい意味で「サラリーマン気質」で、いつもみんなを気遣ってくれるのは、
あの頃も今も変わらずです。

最近は、お互い日本酒党になったので、また美味しいお酒飲み行きましょう~

2017-12-02

Rails Girls Guides「Test your app with RSpec」を本家に合わせてみる

この記事は、Rails Girls Japan Advent Calendar 2017 の2日目の記事です。

今日は、「Test your app with RSpec」の章が、昔の記法のRspecのままで古いので、
本家に合わせてみましょう。

こちらは、日本語訳されていません。
翻訳に参加する場合は、issueを作成するとREADME.md に書いてあるので、issue を作っておき、今度翻訳することにします。

さて、本家の内容と合わせるために、本家のリポジトリを確認します。

本家のサイトはpull request を作成する予定がいまのところないのであれば、直接cloneしてしまいましょう。


$git clone git@github.com:railsgirls/railsgirls.github.io.git

diff コマンドなどで、対象のファイルの差分を一応確認してみます。


$cd railsgirls-jp.github.io # Rails Girls Guides(日本語訳)のディレクトリに移動
$git checkout -b sync_testing # 作業するためにブランチを作ります
$diff -u _posts/2014-01-30-testing.markdown (本家サイトのレポジトリをcloneした場所)railsgirls.github.io.git/_posts/2014-01-30-testing.markdown

たくさん修正されています。
この _posts/2014-01-30-testing.markdown はそのまま本家のファイルをコピーすればよさそうなので、
本家のファイルをコピーして、pull requestを出しましょう。


$cp (本家サイトのレポジトリをcloneした場所)railsgirls.github.io.git/_posts/2014-01-30-testing.markdown _posts/2014-01-30-testing.markdown
$git add _posts/2014-01-30-testing.markdown
$git commit -m '本家サイトの内容で更新'
$git push origin sync_testing

昨日と同じように、GitHubの画面で pull request を作成して終了です!

今日のpull request

Rails Girls Guides「Carrierwave を使ってサムネイルを作ってみよう」のPRを送った話

この記事は、Rails Girls Japan Advent Calendar 2017 の1日目の記事です。

私が言い出しっぺで、昨年から始めたRails Girls Japanのアドベントカレンダーですが、
空いている日をもっと埋められないかな~と、今朝思っていたら、閃いてしまったのです。



このRails Girls Guies(日本語訳) は、Rails Girls 本家のGuideの日本語訳になっています。
更新は、Rails Girls ワークショップの開催前に、コーチの方達が
1~4(インストールからアプリの公開まで)を一通り確認した時に、
Ruby や Railsのバージョンが古くなっていたりしたときに、主に更新されていますが、
本家の情報の更新に合わせても有志によって、更新されています。

リポジトリは公開されているので、古い情報を見つけたら、
気軽にプルリクエストを送って欲しいので、いつも私がやっている修正する方法を記載します。

では、いってみましょう。

(初めての方)GitHubからソースを取得する


【前提】既にGitHubアカウントを持っているものとします。

Rails Girls Guidesのリポジトリをブラウザで開きます。

画面右上にある Fork ボタンをクリックします。



すると、自分のアカウントにRails Girls Guidesのリポジトリがコピーされます。

ターミナルを開いて、clone します。

$git clone git@github.com:[アカウント名]/railsgirls-jp.github.io.git

# ssh の設定をしていない人は、https で取得
$git clone https://github.com/[アカウント名]/railsgirls-jp.github.io.git


ガイドの修正を始める前に、branchを作成して、そこで作業しましょう。


$git checkout -b update_thumbnails


Rails Girls Guidesは、Railsではなく、jekyll という静的なサイトを作るのに便利なRubyで作ったツールです。

以下の方法で、起動できます。

$cd railsgirls-jp.github.io
$bundle
$bundle exec jekyll serve --watch [--host 0.0.0.0]

ブラウザで、http://127.0.0.1:4000/ を開くと、Rails Girls Guides(日本語版) のトップ画面が表示されます。

さて、これで準備できました。


では、修正していきましょう。


修正したいファイルを見つけます。
jekyll では、_posts フォルダ内のmarkdown形式のファイルがあり、このファイルが画面に表示される元ファイルになります。

jekyll を起動して、ブラウザで表示すると、markdown形式のファイルを、_sites 以下にhtmlファイルに変換したものが表示されています。

(_sites 以下のファイルを修正しても、markdownを修正しないと jekyll を再起動すると修正は消されてしまうので、注意が必要です)


今日は、「Carrierwave を使ってサムネイルを作ってみよう」で使っている gemのバージョンを新しくしようと思います。

Rails Girls では、できるだけ最新のRuby, Rails のバージョンを使っているので、
修正するガイドもそのバージョンに合わせて、動作確認を行ってください。
(12/1現在、 Ruby 2.4.2, Rails 5.1.4のバージョンの環境となっています。)

主に、以下の点の確認をします。
  • リンク先が切れていないか
  • リンク先は正しいか (本家サイトと比べてみたりする)
  • 使っているgemのバージョンは最新か
  • 記述してある内容通りに実行して正常に動くか

今回は、ダウンロードのリンクの修正と、gem のバージョンを修正しました。


$git add _posts/2012-06-03-thumbnails.markdown
$git commit -m 'update thumbnails section'
$git push origin update_thumbnails

これで、GitHub上のサイトに、修正したブランチが作成できます。
GitHubの画面からPull Requestを作成して、終了です!

後は、レビューされてマージされるか、コメントもらうのを待ちましょう!

本家のpull requestも作成しました。

2017-12-01

ActiveRecordを使って複数DBにアクセスする(準備編)

この記事は、株式会社ケーシーエスキャロット アドベントカレンダーの1日目の記事です。

Rubyの部署に所属しているemorimaです。

今年は、会社支援で RubyKaigi 2017 と、Ruby World Conferenceに参加させてもらいました。
また、株式会社ケーシーエスキャロットは、10月に開催した Rails Girls Tokyo 8th でもスポンサーや、Asakusa.rb の会場にもなっております。

Rubyの会社ではなく、組み込み系やスマフォアプリ作成の仕事もしています。
昨年から、ETロボコンにも参加している社員もいるので、この後のどこかでお話が聞けるかな~


さて、これから、ActiveRecordを使って複数DBにアクセスするプログラムを作っていこうと思います。
前に作った時に、うまく接続が切り替わらずに、色々調べることになったので、
その内容を書いていこうと思います。


今日は準備から。

Databaseの作成は、Railsを使って簡単に作ってしまいましょう!

環境


Rubyruby 2.5.0dev (2017-11-30 trunk 60945) [x86_64-linux]
Rails5.1.4
Databasemysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64)


データベース作成


rails コマンドで、新規アプリを作ります。

$rails new multi_connect -d mysql
$cd multi_connect

Gemfile 上の 18行目の uglifier のコメントを外して、users テーブルを作ります。


$rails g scaffold user name:string
$rails db:create
$rails db:migrate

別のDatabaseを作ります。

config/database.yml のdatabase定義を変更して、
rails db:create, rails db:migrate を実行します。


そして、2つのデータベースにデータを登録しておきます。
同じデータを登録すると、正しく接続したかがわからないため、
私は、'taro', 'jiro' で分けて登録しました。

データベース1



MariaDB [multi_connect_development]> select * from users;
+----+--------+---------------------+---------------------+
| id | name   | created_at          | updated_at          |
+----+--------+---------------------+---------------------+
|  1 | taro-1 | 2017-11-30 11:44:53 | 2017-11-30 11:44:53 |
|  2 | taro-2 | 2017-11-30 11:44:53 | 2017-11-30 11:44:53 |
+----+--------+---------------------+---------------------+
2 rows in set (0.00 sec)

データベース2



MariaDB [other_multi_connect_development]> select * from users;
+----+--------+---------------------+---------------------+
| id | name   | created_at          | updated_at          |
+----+--------+---------------------+---------------------+
|  1 | jiro-1 | 2017-11-30 11:45:15 | 2017-11-30 11:45:15 |
|  2 | jiro-2 | 2017-11-30 11:45:15 | 2017-11-30 11:45:15 |
+----+--------+---------------------+---------------------+
2 rows in set (0.00 sec)


さて、準備はできました。
次は、実際に接続するRubyプログラムを書いていきましょう。

明日は、「ActiveRecordを使って複数DBにアクセスする(その1)」になります。