銀座Rails#15を開催しました

去る2019/11/15(金)、銀座Rails#15を開催しました。

ginza-rails.connpass.com

今回もGinzaSIXにて、リンクアンドモチベーションさまのスペースをお借りしました。 当日の様子につきましては、togetterのまとめを御覧ください。

togetter.com

スポンサーセッション リンクアンドモチベーションさま

当日は都合により、リンクアンドモチベーションさまからのご登壇はありませんでした。 採用は継続して実施中との事ですので、興味がある方はこちらを。

www.wantedly.com

出張Railsウォッチ in 銀座Rails

毎度おなじみ出張Railsウォッチ。BPS株式会社から、TechRachoを運営されている@morimorihoge (森) さんがご登壇。

今回はRubyWorld Conference 2019のお話の共有から。例年スーツを着た方が多く、以前行った時は1/2がスーツ着用だったところ、今年は1/3にと割合が減ってきたなと感じたそうでうs.また特にRubyPrizeの糸柳さんの受賞スピーチが良い話だったとの事で、7時間39分あたりから聞くことができます。

www.youtube.com

また、今回はRailsにおける production / staging / developmentという言葉の使い方についてのお話でした。受託開発を8年やっていると、いろいろな定義で使われていて混乱するとのこと。認識齟齬についてどのような事が起きるかの事例や、自分はこう分けているなどのお話をされていました。

techracho.bpsinc.jp

@yalab(よしだあつし)さん 「Service クラスと Form Object をやめよう。サブクラスを使おう」

株式会社ジラフにてCTOを勤めていらっしゃる @yalab(よしだあつし)さん。Railsはver. 0.8から使われているベテランです。 今回はServiceクラスについて、出自と言われるものが多種に渡り定義が曖昧で、「要は使いどころだよね」のような議論は、レビューがしにくくなるのでやめるべきだと主張。

その対案として、Serviceクラスを使うのではなく、サブクラスに分割するという方法を提案され、fat mode対策としてのその利用事例を示されていました。

www.slideshare.net

シロ(@shiroemons)さん 「個人アプリをRails 6.0.0rc2に上げたらバグを踏んだのでRailsにIssueを投げた話(仮)」

イベント初登壇のシロさんは、銀座Railsには初回から休み無く連続出席して下さっています。今回は趣味の個人アプリの開発から、Railsにissueを投げるに至った経緯をお話されました。

趣味で東方編曲録というサイトを運用されており、Rails4.1で開発を始めたものを、今年夏から4.2、5.0...と上げていき、最終的に6.0.1まで上げることが出来たとのこと。そして特定の条件で発生するエラーに遭遇。Slack上のruby-jp teamにて相談の上、issueを投げたとの事でした。

touhou.arrangement-chronicle.com

その過程の調査でいろいろなことを知ることができ、Railsガイドを一読すると良い / ruby-jpに相談することがオススメ / 再現コードは最強、などの知見を共有されました。

speakerdeck.com

スポンサーセッション forkwell さま

いつもお世話になっているforkwell様より、重本さんが初登壇。

まずはforkwellをご存じの方!とのお声掛けからでしたが、さすがに8割超の挙手がありました。 forkwellのサービスとしてのコンセプトと、それを実現するために提供しているスカウトサービス、そして「同じものが届く」「誘われたのに志望動機を聞かれた」などのいわゆる感じ悪さを排除する工夫などについてお話されていました。

jobs.forkwell.com

ゲストスピーカー ゲストスピーカー @kamipo(上薗 竜太さん) と @yahonda(本多 康夫) さんのフリートーク

今回のゲストスピーカーにはRailsコミッターである@kamipo(上薗 竜太)さんを、モデレータとしてRailsコントリビュータであり銀座Rails#11などにご登壇頂いた @yahondaさんをお招きし、フリートークをして頂きました。

まずは @kamipoさんのご紹介から。6.0.1に入れたcommit数は、ActiveRecordしかいじっていないにも関わらず、2番目とトリプルスコアの最多。 それら、今回6.0.1に入った、@kamipoさんご自身の3つのプルリクエストのご本人による解説から、

