give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

【書評】プログラミング初心者の強くて優しい味方!「 #コードが動かない ので帰れません! 新人プログラマーのためのエラーが怖くなくなる本」を読みました

はじめに

先日、「コードが動かないので帰れません! 新人プログラマーのためのエラーが怖くなくなる本」という本が発売されることを知りました。

そしたらこの本の編集者さんが僕のツイートを見つけて「良かったらお送りしましょうか?」と連絡をくれたので、二つ返事で「はい!」と答えましたw

というわけで、「コードが動かないので帰れません! 新人プログラマーのためのエラーが怖くなくなる本」を早々とゲット!わーい!😄

せっかく送っていただいたので、本書の簡単な紹介と感想を書いてみようと思います。

【もくじ】

本書はどんな本?

ひとことで言うなら本書は「プログラミング初心者のためにデバッグの方法を解説した本」です。

デバッグに特化した技術書というのは大変珍しいと思います。僕が知る範囲では本邦初かもしれません。

本書の構成はこんなふうになっています。

●第1章 エラーはどうして怖いのか?
・エラーを読んでみよう
・エラーを読まなくなってしまう理由
・エラーに向き合う心構え

●第2章 エラーの上手な読みかた
・エラーの構成要素を知ろう
・エラーの種類を知ろう

●第3章 不具合の原因を効率的に見つけるには?
・デバッグとは?
・プリントデバッグをやってみよう
・二分探索で効率的に探そう ほか

●第4章 ツールを活用してデバッグを楽にしよう
・デバッガは強力なツール
・ブレークポイントを使ってみよう
・いろいろなステップ実行 ほか

●第5章 どうしても解決できないときは?
・プログラマーのための情報収集テクニック
・エラーが見つからないときは?
・不具合が再現できないときは? ほか

●第6章 デバッグしやすいコードを書こう
・再代入は控えよう
・スコープは可能な限り狭めよう
・単一責任の原則を知ろう ほか

書籍紹介ページより抜粋

サンプルコードは主にJavaScriptで書かれていますが、たまにPHPも登場します。
とはいえ、あくまでデバッグの方法を説明するためのサンプルコードなので、Rubyなど他の言語をメインでやっている人も問題なく読めますし、デバッグの考え方自体は言語を問わず適用可能です。

なお、本書で想定しているのは基本的にwebアプリケーション開発です。
webアプリケーションであれば言語やフレームワークに関係なくどの内容も役立ちますが、モバイルアプリ開発やデスクトップアプリケーションなど、分野の違うアプリ開発者が本書を読んだ場合、適用できる内容と適用できない内容が出てくるかもしれません。

本書の感想=プログラミング初心者の強くて優しい味方みたいな本!

いやあ、この本はいいですね!
決してタダでもらったからとか、そんなえこひいきをするわけではなく、プログラミング初心者が知っておくべきデバッグの知識や考え方、心構えなどがまんべんなく網羅されています。

また、プログラミング初心者がすっと手に取って読める構成になっているのも良いと思います。
具体的には以下のような点が良いと思いました。

薄い!

まず、いい意味で薄い。
分厚い本だと初心者の人は身構えてしまいそうですが、この薄さなら気軽に手に取って読めると思います。
実際、僕も数日で読み切ってしまいました。

参考までに拙著「プロを目指す人のためのRuby入門 改訂2版」と比較した写真を載せておきます。


堅くない!

次に、表紙のイラストもそうですが、各章の導入部にマンガが載っていたり、本文にもイラストをふんだんに盛り込んだりして、決して「お堅い技術書」になっていない点も初心者に優しいですね。



広く浅い!

そして、いい意味で広く浅い。
ベテランプログラマが本書を読むと、「いや、そこで終わらせるんじゃなくて、あれも、これも」と盛り込みたくなるかもしれませんが、「デバッグのデの字も知らない初心者」が読むことを考えると、「最低限これだけは」という内容にとどめておいた方が良いでしょう。

ただし、デバッグに関する知識はかなり広範囲に網羅されています。
たとえば僕は本書を読みながら「エラーメッセージを読め、って言うけど、例外を握りつぶすようなコードを書いたら、そのエラーメッセージすら出なくなるんだぜ〜」と心の中で意地悪なツッコミを入れてました。
ところがどっこい、第5章でしっかりその点にも触れてあったので、「参りました!!」と僕はひれ伏してしまいました(苦笑)。

