Development CS Software Engineering CI/CD [CI/CD] fastlane Pluginを作成する

概要

fastlaneのカスタムPluginを作成・配布する方法をまとめる。

手順

1. Pluginの例

2. Pluginテンプレートの生成

fastlane new_plugin
  • Pluginの命名はtestflightupload_to_s3のような形式で記述する。
Would 'hacoma_' be okay to use for your plugin name?
  • 名前にpluginという単語が含まれていると上記の出力のようにpluginが省略されるので注意が必要だ。
  • 例:名前にhacoma_pluginと入力した場合、hacoma_に変更される。
Please enter a short summary of this fastlane plugin:
  • Pluginについての簡潔な説明を記述する。
  • 入力した文字列は以下の箇所で使用される。
    • fastlane-plugin-[plugin_name].gemspecファイルのspec.summary
    • README.mdファイルのAbout [plugin_name]
    • plugin_name_action.rbファイルのself.description
Please enter a detailed description of this fastlane plugin:
  • Pluginについてより詳細な説明を記述する。
  • 入力した文字列は以下の箇所で使用される。
    • plugin_name_action.rbファイルのself.details

3. Pluginのフォルダ構造

3.1. fastlane/Fastfile

  • Pluginが持つActionの機能や使用方法を示すためにテストLaneを提供する。

3.2. fastlane-plugin-[plugin_name].gemspec

  • fastlane Pluginはgemを通じて配布およびバージョン管理を行い、gemに関するすべての情報は.gemspecファイルに記述されている。
  • テンプレートを使用してPluginを生成したため、大部分の情報は既に記述されている。spec.homepageのコメントを解除して該当Pluginの GitHubリポジトリのURLを入力する。

3.3. lib/fastlane/plugin/plugin_name/actions/plugin_name_action.rb

  • このファイルにPluginがサポートするActionを実装する。
  • Actionの実装方法は[CI/CD] fastlane Actionを作成するの記事を参考にする。
  • Pluginで複数のActionをサポートする場合は、このファイルと同じパスにファイルを追加する。
    • 例:action1.rb, action2.rb, action3.rb, …

3.4. lib/fastlane/plugin/plugin_name/helper/plugin_name_helper.rb

  • このファイルにActionで使用するユーティリティ機能を実装する。helperに実装したメソッドはActionから呼び出して使用できる。
  • 複数のActionをサポートする場合はhelperファイルもAction名を持つ別ファイルを作成して記述する。

3.5. lib/fastlane/plugin/plugin_name/version.rb

  • Pluginのバージョンを定義する。.gemspecファイルの以下の行がversion.rbファイルに記述されたバージョン情報を参照する。
  • spec.version = Fastlane::HacomaWrapper::VERSION

3.6. README.md

  • Pluginユーザーのために Example部分にサンプルコードを詳しく記述する。
  • 修正または追加すべき内容があれば記述する。

3.7. spec/plugin_name_action_spec.rb

  • BDD方法論に基づいたテストコードを記述する。
  • 複数のActionをサポートする場合はテストコードもAction名を持つ別ファイルを作成して記述する。

4. Pluginの使用

5. Pluginの配布

5.1. RubyGems

  1. RubyGems.orgのアカウントを作成する。
  2. GitHubリポジトリにPluginをpushする。
  3. .gemspecファイルを更新する。spec.homepageはPluginをpushしたGitHubリポジトリのURLである。
  4. 以下のコマンドを実行して配布する。
     bundle install
     rake install
     rake release
    
  • コマンドの実行中に以下のようなエラーが出力された場合はsystemで使用中のgemをアップデートする。

    ERROR:  While executing gem ... (NameError)
        uninitialized constant Gem::ConfigFile::FileUtils
    Did you mean?  FileTest
    
    gem update --system
    

5.2. GitHub

  • RubyGemsに配布したくない場合はGitHubを通じてPluginを配布することもできる。
  • ただしバージョン管理はタグまたは他の適切な方法を使用する。

    gem "fastlane-plugin-[plugin_name]", git: "https://github.com/[user]/[plugin_name]"
    gem "fastlane-plugin-[plugin_name]", git: "https://github.com/[user]/[plugin_name]", tag: 1.0.0
    

参考

コメントする