github.com github.com github.com

こんな @kamipoさんのRailsへの最初のコミットに関するお話より、MySQLに詳しい開発者がRailsコミッターに居なかったため、rails newしてみればわかるような事だったがpatchを上げた件、

github.com

また6年間継続して向き合ったcase sensitive問題の件など、

github.com

様々な問題との向き合い方が共有されました。

またpatchが送られてきた時、 @kamipoさんはどうそれに向き合うか、たとえば現象を確かに解消する内容ではあるものの、その原因が解明されていないcodeについてはそのままでは良くないため質問するが、説明があり再現コードがあるものは無言でmergeするなどの説明されていました。

次回、銀座Rails#16について

次回銀座Rails#16は2019/12/13(金)。 今回と同じくGinzaSIXのリンクアンドモチベーション様のスペースをお借りしての開催です。

ginza-rails.connpass.com

@sinsoku_listy(神速)さんをお招きし、「Railsアプリの設計」との題で、Railsアプリに機能を追加(修正)するとき、実装前に考えていることや作業の進め方など、実務的なお話をして頂く予定となっております。

まだ現時点で空き席が若干ございますので、お気軽にご参加下さい。

銀座Rails#14を開催しました

去る2019/10/14(木)、銀座Rails#14を開催しました。

ginza-rails.connpass.com

今回は毎度おなじみGinzaSixにて、リンクアンドモチベーションさまのスペースをお借りしました。 当日の様子につきましては、togetterのまとめを御覧ください。

togetter.com

なお今回のレポートは、 @MasatoEgami さんのご協力によりまとめられております。

スポンサーセッション リンクアンドモチベーションさま

リンクアンドモチベーションさまからは、いつも通り採用担当の磯崎さんがご登壇。

前回「Rails tutorial3章」をやると約束したものの、できなかったとのこと。 できなかった理由を分析し、マックを開く習慣がないこと、一人でやろうとしてしまっていることの2つを挙げていました。

そこで、リンクアンドモチベーション様で開発した「i-Company CLUB」というアプリを紹介、「小さな習慣を」「小さな集団で」実施し、課題解決するものとのことで、これを用いて「毎日10分Macを開く」「一年目のエンジニアと一緒にやる」という2つの宿題を新たに立て実行する、との事でした。

リンクアンドモチベーションさまの採用情報はこちらから。

www.wantedly.com

出張Railsウォッチ in 銀座Rails

今回もBPS株式会社から、TechRachoを運営されている@morimorihoge (森) さんがご登壇。

前回までの流れで、やはりRails6の新機能に興味を持たれる方が多いとの事で、今回はActionMailboxの話が中心でした。

まずは最新のRailsを簡単に試すための、Dockerを用いた環境構築のやり方説明から始まり、ActionMailboxの基本的なしくみについて図解。そして実際にインストールからコードの用意、demoと続き、最後に触った感想について述べられていました。

speakerdeck.com

高橋 尚敬さん 「ScoutAPMを活用したRailsパフォーマンス改善」

Scount社にお勤めの高橋さん。今回はRailsのパフォーマンス改善のお話をされました。 まずは、Railsで「2番目」に時間を使っているのはなにか?という4択クイズを出題。答えはActiveRecordに次いで「Custom Code」で、つまりユーザが書いたコードが2番目に時間を使っているとのこと。

ScountAPMではこれを、method毎のパフォーマンス計測などで実施することができ、さらにMemoryの消費などについても計測ができるなど、様々な方法について共有されていました。

たっきーさん「未経験者には全てが黒魔術に見える呪いがある」

営業職からキャリアチェンジしたたっきーさん。現在6ヶ月目とのことですが、「未経験者はどこまでわかっていないのか」について発表されました。

qiita.com

未経験者にとって、最初は目に見えるすべてがわからないことで、何がわからないことさえわからない状態からスタートであるとの体験を述べられ、そこから無知には段階があること、教えてもらう際に言われて良かったこと / 混乱したこと、さらには学習効率を上げるための提案など、体験からノウハウまで共有されました。

