2019目次

目次
P.2 …… SLP-KBIT の活動紹介
P.5 …… 学生の制作物

1SLP-KBIT の活動紹介

香川大学 KBIT
学生プログラミング研究所

KBIT会長 ： 石井玲央
SLP所長 ： 檜垣龍德
顧問： 富永浩之

Tel ： 087-864-2284
Web ： http://poulenc.eng.kagawa-u.ac.jp/Pub/KBIT/
Mail ： slp@messiaen.eng.kagawa-u.ac.jp
所在 : 香川大学創造工学部 1号棟 1909

年間活動表 (2018)

KBITの概要

年

SLP

月

KBITは、電子情報通信学会四国支部
香川大学スチューデントブランチです。
香川情報技術学生支部の略称です。
下部組織 SLP (学生プログラミング研究所)がメインで活動を行っています。
年表
Webページ

活動04

サークルガイダンス
情報処理技術者試験(春季)05

新歓BBQ大会

06
07

プログラミングコンテスト
ACMICPC
技術講演会(テスト駆動開発)

08

OSC京都
高大連携出来事

2003

SLP発足(自主ゼミの発展的改称)
ICPCアジア大会(会津大学)出場

09

電気関係学会四国支部連合大会
OSC広島

2004

米国BotBall大会(サンノゼ)出場

10

2005

ICPCアジア大会(ソウル)出場

OSC香川
情報処理技術者試験(秋季)
高大連携

2006

CESAスチューデントゲーム大会参加

11

2007

KBIT発足(SLPの上位組織として)

第2回オープンキャンパス
科学体験フェスティバル

2010

EPOCHコンテスト 本戦 5位
ゲーム学会 企画セッション 参加

12

アドベントカレンダー2018
技術講演会(サイバーセキュリティ)

2011

新部室完成

01

2015

OSC徳島出展
シェルスクリプトマガジン連載開始

技術講演会(GMOペパボ)
技術講演会(組み込み機器プログラミング)

OSC広島出展

02

送別会

2016
2017

OSC広島出展

032

SLP-KBIT の活動紹介

ロボットコンテスト
組込み技術者向けの国内大会「ETロボコン」に、出場しています。この大会では、LEGO EV3を用いてライントレースを行い、走行タイムを競います。さらに、設計の志向をUMLを用いて表現し、正確さと可視性を評価します。
参加チームは毎年増えており、2011年度からは中四国地区が開設されました。

EV3走行体ETロボコンの参加者は、組込み系の企業の若手、大学や高専の学生です。
SLPは、2016年度には、モデルシートに力を入れ中四国地区でモデル部門3位という結果でした。

ETRコース図

二輪で倒立振子を行いながら走行するマシンを用い、規定のコースをライントレースしながら走行します。
走行タイムだけでなく、各所に設置された難所(シーソー、ルックアップゲート)の攻略によって、ボーナスポイントを取得できます。
２輪倒立振子の制御は難しく、ただ安定して倒立させるだけでも大変でした。

ETロボコン : http://www.etrobo.jp/2019/

システム開発Raspberry Pi 3 でシステム構築中！

必要と感じたシステムは、できるだけ自分たちの手で開発しています。個人で開発するのではなく、プロジェクトとして数人のグループで開発します。グループでのソフトウェア開発を体感し、情報技術者としての経験値の蓄積に大いに役立っています。知識や技術は、勉強会で習得します。また、熟練した学生は、プロジェクトリーダーとなり、他の学生をまとめるプロジェクトマネジ
メントのスキルの習得も目指します。
月日テーマ

2017.07.21

関係データベースの実践的な応用

曽根 壮大 氏(株式会社 はてな)講師

2017.08.08

Immutable Infrastructure 実践入門

堀内 晨彦 氏(NTTコミュニケーションズ)

2018.01.19

なぜソフトウェアエンジニアがウェブサービスのインフラ担当になったのか

