2020-12-23

Steep by Steep(Day2)

 この記事は、ケーシーエスキャロット Advent Calendar 2020 23日目の記事です。


昨日は、naokishi の aws cli と jq コマンド でした。

今、AWS使ってるんですねー。もうWindowsアプリは開発していないのかな…?


さて、前回はエラーが増えたところで終わりました。

一度、リポジトリ にあるサンプルコードを実行してみようか…

ということで、コピペで実行してみると…



$ bundle exec steep check --log-level=fatal
lib/phone.rb:9:2: MethodBodyTypeMismatch: method===, expected=bool, actual=(bool | nil) (def ==(other))
  (bool | nil) <: bool="" false="" nil="" true="="> nil 
<: bool="" false="" nil="" true="=">
エラーが出ました... が、一昨日出ていたエラーとは違うし、
このメソッド以外のチェックは通っているようなので、
このエラーは置いておいて、メソッドの定義について確認してみます。

うーん…(コードを見比べている)

!!!

メソッドのパラメータだ!!!!
で、以下のようにコードを修正して実行してみると…

class User
  def initialize(no:, name:)                                                                                                
    @no = no
    @name = name
    @scores = Array.new
  end
  attr_reader :no, :name, :scores

  def add(score:)
    @scores << score
  end
end

$ bundle exec steep check --log-level=fatal
bin/main.rb:20:2: NoMethodError: type=singleton(::File), method=open (File.open(fpath, "w") {|fd| fd.write data })
bin/main.rb:22:24: ArgumentTypeMismatch: receiver=singleton(::Analyzer), expected={ :path => untyped }, actual=::String (fpath)
lib/analyzer.rb:6:2: MethodArityMismatch: method=(self) (def self.load(path))
lib/analyzer.rb:15:2: MethodArityMismatch: method=(self) (def self.parse_row(row))
lib/analyzer.rb:16:8: IncompatibleArguments: receiver=singleton(::User), method_type=(name: untyped, no: untyped) -> ::User (User.new(row["No"], row["Name"]))

メソッドの定義がSteepで解析されて、Userのエラーが消えました!!!

同じように、Analyzerも修正すると、

bin/main.rb:20:2: NoMethodError: type=singleton(::File), method=open (File.open(fpath, "w") {|fd| fd.write data })
bin/main.rb:22:24: ArgumentTypeMismatch: receiver=singleton(::Analyzer), expected={ :path => untyped }, actual=::String (fpath)
lib/analyzer.rb:16:8: IncompatibleArguments: receiver=singleton(::User), method_type=(name: untyped, no: untyped) -> ::User (User.new(row["No"], row["Name"]))

エラーが更に減った〜

出ているエラーが全部違うので、ここからは1つずつ確認していこう…


NoMethodError

これはRubyを使っているとよく見るエラーですが、RubyのNoMethodErrorではなく、TypeInference::MethodCall::NoMethodError です。

エラーとして検出されている場所は、`File.open()` のRubyのクラス。
Rubyのクラス検知して、エラーにされている???

うーん...  steep の `--verbose` オプション付けて、ログ出力してみるか…


bundle exec steep check --log-level=fatal --verbose --log-output="./check.log"

出力されたログを確認してみると、、、
あぁ、なるほど、ここのファイル読み込んでる。
で、File.rbs を見てみると…

なるほど、確かに `File.open()` が定義されていない…。
initialize が定義されているので、 `File.new()` に変えてみて、実行してみる。

bin/main.rb:22:2: UnexpectedBlockGiven: method_type=((::string | ::_ToPath | ::int), ?(::string | ::int), ?::int) -> ::File (File.new(fpath, "w") {|fd| fd.write data })
bin/main.rb:25:24: ArgumentTypeMismatch: receiver=singleton(::Analyzer), expected={ :path => untyped }, actual=::String (fpath)
lib/analyzer.rb:16:8: IncompatibleArguments: receiver=singleton(::User), method_type=(name: untyped, no: untyped) -> ::User (User.new(row["No"], row["Name"]))
お、エラーが変わった。(行数が変わっているのは、元のコードをコメントアウトして残しているため)

UnexpectedBlockGiven は、`File.new()` の定義は、Fileクラスを返す定義になっていて、blockを渡す定義がされていないからだな。なるほど、なるほど。

`File.open()` の行を以下のように結局書き換える。

   # rbs に File.open()が定義されていない
   # File.open(fpath, "w") {|fd| fd.write data }
   fd = File.new(fpath, "w")
   fd.write data
   fd.close
 

$ bundle exec steep check --log-level=fatal
bin/main.rb:26:24: ArgumentTypeMismatch: receiver=singleton(::Analyzer), expected={ :path => untyped }, actual=::String (fpath)
lib/analyzer.rb:16:8: IncompatibleArguments: receiver=singleton(::User), method_type=(name: untyped, no: untyped) -> ::User (User.new(row["No"], row["Name"]))
やった! main.rb で出ていた、Fileクラスのエラーが消えました!

ArgumentTypeMismatch, IncompatibleArgument


この2つのエラーですが、キーワード引数に変更した時の呼び出し側の修正をしていなかったことで出ていたエラーでした。

bin/main.rb 実行したらエラーになったので、修正したら、上記エラーはでなくなりました。(テスト書いてないから、こういうことになるんだよ…テスト大事)


エラーが出なくなったから、終わり!!!にはなりません。


なぜなら、rbsファイルには、`untyped` の宣言しかしていないのだから…

本番はこれからです。

rbsファイルに型を定義する

rbs ファイルを以下のように修正しました。
(Structを使ったクラスはとりあえず、untypedのまま)

class User
  @no: Integer
  @name: String
  @scores: Array[untyped]
  def initialize: (no: Integer, name: String) -> untyped
  def add: (score: untyped) -> untyped                                                                                      
end

class Analyzer
  def self.load: (path: String) -> Array[User]
  def self.parse_row: (row: CSV::Row) -> User
end

これで実行すると、、、

$ bundle exec steep check --log-level=fatal
sig/sample.rbs:11:28...11:36	UnknownTypeNameError: name=::CSV::Row

CSVクラスは、標準添付ライブラリのため、requireして使っているので、Steepfile のlibrary で追加します。

target :app do
  signature "sig"

  check "bin"
  check "lib"

  library "csv"                                                                                                             
end
そして実行すると、、、

$ bundle exec steep check --log-level=fatal
lib/analyzer.rb:9:30: IncompatibleAssignment: lhs_type=::CSV::Row, rhs_type=::Array[(::String | nil)] (row)
  ::Array[(::String | nil)] <: ::basicobject="" ::csv::row="=" ::object=""> ::BasicObject <: ::csv::row="" code="" does="" hold="" not="">
やっとそれっぽいエラーが出てきました。

エラーメッセージに、lhs_type, rhs_typeが出ていますが、lhs_type がrbsで定義している型、rhs_typeが想定している型が表示されています。

CSV.foreach() のブロック引数のrow は、実行すると、CSV::Rowのインスタンスとなり、parse_row()のパラメータに設定されるのですが、rbsのCSV.foreach() では、Array[String?] で定義されているようです。

rbsに合わせて、Analyzer.parse_row() の引数をArray[String?] とすると、今度はrow.headers でエラーになってしまう…

