こんにちは! フィフス・フロア技術チームのnotozekiです。
先日、約半年間にわたって開催してきた社内Ruby勉強会が最終回を迎えました。この勉強会は、プログラミング経験ゼロの状態から、Rubyで簡単なプログラムが書けるようになること目指す勉強会です。Rubyの経験がそれなり[1]にある私が準備と進行を担当してきました。
この勉強会は、ほとんどあるいは全くプログラムを書いたことがない、いわゆるプログラミング初心者を対象としていることから、準備や開催スタイルには工夫が必要でした。
この記事では、勉強会の主催者という視点から、どのように勉強会を運営してきたのか、また、初心者向けの勉強会で気をつけるべき点や、実際に勉強会を開催してみて気づいた点などをご紹介しようと思います。同様の勉強会を開催したい人、あるいは勉強会とまではいかなくても、プログラミング経験があって別の人にプログラミングを教えてみたいという人の参考になれば幸いです。
開催のスタイルは上記のような形で進めました。
場所は、参加者にプログラミングに不慣れな人が多いという性質上、2つあるオフィスの片方に全員が物理的に集まって開催する方式にしました。そのほうが、直接PCを見たり操作しながらサポートできるためです。みんなが慣れてきてからは、オフィスの行き来のコストを減らすため、Discordというビデオチャットアプリを使ったリモート開催に移行しました。
週に1, 2回程度の頻度で開催し、毎回の時間は1時間にしました。最初の頃は1時間を少しはみ出すこともあったのですが、1時間を超えると参加者はもちろん進行している私も集中力が落ちてきがちだったので、後半は毎回1時間をきっちり守るようにしました。学習効果を落とさないためには、どちらかというと開催頻度を一定に保つことのほうが大事だと感じました。
毎回の内容は、前半はテキストを元に私が解説をしつつたまに実習、後半はその回で学んだ知識を確認するための課題とレポートをみなさんにやってもらいました。課題は、参加者自身が理解度を確かめる目的ももちろんですが、進行の私からもみなさんの理解度を計る上で重要でした。
テキストと課題はオリジナルのものを用意しました。実際に使ったテキストの例は以下のような感じです。
こういったテキストを、Qiita:Teamに記事として作成して共有しました。また、課題も記事として作成しておき、課題のレポートはその記事をコピーして作成してもらうスタイルにしました。Qiita:Teamを活用したおかげで、手元でテキストやレポートのファイルを管理する必要がなくラクでした。
Ruby勉強会を進めるにあたって、テキストと課題の用意に最も時間的コストがかかりました。良い本があればそれをベースにしようと思ったのですが、なかなか完全な初心者を対象とした本は見つけられず、今回は自作することにしました。簡単に調べてみたら、トータルで107,488文字書いていたようです。本が一冊書ける……?🤔
この勉強会は、そもそもがRuby技術者認定試験に合格することを目標に企画された経緯があります。なので、言語は最初からRubyを使うことに決まっていました。ですが、Rubyを選んだのにはそれ以外にも以下のような理由があります。
Rubyを選択する上で課題だったのが、環境構築です。macOSやLinuxなら楽なのですが、WindowsでRuby環境を構築するのがどの程度大変なのか未知数でした。
ちなみに、受講者の環境の内訳は以下のような感じでした。
macOSはデフォルトでRubyが入っているので、準備は必要ありませんでした。楽で良かったです。
WSLを使っている人達はすでにRuby環境をご自分で用意されていたので、私の方では特にサポートしておらず知見がありません。バージョンにこだわりがなければsudo apt install ruby
とかで入るはずです。
WSLではないWindows環境を使っている人には、一瞬WSLを入れてもらおうかとも思いましたが、流石に大げさなのと、普段使い慣れた環境でRubyが動くことが大事(でないと日常業務などに役立てづらい)ので、素のWindowsにRubyを導入してもらう形にしました。
WindowsへのRubyの導入にはRubyInstallerを使いました。
https://rubyinstaller.org/
Gemは使わない想定だったので、ハマりを回避するためにDevkitは無しのものをインストールしてもらいました。この勉強会の範囲ではそれで問題ありませんでした。
先述のように、全員が直接集まって開催するスタイルにしたので、仮に環境構築でハマったとしてもその場でサポートが可能でした。もしリモート主体の進め方だったら、ブラウザさえあれば動くJavaScriptあたりを選択していたかもしれません。
ちなみに、この勉強会ではrbenv等のバージョンマネージャは使わない方針にしました。確かに実務では必要になってきますが、この段階でハマったりするのは本質的ではないので、環境の準備はできるだけシンプルな方法を使う方針にしました。そのおかげもあってか、全員の環境構築は初回の1時間だけですべて完了することができました👏
勉強会全体を通して、以下のようなトピックを扱いました。
このアウトラインは事前に詳細に考えていたわけではなくて、進み具合に応じてその場その場でトピックを選んだりもしました。結果的にはRubyのエッセンスを上手くカバーできたかなと思います。
特に印象に残っている回をいくつかピックアップしてご紹介します。
実用的なプログラミングでは避けて通れないCLIの操作に関するトピックを盛り込みました。初心者が躓きやすいところなので、丁寧に説明することを心がけました。たとえば、一番最初に端末に文字入力をしてもらうところでは、以下のように説明にかなり注意をはらいました。
bash-3.2$ ruby -v
ここでひとつ注意があります。先頭のbash-3.2$の部分は入力しないでください。これは「端末が文字入力を求めていること」を示す記号で、「プロンプト」と呼びます。皆さんの端末にも、文字入力が可能なところの前に何かしら表示されていると思います(表示は端末によって異なります)。このテキストでは、「プロンプトの後に入力してほしい」という意図を明確にするためにプロンプトを含めて記載していますが、実際に入力するものではないことを覚えておいてください。
また、入力は必ず半角英数字の入力モードで入力してください。全角文字ではうまく動きません。また、スペースは重要です。rubyと-vの間には必ずスペースを入力してください。入力したら、最後にエンターキーを押してください。
最初のほうでしっかりカバーしたおかげで、後半にはCLIの操作で躓く人はほとんどいませんでした。
ところで、この回で「ホームディレクトリ」の概念も説明しているのですが、これがなかなか伝わらず意外でした。「ルートディレクトリ」とごっちゃになっている人もいました。このあたりのディレクトリの説明はあまりうまくできず課題が残ります😞
最初の方で「オブジェクト」という用語を説明するのはややチャレンジングでしたが、結局Rubyでプログラムを書く以上は避けられない概念なので、逃げずに説明することにしました。ただ、かなり簡略化して、「情報をまとめたもの」「メソッドというもので指示を与えることができる」程度の概念的な説明に留めました。
また、よく議論になりがちな「変数」の説明ですが、この勉強会では「オブジェクトに名前をつけること」と説明しています。「箱」という説明は慎重に回避しました(Rubyにおいては、「箱」であるのは変数ではなくどちらかというとオブジェクトの方です)。以下のような図をオブジェクトと変数の関係性の説明に使いました。
鬼門となったのはここでした。ここに来て課題の解答率がガクッと落ちました。
やはり、オブジェクトをまとめるオブジェクトという概念は分かりづらいところがあり、説明にも苦労しました。また、配列の回では繰り返しも扱ったのですが、これも難しい概念の1つです。繰り返しは繰り返しで分けて解説したほうが良かったかもしれません。
この後に扱った例外やクラスのほうが、理解度として配列やハッシュより高く感じたのが意外でした。例外やクラスは終盤で扱ったので、全体を通してRubyの理解度が高まっていたというのもあると考えられます。そう考えると、配列やハッシュは中盤よりも終盤に扱うべきトピックだったかもしれません。トピックの順番には気をつけていましたが、ここでこんな急峻な学習曲線を描くと思っていなかったので学びになりました。
この記事では、社内で開催していたRuby勉強会をご紹介しました。フィフス・フロアでは、こうした取り組みを通じて社内の技術力向上→業務効率の改善→ひいては弊社のサービスをご利用頂いているみなさまの便益につながるように日々努めております。
この記事が、自分も勉強会をやってみたい!という人の参考になれば幸いです。この記事を見てRubyやプログラミングにに興味を持ってくれた方がいればそれも嬉しいです。プログラミングはとても楽しいアクティビティなので、ぜひチャレンジしてみてくださいね。