プロジェクトにfastlane🚀を導入する際の手順をまとめてみた

## 本記事の目的
本記事はfastlaneの使い方や詳細を說明するものではなく、fastlaneの導入手順をまとめたものです。
fastlane・match・pemの導入にあたって記事を転々とすることが度々あったのでまとめてみました。
(※詳しいことは公式ドキュメントや参考になる記事を掲載させて頂いているのでそちらからご確認ください。)

## 本記事でわかること
以下の手順をまとめました
fastlaneの初期設定→fastlane match・pemの組み込み→基本的なfastlaneの使い方

細かい事は以下です。
- プッシュ通知の証明書周りの自動生成
- 証明書とプロビジョニングファイルの自動生成とチームでの共有
- ipaファイルの作成とAppleStoreへのデプロイ自動化

## 初期設定

### Gemfileを作成しよう
cocoapodsのバージョン管理にも便利なGemfileを用いてfastlaneをインストールします。
Gemfileとは？って人は[こちらのわかりやすい記事より](https://qiita.com/nishina555/items/1b343d368c5ecec6aecf)

ディレクトリはプロジェクトがある階層です

```
bundle init
```
これでGemfileが生成されます。
そしてGemfileを修正します

```ruby:Gemfile
Learn more or give us feedback
# frozen_string_literal: true

source "https://rubygems.org"

# git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# この行を追加
gem 'fastlane'

# gem "rails"
```

そしてインストールする

```
 bundle install --path vendor/bundle
```

これで準備が整いました。

## fastlaneを導入

ディレクトリは変わらず

```
bundle exec fastlane init
```

これで、/fastlaneができたので移動します
中には、AppfileとFastfileが作成されています。
ファイルの說明や詳しいことを知りたい人は[こちらの記事を！](https://qiita.com/tamappe/items/3d2c1e00344aef3082d2)


次に、Dev Portal と App Store Connect の両方に新しい iOS アプリを作成する必要があるので、以下のコマンドを使用します。


```
bundle exec fastlane produce -a アプリのBundleID(プロジェクトをXcodeでひらいいて確認できます)
```
他にもFastlaneでlaneを使用する方法もあるのですが、今回は直接作成しました。

これが成功したら、Appfileを開いて編集して保存します。

```
app_identifier("アプリのBundleID") 
apple_id("AppleDeveloperに登録してあるメールアドレス")
```

## Push通知の証明書周り

- [証明書ってなにって人向け](https://qiita.com/yosshi4486/items/7dbd7e2bc35a1fc9e5a0)

push通知を実装する場合に必要なAPNs証明書を周りもfastlaneで解決していきます
（関係ない人は飛ばしてオッケーです）
まず、そもそもAPNs証明書を手に入れるまでの工程を知らない人は下記のサイトなどをみてみてください。
色々ポチポチする場所やわかりにくい用語が多いと気づくはずです。（記事自体はめっちゃわかりやすいです！）
https://qiita.com/natsumo/items/d5cc1d0be427ca3af1cb


これをfastlane pemで解決していきます。

```
gem install pem
```

インストールを終えたら、以下のコマンドを

```
pem -a [app_identifier] -u [ Apple ID]
```

これが完了したら
fastlaneのディレクトリ内に「~.p12」ファイルができています！
また、Devcenterにいけば証明書もできていますし、IDとも紐付いているのが確認できると思います！！！！！！

![スクリーンショット 2020-03-21 19.15.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302458/1d13f6da-d8c3-1c60-cfcd-45e13c27601b.png)

このp12ファイルをプッシュ通知配信用サーバー、例えばFirebaseなどに配置してあげれば完成です。

ほかにもたくさんのオプションがあるようなので是非用途に合わせて使ってみて下さい。
https://docs.fastlane.tools/actions/pem/

## fastlane matchで証明書の作成と管理を行う

次に、リリースの際やチーム開発において複雑な作業である
- コード署名証明書の作成・更新・共有
- プロビジョニングプロファイルの更新
を [fastlane match](https://docs.fastlane.tools/actions/match/) で解決していきたいと思います。

こちらの記事が大変わかりやすかったので参考にさせて頂きました
[fastlane match を使用して iOS の証明書管理を行う](https://qiita.com/kotarella1110/items/840af2cf80aaea1fb035)


####Xcode プロジェクト設定とプライベートリポジトリを作成

証明書作成に入る前に、
Xcode プロジェクト設定「 General > Automatically manage signing 」を無効にしておきます。

また、Gitでプライベートリポジトリーを作成しURLを取得しておいてください。
プライベートリポジトリ名は「プロジェクト名_Certificate」みたいな感じで良いと思います。

####fastlane matchの導入

初期設定を行います

```
fastlane match init
```

実行すると以下の質問があるので
<img width="705" alt="スクリーンショット 2020-03-21 19.49.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302458/888544e8-42d9-c7d7-3ffe-a080553ce6c3.png">
1のgitを選択し、gitのURLを聞かれるので先程作成したプライベートリポジトリのURLを打ってください。

それが終ると、Matchfileが作成されるので以下の用に修正して下さい。

```ruby:Matchfile
app_identifier("アプリのBundleID")
username("AppleDeveloperに登録してあるメールアドレス") # Your Apple Developer Portal username
```

そしてそれが完了したら、証明書とプロビジョニングファイルを作成します。
以下のコマンドをうつと

```
//以下のうち該当するものを使用してください
fastlane match development
fastlane match adhoc
fastlane match appstore
```

Git リポジトリへのパスフレーズが聞かれるので、パスワードを作成しメモしておきます
それが終われば、後は自動的に作成されリポジトリにもプッシュされています！！！！
これで面倒な作業をせずに証明書周辺を終えることができました。

リポジトリから証明書を取得したい場合などの方法はこちらを参考にしていただけますと可能です
[fastlane match を使用して iOS の証明書管理を行う](https://qiita.com/kotarella1110/items/840af2cf80aaea1fb035)


## AppleStoreへのデプロイ

次は、ipaファイルの作成・スクリーンショットの作成・AppleStoreへのデプロイなどを自動化させていきます。
といっても私がゼロから説明するよりも大変参考になる記事があるのでそちらを参照して下さい。

>[iOSエンジニアならもはや必須になるつつあるfastlaneで自動テストしてみよう]
(https://qiita.com/tamappe/items/3d2c1e00344aef3082d2)



#####Applestoreにコネクトする際に認証エラーが起こった際には環境変数を設定して下さい
- https://qiita.com/koringo2/items/5ba4ba7b4bc0d8557bc0
- https://qiita.com/uhooi/items/b317c3a9af92f86f5c3b

[環境変数とはってなった人向け](https://ac-as.net/linux-environment-variable/#i-2)

## slackとの連携

fastlaneでデプロイしたあとにSlackに通知がいくようにすると便利なのでそれの設定方法も記載します

まずは下記サイトを参考にwebhookのURLを取得して下さい
>[slackのIncoming webhookが新しくなっていたのでまとめてみた]
(https://qiita.com/tamappe/items/3d2c1e00344aef3082d2)
https://qiita.com/kshibata101/items/0e13c420080a993c5d16

URLを取得ができたら環境変数を設定しておきます

```
//envの一覧を確認する
printenv
```

```ruby:ターミナル
export SLACK_URL="webhookのURL"
```

.env.defaultにSLACK_URLの定義が追加されているか一覧で確認する。

そしてFastfileにlaneを追加します。なにをしているのかは見ればわかるはずです。

```ruby:Fastfile

  after_all do |lane, options|
    slack(
        default_payloads: [],
        message: "#{lane} #{options} All OK!",
    )
  end

  error do |lane, exception, options|
    slack(
        message: exception.message,
        success: false
    )
  end
```

##おわりに

ということでfastlaneの導入手順をまとめてみました。
CI/CD系の環境構築は最初に組み込むべきですね、、、！