BitbucketからGithub、そして伝説へ…

# はじめに

今年もアドベントカレンダーはじまりました！
この記事はHamee Advent Calendar 2021の1日目の記事です。
Hameeのエンジニアが自分の興味あるテーマについて自由に書いていきます。
毎年一緒に参加して盛り上げてくれる皆さんに感謝です :clap:
今年で7年目の参加となりました！

Hamee開発部は長年Bitbucketを使ってきましたが、つい最近Githubへ切り替えを行いました。

* BitbucketからGithubへの移行の仕方の説明
* Bitbucket PipelinesからGitHub Actionsへの移行の仕方の説明

これらについてまとめていきたいと思います。

# BitbucketからGithubへの移行

こちらの記事が大変参考になりました。
[2段階認証有効のBitbucketからGitHubにリポジトリをインポートする](https://ryuta46.com/1249)
Githubの[インポート用ページ](https://github.com/new/import)にBitbucketのリンクを指定してインポート。

![スクリーンショット 2021-11-14 15.49.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/f9c517ec-91c2-1935-08d7-f940113ad982.png)

![スクリーンショット 2021-11-14 15.50.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/2512f500-ad76-3792-1ee6-904e0642a15a.png)

これだけでGithubに移行できちゃいます。
簡単！

# Bitbucket Pipelinesとは

[Bitbucket Pipelines](https://ja.confluence.atlassian.com/bitbucket/get-started-with-bitbucket-pipelines-792298921.html) は、Bitbucket に組み込みの、統合された CI / CD サービスです。リポジトリの構成ファイルに基づいてコードを自動的にビルド、テスト、およびデプロイできます。

## サンプル

```php:sample.php
<?php
echo('testを出力するだけ');
```

```php:test.php
<?php
echo("sample.phpを実行して意図した文言が出ること\n");
exec("php sample.php", $result);
if($result[0] === "testを出力するだけ"){
    echo("テスト成功\n");
} else{
    echo("テスト失敗\n");
    exit(-1);
}
```

```yml:bitbucket-pipelines.yml
pipelines:
  # プルリク時に発火するトリガー
  pull-requests:
    '*':
      - step:
          image: php
          script:
            - php test.php
```

![スクリーンショット 2021-11-14 15.34.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/6ba6a831-6274-3254-51b9-6a1436e601fe.png)

# GitHub Actionsとは

[GitHub Actions](https://github.co.jp/features/actions)を使用すると、ワールドクラスのCI / CDですべてのソフトウェアワークフローを簡単に自動化できます。 GitHubから直接コードをビルド、テスト、デプロイでき、コードレビュー、ブランチ管理、問題のトリアージを希望どおりに機能させます。

## サンプル

sample.phpとtest.phpは変更しません。
bitbucket-pipelines.ymlは不要なので削除。
指定の位置に以下のtest.ymlを設置。

```yml:.github/workflows/test.yml
name: test
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    container: php
    steps:
      - uses: actions/checkout@v2
      - run: php test.php
```

初期設定だとactionsが無効になってる場合があるので以下から有効にしておきます。
![スクリーンショット 2021-11-14 16.16.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/3326ac51-66d6-8231-ffe5-e75457eafe2c.png)

pushをトリガーにactionが実行されます。
![スクリーンショット 2021-11-14 16.29.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/63ac158a-4e3c-1848-f75e-16fb204b4428.png)

これでBitbucket Pipelinesで動いていたテストがGithub Actionsで動くようになりました！

# 利用上限

BitbucketもGithubも複数の料金プランを持っています。
料金プランによって上限も異なります。
個人利用と業務利用によって必要なプランを選択しましょう。

|  | ビルド時間(分/月) | ストレージ(GB) |
|:-:|:-:|:-:|
|Bitbucket<br>Free|50|1|
|Bitbucket<br>Standard|2,500|5|
|Bitbucket<br>Premium|3,500|10|
|GitHub<br>Free|2,000|0.5|
|GitHub<br>Pro|3,000|1|
|GitHub<br>Organization|2,000|0.5|
|GitHub<br>Team|3,000|2|
|GitHub<br>Enterprise|50,000|50|

Bitbucketは上記を超過した場合に$10/1,000分で追加購入できるようです。
Githubはパブリックリポジトリに関しては上限なし？のようで、プライベートリポジトリに関して上限を超えた場合に以下の表の通りに追加購入できるようです。(macOSだけやたら高いのは何故なんだろう)

| | 追加料金 |
|:-:|:-:|
|Linux|$8/1,000分|
|macOS|$80/1,000分|
|Windows|$16/1,000分|

# まとめ

もっと昔話をするとBitbucketの前はGitLabを使っていました。
GitLab→BitBucketの乗り換えのタイミングでGithubの話も出ていたんですが、当時はプライベートリポジトリが作れないとかで断念した記憶があります。
それから数年を経て、Bitbucket→Githubの乗り換えが実現しました。
今回の例は割と簡単に書いてますが、実際は影響範囲を調べて色んなところのリモートリポジトリの切り替え作業があったので地味に大変でした💦
でもせっかくGithubに乗り換えられたので使い倒してやろうと思います！
乗り換え検討中の方の参考になればと思います！

# おわりに

アドカレ7年目です。
今年も完走目指して頑張りましょー！
この後もHameeのアドカレをお楽しみに！!