CoderDojo Japan のバックエンドを更新しました

    CoderDojo Advent Calendar 12日目、coderdojo.jp の裏側をリニューアルした話です。 (執筆: @yasulab)


    トップページ (https://coderdojo.jp/) が変わっていないので気づきにくいですが、実は coderdojo.jp の裏側 (バックエンド) が新しくなりました! 🎊

    裏側が新しくなったので、ついでにブログ記事も coderdojo.jp で書いてみようかなと思い立ち、ササっと組み立ててこちらから公開しています。まだデザインやSNS周りが出来ていないので質素なページではありますが、ブラウザからブログ記事を執筆・公開するぐらいならサっとできてしまいます! 📝✨(どうやっているかは後述)

    本記事はブラウザからの投稿テストも兼ねつつ、どんな背景があって、どういう風に裏側が置き換わって、どういうことができるようになったのかを書いていきますね😆

    🔙 これまでの coderdojo.jp の変遷

    初めて知る方もいるかもしれませんが、これまでの coderdojo.jp (coderdojo-japan/web) は CoderDojo Tokyo の河村さんが作った coderdojo-tokyo/web をアレンジして作られています。裏側はどちらも同じで、Parse と呼ばれる MBaaS を使っています。しかしこの Parse というサービス、なんと2017年1月28日に閉鎖してしまうんですね😱 したがって、閉鎖するまでに裏側を別のサービスに移行する必要がありました💦

    また、使われている技術がやや高度なこともあってか (あるいは周知不足もあってか)、以前からオープンソースとして公開されているものの、この coderdojo.jp の開発・運用は @yasulab がほぼ1人で行っていました (参考: 最近のコミットログ)。開発は好きなので @yasulab がやる分には構いませんが、やはりエンジニアではなくとも気軽に編集・更新できる仕組みがあるともっと良さそうです 🆙

    他にも同様の課題として、CoderDojo Japan に掲載している Dojo 情報を編集したいときは毎回 @yasulab に連絡する必要がある、という仕組み上の課題があります。Dojo の数が 20~30 ぐらいの時はこれでもまだ機能していますが、現在のような規模にまで増えていくと、それぞれの Dojo がそれぞれの情報を編集できた方が良さそうですよね 😅

    「移行は必須。ただせっかくなら、もっとうまく開発・管理・運用できるようにしたい」という思いは2016年の初頭から感じていて、もっといろんな人が気軽にできる編集や投稿できるものだといいなぁ、とぼんやりと考えていました🤔

    🛠 移行するついでに、やりたいアレコレ!

    上記の要件をまとめると、こんな感じになると思います📝

    1. ブログ機能なども実装したいし、拡張性・柔軟性も保持したい
      => 作ってみたい機能の例: GitHub Issues

    2. 何かあっても大丈夫なように、少なくとも @yasulab が開発・メンテできる
      => Ruby/Rails + Heroku

    3. Ruby/Rails を知らない人でもブラウザからポチポチ編集できるとベスト 💯
      => Rails + CMS ... ???

    上記の 1. と 2. については Ruby/Rails + Heroku で十分です。また、これまで開発・運営は @yasulab が対応していたので、これも特に問題になることはなさそうです。でも 3. は...? 

    💰 Cloud-Based Rails CMS: Scrivito

    そんな時にふと舞い降りた話が、Scrivito です。

     Cloud-Based Rails CMS
     https://scrivito.com/

    デモ動画 (https://www.youtube.com/watch?v=gsjt5ykGPgA) を見てもらうと分かりやすいのですが、Ruby/Rails を Cloud-Based CMS として活用できるようにするプロ向けの有料サービスです。2016年にリリースされたばかりのサービスですが、豊富なプラグイン機能や開発者と直接話せるサポート体制もあり、順調に採用事例も増えているようです。ただ、これだけ充実していることもあってか、お値段もそれなりにします 💸

     Large:  $499/month
     Medium: $169/month
     Basic:   $19/month

    なんとかして使えるといいなぁと思っていた頃、なんと Product Owner (PO) の Thomas さんが来日しているとの話が...👂 ダメ元で尋ねてみた結果、(本当は1時間ほどの英語での打ち合わせでしたが要約すると) 次のような話になりました😸

    • Thomas「日本ではまだ利用例がなくて、利用事例は欲しいんだよねぇ🤔」

    • yasulab「CoderDojoはOSSコミュニティなので、丸ごと公開できますよ!」

    • Thomas「おぉ、それいいね! 👍」

    • Thomas「実はドイツの開発チームでは CoderDojo もやってるんだよね。CoderDojo ならぜひ!」

    • yasulab「ドイツにも CoderDojo 結構ありますもんね〜😸」

    • Thomas「じゃあ本社 (ドイツ) に戻ったら相談して、問題なければ永久無料アカウントを配布するね🎫」

    • @yasulab「ぜひぜひ! お返事お待ちしております! 😆」

    まさかこんなに話がすんなり進むとは思いませんでしたが、後日 CoderDojo Japan 向けに永久無料アカウントを無事発行してもらうことになり、Scrivito を無料で使えるようになりました。その後休日や仕事の合間で少しずつ載せ替えていき、今に至ります。

    そして今こうしてバックエンドが新しくなったので、既存の状態 (トップページ) も保持しつつ、新しい機能を追加しやすくなり、かつ、技術に詳しくない人でもブラウザ上から開発に参加できるようになりました! 🆕✨

    🎁 今できること、今後できること

    具体的に実装したこと、これから実装することは次の通りです。

    とりあえず手持ちのアイデアを上で挙げてみましたが、実装できる環境が整っているので、何か面白そうなアイデアがあれば他にも作ってみようと考えています🔧✨ もちろん OSS としても公開しているので、欲しい機能があれば Issue や PR などでリクエストしてもらうことも可能です😸👌

    🔧 他、やったこと

    ちなみに、他にも細々とした更新があります。特にドメイン周りも複数人で管理できるようにしたり、下北沢オープンソースCafeからの支援をいただけた部分が大きいです。主な更新は次のとおりです。

    • coderdojo.jp のネームサーバーを Gehirn DNS に変更
      管理者を複数用意して、権限を持った人が各自で扱えるようになりました 👥

    • coderdojo.jp ドメイン代は下北沢オープンソースCafeがスポンサーに! 💰
      ただDNS代も費用なので、ここも何かできたらいいかもしれない? 🤔
      「もしかしたら Dozens が支援してくれるかもしれない...?」 (OSS Cafe店長談)
      こちらについては、後日僕の方で直接伺ってみようかなと思います 👀

    • Apex Alias を使ってルートドメインに変更
      www.coderdojo.jpcoderdojo.jp
      ※ ただしcacheにヒットするとリダイレクトループが発生してしまうため、 Parse も平行して運用
      cf. 具体的なコミット

    • 新 coderdojo.jp リポジトリのオープンソース化
      coderdojo-japan/coderdojo.jp
      ※ 追記:万が一の場合すぐに Private にロールバックできるよう、一時的に開発チームである YassLab Organization で管理していましたが、しばらく運用してみて問題なさそうだったので、2017年に CoderDojo Japan Organization に移管しました 🚜💨 (GitHub Issue #88)

    🔖 まとめ

    • ✅ Parseシャットダウン後も存続できるようになった
    • ✅ Ruby/Railsを知らなくても編集できるようになった
    • ✅ CoderDojo Japan に便利機能を追加できる環境が整った

    とまぁ、こんな感じでバックエンドが無事に移行できました! 

    色々とできることの幅も広がったので、個人的にも開発がもっと楽しくなりそうです😆✨ 何か気になることがあれば @yasulab までお気軽にお問い合わせください 😸

    CoderDojo Advent Calendar もまだまだ続きますので、引き続きお楽しみください :)

    Yohei Yasukawa (@yasulab)
    Co-founder of CoderDojo Japan


    💖 謝辞

    今回の coderdojo.jp のバックエンド更新は YassLab 社の以下の方々に協力してもらいました。この場を借りて御礼申し上げます。ありがとうございます!! 😆✨


    更新日: 2017年01月15日