悩ましい…


そこで、CSVは、rbsを参考に使用しているメソッドの以下の定義を sig/sample.rbsに追加することにしました。(Steepfileのlibrary定義はコメントアウトしました)

class CSV < Object
  def self.foreach: [U] (String, ?::Hash[Symbol, U] options) { (CSV::Row arg0) -> void } -> void
end

class CSV::Row < Object
  alias [] field                                                                                                                                                               
end
実行してみると、、、
エラーがなくなり、Steepでの型解析は正常となったようです。

使ってみての感想

Rubyのクラスについては、rbsの定義を参照しているので、rbsに定義されていない型だとエラーになってしまうようです。
そのため、普段書き慣れている記述でエラーになるケースもあり、この小さなプログラムでも確認したりするのに、結構時間を使いました。

使ってみての感想は、「やっぱり型書くのは大変だな…」という印象が強いのですが、
IDEを使ってコードを書く時に型情報までSuggest表示されれば、
Rubyの経験があまりない人でも書きやすかったり、大人数のプロジェクトなどでは、プログラムの記述が揃うし、確かにバグは少なくなるような気がします。

でも、やっぱりRubyは自由に書きたい…。

2020-12-18

Steep by Steep

 この記事は、ケーシーエスキャロット Advent Calendar 2020 17 日目の記事です。(ちょっと過ぎちゃったけど)

Ruby 3の静的解析機能の1つ。steep を使ってみようと思います。

 (styleが消えてコードが見にくい…)

リポジトリは、こちら

タイトルの Steep by Steep は、中学の頃流行った New Kids On The Block の "Step By Step" にかけてみました。

 


インストール

Rubyは、3.0.0-preview2を使っています。

steepのinstallをします。gem でinstallします。



$ gem install steep
Successfully installed steep-0.38.0
Parsing documentation for steep-0.38.0
Installing ri documentation for steep-0.38.0
Done installing documentation for steep after 2 seconds
1 gem installed
サンプルで使うコードです。 色々な型を試してみたかったので、設計面は無視したコードになっています。

lib/user.rb


class User                                                                                                                                                                             
  def initialize(no, name)
    @no = no
    @name = name
    @scores = Array.new
  end
  attr_reader :no, :name, :scores

  def add(score)
    @scores << score
  end
end

lib/analyzer.rb


require 'csv'                                                                                                                                                                          
  
class Analyzer
  @@score = Struct.new("Score", :subject, :score)

  def self.load(path)
    users = Array.new
    CSV.foreach(path, headers: true) do |row|
      users << parse_row(row)
    end

    users
  end

  def self.parse_row(row)
    u = User.new(row["No"], row["Name"])

    row.headers[2..-1].each do |subject|
      u.add @@score.new(subject.downcase, row[subject].to_i)
    end

    u
  end
end

bin/main.rb


LOAD_PATH << File.join(File.dirname(File.expand_path(__FILE__)), "../lib")                                                                                                            
  
require 'user'
require 'analyzer'

# 使用するデータ
data = <<-EOS
No,Name,English,History,Science
1,Akina,85,88,87
2,Bob,78,95,85
3,Candy,83,80,92
4,David,85,83,88
5,Emily,78,93,85
6,Fumiya,80,82,89
7,George,92,88,79 
EOS

それでは、実際に使ってみます



$ steep init
と入力すると、Steepfile が作成されるので、ここに定義をしていきます。

Steepfile


target :app do
  signature "sig"

  check "bin"
  check "lib"
end
これだけ定義して、まず実行してみます。

$ bundle exec steep check --log-level=fatal
bin/main.rb:20:2: NoMethodError: type=singleton(::File), method=open (File.open(fpath, "w") { |fd| fd.write data })
lib/user.rb:7:2: NoMethodError: type=self, method=attr_reader (attr_reader :no, :name, :scores)
エラーが出ました。
main.rbはおいておいて、Userクラスで、attr_reader に定義をしていないことを指摘しているようなので、定義を追加してみます。
定義ファイルは、sigフォルダの中に `.rbs`ファイルで書くとあるので、 sig/sample.rbs を作成して以下のように定義してみました。

class User                                                                                                                                                     
  @no: Integer
  @name: String
  @scores: Array[Score]
end
もう1度実行してみると、

sig/user.rbs:4:17...4:22        UnknownTypeNameError: name=::Score
エラーが変わりました。
ScoreというTypeがわからないというエラーが出ました。 

これは、Analyzerクラスの中でStructで定義しているからかな… ひとまず、先に進めるために `untyped` として、もう1回実行してみると、次のエラーに変わりました。

lib/user.rb:2:2: MethodArityMismatch: method=initialize (def initialize(no, name))
initializeの定義をしていないので、次はメソッドの定義をしていきます。


こんな感じかな(とりあえずuntyped)

class User
  @no: Integer
  @name: String
  @scores: Array[untyped]
  def initialize: (no: untyped, name: untyped) -> untyped                                                           
  def add: (score: untyped) -> untyped
end
実行してみると、、、

lib/user.rb:2:2: MethodArityMismatch: method=initialize (def initialize(no, name))
lib/user.rb:9:2: MethodArityMismatch: method=add (def add(score))
エラーになってしまいました… 


Analyerクラスが定義されていないことによる影響かな…と頭をよぎったので、Analayzerクラスも定義してみます。

class User
  @no: Integer
  @name: String
  @scores: Array[untyped]
  def initialize: (no: untyped, name: untyped) -> untyped
  def add: (score: untyped) -> untyped
end

class Analyzer
  def self.load: (path: untyped) -> Array[User]
  def self.parse_row: (row: untyped) -> User
end
実行してみると、、、

$ bundle exec steep check --log-level=fatal
bin/main.rb:20:2: NoMethodError: type=singleton(::File), method=open (File.open(fpath, "w") {|fd| fd.write data })
bin/main.rb:22:24: ArgumentTypeMismatch: receiver=singleton(::Analyzer), expected={ :path => untyped }, actual=::String (fpath)
lib/analyzer.rb:6:2: MethodArityMismatch: method=(self) (def self.load(path))
lib/analyzer.rb:15:2: MethodArityMismatch: method=(self) (def self.parse_row(row))
lib/analyzer.rb:16:8: IncompatibleArguments: receiver=singleton(::User), method_type=(name: untyped, no: untyped) -> ::User (User.new(row["No"], row["Name"]))
lib/user.rb:2:2: MethodArityMismatch: method=initialize (def initialize(no, name))
lib/user.rb:9:2: MethodArityMismatch: method=add (def add(score))
エラー増えた… 


リポジトリ内の sig/project.rbi も確認してみたのですが、定義の仕方がおかしいわけではなさそうです… 

もう少し中身を確認した方がよさそうなので、日を改めて取り組んでいきたいと思います。

2020-12-13

Rails Girls Gathering JapanのKeynoteで話しました

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

昨日は、Rails Girls Gathering Japan でした。

Rails Girls  Gathering Japanとは

新型コロナウィルス感染症の影響で、2020年のRails Girls イベントは、2月以降開催することが難しい状況となっている中で、オンラインで何かできることを…ということで、これまでRails Girls に参加されたGirlsの皆さんや、コーチ、スポンサー、オーガナイザーとスタッフの方々によるLT大会です。