スポンサーセッション ScoutAPMさま

2番目のセッションに引き続き、ScoutAPMさまの高橋さんがご登壇。 2009年設立されたScout社は、 NewRelicのオーバーヘッド大きい事が気になり、自分たちで作ろう!ということでAPMに参入。 もちろんRubyに対応しており、日本だとSsmartHRなど、世界的にはGithub社などで利用されているとのこと。 NewRelicより30%はやく、30%やすいとの事で、是非使ってみて欲しいとのアピールでした。

scoutapm.com

ゲストスピーカー @mrkn Kenta Murataさん「Apache ArrowできりひらくRubyの未来」

現在Speeeにお勤めの村田さんは、RubyのCommitterであり、また先日Apache ArrowのCommitterにも就任されました。

まずはApache Arrowの基本知識の説明から。Apache Arrowはデータ処理において、メモリ上に大量データを置いて処理するシステムに対してデータ操作の基本機能を供給し、「速度効率化」「実装効率化」を目指しているとのこと。 その基本的なしくみを、データ効率化、データ処理の高速化、実装コストの効率化などの具体例を交えながら解説。

更にRubyと組合わせて使う場合の未来像として、RDBMSからArrowフォーマットでクエリ結果を受け取ったり、DataFrameを利用して高度なデータ分析ができるようになるなどのメリットを例示。

そして、Arrowの開発などをするプロジェクトである「RedDataTools」、またもうすぐリリースされる1.0に向けたイベント「Apache Arrow Tokyo」が開催されるなど、活発に活動が続いているとのことです。

speee.connpass.com

speee.connpass.com

次回、銀座Rails#15について

次回銀座Rails#15は2019/11/15(金)。 今回と同じくGinzaSixのリンクアンドモチベーション様のスペースをお借りしての開催です。

ゲストスピーカにRailsコミッターである@kamipo さん、モデレータにRailsコントリビュータの @yahonda さんをお招きし、ActiveRecordなどについてのフリートークをして頂きます。 どんなお話が出るのかは、聞いてのお楽しみ...

ginza-rails.connpass.com

銀座Rails#13を開催しました

去る2019/09/12(木)、銀座Rails#13を開催しました。

ginza-rails.connpass.com

今回はまたGinzaSixにて、リンクアンドモチベーションさまのスペースをお借りしました。 当日の様子につきましては、togetterのまとめを御覧ください。

togetter.com

スポンサーセッション リンクアンドモチベーションさま

毎度おなじみ、リンクアンドモチベーションさまからは、採用担当の磯崎さんがご登壇されました。

前回までにRailsTutorialの2章まで進め、今回までに3章以降を実施する!と宣言されていましたが、今回は「詰まりました!」と悩みの報告。書いてあることをそのまま打ち込み実行...をしていたものの、それでは理解が不足し、そもそもGemfileとは... bundle installとは... で詰まってしまったとの事です。より理解を深めながら進めることを決意されていました。

そんな磯崎さんが採用担当をしている、リンクアンドモチベーションさまの採用情報はこちらから。

www.wantedly.com

出張Railsウォッチ in 銀座Rails

今回もBPS株式会社から、TechRachoを運営されている@morimorihoge(森)さんがご登壇。

まずは恒例のアンケート結果の公表から。「Rails6の新機能が気になる方が多い」「Rubyは2.4以降を使っている人が多い」「backend用にRailsを使っている人が多い」という結果を共有した上で、今回はRails6の新機能の一つであるActionTextの解説をチョイスとのこと。 ActionTextとは何かという話から、WYSIWYGとはというお話、他のWYSIWYGとの比較、機能の特徴などを解説頂きました。

また最近のSlideやGemの共有など、今回も盛りだくさんの内容でした。

techracho.bpsinc.jp

@masa_iwasakiさん「fixture再考」