そして、最後の章ではそもそも論として「バグを生み出しにくいコード」について書かれているのも非常にナイスでした👍

僕はフィヨルドブートキャンプでメンターとしてプログラミングを教えているのですが、デバッグに苦しんでいる生徒さんはよく見かけます。
ですので、そういう初心者さんにとって本書は強くて優しい味方になってくれると思います。

本書にあえて注文を付けるなら?

想定読者を「プログラミング初心者」に絞るのであれば、本書は理想的な一冊だと思います。
それでも「あえて」注文を付けるなら、以下のような点についても触れられていると良かったかなーと思います。

コンパイルエラーについて詳しく書いてあると良かった

ひとつはコンパイルエラーとの向き合い方です。
実はコンパイルエラーについては最後の6章で触れられているのですが、内容は結構あっさりめでした。

プログラミング初心者にとっては実行時エラーだけでなく、コンパイルエラーも「わけのわからない怖いエラー」だと思います。
エラーが出るとコードが動かなくなる点も実行時エラーと同じです。

動的型付け言語でwebアプリを開発している場合でも、フロントエンドはTypeScriptを使っていて型エラーと格闘しなければならない、というケースも多いと思います。
なので、スタックトレースの読み方と同じぐらい、しっかり文量を割いて説明していても良かったかなーと思いました。

トランスパイルされたコードのデバッグも少し触れてほしかった

もうひとつはトランスパイルされたコードのデバッグです。
昨今のwebのフロントエンド開発では自分の書いたコードがそのままブラウザで実行されるのではなく、トランスパイルされたり、minifyされたりして、「自分の書いたコードがどれかわからない!」という状況もよく発生します。

自分が書いたコードこちらから抜粋)

document.addEventListener('DOMContentLoaded', () => {
  const selector = '#js-bookmark'
  const bookmark = document.querySelector(selector)
  if (bookmark) {
    const bookmarkbleId = Number(bookmark.getAttribute('data-bookmarkable-id'))
    const bookmarkableType = bookmark.getAttribute('data-bookmarkable-type')
    new Vue({
      render: (h) =>
        h(BookmarkButton, {
          props: {
            bookmarkableId: bookmarkbleId,
            bookmarkableType: bookmarkableType
          }
        })
    }).$mount(selector)
  }
})

ブラウザ上のコード

document.addEventListener("DOMContentLoaded", (function() {
    var r = "#js-bookmark"
      , e = document.querySelector(r);
    if (e) {
        var t = Number(e.getAttribute("data-bookmarkable-id"))
          , a = e.getAttribute("data-bookmarkable-type");
        new N.a({
            render: function(r) {
                return r(Aa.a, {
                    props: {
                        bookmarkableId: t,
                        bookmarkableType: a
                    }
                })
            }
        }).$mount(r)
    }
}
));

自分が書いたコードがどんな形になるのかはケースバイケースなので、一般化するのは難しいかもしれませんが、コラム的な位置づけでもいいので何かしら言及があるといいかなと思いました。

ChatGPTとの付き合い方もあるとさらに良かった

それから執筆時期を考えるとこの内容を盛り込むのは難しかったかもしれませんが、ChatGPTとの付き合い方も載っていると良かったかなと思いました。
最近は「エラーが出たらとりあえずChatGPTに聞きます」という初心者さんもよく見かけるので。

とはいえ、これは現在進行形でいろいろ進化し続けている分野なので、紙の本に書いてしまうとすぐに内容が古くなってしまうリスクもありますね。

番外:最近のRubyはdebug.gemが主流です

あと、めちゃくちゃ重箱の隅だし、決して間違いでもないんですが、第4章でRuby用のデバッガとして紹介されていたbyebugはここ数年開発が止まっており、最近Ruby界隈ではdebug.gemが主流になりつつあります😅

techlife.cookpad.com

でも正直な感想を言うと……悔しいです!!(だからこそMUST BUY!)

ここからは本当に個人的な感想になるんですが、本書が発売されることを知ったときの僕の正直な感想は「うおー、このテーマなら僕が書きたかった!!」でした(苦笑)。

いやあ、僕もQiitaとかにこれまでデバッグに関する記事をいろいろ書いてましたからねえ。

qiita.com
qiita.com

