mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

AppleScript|Finderで右クリックから新規ファイルを作成する

こんにちは。もぐも(@mogmo1012)です。
最近macを買いました。20万…高かった…🥶

それはさておき,最新版のmacOSには,Windowsエクスプローラー上でファイルを新規作成する機能が無いみたい。解決策を探していたら,AppleScriptを使えば条件付きで実現可能であることがわかったのでメモしておきます。✍️

スクリプトだけ見たい方は2-5節を読んでね。

txtファイルのみ対応する場合

こちらのサイト様が参考になりました。
とても丁寧に解説されています。
wordpress.ideacompo.com

拡張子対応版に修正

上記のコードでは拡張子が.txtしか対応していなかったので,拡張子も入力できるようコードを修正してみました。

1. Automatorを起動

Automatorを起動します。
f:id:mogmo811:20200815090947j:plain

2. ワークフローファイルを新規作成

メニューから「ファイル」>「新規」を選択してファイルを作成します。
f:id:mogmo811:20200815091212j:plain

3. 種類をクイックアクションにする

「クイックアクション」を選択して「選択」をクリックします。
f:id:mogmo811:20200815092816j:plain

4. AppleScriptを実行する設定にします。

「ワークフローが受け取る現在の項目」:「ファイルまたはフォルダ」に設定
「アクション」:「ユーティリティ」>「AppleScriptを実行」をドラッグ&ドロップ
f:id:mogmo811:20200815093854j:plain

5. スクリプトを記述

仕様
  • "."がない文字列の場合は,拡張子を".txt"としてファイルを作成する。
  • 文字列に"."が含まれる場合は拡張子ありのファイル名が入力されたと認識して処理を行う。
  • はじめに出現する"."以降の文字を拡張子とする
  • "."から始まるファイル名は作成できない
  • ":"を含むファイル名は作成できない
処理の流れ

ざっくりと処理の流れを説明すると...

  1. デフォルトファイル名"noname"でファイル名入力画面を表示する
  • 入力したファイル名の検証する
    • 拡張子なしの入力と判断した場合,入力文字列+".txt"をファイル名とする
    • 拡張子ありの入力と判断した場合,そのまま処理を続ける
  • 重複ファイルがあるかどうか検証
    • ある場合はファイル名と拡張子の間にインデックス番号を追加
  • ファイルを作成
  • 重複によるファイル名変更を行った場合は,通知画面を表示する
