【勉強会】企画を考えてみよう

# 概要
社内活動の一環として定期的に勉強会を開催しています。最近ではUnityでモブプログラミングによるミニゲームの製作に取り組んでいました。

[Unityでモブプログラミングやってみよう【発足】](https://qiita.com/tamoco/items/ab3b1abae42cd6818356 "ここから全てが始まった！")

上記のモブプログラミングの企画もある程度落ち着き、みんながこのフォーマットを飽いてきている雰囲気もヒシヒシと感じましたので、継続的にやるかどうかは別で勉強会の企画を考えて実施してみようと思います。今回は直近で思いついた勉強会の企画内容を記載します。

# 【企画その１】IT知識でクイズヘキサゴン
昔テレビ番組であったクイズ番組をIT知識に絞ってやってみようという企画です。そのままルールを流用すると全員が参加できないので、少しルールを変えて取り組めればと考えています。

### 目的

最新のIT用語や技術などは知らなかったりすることも多いです。
そういった知識を共有できる場所というのは少なくて、日常の会話で知ることもありますがゲームの話とか雑談とかで終わってしまうことがほとんどです。
そのためクイズゲームを通じてナレッジの共有を図っていこうというのが、この企画の目的です。また今回のクイズのやり方では自分で調べる力も身につくので、調べることを習慣化できれば更にイイと思ってます。


### クイズのやり方

まず出題者を決めて出題者がクイズを出して自分以外に答えられる人がいるかチェックします。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/147eff02-4e24-6c0c-ba3e-e8eaedc6f012.png)


答えられる人がいた場合は、出題者がその中から回答者を選択し、選択された回答者にクイズを回答してもらいます。クイズ出題者が意図したとおりの回答であれば、回答者に点数が入ります。意図しない回答の場合は出題者が回答します。ただし、出題方法などが悪かったりする場合があります。そのため、このタイミングで出題者と回答者以外の人にどちらが点数を得るべきか決めてもらいます。

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/ef16a7b5-be09-6916-dec0-a81da2699a9a.png)


答えられるがいない場合には出題者が教えるだけだとつまらないので、出題者以外の人達で３分間インターネットで調べてもらいます。調べた後に出題者は回答者を選択し、上記の回答者がいた場合と同じように進めます。

![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/1e740f52-918d-f157-d83f-f9860c6697af.png)


細かなルールはクイズの開催者ごとに変更してもらってイイと思います。特に調べる時間は３分としていますが長くしても良いかもしれません。出題者はできるだけ期待する回答に近づけるような内容で出題した方が良いです。
例えば画像の場合だと・・・
「Docker・VirtualBoxについて違いについてコンテナという言葉を含めて回答してください」
と具体的に出題すれば出題者の回答して欲しい内容にズレがなくなるかなと。


# 【企画その２】ご意見採用型プログラミング

大きいモブプログラミングみたいなカンジをイメージしました。ようは初心者から上級者までワイワイしながら１つの成果物を作成していきます。

### 取り組み方法

まずは製作したいモノをみんなの意見を挙げてもらい決めます。これまでの活動での経験からウェブシステムの企画よりもゲームの方がイメージしやすいのでゲームの企画として意見を募ります。この手法の場合は誰か代表して取りまとめる形式が良さそうです。

ゲームの企画が決まったら実際に作っていきます。実装方法で組める人が挙手して担当してもらいます。実装担当が決まったら画面を共有してもらうなどして、実装担当のやり方を他の人は真似ます。このとき実装担当はハンズオン形式で説明しつつ他の人も着いてこれるように注意します。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/bc15bb9b-dc01-b031-b2d9-324a832da106.png)

実装以外にもゲーム的にアイデアが必要になる場合もあると思います。そのときにはいろいろ意見を挙げてもらい、ある程度まとめたもの仕様とします。仕様が決まった後は上記の実装担当を決めて進めていきます。


### 注意点

上記の取り組みの都合上、各段階でプログラムの内容などが同じ状態になっておく必要があります。Gitなどでプッシュしたモノをプルしてもらう方法もイイんですが、環境が準備できていない人も多いです。そのため「コーディング　→　意見の募集」というサイクルの中で大きな差異がないように確認しながら進めていければと考えています。取りまとめ担当の人がスクリーンなどに画面を表示して進捗が同じような状態になるように進めていくのがよいと思ってます。

# 【企画その３】GitをTRPG風に遊びながら学んでみよう

GitコマンドをRPGゲームで学ぶツールはありますが実際にコマンドを打ってみないと身につかないわけです。とはいえ何か作ってGitで管理するといっても意識してブランチなどを切らずに、ちょっとしたアップローダーみたいに使ってしまいがちです。
またGitを中心に学ぼうとしたときにテキストなどのペラペラなファイルでやっても味気ない気持ちになってしまうわけで、Gitを学ぶということを目的に楽しみにながらできる企画を考えてみようということです。
こちらではリモートリポジトリ先の具体的な設定など省略しています。もし実際にやってみる場合はGitHubやGitLabなどを準備していただけると助かります。

### Gitクエスト ＝下準備＝

まずは下準備をします。GITを学ぶことが目的なので管理するファイルは単純なモノにします。HTMLファイルを用意しChromeで確認する形にします。準備するHTMLファイルですが以下のようにします。ファイルが準備できたらGitHubなどにリモートプッシュしておきます。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/1261e39c-78a5-bc2e-9461-068840fd7a8e.png)