あと、拙著「プロを目指す人のためのRuby入門」ではデバッグの章を作ってスタックトレースの読み方やデバッガの使い方を説明したりしています。

こんなふうに、僕にも「プログラミング初心者はエラーで困りがちだよね、こうやったらデバッグできるよ」と教えてあげたい気持ちは強くあったわけです。

なので、本書を読みながら「そうそう、それそれ!」と思う一方で、「あ〜、このテーマで僕も本を書けていたら……」と悔しさを感じる場面もときどきありました🥲

とはいえ、「この内容なら僕も書けてた」なんて尊大なことを言うつもりはありません。
「僕にも書けたかな」と思う部分も一部にはありましたが、それ以上に「あー、この説明はうまい!」とか「そうか、この観点はなかった!」と思う部分の方が多かったです。
なので、もし僕が同じテーマで本を出していたとしたら、たぶん内容的に負けていたと思います。

最初に感想として書いた「いやあ、この本はいいですね!」には、「僕も同じテーマで一冊書きたかったけど、この出来だったら完敗だわ〜!」という気持ちも含まれていたりします。

ゆえに、「コードが動かないので帰れません! 新人プログラマーのためのエラーが怖くなくなる本」はとてもいい本だと断言できます。
プログラミング初心者はMUST BUYです!

大阪Ruby会議03でHotwireを使ったモーダルUIを15分で作ってみました&基調講演裏話 #osrb03

はじめに

2023年9月9日に開催された大阪Ruby会議03で、基調講演(キーノート)を担当させてもらいました。
regional.rubykaigi.org

当日使った資料はこちらです。
発表のタイトルは"Enjoy Ruby programming, Enjoy Ruby community!"でした。

今回の基調講演ではちょっと攻めた取り組みとして、「Hotwireを使ったモーダルUIを15分で作る」というテーマでライブコーディングもしてみました。

www.youtube.com

ライブコーディングには思わぬトラブル付きものですが、今回は何とかノートラブルで実装できました!
時間も15分以内(たぶん12〜13分ぐらい?)に収まりました〜😄

基調講演をするにあたって意識したこと

今回、基調講演を担当するにあたって「IT系カンファレンスの基調講演はどういうものであるべきか」を自分なりに考えてみました。
僕がこの基調講演で意識したのは以下のような内容です。

  • 始まる前はバラバラになっている参加者の気持ちをひとつにまとめる
  • 場を温めてそのあとの登壇者が発表しやすくする
  • 「Rubyで笑おう」というイベントのテーマに沿った内容にする

また、運営のみなさんに基調講演の内容について相談したとき、「コロナ禍にプログラミングを始めた人は、こうしたオフラインのイベントに一度も参加したことがない人もたくさんいるはず」という話が出てきました。
なので、これまでずっとオフラインのイベントに縁がなかったRuby初心者のみなさんに対して、「ようこそ!」というメッセージも送りたいなと考えていました。

加えて、10年もRubyをやっているとつい「自分の昔話」という安易なネタに走りがちになってしまうので(自分語りはラクですからねw)、「過去ではなく、前を向いた話をする」ということも意識しました。
今回Hotwireでライブコーディングしたのは「みんな、Hotwire使ってる?もっと使っていこうぜ!」という前向きなメッセージを盛り込もうとした結果だったりします。

で、どうだった?

はい、自分としては大成功だったかなと思ってます!
特にライブコーディングはコードが動くたびに「おお〜〜👏👏👏」と拍手がたくさん沸き起こり、予想以上に盛り上がりました😄

拍手喝采で大盛り上がりする会場の様子(笑)

発表としても「初心者も経験者も今日一日大阪Ruby会議03を楽しんで、Rubyで笑いましょう!」というメッセージをちゃんと送ることができたんじゃないかな〜と自画自賛していますw

なので、僕の基調講演がどうこうとか関係なく、こういう感想ツイートが見れたのは嬉しかったですね😊

ライブコーディングを成功させるコツ?

発表後のQ&Aでは「ライブコーディングがとてもスムーズでしたが、何かコツはありますか?」という質問が挙がりました。
その答えはこうです。

はい、練習、練習、練習あるのみです。(身も蓋もない答え)
僕はいつも登壇前に自分のリハーサルを動画に撮って、失敗しやすいポイントや改善点をセルフレビューするようにしています。

今回、自分で撮ったリハーサル動画の本数を数えたら全部で7本ありました。