高石 諒 氏(GMOペパボ株式会社)2018.01.19

ペパボにおける研究所の役割開発と研究の相乗効果

三宅 悠介 氏
(GMOペパボ株式会社)2018.01.19

個人向けウェブサービスのインフラ基盤

高石 諒 氏(GMOペパボ株式会社)2018.01.31

ライブコーディングでわかる
テスト駆動開発

和田 卓人 氏(タワーズ・クエスト)

2018.02.02

ITサービスデザインで企画を作りアジャイル開発で具現化

酒瀬川 泰孝 氏(株式会社NTTデータ)

3

大学の特別講義として開催される外部講師による講演会(情報処理学会との共催)にも積極的に参加しています。
講演後の懇親会では、より深い話題や裏話なども聞けて勉強になります。

講演会

SLP-KBIT の活動紹介

科学体験フェスティバル
小中学生を対象とした、化学や理科実験の面白さを伝える「科学体験フェスティバル」に毎年参加しています。
今年は、LEGOを使ったプログラミング体験を行いました。
誰かに教えるという体験と違う年代に接する機会として認識しています。
科学体験フェスティバル

定期的に小中高校生を対象として、LEGOを使ったプログラミング教室を開催しています。
LEGOロボットを動かすためのプログラムを製作することを通じて、論理的に考える力を身につけてもらうことを目的としています。
また、プログラミングや数学の楽しさを伝えています。

LEGO教室シェルスクリプトマガジンで連載中「香川大学SLPからお届け!」という記事を、シェルスクリプトマガジンのvol.32号から連載しています。
SLPメンバの技術的な取り組みについて、紹介しています。
これまでに，Sinatraやmail gemによるアプリ開発、NeoVim の紹介、WebフレームワークPhoenixについての記事を掲載しています。

OSC香川にて、SLPもブース展示と発表を行いました。
SLPで開発・運用を行っているシステムや、CTFの運営サーバの紹介のほか、LT発表にも参加しました。

OSC香川4

学生の制作物コンソールゲーム
メンバー: B1 樋口, B3 平西, B3 廣瀬<制作の経緯>夏休みの 3 日間の期間を使って何か制作物を作るということで、コンソールで動くinvader ゲームを作ることになりました。
<使用した言語、技術>
・C 言語
・GitHub （https://github.com/hfumiya/invader）<仕様>
本家の invader ゲーム同様で、敵が弾を打ってくるのでそれに被弾する、もしくは敵が一定のラインまで下りてくるとゲームオーバーとなる。また、敵の弾はプレイヤーの弾で相殺できる。難易度も最初に選択することができ、それに応じて敵が打ってくる弾幕の量が変わり、残りの敵の数が少なくなるにつれて敵の移動速度が上昇する。

<感想>今回コンソールゲームを作り、C 言語のくり返し文、配列、関数、分岐などの基本文法の理解が深まり、応用的な使い方を学ぶことができました。また 3 日間という短い期間でしたが、チームで何かを作る楽しさや完成した時の喜びを感じることができました。

5

学生の制作物

Pyxel を利用したシューティングゲーム
香川大学 創造工学部 情報システムセキュリティーコース 1 回生 石上椋一
https://github.com/IshigamiRyoichi/Cat_Game
制作の経緯
夏休みという長期期間を利用し、新たなプログラミング言語を学ぼうと思った。近年では、バスやコンビニのレジなど様々なものの自動化が進み始めている。これらには、人工知能が駆使されており、それぞれに Python というプログラミング言語が使われている。
よって、Python を学び知識を蓄えれば、新たな技術開発に役立つと考え Python を選択した。また、私は長期間同じ作業を続けることが得意ではないが、好きなものと組み合わせて制作することで長期間作業できると考え、Python を駆使しゲーム制作を始めた。
使用技術
Pyxel
Python3.7.4
ゲームの概要初めに、ゲームのスタート画面が表示される。キーボードの「S」を押すことでゲーム画面に切り替わり、ゲームが始まる。マウスで画面に表示されている猫を操作することができ、キーボードのスペースキーを押すことで弾が発射される。敵を倒すことにスコアが増え、一定の値になればボスが出現する仕組みである。一定数のボスを倒せば、ゲームク
リアとなり、敵やボスの弾に当たればゲームオーバーとなる。ゲームクリア、もしくはゲームオーバーになった際、キーボードの「R」を押せばゲームがリスタートされ、「Q」を押せばゲームが終了する。

