GitHubのマルチアカウント利用

GitHubで個人用と業務用で別々のアカウントを持ってよいのかたびたび話題になるのでまとめてみる。

GitHub利用規約:1人1アカウント

GitHub利用規約によると、

1 人の個人または 1 法人が維持できる無料アカウントは 1 つのみです

docs.github.com

では、業務用アカウントはどうなる?

ここで注目すべきは「無料アカウント」という点。以下のケースでは「無料アカウント」ではないので別アカウントの利用が認められる可能性がある:

  1. Enterprise Managed Users(マネージドユーザーアカウント)

    • 企業が管理する有料アカウントであり、個人の無料アカウントとの併用が許可されているように読める

      場合によっては、GitHub.com 上の複数のアカウントを使う必要があります。 たとえば、オープン ソース コントリビューションの個人アカウントがあり、雇用主が Enterprise 内でユーザー アカウントを作成および管理することもできます。

      docs.github.com

  2. 有料プランの組織に所属するアカウント

    • 2022年にGitHubサポートへ問い合わせした記事によると、これらのアカウントは無料アカウントと併用して良いと読める

      想定されるシナリオ(業務用のGitHubアカウントが有償のGitHub Organizationに参加している)では、複数のユーザーアカウントを持つことは可能です。このように、GitHubでは、雇用者が要求すれば、個人が仕事用と個人用のアカウントを別々に持つことができるようになっています。

      www.timedia.co.jp

無料アカウントを2つ持つことは許容されている?

明確に無料アカウントを2つ持つことは許容されているという回答があったという記事もある。

個人的に納得できなかったのでギットハブ・ジャパン合同会社に問い合わせてみました。

結論としては公私混同を避けるため個人用と業務用で無料アカウントを2つ持つことは許容されているとのことでした。この規約の存在理由としては主にOSSでの荒らしの防止策のためということでしたので、会社側で有償のオーガニゼーションを契約するとかも特に不要という内容です。

blog.lycolia.info

GitHubのおすすめ:アカウントは1つに

GitHub複数アカウントの切り替えを技術的に可能にしつつも、1つのアカウントですべての活動を管理することを推奨している。ただし、推奨していない(=許容はされていると捉えられる) 複数アカウント利用の内容を無料アカウントの複数保持として言及しているわけではない。

  • ほとんどの人は、オープンソース プロジェクトでも、有給雇用時のどちらでも、GitHub.com のすべての作業に 1 つの個人用アカウントを使用します。 現在、自分で作成した個人用アカウントを複数使用している場合は、アカウントを結合することをお勧めします。

    docs.github.com

  • ヒント: 個人用と業務用のリポジトリの両方を 1 つの個人アカウントのみで管理することをお勧めします。

    docs.github.com

ISUCON 予選の最初の1時間でやること

ISUCON は敷居が高そうで、出ても何もできなさそうという人向け。

1チーム3人なのでこれらを分担して進めます。

準備

  • レギュレーションをみんなで読む
  • 誰かがサーバにログインして公開鍵とか設置
  • ブラウザからアプリを触って仕様を把握
  • ソースコードを Git 管理してローカルに持ってきて開発環境を作る
  • デプロイ周りのスクリプトを設置

計測

  • ログの出力設定
  • 計測ツールのインストール
  • ベンチマーク中に出力されたログを解析

対応協議

f:id:ikosin:20190822184144p:plain
役割分担の例

アプリの動きやレギュレーションを把握するのはかなり大事だと思うので、対応方針を決める前にもう一回全員で確認したほうがいいかも知れませんね。

ISUCON9 の参加登録締め切りは 2019年8月25日(日) 18:00:00 JST です。

ISUCON9 オンライン予選の参加登録を開始&参加チームとメンバーリスト : ISUCON公式Blog

Android Studio のエミュレータ (Android Emulator / AVD) からホスト名でホストPC に接続したい

