2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPT(GPT-4o)にyamlファイルを読み込ませて、各種ドキュメントの自動生成を試してみました。
Copilotでやれとか言わないでください

事前準備

事前準備として以下の記事を参考に、VSCodeでmsappファイルをyamlファイルにunpackします。

Microsoft Power Platform CLI - Power Platform | Microsoft Learn

今回はテトリス風ゲームを対象のアプリとします。

ドキュメントの種類

Power Appsで開発したアプリのドキュメントにはいろいろなものがありますが、今回は以下の3つを自動生成できないか試してみます。

  • 機能要件一覧
  • テストケース一覧
  • ユーザーマニュアル

ドキュメントを作成するプロンプトも生成AIに書いてもらいます。

image.png

プロンプトを工夫すればもっと適切なドキュメントが作れますが、全世界に公開できるほどドキュメンテーションに自信がないのでAIに任せます。

機能要件一覧

以下のプロンプトで機能要件一覧を作成していただきます。

Power Appsアプリケーションの機能要件一覧ドキュメントを作成してください。以下は、Power Appsアプリケーションの構成を示す.yamlファイルの内容です。この内容を元に、機能要件を詳細に説明するドキュメントを作成してください。

1. 各機能の概要
2. 各機能の具体的な要件
3. 各機能の使用方法
4. ユーザーインターフェースの説明
5. データの入力と出力
6. エラーハンドリング
7. その他の重要な注意点

以下に、.yamlファイルの内容を示します。

```yaml
# YAMLファイルの内容をここに貼り付ける

上記の内容を元に、包括的で詳細な機能要件一覧ドキュメントを作成してください。

結果は以下です。

# Power Appsアプリケーション機能要件ドキュメント

## 1. 各機能の概要

このアプリケーションは、レトロな1980年代風の背景を持つTetrisゲームです。プレイヤーはブロックを回転させたり、左右に移動させたりしながら、ブロックを消去して得点を競います。ゲームはPower Appsで構築されており、マウスとキーボードを使った操作が可能です。

## 2. 各機能の具体的な要件

### Screen1
- **ImageBackGround**
  - 背景画像
  - 高さ: 768
  - 幅: 1366
  - 透明度: 0.7
  - 画像ポジション: Fill

- **GalleryBoard**
  - テトリスのゲームボード
  - ボーダー色: `ColBlocks`の5番目の色
  - アイテム: `ColBoard`フィルター済み
  - テンプレートサイズ: 高さの1/22
  - 幅: 高さの1/22 × 9
  - 位置: 親の幅の中央
  - Zインデックス: 2

- **ButtonBlock**
  - ブロックボタン
  - ボーダー色: 黒
  - ボーダーの厚さ: 1
  - 塗りつぶし: `ColBlocks`に基づく色
  - テキスト: ブロックの座標(コメントアウト)
  - 可視性: `MinoStatus`が空でない場合

- **LabelBlockBG**
  - 背景ラベル
  - ボーダー色: 半透明の色
  - ボーダーの厚さ: 1
  - テキスト: 空
  - 可視性: false

- **Timer1**
  - ゲームタイマー
  - 自動スタート: true
  - 持続時間: スコアに基づく動的な時間
  - タイマー終了時の動作: ブロックの設置や移動

- **Toggle1**
  - トグルスイッチ
  - デフォルト: キーボード入力やスタートボタンに基づく
  - オンチェック/オフチェック時の動作: ブロックの消去やスコア更新

- **SliderHorizontal**
  - 水平スライダー
  - デフォルト値: キーボード入力に基づく
  - 値変更時の動作: ブロックの移動

- **SliderVertical**
  - 垂直スライダー
  - デフォルト値: キーボード入力に基づく
  - 値変更時の動作: ブロックの移動

- **ContainerRight**
  - 右回転ボタンのコンテナ
  - ドロップシャドウ: ExtraBold
  - 半径: 60

- **ButtonRight**
  - 右回転ボタン
  - 塗りつぶし色: `ColBlocks`の7番目の色
  - テキスト: "R"

- **ContainerLeft**
  - 左回転ボタンのコンテナ
  - ドロップシャドウ: ExtraBold
  - 半径: 60

- **ButtonLeft**
  - 左回転ボタン
  - 塗りつぶし色: `ColBlocks`の6番目の色
  - テキスト: "L"

- **ContainerStart**
  - スタートボタンのコンテナ
  - ドロップシャドウ: ExtraBold
  - 半径: 40

- **ButtonStart**
  - スタートボタン
  - 塗りつぶし色: `ColBlocks`の2番目の色
  - テキスト: "Start" または "Reset"

- **TextInputKeyBoard**
  - キーボード入力用のテキストフィールド
  - 高さ: 1
  - 幅: 1

- **SliderHorizontalKeyBoard**
  - キーボード入力用の水平スライダー
  - デフォルト値: キーボード入力に基づく
  - 値変更時の動作: 左右回転ボタンの選択

- **ContainerScore**
  - スコア表示用のコンテナ
  - ドロップシャドウ: ExtraBold

- **LabelScore**
  - スコアラベル
  - テキスト: "Score:" & `_Score`

- **AudioBGM**
  - BGM再生
  - 自動スタート: ループに基づく
  - メディア: BGM1

- **AudioSE**
  - 効果音再生
  - 自動スタート: 効果音がセットされたとき

- **LabelChain**
  - チェーン表示
  - テキスト: `_chain` & " chain(s)!"

- **ToggleBGM**
  - BGMのトグルスイッチ
  - TrueText/FalseText: "BGM"

- **ToggleSE**
  - 効果音のトグルスイッチ
  - TrueText/FalseText: "SE"

- **GalleryQues**
  - 次のブロックのギャラリー
  - アイテム: `ColQue`

- **GalleryQue**
  - 次のブロックの個々のギャラリー
  - アイテム: `Que.Que`

- **Image2**
  - ブロックの画像表示
  - 画像: `ThisItem.Type`に基づく

- **ButtonGuide**
  - ガイドボタン
  - テキスト: "Guide"

- **ContainerGuide**
  - ガイドコンテナ
  - 可視性: `_guide`に基づく

- **ButtonGuideClose**
  - ガイド閉じるボタン
  - テキスト: "Close"

- **LabelGuide**
  - ガイドラベル
  - テキスト```
