coderdojo-japan / dojopaas

さくらインターネットからご提供して頂いた計200台のサーバー申請フォームです。README に沿って申請すると、Dojo 向けのサーバーをご利用いいただけます。
https://coderdojo.jp/kata#support
MIT License
17 stars 87 forks source link

DojoPaaS のコードを node から Ruby に移植したい #110

Closed yasulab closed 4 years ago

yasulab commented 6 years ago

プロトタイプを開発していただいた @miya0001 さんに許諾をいただいけたので、Ruby の開発会社である @YassLab チームで開発および運営を引き継ごうと考えています 🚜💨

@yasulab: DojoPaaS のメンテナンスについてご相談なのですが、弊社 (YassLab) のメンバーも増えてきて、チームで CoderDojo のコードを対応できるようになったとので、弊社側で DojoPaaS の運用およびメンテナンスを引き継いでみようかなと考えているのですが、いかがでしょうか? 🤔💭

具体的には、miya さんが書いてくれたプロトタイプを Ruby に移植して、移植した Ruby コードを弊社側で運用およびメンテナンスしようかなと考えています :wrench: :dash:

YassLab 株式会社 メンバー https://yasslab.jp/ja


@miya0001: なるほど!いいと思います!

まずは技術調査から...? 🔍💨

さしあたって、そもそも Ruby に移植する際にどのぐらい工数がかかるのかを確認した方が良さそうです🤔💭 現在ちょうど @naopontan さんに CoderDojo 周りの開発をお願いしているので、まずは移植できるかどうかの F/S をしていただけると嬉しいです...!! 🙏

@miya0001: あっ、でもRubyのSDKあるのかな。。まあnodeでも大した内容のSDKじゃなかったですけど。

関連リンク

yasulab commented 5 years ago

あ、間違って coderdojo.jp に transfer してしまった... >< すみません 💦 元に戻しました (>人<;) 💦

yasulab commented 5 years ago

🤔.oO(DojoCast リポジトリを coderdojo.jp (Rails) にマージしたときと同様に、DojoPaaS も coderdojo.jp (Rails) にマージできるとメンテしやすいので理想的ではありそう)

まぁでも工数によるのかなぁ。もし工数が大きく変わるなら、node スクリプトから Ruby スクリプトに移植するだけの方が良さそう >< 💦

ひとまず、

  1. メンテできていない node スクリプトをメンテ可能な Ruby スクリプトに移植して、
  2. その後、ゆっくりと coderdojo.jp (Rails) にマージしていく

という手順の方が良さそう 😊

AnaTofuZ commented 5 years ago

なるほどありがとうございます!!!

👆のリンクのREADMEあたりを見た感じ、TraviCIで動かしていた、さくらサーバーの初期設定を行う部分を、Rails側から行えば勝利という感じですね!

まずは上げていただいたnodeスクリプトが何をしているか(何を満たすようにRubyで書き直せばいいのか)を確認していきます...!!

AnaTofuZ commented 5 years ago

(さくらのAPI,以前みたときはドキュメント化されていないパラメーターが多くてなかなか厳しかった印象がありますが、すでに動いているサービスを横移動させるなら大丈夫そうですね...) 💭 🤔

yasulab commented 5 years ago

ですね! そんな感じです ;)

ちなみにこれまでの運用経験から分かった知見は次の2つで、それぞれが上記の 1. と 2. のアイデアの背景になっている感じです 😸

  1. 現在のスクリプトはプロトタイプという立ち位置で、メンテまで考慮されてなかった
    • 当初は『そもそもどのくらい使われのかが分からない』状態だったので、当初の設計は悪くない
    • とはいうもののいくつか不具合も出ているので、現行チームでメンテしやすい Ruby に移行したい
  2. DojoPaaS ユーザーには GitHub に詳しくない人もいる
    • Git / GitHub を1から知ってもらってもいいけど、ブラウザで完結するならその方が楽
    • ただし現在は coderdojo.jp 側にユーザー登録機能がまだないので、ここはまだ着手できなさそう🤔💭