「しゃべりながらコードが書けるなんてすごい」というツイートも見かけましたが、これも練習を繰り返した成果ですね〜。

練習を繰り返してもときどき失敗してたので、「本番もきっと何かやらかすだろうな」と思っていましたが、幸いなことに本番ではノーミスでライブコーディングすることができました✌️(失敗したように見えたのは全部台本通りです!)

あの「枠」ってどうやって表示してるの?

ライブコーディング中はHotwireの仕組みがわかりやすくなるように、画面にdivタグやturbo-frameタグの「枠」を表示していました。

あの枠を表示する仕組みが気になってる人が何人かいたようですが、あれはふつうにCSSで表示しているだけです。
こんなCSS(sass)を組み込んでいます。

@mixin name-box($name, $color) {
  content: $name ": #" attr(id);
  position: relative;
  top: -14px;
  right: -4px;
  display: inline-block;
  color: $color;
  font-size: 18px;
  background-color: white;
  padding: 4px;
  border: 2px $color solid;
}

$frame-color: red;
turbo-frame {
  border: 2px $frame-color solid;
  display: block;
  padding: 0 10px 10px 10px;
  &::before {
    @include name-box($name: "Frame", $color: red);
  }
}

$blogs-color: blue;
#blogs {
  border: 2px $blogs-color solid;
  display: block;
  &::before {
    @include name-box($name: "div", $color: blue);
  }
}

$blog-color: green;
#blogs > div {
  border: 2px solid $blog-color;
  margin-left: 10px;
  margin-right: 10px;
  &::before {
    @include name-box($name: "div", $color: green);
  }
}

このCSSは「猫でもわかるHotwire入門 Turbo編」に載っていたCSSを少しカスタマイズしたものです。

Turbo Frames|猫でもわかるHotwire入門 Turbo編

Hotwire初心者の人はこの枠があるかないかで理解のしやすさがかなり変わってくると思います。
実際、この枠の表示はかなり好評だったみたいです。

このCSS以外に限らず、当日作成したサンプルアプリケーションのソースコードはGitHubに置いています。
Hotwireの実装方法が気になる方はぜひチェックしてみてください。

github.com

その他、ライブコーディングで意識したこと

フォントサイズは「これでもか」というぐらい大きくする

普段自分がコードが書くときの感覚でエディタをスクリーンに映すと、とてもじゃないけど客席からは文字が読めません。
ある程度後ろの席からでも読めるようにしようとすると、「こんなフォントサイズでコードなんて書かねーよ!!」って笑うぐらいの大きなフォントサイズにする必要があります。

エディタの表示領域はこれで画面いっぱい

リハーサル時に画面を動画で撮って、再生時にウインドウを小さくすることで「客席から見たときの文字サイズ」を意識することができます。

ターミナルのフォントサイズや、ブラウザの開発ツールのフォントサイズもエディタと同様に「これでもか」というぐらい大きくしておきましょう。

このとき、普段絶対にやらないぐらいのフォントサイズでコードを書くことになるので、実際にやってみると最初はかなり戸惑うと思います。
そのためにも何度もリハーサルを繰り返すことが大事になります。

接続チェックで文字の見え方も確認する

イベントが始まる前のPCの接続チェックではフォントサイズを含めて「スクリーン上のコードが見えやすいかどうか」を確認しましょう。
今回の大阪Ruby会議03では、ダークな背景のカラースキームだとどうしても字がつぶれて見づらく感じたので、急きょ会場でライトな背景のカラースキームに変更しました。

普段はこのカラースキームでコードを書いてますが・・・

会場のスクリーンだとこっちのカラースキームの方が見やすく感じました。

ちなみに今回使ったカラースキームはこちらです。
GitHub - relastle/bluewery.vim: :small_blue_diamond: Blue-based vim colorscheme :beer:

また、発表を始める直前にエディタを映して「みなさん、これで字が見えますか?」と客席のみなさんに問いかけることもしてみました。

マウスポインタを大きく、クリックをわかりやすく

今回のライブコーディングではブラウザを操作して「ここをクリックすると〜」みたいな説明もたくさん入れました。
そのため、以下のような効果も設定しておきました。

  • マウスポインタのサイズを大きくする
  • マウスクリック時に色が付くようにする
大きめのマウスポインタとクリック時の視覚効果