単純にHTMLをRPGのキャラクターに見立ててGitで管理していこうという内容です。上記はあくまでサンプルなので皆さんがお好きな構成でやってみてください。各HTMLの中身ですが、最低限HTMLとBODYだけ記述してChromeで表示できる内容にしておけば良いと思います。TRPG風と記述したのは上記のファイルの中身にツラツラと小説のように各キャラクターごとのストーリーを記述していきます。ストーリーだけを記述していくわけなので最悪テキストファイルでもイイです。でもHTMLファイルなら勇者の画像とか準備してちょっと雰囲気を醸し出すことはできるかなと思ってHTMLファイルにしています。

### Gitクエスト ＝序盤のストーリー＝
洞窟に行って真実の鏡を取ってくるクエストを進める設定とします。真実の鏡を取るまでの敵との遭遇や真実の鏡をゲットする内容を各キャラクターのHTMLファイルに記載していきます。記述例は以下のようなカンジです。
あくまでRPG風のイメージのようなモノなのでゲームのログのように記述するのがイイかもしれません。

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/b9ea9d34-e6a9-c786-8068-52352d6a58d6.png)


記述し終わったらクエスト自体はクリアとなりますが、ゲームといえばセーブする必要があるわけです。そのセーブが最初のcommitコマンドになります。ただし、commitだけだとローカルリポジトリに反映しているだけなので、pushでリモートリポジトリにも反映してもらいます。
これらのコマンドをPS4やスイッチで例えるとローカルリポジトリはゲーム機自体にセーブするカンジで、リモートリポジトリはクラウドサーバーにセーブするカンジと伝えると初心者はわかりやすいかもしれません。

### Gitクエスト　＝パーティ分割による攻略＝
次のタンジョンでは２つのパーティに分かれて攻略するという設定にします。ここでRPGという世界観が活きてきそうなカンジです。普段からGitを使っている方なら予想はつきそうですが、Gitによるブランチで各パーティーごとに分けて編集していきます。ブランチ名などはyusha-partyやmahoutsukai-partyみたいにパーティがわかるようにするとイイかなと。
ブランチを切るケースは機能単位で分けたい時などですが、規模が小さいとイメージしづらいと思っています。なのでPRGでパーティを分けて攻略するという形にすればイメージしやすいかなと思い上記のような内容にしています。

![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/b4a8386c-3153-7ad2-84db-160b6e120b96.png)


### Gitクエスト　＝同じアイテム名で競合＝
２手に分かれた状態で進めている状態です。２手にパーティ（ブランチ）は分かれましたが「ふくろ」は共用で使用できる設定とします。勇者のパーティで上やくそうを拾ったということにして「ふくろ.html」に記述していきます。ふくろだけだとパーティで分けた意味が感じにくいので以下のような記述しましょう。

■勇者パーティーの冒険内容
* 勇者.html：レベルアップして攻撃魔法を取得した
* 僧侶.html：中回復する魔法を取得した
* ふくろ.html：上やくそうを手に入れた。使うと60HP回復するぞ！

一旦、上記の内容でmasterへmergeします。リモートリポジトリに反映してもイイと思います。そしてその後に魔法使いパーティの内容を記述していきます。以下のように記述してください。

■魔法使いパーティの冒険内容
* 魔法使い.html：中威力の火の魔法を取得した
* 武闘家.html：更にムキムキになった
* ふくろ.html：上やくそうを手に入れた。使うと40HP回復するぞ！


上記の内容でmasterへmergeします。そうすると競合するので解決しましょう。上記の内容で上やくそうでアイテムを被せてますが「ふくろ.html」を編集して保存している時点で競合しているので特に意味はないです。ただ同じアイテムの方が競合しているというイメージが掴みやすいのでアイテムを被せました。逆に誤解されるかもしれないので補足は必要かもしれません。

![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/1927bc11-ceb8-82d1-1b6c-95df61c0284c.png)

### 結果何をやりたかったのか
とりあえずRPG風のサンプルは以上で終了しておきます。完結しておらず申し訳ありません。この内容で一番伝えたいこととしてはゲーム的なテイストを入れてユーモアを入れつつGitを楽しく覚えられるのではということをお伝えできればと。
上記は比較的カンタンなサンプルですが、「master&developブランチの構成」について説明する場合には、「現実の世界」と「夢の世界」があるような内容で楽しむのもイイかなと思います。
馬鹿らしく思われたりするんですが、取っ掛かりの時点でワンクッション置くだけで結構取っ付きやすさなどは変わってくるので、こういった遊び心を交えつつ学習していければと思います。

# FizzBuzzできるかな？
お好きな言語でFizzBuzz問題にチャレンジしてみようという企画です。FizzBuzzというのは以下のようなプログラムになります。

* 1から100までの数をプリントするプログラムを書け
* 3の倍数のときは数の代わりに｢Fizz｣とプリント
* 5の倍数のときは数の代わりに｢Buzz｣とプリント
* 3と5両方の倍数の場合には｢FizzBuzz｣とプリント

よくプログラミングを学習し始めたときの問題として出題されます。何を今更というカンジではありますが初心者～上級者まで一斉にチャレンジして問いてみようという企画です。初心者は真っ直ぐに取り組んでイイですし、上級者はコード記述を短くするチャレンジをしてもイイです。時間は短いので勉強会のアイスブレイク的な形でやってみても良さそうです。


# 思いついた企画内容を書いてみて・・・
とりあえずアイデア出しのようなモノを記事にして投稿してみました。多分荒い部分が多くありますが、直近で行われる勉強会で参加者にやってみたいモノを確認し、実際に企画をやってみようと思います。企画じゃなくて既存のやり方であるモブプログラミングをやりたい場合もあるので、その場合は上記の企画の活動が投稿できませんがご了承ください。