TL;DR

  • AVD (Android Virtual Device) の localhost (127.0.0.1) は自分自身を指す
  • 10.0.2.2 でホストにアクセスができる
  • 今回検討した方法は2つ
    • AVD からのアクセスをホストで起動した proxy 経由で処理する
      • squid を立てて lvh.me などのループバックドメインでアクセスする
    • AVD 内の hosts を書き換える
      • adb で pull & push

経緯

10.0.2.2 でホストにアクセスできるが、ホスト名でアクセスしたい時がある (サブドメインで区切られたマルチテナントなシステムとか) ので、試行錯誤してみた

シミュレータ (AVD) からのアクセスをホストで起動した proxy で処理するパターン

Squid インストール

macOS 前提です。

$ brew install squid

動作確認したのは squid-3.5.27

設定ファイル編集

必要であればよく使うポートを開けておくとよい (acl Safe_ports port 1025-65535» # unregistered portsは設定されている)

$ vi /usr/local/etc/squid.conf
# 例
acl Safe_ports port 4200
acl Safe_ports port 8000
acl Safe_ports port 8080
acl Safe_ports port 9292

起動・停止・再起動

$ brew services run squid
$ brew services stop squid
$ brew services restart squid

ログ確認

$ tail -f /usr/local/var/logs/access.log # squid access_log

AVD からのローカルホストアクセス

コマンドラインから adb でエミュレータ起動する際に引数で渡したり、AVD の GUI 設定からプロキシを設定しても 127.0.0.1 が AVD 自身にループバックされているようで期待した動作にならなかった。

参考: Set up Android Emulator networking  |  Android Developers

通常の AndroidWi-Fi 設定でプロキシを手動設定する*1

参考: Connect to Wi-Fi networks on your Android device - Android Help

プロキシのホストは Squid が起動している開発サーバ の Local IP、Squid のデフォルトポートは 3128

動作確認

lvh.me が 127.0.0.1 を返してくれるので、それにアクセスすると開発サーバの localhost にアクセスしてくれる。

(AVD 上の) http://lvh.me:8080 => (開発サーバの) http://127.0.0.1:8080

シミュレータ (AVD) 内の hosts を書き換えるパターン

事前に emulatoradb コマンドにパスを通しておいたほうが楽だが、今回は省略するのでフルパスで記載。

バーチャルデバイス (シミュレータ) 起動

$ # avd 名を確認
$ /Users/${HOME}/Library/Android/sdk/emulator/emulator -list-avds
Pixel_2_API_28
$ # avd を指定してエミュレータを起動 (書き換えるので、writable を指定する)
$ /Users/${HOME}/Library/Android/sdk/emulator/emulator -avd Pixel_2_API_28 -writable-system

Android Debug Bridge でバーチャルデバイスを操作

$ # デバイスの確認
$ /Users/${HOME}/Library/Android/sdk/platform-tools/adb devices
List of devices attached
emulator-5554   device
$
$ # root になる
$ /Users/${HOME}/Library/Android/sdk/platform-tools/adb root
$
$ # デバイスをアタッチ
$ /Users/${HOME}/Library/Android/sdk/platform-tools/adb remount
$
$ # アタッチの確認
$ /Users/${HOME}/Library/Android/sdk/platform-tools/adb devices
List of devices attached
emulator-5554   device

バーチャルデバイス上の hosts を書き換える

$ # バーチャルデバイスから hosts ファイルを取得
$ ~/library/android/sdk/platform-tools/adb -s emulator-5554 pull /system/etc/hosts ~/tmp/
/system/etc/hosts: 1 file pulled. 0.0 MB/s (56 bytes in 0.004s)
$
$ # 追記 (10.0.2.2 はホストのアドレス)
$ echo '10.0.2.2        lvh.me' >> ~/tmp/hosts
$
$ # 追記したファイルをバーチャルデバイスに上書き配置
$ ~/library/android/sdk/platform-tools/adb -s emulator-5554 push ~/tmp/hosts /system/etc/hosts 

参考

*1:端末により設定方法は変わります