マウスポインタはMacの場合、Accessibility > Display > Pointer > Pointer sizeで変更できます。

マウスクリック時の視覚効果はPresentation Assistantというアプリケーションを使いました。
有料アプリですが、2.99ドルだったので「これぐらいならいいか」と思って購入することにしました。

‎Presentation Assistant on the Mac App Store

GitHub Copilotで速く正確にコードを書く

講演時間が限られているライブコーディングでは普段以上に速く正確にコードを打ち込む必要があります。
最初は全部自力でタイピングしていたんですが、「そんなにフィジカルを鍛えようとしなくても、現代のテクノロジーを借りればいいのでは?」と思い、GitHub Copilotに入力支援してもらうことにしました。

Stimulus用のJavaScriptなんかは「そう、それ!」という百点満点のコードを自動入力してくれるので、非常に時間の節約になりました。


できあがったwebアプリを実際に使ってもらう

これはライブコーディングそのものとは関係ないのですが、いわゆる「ライブっぽさ」というか、客席のみなさんとインタラクティブなコミュニケーションを取りたくて、できあがったwebアプリをHerokuにアップして実際に使ってもらう、という工夫をも取り入れてみました。

webアプリのURLはQRコードにしてスクリーンに表示し、手持ちのスマホでQRコードを読み取ってもらいました。

みなさん思い思いにデータ入力してくれて、イベントの楽しい雰囲気を盛り上げてくれました😄

当日のツイートなど

イベント当日のツイートは以下のページにまとめてあります。

togetter.com

僕の登壇に関連するみなさんのツイートは4〜7ページ目に載っています。
ツイートしてくださったみなさん、どうもありがとうございました!

HotwireはRails独自の仕組み?

一点だけ、jokerさんのこちらのツイートに関して補足させてください。

Hotwireを「完全にRails独自の仕組み」と言ってしまうと、初心者の人に誤解を与えてしまうかもしれません。

Hotwire(TurboやStimulus)という技術自体はRailsから独立した存在となっており、Rails以外のフレームワークで利用することもできます。

たとえば、Rails以外だとLaravel(PHP向けのwebアプリケーションフレームワーク)でHotwireを利用するプロジェクトがあります。
github.com

また、以下の記事ではRailsではなくSinatraでHotwireを利用する例が載っています。
note.com

世間一般の認識として「HotwireといえばRails」という傾向があるのは否定できませんが、「完全にRails独自の仕組み」とまで言ってしまうとちょっと語弊があるかもしれません。

なんでVimなの?RubyMineじゃないの?

「伊藤さんってRubyMineユーザーじゃなかったっけ?」というマニアックな疑問を呈している方もいました。
僕が普段RubyMineを使ってるの、よくご存じですね!

Vimを使った理由は以下の通りです〜。

その他、大阪Ruby会議03のエピソードあれこれ

フィヨルドブートキャンプ生との初めての交流

僕は2020年からフィヨルドブートキャンプ(FBC)のメンターをやってますが、その時期にちょうどコロナ禍が始まったため、受講生とはずっとオンラインでやりとりしてきました。
今回、FBCの受講生と卒業生がたくさん集まってくれたため、初めてリアルにFBC生と対面することができました!

それから、Matzさんと二人でサイン会みたいなことも開催しました(笑)。

ソニックガーデン提供(?)の物販コーナー

「物販コーナーがあるので何か販売したいものがあったらどうぞ」と言われたので、チェリー本とEveryday Rails、それと弊社ソニックガーデンのメンバーが書いた技術同人誌を物販コーナーに置かせてもらいました。
といっても、物理的な本を現金で売るのではなく「QRコードを読み取ってオンラインで購入してね」というスタイルでしたが。

そうそう、第2部のLT大会では「コードレビューで学ぶRuby on Rails」を書いた田中がこんなLTをやってましたよ。

ジャンケン大会でチェリー本をプレゼント

見本として物販コーナーに置いていたチェリー本は、最後にジャンケン大会でプレゼントすることにしました。
物理本だけでなく、電子版のギフトコード(無料で電子版が入手できるコード)も同じくジャンケン大会でプレゼントしました。

チェリー本をゲットしたtakaram71さん、おめでとうございます!🎉
(電子版をゲットしたのはいったいどなた?)

まとめ

というわけで、今回のエントリでは大阪Ruby会議03で基調講演してきたよ〜というお話を書いてみました。
発表の中でもお話ししましたが、僕自身も数年ぶりのリアルイベント参加&リアル登壇でした。