: ゲームの操作方法

- **ContainerGameOver**
  - ゲームオーバーコンテナ
  - 可視性: `_gameOver`に基づく

- **ButtonTryAgain**
  - 再挑戦ボタン
  - テキスト: "Try Again"

- **LabelScore_1**
  - 現在のスコア表示ラベル
  - テキスト: "Your Score:" & `_Score`

- **LabelScore_2**
  - ハイスコア表示ラベル
  - テキスト: "High Score:" & `First(ColScore).Value`

- **ImageX**
  - スコア投稿用の画像ボタン
  - 画像: 'logo-white'
  - ツールチップ: "スコアをXに投稿する"

## 3. 各機能の使用方法

### ゲームの開始
- スタートボタンをクリックしてゲームを開始します。
- ブロックは自動的に降下し、プレイヤーは左右に移動させたり、回転させたりできます。

### ブロックの操作
- キーボード操作:
  - `a`: 左移動
  - `d`: 右移動
  - `s`: 下移動
  - `q`: 左回転
  - `e` または 半角スペース: 右回転
- マウス操作:
  - 次のブロックを選択するためにギャラリーをクリックします。

### スコアの確認
- 画面右上に現在のスコアが表示されます。
- ゲームオーバー時にハイスコアが表示されます。

### 効果音とBGMの設定
- 効果音(SE)とBGMはそれぞれのトグルスイッチでオン/オフできます。

### ゲームガイドの表示
- ガイドボタンをクリックすると、操作方法が表示されます。
- ガイドを閉じるには、ガイド閉じるボタンをクリックします。

### ゲームオーバー
- ゲームオーバー時には再挑戦ボタンが表示され、クリックすると新しいゲームが開始されます。

## 4. ユーザーインターフェースの説明

