筑波大生のための匿名掲示板「A+つくば」を作った話
この記事は、mast Advent Calendar 2022 の25日目の記事です。23日目はしょあさんの記事『プログラミング課題不正回答を防ぐ手法の提案』でした。
まえがき
僭越ながら、mast Advent Calendar 2022の大トリを務めさせていただきます、A+つくば運営チームです。今回は、私たちの開発した筑波大生向けWebサービス「A+つくば」とその背景にある技術について紹介したいと思います。どうぞよろしくお願いいたします。
A+つくばとは
皆さんはA+つくばをご存知でしょうか?使ってますか?
ちなみに「エープラツクバ」が正しい読みです。
A+つくば目指していること
皆さんは大学生活の中で、こんな経験をしたことはないでしょうか?
- 大学の課題が解けないとき、 同じ大学内で協力してくれる人がいない。
- 先生に質問する機会を失ってしまった。先生に訊くのはなんか嫌だ。
- SNSやLINEグループで訊くのはもっと嫌だ。
大学の課題って難しいですよね。先生が何でも教えてくれるわけでもないですし、友達に訊くにも同じ講義を履修している友達がいないことも多々あるでしょう。
そんな時、匿名かつ、筑波大生同士で話し合える掲示板サービスがあれば便利なのでなのではないか。そういった思いからA+つくばは生まれました。
Yahoo知恵袋やQuoraのようなQ&Aサービスの形ではなく、皆で知恵を出し合ったり、関係ない雑談を楽しんだり、筑波大生が匿名でコミュニケーションできる場を作るということを意識しています。「怖くない2ちゃんねる」を意識し、明るい雰囲気のWebサイトを目指しています。
enPiTの紹介
A+つくばは2022年度のenPiT夏合宿の成果物として作成したプロトタイプを、夏休みにフラッシュアップし、2022年度秋学期の開始に合わせてリリースしたものです。
enPiTはmastとcoinsでは3年次実験の1テーマとして、klisでは選択科目として開講される講義で、「アジャイル開発によって身近な課題を解決する」ことを目標にしたPBL型の学習プログラムです。kyon_mmさんやmiholovesqさんなどの著名なアジャイルコーチを外部講師としてお招きし、チームでアジャイル開発に挑戦するというかなり気合の入った講義です。
A+つくば運営チームもmastとcoinsの学生からなり、皆で話し合いながら開発を行っています。
A+つくばの技術
創成学類のAdvent Calendarということで、技術にも触れてみます。チームメンバーにはWeb開発の熟練者がおらず、皆知恵を絞りながらのスタートでした。ゆえに、使われている技術はモダンというよりは「枯れた」ものが多くなっています。
技術スタック
開発
PythonのWebフレームワークであるDjangoで開発されています。DjangoはRuby on Railsなどと同じく、MVCモデルに基づいており、いわゆるMPA (Multiple Page Application) を開発するためのフレームワークとなっています。ユーザーからの投稿はRDBMSに保存されます。DjangoではサーバーがGETリクエストに応じて送信するHTMLにDBの内容を埋め込むことができ、この仕組みを基本としてデータを読み書きしています。
しかし、「ページをリロードせずにリアルタイムで会話がしたい」という意見が多かったため、一部にいわいるAjaxを取り入れ、フロントエンド側で動的にコンテンツを表示するようにしています。Django REST FrameworkでAPIを提供し、Vue.jsを使って画面を描画しています。
数あるフロントエンドフレームワークからVue.jsを選んだ理由は、「VueならばバニラのJavaScriptのように使える」「Djangoの仕組みを維持したまま、必要な場所だけ動的にできる」
ためです。Vue.jsでは以下のような書き方ができます。
画面デザインには、レスポンシブルなCSSフレームワークであるBootstrapを利用しています。デザインが一番大変だった気がします。皆さんが自然と使えるようなデザインをチームで試行錯誤しました。
開発期間はだいたい1か月でした。開発にあたっては、フィードバックを様々な方にいただきました。ご協力いただいた皆様、改めてありがとうございました。
運用
運用は費用面の問題もあり、かなり枯れた構成になっています。
サーバーについてはGMOのConoHaというサービスでVPSとDBサーバーを契約しています。DBは定期的なバックアップを取っています。運用費用は月約2,000円です。
ソフトウェア的には伝統的なLAMP Stackとなっています。
- LinuxディストリビューションであるUbuntu
- Apache2をWebサーバーに使用
- MySQLのOSS実装であるMariaDB
- PythonのフレームワークDjango
モダンな技術としては、CDNサービスのCloudflareを利用しています。CDN (Contents Delivery Network) はサーバーのファイルを全世界でキャッシングし、高速なページ読み込みを実現する技術です。A+つくばの静的なコンテンツ(画像やCSS、スクリプトなど)はCDNを介して配信されています。読み込みは割と速いサイトなのではないかなと思います。もちろん、通信はすべてTLSで暗号化されています。
終わりに
今回は私たちが開発・運営するサービス「A+つくば」について説明しました。もし興味を持っていただけましたら、ぜひ使ってみてください!
また、開発や運営に興味があるという方も、ぜひお声掛けください。
それでは、この記事を持ちまして、mast Advent Calendar 2022は終わりとなります。たくさんの面白い記事があり充実したアドベントカレンダーだったのではないかと思います。2022年も残すところあとわずかですが、皆様お体に気を付けてお過ごしください。よいお年を!
<文責>
A+つくば運営
takumi1001(https://zenn.dev/takumi1001)
Discussion