いつも2次会番長をして頂いている @masa_iwasaki さん。この度またフリーランスとしての活動を再開されたとのこと。 今回はRailsに昔からある機能である「fixture」に関する発表でした。

まず会場の参加者の方々にfixtureの知名度について尋ねてみたところ、知っている方は8割超、使ったことが有るかたは半分、書いた方は10人ちょっととの挙手が。 そしてfixtureの使い方のおさらい、FactoryBotとの比較、そしてfixtureのメリットを数点挙げ、「Factoryからfixtureに置き換えたら早くなるのでは」と仮定。 検証を実際にdev.toに対して行い、その課程について解説しつつ、結果的にdev.toで13秒くらい早くなる程度、との事でした。

詳しい結果はこちらから。

speakerdeck.com

@neko314_ さん「RailsとJSのデータ橋渡しについて考えてみた」

@neko314_ さんは、皆が気になるRailsJavaScriptの関係について発表されました。 RailsからJavaScriptにデータを渡す方法として、API渡しとDOM渡しがあるが、パフォーマンス的にどちらが優れているのか。DOMの方が優れているのでは...と疑問に思ったとのこと。実際に検証方法として、AuditsパネルやGoogle developer toolなどツールを紹介の上、実装例を説明。

その上で様々な場面でのスピード比較結果を「APIで実装すると。HTMLの表示は速い」「DOMの場合、全体が表示し終わるのは速い」とし、「結論としては、よくわからない」と正直に宣言。しかし、より知りたくなった、興味がより一層増えたとお話され、その姿勢に参加者の皆さんが共感していました。

speakerdeck.com

スポンサーセッション メドピアさま

メドピアさまからは、@arihh(平川 弘通)さんがご登壇。 昨年9月からメドピアさまへ入社されたとの事で、「声かけていただけたら、そのまま会社に引きずり込みますんでよろしくお願いします」と宣言。

度々開かれている開発合宿やプルリク振り返り会、整地部活動、そして9/26に開かれるイベントの紹介など、充実した開発環境について説明されていました。

9/26のイベントはこちら techplay.jp

@arihh さん登場のblogはこちら medpeer.co.jp

ゲストスピーカー @a_matsuda (松田 明) さん 「Railsのパフォーマンスをチューニングしてみる話」

一周年を記念し、第一回にもお越し頂いた松田 明さんにご登壇頂きました。 内容はRailsそのもののパフォーマンスの話。 まずRailsって遅くて有名ですよね...307/371位(teckempower.com調べ)という話から始まり、実際はどうなのか、schaffoldでアプリを作り、計測し、早くする、という手順を共有。

計測するにあたっては、どこを計測すればすべてを測れるのか、そのためにはどこに何を書くのか...など詳細を述べ、様々なパターンでの計測を実施。

そして、着目点としてObjectのアロケーション数を挙げ、それを様々な方法で減らす事を試みます。 増えたり減ったり、また速くなったり遅くなったりを繰り返し示しながら、こうやって細かくRailsのパフォーマンスは改善されていく、ということがわかる発表でした。

次回、銀座Rails#14について

次回銀座Rails#14は2019/10/24(木)、今回と同じくGinzaSixのリンクアンドモチベーション様のスペースをお借りしての開催です。

ginza-rails.connpass.com

ゲストスピーカーには、CRuby、Apache Arrowのコミッタである @mrkn(Murata Kenta)さんをお迎えし、「Apache ArrowできりひらくRubyの未来」をお話頂きます。

発表者の募集について

銀座Rails#14では、登壇される方を募集しております。 15分は敷居が高いという声に応え、5、10、15分の中から選択できるようになりました。 敷居の低い登壇チャンスのご提供が一つの目標となっておりますので、皆様お気軽にお申し込み下さい。

t.co

銀座Rails#12を開催しました

去る2019/08/29(木)、銀座Rails#12を開催しました。

ginza-rails.connpass.com

今回はDeNA様よりお誘いがあり、渋谷ヒカリエにて開催しました。 当日の様子は、Togetterのまとめをご覧下さい。