- **メイン画面**: テトリスのゲームボードが表示されます。左右の回転ボタン、スコア表示、次のブロック表示、BGMとSEのトグルスイッチが配置されています。
- **ガイド画面**: ゲームの操作方法が説明されています。ガイド閉じるボタンで戻ることができます。
- **ゲームオーバー画面**: スコアとハイスコアが表示され、再挑戦ボタンで新しいゲームを開始できます。

## 5. データの入力と出力

- **入力**: プレイヤーのキーボードとマウスの操作。
- **出力**: ゲーム画面の更新、スコアの表示、効果音とBGMの再生。

## 6. エラーハンドリング

- キーボード操作が反応しない場合は、ボタン操作を一度行ってください。
- ブロックの設置や移動がうまくいかない場合は、タイマーの終了時に再度処理が行われます。

## 7. その他の重要な注意点

- ゲームはPower Appsのプラットフォームで動作します。
- ゲームの動作に影響する可能性があるため、スライダーやトグルスイッチの設定を変更する際には注意が必要です。

コントロールごとに数式が設定されているプロパティが数式ではなく自然言語で説明されていますね。
3. 各機能の使用方法に関してはアプリ内のガイドを参考にしている可能性もありますが、きちんと機能を洗い出せていそうです。

テストケース一覧

以下のプロンプトでテストケース一覧を作成していただきます。

Power Appsアプリケーションのテストケース一覧ドキュメントを作成してください。以下は、Power Appsアプリケーションの構成を示す.yamlファイルの内容です。この内容を元に、詳細なテストケースを記述するドキュメントを作成してください。
一つ前に出力した機能要件ドキュメントの機能も参考にしてください。

テストケースドキュメントに含める項目は以下の通りです:

1. 各機能の概要
2. テストケースの識別番号
3. テストケースの説明
4. 前提条件
5. テスト手順
6. 期待結果
7. 実際の結果(実行時に記入)
8. 備考

以下に、.yamlファイルの内容を示します。

