image

急に思い立って、Railsでスレッド型掲示板みたいなものをつくりはじめた。いわゆるBBSというやつ。ユーザのアイデンティティがわりと強調されるつくりになってるから、掲示板というよりはインターネットフォーラムみたいなものになってきたかもしれない。

What

コンセプトしては、質問も投稿できるし、日報も書けるし、議論もできるし、雑談も、不具合報告も、タスク管理も、リブログも、お知らせや告知も、ハッキングから今晩のおかずまで ではないけれど、ユーザが投稿して他のユーザがコメントを付けるような形式のものをごった煮で全部包含できるようなものをつくりたい。しかもそれを掲示板という形式でやりたい。

あまり尖ったアイデアは無いけれど、投稿 (掲示板的にはスレッドにあたる単位) ごとにカテゴリを設定できて、同コミュニティ (掲示板的には板にあたる単位) 内で異なる類の投稿が上手く棲み分け出来るようにしようと思っている。例えば amakan 用にカテゴリをつくるとしたら、不具合報告カテゴリ、質問カテゴリ、お知らせカテゴリ、雑談カテゴリなどになる。業務とかに導入するなら例えば、開発カテゴリ、営業カテゴリ、総務カテゴリみたいに縦割り形式の分け方になるかも。

オープンなコミュニティでも上手く自治できるように、投稿やコメントにLikeを付けられるようにして、もらったLikeの数とアカウント作成日からの経過日数を元に、徐々に権限をUnlockしていく仕組みはいれようかなと思っている。例えば、他人の投稿のカテゴリやタイトルが不適切だと思ったら、上位ユーザは適切なものに変更できるとか、不要と思わしき投稿をアーカイブできるとか。この手の権限管理は実装したことが無いので一度設計してみたいと思っていた。

他に大事そうな部分として、参加したスレッドについては未読管理ができること、議論の場という側面を持ちながらも日報や告知のような投稿が1つの記事らしく表現されること、小学校でMarkdownを習わなかった世代でも使えるようにリッチなエディタが提供されること、板ごとに空間が完全に独立していて別々のアカウントや認証方法を利用できること (組織によってはSAML認証を利用したかったりGoogleアカウントで統一したかったりする) などの特徴が挙げられる。

Why

掲示板というと、90年代から00年代にインターネットで流行っていたものというイメージが強く、少し古めかしいイメージがあるが、仕組みが単純で、理解しやすい構造のWebアプリだと思う。だからこそ多くの人に受け入れられたのだと思う。昨今のWebアプリはとにかく複雑なものが多いので、ここは一度初心に立ち返って、現代の技術で掲示板を再構築してみることで、何か学びが得られるのではないか、と思ったのが今回掲示板をつくりはじめた動機である。

自分の観測範囲内では、2008年頃から日本でRuby on RailsというWebアプリをつくるためのフレームワークが流行り始めて、「Railsを使って15分で掲示板をつくる」みたいな記事がちらほら出始めていた記憶がある。それ以前のCGI時代のプログラムについては正直全然詳しくなくて、自分で初めてPCを買ってプログラミングを始めたのが2009年とかなので、昔はこうでなあみたいな話には入っていけないことが多い。

はじめてRailsのコードを書いたのが2010年頃で、当時も最初はチュートリアルを元に掲示板みたいなものをつくっていたと思う。それが、6年後の今になっても未だにRailsで掲示板みたいなものをつくっているという調子だから、何だか笑えてくる。更に皮肉なことに、Webアプリケーション開発は複雑化の一途を辿り、15分どころか数時間作業しているのに一向に完成する気配がない。もしかしたら、顧客の要求と成果物による満足度だけを比較してみると、人類は段々退化していっているのかもしれない。

How

amakan の開発でReact.jsを利用したSingle-Page Applicationの開発に慣れてきたので、今回も同じような構成でやることにした。amakanの設計ではページ間の遷移にまだ根本的な問題を抱えているので、今回はページ遷移は面倒を見ずに、単純にサーバサイドでReact.jsを利用してHTMLを描画するだけという状態にした。なので、現状HTMLテンプレートエンジンとしてReact.jsを利用していて、動きを付けたりコンポーネントをページ間で使い回したいときに少し便利という具合。

amakanのときは未だSprocketsとWebpackを併用しており、CSSのコンパイルや、最終的なJavaScriptの配信にはSprocketsを利用していた。今回は完全にSprocketsを捨てることにして、JavaScriptもCSSもWebpackだけでコンパイルし、本番環境で配信するファイルもWebpackだけで生成するようにしてみた。ここは初めてやったので沢山経験値が稼げて良かったかも。この知見は次回からのRailsを使う案件でも活用できそう。

あと今回は外部のCSSライブラリをほとんど使わず、全て自分で書いてみることにした。WikiHubやamakanでは適当なライブラリを使っており、このテイストがそれなりに気に入っていて、ライブラリもそこそこ使いやすかったので、これを真似して自分で書いてみることでもう少しCSS力を上げようかなあと思っている。