スクリプト全文
(* reference: http://wordpress.ideacompo.com/?p=10886 *)
property defaultFileName : "noname"

on run {input, parameters}
	try
		tell application "Finder" to set the sourceFolder to (folder of the front window) as alias
	on error
		-- no open folder windows
		set the sourceFolder to path to desktop folder as alias
	end try
	
	try
		-- ファイル名入力画面を表示
		set flagErrorInput to true
		repeat while flagErrorInput
			tell me
				activate
				set newFileName to text returned of (display dialog "Enter new file name" default answer "" & defaultFileName)
				-- ファイルの検証
				set dotPosition to the offset of "." in newFileName
				set colonPosition to the offset of ":" in newFileName
				if (dotPosition = 1) then
					display alert "\".\"で始まる名前はシステムだけが使用できます。別の名前を指定してください。" as critical
				else if colonPosition is not equal to 0 then
					display alert "\":\"は使用できません。別の名前を使用してください。" as critical
				else
					set flagErrorInput to false
				end if
			end tell
		end repeat
		
		-- 入力したファイル名の検証
		set stringLength to the length of newFileName
		set dotPosition to the offset of "." in newFileName
		-- ファイル名と拡張子を分割
		if (dotPosition ≤ 1) or (dotPosition ≥ stringLength) then
			-- 拡張子がない入力文字列だと判断した場合
			set fileName to newFileName
			set extension to ".txt"
		else
			-- 拡張子ありの文字列と判断した場合
			set fileName to characters 1 thru (dotPosition - 1) of newFileName as text
			set extension to characters dotPosition thru stringLength of newFileName as text
		end if
		
		-- 重複ファイル名があるかどうか確認
		set flagFileExists to true
		set indexFile to ""
		
		repeat while flagFileExists
			tell application "Finder"
				set flagFileExists to (exists file (fileName & indexFile & extension) in sourceFolder)
			end tell
			
			if not flagFileExists then
				-- なければファイルパスを確定して処理を抜ける
				set newFile to "" & sourceFolder & fileName & indexFile & extension
				exit repeat
			end if
			
			set indexFile to (indexFile + 1)
		end repeat
		
		-- ファイルを作成する
		set touchScript to "touch " & quoted form of (POSIX path of newFile)
		do shell script touchScript
		
		(* memo: ファイル作成後に開く場合はコメント解除してください 
		-- ファイルを開く
		set openScript to "open " & quoted form of (POSIX path of newFile)
		do shell script openScript
		*)
		
		-- 重複のためファイル名を変更した場合は通知
		if indexFile is not equal to "" then
			display alert "Renamed file name \"" & fileName & extension & "\" to \"" & fileName & indexFile & extension & "\" because it already existed" as informational
		end if
		
	end try
	return input
end run
既知の問題
  • 空白文字を含む拡張子を入力した場合,ファイルが生成されない。かつ通知も出てこない。

6. デバッグボタンを押してスクリプトを保存

赤枠のデバッグボタンをクリックしてスクリプトを確定し,エラーメッセージが出ないことを確認してください。正常なコードとしてデバックが通れば,メッセージは何も出てきません。
f:id:mogmo811:20200815103244j:plain

7. ファイル名を指定して保存する

コンテキストメニューに表示されるラベルにもなるので,わかりやすいファイル名にしましょう。
f:id:mogmo811:20200815094442j:plain

実行例

1. スクリプトの実行

Finderを開き,ファイルを作成したいフォルダを右クリックして「サービス」>「(作成したファイル名)」をクリックすると実行します。
※フォルダの右クリックメニューからしか実行できないみたいです。
f:id:mogmo811:20200815103711j:plain
f:id:mogmo811:20200815103842j:plain

2. ファイル名を入力

"."なしで入力すると自動で拡張子".txt"を付与し,テキストファイルを作成します。
f:id:mogmo811:20200815104000j:plain
f:id:mogmo811:20200815104336j:plain

"."の入力があれば,拡張子として認識します。
f:id:mogmo811:20200815104644j:plain
f:id:mogmo811:20200815104659j:plain

重複ファイル名がある場合は,インデックス番号を自動で付与してファイルを作成します。
f:id:mogmo811:20200815104907j:plain
f:id:mogmo811:20200815104942j:plain
なぜここだけ英語にしてしまった自分!!!笑

f:id:mogmo811:20200815105000j:plain

【コマンドスクリプト】宛先・件名・本文をテンプレート化したバッチファイルを作る【Bat】

もぐもです。(`・ω・´)🍙
前回は,GoogleメールのURLに宛先・件名・本文が設定できる方法について書きました。
mogmo811.hatenablog.com

簡単なものならこれ方法で十分です。
今回は,以下のような理由でバッチファイルを作ってみました。

  • 件名に月日を使いたい
  • 本文設定時,ユーザー(今んとこ,うちしかいないけど)に改行の文字列"%0D%0A"を入力させたくない

作ったもの

  • URLを自動生成し,Googleメールを自動で開くバッチファイル
  • 本文のテンプレートにつかうbodyTemplate.txtファイル

上記2ファイルを同じ場所に置けば実行が可能です。

バッチファイルの中身(全体)

@echo off

rem 定数 ===============
set BODY_TEMPLATE_FILE=bodyTemplate.txt
set CRLF=%%0D%%0A
set YEAR=%date:~,4%
set MONTH=%date:~5,2%
set DAY=%date:~-2%

rem ユーザー設定 ==========
set TO_ADDRESS=tanaka@***.jp
set CC_ADDRESS=aida@***.jp,iida@***.jp
set BCC_ADDRESS=mogmo@***.jp
set REPORTER=もぐも
set SUBJECT=【日報】%MONTH%/%DAY% %REPORTER%

setlocal enabledelayedexpansion
if exist %BODY_TEMPLATE_FILE% (
    for /f "tokens=1* delims=: eol=" %%X in ('findstr /n "^" %BODY_TEMPLATE_FILE%') do (
        rem memo: %%Xには行番号,%%Yは本文
        set LINE=%%Y%CRLF%
        set BODY=!BODY!!LINE!
    )
)

rem 設定内容表示 ==========
echo 設定内容 ----------------------------------------------
echo 報告日 : %YEAR%/%MONTH%/%DAY%
echo 報告者 : %REPORTER%
echo To     : %TO_ADDRESS%
echo Cc     : %CC_ADDRESS%
echo Bcc    : %BCC_ADDRESS%
echo 件名   : %SUBJECT%
echo 本文   : %BODY_TEMPLATE_FILE%を参照してください。
echo -------------------------------------------------------

rem 宛先,件名,本文をセットしたメール作成画面を表示 ==========
echo.
echo Googleメールの新規メール作成画面を既定のブラウザで開きます...
start "" ^"https://mail.google.com/mail/?view=cm^&fs=1^&to=%TO_ADDRESS%^&cc=%CC_ADDRESS%^&bcc=%BCC_ADDRESS%^&su=%SUBJECT%^&body=%BODY%^"

rem 終了 ==========
endlocal
pause

コード上部

@echo off
rem 定数 ===============
set BODY_TEMPLATE_FILE=bodyTemplate.txt
set CRLF=%%0D%%0A
set YEAR=%date:~,4%
set MONTH=%date:~5,2%
set DAY=%date:~-2%
  1. echo off で「以降実行中のコマンドを表示しない」設定にし,さらに@を付けることでこのコマンドすら非表示にする
  2. rem ~でコメントが書ける。コメントなので実行はしない。
  3. 本文BODY_TEMPLATE_FILE変数に "bodyTemplate.txt" を設定する。変数に文字列を代入するときは,set 変数=文字列と書く
  4. CRLF変数に改行に使う文字列を代入する
  5. YEARMONTHDAYには%date%で取得した年月日を必要な文字列だけ抽出して代入する

ユーザー設定部

rem ユーザー設定 ==========
set TO_ADDRESS=tanaka@***.jp
set CC_ADDRESS=aida@***.jp,iida@***.jp
set BCC_ADDRESS=mogmo@***.jp
set REPORTER=もぐも
set SUBJECT=【日報】%MONTH%/%DAY% %REPORTER%

setlocal enabledelayedexpansion
if exist %BODY_TEMPLATE_FILE% (
    for /f "tokens=1* delims=: eol=" %%X in ('findstr /n "^" %BODY_TEMPLATE_FILE%') do (
        rem memo: %%Xには行番号,%%Yは本文
        set LINE=%%Y%CRLF%
        set BODY=!BODY!!LINE!
    )
)
  1. TO_ADDRESSCC_ADDRESSBCC_ADDRESSにはそれぞれ送信したいアドレスを設定する。複数アドレスがある場合は ",(カンマ)" で区切る。
  2. REPORTERは件名で使いたかったので用意した。不要なら削除
  3. SUBJECTに件名を設定する。上記の例なら "【日報】 4/29 もぐも" のようになる
  4. bodyTemplate.txtに書いた本文をfor文で1行読みながらURL用の文字BODYを組み立てていく。
  5. 普通にファイルを1行ずつ読むと空白行が無視されてしまうので,その対策として'findstr /n "^" %BODY_TEMPLATE_FILE%'を記述。findstrを使用して行頭に行番号を付け,%%Xに行番号,%%Yに一文が代入されるようになっている。
  6. set LINE=%%Y%CRLF%で取得した一文%%Yのあとすぐに改行文字CRLFを付けた文字列をLINEに代入する
  7. set BODY=!BODY!!LINE!BODYに前の状態のBODYLINEを代入している
  8. setlocal enabledelayedexpansionset BODY=!BODY!!LINE!については遅延環境変数でググってください。

設定内容表示部

これはechoでコマンドプロンプトに情報を表示しているだけなので説明は割愛します。

rem 設定内容表示 ==========
echo 設定内容 ----------------------------------------------
echo 報告日 : %YEAR%/%MONTH%/%DAY%
echo 報告者 : %REPORTER%
echo To     : %TO_ADDRESS%
echo Cc     : %CC_ADDRESS%
echo Bcc    : %BCC_ADDRESS%
echo 件名   : %SUBJECT%
echo 本文   : %BODY_TEMPLATE_FILE%を参照してください。
echo -------------------------------------------------------

URLを作ってブラウザを起動する

rem 宛先,件名,本文をセットしたメール作成画面を表示 ==========
echo.
echo Googleメールの新規メール作成画面を既定のブラウザで開きます...
start "" ^"https://mail.google.com/mail/?view=cm^&fs=1^&to=%TO_ADDRESS%^&cc=%CC_ADDRESS%^&bcc=%BCC_ADDRESS%^&su=%SUBJECT%^&body=%BODY%^"

rem 終了 ==========
endlocal
pause
  1. echo.コマンドプロンプトに空行を表示
  2. Tips: start http://~:規定のブラウザでURLを開く
  3. Tips: start "ブラウザのファイルの場所" "http://~":ブラウザを指定してURLを開く
  4. 今回はURLを"で囲むため,start "" "https://~"と記述して,ブラウザを指定せずURLを開きますよ~っていうコードにしてます。
  5. "&Windowsちゃんが命令コードと勘違いしてしまうので,文字列として扱いたい場合は"^を前につけてあげてください。これをエスケープといいます。URLを囲む"エスケープしたのは,途中で変数を%TO_ADDRESS%のように使いたかったからです。普通に"のみだと,変数ではなく"%TO_ADDRESS%" という文字列として処理されてしまいます。
  6. setlocal したら endlocal
  7. pause:キー入力待機状態にする。確認のためキー入力状態にしていただけなので,なくても可能。

完成

あとはバッチファイルと本文テンプレート用のテキストファイルを同じ場所に保存しておくだけ。
バッチファイルを実行すれば規定ブラウザで新規メール作成画面が開くはずです。


ではまた。
もぐも(`・ω・´)🍙

【Googleメール】URLに宛先・件名・本文を設定して新規メール作成画面を開く

こんにちは。もぐもです(`・ω・´)🍙

テレワークが始まって,報告をメールで行うようになり,お決まりの相手にお決まりの内容を送ることが多くなってきたのですが,宛先・件名・本文をまとめてテンプレートに登録する機能がGoogleメールにはないだとぉぉ。。
なんとかできないか調べてみたところURLに宛先・件名・本文を設定することでテンプレートのような使い方ができることを知ったので,まとめてみます。

まずは既存機能について

件名と本文をテンプレートに登録する機能

Googleメールに件名と本文のテンプレート機能があるのはご存じでしょうか?
私は今日この時まで知らなかったです。

簡単に紹介しておきます。
まず,設定アイコン>"詳細">"テンプレート"の"有効にする"にチェックを付けて設定を保存します。
f:id:mogmo811:20200428215632p:plain

メールの新規作成や返信で件名と本文を編集し,右下のアイコンから
"テンプレート">"下書きをテンプレートとして保存">"新しいテンプレートとして保存"を選択します。
f:id:mogmo811:20200428215951j:plain

テンプレート名は件名に使われますので,件名のままにしておいてください。
これでテンプレートの登録は完了です。

あとは,メール作成画面で右下のアイコンをクリックして "テンプレート">"テンプレートの挿入" の中から適用したいテンプレートを選択すると件名と本文が反映されます。

Google連絡先のラベルを利用した機能

Google連絡先の"ラベル"という機能を使うと,宛先をグルーピングできます。
そしてこのラベル機能はGoogleメールでも利用することができます。
GoogleメールのTo,Cc,Bccいずれかの入力欄でラベル名を入力すると,ラベルがついている連絡先が一発で登録できます。

全てTo,Cc,Bccのいずれかに反映させたい場合は使えますが,この連絡先はTo,この連絡先はCc..みたいに細かい設定はできません。

宛先・件名・本文を指定したURLを作る

既存機能ではできない宛先・件名・本文のテンプレート化は,以下のようなURLを作ることで解決できるみたいです。

https://mail.google.com/mail/?view=cm&fs=1&to***@***.co.jp&body=本文やで

&to=&body=という文字がURL中にありますね。
これらをURLに追記することで,宛先や本文等に何を表示するかあらかじめ設定することができます。
ちなみにこの例ですと,宛先(To)に***@***.co.jp,本文に「本文やで」が入力された状態で新規メール作成画面が開きます。

それでは設定できる内容について,詳しく説明していきます。

URLの先頭

先頭文字列はPCかスマホかで違います。

PCの場合 https://mail.google.com/mail/?view=cm&fs=1
iPhone/Androidの場合 googlegmail:///co?

このURLに必要な項目を付け加えていくことで細かい設定が可能になります。

設定可能な項目

宛先

宛先はTo,Cc,Bccが設定可能です。
スペースなしのカンマで区切れば複数メールアドレスも設定できます。

項目 接頭辞
To &to= &to=a@***.co.jp,b@***.co.jp
Cc &cc= &cc=c@***.co.jp
Bcc &bcc= &bcc=d@***.co.jp,f@***.co.jp
件名
項目 接頭辞
件名 &su= or &subject= &su=【日報】 もぐも

スペースも使用できます。

本文
項目 接頭辞
本文 &body= &body=1行目%0D%0A%0D%0A3行目

改行は"%0D%0A"という文字を入力すると可能です。
上の表の例だと,本文は以下のようになります。

1行目

3行目

ただこれ,Windowsの改行コードCRLF(0x0d0a)のことなのでMacの場合は違うかも。

URLの完成形

全て合わせると以下のようなURLになります。

https://mail.google.com/mail/?view=cm&fs=1&toa@***.co.jp,b@***.co.jp&cc=c@***.co.jp&bcc=d@***.co.jp,f@***.co.jp&su=【日報】 もぐも&body=1行目%0D%0A%0D%0A3行目

リンクファイルで実行する

デスクトップなどリンクファイルを作りたい場所で右クリックして "新規作成">"ショートカット" を選択し,URLを入力して保存します。

準備はこれだけでOKです。
リンクファイルを実行すると,規定ブラウザでGoogleメールの新規メール作成画面を表示します。


今日はここまで。
次回はバッチファイルを作って件名に日時を入れたり,本文のテンプレートをテキストファイルから読み込んでみたりした記事を投稿しています。
mogmo811.hatenablog.com


ではまた
もぐも(`・ω・´)🍙

【Ubuntu】WSLにUbuntu 18.04 LTSをインストールする

f:id:mogmo811:20200424085958j:plain
WSLとはWindows Subsystem for Linuxの略。
Windows上でLinuxを動かせる機能です。

もぐもです(`・ω・´)
Redmineを導入したくてUbuntuをインストールすることになったので,そのメモもかねて。

環境

Windows環境】
エディション: Windows 10 Pro
バージョン: 1803
OSビルド: 17134.885
Ubuntu
18.04.4 LTS

Ubuntuのインストール

WSLの有効化

まずはWSLを有効にします。
"Windows の機能の有効化または無効化"を検索して,画面を開きます。コントロールパネルから画面を開く場合は,コントロールパネル>プログラム>プログラムと機能>Windows の機能の有効化または無効化をクリックします。

リストの中から”Windows Subsystem for Linux”を探し,チェックを入れてOKボタンをクリックします。

処理が完了したら再起動を促されますので,再起動しましょう。

Ubuntuインストール

Windows左下の検索から"Microsoft Store"を検索しアプリを開きます。Microsoft Storeを開いたら"Ubuntu"を検索し,インストールします。

Ubuntu起動と初期設定

Ubuntuをインストールしたら,起動します。
最初は真っ黒の画面に”Installing. this may taka a few minutes”と表示されますので,数分待ちましょう。
f:id:mogmo811:20200424092942p:plain

インストールが終了すると,まずusernameの入力待ち状態になりますので,usernameを設定します。
usernameはデフォルトでは大文字が使えませんので小文字の英語と数字で設定してください。

usernameが正常に設定できたら次はpasswordの入力を求められますので,passwordの設定を行いましょう。

この設定はUbuntuのユーザ設定なので,Windowsのアカウントとは無関係です。

パッケージリストの更新

パッケージリストの更新を行い,リポジトリに新しく登録されたアップグレードが必要なパッケージをリストに登録します。

$ cd /etc/apt
$ sudo sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu/%http://jp.archive.ubuntu.com/ubuntu/%g" sources.list
#パスワード入力が求められるので入力
#ファイル変更待ち...
$ sudo apt update
#アップデート待ち...
$ sudo apt upgrade
#最新情報取得待ち...

※# ~~~ はコメントなので,実際には画面に表示されません。

日本語化設定

$ sudo apt install language-pack-ja
#パスワード入力が求められるので入力
#日本語パッケージのインストール待ち...

#日本語の設定をjp_JP.UTF-8にする
$sudo update-locale LANG=ja_JP.UTF-8

#一度ログアウトして言語設定を反映する
$ exit

再びUbuntuを起動し,dateコマンドを実行して日本語が表示されていれば設定が完了です。

$ date
2020424日 金曜日 09:56:18 DST

これで基本的なUbuntuの設定は完了です。

参考

以下のサイトを参考にしました。
WSL(Windows10)にLinuxのUbuntuインストール | アールエフェクト


ここまでは意外と簡単でした。
次はRedmine導入の作業の方法を投稿することになるのかな。
ではまた。
もぐも(`・ω・´)

OCXファイルの登録

OCXファイルとは

フルスペルはOLE Custom Control。以下引用。

 OCXとは、Windowsのプログラムファイルの形式の一つで、OLEコントロールActiveXコントロールなどの形で部品化されたコンピュータプログラムを格納するためのもの。単体で実行することはできず、他のソフトウェアに機能を追加するために利用される。
 何らかのひとまとまりの機能を実装したソフトウェア部品で、Windows上で動作する他のプログラムに連結され、呼び出されることにより実行される。
 Windowsのソフトウェア部品の標準的な形式としてはDLL(Dynamic Link Library、.dllファイル)があるが、OCXのプログラム形式はDLLとほぼ同じもので、特定の要件を満たしたものがOCXとして機能する。一般的には画面表示や利用者による操作の受け付けなど、ユーザインターフェース要素が存在するソフトウェア部品にOCX形式が用いられる。

OCX(.ocxファイル)とは - IT用語辞典 e-Words

OCXファイルの登録

32bitならSystem32フォルダの,64bitならSysWOW64フォルダのregsvr32.exeを使ってocxをレジストリに登録します。
※Windows10の場合です。
コマンドプロンプトを管理者権限で開き,以下のコマンドを打ち込みます。
成功すると,メッセージボックスに成功しました的なメッセージが表示されます。
管理者権限で実行していないとエラーコード0x8002801cが発生します。

#32bitの場合
cd C:\Windows\System32
regsvr32 "ocxのパス"

#64bitの場合
cd C:\Windows\SysWOW64
regsvr32 "ocxのパス"

ではまた。

取扱説明書に使うフォントを選定した

うちの会社では取扱説明書の作成も開発者の業務なので,
毎度製品をリリースするたびに取扱説明書を作成しなければなりません。

そこで読みやすいフォントについて調べてみたので投稿します。
フォントの詳しい説明はデザイン関係の書籍やデザイン専門のサイト様に超わかりやすく書いてあるのでここでは割愛します。
※もぐもは非デザイナーです。使い方間違っていたら教えて下さい。

フォント選定で使用した基準

  • 太字,斜体に対応していること
  • Windows 8.1以降の環境で対応可能なこと

ゴシック体

主に見出しや図中の文字に使用しています。
また,目立たせたい箇所にはゴシック体を使うのが望ましいでしょう。
Wordで游ゴシックやメイリオを使う際は段落 - 間隔の設定を調整してください。
でないと行間隔が空きすぎて逆に見づらいです。(´・ω・`)

おすすめフォント

明朝体

長文を読ませる場合,明朝体のほうがゴシック体よりも適しています。
説明書中の本文のフォントはすべて明朝体ベースにしました。

おすすめフォント

サンセリフ

使い方はゴシック体と一緒。
"セリフ(字の端にあるやつ)がない" = サンセリフ

おすすめフォント

  • Segoe UI
  • Calibri ※Windowsのみ,メイリオ等字面の大きいフォントとの相性は✕

セリフ体

使い方は明朝体と一緒。

おすすめフォント

書籍

おすすめの書籍を紹介しておきます。

ではまた。

コードを書くときに気を付けていること・気をつけてほしいこと

最初のうちはこんなことに気を付けながら書いてほしいなぁ,気を付けたらいいと思うなって事項のまとめ。

今日のテーマの目次です。

では始めて行きましょう(`・ω・´)

記述ルール

命名記法

言語によって大まかなルールが決まっているので,それに合わせると良い。

記法 説明
PascalCase すべての単語の先頭が大文字 DeleteText(), CreateText()
camelCase 最初が小文字、2語目以降の先頭が大文字 csvFile, decimalLabel
snace_case アンダーバー区切り is_numeric, str_decimal
CONSTANT_CASE すべて大文字のアンダーバー区切り IDC_EDIT_DECIMAL, CONST_VALUE

※2020/4/16 @garamloverのご指摘があり,PascalCaseとcamelCaseの説明が逆だったので修正しました。

区切りの書き方

カンマ区切りなのかカンマスペース区切りなのか。
カンマスペースを用いる方が多いように思っています。

void Test1(int a, int b); // カンマスペース
void Test2(int a,int b); // カンマ

タブ

タブキーを押したとき,空白で埋めるかタブで埋めるかの違い。
VisualStudioの場合,設定はメニューの"ツール">"オプション"をクリックして
画面を開き,"テキストエディター"のタブをクリックすると,各言語の設定を変更することができる。
私は4つスペース埋めが好きです。
f:id:mogmo811:20200415171210p:plain

コメント

記法

自分は" // hogehoge" という書き方をします。
時と場合によってはtabで調整することもあります。
ですがtabは等幅フォントを使っていないエディタで見たとき悲惨なことになりますので,あまり使わないようにしています。

int a; // スペース//スペースコメント
int b;// //スペースコメント
int c;//コメント
コメントの内容

不要なコメント,間違ったコメントは悪なので後回しにせずすぐ削除・修正する癖をつけましょう。

行間

行間にも意味があると思って書くこと。
行間は文章でいう段落,もしくはグルーピングの方法だと思ってほしい。

例えば下のように2個の条件分岐も行間がないとぱっと見1つの条件分岐に見えてしまう。

int a = 10;
if(a < 10)
{
    a = 0;
}
else if(a > 50)
{
    a = 999;
}
if(a ==0)
{
   return a;
}
else if(a > 100)
{
    // hogehoge
}
// 続く...

ほかにもヘッダファイルで関数のグルーピングが適当だと,恐ろしく読みづらい。
かなり適当な例ですが。。。悪い例。

// C++です
int ConvertToValue(std::string text);
std:string ConvertToText(int value);
void Convert();

void LoadText();

void LoadValue();

int Mul(int a, int b);

void ClearBuffer();
int Add(int a, in b);
int Sub(int a, int b);

私が書き直すとこんな感じかな。
メイン処理(っぽそうな関数名)と,変換処理関数,演算用関数でグルーピングしました。

void Convert();
void LoadText();
void LoadValue();
void ClearBuffer();

int ConvertToValue(std::string text);
std:string ConvertToText(int value);

int Add(int a, in b);
int Sub(int a, int b);
int Mul(int a, int b);

VisualStudioならオプション設定を有効活用しよう

メニューの"ツール">"オプション"をクリックして画面を開き,
テキストエディターのタブをクリックすると,各言語のコーディングルールが設定できる。
※ローカルのVSのみに反映するので他の人のVSには影響しない。設定を共有するにはプロジェクトごとにEditorConfigを設定する必要があるがここでは言及しない

言語によって設定できる内容は微妙に違うが,

  • タブの空白埋めかタブ埋め
  • switch文のcaseの位置
  • {}の位置(私はTest2派)
void Test1() {
    //...
}
void Test2()
{
    // ...
}

などなど細かに決められる。

これを決めておけば,「ドキュメントのフォーマット」機能を実行したとき,設定に沿ってフォーマットしてくれる。
ショートカットキーのデフォルトは Ctrl+K, Ctrl+D

コードについて

基本C#XAMLを書いている私ですが,C++を使う機会があったのでC++の話も交えて書きます。

アクセス権限

public, private, protected, etc...のことです。

自身のクラスから参照する必要があるのかを検討してアクセス修飾子を選定しましょう。
publicはどこからでもアクセスできて危険です。
まずはprivateで考え,外部からのアクセスが必要なものならその参照範囲を想定してprotected や internal,publicなどを使用する...といった風に考えると使いやすいかなぁと思います。
この辺はクラスをいくつも設計したり,継承を使ったりすると特に気にして設計しなければなりません。
C++参考:アクセス修飾子
C#参考:アクセス修飾子 - C# プログラミング ガイド | Microsoft Docs

cppファイルとヘッダファイル [C++]

ヘッダファイルとcppファイルの記述順は一致していてほしいものです。

ヘッダファイルの記述がぐちゃぐちゃだったり,不要なコメント,不適切なコメント,実際には使っていない関数や変数が乱立していると一目見て読む気が失せてしまいます。

  • 常に整理しながら書くこと
  • 命名時に十分に検討すること
  • こまめに確認・修正を繰り返す

という癖をつけておきましょう。

また, ヘッダファイルにusing std;は記述しないようにしている。
理由はhファイルを使う人がusing stdに気づかない恐れがあるから。
また,略さないで書いたほうが読み手に伝わりやすいと思うので,usingせず素直にstd::filesystemとかstd::wstringと書いています。

インクルードファイル [C++]

以下のサイトを参考にしてください。
インクルードファイルとは:
https://wa3.i-3-i.info/word12024.html
インクルードファイルの指定方法:
Oracle Solaris Studio 12.3 Information Library (日本語)

文字列 [C++]

文字列の型いっぱいあるんですよね...
この辺はまた次回書こうかな。

終わりに

最初のうちに気を付けてほしいことを書きました。
きれいに書くことはあとで保守する自分のためにもなりますし,
担当が変わっても保守しやすいプログラムになりますので記述には注意しましょう。

ではまた。(`・ω・´)ノ"

もぐも