昨日は、裏で忙しくしていたこともあり、改めてハッシュタグ #rg_gathering_jp を追いましたが、皆さんに楽しんで頂けたようで、とても嬉しく思います。
正直こんなにたくさんの方に参加して頂けるとは思っていませんでした。
改めて、Rails Girlsというコミュニティは、みんなに愛されているんだなぁと感じました。


このイベントの企画をした経緯などは、スタッフのAdvent Calendarの記事で話してもらえるかもしれないので、ここでは省略します。


今回、初めてキーノートで話す機会を頂き、「As You Like It」というタイトルでお話ししたので、その話をしたいと思います。

As You Like It

タイトルにした、"As You Like It" という言葉は、今でも仲良くしている大学時代の先生から卒業前最後の授業で贈られた言葉です。
キーノートで何を話そうかと考えた時に、これから社会へ出ていく私達に先生が贈ってくれたこの言葉を伝えたいと頭に浮かびました。


今年は、新型コロナ感染症の影響で外出なども制限され、会いたい人にも会えない期間が長く続き、自分でも気づかぬうちにストレスが溜まっていたりします。
私自身もお家時間を楽しんではいますが、今度いつ仲間と会えるんだろう…と考えると、今の先が見えない状況では、やはりネガティブな気持ちになってしまうことがあります。

SNSで発信される誰かのアウトプットが、自分はできていないというプレッシャーに感じてしまったり、「今日も私は何もしなかった」という罪悪感のような感情を感じてしまうこともありますが、だからこそ、「As You Like It」(お好きにどうぞ)という言葉を思い出し、
「私の人生だから、私らしく、私の好きなように」と思うようにしています。

「強い」とかに縛られず「自分らしく、好きなように、楽しんでもらいたい」という気持ちをうまく伝えられていたらと思います。

私にとってのRails Girls 

参加する人が私からどんな話を聞きたいのか、想像がつかなかったので、Asakusa.rbで @neko314 に聞いてみたところ、「Rails Girls のサポートをやっていくモチベーションがどこにあるのかを聞いてみたい」と言われました。
当日、@cobachieにも同じく聞いてみたら、同じ返答でした。(みんな不思議に思ってるんですね…)

それで、昔昔の私がRubyを書き始めた頃の話などをしました。
あの頃の私のように、今もどこか倉庫の片隅で、一人でRubyを書いてる人がいるかもしれない…と思うことが、モチベーションにもなっている部分もあります。

Rails Girlsを通して私が伝えていきたいこと 

Rubyコミュニティの素晴らしさは、たくさんありますが、
Rails Girls などのRuby歴が浅い人には、
案外世界は狭い(一歩勇気を出せば、超えていける)ということを
是非知ってもらいたいと思っているので、そのお話をしました。

(キーノートをお願いした松田さんに交番までついて行ってもらったり、角谷さんに
財布拾ってもらったりしました…ありがとうございます!)

最後に 

初キーノート、うまく伝えたいことが伝えられたかどうかわからないけれど、
Rails Girls Gathering Japanは、楽しんでもらえたようで、本当によかったです。

LTに登壇して頂いた方々、ありがとうございました!
みんな素晴らしいLTでした!
久しぶりにお会いできた方もいて、とても嬉しかったです。


2019-12-25

Rails Girls Japan 2019年まとめと2020年の予告

この記事は、Rails Girls Japan Advent Calendar 2019 25日目、最終日の記事です。

昨日は、 @cobachie さんによる「[RubyKaigi2020]まつもとのすゝめ 」でした。
松本のお店が色々紹介されていて、RubyKaigi期間中じゃ回りきれない!!!と思った方は、是非ふらりと行ってみるといいと思います。
金曜帰りにふらりと松本に行って、松本のBARを堪能。翌朝バスで15分の浅間温泉に行って、近くの水そば(水で食べるおそば)を堪能して帰ってくるプラン…どうです?最高でしょ?



さて、最初に自己紹介をしておきます。
@emorimaです。Rails Girls Tokyo 3rd, 4thのオーガナイザーです。2015年からRails Girls Japanのメンバーで、国内開催のRails Girls のサポートを行っています。

今日は、2019年 国内開催のRails Girlsのまとめと、来年 2020年の予告をしたいと思います。

Rails Girls Japan 2019 まとめ

2019年に国内で開催されたRails Girlsイベントは、計10回の開催となりました。


四国で初めての開催となる、Ehime 1stと、来年RubyKaigiが開催される長野県でのNagano 1st(長野県初の開催は、2015年開催のShiojiri 1st)の開催がありました。

昨年1stを開催したOkinawaとSendaiでも2ndが開催され、1stのオーガナイザーや、スタッフの方々が2nd開催を繋げてくれました。(素晴らしい!!!)
また、Fukuokaでも4年ぶりとなる2ndが開催されました!

2012年からの開催回数もまとめてみました。

国内でのRails Girls開催回数

ここ数年は、年10回程度開催されています。定期的(? Rails Girlsはやりたい! という方がいた時に開催されるので、定期という表現は少し違うかも...)に開催されている都市の他に、新しい都市での開催も増えているように思います。

国内開催50回!

2012年に国内で初めて開催された Tokyo 1stから8年目。
2019年5月開催のNagano 1stで、国内開催50回を迎えることができました! 🎉

Rails Girlsのイベントは各都市でイベントロゴを作成しているのですが、そのロゴを使って50回開催記念で、グッズを作りたいという話があり、 @atttsumi(RubyKaigi2020デザイナー!)が開催50回記念のロゴを作ってくれました。そして、@thatblue_plus(Sendai 1st, 2nd オーガナイザー) が色々グッズを作ってくれました!

中でも、これまでの各イベントのロゴを使ったTシャツはとても気に入ってます! (過去のイベントのオーガナイザーの方々にロゴの使用許可の確認も行いました!)



 Rails Girls 50回開催記念 T-shirts
こちらのTシャツや、その他のグッズは、suzuri で購入できます!

Rails Girls Japan 2020 予告

2020年開催予定

既に、以下の開催予定があり、イベントページも公開されています。

1月 Nagoya 5th
2月 Ehime 2ndTokyo 13th 

12/25(水)現在、全てのイベントの参加者募集中です!
また、上記以外では、Kagoshima 1st開催に向けて、準備中です。

Rails Girls 開催のお知らせや、その他のお知らせは、こちらのRails Girls Japan
アカウントで告知しますので、是非フォローしてみてください!

また、「私の都市でも開催して欲しい!」というご意見は、@emorima までmentionしてみてください。何か考えます!

RubyKaigi 2020 参加支援

お待たせしました! 昨日の @cobachieさんからも予告のあった、RubyKagi 2020参加支援のお知らせになります。
Rails Girls Japanでは、RubyKaigi 2020 参加支援を行います。
応募方法等については、こちら にまとめてありますので、ご確認ください。

最後に

こうしてRails Girls を毎年10回近く開催できているのは、
「やりたい!」と言ってくれるオーガナイザーの方と、手伝ってくれるスタッフ、
時には遠征してくれるコーチの方々、
そしてスポンサーがいるからこそと思っています。

