2017年 coderdojo.jp の各種機能と実装について


[![CoderDojo Japan cover photo](https://qiita-image-store.s3.amazonaws.com/0/1857/b2aa0e0e-6048-0c08-de04-5a44d95630af.png "full_cover.png")](https://coderdojo.jp/)

2016年の Advent Calendar で[CoderDojo Japan のバックエンドを更新](https://coderdojo.jp/news/2016/12/12/new-backend)した話について書きました。当時からさらに１年が経ち、新たな機能もいくつか追加されたので、本記事では2017年にリリースされた [coderdojo.jp](https://coderdojo.jp/) の機能を実装とともに紹介します :wrench: :dash: 

開発中の機能も紹介するので、もし興味あれば開発に関わってもらえると嬉しいです ;)

## FAQ / 前提知識

- 🤔💭 CoderDojo って何? => [スライド](https://speakerdeck.com/yasulab/coderdojo-japan-2018)をどうぞ! :book: 
- 🤔💭 ソースコードはどこ? => 
[GitHub](https://github.com/coderdojo-japan/coderdojo.jp) 上で公開されています! :rocket: 
- 🤔💭 誰が開発しているの? => [@YassLab](https://qiita.com/organizations/yasslab) 社の人達が中心となって開発しています! :wrench:

# 機能と実装

以下、実装した機能を時系列順に紹介していきますね :wrench: :dash: 


## 1. Kata (wiki) ✏️📑

[![coderdojo-kata.png](https://qiita-image-store.s3.amazonaws.com/0/1857/4f1fa23e-07ad-0b00-2f91-b891235a59fc.png "coderdojo-kata.png")](https://coderdojo.jp/kata)

CoderDojo Kata (wiki)
https://coderdojo.jp/kata

CoderDojo に関する様々な情報をまとめているウェブサイトです。このページの編集はブラウザ上でできるので、プログラミングの知識が一切なくてもページの編集に加わることができます :memo: :dash: 

内部では [Scrivito](https://scrivito.com/) という中〜大規模サービス向けの Cloud-Based CMS を使っているのが特長で、オープンソースとして公開されている事例は世界的にもそこまで多くないかなと思います。実装の方法や背景については[関西Ruby会議2017](http://regional.rubykaigi.org/kansai2017/)で発表した次のスライドを参照してください。

子どものためのプログラミング道場「CoderDojo」を支えるRails CMSの活用事例
https://speakerdeck.com/yasulab/case-study-rails-cms-for-coderdojo


現在アカウントは手動で発行しているため、Kata を編集したい人は @yasulab までご連絡ください :incoming_envelope: :dash: 


## 2. モバイル版の道場一覧が見やすくなった 📱👀

![coderdojo-mobile.jpg](https://qiita-image-store.s3.amazonaws.com/0/1857/9dde8a01-3a92-b333-2d8d-a78af557b831.jpeg "coderdojo-mobile.jpg")


嬉しい悩みではありますが、全国の CoderDojo の数が100を超えたあたりから、モバイル版で表示すると「全国の道場」がとてつもなく縦に長くなってしまう課題がありました :scroll: :sweat_drops: 

そこで、モバイル版のデザインを改善しました。いくつか試行錯誤した経緯がありますが、現在はアコーディオン式の表示方法を採用しています。

モバイル版の「全国の道場」の表示方法を改善する #174
https://github.com/coderdojo-japan/coderdojo.jp/issues/174

モバイル版のDojo一覧を地域ごとにアコーディオンにまとめるようにする #188
https://github.com/coderdojo-japan/coderdojo.jp/pull/188

実装は [CoderDojo 岡山 岡南](https://www.coderdojo-konan.jp/)の @zephiransas さんがやってくれました :smile_cat: ありがとうございます! :sparkles: :clap: 


## 3. Document ページ 📰✨

[![CoderDojo CoC.png](https://qiita-image-store.s3.amazonaws.com/0/1857/97349a5e-fc8f-3a54-5f75-b8ffa313fee7.png "CoderDojo CoC.png")](https://coderdojo.jp/docs/code_of_conduct)


こっそり実装されたのであまり気づかれていないかもしれませんが、coderdojo.jp には Markdown でドキュメントを執筆・公開する仕組みがあります 📝💨

CoderDojo Japan ドキュメント集
https://coderdojo.jp/docs

例: コントリビューター行動規範
https://coderdojo.jp/docs/code_of_conduct

執筆するのは簡単で、Markdownのファイルを [db/docs](https://github.com/coderdojo-japan/coderdojo.jp/tree/master/db/docs) というディレクトリに置くだけで自動的に公開されます。実装もシンプルで、基本的には Kramdown を使って Markdown -> HTML に変換しているだけです。

DocsController - GitHub
https://github.com/coderdojo-japan/coderdojo.jp/blob/master/app/controllers/docs_controller.rb#L8-L13

デザインは[CoderDojo 下北沢](https://coderdojo-tokyo.connpass.com/)の @cognitom さんが作ってくれた [Keiyaku CSS](https://cognitom.github.io/keiyaku-css/) をベースにしています。デザインがいいと公式ドキュメント感が醸し出せて素敵ですね! :smile_cat: 細かな実装は下記リンクから辿ってもらえれば ;)

keiyaku-css で法務文書をWeb上に表示する #89
https://github.com/coderdojo-japan/coderdojo.jp/issues/89


## 4. 統計システムの開発 📈🤖

[![CoderDojo Report.png](https://qiita-image-store.s3.amazonaws.com/0/1857/375b8b0a-80ee-ffcb-37b3-9c1d0779b6ea.png "CoderDojo Report.png")](https://speakerdeck.com/yasulab/2017-report-from-coderdojo-japan)


[DojoCon Japan 2017 で発表](https://speakerdeck.com/yasulab/2017-report-from-coderdojo-japan)された CoderDojo の統計プロジェクトです。2016年5月の時点で構想自体はあったものの、長い長い [Yak-Shaving](http://0xcc.net/blog/archives/000196.html) を経て、ようやくリリースできました :rocket: :sparkles: 

各種イベント管理サービスのAPIで統計情報を集計したい #12
https://github.com/coderdojo-japan/coderdojo.jp/issues/12

実装は [@MoneyForward](https://qiita.com/organizations/moneyforward) の @nalabjp さんがやってくれました! 上記 Issue を見ていただければわかるように、モデル設計も含めて大幅に手を入れる必要があったプロジェクトなので、無事にリリースできて感無量です :sob: 

現在は Facebook Event / connpass / Doorkeeper の３つのイベント管理サービスに対応していて、これらのイベント管理サービスが提供しているAPIを使って情報を集計し、 **日本の CoderDojo の規模感を数字で表現できるようになりました** 。Google Form や独自システムなど、上記以外のイベント管理サービスを使っている場合においても集計できるように今後改善する予定です :sparkles: :wrench: 

Statically add Dojo events for 柏の葉/南柏/柏湘南/小平 #190
https://github.com/coderdojo-japan/coderdojo.jp/issues/190

## 5. 統計情報ページ 📊👀

[![CoderDojo Stats.png](https://qiita-image-store.s3.amazonaws.com/0/1857/31257b2a-665c-df57-036e-b40e7f0bd9fd.png "CoderDojo Stats.png")](https://coderdojo.jp/stats)

まだ開発中ですが、実はこっそり公開しているページです。上記の統計システムで集計した結果をいつでも確認できるようにするプロジェクトです。

統計情報 - CoderDojo Japan
https://coderdojo.jp/stats

といっても、まだ [Proof of Concept](https://ja.wikipedia.org/wiki/%E6%A6%82%E5%BF%B5%E5%AE%9F%E8%A8%BC) 的なことしかできていません。ゆくゆくは現在の数字だけではなく、数字の推移やそのグラフ化などもやる予定です。

統計情報を確認できる /stats ページの開発 #206
https://github.com/coderdojo-japan/coderdojo.jp/issues/206

統計システムで数字の情報はある程度取れる土台が出来上がったので、ビジュアライゼーションに興味ある人がいればぜひいかがでしょうか? :smile_cat: 

ちなみに先日 License の許諾を得られたので、[Highcharts](https://www.highcharts.com/) を使ってグラフ化する予定でいます 📊 :memo: 


## 他、改善された箇所

- Scrivito API Keys を持っていなくても開発できるようになりました [#156](https://github.com/coderdojo-japan/coderdojo.jp/issues/156)
- Fork されたリポジトリからPRが送られてもCIが適切に動くようになりました [#160](https://github.com/coderdojo-japan/coderdojo.jp/issues/160)
- View のフォーマットが erb から Haml に切り替わりました [#214](https://github.com/coderdojo-japan/coderdojo.jp/pull/214)

挙げるとキリがないですが、上記以外にも様々な改善が行われています! :wrench: :dash: 
https://github.com/coderdojo-japan/coderdojo.jp/issues?q=is%3Aissue+is%3Aclosed

## まとめ

来年の Advent Calendar が始まる頃にはもっと様々な機能が追加/改善されていると思います! 開発はオープンに行われているので、もし興味あればぜひ GitHub を覗いて見てください :smile_cat: 

CoderDojo Japan - GitHub
https://github.com/coderdojo-japan/coderdojo.jp

これからやろうかなぁと思っているタスクは大体 Issue に上がっているので、今後どういう風に改善していくか気になる人は下記の Issue リストも見てもらえると幸いです :pray: 

Issues - CoderDojo Japan
https://github.com/coderdojo-japan/coderdojo.jp/issues

まだまだやりたいことはたくさんですね 🤔💭