AnaTofuZ commented 5 years ago

全体的なPR時のサーバー生成周りの動きの調査

AnaTofuZ commented 5 years ago

サーバー生成スクリプトは、なんかServerクラスの create メソッドを定義しているように見える。 (定義自体はjsの無名関数を使っていそう)

https://github.com/coderdojo-japan/dojopaas/blob/6094f7d06c5e0db56f0e17d65c6c1b4e32ee42af/lib/Server.js#L1-L7

実際に呼び出されているのは、grepした感じ

https://github.com/coderdojo-japan/dojopaas/blob/6094f7d06c5e0db56f0e17d65c6c1b4e32ee42af/dojopaas.js#L119-L134

だと思われる

AnaTofuZ commented 5 years ago

createメソッドにハッシュで初期値を流すとよしなに生成される世界観....

AnaTofuZ commented 5 years ago

基本的に client を引き回して中のメソッドをバンバン呼んでいくスタイルらしい。 client は 

https://github.com/coderdojo-japan/dojopaas/blob/6094f7d06c5e0db56f0e17d65c6c1b4e32ee42af/dojopaas.js#L41-L47

を見ると、 sakuraのAPIクライアントライブラリっぽい

Rubyの横移動を考えると、同様のgemを探すか、気合でHTTPを叩くかになりそう

AnaTofuZ commented 5 years ago

https://github.com/coderdojo-japan/dojopaas/blob/6094f7d06c5e0db56f0e17d65c6c1b4e32ee42af/lib/Server.js

これはサーバーを「create」or 「destroy」の動作をするメソッドを提供するインスタンスになる

createの方は

が行われる。

destroy側は

が行われる。 それぞれのアクションはAPIを叩くのに対応している。 APIはHTTPクライアントライブラリのメソッドで抽象化されてるかな…と思ったが、POST とか、エンドポイントが見える形だったので、そんなに難しくなさそう

AnaTofuZ commented 5 years ago

ということで、サーバーの初期設定のスクリプトを読んでいきます

https://github.com/coderdojo-japan/dojopaas/blob/6094f7d06c5e0db56f0e17d65c6c1b4e32ee42af/startup-scripts/112900928939#L9

( 🤔 なぜansibleをいれているんだろう...? 使うのかな...? )

AnaTofuZ commented 5 years ago

TravisCIの反映スクリプトはかなり素朴な、CIからgitを動かす実装でした。

現状PRベースで行っているので、同様のことは実装する必要はあるかな...と思いました。 ただ完全にRails側でユーザーの管理と申請フォームを作成した場合は必要なさそうですね。

ということでRubyへの移動を考えていこうかなと思います。 手順としては

  1. RubyでさくらのAPIクライアントライブラリがあるか見る
  2. ある場合、今回使うAPIのエンドポイントに対応したメソッドやインターフェイスがあるかを調べる
  3. なかったらHTTPを叩く方向へシフトする

このあたりをまず行います

AnaTofuZ commented 5 years ago

sakuraのAPIクライアントライブラリっぽいgemをrubygemssakura で検索して見てみました

使うとしたら fog-sakuracloudかなと思いますが、これはHTTPを叩いた方がいい気がしてきました

AnaTofuZ commented 5 years ago

Rubyでもりもり書く前に、CoderDojoのreails appに組み込むので Dojoの追加スクリプトの実装のように、メインロジックはライブラリの形にしようかな... 🤔

AnaTofuZ commented 5 years ago

まぁ一旦動くスクリプトをパッと書いて確かめてみようかな

miya0001 commented 5 years ago

ご無沙汰してます!

たまたま目についたのでいくつかお返事をw

なぜansibleをいれているんだろう...? 使うのかな...?