当日はちょっと用事があって、午前中で会場をあとにしなければなりませんでした。
面白そうな発表がたくさんあったので、最後まで見たかった〜😭
見れなかった発表については発表スライドをあとでチェックすることにしますね。

togetter.com

会場に滞在したのはちょっとだけでしたが、それでも久々のリアルイベントで会場の盛り上がりを肌で感じることができて良かったです。
運営のみなさん、来場してくださったみなさん、登壇者のみなさん、どうもありがとうございました!
そしてまた関西のRubyコミュニティを盛り上げていきましょう〜💪

当日付けていた名札と、参加ノベルティとしていただいたキーキャップ

PR: Hotwireの勉強会コミュニティやってます!

Hotwireの勉強会コミュニティ、その名も「Hotwire.love」を運営しています。

hotwire-love.connpass.com

Hotwireの初心者さんから業務でバリバリ使っている人まで、「Hotwireについて何か話したい、相談したい」という人はお気軽にどうぞ!
次回は2023年9月14日(木)18時からオンライン開催します。ちょっとでも興味のある方はぜひ!

hotwire-love.connpass.com

大阪Ruby会議03でEveryday Railsの割引販売をします #osrb03

お知らせ

上のツイートにもあるとおり、2023年9月9日開催の大阪Ruby会議03で「Everyday Rails - RSpecによるRailsテスト入門」の割引販売をします!
通常は最低価格19ドルですが、会場では15.99ドルで購入できます💰

運営の人から「物販コーナーがあるのでよかったらどうぞ」と言われたんですが、伊藤さんオフィシャルTシャツやオフィシャルキーホルダーがあるわけでもないのでどうしようかな〜と思ってたんですが、「Everyday Railsを割引販売したら面白いんじゃね?」と思いついて、こんな企画をやってみることにしました。

どうやって買うの?

購入手順はこんなイメージです。

大阪Ruby会議03の会場に行く
 ↓
物販コーナーに立ち寄る
 ↓
販促チラシに載っているQRコードを読み取る
 ↓
Leanpubの購入ページが開く
 ↓
表示されている割引価格でカートに入れる
 ↓
購入手続きを進める

なお、購入時はクレジットカードまたはPayPalアカウントが必要になります。

Leanpubで本を買ったことがない、という人は以下のサイトで予習しておくと当日スムーズに購入できるかもしれません。

tomoyuki65.com

ソニックガーデンの技術同人誌(電子版)も買えます

当日は弊社ソニックガーデンの田中義人(@tanaka44110)も参加します。
物販コーナーではソニックガーデンのメンバーが執筆した技術同人誌「コードレビューで学ぶ Ruby on Rails」と「Railsのサンプルコードで学ぶユーザー認証」も販売する予定です。

techbookfest.org

techbookfest.org

物理本ではなく電子版の販売になりますが、田中は「コードレビューで学ぶ Ruby on Rails」の執筆メンバーなので、興味がある人は「どんな本ですか?」と声をかけてみるといいかもしれません😄

大阪Ruby会議03の開催はまもなく!

先日もお伝えしたとおり、大阪Ruby会議03では僕は基調講演を担当します。

blog.jnito.com

基調講演のタイトルは "Enjoy Ruby programming, Enjoy Ruby community!" に決まりました。

今までの講演ではあまりやったことのない、ちょっと実験的な取り組みも盛り込む予定なので、みなさんぜひ!

ソニックガーデンの田中も第2部でLTをする予定です。

参加申込みページはこちらです。
rubykansai.doorkeeper.jp

大阪Ruby会議は4年ぶりのリアル開催です。
Rubyの勉強はしてるけど、オフラインの勉強会やIT系イベントには参加したことがない、という人はぜひ参加してみてほしいです。
「初心者だから」とか「難しいことはよくわからないから」とか、そんな理由で尻込みする必要はありません。
勇気を出してとりあえず参加してみると、きっと新しい世界が広がるはずです。

一人で行くのが怖い人は、誰か一緒に付いてきてくれそうな同僚や友人を誘いましょう。
大阪でみなさんにお会いできるのを楽しみにしています!😄

regional.rubykaigi.org

おまけ

せっかくの機会なので「サインしてほしい」っていう人がいたらサインしますよ〜w