Rails Girls に参加することで、地域Rubyコミュニティの方々と繋がりができ、地域Rubyコミュニティや、RubyKaigiなどに参加する女性が少しでも増えればと願っています。

2020年も各都市での開催、待っていてください!

2019-12-04

初めてのmruby on m5stack(環境編)

この記事は、ケーシーエスキャロット Advent Calendar 2019 4日目の記事です。 3日目の昨日は、garamanのくずし字を読む(概要編) でした。 (Advent Calendar 参加ありがとう!!!) そういえば、つい先日のニュースでくずし字の解読にAIが参入しようとしているニュースも出てましたね! さて、今日は、m5stackでmrubyを動かしてみたいと思います。 実は、夏休み前に買ってセットアップして、mruby以外は動くのを確認していました。 が、やっぱり、Rubyistとしてはmrubyを動かしたい。 では、早速やっていきましょう。

mrubyインストール

mrubyリポジトリ から clone します。
$cd (作業したいディレクトリ)
$ git clone https://github.com/mruby/mruby.git
$ cd mruby
rake -T で、色々コマンドが確認できます。
emorima@emorima-ThinkPad:~/repo/mruby$ rake -T
rake all             # build all targets, install (locally) in-repo
rake api_doc         # generate yard docs
rake capi_doc        # generate doxygen docs
rake clean           # clean all built and in-repo installed artifacts
rake clean_api_doc   # clean all built docs
rake clean_capi_doc  # clean all built docs
rake clean_doc       # clean all built docs
rake deep_clean      # clean everything
rake doc             # generate document
rake gitlab_config   # create build configurations and update .gitlab-ci.yml
rake gitlab_dockers  # recreate docker images for GitLab builds
rake test            # run all mruby tests
rake view_api        # clean all built docs
rake view_capi       # clean all built docs
rake all でbuildしたら、バージョンを確認します。
$ rake all

 ...(省略)...

$ ./bin/mruby -v
mruby 2.1.0 (2019-11-19)

USBドライバ インストール

Kernelバージョンを調べて、該当するOSのドライバをここからダウンロードします。  ダウンロードしたzipを解凍して、make installします。(エラーが出たら必要なlibraryをinstallします。)

m5stack ファームウェア書き込み

ちょっと夏に何かを書き込んだままだったので、一度クリアする意味でもファームウェアの書き込みをします。 m5stackをUSBケーブルで、PCを繋いで、/dev/tty* を確認します。 (私のPCでは、/dev/ttyUB0 で繋がっていました)  ファームウェアを書き込むために、esptool をインストールします。
$ pip install esptool
m5stackの最新のファームウェアをダウンロードし、ファームウェアの書き換えを行います。
$ esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
$ esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash \
--flash_mode dio -z 0x1000 m5stack-20180516-v0.4.0.bin
書き込みが終わると、m5stackが自動的に起動します。

試しに Hello Worldしてみる

簡単な "puts 'Hello World!'" だけのプログラムを動かしてみます。 以下のコードをhello_world.rb に保存します。
puts "Hello World!"
そして、以下のコマンドでコンパイルし、autorun.mrb を作成します。
$ mrbc -o autorun.mrb hello_world.rb 

出力されたautorun.mrb をMicroSDに書き込み、m5stackに挿して、再起動!!!!

 ....あれ、表示されない...

通常の起動画面が表示されているだけ...

次こそは、"Hello World!" へ!

2019-12-01

鹿児島Ruby会議01で話してきた

このエントリは、ケーシーエスキャロット Advent Calendar 2019の1日目の記事です。

Advent Calendar 何を書こうかな...と思っていて、何かgemでも読んでその話しでも...と思っていたんですが、
鹿児島Ruby会議01 でお話しする機会を頂いたので、その話しを書きたいと思います。

鹿児島Ruby会議01

2019年11月30日 鹿児島Ruby会議01で、「Rails Girlsのお話や、初めての方向けのコミュニティについてなどお話」というタイトルでお話してきました。



招待講演をするというのは、人生初だったので、自分の話しでよいのか?とか、また時間が余りすぎるんじゃないか?とか、準備している期間は悶々と考えていました。(悶々としている間に福山雅治さんの30周年ライブチケットの予約を逃しました...)

鹿児島Ruby会議は、「プログラミング言語Rubyを通して越境する」というお題でした。
2014年にDevLOVE Advent Calendar 「越境」というお題でblogを書いていたので、
読み返してみたり、その頃に発表したslideを見返したりする中で、あの時の自分の気持ち、Passionを思い出したら、資料準備もできました。

ただ、当日の朝に、発表練習をしようとしたら、rabbitのallotted-time が、3022322:05 となっていて、rabbitの起動パラメータに指定してもダメだったので、発表時にはうさぎが爆速でゴールすることに…


発表した後の懇親会で、「よかったよ」と言われたのが、本当に嬉しかったんですが、
自分の行動が誰かに喜んでもらえる嬉しさが、
私の行動の原動力になっていると、思った回でした。


今年は、自分はどんな新しい「越境」をできたのか、、、

来年あたりに結果が出そうな何かを始めたけれど、まだまだ道のりは険しい…といったところです。


鹿児島Ruby会議01の余韻で終わりたいので、今日はこのくらいで。

2019-05-03

RubyKaigi2019に参加して、エモリハウスを企画して、WTMKyushuに参加した

2019/04/18~20に福岡国際会議場で開催された RubyKaigi2019 に参加して、翌日に Women Techmakers Kyushuに参加してきました。
また、今年もエモリハウスを企画したので、平成の頃の話になりますが、簡単にまとめておきたいと思います。

RubyKaigi2019に参加した

RubyKaigiは、ご存じのように世界からRubyistが集まる国際技術カンファレンス。

毎年最終日には、脳の疲労が激しくて、ぐったりしているんですが、
今年はなんと、4トラック!!!
まずセッション選ぶのにとても悩みました。
(コピーロボットが欲しい...)

フルで見ると、3日目の集中力がもたないことが経験上予想できたので、
適度に休憩取りながらとなりました。

細かなセッションの感想は書きませんが、
見たどのセッションも、最高に楽しかったので、
見れなかったセッションもとっても気になる!!!
ということで、動画配信を期待して待っています...

今回は、1月に cobachieさんと会った時に、「RubyKaigiまでに『Rubyのしくみ』読みたいと思っててー」という話をしていたので、「んじゃ、一緒に読もうよ」という話になり、yadaitaさんと毎週輪読会をやり、読み終えていたのですが、
Aaron、笹田さん、国分さんのお話を聞くのに、基礎知識としてとても役立ちました!

Rubyのしくみ Ruby Under a Microscope
Pat Shaughnessy(著), 島田浩二, 角谷信太郎(訳)
オーム社
発行日: 2015-02-10
対応フォーマット: PDF


エモリハウスを企画した


今年もエモリハウスを企画しました。
昨年の応募フォームは、私が適当にGoogle Formで作ったのですが、今年はcobachieさんがかっこよく作ってくれました。(感謝!)

その効果か、最初の10名という予定人数がすぐ埋まってしまい、更に問い合わせもあったので、宿を移動して 17名の方に参加して頂きました。

エモリハウス2019参加者の皆さん + あんずちゃん... (写真撮影: 炬燵さん)