これは、WordPress をインストールしたいとかマイクラをインストールしたいとかの要望に対して、実際にはなかなか難しいだろうなというのがあって、インスタンス起動時に自動的にセットアップする方法ないかなと思っていたのでインストールしたのですが、その後どうしようとしてたのかは忘れましたw

たしかSlackのコマンドでインストールできるようにできへんかな。。。ぐらいの感じだったと思います。 なので実際には使ってないと思われます。

あと、さくらさんの API については、これを作った後で一度互換性のない変更が入っていたので(はっきり覚えてないですが、API からのレスポンスが変わったとかだったような。。。)、少なくくとも2年以上前にメンテが止まってるライブラリとかですと不具合があるかもです。 たしか直接 HTTP を叩く方法にしようかどうか当時僕も迷った気がします。

AnaTofuZ commented 5 years ago

おっコメントありがとうございます!!

これは、WordPress をインストールしたいとかマイクラをインストールしたいとかの要望に対して、実際にはなかなか難しいだろうなというのがあって、インスタンス起動時に自動的にセットアップする方法ないかなと思っていたのでインストールしたのですが、その後どうしようとしてたのかは忘れましたw

たしかSlackのコマンドでインストールできるようにできへんかな。。。ぐらいの感じだったと思います。 なので実際には使ってないと思われます。

なるほど! ありがとうございます。 🙏 slackのコマンドが生成される可能性もあるので、念のためにansibleを通せるように python2をinstallする程度にしておきます。

なるほど、APIレスポンスが変化している感じなんですね! やはり直接HTTPを叩いたほうが安心できるかもしれない… 🤔

AnaTofuZ commented 5 years ago

APIはこれを読みますさくらのクラウドAPI ver1.1 📖 👀

hanachin commented 5 years ago

gem使うとしたらDL数的にfogしかなさそう https://rubygems.org/search?utf8=%E2%9C%93&query=sakura+cloud

もし直接叩くの諦めてfog使うなら.travis.ymlのrubyのバージョン更新したりとかしてPRだすとよさそう... https://github.com/fog/fog-sakuracloud/blob/master/.travis.yml

AnaTofuZ commented 5 years ago

fogも見たらlast update 3years ago.... PRチャンスな気がしますが、どうしようかな... 直接叩いたほうが安牌な気が若干しますね

AnaTofuZ commented 5 years ago

hog側、見た感じさくらの対応しているAPIのバージョンが現在と同じだったので

https://github.com/fog/fog-sakuracloud/blob/796419e8ce9e7109cae9ac624a33e52193fef484/lib/fog/sakuracloud.rb#L25

なんとか使えそうな気がします (使うかどうかは悩んでいます...)

miya0001 commented 5 years ago

過去のコミットを見て思い出したのですが、仕様変更があったのは以下のコミットの内容ですね。 https://github.com/coderdojo-japan/dojopaas/commit/5904765951f536ae73bb3be61a774cc15fbb1ba0

で、Fog の fog-sakuracloud ではそもそもこのAPIをサポートしていないようなので、上の不具合自体は関係ないのですが、この部分は自力で HTTP リクエストを叩く必要があるかもですね。

ほかにもパケットフィルタリングの API も叩く必要があってこれも fog-sakuracloud ではサポートしてないように見受けられますね。 https://github.com/coderdojo-japan/dojopaas/blob/master/lib/Server.js#L72-L86

AnaTofuZ commented 5 years ago

@miya0001 ありがとうございます!! fog-sakuracloud を利用している処理と、利用していない処理が混同すると、いろいろと面倒な処理が多いような気がするので、やはりHTTPを直接叩く形式にしようかなと思います。

AnaTofuZ commented 5 years ago

実装していくにあたり、テストでモックを使えば良いのですが、今回利用しているさくらサーバーに、テスト(CIなどで回すテストでなく、確認程度)で実際にAPIを叩くことになりそうなのですが、その場合はどうすれば良いのでしょうか 🤔 (CoderDojo側で確保しているサーバー台数などの制約など...)

