学科の同期向けにシェル入門とtwitter bot入門の勉強会をした

学科の同期向けに勉強会を開きました。題材としては、シェルの入門とrubyで作るtwitter bot入門を取り上げました。
せっかくなので勉強会を振り返ってまとめを書いておこうと思います。

参加者について

僕を含めて5人、全員が大学4年生で、工学部で情報・電気を専攻とする学科の同期です。

情報系とは言っても、ソフトウェア系の研究室に配属されている人はおらず、僕がコンピュータアーキテクチャの研究室で、1番ソフトウェアよりだと思います。他の人は、通信とか電子工学とかです。

必修の授業でC言語のプログラミングをやっていたので、全員プログラミングの経験はあります。

目的

シェル入門について

今まで何気なく使っていたシェルについて改めて学ぶことで、後から何かシェルで作業するときに、そういえば何か便利な機能があったなと思い出してもらうことを目的としました。

rubyで作るtwitter bot入門について

普段から使っている人が多かったtwitterを題材として、サーバーで動くアプリケーションをわりと簡単に作れたらいいなと思って、これにしました。

言語としてrubyを選んだのは、自分がrubyに触れて、その書きやすさやgemの便利さを知って感動を覚えてしまったからです。他の言語の環境を詳しく知らないだけかもしれませんが。

当日のまとめなど

シェル入門

資料: https://gist.github.com/itiut/5829171

まずはシェルとは何かから始めて、標準ストリームやリダイレクト・パイプなどの基本的な機能の解説をしました。
その後、資料とは少し流れを変えて、実際にシェルスクリプトを書いて実行させながら、シェルが何をしているのかを解説していきました。

シェルスクリプトを書くところでは、sleepnotify-sendを使って、一定時間たったらポップアップ通知するタイマーを作りました。だいたい次のような流れです。

  1. まずはシェル上でコマンドを打つ

    $ sleep 10 && notify-send "タイマー" "10秒たったよ"

  2. それをシェルスクリプトに書き、shコマンドで実行

    $ sh mytimer.sh

  3. 通知するまでの時間を引数で渡せるようにする

  4. シバン#!/bin/shをスクリプトに書き、chmod +xしてファイル名だけで実行できるように

    $ ./mytimer.sh 10

  5. ~/binディレクトリの中に置き、PATHに~/binを追加し、よりコマンドっぽく打てるように

    $ mytimer 10

最後におまけ的な要素として、crontabの使い方を軽く解説して使ってみたりしました。

シェルスクリプトを書くときの題材を何にするかであまり良い案が浮かばなかったのですが、意外にもnotify-sendのウケが良くて盛況でした。

rubyで作るtwitter bot入門

資料: https://gist.github.com/itiut/5820445

資料はほぼ作業手順で解説をあまり載せてなかったので、口頭説明を中心にゆっくりと進めていきました。単にbot作成の手順だけでなく、OAuthとは何かとか、SSHの暗号化の仕組みとかも解説しました。

流れはほぼ資料通りですが、途中で方針変更して、Heroku Schedulerで定期実行するのではなく、プロセスを1つ起動しておき、その中でgemのclockworkを使って定期実行するという形にしました。 なぜかというと、Add-onsを使うためにクレジットカード情報の登録するのが面倒だったからです。

変更分は資料も用意していなかったのですが、プロジェクタに自分のPCの画面を写していたので、なんとか作業内容を伝えることができました。

反省というか、資料を作っていた時点で気づかなかったのは、資料の<pre>タグで記述してあるところのうち、コマンドを入力するところは$で行頭を始めていて、他方、ファイルに記述するところは$が書かれていないようにしていたのに、初見ではその違いをわかってもらえず、ファイルの中身をコマンドとして実行していたなんてことがありました。もう少し書き方に気をつけたり、説明しておけばよかったです。

コマンドがうまくいかないなど多少のトラブルもありましたが、なんとかやり終えることができました。
プログラミングのことなどで質問されてそれに答えることはよくあるのですが、こういうある程度まとまった知識や作業として教える機会は今までなかったので、いい経験になりました。参加したみんなに楽しんでもらえて何よりです。