エモリハウスは、女性のRubyKaigi参加者でワイワイしよう!企画です。

「一人で、馴染みのない街のビジネスホテルに泊まって、知り合いのいない技術カンファレンスに参加する」

というのは心理的ハードルが高いように思うので(20代の頃の私だったら、参加していないと思います...)、誰かと一緒ならRubyKaigiに参加したいと思っている人が、参加してもらえるといいなぁくらいの気持ちで私はやっています。

今年のエモリハウスはこんな感じでした。
  • RubyKaigi前にリモート飲み会をやって顔合わせをした
    • 自己紹介をした後、宿の情報などの連絡とか、RubyKaigiどれ見る~?みたいな話をした
    • 途中、台所でつまみを作り出す youchanがいた
    • あっという間に2時間が過ぎた
  • みんな自由に行動していた
    • Day0 🚢パーティ、🍜パーティ行く人がいて、参加しなかった(できなかった人)でもつ鍋食べに行った
    • Day2 特に予定がないメンバと、yuryuさん、ぷぽさんとも合流して飲みに行った
    • Day3 パーティー後、みんなそれぞれ行動していた(一蘭の🍜とかslackにあがってきて美味しそうだった。私は行っていない...)
    • 宿の隣のうどんBarが美味しいらしく(しかも混んでいる)、うどんを食べに行って閉店まで堪能するメンバが毎晩いた(私は行っていない...)
  • 今回もゲストハウス貸し切りは便利だった
    • 鍵は暗証番号入力で、宿泊期間中変わらないので楽
    • ゲストハウスのスタッフの人に地元情報を色々教えてもらった
    • 寝室では水しか飲めないので、飲食する人はロビーに集まる感じになるので、そこでコミュニケーションが取れるようになっていた
    • 5部屋あったので、生活リズムなどを合わせて部屋割りをした
      • 初めて参加の方は色々な人と話せるように大部屋
      • 2階部屋への階段が急なので、お酒を飲んでも階段の昇降が問題なく行える人を選抜して2階部屋にした
      • 朝早い方(スポンサーやヘルパーの方)、夜遅い方は優先的に1階
      • あんずちゃんと同室のnyancoさんと炬燵さんが、あんずちゃんと一緒に行動してくれていた(感謝!)
    • ロビーまでは宿泊者でない人も入れるので、ぷぽさん、ぱんさん、sayatamさんが遊びに来てくれた
  • お酒のイメージが強いようですが、飲んでない人ももちろんいる
RubyKaigi初日、「初めてRubyKaigi参加する人もいるし、みんなで行くか~」と集団登校したのが、個人的にはいい思い出です。

そして、こんな感じのエモリハウスですが、、、

RubyKaigi2020のエモリハウスもやります!


既に仮予約してあります。
今年ほど規模は大きくないです。
サイト更新したら、Twitter で連絡します!

Women Techmakers Kyushu IWD19 に参加した (RubyKaigi2019 Day 4)

RubyKaigi2019の翌日、Women Techmakers Kyushu という女性限定のITイベントがあり、そこで Rails Girls についての紹介をしてきました。

参加者 20名以上いて、Rails Girls を知っている方が、5名程度。
Rubyを使っている人が3名くらいしかいないという状況でした。
スタッフとして、Rails Girls Kitakyushu参加者で、エモリハウス2018の参加者の @HappyK514 さんがいたので、とても心強かったのでした。

話した内容は、Rails Girls Japanとしての取り組みや、Affirmative Action などRails DMでお話した内容を少しまとめてお話しました。




私は東京で仕事をしていることもあり、毎日どこかで勉強会が開催されている身近な環境があるけれど、地方の場合、コミュニティが少ないこともあり、勉強会の開催が少ないので、オンラインのやつに、もっと注力して立ち上げたいと思いました。

2018-12-24

2019年よりオンラインでRubyチャレンジ始めます!

この記事は、Rails Girls Japan 2018 24日目の記事になります。

昨日は、co_bachieさんの 「Rails Girls Nagano開催します!」でした。
長野での開催嬉しいですね〜。
プログラミング初めてみたいけど、どうやったらいいかもわからない...という方は、
Rails Girlsに参加してもらうことで、プログラミングに対して思っている敷居の高さを下げてもらうのが、とても始めやすいのでは?と思っているので、
勉強会の開催されやすい地域外での開催は、個人的にとても嬉しく思います。
(自分が地方に住んでたら、「やったー!!!」って思いません?)

ただ、Rails Girls後、どうやって継続して学んでくか?が課題だと思っています。

現在、月1回、Tokyoでは Rails Girls Tokyo, More!というRails Girlsの参加者や、Railsに興味のある方たちを対象に勉強会を開催しています。

Tokyo以外では、Nagoya, Shiojiri、また松江ではスプラウト.rb、来年開催予定の愛媛でも、Ehime.rbも立ち上げ、勉強会を開催しています。


Railsを勉強する教材には、Railsチュートリアルなどのオンラインの教材や、書籍なども充実しています。
でもですね... Railsなんですよ。
Ruby on Railsから学んで行くので、Railsで拡張されているメソッドで、Rubyで使えないものもあるというのを結構知らないまま、ずっと進んで行くんですよね。

また、Rails Girls JapanではRubyKaigi参加支援を行っていますが、RubyKaigiは、RubyのKaigiなので、みんなもっとRubyを知った方がいいんじゃない?という気持ちが沸々と湧き上がりまして、、、
オンラインのRuby勉強会 Rubyチャレンジを来年から始めます!

やる内容としては、写経とか、読書会とかではなく、
こちらから簡単な課題を出すので、コードを書いて、レビュー解説会にしたいと思っています。

オンラインということもあり、すごい人数集まって収集できなくなると困るので、
開催時間・方法などは、ひとまず各地More!や勉強会を開催している方たちに連絡する予定なのですが、参加したい!という方があれば、 @emorimaにご連絡ください。

明日は、Ruby2.6.0がリリースされますね!
Ruby2.6.0のリリース日でもあり、AdventCalendarの締めを飾るのは、yadaitaです!

2018-12-19

自作キーボードデビューの話

これは、ケーシーエスキャロットAdventCalendar 2018 18日目の記事になります。

昨日は、kawakin の「TV番組表を取得してみたい」でした。
kawakinとは、その昔、某メーカーのEPGシステムで一緒に仕事をしていました。
私はまだARIBの定義とかをかすかに覚えているけど、kawakinは覚えているだろうか...

さて、ではさっそく、自作キーボードデビューの話をしていきたいと思います。

きっかけ

2016年12月から、肩凝りを軽減させるために、MiSTEL BAROCCO のSplit Keyboardsを使っていました。

2017年くらいからRuby界隈の人たちが、キーボードを自作しているのを見かけて、キーキャップの色の組み合わせも色々でかわいいし、市販のキーボードでは見ない形も気にはなっていたのですが、自分が始める理由にはなっていませんでした。

なのですが、BAROCCOの左と右を繋ぐケーブルの接触が悪くなっていて、買い替えかなぁ〜と思っていたところ、そのケーブルがなくなってしまって(結局後で見つかった)、買い換えるなら、自作キーボードやってみようかなと思ったのがきっかけです。