yasulab commented 5 years ago

実装していくにあたり、テストでモックを使えば良いのですが、今回利用しているさくらサーバーに、テスト(CIなどで回すテストでなく、確認程度)で実際にAPIを叩くことになりそうなのですが、その場合はどうすれば良いのでしょうか 🤔

@AnaTofuZ お、じゃあいつもの感じで 1Password for Team でアカウント情報を共有しますね ;)

yasulab commented 5 years ago

お、じゃあいつもの感じで 1Password for Team でアカウント情報を共有しますね ;)

@AnaTofuZ 追加しました! 後ほど確認してもらえれば 😉🔐✨

AnaTofuZ commented 5 years ago

@yasulab 早い! 💨💨 💨 💨 ありがとうございます ❗️ ❗️ 🙏 確認できました

AnaTofuZ commented 5 years ago

さくらのコンソールからログインして石狩第2ゾーンに様々なものがあることを確認しました! cf. https://github.com/coderdojo-japan/dojopaas#%E7%AE%A1%E7%90%86%E8%80%85%E5%90%91%E3%81%91%E3%81%AE%E6%83%85%E5%A0%B1

AnaTofuZ commented 5 years ago

💭 (定期的にコードに出てきたresolveはjsのこれらしい...) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve

yasulab commented 5 years ago

2019年9月16日時点の進捗 cc/ @AnaTofuZ

  1. 移行はおおよそ終わっていて、残すは特定の API 呼び出しの移行のみ 🔧
    • 元々のNodejsの実装と共通して、特定の API 呼び出しでタイムアウトしている
  2. 実際にPR->mergeでまだサーバーが完全に立つところまでは確認済み ✅
    • ローカルでRubyスクリプトを実行するとサーバーが立ち、APIの部分で止まることは確認済
  3. 特定の API 呼び出しで止まる原因を現在調査中 🐛
    • API に関する部分を、現在さくらインターネットに問い合わせ中
    • 問い合わせの返答が来たら、その内容を元に次の作業に取り掛かる予定
AnaTofuZ commented 5 years ago

無事 https://github.com/coderdojo-japan/dojopaas/commit/1f47c6242902087bbea9034cbbc5b046bc875925 のコミットでTravisCI経由でサーバーが立ったことが確認された 🎉 というわけで移植に関してはクリアです (以前の問題はやはりさくらのAPI側の問題のようなので、Rubyスクリプト自体には問題はなかった)

yasulab commented 5 years ago

@AnaTofuZ Ruby への Porting 作業お疲れ様でした...!!! 😆🎉✨ DojoPaaS の再起動部分の問題 (https://github.com/coderdojo-japan/dojopaas/issues/108) も解決されていてステキ...!! 😻🆒✨ README の加筆修正など、特に他の残タスクがなければ、アナグラさんの都合の良いタイミングで Close してもらえれば 😉✨

@Yuppymam ちょっと難しいかもしれないですが、もし本 Issue および 各種 PR の雰囲気が掴めたら、お知らせ記事執筆にチャレンジしてみても良いかもしれません 👀💭💖

AnaTofuZ commented 5 years ago

さくらから返信が来ました。内容は「様子見で、またなにかあればお問い合わせお願いします」という旨でした。その為、今回は移植完了という感じで大丈夫だと思いました。

残タスクとして、READMEの修正と軽く動きのtweakがあるので、こちらを行ってcloseしようと思います!

Yuppymam commented 5 years ago

@yasulab なんとなく雰囲気分かりました😊凄い✨👏

後ほどこちらも記事にしてみようと思います📝✨

yasulab commented 5 years ago

後ほどこちらも記事にしてみようと思います📝✨

よろしくお願いします...!! (>人< )💖✨

yasulab commented 4 years ago

こちら https://github.com/coderdojo-japan/dojopaas/pull/136 で対応できたので Close しますね ;)