togetter.com

スポンサーセッション DeNAさま

DeNA様より登壇されたのは、DevRelを業務とされている玉田さん。 銀座線発着駅ということで、会場が銀座Railsにふさわしい理由を説明し、会場の皆さんに納得していただけたようです。

DeNA社は「Delight and Impact the World」というコンセプトを大事にしているとのことで、完成度の高い動画でそれを説明されていました。 また、RubyRailsを積極的に使われているということで、「RubyThursdayを毎週実施」「世界規模の高トラフィック」「複数DB」「グローバル大ヒットタイトルをすべてRailsでさばいている」など具体的に述べられ、今後Rails Communityに積極的に貢献していきたいとお話されていました。

スポンサーセッション リンクアンドモチベーションさま

今回も採用担当の磯崎さんがご登壇。エンジニアを理解するため、継続的にRailsを触る活動をされており、今回も進捗を報告されました。
先月の約束として、「Githubを使う」「RailsTutorialをやる」と宣言されていましたが、実績としてRailsTutorialを2章まで進めたとの事でした。 引き続き、3章以降の写経と、Githubを使うことにチャレンジするとの事です。

そんな採用担当の磯崎さんの会社の募集要項はこちら

www.wantedly.com

「出張Railsウォッチ in 銀座Rails

speakerdeck.com

今回もBPS株式会社から、TechRachoを運営されている森さん、八田さんが登場。 まず事前アンケートの結果を参加者の皆さんに共有。5.2系にversionを上げて使っている方が多かったのが印象的でした。

またRail6に興味を持つ方が多かった結果から、dockerでRails6を簡単に試す方法をまず共有。 そして数ある新機能の中より複数DB機能に焦点を当て、ユースケースの考察やshardingに対応していないなどの制限事項、現存するgemとの機能比較、使い方の説明などを共有して下さいました。

また、Railsウォッチでは常時ご意見募集との事です。

坂川雅俊さん(株式会社ソニックガーデン)「Rails使いのNuxt.js入門」

speakerdeck.com

伊藤さんと同じく株式会社ソニックガーデンにお勤めの坂川さん。 趣味はサウナだそうで、木曜はサウナの日にしているとの事なのですが、このイベントの開催日も木曜日。サウナに行けたのでしょうか...

発表頂いた内容は、「Rails使いのNuxt.js入門」。

Nuxt.jsを使った開発方法について、まずはざっくりと開発の流れについて解説。 次に具体例として、チェックボックスのクリックでリストが切り替わる機能を例とし、プロジェクトのnpxによる作成から、実際に開発を実施する各場面のコードなどについて説明されていました。

ゲストスピーカー @jnchito(伊藤淳一) さん 「プログラマがコードを書きながら考えること 」

今回のゲストスピーカーには、「プロを目指す人のためのRuby入門」などの著書で著名な伊藤淳一さんをお招きしました。

まず伊藤さんは、すごいプログラマはどんなふうにプログラムを書いているのか、たとえばMatzさんとかものすごいスピードで開発しているのではないか、など気になりませんか、と問いかけ、今回は自分がどのように書いているのか、恥ずかしいが動画で共有しますと宣言。 ホテルの予約を定期的に見に行くクローラーを題材に、2倍速の動画にて、実際に開発する流れを共有されました。

動画中では、後から見直して自らツッコミを入れる箇所もちらほら。後から考えるとこうだったな、というリアルな状況が再現されていました。また参加者の方々も食い入るように動画を見続け、「こんな使い方があったのか」「確かに名前付け悩む、自分だけではないのだな」「テストから書くのが良い」など、様々な感想が上がっていました。

speakerdeck.com

次回、銀座Rails#13について

次回銀座Rails#13は2019/09/12(木)に開催。

ginza-rails.connpass.com