```yaml
# YAMLファイルの内容をここに貼り付ける

上記の内容を元に、包括的で詳細なテストケース一覧ドキュメントを作成してください。

結果は以下です。

# Power Appsアプリケーションテストケースドキュメント

## 1. 各機能の概要

このアプリケーションは、レトロな1980年代風の背景を持つTetrisゲームです。プレイヤーはブロックを回転させたり、左右に移動させたりしながら、ブロックを消去して得点を競います。ゲームはPower Appsで構築されており、マウスとキーボードを使った操作が可能です。

## 2. テストケース

### テストケース1: 画面の初期表示
- **識別番号**: TC001
- **説明**: アプリケーションを起動した際の初期画面が正しく表示されることを確認する。
- **前提条件**: Power Appsが正常に動作している。
- **テスト手順**:
  1. Power Appsアプリケーションを起動する。
  2. 初期画面を確認する。
- **期待結果**: 背景画像、スコア表示、スタートボタン、次のブロック表示が正しく表示される。
- **実際の結果**: 
- **備考**:

### テストケース2: ゲームの開始
- **識別番号**: TC002
- **説明**: スタートボタンを押すとゲームが開始されることを確認する。
- **前提条件**: アプリケーションが初期表示されている。
- **テスト手順**:
  1. スタートボタンをクリックする。
  2. ブロックが降下し始めることを確認する。
- **期待結果**: ブロックが降下し、スコアがリセットされる。
- **実際の結果**: 
- **備考**:

### テストケース3: ブロックの左右移動
- **識別番号**: TC003
- **説明**: キーボード入力によりブロックが左右に移動することを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. `a`キーを押して左に移動する。
  2. `d`キーを押して右に移動する。
- **期待結果**: `a`キーでブロックが左に移動し、`d`キーでブロックが右に移動する。
- **実際の結果**: 
- **備考**:

### テストケース4: ブロックの回転
- **識別番号**: TC004
- **説明**: キーボード入力によりブロックが回転することを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. `q`キーを押して左回転させる。
  2. `e`キーまたは半角スペースを押して右回転させる。
- **期待結果**: `q`キーでブロックが左回転し、`e`キーまたは半角スペースでブロックが右回転する。
- **実際の結果**: 
- **備考**:

### テストケース5: ブロックの設置とラインの消去
- **識別番号**: TC005
- **説明**: ブロックが設置され、ラインが消去されることを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. ブロックを底に移動させる。
  2. ラインが揃ったときに消去されることを確認する。
- **期待結果**: ブロックが設置され、揃ったラインが消去される。
- **実際の結果**: 
- **備考**:

### テストケース6: スコアの更新
- **識別番号**: TC006
- **説明**: ラインが消去されたときにスコアが正しく更新されることを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. ラインを消去する。
  2. スコアが更新されることを確認する。
- **期待結果**: ラインの消去に応じてスコアが正しく更新される。
- **実際の結果**: 
- **備考**:

### テストケース7: BGMのオン/オフ
- **識別番号**: TC007
- **説明**: BGMのトグルスイッチでBGMのオン/オフを切り替えられることを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. BGMのトグルスイッチをオンにする。
  2. BGMが再生されることを確認する。
  3. トグルスイッチをオフにする。
  4. BGMが停止することを確認する。
- **期待結果**: BGMがオンで再生され、オフで停止する。
- **実際の結果**: 
- **備考**:

### テストケース8: 効果音のオン/オフ
- **識別番号**: TC008
- **説明**: 効果音のトグルスイッチで効果音のオン/オフを切り替えられることを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. 効果音のトグルスイッチをオンにする。
  2. ブロックの設置時に効果音が再生されることを確認する。
  3. トグルスイッチをオフにする。
  4. ブロックの設置時に効果音が再生されないことを確認する。
- **期待結果**: 効果音がオンで再生され、オフで停止する。
- **実際の結果**: 
- **備考**:

### テストケース9: ゲームガイドの表示
- **識別番号**: TC009
- **説明**: ガイドボタンをクリックするとゲームガイドが表示されることを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. ガイドボタンをクリックする。
  2. ガイドが表示されることを確認する。
- **期待結果**: ガイドが表示され、操作方法が確認できる。
- **実際の結果**: 
- **備考**:

### テストケース10: ゲームオーバー時のスコア表示
- **識別番号**: TC010
- **説明**: ゲームオーバー時にスコアとハイスコアが正しく表示されることを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. ゲームオーバーになる。
  2. ゲームオーバー画面にスコアとハイスコアが表示されることを確認する。
- **期待結果**: スコアとハイスコアが正しく表示される。
- **実際の結果**: 
- **備考**:

### テストケース11: ゲームオーバー後の再挑戦
- **識別番号**: TC011
- **説明**: ゲームオーバー後に再挑戦ボタンをクリックすると新しいゲームが開始されることを確認する。
- **前提条件**: ゲームがゲームオーバーになっている。
- **テスト手順**:
  1. 再挑戦ボタンをクリックする。
  2. 新しいゲームが開始されることを確認する。
- **期待結果**: スタートボタンを押した時と同様に新しいゲームが開始される。
- **実際の結果**: 
- **備考**:

### テストケース12: スコアの保存
- **識別番号**: TC012
- **説明**: ゲームオーバー時にハイスコアが保存されることを確認する。
- **前提条件**: ゲームが開始されている。
- **テスト手順**:
  1. ゲームオーバーになる。
  2. ゲームオーバー画面でスコアがハイスコアより高い場合、ハイスコアが保存されることを確認する。
- **期待結果**: スコアがハイスコアより高い場合、ハイスコアが保存される。
- **実際の結果**: 
- **備考**:

### テストケース13: スコアの投稿
- **識別番号**: TC013
- **説明**: ゲームオーバー画面でスコアをX(旧Twitter)に投稿できることを確認する。
- **前提条件**: ゲームがゲームオーバーになっている。
- **テスト手順**:
  1. スコア投稿ボタンをクリックする。
  2. Xの投稿画面が開くことを確認する。
- **期待結果**: スコアがXに投稿される。
- **実際の結果**: 
- **備考**:

## 備考

- テストケースは実行時に実際の結果を記入してください。
- 不具合が発生した場合は詳細な再現手順とスクリーンショットを添付してください。

次のブロックを選ぶ機能もあるはずですが、正しく出力されませんでした。よく見たら一つ前の機能要件でも出力されていません。
もしかすると本家Tetrisの機能に引っ張られているのかもしれません。

またこれを入力にすればテストスイートの自動生成・テストの自動化もできるかもしれませんね。

ユーザーマニュアル

以下のプロンプトでユーザーマニュアルを作成していただきます。

Power Appsアプリケーションのユーザーマニュアルを作成してください。以下は、Power Appsアプリケーションの構成を示す.yamlファイルの内容です。この内容を元に、ユーザーマニュアルを詳細に記述してください。

ユーザーマニュアルに含める項目は以下の通りです:

1. アプリケーションの概要
2. インストール手順
3. 初期設定
4. 各機能の説明
   - 機能の概要
   - 使用方法
   - 注意点
5. ユーザーインターフェースの説明
   - 画面レイアウト
   - 各コントロールの説明
6. トラブルシューティング
   - よくある問題とその解決方法
7. サポート情報

以下に、.yamlファイルの内容を示します。

```yaml
# YAMLファイルの内容をここに貼り付ける