【ゲームのスタート画面】【ゲームプレイ中画面】

6

学生の制作物【ゲームクリア画面】【ゲームオーバー画面】

まとめ
今回、シューティングゲームを制作する際は、ゲームのスタート画面とゲームのプレイ画面の２つのソースファイルに分けて制作を行った。そのため、最後 2 つのソースファイルのプログラムを合わせるのに苦労した。初めは、ゲームのスタート画面のプログラムを起動し、一定の動作を行えばゲームのスタート画面のプログラムを閉じ、ゲームのプレイ画面のプログラムが起動する予定であった。しかし、インターネットで調べ、また、サークルの先輩に相談をすることで、起動中のプログラムを閉じ別のプログラムを起動するのは難しく、良い方法ではないと分かった。よって、別の方法を模索した結果、state という変数が 0 の状態であればスタート画面を開き、0 以外の状態であればプレイ画面がひらくように処理を変更すようなプログラムにした。また、state の状態はキーボードの「S」を押すことで 1 回だけ変化する。プレイ画面では、キーボードの「R」を押すことでプログラムを再び初めから処理を行い、「Q」を押すことでプログラムの処理が終了する。
シューティングゲームの制作を通して、Python の基本的な構造が理解でき、2 つのソースファイルの合わせ方を知ることが出来た。BGM がなく、ゲームをしている途中物足りなさを感じた。今後は、ゲーム中の BGM を付け加え、難易度別にステージを選べるようにプログラムを変更しようと考えている。

7

学生の制作物Web スクレイピングなどをする Slackbot の作製
CSSS B1 三枝泰士
・作製の経緯日々の食糧を近所のスーパーで調達する際、広告を見れば安いセール品を買うことができる。しかし、近所には複数のスーパーがあり、それぞれの店舗ごとの広告を調べるのは手間がかかる。URL をブックマークしておくという手は、広告のページはほぼ毎日のペースで更新されるためあまり意味を成さない。そこで、普段使うことのある Slack を活用し、ある程度慣れている Python で動かせることのできる Slackbot を使って簡単に広告を収集できれば、広告の確認も楽になると考えた。

・使用技術
Pyhton3.7.4
Slack bot API
A3RT Talk API・仕様
Bot に対して指定のコマンドを打ち込むと、そのコマンドに反応した挙動をしてくれる。
例えば、コマンドに設定しておいた某スーパーの名前を打ち込むと、その日の広告を表示しているページへの URL を Slack 上に返してくれる。打ち込む文章中にコマンドが入っていれば反応するため、会話感覚でも情報を得ることができる。コマンド以外の文章には、会話API を使ったシステムが返答する。
また、授業の開講場所を表示させたり、既定ブラウザで開かせるようにするパラメータを任意の URL に付加させたりもできるようになっている。開講場所の表示は、あらかじめ用意しておいた回答を、授業の曜日と時間をキーワードとして表示させるものである。パラメータの付加は、単に URL にパラメータを追加し、出力させるものである。既に入力する URLに何らかのパラメータが付いていれば、それに追加させるようになっているため、重要なパラメータやアンカーなどが付いていても消してしまうことはなく、挙動に支障のないようにしている。
パラメータの付加機能の使いどころは、スマートフォンでの使用を想定している。某メッセージングアプリにて送受信した URL を開く際、標準ではそのアプリ内の専用ブラウザでしか開くことができず、ブックマークやアドオンを使おうとするには、普段使っているブラウザに自分で切り替えなければならないといった問題がある。そのため、スマートフォンでも使える Slack でこの機能を実装させた。

