LoginSignup
1
0

More than 1 year has passed since last update.

気合いでGenerambaみたいなことをする

Last updated at Posted at 2023-04-12

経緯

アーキテクチャはVIPER。
手作業でフォルダやそれぞれのファイルを作成していた。(プロジェクトでは1つのモジュールに6ファイル)
Generambaの導入をそれとなく伝えてみたが、通らず…
仕方がないので、それっぽくファイルと定型文の作成をライブラリに頼らず行う。

やり方

Makefileで指定のパスにファイルの生成。さらに生成したファイルにコメントなどを追加する

Makefile
# Makefileのターゲット内に複数行の文字列を持つことが出来ないので、defineを使う
define text
//
//  $(FILE_NAME)
//  プロジェクト名
//
//  Created by 名前 on $(DATE).
//

import Foundation

class $(CLASS_NAME) {}
endef
export text

DATE:=$(shell date "+%Y/%m/%d")

.PHONY: create-module
create-module:
	touch $(PATH)/$(MODULE_NAME)View.swift
	make add-template-text PATH=$(PATH) FILE_NAME=$(MODULE_NAME)View.swift CLASS_NAME=$(MODULE_NAME)View DATE=$(DATE)
	touch $(PATH)/$(MODULE_NAME)Interactor.swift
	make add-template-text PATH=$(PATH) FILE_NAME=$(MODULE_NAME)Interactor.swift CLASS_NAME=$(MODULE_NAME)Interactor DATE=$(DATE)
	touch $(PATH)/$(MODULE_NAME)Presenter.swift
	make add-template-text PATH=$(PATH) FILE_NAME=$(MODULE_NAME)Presenter.swift CLASS_NAME=$(MODULE_NAME)Presenter DATE=$(DATE)
	touch $(PATH)/$(MODULE_NAME)Entity.swift
	make add-template-text PATH=$(PATH) FILE_NAME=$(MODULE_NAME)Entity.swift CLASS_NAME=$(MODULE_NAME)Entity DATE=$(DATE)
	touch $(PATH)/$(MODULE_NAME)Router.swift
	make add-template-text PATH=$(PATH) FILE_NAME=$(MODULE_NAME)Router.swift CLASS_NAME=$(MODULE_NAME)Router DATE=$(DATE)

.PHONY: add-template-text
add-template-text:
	echo "$$(text)" >> $(PATH)/$(FILE_NAME)

作成したMakefileを適当な場所(自分ははホームディレクトリ)に置いておく。
Makefileが置いてあるパスで以下のコマンドを実行すれば、ファイルの作成とコメントなどは入っている状態になる

make create-module PATH=モジュールを作成したいディレクトリ MODULE_NAME=モジュール名
例: make create-module PATH=/Users/ユーザ名/Desktop/Hoge MODULE_NAME=hogeFuga

PATHに渡す部分は~を使うとエラーになるのでフルパスで指定する必要がある。
なおかつ、ファイルの生成を行うディレクトリが存在しないとエラーになるため、あらかじめフォルダを作成しておく必要がある。
その他、protocolの宣言など、defineを使えばもっと正確にGenerambaに近づけられることは可能。
1つ1つファイルを生成して、クラス名書いてーみたいなことをしていたのが、多少は楽になったのでヨシッ!とする。

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0