上記の内容を元に、包括的で詳細なユーザーマニュアルを作成してください。

結果は以下です。

# Power Appsアプリケーションユーザーマニュアル

## 1. アプリケーションの概要

このアプリケーションは、レトロな1980年代風の背景を持つTetrisゲームです。プレイヤーはブロックを回転させたり、左右に移動させたりしながら、ブロックを消去して得点を競います。ゲームはPower Appsで構築されており、マウスとキーボードを使った操作が可能です。

## 2. インストール手順

1. Power Appsにサインインします。
2. 左側のナビゲーションペインから「アプリ」を選択します。
3. 「+ 新しいアプリ」をクリックし、作成ウィザードに従います。
4. アプリ名、データソース、レイアウトを選択し、「作成」をクリックします。
5. 上記の.yamlファイルの内容をアプリに貼り付けて、保存します。
6. アプリを公開し、共有します。

## 3. 初期設定

アプリケーションを初めて起動するときは、以下の設定を確認してください。

1. **背景画像**が正しく表示されているか確認します。
2. **スコア**と**スタートボタン**が画面に表示されているか確認します。
3. **次のブロックのギャラリー**が正しく表示されているか確認します。

## 4. 各機能の説明

### 背景画像
- **機能の概要**: レトロな1980年代風の背景画像を表示します。
- **使用方法**: 初期設定で自動的に表示されます。
- **注意点**: 画像が表示されない場合は、画像パスを確認してください。

### ゲームボード
- **機能の概要**: テトリスのゲームボードを表示し、ブロックを配置します。
- **使用方法**: ゲーム開始後、自動的にブロックが降下します。キーボードでブロックを移動および回転させます。
  - `a`キー: 左移動
  - `d`キー: 右移動
  - `s`キー: 下移動
  - `q`キー: 左回転
  - `e`キーまたはスペースバー: 右回転
- **注意点**: キーボード操作が反応しない場合は、ボタン操作を一度行ってください。

### スコア表示
- **機能の概要**: 現在のスコアを表示します。
- **使用方法**: ゲーム中にスコアが自動的に更新されます。
- **注意点**: スコアが正しく更新されない場合は、ページをリフレッシュしてください。

### BGMと効果音のトグル
- **機能の概要**: BGMと効果音のオン/オフを切り替えます。
- **使用方法**: それぞれのトグルスイッチをクリックしてオン/オフを切り替えます。
- **注意点**: 効果音やBGMが再生されない場合は、トグルスイッチの設定を確認してください。

### ゲームガイド
- **機能の概要**: ゲームの操作方法を表示します。
- **使用方法**: ガイドボタンをクリックしてガイドを表示し、ガイド閉じるボタンでガイドを閉じます。
- **注意点**: ガイドが表示されない場合は、アプリケーションをリフレッシュしてください。

### ゲームオーバー画面
- **機能の概要**: ゲームオーバー時にスコアとハイスコアを表示します。
- **使用方法**: ゲームオーバー時に自動的に表示されます。再挑戦ボタンをクリックして新しいゲームを開始します。
- **注意点**: スコアが正しく表示されない場合は、ページをリフレッシュしてください。

## 5. ユーザーインターフェースの説明

