【Power Apps】命名規則について

# 今回は、私が普段使用している**命名規則**を紹介します。

ローコードツールなのに命名規則覚えるの面倒だよね、っていう話です。

## MicrosoftのPowerApps キャンバス アプリのコーディング規約とガイドライン

[PowerApps キャンバス アプリのコーディング規約とガイドライン](https://memo.tyoshida.me/wp-content/uploads/2021/06/4bbaa6955f6a1caa85a9653c13d61d72.pdf)というMicrosoft公式のコーディング標準があります。

Power Appsのキャンバスアプリを開発される方は**是非一度目を通すべきドキュメント**です。

ですが、このコーディング規約とガイドラインの中にあるコントロールや変数の命名規則が個人的に面倒だと感じています。

なぜなら、Power Appsではコントロールを生成した時に**コントロールに応じて個別の名前が命名される**からです。

公式のガイドラインでは、ラベルlbl、ボタンはbtnなど、**接頭語**を付けることでコントロールを判別させています。

これではせっかくの自動命名を活かすことが出来ません。

## PPログ的命名規則
私がPower Appsのキャンバスアプリでアプリを作成する際に使用している命名規則を紹介します。
モダンコントロール等は記載していませんので、表にないものは自動生成の文字列を利用するというルールに沿って命名してください。

### コントロールの名前の変え方

コントロールやスクリーンの名前を変更する方法を2通り紹介します。

#### コントロール名の上でダブルクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/f8debe0f-ae13-6b6b-2a8d-28da8c25ec61.png)


#### …をクリック→名前の変更をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/e17cc1bd-0c7b-ff84-83a5-f56f556971ec.png)

### 変数・コレクション

変数、コレクションは自分で命名する必要があるので、ある程度公式のガイドラインに沿っています。

| 変数・コレクション   | 命名規則        |
|-----------------|---------------|
| グローバル変数      | _PowerApps    |
| コンテキスト変数     | _powerApps    |
| コレクション       | ColPowerApps  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/9705f5c7-b576-1e51-3730-6ce32108f5b0.png)


命名規則を揃えることで、変数の場合だと**アンダーバー(_)を入力しただけで変数の一覧が数式バーの候補にサジェストとして表示されるため、開発が非常に早くなります。**

### スクリーン・データソース

#### スクリーン

スクリーンを画面に追加した時にはScreenの後に連番で数字が割り振られます。

この数字の代わりに、そのスクリーンがどんな画面なのかを示す命名をしています。

**例)ScreenEditForm, ScreenTop**

#### データソース

データソースは日本語で作成しています。

データソース以外にキャンバスアプリ上に出てくる文字列をアルファベットにすることで、すぐにデータソースだと判別できるようにします。

ただし、OData形式での表示を避けるため、データソースの**列名はアルファベットで命名**します。

### コントロール

スクリーンと同じく、連番の数字の代わりに**コントロールの意味を分かりやすく記載**します。

**例)ButtonSubmit, ButtonBack**

#### テキスト

| コントロール名      | 命名           |
|-----------------|--------------|
| ラベル           | Label        |
| テキスト入力       | TextInput    |
| HTML テキスト     | HtmlText     |
| リッチ テキストエディター | RichTextEditor |
| ペン入力         | PenInput     |

#### 入力

| コントロール名      | 命名           |
|-----------------|--------------|
| ボタン           | Button        |
| ドロップダウン       | DropDown     |
| コンボ ボックス     | ComboBox     |
| 日付の選択       | DatePicker   |
| リスト ボックス     | ListBox      |
| チェック ボックス    | Checkbox     |
| ラジオ           | Radio        |
| 切り替え          | Toggle       |
| スライダー        | Slider       |
| 評価            | Rating       |
| コンテナ―         | Container    |
| タイマー          | Timer        |

#### ギャラリー・データテーブル・フォーム

| コントロール名      | 命名         |
|-----------------|------------|
| ギャラリー         | Gallery    |
| データテーブル       | DataTable  |
| 編集(フォーム)      | Form       |
| ディスプレイ (フォーム)  | FormViewer |

#### メディア

