こんにちは、仙台オフィスでiOSアプリの開発を担当しているはんだです。
日頃iOSアプリを開発している中で、似たようなファイルを何個も作ったり、同じようなコメントを何度も書いたりしていることがあります。このような決まりきったファイル・コードを自動で生成できたら開発効率が上がるなあと感じていたところ、Genarambaというライブラリを見つけたので使ってみました。
Generambaとは
Swiftファイルやコードをコマンドから生成し、Xcodeプロジェクトに追加することできるライブラリです。GitHubで公開されています。
GitHub - strongself/Generamba: This codegenerator is too brilliant to be real!
デフォルトのテンプレートではVIPERアーキテクチャ用のファイル・コードを生成できるのですが、別途公開されているテンプレートをインストールしたり、テンプレートを自作することで自由にファイル・コードを生成できます。
使い方
ここでは大まかな流れだけ記載します。細かい使用法に関しては先ほどのGitHubページのREADME等をご確認ください。
Generambaのインストール
ご自身の環境に応じてインストールしてください。
セットアップ
プロジェクトのルートフォルダで以下のコマンドを実行します。
generamba setup
コマンドライン上で設定に関する質問をされますので、それに答えます。
以下は出力例です。
The company name which will be used in the headers: VideoMarket
The name of your project is DemoApp. Do you want to use it? (yes/no) yes
The project prefix (if any):
The path to a .xcodeproj file of the project is 'DemoApp.xcodeproj'. Do you want to use it? (yes/no) yes
Select the appropriate target for adding your MODULES (type the index):
0. DemoApp
1. DemoAppTests
2. DemoAppUITests
0
Are you using unit-tests in this project? (yes/no) yes
Select the appropriate target for adding your TESTS (type the index):
0. DemoApp
1. DemoAppTests
2. DemoAppUITests
1
Do you want to add all your modules by one path? (yes/no) yes
Do you want to use the same paths for your files both in Xcode and the filesystem? (yes/no) yes
The default path for creating new modules: DemoApp
The default path for creating tests: DemoAppTests
Are you using Cocoapods? (yes/no) no
Are you using Carthage? (yes/no) no
Do you want to add some well known templates to the Rambafile? (yes/no) yes
+--------------------+----------------------------------------------------------------------------------+
| Summary for generamba setup |
+--------------------+----------------------------------------------------------------------------------+
| company | VideoMarket |
| project_name | DemoApp |
| prefix | |
| xcodeproj_path | DemoApp.xcodeproj |
| templates | ["{name: rviper_controller}", "{name: mvvm_controller}", "{name: swifty_viper}"] |
| project_target | DemoApp |
| project_file_path | DemoApp |
| project_group_path | DemoApp |
| test_target | DemoAppTests |
| test_file_path | DemoAppTests |
| test_group_path | DemoAppTests |
+--------------------+----------------------------------------------------------------------------------+
Rambafile successfully created! Now run `generamba template install`.
すると回答内容に応じたRambafileが作成されます。なお、このRambafileは作成後に直接編集することもできます。
テンプレートのインストール
以下のコマンドでテンプレートをインストールします。
generamba template install
なお、デフォルトで用意されているもの以外のテンプレート使いたい場合は、このコマンドを実行する前にRambafileにテンプレートを追記する必要があります。
コードの生成
テンプレートの準備が終わったら、以下のコマンドでコードが生成できます。
generamba gen [モジュール名] [テンプレート名]
すると、テンプレートに応じたモジュールが生成されます。

Generambaを使ってみて感じたメリット・デメリット
メリット
必要なファイル・コードが一気に作れる
ファイルを1つずつ作るのに比べて純粋に楽です。Xcodeのテンプレートを増やす方法と比べて、Generambaの場合は一度に複数のファイルを生成できるのがポイントです。
また、お決まりのコードを書くために他のファイルを見たりコピペしたり、という手間が省けるので時間の節約にもつながりそうです。
テンプレートを簡単に追加・修正できる
開発を行なっていく中で「このコードも使いまわしたいな」と思った際に簡単にテンプレートの修正ができます。
また、テンプレートの追加も随時できるので、例えば「今使っているテンプレートとは別にUITableViewController用のテンプレートが作りたい」という場合も対応できます。
チーム内で共有できる
テンプレートをGitで管理すれば、チームメンバーにも共有できます。
デメリット
ファイルを生成するまでが少し面倒
使用するにはGenerambaをインストールし、Rambafileを作成する必要があります。また、ファイルの生成もコマンドラインで行います。
Xcodeのテンプレートを増やす場合はライブラリをインストールする手間が不要ですし、Xcode画面上のUIからファイルが作成できるので、お手軽さという点ではXcodeのテンプレートを増やす方が優れているかもしれません。
Gemのバージョンが一部古い
Generambaの最終リリースが2019年4月となっています。そのためGenerambaで指定されているGemのバージョンが一部古いものになっており、既にお使いのGemのバージョンと衝突してしまう可能性があります。
Xcodeのテンプレートを増やす場合はそういった心配もないので、その点でもそちらに軍配が上がると思います。
MVP用のテンプレートを自作しました
先述した通り、Generambaにデフォルトで用意されているテンプレートはVIPERアーキテクチャのものになっています。私が関わっているプロジェクトはMVPアーキテクチャを採用しているので、今回Generambaを使用するにあたりテンプレートを自作しました。
実際に作ったテンプレートにはカスタムクラスなども記述されているのですが、そういったものを取り除いた簡易版をGitHubに載せておきます。参考いただければ幸いです。
GitHub - Handa-H/generamba_template
以上です。最後までお読みいただきありがとうございました。