/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

アカデメイア ソフトウェア勉強会 #1 を実施しました

前職の方や異業種交流会で知り合った方と機械学習勉強会を運営していたのですが、今回はソフトウェア開発に特化させた勉強会を実施しました。

というのも、機械学習勉強会の参加者で「プログラミング自体を教えて欲しい」という方が多くいて、それならソフトウェア開発の方面で一度やってみようかと思い立ったのがきっかけです。機械学習勉強会の方はその方面に詳しい方も運営メンバーに加わってくれて、自然に回るようになってきました。私は機械学習の知識が浅いこともあって、自分の分野に近い方面で勉強会が開けないかなとも考えていたので、改めてソフトウェア系の勉強会を実施することにしました。

会社の人や運営メンバーとも話し合い、初回のテーマは「Git/GitHub の使い方」+「Java でのアプリケーション開発」という、ソフトウェア開発現場で使いそうな技術・ツールを一通り触れてもらうことにしました。

アカデメイア」という名前は、運営メンバーに 株式会社アカデメイア という会社を経営している方がいたので名前をお借りしました。機械学習勉強会の方は、機械学習系の修士・博士の方も多く参加しているので、なんとなくその系譜を汲んでいます。

改めて勉強会を立ち上げるとなると上手くいくか不安でしたが、運営メンバーが背中を押してくれたので無事開催することができました。実際に10名以上の方に来ていただいて、定刻になって参加者が集まってきたのを見たときはほっとしましたw

機械学習勉強会に寄せるのであれば Python を扱うべきかな〜とも思ったのですが、「最初なんだから好きなようにやったらいい」という周りの方も意見もあって、Java に振り切った内容にしました。運営メンバーに Ruby に詳しい方もいるので、次回はプログラミング言語から改めてどのような内容にできるかが楽しみです。

では時系列に沿って、どんな勉強会だったのかをお伝えします。

イベントページ

academeia-dev.connpass.com

Git/GitHub を学ぶ

まずは Git, GitHub がどういうものかを説明したあと、SourceTree でテキストファイルを編集、コミット、リモートリポジトリに push するという演習を行いました。その次に、私が用意した GitHubリポジトリを fork してもらい、そこへ自分の自己紹介をマークダウン形式で記述し、プルリクエストを送ってもらいました。最後は出揃った自己紹介を見て、参加者に自己紹介をしてもらって前半終了です。

f:id:bynatures:20160905032853p:plain

f:id:bynatures:20160905033307p:plain

最後の参加者の自己紹介をしてもらいたかったため、早く作業が終わった方にはコミットメッセージの変更やリセットなど少し踏み込んだ Git の使い方を学ぶ演習を用意していました。

文字にするとこれだけなのですが、Git に初めて触れる場合は色々な用語や概念が出てくることと、実際に手を動かして理解してもらう趣旨の勉強会のため、ここで約2時間使っています。勉強会としては地味ですが、これだけ触れてもらえば、ただ字面で読んだ以上の理解ができると思っていますし、質問も多く上がったので、それぞれの理解のペースで学べたのではないかと感じています。

SpringFramework で Webアプリケーションを動かす

次に Java での Web アプリケーションを動かすというテーマで、Java, Maven, SpringFramework について説明したあと、SpringFramework の REST API のサンプルアプリケーションを Eclipse 上で動かしました。そのあとは、この作業で使った技術について知らないものを調べたり、サンプルアプリケーションを拡張する演習を行いました。

f:id:bynatures:20160905032834p:plain

「演習」と言ってもかなり自由な演習です。Java を使ったことがあると一言に言っても程度に差がありますし、フレームワークまで含めると知らない概念や用語が多く出てきます。そのため、知らない概念や用語があればそれを調べる時間にしてもらえたらなと思って、演習課題は A と B に分けました。A は調査系の課題、B はサンプルアプリケーションの拡張で、すでにある程度知っている方が取り組めるような課題設定です。

例えば課題 A は、あえて Mavenコマンドラインから叩いて、生成された JAR を java コマンドで実行してみるという内容を入れました。動かすだけであれば Eclipse からメインクラスを実行するだけでよいのですが、初歩段階で Maven が何をしているのか理解していればその後の習熟が早いのではないかと思ったためです。

私の話なのですが、就職後に初めて入ったプロジェクトで Maven と Spring を使っていて、どちらも XML を利用するフレームワーク(ツール)なのでしばらくどっちがどっちなのか分からないまま開発していました。もちろんそれぞれが何なのか調べはするのですが、知識として知っているだけで腹落ちしていなくてすぐ忘れてしまうし、その後に本格的に Maven, Spring を触る必要がある場面でつまづいてしまったので、学べるタイミングでしっかりそれぞれのフレームワーク(ツール)が何をしているのか理解するとよかったなぁと思っています。

勉強会の最後にどんなことを演習時間で行ったのかを共有してもらいましたが、こんな話が上がりました:

  • Mavenコマンドラインから実行した
  • Maven が解決している、ライブラリの依存関係を見てみた
  • pom.xml に何が含まれているのかを調べた
  • REST API が何なのか、サンプルアプリケーションのどのあたりが REST なのかを調べた
  • SpringFramework の基礎となる DI, AOP について調べた
  • サンプルアプリケーションを拡張し、インメモリDB を使うようにした
  • API を拡張して簡単なバトルシミュレーションを作った

懇親会

懇親会はおつまみとお酒を少し用意して、気楽な感じで開きました。勉強会参加者の多くが懇親会にも参加してくれたので、懇親会も盛り上がりました。

開発経験が長い方も参加されていて面白い話を聞くことができたり、次回こんなことをやったらどうかを意見をもらえたりしました。まだ次回は開催するかどうかも決めていないですが、今回の参加者が実は社会人が多くて、もともと学生が多いかと予想していたので、社会人の方で普段使わない技術やフレームワークを学びたいという需要が大きいのだなと感じています。そのあたりを踏まえて、次回はどんなテーマにしたら面白いかを考えようと思います。何か意見や提案があれば、ぜひぜひご連絡ください!