| コントロール名      | 命名                |
|-----------------|-------------------|
| 画像            | Image             |
| カメラ           | Camera            |
| バーコード スキャナー  | BarcodeScanner    |
| ビデオ           | Video             |
| Microsoft Stream | MicrosoftStream   |
| オーディオ         | Audio             |
| マイク           | Microphone        |
| 画像の追加(グループ) | AddMediaWithImage |
| 画像の追加(画像の追加)| AddMediaButton    |
| 画像の追加(画像)     | UploadedImage1    |
| インポート         | Import            |
| エクスポート        | Export            |
| PDF ビューア       | PdfViewer1        |
| 3D で表示        | ViewIn3D1         |

#### グラフ

| コントロール名         | 命名                   |
|------------------|----------------------|
| 縦棒グラフ(グループ)     | CompositeColumnChart  |
| 縦棒グラフ(凡例)       | Legend                |
| 縦棒グラフ(グラフ)      | ColumnChart           |
| 縦棒グラフ(ラベル)      | Title                 |
| 折れ線グラフ(グループ)    | CompositeLineChart    |
| 折れ線グラフ(凡例)      | Legend                |
| 折れ線グラフ(グラフ)     | LineChart             |
| 折れ線グラフ(ラベル)     | Title                 |
| 円グラフ(グループ)      | CompositePieChart     |
| 円グラフ(凡例)        | Legend                |
| 円グラフ(グラフ)        | PieChart              |
| 円グラフ(ラベル)        | Title                 |
| Power BI タイル       | PowerBI               |

#### アイコン・図形

| コントロール名         | 命名               |
|------------------|----------------|
| アイコン            | Icon           |
| 次へ矢印 戻る矢印       | Arrow          |
| 円              | Circle         |
| 四角形            | Rectangle      |
| 三角形 直角三角形     | Triangle       |
| 五角形            | Pentagon       |
| 六角形            | Hexagon        |
| 八角形            | Octagon        |
| 4 分の 1 円弧 半円 4 分の 3 円弧 | PartialCircle  |
| 星形〇角形         | Star           |

#### コンポーネント・コンテナー

複数の画面で使用するコントロールは、**コンポーネント**でまとめておくと命名の重複を防ぐことが出来て便利です。

| コントロール名      | 命名             |
|-----------------|----------------|
| コンポーネント       | Component       |
| 水平コンテナー       | ContainerHorizon   |
| 垂直コンテナー       | ContainerVertical   |

複数のコントロールをまとめる際は、**コンテナーまたはコンポーネント**を使用しましょう。

https://powerplatformnikki.com/componentproperties

#### AI Builder・Mixed Reality

| コントロール名         | 命名               |
|------------------|------------------|
| 名詞リーダー          | BusinessCardReader |
| 領収書プロセッサ        | ReceiptProcessor   |
| フォーム プロセッサ      | FormProcessor      |
| オブジェクト検出器      | ObjectDetector     |
| テキスト認識エンジン     | TextRecognizer     |
| MR で表示        | ViewInMR          |
| MR で図形を表示    | ViewShapeInMR     |
| MR で測定        | MeasureInMR       |

## **接頭語での命名規則をおすすめしない理由**

**接頭語での命名規則をおすすめしない理由**は、以下の3点です。

- btnなど接頭語で命名すると、アプリにコントロールが増えてきた時に命名する作業が**必ず面倒**になる
- 自動生成されたButton1, Button2などのコントロールと、命名したbtn○○というコントロールが混在し、**数式バーの候補にルールが複数あることでうまく候補として出なくなる**
- 接頭語とコントロール名の一覧を覚えたり、コントロールが追加されるごとに表をアップデートする手間がかかる(実際公式のコーディング規約は更新されていない)

スピード感のある開発が出来ることがPower Appsの強みなので、**命名に時間をかけるのはスマートではない**と私は思います。

## 保守が容易でパフォーマンスに優れたアプリにするために

**保守が容易でパフォーマンスに優れたアプリ**にするために、ぜひ本命名規則と[PowerApps キャンバス アプリのコーディング規約とガイドライン](https://memo.tyoshida.me/wp-content/uploads/2021/06/4bbaa6955f6a1caa85a9653c13d61d72.pdf)を参考にアプリを開発してみてください。

これらを参考にすることで、**スピード感を保ちつつ、保守性の高いアプリを開発出来る**ようになります。

他にも、

- **コードにコメントを付ける**
- **数式のインデントを揃える**

というところにも注意しましょう。

https://powerplatformnikki.com/maintainabilityguideline

## おわりに

この記事では独自の命名規則を紹介しましたが、命名規則で大事なことは**統一されていること**ですので、ここで紹介した命名規則が参考になれば幸いです。