Excelを使ってコーディング
いまどきは生成AIにおまかせでJavaのメンバー変数とgetter/setterのセットなんてできちゃうんですかね?
それでもコーディング規約通りのJavaDocをつけたり、仕様書に書いた一覧通りに作らなければならなかったりするときはちょっと苦労する?かもしれません。
IDEがあるとはいえ、一つ一つ手でコーディングしていくのは面倒くさいし、ミスが混入する機会を増やしてしまいます。
そこでよくやる小技なのですが、Excelで定型のコードを式で作る、なんてことをもう何十年もやっています。
式を使って文字列を編集したときの悩みごと
member変数として
/**
* ほげほげ
*/
private String hoge;
を作るような式を作ったとして、セルをコピーすると
"/**
* ほげほげ
*/
private String hoge;"
改行が入っちゃうとダブルクオーテーションで区切られちゃうんですよね。
他にも手があるのかもしれませんが、選択範囲をきれいにコピーしてテキストに落としてくれるExcelマクロを作って使っています。
VBAは見習いなので、コード汚いところは勘弁してください。
Sub コード出力()
Dim rootRow As Integer
Dim rootCol As Integer
Dim myText As String
Dim DataObj As MSForms.DataObject
rootRow = Selection.Row
rootCol = Selection.Column
Dim r, c As Integer
For r = 0 To Selection.Rows.Count - 1
For c = 0 To Selection.Columns.Count - 1
myText = myText + Cells(rootRow, rootCol).Offset(r, c).Value + vbCrLf + vbCrLf
Next c
Next r
' DataObjectオブジェクトを作成
Set DataObj = New MSForms.DataObject
' テキストを設定
DataObj.SetText myText
' クリップボードに送信
DataObj.PutInClipboard
Set DataObj = Nothing
MsgBox "テキストをクリップボードにコピーしました。", vbInformation
End Sub使い方は簡単、セルを範囲選択してマクロを起動させるだけです。
Excelシートの例
こんな感じのExcelシートを作ります。

A列にメンバー変数の論理名、B列にメンバー変数の物理名、C列にデータ型を書きます。
そしてE,F,G列にこんな式を入れておきます。
C列 ① メンバー変数
="/**
* "&IF($A5="",$B5,$A5)&"
*/
private "&$C5&" "&$B5&";"
JavaDoc、メンバー変数(論理名)が空のときはメンバー変数(物理名)を使用します。
これは以下どの式も共通です。
D列 ② getterメソッド
="/**
* "&IF($A5="",$B5,$A5)&"の取得
*
* @return "&$B5&"
*/
public "&$C5&" "&IF($C5="boolean","is","get")&UPPER(LEFT($B5,1))&MID($B5,2,LEN($B5))&"() {
return this."&$B5&";
}"
C列がbooleanのときはisXxxx、それ以外のときはgetXxxxのpublicメソッド名になります。
E列 ③ setterメソッド
="/**
* "&IF($A5="",$B5,$A5)&"の設定
*
* @param "&$B5&IF($A5="",""," "&$A5)&"
*/
public void set"&UPPER(LEFT($B5,1))&MID($B5,2,LEN($B5))&"("&$C5&" "&$B5&") {
this."&$B5&" = "&$B5&";
}"
setterメソッドはそのままsetXxxxのpublicメソッドです。
マクロ実行
シートのC5:G7を選択して、マクロを起動すると、クリップボードに下記のようなコードがコピーされます。
/**
* ほげほげ
*/
private String hoge;
/**
* ほげほげの取得
*
* @return hoge
*/
public String getHoge() {
return this.hoge;
}
/**
* ほげほげの設定
*
* @param hoge ほげほげ
*/
public void setHoge(String hoge) {
this.hoge = hoge;
}
/**
* ふがふが
*/
private boolean fuga;
/**
* ふがふがの取得
*
* @return fuga
*/
public boolean isFuga() {
return this.fuga;
}
/**
* ふがふがの設定
*
* @param fuga ふがふが
*/
public void setFuga(boolean fuga) {
this.fuga = fuga;
}
/**
* ぶげぶげ
*/
private int buge;
/**
* ぶげぶげの取得
*
* @return buge
*/
public int getBuge() {
return this.buge;
}
/**
* ぶげぶげの設定
*
* @param buge ぶげぶげ
*/
public void setBuge(int buge) {
this.buge = buge;
}
あとはこのコードをIDEなりに貼り付けてコードフォーマットして使います。
マクロは「行ごと」にコピーするループになっているので、お好みで「列ごと」にするとか、「メンバー変数だけ先に列で処理して、その後getter→setterを作る」とか、カスタマイズしてみてください。

コメント