### 画面レイアウト
- **メイン画面**: テトリスのゲームボード、スコア表示、次のブロックのギャラリー、BGMとSEのトグルスイッチ、ガイドボタン、スタートボタンが配置されています。
- **ガイド画面**: ゲームの操作方法が記載されています。
- **ゲームオーバー画面**: スコアとハイスコアが表示され、再挑戦ボタンが配置されています。

### 各コントロールの説明
- **ImageBackGround**: 背景画像を表示します。
- **GalleryBoard**: ゲームボードを表示します。
- **ButtonBlock**: ブロックを表示し、操作します。
- **LabelBlockBG**: ブロックの背景ラベルを表示します。
- **Timer1**: ゲームのタイマーを制御します。
- **Toggle1**: ブロックの移動とラインの消去を制御します。
- **SliderHorizontal**: ブロックの水平移動を制御します。
- **SliderVertical**: ブロックの垂直移動を制御します。
- **ContainerRight**: 右回転ボタンのコンテナです。
- **ButtonRight**: ブロックを右回転させます。
- **ContainerLeft**: 左回転ボタンのコンテナです。
- **ButtonLeft**: ブロックを左回転させます。
- **ContainerStart**: スタートボタンのコンテナです。
- **ButtonStart**: ゲームを開始またはリセットします。
- **TextInputKeyBoard**: キーボード入力を受け取ります。
- **SliderHorizontalKeyBoard**: キーボード操作による水平スライダーです。
- **ContainerScore**: スコア表示のコンテナです。
- **LabelScore**: 現在のスコアを表示します。
- **AudioBGM**: BGMを再生します。
- **AudioSE**: 効果音を再生します。
- **LabelChain**: チェーン表示をします。
- **ToggleBGM**: BGMのオン/オフを切り替えます。
- **ToggleSE**: 効果音のオン/オフを切り替えます。
- **GalleryQues**: 次のブロックのギャラリーです。
- **ButtonGuide**: ゲームガイドを表示します。
- **ContainerGuide**: ガイドのコンテナです。
- **ButtonGuideClose**: ガイドを閉じます。
- **LabelGuide**: ゲームの操作方法を表示します。
- **ContainerGameOver**: ゲームオーバー時のコンテナです。
- **ButtonTryAgain**: 再挑戦ボタンです。
- **LabelScore_1**: 現在のスコアを表示します。
- **LabelScore_2**: ハイスコアを表示します。
- **ImageX**: スコアをXに投稿します。

## 6. トラブルシューティング

### よくある問題とその解決方法

1. **背景画像が表示されない**
   - 画像パスを確認し、正しいパスを指定してください。

2. **スコアが更新されない**
   - アプリケーションをリフレッシュしてください。

3. **キーボード操作が反応しない**
   - 一度ボタン操作を行ってから再度キーボード操作を試みてください。

4. **BGMや効果音が再生されない**
   - トグルスイッチの設定を確認し、正しくオンになっているか確認してください。

5. **ガイドが表示されない**
   - アプリケーションをリフレッシュしてください。

## 7. サポート情報

問題が解決しない場合やサポートが必要な場合は、以下の連絡先にお問い合わせください。

- サポートメール: support@example.com
- 電話番号: 123-456-7890
- 営業時間: 平日9:00〜17:00

いろいろとツッコミどころはありますが、まあ操作はできるレベルかなと思います。
例えば各コントロールの説明には、「Visibleがtrueのコントロールのみ説明し、名前ではなく場所や色形などの特徴でコントロールを説明してください」というプロンプトを加えた方がよさそうです。

開発ドキュメントの自動生成

他にも生成AIによる開発ドキュメントの自動生成を試しているので、よければご覧ください。

おわりに

きちんとしたフォーマットがなくてもソースコードからドキュメント(の参考になるもの)を生成することができており、感動しました。

出力形式をPJ等で指定されているExcelなどのフォーマットに指定すれば入力作業も不要になりそうです。(タイムアウトを防ぐために分析結果の出力を挟む必要はあるかも)

というかここまでくればもはやドキュメントは不要ですよね。知りたい情報はすべてAIが答えてくれる。

元記事

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?