いざ購入!

自作キーボードと言っても、色々な形があるので調べてみたのですが、youchan のお勧めのMint60を購入することにしました。(BAROCCO 使いには、Mint60が使いやすい!というのが決めてになりました)

今回自作キーボードが初めてなので、スターターセット(ファームウェアに既にキーマップが焼いてあるもの)を購入しました。

8月に申し込んで、9月中の発送予定でしたが、台風で関西空港の物流に影響が出た件で、少し遅れて、10月に届きました!
今は、BOOTH のゆかりや さんで購入できます!

必要な道具は、これまたゆかりやさんのブログを見て購入しておきました。

そして...

はんだコテやら必要なものは揃えていたし、ゆかりやさんの組み立てメモ も何度も読んでいたのですが、なかなか組み立てず...
というのも、はんだ付けした経験がない!

聞いてみると「中学の技術でやった〜」という人が多いのですが、私はやらなかったんですよ...
世代とかの問題ではなく、たぶん、通っていた学校(私立の女子中)のカリキュラムになかったはず...

そんなこんなで、はんだ付けうまくできるかが不安で、そのままになってしまっていたのですが、神のようなイベントを見つけました!!!


ゆかりやさんが組み立て方法を教えてくれる会!!!
すぐ申し込んで、参加してきたので、組み立て方法を説明します。

Mint60の組み立て

順番としては、
  • 基盤にダイオードをはんだ付けする
  • TRRSケーブルのコネクタ、タクトスイッチをはんだ付けする
  • 24pinをはんだ付けする
  • スタビライザを組立て、基盤につける
  • キースイッチをはんだ付けする
  • ProMicroをはんだ付けする
  • LEDテープをはんだ付けする
  • アクリル板を組み立てる
  • キートップをはめる

組み立て会では、左側のキーボードだけを行いました。

基盤にダイオードを刺す

最初にダイオードにはんだ付けをするために、基盤に空いた穴(Dnn 、nnは01〜の数字)に順にダイオードを刺していきます。
基盤の四角がいっぱい書いてある方が、表。派手なデザインとなっているのが裏で、ダイオードが表側になるように刺します。
また、ダイオードには向きがあって、以下の図のようになるようにします。




左側は、D01〜D29まであります。
右側は、左側よりキーが多く、D01〜D37まであります。
(家で右側を作った時に、D01〜D29までしかダイオードをはめていなかったため、ほぼ出来上がってから、はんだ付けを除去することになりました...)

ここで、ゆかりさんに教えてもらったポイント⭐
Mint60の基盤のダイオードの刺す幅は、だいたい 6mmになっていて、
Mint60のアクリルパネルが1枚2mmくらいなので、アクリルパネルを3枚重ねて、
ダイオードを先にまとめて6mmの幅で曲げておくと、基盤に刺しやすいです!

基盤にダイオードを刺したら、基盤を裏返すのですが、そのままだとせっかく刺したダイオードが抜けてしまうので、ダイオードの両端を広げてハの字にするか、または逆に閉じるかして、抜けないようにしておきます。

はんだ付けする前に、はんだ付けのポイント説明⭐

先にも書きましたが、はんだ付けをしたことがなかったので、
今回組み立て会に参加して、ゆかりさんにはんだ付けのポイントをわかりやすく説明してもらって、本当にありがたかったので、是非その情報を伝えたい!!!


  • はんだこては鉛筆のように持ちます。
  • 温度制御ができるはんだこてだと、270℃〜320℃くらいの設定がちょうどよいです。(FX600の場合、温度が指定温度になるとダイアル左にあるランプが点滅します)
    • こての温度が高すぎると、はんだに含まれる松脂が蒸発しすぎてしまうので、つけた後の色がツヤがなくなり、にぶい感じの色になるそうです。
    • 温度が高くなった場合には、受け皿の水を使って下げます。(そのため、水が結構蒸発するので、受け皿のスポンジの水はじょぼじょぼくらいに浸すのがよいそうです)
  • はんだ付けをする時には、基盤側とはんだの両方を温める必要があります。ゆかりさんに教えてもらったのは、以下の方法です。(初心者にもわかりやすい!)
    • 基盤にこてをあてて3カウント
    • はんだをこて先につけて2カウント
    • はんだを離して、こてを基盤から離す
  • 基盤が温まっていない状態ではんだ付けをすると、基盤にはんだが密着せずに、「いもはんだ」になるそうです。
    • いもはんだになってしまう場合、こての温度を上げるとよいかもしれないとのことです!
  • はんだ付けをしていると、こての先に付着したはんだが酸化して汚れるので、こて台のスポンジまたは、金属たわしみたいなもので汚れを落とします。

ダイオードのはんだ付けをする

👆のポイントを胸に、せっせと基盤にダイオードをはんだ付けします。
はんだ付けができたら、ダイオードの余分な線は、ニッパーで切ります。
(切る前に、ちゃんとはんだ付けできているか確認してもらいました!)

JP1をはんだブリッジではんだ付けする

基盤の裏を見ると、左右の基盤にJP1と書いてあるところがあります。
ここをはんだブリッジで繋げます。
はんだブリッジをデフォルメして描くと、以下のような感じになります。



TRRSコネクタをはんだ付けする

TRRSコネクタは、左右のキーボードを繋げるケーブルのコネクタになるものです。
JP1の上にTRRSコネクタの刺す位置があり、基盤の裏側から刺し、基盤の表側からはんだ付けします。

タクトスイッチをはんだ付けする

タクトスイッチは、基盤の中央よりやや上にあるSWの箇所に裏から刺して、表からはんだ付けします。(左側はSW30、右側はSW42になります)

24pinをはんだ付けする

ProMicroを乗せるための24pinピンをはんだ付けします。
ピンヘッダの短い足の方基盤側、長い方がProMicro側になります。

組み立て会の時には、ブレッドボードがなかったので、苦戦しながらつけたのですが、ちょっと曲がってしまったので、ブレッドボードを使った方がよいと思います。というのは、ピンを平行にはんだ付けできないと、プロセッサが付けられないという、悔いても悔やみきれない状況に陥るからです。


ブレッドボードを使った方法で説明すると、
ブレッドボードにピンの長い方を刺し、ブレッドボード側が裏で、表が上にくるように基盤を乗せて、はんだ付けします。(この時点では、ProMicroのはんだ付けはしません)

スタビライザを組立て、基盤につける

スタビライザとは、ShiftキーやEnterキーのように2key以上のキーを押す時に、キー全体が一緒に押されるようにする装置になります。
組立の時には、向きに注意する必要があります。(針金が上下に動くように組立てます)

スタビライザを基盤につける位置は、2key以上の位置になります。(左側はSW29、右側はSW8、SW23と、SW36 / SW38 / SW40のいずれかで選べます)
基盤上の穴の大きい方側に、スタビライザの針金側がくるように、基盤にはめ込みます。
スタビライザを基盤にしっかり固定しないと、アクリル板を組立てた時に、歪んでしまう(左端と右端の厚さが違ったりする)ので、必ず基盤にピッタリはめます。

キースイッチをはんだ付けする

いよいよ、キースイッチになります。
これでやっとキーボードっぽくなっていきます。

