Developer's Blog

Visual Studio のマクロを使って関数ヘッダを付ける方法

はじめまして、Sleipnir 開発担当の上田です。
プログラミングをしていて関数を作るたびに、関数ヘッダを別の箇所からコピーして、
ペーストして、書き換えて、不要な箇所を削除して作成するのは大変です。
今回は、Visual Studio のマクロを使ってもっと楽に関数ヘッダを付けてみたいと思います。


説明に使用する Visual Studio は 2010 で
以下のような関数ヘッダ付けることが目標になります。
vc_macro_20110623.png
1.関数ヘッダマクロの内容

' 一時データパスを取得
Function GetDataPath()
Return FileIO.SpecialDirectories.Temp + "\vc_macro_.dat"
End Function
'ユーザを取得
Function GetUser()
Dim strUser As String
' 一時データパスを取得
Dim strPath As String = GetDataPath()
' 名前を読み込む
If FileIO.FileSystem.FileExists(strPath) Then
Dim reader As System.IO.StreamReader
reader = FileIO.FileSystem.OpenTextFileReader(strPath)
strUser = reader.ReadLine()
reader.Close()
End If
If strUser = "" Then
strUser = InputBox("名前を入力してください", "名前")
' 次回の為に名前を書き込む
Dim writer As System.IO.StreamWriter
writer = FileIO.FileSystem.OpenTextFileWriter(strPath, False)
writer.WriteLine(strUser)
writer.Close()
End If
Return strUser
End Function
Sub 関数ヘッダ()
Dim txtSelection As EnvDTE.TextSelection
Dim dateTime As DateTime
Dim strBrief As String
Dim strUser As String
' ユーザ取得
strUser = GetUser()
strBrief = InputBox("要約を入力してください", "要約")
dateTime = System.DateTime.Today
txtSelection = DTE.ActiveWindow.Selection
txtSelection.StartOfLine()
txtSelection.Insert("/**")
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * @brief") : txtSelection.Indent() : txtSelection.Insert(strBrief)
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * ") : txtSelection.Indent(3)
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * @param") : txtSelection.Indent() : txtSelection.Insert("なし")
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * ") : txtSelection.Indent(3)
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * @return") : txtSelection.Indent() : txtSelection.Insert("なし")
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * ") : txtSelection.Indent(3)
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * @note") : txtSelection.Indent() : txtSelection.Insert("なし")
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * ") : txtSelection.Indent(3)
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" * @date") : txtSelection.Indent()
txtSelection.Insert(dateTime.ToString("yyyy/MM/dd")) : txtSelection.Indent()
txtSelection.Insert(strUser) : txtSelection.Indent() : txtSelection.Insert("新規作成")
txtSelection.NewLine() : txtSelection.StartOfLine()
txtSelection.Insert(" */")
txtSelection.NewLine() : txtSelection.StartOfLine()
End Sub
Sub データクリア()
' データパスを取得
Dim strPath As String = GetDataPath()
If FileIO.FileSystem.FileExists(strPath) Then
FileIO.FileSystem.DeleteFile(strPath)
End If
End Sub

2.関数ヘッダマクロの登録
 1.Visual Studio を立ち上げて、マクロ IDE を起動 ( メニュー | ツール |
  マクロ | マクロ IDE ) します。
  
 2.プロジェクトエクスプローラのツリーより MyMacros | Module1 をダブルクリック
  して編集画面を開きます。
  vc_macro_ide_20110623.png
 3.”Public Module Module1″ の行から “End Module” の行までの間に、
  関数ヘッダマクロを貼り付けて保存します。
3.関数ヘッダマクロの実行
 1.関数ヘッダを付けたい関数の行に入力カレットを移動します。
  
 2.Visual Studio のマクロエクスプローラ ( メニュー | ツール | マクロ |
  マクロ エクスプローラ ) を表示します。
  
 3.マクロエクスプローラのツリーより MyMacros | Module1 | 関数ヘッダ をダブル
  クリックします。
  vc_macro_exe_20110623.png
  名前,要約を入力する画面が出てきて入力すると関数ヘッダが作成されます。
  @param, @return, @note は “なし” 固定にしているのである程度の書き換えが
  必要ですが...
  ※1.名前は初回のみになりファイルに保存されます。
    C:\Users\<ユーザー名>\AppData\Local\Temp\vc_macro_.dat
  ※2.名前の再度入力したい場合は、データクリアのマクロを使います。
4.より便利に使う為に
 関数ヘッダを作るたびにマクロエクスプローラから実行していると
 意外と大変なので、ツールバーやショートカットキーに登録すると
 より便利に使えます。
 vc_macro_toolbar_20110623.png
 
今回は関数ヘッダのマクロのみ説明しましたが、少し変更するとファイルヘッダの
マクロも簡単にできると思います。

Copyright © 2019 Fenrir Inc. All rights reserved.