8

学生の制作物↑このように、時折会話を交えながら使用できる。

↑アプリ内ブラウザ↑既定ブラウザ・感想
今まではコンソール画面で簡単な計算をするもの程度しか作ったことがなかったため、このようなアプリケーションで動くものを作ることができて新鮮だった。API を使うとこ
んなに簡単に、このような既存のサービスを利用したものを製作できるのだなと実感できた。今後、その他のサービスの API を使うこともあると思われるため、その時にはこの体験を活かして製作することができれば良さそうだ。
この製作物はこれで完成ではなく、今後も様々な機能を追加する予定である。例えば、コマンドから開講場所を変更させたり、学校からの講義情報変更のメールを読み取って反映させたり、などが考えられる。また、スクレイピングの利用法には十分注意し、Web サイトの注意事項を確認してから使うべきだと心に留めておこうと思う。

9

学生の制作物

サークル用質問掲示板の開発
重松亜夢
香川大学 創造工学部 B2 18T318
1. はじめに
昨年、SLP に入部した私が、一年間で感じたことの一つに、”質問をすること難しさ”がある。特に、初めのうちは、漠然とした疑問(例: Web サイトのログインの実装方法がわからない)をもつことがあった。漠然とした疑問というのは、質問をすることが難しく、質問をするハードルが高い。また、誰に質問をすれば適切であるかを悩むことも多かった。そうした経験から、質問をするための場所を作ろうと考えた。
質問をする場所として、掲示板形式の Web アプリケーションを開発した(https://github.com/
Amakuchisan/QuestionStore)。質問側は、図 1 のように、質問の概要と、質問文を記入し、投稿する。質問に対して、回答側は、コメントを投稿することができる。一つの質問に対するコメントは、一人以上の回答者によって、複数投稿されることを想定している。基本的に、二人目以降の回答者は、別解や、補足をコメントする。そのため、一つの質問に対するコメントは、ツリー形式で繋がるようになっている。また、サークル内で運用するため、香川大学の学生のみ、利用可能とする。
2. 使用した言語、技術主に使用したものは、以下の通りである。
システム構成を、図 2 に示す。
● Go 1.13.0● Echo 3.3.10 (Go web framework)● MySQL 8.0.17● Docker 19.03.2● Docker Compose 1.24.1
3.
●●
●
●
●

主な機能
Google アカウントで OAuth2 を用いたログイン
stu.kagawa-u.ac.jp 以外のユーザは登録不可
投稿された質問の一覧を表示
質問を投稿
質問に対し、コメントを投稿

図 1 質問の投稿画面

4. 今後の予定
現状、ユーザが卒業し、大学の Google アカウントが失効すると、サービスを利用できない。
そのため、卒業生が利用できるよう、認証機能の追加を行う。
また、静的ファイルの高速配信、https 化、ドメインの設定のために、Nginx で配信する。

図 2 システム構成図

10

学生の制作物11

学生の制作物

図書貸出記録管理システム BookManager
GitHub: https://github.com/hirany/bookManager
香川大学 工学部 電子・情報工学科 3 年 平西 宏彰
1. はじめに
SLP では，本を借りるとき，その本の名前と借りる人の名前を記録しています．本の貸出状況を確認するために，記録をとることは必要だと思います．しかし，私は，手書きで記録することを面倒だと感じていました．どうにか自動化できないかと考えていたところ，偶然にもバーコードリーダーが落ちていました．そこで，本のバーコードと学生を一意に定めるバーコードを使用して，図書の貸出をスムーズにしようと思いました．これが，図書貸出記録管理システムを開発しようとしたきっかけです．