ゲストスピーカーには一周年を記念し、第一回にもお越しいただいた、RubyRailsのコミッターである @a_matsuda 松田明さんをお招きしました。「Railsのパフォーマンスをチューニングしてみる話」をして頂きます。 またトップバッターにはおなじみ @morimorihogeさんの「Railsウォッチ出張版」、公募枠は@masa_iwasakiさん「fixture再考」、@neko314さん「JS Lv.1だけどRailsアプリ上でのVue.jsのよい書き方を調べてみた」。充実した内容となっております。

発表者の募集について

銀座Railsでは、登壇される方を毎月募集しております。

15分は敷居が高いという声に応え、5、10、15分の中から選択できるようにしました。 現在、10月〜12月の発表枠について募集しております。 敷居の低い登壇チャンスのご提供が一つの目標となっておりますので、皆様お気軽にお申し込み下さい。

t.co

銀座Rails#11を開催しました

去る2019/07/24(水)、リンクアンドモチベーション様の会議室をお借りし、銀座Rails#11を開催しました。

ginza-rails.connpass.com

当日の様子は、Togetterのまとめを御覧ください。

togetter.com

スポンサーセッション Forkwell様

「帰ってきたForkwell」ありがたい事に再度のご支援をお申し出頂いたため、懇親会のピザのご支援をお願いしました。 Forkwell様の活動の紹介や、SONY様との連携のお話などを、動画にて流させて頂きました。

forkwell.com

@ken1flanさん「取り柄のないボクがGinza.rb、社内勉強会、技術書典の出店とか、なんでやってるんだっけ?(仮)」

@ken1flanさんはGinza.rbの主催をされており、私もちょくちょくお邪魔しております。

「突出した凄さはない」と自称される@ken1flanさんですが、一エンジニアとしてGinza.rbの主催、技術書典への出店、社内での非エンジニア向けの勉強会など、様々な活動をされています。 そんな活発な活動を続けている中でのモチベーションや出来事、うまくいった例などを挙げ、みんなもなにかやってみようよ、とあたたかい声で呼びかけていらっしゃいました。

www.slideshare.net

その後懇親会ではぎんざRuby会議02の開催を迫られ、冷や汗をかいておられました。(私も煽りましたが...)

@okuramasafumiさん 「Web開発におけるテスト戦略」

Grow.rbの主催など、活発な活動をされている@okuramasafumiさん。2度目のご登壇です。 今回は 「Web開発におけるテスト戦略」と題し、テスト全般についてのお話でした。

speakerdeck.com

まず用語の定義を行い、次になぜテストを書くのか、開発者の幸福のためであるという点にフォーカスされていました。 そして「プログラマの三大美徳」を参照し、それぞれの美徳に合わせたテスト戦略について具体例をお話されていました。

スポンサーセッション リンクアンドモチベーション

いつも会場やドリンクのサポートをして下さる、リンクアンドモチベーション様より、前回に引き続き磯崎さんがご登壇。 人事採用担当ですが、エンジニアを理解すべく日々奮闘。 前回は「本を一冊読んでくる」という約束をされましたが、「全く覚えられなかった」ものの、「ゼロからわかる Ruby 超入門 はじめてのIT技術講座」を一冊読み切った!と報告されていました。

ゼロからわかる Ruby 超入門 (かんたんIT基礎講座)

ゼロからわかる Ruby 超入門 (かんたんIT基礎講座)

次回の目標は、「Githubを使ってみる、Railsチュートリアルをやってみる」だそうです。次回の報告に期待しましょう。

またリンクアンドモチベーションでは、引き続きエンジニアを募集しているとの事です。

www.wantedly.com

@yahonda 本多康夫さん 「ActiveRecord::Migrationのうしろ側 / How ActiveRecord::Migration converts create_table DSL into SQL statements 」

今回のゲストスピーカーには、 Active Record Oracle enhanced adapterのメンテナーであり、Ruby on Railsのcontributor でもある @yahonda(本多康夫)さんをお招きし、ActiveRecord::Migrationのうしろ側についてお話頂きました。

speakerdeck.com