まず、アクリル板の紙を剥がします。(だいぶ剥がしにくい感じですが、ここはひたすらに頑張ってやってくださいとのアドバイスがありました)

基盤の表側を上にして、同じ形状のアクリル板(キースイッチがはめられるようになっているもの)に、キースイッチをはめていきます。(スタビライザの位置の大きいキーは除きます)

キースイッチをはめたら、アクリル板を裏返して(丁寧にやらないとキースイッチがポロポロ落ちます...)、基盤を中表にして合わせます。
そして、基盤の裏側からキースイッチをはんだ付けします。

ここで、ゆかりさんに教えてもらったポイント⭐
ProMicroの位置のキーキャップはProMicroを付けた後にはやり直しができないので、特に注意すること。
キーキャップのはんだ付けは、基盤の四隅からやっていくと、基盤が浮かずに(組み立てた時に歪まずに)できます。

この時点で、テスターがあれば電通チェックを行います。(組立て会の時にはやってもらいました!)

ProMicroをはんだ付けする

いよいよ、ProMicroのはんだ付けをしていきます。
ProMicroは、基盤が乗っている側が基盤側(内側)になるように、24pinに乗せ、はんだ付けします。
はんだ付けをしたら、pinの出ている分をニッパーでカットします。

ここで、ゆかりさんに教えてもらったポイント⭐
ProMicroのピンは太くて硬いので、袋の中などに入れてカットしないと、どこかに飛んでいってしまいます。(踏んだすると痛い...)
また、手で押さえたりすると、手も痛くなるので、やらないように!

LEDテープをはんだ付けする

長いLEDテープが入っていると思うので、左右に分けます。
左側はLED7つ分、右側はLED8つ分になるようにカットします。
LEDテープは、4列目に貼るのですが、はんだ付けなどと干渉すると、キーボードの入力ができなくなったりするので、4列目のでっぱりなどは、ニッパーできれいにカットしておきます。

LEDテープを基盤の裏側の4列目に合わせます。(VCC, LED, GMDの接続部があるところ)
基盤のVCC と LEDテープの+5V、基盤のLEDとLEDテープのDin、基盤のGMDをLEDテープのGNDを、それぞれはんだブリッジで繋ぎます。

さて、ここまでできたら、USBでPCに繋ぐとLEDテープが光るはずです。
(USBケーブルは、データ通信のものを使用して確認してください)

アクリル板を組み立てる

ゆかりさんのブログを参考にして組み立てました。
組み立てたら、ゴム足を貼り付けておきます。(大きい方を上につけます)

キートップをはめる

せっせとキートップをはめていきます。
Hawaiiは1行毎色が違うので、はめていくのがワクワクしますね。

全部、キートップをはめたら完成です!


次は...

QMK firmwareの書き込みにトライしてみたいな〜と思っています!(ビルド環境はもう作った)

2018-12-02

1年の振り返り

急遽飲み会が入って遅くなってしまいましたが、
この記事は、ケーシーエスキャロット Advent Calendar 1日目の記事になります。


今年は、仕事で大きな動きがありました。
そのことを、ほろ酔い加減で語りたいと思います。


入社して依頼、ほぼ客先常駐での作業でしたが、
9月に常駐作業を終えて、自社中心の作業に戻りました。
それと同時に、15年近く携わっていた地震関連のシステムを後輩に引き継ぎました。


私の担当してきたシステムは、2010年のRubyWorld Conference で発表され、
当時、今ほどRubyが広く使われていない時代に、制御システムをRubyで書いたということで、とても話題になり、その後 Rubyコミュニティ に参加したところ、大江戸Ruby会議 01、RubyKaigi 2010 で発表するきっかけになりました。


プログラムの話をするのは、自社の社員か、お客さんとの繋がりしかなかった私にとって、所属に関係なく、また仕事に関係なくRubyの話を話す Rubyコミュニティは、
とても新鮮な世界でした。


また、外の世界で出たことで見えたことがありました。


それまで、私の会社は「小さいながらも技術のある会社」であると思っていましたが、現実は、自分の会社を誰も知るわけもなく、「自分たちは優秀である」と思い込んでいる小さな世界にいただけということでした。

それから、8年…
なだらかな道のりでは決してなかったけれど、
Rubyで仕事をしていく部署を作ることができました。

長らくメンテナンスしてきたシステムでのRuby 1.8 から Ruby 2.4 へのバージョンUPが行われ、その内容が、 RubyWorld Conference 2018 で発表され、
私の担当したシステムは後輩に引き継がれました。


そして、後輩たちがRubyコミュニティに参加するようになって、
会社名を言うと、「emorimaさんのところ?」と言われるようになっていました。


自分でやりたいことをやってきただけなので、
誰かに褒めて欲しいわけでもないのですが、
「やってきてよかったな」と感じた嬉しい出来事でした。



今、自分の業務の内容は変わってきていますが、
私は、今もRubyの楽しい大海を楽しんでいます。

Advent Calendar が、外の世界に何かを発言していくきっかけになることを願っています。

外の世界は楽しいぞ!

2018-12-01

Rails Girls 個人的1年のまとめ

この記事は、Rails Girls Japan 2018 1日目の記事になります。

2018年、 日本国内での Rails Girls イベントの開催は、9回開催されました。
(京都は来週開催です!)
  • 名古屋
  • 岡山
  • 東京 (2回)
  • 大阪
  • 仙台
  • 松江
  • 沖縄
  • 京都 (2018/12/07-08)

お手伝いした 東京・仙台・沖縄 の個人的振り返りをしてみたいと思います!

いつもの都市での開催に加え、今回は、
RubyKaigi 2018 開催の地、仙台 (初の東北開催!!!) と、
青い海...より、せんべろが印象的だった沖縄 での初開催!!! 🎉

仙台は、当日予定があって参加できなかったため、
コーチの素振りの時に行ったのですが、
マサムネガール (Rails Girls Sendaiのロゴ) の飾りやフォトプロップスを
オーガナイザーやスタッフの方たちで作っていて、
「これは、絶対かわいい!!!」と思っていたら、やっぱりかわいかった!

12/10(火) に仙台オーガナイザーの @thatblue_plus さんが、
書いてくれる予定なので、楽しみにしています♪


そして、沖縄は、スポンサー と コーチで参加してきました。

オーガナイザーの@The_Na_ka さんが大学生なこともあってか、
参加者に大学生も多くて、すごくパワーを感じました!



そしてそして、東京ですが、昨年 Rails Girls に参加されて、
Rails Girls Tokyo, More!にもよく参加してくれている @tararico_co さんが
オーガナイザーを立候補してくれました!
東京は、参加希望の方が多いのですが、オーガナイザーの立候補の方がいらっしゃらないのを、悩ましく感じていたので、個人的に本当にうれしかったです。

この回の名札がとっても力作で、コーチにとっても好評でした!

担当してくれたスタッフの @hinagimaki さん、ありがとうございました!


東京 10回目となるオーガナイザーは、9回目でスタッフをしていた @naotyome さんがオーガナイザーに立候補してくれました。
RubyKaigi 2018 の時のエモリハウスで ご一緒した @SayaHoribe さん、@SayaHoribeさんの同僚の @miwako_design さん もスタッフ参加してくれたおかげで、
お任せ状態だったのですが、結果、、、こんな感じになりました!(かわいい!)