2. 仕様
本の貸出履歴を記録するシステムです．ユーザは，自分の ID と本のバーコードを使用して，本の貸出や返却を行うことができます．ユーザの ID は，ユーザごとに設定されているものとします．また，一般的に，本のバーコードは一冊につき 2 つあります．2 つのバーコードのうち，上段のバーコードを用いることで，本を一意に特定することができます．

3. 使用技術
・Go1.13.1
・PostgreSQL10・gRPC-Go使用技術を選ぶにあたって，楽しく開発できるようにしたいと考えました．そこで，以前から気になっていた gRPC という技術を使用することにしました．今回開発するシステムにおいて，gRPC を使用する必要はなかったのですが，好奇心から採用しました．

4. 動作の流れ(図 1)クライアントは，ユーザの ID を受け取ると，ユーザに本の貸出か返却かを選択させます．
その後，読み込んだ本のバーコードから，ユニークな値を受け取り，サーバに送信します．
ユーザの ID と本の情報を受け取ったサーバは，貸出か返却かを区別させてデータベースに記録していきます．

12学生の制作物

5. 今後の課題

図 1. 動作の流れ

現在の段階では，本の貸出と返却をデータベースに記録することしかできません．今後は，管理者が管理をしやすいように，現在の在庫状況を確認するような機能や，貸出履歴を検索できるような機能を追加したいと考えています．また，操作性を高めるために，GUI で貸出や返却，管理の処理を行えるようにしたいと考えています．

6. まとめ今回の開発で，目的だった gRPC の技術に触れることができ，マイクロサービスがどのように動作しているかを確認することを達成できました．また，サーバとクライアントの独立性が高いため，機能の拡張がやりやすそうだと思いました．

7. あとがき
このシステムを開発しようとしていた時期，Windows の Golang の開発環境を破壊してしまいました．go get ができないという致命的な問題が発生したのです．ローカル環境での開発をあきらめ，Vagrant を使用しての開発になってしまいましたが，結果的にいい経験だったと思います．

13

学生の制作物

Slack でのサークル連絡環境の改善―自分で作るグループメンション―
香川大学 工学部 電子･情報工学科 3 回生 檜垣龍德
GitHub: https://github.com/gacky35/SlackBot

開発の経緯
現在，SLP では主だった連絡手段として Slack を利用している．その中で，重要な連絡はgeneral というチャンネルに所属している全員にメンションを行うようになっている．しかし，この general にすでに卒業された方が残っているために，その話題に関係のない人にまでメンションが行われてしまう．これを避けるためにユーザグループ機能を，API を活用して利用することができる bot を開発することを考えた．

主な使用言語及び技術- Python 3.6.8- Slack Web API- Slack RTM API- slackbot- python-slackclient仕様開発した bot をワークスペースに追加して，その bot に対してメンションと同時にコマンドを送ると，ユーザグループを作成することができる(図 1)．ユーザグループを作成したあとは，’@{作成したユーザグループ名}’ を付けてメッセージを送信すると，bot がそれを読み取って，ユーザグループに所属する全ての人に対して，スレッドでメンションを行う(図2)．
これ以外にも，ユーザグループの名称変更，削除，所属者の更新，一覧表示など一通りの処理を行うことができる．以下，図 3 にコマンドの一覧を示す．
また，ユーザグループそのものは，一つのワークスペースに対してという小さな規模を想定して開発したため，ファイルにバイナリデータとして保管するようにした．

[図 1 ユーザグループ作成処理実行画面]

14

学生の制作物[図 2 スレッドでのユーザグループに対してのメンション実行処理][図 3 開発した bot で行うことができる処理の一覧]

今後の展望
まず現状からの更新としては，開発途中におまけで作った，アンケート集計機能を定期的に実行することができるようにしたいと考えている．
また，サークルの連絡環境の良化を目標として開発を始めたため，実際にサークルのワークスペースにて利用ができるように整備を進めたい．また，サークルでの利用を実現できれば，その中で機能要求が出てくると思うため，それを受けて改良を進めていければいいと考えている．

15