今年初めにGitHubが無料ユーザーも無制限にプライベートリポジトリを使えるようする との発表がありました。ありがたいことです!
EY-OfficeではGitリポジトリー、自社サーバーに置きGogsを使い管理してきました。しかし必ずしも上手くいってない部分もあったので、すべてのリポジトリーをGitHubへ移行することにしました。
私自身も最近は、自社サーバーで管理するよりリーズナブルなサービスがあればそちらを使った方が良いのではという気持ちに変わってきています。
New year, new GitHub: Announcing unlimited free private repos and unified Enterprise offeringより
こんな時期だからできるタスク として移行作業を進めました。
準備
まず機能的に問題ないことは判っていたのですが、無料ユーザーもOrganizationが使えるようになったので従来のyuumi3以外にも1つOrganizationを作り
- yuumi3のprivateには、プロダクトやテキスト、ツールなど重要なコードの管理
- yuumi3のpublicには、「作りながら学ぶReact入門」のサポートページや公開しているコードの管理
- 新Organizationのprivateには、学習用に使ったコードや古いツール(もう要らないかしれないコード)の管理
と分けることにしました。
自社サーバーのGitリポジトリーはGogsのデータベースを調べると150くらいありました。そこからCSVファイルを作りNumbers(Apple製Excel?)で要・不要と移行先(yuumi3のprivate、yuumi3のpublic、新Organization)を決めました。 さらにyuumi3 GitHubのリポジトリーも要・不要と新Organizationへの移行を決めました。
ツール作り
GitHubの画面にもインポート機能はありますが100以上のリポジトリーを手動で移行するのは無理なので、ツールを作る事にしました。
コードは GitHub に公開しましたので、興味がある方はみてください。node.js用のコードです。GitHubのトークンなどの設定情報は .envファイルから読み込みます。
list
現在のGitHubにあるリポジトリーの名前、Description、Type(private, public, fork)、URLをCSVで表示する。 現在のGitHubにあるリポジトリーを移行前に整理したり、名前の重複がないかの確認のために作りました。
remove
指定されGitHubリポジトリーを削除します。不要リポジトリーもたくさんあったので作りました。
import
指定されたURLのリポジトリーをGitHubに新レポジトリーを作りインポートするコマンド。GitHub APIのSource Imports を使っています。
backup
GitHubは信頼性の高いサービスですが、トラブルが発生する事はあります。最悪の事態にそなえ、全リポジトリーをS3にバックアップするコマンド。GitHub APIのOrganization を使っています。
移行作業
日々の作業時間の半分から数時間程度を使い移行しました。
- ツール作りに4日くらい
- レポジトリーの整理に3日くらい
- 移行作業に半日くらい
また、今回の作業で以下のような知見が得られました。
GitHub APIの呼び出し回数制限
GitHubのAPIには呼び出し回数制限があります、無料ユーザーの場合5000回/時間です。importコマンドのデバッグ中にステータスのポーリングを1秒毎に行っていたら突然呼び出し回数エラーになってしまいました ^^;
GitHub status
移行作業中に突然エラーが発生し出したので、作業を止めて休憩に入りTwitterのタイムラインを眺めていたら「GitHubトラブってる!」という書込が複数ありました。そこではじめて GitHub Status というページがあることを知りました、その時は赤くなっていたので作業は次の日にしました。
宣伝
EY-Officeの教育サービスは、現在Zoom等を使ったリモート教育を準備しています。詳細は近いうちに発表いたしますが、お急ぎの方はお問い合わせください。