私が 初めてオーガナイザーをやったのが、
2013年10月開催の Rails Girls Tokyo 3rd 、国内5回目の開催の時で、
その後、毎年 各地で開催されて、
今開催が予定されている 2019年1月開催の神戸で、
国内 48回の開催になります。👏

各地のロゴが、それぞれ味があってかわいいので、
これまでのオーガナイザーの方々と相談して、
このロゴ集めて 50回開催でなんかできたらいいな~と考えていたりします!

明日は、@risacan さんです。
risacan は、Rails Girls Tokyo 3rd の参加者で、10th の時にコーチ参加してくれました。
最近では、Podcast もやっているようで、Rails Girls のコーチやった感想などもお話されていました!

2018-06-05

RubyKaigi2018~エモリハウスのホストをした~

日記を書くまでが RubyKaigi ということで、
久しぶりのブログ更新。


週明けから体調崩して、実は出発前日に発熱して(医者で薬もらった)のRubyKaigiということで、だいぶ体調面に不安がある状態での参加となりました。

一昨年から エモリハウス ということで、女性のRubyistに声をかけて、同じ宿に泊ってワイワイする企画をしていて、今年もホストをしました。

今年は、ここのゲストハウスを貸し切りでお願いしたのだけど、
個室は、お子さん連れで参加の かとりえさんに、
その他の方たちは同じ部屋で、ドミトリー(2段ベッド) という部屋分けになりました。

ゲストハウスで多いと思うのだけど、飲食は共有スペースでのみOKで、
ここのゲストハウスでは、1FのリビングのみOKということだったので、
静かに過ごしたい(寝たい)人は2Fに、話したい人は1Fにという感じになって、いい感じに過ごせました。




また、キッチンもあったので、仙台朝市でお刺身買ってきたりして、さいこーの夜を過ごしました。




私の知り合いの女性エンジニアは、Rails Girls の関係者が多くなってしまいがちなのですが、
今回、RejectKaigiでお知り合いになって参加してくれた nappan23 さんや、
知り合いの紹介で参加してくれた ほりべさんもいて、色々な人が参加してくれて
とっても嬉しかったです!!!

また、次のRubyKaigi でも エモリハウスやろうと思っているので、よければご参加ください~





エモリハウスに参加してくれた方々のブログはこちら。

あんずちゃん
nekoさん


RubyKaigiの中の話は、次のエントリで!

2017-12-18

今年最後の Rails Girls Tokyo, More! で気づかせてもらったこと

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

12/17(日) は、今年最後の Rails Girls Tokyo, More! を、弊社 ケーシーエスキャロットで開催しました。

Rails Girls Tokyo, More! は、kurotakyさんや、okuramasafumiさんもお話されているように、
月1回ペースで開催されている勉強会です。
Rails Girls の参加者の方の継続的な勉強の場としてだけではなく、
Ruby / Rails を学びたい方のための会です。
Rails Girls Tokyoは、毎回参加希望者の方が多く、抽選となってしまっているのが現状です。
こちらのMore!の方も、コーチがついて教えてもらえる勉強会となっているので、
参加したい方は、 にお声かけください~


今日は、いつもコーチで参加して頂いている igaigaさんと、okuramasafumiさんがコーチとして参加して頂いて、
参加者の方も3名だったので、マンツーマンで参加者のやりたいこと進める形となりました。

Railsチュートリアルを進める方、たのしいRubyを読みながら進める方、
書いてある説明がわからなかったり、書いてある通りにやってもうまくいかない場合には、
コーチが説明してフォローしながら、各自進めていきます。



「routing って、どれくらいわかっていたら大丈夫ですか?」

「正規表現。。。これ、みんなわかるものなんですか?」

そうですよね、そうですよね、そう思いますよね のような質問も
コーチの経験を含めて「今の時点でなら、このくらいわかっていればいいんじゃないかな」というのを教えてくれます。

2012年9月に鳥井さんが初めてから、第38回目になるのですが、
初心者の方が、Ruby/Rails を学ぶには、とてもよい勉強会だと思っています。


そして今日は、年内最後ということで、早めに勉強会を切り上げて、クリスマスパーティーをしました。



ブッシュドノエルを作って持っていきました。
(運ぶために、タッパーを上下逆さまにして入れていったので、ケーキがのっているのがタッパーの蓋...)


ケーキ食べながら、色々なお話をしました。
参加者の方でも、他の勉強会や、RubyKaigiに参加してみたい と思っている方が結構いらっしゃるようなのですが、
やはり誰も知り合いのいない勉強会に一人で参加するのは、敷居が高いとのこと。
(女性の参加者自分だけ...ってことになることもありますからね...)


「うん、うん、わかるわかる。昔、私もそうだった~」と聞いていたら、
「えもりさんが参加する勉強会、『今、参加してますー』じゃなくて、「申し込みました」のツイートしてくれればいいんですよ~」とのご意見を頂きました。

!!!!
気づかなかった!!!そこね!!!

これからは、申し込みしたらツイートするようにします。
知っている方が参加するって知ったら、「参加してみよう」と思う方がいるかもしれないので、皆さんも「行くよ!」のツイートするとよいと思います!
(恵比寿方面を見ながら...)
 
ちなみに、次参加予定は、これです。
Speee×Asakusa.rb Ruby2.5リリースパーティー
通常ミートアップも参加しているAsakusa.rbメンバーなのですが、
申し込みが遅れて、危うく参加できないところでした。
(増枠してくれてうれしい!)

最後に、、、
「Rails Girls オーガナイザーをやると、Railsエンジニアの方とたくさん知り合えますよ?」

2017-12-17

コツコツの積み重ねの結果

この記事は、ケーシーエスキャロット Advent Calendar 2017 17日目の記事になります。

ちょっと前の記事が、もうちょっと加筆したいことがあるので、
(疲労がたまってたりして滞っている..)
先にこちらの記事をシュッと書きました。

社内の人は、私が Rails Girls という
世界的なワークショップのお手伝いをしているということを
知っている方もいると思います。
(スポンサーもやってるんですよー)
 サイトの更新もやったりしているのですが、
日本のRails Girlsのサイト (http://railsgirls.jp/) の contributors では、今 #4となっていて45 commitsとしています。(しかも1回間違えて仕事用アカウントでcommitしている...)

本家 (http://railsgirls.com/) の方は、#16 (102 commits) で、実は日本で1番commitしています。
(Rails Girls 本家のサイトリポジトリは、privateなので見えません)


たかが、サイトの更新...と思う人もいるかもしれませんが、
1週間以上前に終わったイベントが、Upcoming Eventに残っていたりするって、
メンテナンスされていない感じがして、気になるんですよね...

最初の頃は、pull request 出すのも1週間くらい迷っていたりもしましたが、
今は「あ、直ってないから pull requestだしとこ」くらいの気持ちになっています。

「誰かがやるから、自分はやらない」のではなくて、
「気づいたから、やっておいたよ!」をコツコツ積み重ねた結果です。

 GitHubで会ったことないエンジニアに「ありがと!」とか言われると、
2~3日嬉しいですw

みんなも、そういう想い味わったことありますか?

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も作成しました。