Railsを使われている方でしたら誰でも使うであろうMigration機能。そのMigration fileにはTable自体の定義、 Columnの定義など様々な定義が含まれていますが、それらがActiveRecordの中でどうClassとして表現され、また主にMySQLの場合においてどのようにsql文になっていくかについて、その流れと詳細を語って頂きました。

@morimorihogeさん(BPS株式会社) 「出張Railsウォッチ in 銀座Rails

新企画として、「Railsウォッチ」を書かれている @morimorihogeさんをお招きし、「出張Railsウォッチ in 銀座Rails」を開始しました。 第一回となる今回は、懇親会の冒頭に設置し、参加者の皆さんの属性をお伺いしながら、Rails6.0の話題などについてお話しました。

techracho.bpsinc.jp

今後も定期的にお越し頂き、1ヶ月のRailsの動きを軽く振り返る機会をご提供頂く予定です。

次回銀座Rails#12について

次回銀座Rails#12は2019/08/29(木)に開催。 ゲストスピーカーには「プロを目指す人のためのRuby入門」などの著者である @jnchito(伊藤淳一)さんをお招きし、「プログラマがコードを書きながら考えること 」について、実際のプログラミングの流れの再現とともにお話頂きます。

また会場がいつもと異なり、渋谷DeNA様での開催となります。お間違えの無いよう気をつけてお越しください。

ginza-rails.connpass.com

lsyncdでlocalとremoteのソースコードの同期をする

きっかけ

今使っているMacBookProのメモリは16G。dockerやらvagrantやらchromeやらslackやらを立ち上げていると、メモリがあっという間に枯渇してしまう。つらい...

32Gメモリ搭載のMacBookProを買うことも考えたものの、「dockerなどはLinuxの方がサクサク動く」という話をちらほら聞いたので、Linux機を買おうか自作しようかと悩んでいたところ...

ということでオススメ頂いたIntel NUCその他部品を購入し、Linux PCを半自作。メモリを32G載せました。

これに1TのSSDを買っても、合わせて10万円以下!素晴らしい。

で、一旦以下のような方針を立てた。

  • MacBook(= local)のエディタとか諸々の開発環境はそのまま使う
    • SlackとかiTunesとかその他便利ツールとかを一切放棄するのはまだつらい
  • docker、vagrantなどはNUC(= remote)に任せる

f:id:ginkouno:20190721193318j:plain

そこでlsyncd

ようやく本題。remoteとlocalとでソースコードを同期するため、lsyncdを使用した。

インターネット上を探すと、lsyncdに関する情報はいろいろあったが、ちょうど自分が使いたい設定でのサンプルが無かったので、ここにメモっておく。

前提

  • sshの鍵認証でremoteと接続する
  • 転送にはrsyncを用いる
  • remoteのOSはDebian 10 Buster

remote

rsyncを入れておく。

sudo apt-get install rsync

なおsshを用いた鍵認証を使っているが、そのあたりの設定はググるとたくさんあるので省略。

local

関連するものをHomeBrewでガバっとinstall。

brew install rsync lsyncd lua

luaはlsyncdの設定ファイルがluaで記述できるとのことで、とりあえず入れておいた。

なおこちらもsshでの鍵認証のやり方の詳細は省略する。

~/.lsyncd というフォルダを作り、そこにlsync.conf.lua というファイルを設置。

settings {
  logfile = "/tmp/lsyncd.log",
  statusFile = "/tmp/lsyncd.status",
  insist = true,
  nodaemon = true,
  statusInterval = 10,
  maxProcesses = 1,
}

sync {
  default.rsyncssh,
  delete = true,
  delay = 0,
  source = "/Users/ginkouno/project/awesome",
  host = "192.168.0.111",
  targetdir = "project",
  rsync = {
    binary = "/usr/local/bin/rsync",
    archive = true,
    compress = true,
    rsh = "/usr/bin/ssh -i /Users/ginkouno/.ssh/id_rsa -l ginkouno"
  }
}
  • Default Configはrsync接続、ssh key認証のためにdefault.ryncssh を指定しましたが、他の指定をする場合はsync の中での記載方法がだいぶ変わるので、それっぽいoptionを突っ込んで悩んだりせずにmanualを見るのが良いです(反省)

Lsyncd - Config Layer 4: Default Config

  • binary の指定ですが、これを指定しないと、元からinstallされている古〜い/usr/bin/rsyncを掴んで下記のようなエラーが起きてしまうことがあるため、先の手順にてHomeBrewでinstallした/usr/loca/bin/rsync を指定しておきます
    • ↓こんなエラーが出ることがある
rsync: -stl: unknown option
rsync error: syntax or usage error (code 1) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/main.c(1337) [client=2.6.9]
  • rsh ではssh接続時のコマンドラインの一部を記載しておきます。今回は鍵認証のために-iで鍵ファイルを、またremote側にはginkounouserでログインしたいので-loptionでuser nameを指定しています

実行

sudo lsyncd .lsyncd/lsync.conf.lua

これで、MacBook側のeditorでソースコードを編集しつつ、NUC上のdockerでテスト!などを行うための土台ができた。(なおdockerを動かす際には、remoteにsshでloginして動かすことを想定)

皆さんも潤沢なメモリを積んだLinuxマシンで、dockerをドッカ〜ンと動かしましょう。

dockerでrubyの開発環境を用意してgdbでcodeを追う

rubyソースコードを読もうとしたが、自分が使っているNote PCはMacで、個人的にはLinux環境でやりたい。 またcodeを読むに当たり、gdbでゴニョゴニョしながら動きを追いたい。

そこで、dockerでrubyの開発環境を用意し、gdbを使ってコードを追うことにしたが、そのための環境の作り方について自分用にまとめておく。

docker環境を頂く

ささださんが用意してくれているものを、ありがたく使わせて頂く🙏

github.com

Note: docker 環境(Ubuntu 18.04 base)を作ってみました。 docker pull koichisasada/rhc で試してみてください。su rubydev でアカウントを rubydev でご利用ください。

docker-compose.ymlにoptionを固める

動作に必要なoptionをdocker-compose.ymlに書いておき、docker-compose upで立ち上がるようにしておきたい。 自分はこんな感じにしている。

version: '3'
services:
  rhc:
    image: "koichisasada/rhc"
    volumes:
      - ./workspace:/home/rubydev/workdir
    tty: true
    cap_add:
      - SYS_PTRACE
    security_opt:
      - seccomp:unconfined

volumesについて

コードやbuildしたものは永続化しておきたいので、volumes で手元(host)側の作業ディレクトリをcontainerにmountしておく。./workspace にはrubyソースコードがgitからcloneされたりすることを想定。container内でbuildしたり実行したりするが、fileの編集はhost側のeditorで行う。

cap_add、security_optについて

これらはコンテナ内でgdbを使うためのもの。無いと、gdbを起動した際にOperation not permitted などと怒られる。 gdbはptrace(2)システムコールを利用しているため、ケーパビリティにSYS_PTRACEを追加して許可を与える。 またsecurity_optではseccomp = secure computing modeをunconfinedにしているが、これによりseccompによる制限が無効化され、ptraceが使えるようになる。

起動

ふつうにdocker-compose up し、docker exec -it rhc_rhc_1 bash などと実行してcontainerに入り、su - rubydev でrubydevユーザになっていろいろやる。

あとは読んだりいじったりするだけ

ディレクトリ構造、ビルド方法などは、とても丁寧にRubyHackChallengeのコンテンツに書いてある。

rubyhackchallenge/2_mri_structure.md at master · ko1/rubyhackchallenge · GitHub

gdbデバッグしつつコードを追うには、上記コンテンツでconfigureを実施するときに、最適化無効のためのoptflags="-O0" オプションをつける。

$ ../ruby/configure optflags="-O0" --prefix=$PWD/../install --enable-shared 

あとはRubyHackChallengeの内容に従ってbuildし、出来たrubygdbで動かしてやればよい。 ↓がとても参考になるので読みながらやる。 techlife.cookpad.com