\ 最大10%ポイントアップ! /

Google AI Studio(Gemini)でGFM形式のMarkdownを出力する方法

最近、テキスト対話型LLMのメインを Microsoft Copilot から Google AI Stduio に切り替えました。

おおむね満足していたのですが、Google AI Stduio Chat(2025年7月現在、Gemini 2.5 Pro)で生成されるMarkdownはGFM(GitHub Flavored Markdown)形式ではありません

たとえば、Google AI Studioの「Copy markdown」ボタンでコピーした場合に順序なしリスト(箇条書き)が- 項目名ではなく* 項目名が使われ違和感が……

個人的にはMarkdownのデファクトスタンダードであるGFM形式を採用したいと感じ調べた結果、Google AI Studio でも簡単にGFM形式のMarkdownをコピーする方法があったので共有します。

 

この記事はこんな方にオススメ!

  • Google AI Studio ユーザーの方
     
  • ボタン契機で取得するMarkdownをGFM形式にしたい方
     
  • リクエスト全体のルールを設定したい方
目次

結論(解決方法)

プロンプトでリクエストする際に「GFMに則ったMarkdownを出力」と毎回、指示する方法でも対応可能ですが、わりと面倒です。
共通の指示を入力し忘れてしまうケースも多々あり、もう一度リクエストするなど少しだけ時間と手間がかかっていました。

そんなリクエスト全体のルールを設定したい場合は、Google AI Studio の 📋 System instructionsを使用することで解決できました!
(System instructionsの読みは、“システム インストラクション”。)

System instructions ボタンの場所|Google AI Studio

リクエスト送信する前(初回起動時など)に1度設定するだけで、そのセッションではずっとルールが適用されます。

GFM形式でMarkdownを出力したい場合のルール(英文)

わたしがGFM形式にしたい場合は下記の内容で設定しています。

# Role and Goal
You are an expert AI assistant that generates responses strictly following GitHub Flavored Markdown (GFM) specifications. Every response you produce must be perfectly renderable on GitHub, such as in README.md files or issue comments.

# GFM Rules to Enforce

## Basic Structure
- Headings: Use hashes (#, ##, ###...).
- Paragraphs: Separate with a single blank line for readability.

## Text Formatting
- Bold: Strictly use double asterisks (`**Bold Text**`). Do not use underscores.
- Italic: Strictly use single asterisks (`*Italic Text*`). Do not use underscores.
- Strikethrough: Use double tildes (`~~Strikethrough~~`).
- Inline Code: Use single backticks (`` `code` ``).

## Lists
- Unordered Lists: Strictly use hyphens (`-`). Do not use asterisks (`*`) or pluses (`+`).
- Ordered Lists: Always use `1.` for every item. The Markdown parser will automatically handle the numbering. This makes reordering items easier.
- Task Lists: Use `- [ ]` for incomplete tasks and `- [x]` for completed tasks.

## Code Blocks
- Use triple backticks (```) to enclose code blocks. Do not use indentation.
- Always specify the language for syntax highlighting (e.g., ```python, ```javascript) whenever possible. If the language is unknown, use ```text` or no language specifier.

## Tables
- Create tables using pipes (`|`) and hyphens (`-`).
- A header row and a delimiter line (`|---|`) are mandatory.
- Specify alignment using colons in the delimiter line (e.g., `:---` for left, `:---:` for center, `---:` for right).

## Links and Images
- Links: Use the format `[Display Text](URL)`.
- Images: Use the format `![Alt Text](Image URL)`, and provide specific, descriptive alt text.

## GitHub-Specific Features
- Mentions: Use `@username` to notify users.
- References: Use `#123` to auto-link to issues and pull requests.
- Emoji: Use shortcodes like `:tada:` and `:rocket:`.
- Footnotes: Use the reference style `[^1]` in the text and define it at the bottom with `[^1]: Note content.`.

## Other Elements
- Blockquotes: Use the `>` character.
- Horizontal Rules: Use three hyphens (`---`) on a line by itself, with blank lines before and after.
- Collapsible Sections: Use `<details>` and `<summary>` HTML tags for long content.

System instructions が英文である理由は、プログラムの世界では事実上の共通語は英語となっている為。

Google AI Studio も同じで英語を基本として開発やテストが行われており、個人的な試みとして回答の精度を少しでもあげようと英文で設定しています。

参考情報:上記の英文を日本語に翻訳すると……
## 役割と目標

あなたは、GitHub Flavored Markdown (GFM) の仕様に厳密に従って応答を生成する、専門家のAIアシスタントです。
あなたが生成するすべての応答は、README.mdファイルやIssueコメントなど、GitHub上で完璧に表示(レンダリング)可能でなければなりません。

## 徹底すべきGFMルール

### 基本構造

- 見出し: ハッシュ記号(`#`, `##`, `###`...)を使用します。
- 段落: 可読性のため、1行の空行で区切ります。

### テキストの書式

- 太字: 厳密にダブルアスタリスク(`太字テキスト`)を使用します。アンダースコアは使用しません。
- イタリック: 厳密にシングルアスタリスク(`*イタリックテキスト*`)を使用します。アンダースコアは使用しません。
- 打ち消し線: ダブルチルダ(`~~打ち消し線~~`)を使用します。
- インラインコード: シングルバッククォート(`` `コード` ``)を使用します。

### リスト

- 順序なしリスト: 厳密にハイフン(`-`)を使用します。アスタリスク(`*`)やプラス記号(`+`)は使用しません。
- 順序付きリスト: すべての項目で常に `1.` を使用します。Markdownパーサーが自動的に番号を処理するため、項目の並べ替えが容易になります。
- タスクリスト: 未完了のタスクには `- [ ]` を、完了したタスクには `- [x]` を使用します。

### コードブロック

- トリプルバッククォート(```)を使用してコードブロックを囲みます。インデントは使用しません。
- 構文ハイライトのため、可能な限り常に言語を指定します(例: ```python`, ```javascript`)。言語が不明な場合は、```text` または言語指定なしを使用します。

### テーブル

- パイプ(`|`)とハイフン(`-`)を使用してテーブルを作成します。
- ヘッダー行と区切り行(`|---|`)は必須です。
- 区切り行でコロンを使用して、文字寄せを指定します(例: `:---` 左寄せ, `:---:` 中央寄せ, `---:` 右寄せ)。

### リンクと画像

- リンク: `[表示テキスト](URL)` の形式を使用します。
- 画像: `![代替テキスト](画像URL)` の形式を使用し、具体的で分かりやすい代替テキストを提供します。

### GitHub固有の機能

- メンション: `@username` を使用してユーザーに通知します。
- 参照: `#123` を使用してIssueやプルリクエストに自動リンクします。
- 絵文字: `:tada:` や `:rocket:` のようなショートコードを使用します。
- 脚注: テキスト内で `[^1]` の参照スタイルを使用し、末尾で `[^1]: 注釈内容` のように定義します。

### その他の要素

- 引用: `>` 記号を使用します。
- 水平線: 3つのハイフン(`---`)を単独の行で使用し、その前後には空行を設けます。
- 折りたたみセクション: 長いコンテンツには `<details>` と `<summary>` のHTMLタグを使用します。

「細かい回答の精度は気にしないから日本語で設定したい」という方は、上記の日本語の文章をそのまま使用してください。

以上が、「参考情報:上記の英文を日本語に翻訳すると……」でした。

つぎは、より詳しく System instructions未設定の結果設定後の結果 を比較してみましょう。

System instructions未設定 設定後 の結果を比較

System instructions を未設定。つまりは初期設定でリクエストしてみます。
いろいろなMarkdownの記法を検証したいので、プログラム(PowerShell)に関するプロンプトを入力していきましょう。

System instructions を未設定でMarkdownを取得してみる

STEP
Google AI Studio Chat を開く
STEP
下記内容をプロンプトに入力
PowerShellの自作関数を紹介している記事で1番読まれている記事の関数のコードを教えてください。
また、その自作関数について合わせて解説してください。
プログラムに関するプロンプトを処理中|Google AI Studio(System instructions 未設定)
STEP
Google AI Studio(Gemini 2.5 Pro)から回答が返る
プロンプトの回答が返ってくる|Google AI Studio(System instructions 未設定)
STEP
Markdown形式の回答内容を取得
STEP4-
右上の (縦の三点リーダー)をクリック
回答後、縦の三点リーダー(More options)をクリック|Google AI Studio(System instructions 未設定)
STEP4-
「Copy markdown」ボタンをクリックしMarkdownの回答内容をクリップボードにコピー
「Copy markdown」ボタンでクリップボードにMarkdown形式の回答をコピー|Google AI Studio(System instructions 未設定)
STEP
取得できたMarkdown(System instructions 未設定)を確認
ご質問ありがとうございます。

「PowerShellの自作関数を紹介している記事で1番読まれている記事」を特定することは、検索エンジンの順位変動や集計サイトの有無から非常に困難です。しかし、多くのPowerShell入門記事やTIPS記事で「便利で実用的な自作関数の例」として、必ずと言っていいほど登場する**「ログ出力関数」**が存在します。

この関数は、汎用性が非常に高く、スクリプト開発の基本となるため、多くの開発者に読まれ、参考にされています。ここでは、その代表的なログ出力関数 `Write-Log` のコードとその解説を紹介します。

---

### 最も代表的な自作関数例: `Write-Log`

この関数は、スクリプトの実行状況をタイムスタンプ付きでファイルに記録するためのものです。

#### 関数のコード

```powershell
<#
.SYNOPSIS
    タイムスタンプとメッセージレベルを付けて、指定したファイルにログを追記します。

.DESCRIPTION
    スクリプトの実行状況を記録するために使用します。
    メッセージ、ログファイルのパスを必須パラメータとします。
    ログレベル(INFO, WARN, ERROR)を指定でき、デフォルトはINFOです。
    ファイルが存在しない場合は自動的に作成されます。

.PARAMETER Message
    ログに記録するメッセージ。

.PARAMETER Path
    ログを記録するファイルのフルパス。

.PARAMETER Level
    ログのレベルを指定します。'INFO', 'WARN', 'ERROR' から選択できます。

.EXAMPLE
    PS C:\> Write-Log -Message "処理を開始します。" -Path "C:\logs\script.log"
    # C:\logs\script.log に "[2023-10-27 10:00:00] [INFO] 処理を開始します。" と記録されます。

.EXAMPLE
    PS C:\> Write-Log "データベースへの接続に失敗しました。" "C:\logs\script.log" -Level ERROR
    # C:\logs\script.log に "[2023-10-27 10:01:00] [ERROR] データベースへの接続に失敗しました。" と記録されます。
#>
function Write-Log {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, Position = 0)]
        [string]$Message,

        [Parameter(Mandatory = $true, Position = 1)]
        [string]$Path,

        [Parameter(Mandatory = $false)]
        [ValidateSet('INFO', 'WARN', 'ERROR')]
        [string]$Level = 'INFO'
    )

    # タイムスタンプを "yyyy-MM-dd HH:mm:ss" 形式で取得
    $timeStamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'

    # ログに出力する文字列を組み立てる
    $logLine = "[$timeStamp] [$Level] $Message"

    # ログファイルが存在するディレクトリを確認し、なければ作成する
    $logDirectory = Split-Path -Path $Path -Parent
    if (-not (Test-Path -Path $logDirectory)) {
        New-Item -Path $logDirectory -ItemType Directory | Out-Null
    }

    # Add-Content コマンドレットでファイルに追記する
    # -Encoding UTF8 を指定して文字化けを防ぐ
    try {
        Add-Content -Path $Path -Value $logLine -Encoding UTF8 -ErrorAction Stop
    }
    catch {
        # ログ書き込み自体に失敗した場合、コンソールにエラーを出力する
        Write-Error "ログファイルへの書き込みに失敗しました。 Path: $Path, Error: $($_.Exception.Message)"
    }
}
```

---

### 自作関数の解説

この `Write-Log` 関数がなぜ多くの記事で紹介されるのか、そのポイントを解説します。

#### 1. 関数の概要
この関数は、以下の3つの情報を組み合わせて、指定されたログファイルに1行のログを追記します。
*   **実行時刻(タイムスタンプ)**: いつ実行されたか
*   **ログレベル**: メッセージの重要度(情報、警告、エラーなど)
*   **メッセージ**: 何が起こったか

**例:** `[2023-10-27 10:00:00] [INFO] 処理を開始します。`

これにより、スクリプトの実行履歴を後から簡単に追跡できるようになります。

#### 2. 使い方(具体例)
関数をPowerShellのプロファイルに登録するか、スクリプトの先頭で読み込むことで、以下のように簡単に呼び出せます。

```powershell
# 基本的な使い方
Write-Log -Message "バックアップ処理を開始します。" -Path "C:\temp\backup.log"

# ログレベルを 'ERROR' にして記録
Write-Log -Message "ファイルのコピーに失敗しました。" -Path "C:\temp\backup.log" -Level ERROR

# パラメータ名を省略した使い方(Position属性のおかげ)
Write-Log "処理が正常に完了しました。" "C:\temp\backup.log"
```

#### 3. コードのポイント解説

この関数には、PowerShellの関数を作成する上での重要なテクニックが詰まっています。

*   **コメントベースのヘルプ (`<# ... #>`)**
    *   関数の先頭にあるコメントブロックは、`Get-Help Write-Log` コマンドで関数の使い方やパラメータの説明を表示させるためのものです。本格的な関数には必須の要素です。

*   **`[CmdletBinding()]`**
    *   これを付けることで、自作関数がPowerShellの標準コマンドレット(`Get-ChildItem`など)と同じように振る舞うようになります。例えば、`-Verbose` や `-Debug` などの共通パラメータが自動的に使えるようになります。

*   **`[Parameter(Mandatory = $true)]`**
    *   この属性が付いたパラメータ(`$Message`と`$Path`)は必須項目となります。指定し忘れると、PowerShellが自動的に入力を促してくれるため、エラーを防げます。

*   **`[ValidateSet('INFO', 'WARN', 'ERROR')]`**
    *   `$Level` パラメータに指定できる値を `'INFO'`, `'WARN'`, `'ERROR'` の3つに制限します。これにより、意図しない値(例: "error", "information")が入力されるのを防ぎます。また、Tabキーによる入力補完も効くようになり、非常に便利です。

*   **ディレクトリの自動作成**
    *   `Split-Path` と `Test-Path` を使ってログファイルの保存先ディレクトリが存在するかを確認し、なければ `New-Item` で自動的に作成します。これにより、利用者は事前にフォルダを用意する手間が省けます。

*   **`Add-Content -Encoding UTF8`**
    *   `Add-Content` はファイルにテキストを追記するコマンドレットです。`-Encoding UTF8` を指定することで、日本語メッセージが文字化けするのを防ぎます。

*   **`try { ... } catch { ... }`**
    *   ログファイルの書き込みに失敗した場合(例:アクセス権がない)に備え、エラーハンドリングを行っています。これにより、スクリプト全体が停止するのを防ぎ、コンソールにエラー内容を明確に表示できます。

### まとめ

この `Write-Log` 関数が人気なのは、以下の理由からです。

1.  **実用性が高い**: どんなスクリプトでもログ出力はほぼ必須の機能です。
2.  **汎用性がある**: 特定の処理に依存せず、どこでも使い回せます。
3.  **学習効果が高い**: 関数の基本構造、パラメータ属性、エラー処理など、PowerShellの重要な概念を学ぶための最高の教材となります。

多くのPowerShellユーザーが、まずこの関数を自分用にカスタマイズして「マイ関数ライブラリ」に追加することから始めています。

GFM形式ではない気になるポイントを洗い出す

上記で取得したMarkdownで、わたしが気になるポイントは下記のとおり。

❌ 箇条書き(順序なしリスト)がハイフン(-)ではなくアスタリスク(*)である

*   **実行時刻(タイムスタンプ)**: いつ実行されたか
*   **ログレベル**: メッセージの重要度(情報、警告、エラーなど)
*   **メッセージ**: 何が起こったか

❌ 数字付き箇条書き(順序ありリスト)が1.固定ではなく連番で記載

1.  **実用性が高い**: どんなスクリプトでもログ出力はほぼ必須の機能です。
2.  **汎用性がある**: 特定の処理に依存せず、どこでも使い回せます。
3.  **学習効果が高い**: 関数の基本構造、パラメータ属性、エラー処理など、PowerShellの重要な概念を学ぶための最高の教材となります。

より細かく見ていくと、もっとありそうですが私の気になるポイントとしては以上となります。

つぎは、今回のテーマでもある System instructions を設定しリクエスト全体のルールが適用された回答をみていきましょう。

System instructions を設定してMarkdownを取得する方法

STEP
Google AI Studio Chat を開く
STEP
プロンプト入力前(送信前)にSystem instructions を設定

検証でSystem instructions に設定する内容は冒頭で紹介している、こちらのルールで設定してます。

STEP2-
System instructions をクリック
System instructions ボタンをクリック|Google AI Studio Chat(System instructions 設定済みの検証)
STEP2-
クリック後に表示される入力欄にルールを設定

冒頭で紹介した、こちらのルールを設定。

System instructions の入力欄|Google AI Studio Chat(System instructions 設定済みの検証)

👇

System instructions の入力欄に設定した様子|Google AI Studio Chat(System instructions 設定済みの検証)
STEP2-
(保存ボタンなし)もう一度、System instructions ボタンを押して入力欄を閉じる
System instructions ボタンをもう一度クリックして閉じた後の画面|Google AI Studio Chat(System instructions 設定済みの検証)

これで事前の設定が完了です。以降は通常通りの使い方となるため、割愛します。

STEP
(プロンプト送信 ~ 回答に関しては割愛)

プロンプト送信 から Google AI Studio回答 に関しては、先に紹介した こちらの手順 と重複するため、割愛します。

STEP
(一部割愛)「Copy markdown」ボタンでMarkdownを取得

こちらもMarkdownを取得する方法は先に紹介した こちらの手順 と同じため、一部の手順を割愛します。

下記の画面のとおりMarkdownがプレビュー状態で表示されるので、見た目だけだとGFM形式なのか判断できません

System instructions 設定済み状態でMarkdownを取得|Google AI Studio Chat(System instructions 設定済みの検証)
STEP
取得できたMarkdown(System instructions 設定済み)を確認
承知いたしました。
PowerShellの自作関数を紹介する記事で最も広く読まれ、多くの開発者に利用されているテーマの一つが **「高機能なログ出力関数」** です。特定の「1番読まれている記事」を一つに絞ることは難しいですが、それらの人気記事で紹介されている機能を統合し、実用性を高めた代表的な関数のコードと解説を以下に示します。

この関数は、単にメッセージをファイルに書き出すだけでなく、ログレベル、タイムスタンプ、呼び出し元情報の記録など、本格的なスクリプト開発に不可欠な機能を備えています。

---

### :rocket: 高機能ログ出力関数 `Write-Log`

多くのPowerShellスクリプト開発者が作成する、鉄板とも言える自作関数です。スクリプトの実行状況を追跡し、エラー発生時の原因調査を容易にします。

#### 主な機能

- **ログレベル対応**: `INFO`, `DEBUG`, `WARN`, `ERROR` のレベルを付けてログを記録できます。
- **コンソールとファイルへの同時出力**: 実行中の画面でリアルタイムに進捗を確認しつつ、ファイルにも永続的な記録を残します。
- **自動タイムスタンプ**: 全てのログに `yyyy/MM/dd HH:mm:ss` 形式のタイムスタンプが自動で付与されます。
- **呼び出し元情報の記録**: ログが「どのスクリプトの」「何行目から」呼び出されたかを記録し、デバッグを強力に支援します。
- **色分け表示**: ログレベルに応じてコンソールの文字色が変わるため、警告やエラーを視覚的に素早く認識できます。

### :memo: 関数のコード

<details>
<summary><strong>Write-Log 関数の完全なコードはこちら</strong></summary>

```powershell
function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, Position = 0)]
        [string]$Message,

        [Parameter(Mandatory = $false, Position = 1)]
        [ValidateSet('INFO', 'DEBUG', 'WARN', 'ERROR')]
        [string]$Level = 'INFO',

        [Parameter(Mandatory = $false)]
        [string]$Path = $Global:LogPath # グローバル変数 $LogPath をデフォルト値として使用
    )

    # 1. ログメッセージの組み立て
    # タイムスタンプ
    $timeStamp = Get-Date -Format "yyyy/MM/dd HH:mm:ss"

    # 呼び出し元の情報を取得 (スクリプト名と行番号)
    # Get-PSCallStack の最初の要素は Write-Log 自体なので、2番目([1])の要素を取得
    $caller = Get-PSCallStack | Select-Object -Skip 1 -First 1
    if ($caller) {
        $callerInfo = "[{0}:{1}]" -f (Split-Path $caller.ScriptName -Leaf), $caller.ScriptLineNumber
    }
    else {
        # PowerShellプロンプトから直接実行された場合
        $callerInfo = "[Console]"
    }

    # 最終的なログ文字列
    $logLine = "[{0}] [{1,-5}] {2} {3}" -f $timeStamp, $Level, $callerInfo, $Message

    # 2. コンソールへの色付き出力
    $color = "White" # デフォルトカラー
    switch ($Level) {
        'DEBUG' { $color = "Gray" }
        'WARN'  { $color = "Yellow" }
        'ERROR' { $color = "Red" }
    }
    Write-Host $logLine -ForegroundColor $color

    # 3. ファイルへの出力
    if (-not ([string]::IsNullOrWhiteSpace($Path))) {
        try {
            # ログディレクトリが存在しない場合は作成
            $logDir = Split-Path -Path $Path -Parent
            if (-not (Test-Path -Path $logDir)) {
                New-Item -Path $logDir -ItemType Directory -Force | Out-Null
            }
            # ファイルに追記 (UTF8 BOMなし)
            Add-Content -Path $Path -Value $logLine -Encoding UTF8 -NoNewline
        }
        catch {
            # ログファイルへの書き込みに失敗した場合のエラー処理
            $errorMessage = "ログファイルへの書き込みに失敗しました。 Path: {0}, Error: {1}" -f $Path, $_.Exception.Message
            Write-Host $errorMessage -ForegroundColor Red
        }
    }
}
```

</details>

### :gear: 関数の解説

#### 1. 基本的な使い方

この関数は、スクリプトの先頭で一度読み込ませるか、PowerShellのプロファイルに登録しておくことで、いつでも呼び出せるようになります。

スクリプト内でログファイルパスをグローバル変数として定義しておくと、毎回パスを指定する手間が省けて便利です。

```powershell
# スクリプトの最初にログファイルのパスを定義
$Global:LogPath = "C:\Logs\MyScript_$(Get-Date -Format 'yyyyMMdd').log"

# --- ここに Write-Log 関数の定義を記述するか、. (ドット) ソーシングで読み込む ---
# . C:\path\to\MyFunctions.ps1

# 関数の呼び出し例
Write-Log "処理を開始します。"
Write-Log "設定ファイルを読み込みました。" -Level DEBUG
Write-Log "対象のファイルが見つかりません。" -Level WARN
Write-Log "データベースへの接続に失敗しました。" -Level ERROR
```

**実行結果(コンソール)**

![コンソールでの色分けされたログ出力のイメージ](https://user-images.githubusercontent.com/1098993/207901179-8898b173-9528-444f-8086-1d18ca80d60c.png)
*(これは出力のイメージです)*

**実行結果(ログファイル)**

```text
[2023/10/27 10:00:00] [INFO ] [MyScript.ps1:10] 処理を開始します。
[2023/10/27 10:00:01] [DEBUG] [MyScript.ps1:11] 設定ファイルを読み込みました。
[2023/10/27 10:00:05] [WARN ] [MyScript.ps1:12] 対象のファイルが見つかりません。
[2023/10/27 10:00:10] [ERROR] [MyScript.ps1:13] データベースへの接続に失敗しました。
```

#### 2. パラメータ詳説

| パラメータ  | 説明                                                                                                              | 型      | 必須 | デフォルト値         |
| :---------- | :---------------------------------------------------------------------------------------------------------------- | :------ | :--- | :------------------- |
| `-Message`  | ログとして記録したいメッセージ。                                                                                  | `string`| **はい** | (なし)               |
| `-Level`    | ログの重要度レベル (`INFO`, `DEBUG`, `WARN`, `ERROR` から選択)。                                                     | `string`| いいえ | `INFO`               |
| `-Path`     | ログを出力するファイルのフルパス。指定しない場合、グローバル変数 `$Global:LogPath` の値が使用されます。 | `string`| いいえ | `$Global:LogPath` |

#### 3. コードのポイント解説

- **`[CmdletBinding()]` と `[Parameter()]`**
  - これらは関数をPowerShellの標準コマンドレット(Cmdlet)のように振る舞わせるための「おまじない」です。パラメータの必須指定や入力値の検証 (`ValidateSet`) が可能になります。

- **`Get-PSCallStack`**
  - この関数の **最も強力な機能** の一つです。このコマンドレットは、現在の場所がどの関数やスクリプトから呼び出されたかの履歴(コールスタック)を取得します。
  - `Select-Object -Skip 1 -First 1` を使うことで、「`Write-Log`関数を呼び出した`1`つ上の階層の情報」だけを抜き出し、呼び出し元のスクリプト名と行番号を取得しています。

- **`switch ($Level)`**
  - `-Level` パラメータの値に応じて、`Write-Host` で表示する文字色を動的に変更しています。これにより、コンソール上での視認性が劇的に向上します。

- **`Add-Content -Encoding UTF8`**
  - ファイルへテキストを追記するコマンドレットです。
  - `-Encoding UTF8` を指定することで、日本語などのマルチバイト文字が文字化けするのを防ぎます。PowerShellのバージョンによってはデフォルトのエンコーディングが異なるため、明示的に指定することが推奨されます。

---

### :thinking: なぜこの関数が人気なのか?

1.  **汎用性の高さ**
    - どのような種類のPowerShellスクリプトにも組み込むことができ、一度作っておけば様々な場面で再利用できます。

1.  **デバッグの劇的な効率化**
    - スクリプトが複雑になると、「どこで」「なぜ」問題が起きたのかを追跡するのが困難になります。この関数を使えば、処理のどの段階でエラーが発生したかが一目瞭然となり、原因究明の時間を大幅に短縮できます。

1.  **スクリプトの品質向上**
    - 適切なログ出力は、自分以外の人がスクリプトをメンテナンスする際の大きな助けとなります。処理の流れが追いやすくなり、属人化を防ぎます。

設定前後のMarkdownコードを比較

変化点を表にまとめてみました。

スクロールできます
GFM規約の要素Before
未設定のMarkdown
After
設定後のMarkdown
コメント
絵文字使用していない:rocket:, :memo:, :gear: 等を多用見出しに絵文字を付けることで、セクションの役割が直感的に理解でき、ドキュメントが華やかで読みやすくなった。
折りたたみ要素使用していない。コードがそのまま表示されている。<details><summary>で長いコードを折りたたんでいる。長大なコードブロックを初期状態では隠すことで、ドキュメント全体の流れを先に把握可能。
読み手は必要に応じて詳細を開けるため、可読性が劇的に向上。
テーブル使用していない。パラメータ解説が通常のテキスト。パラメータ解説にテーブルを使用。情報を表形式で整理することで、各パラメータの役割、型、必須かどうかといった情報が一覧でき、比較・理解しやすくなった。
順序なしリスト* を使用。
(例:* 実行時刻
指示通り - を使用。
(例:- **ログレベル対応**
GFMの規約で指示されたハイフン(-)に統一されており、一貫性を保つ。
順序付きリスト1., 2., 3. と手動で番号を採番。1.に統一して使用。GFMでは番号を 1. に統一することを推奨。
画像使用していないイメージ画像を埋め込むコードを指定。
(例:![代替テキスト](画像URL)

※ Google AI Studio Chat自体に画像生成機能はないので、画像そのものは表示されていませんでした。
テキストだけでは伝わりにくい「色分けされたログ出力」の様子を、画像で視覚的に示すことで、関数の効果が瞬時に理解できるように。

結構、かわっている部分がありますね!

補足情報:実際にGitHubのリポジトリ上でも比較してみよう
System instructions 設定済みで出力したMarkdown(GFMの方)
System instructions 未設定で出力したMarkdown(GFMではない方)

プレビューで比較すると、違いが一目瞭然ですね。

以上が、「補足情報:実際にGitHubのリポジトリ上でも比較してみよう」でした。

まとめ

  • Google AI Studioでリクエスト全体のルールを設定する場合、プロンプト送信前に「📋 System instructions」へ設定
    System instructions:読み「システム インストラクション」、意味「システム指示」
     
  • 回答の精度を上げたい場合は、なるべく英文で設定
    ※ System instructionsだけではなく、プロンプト内容も英文にすると尚良しだと思われます。
     
  • Google AI Studio でセッションが開放された場合(タイムアウトやブラウザを閉じるなど)は、もう一度 System instructions の設定が必要

このSystem instructionsはMarkdownの形式を指定するだけじゃなく、

  1. 表形式で回答してほしい場合
  2. 挨拶などの不要な文章は削除し、すべて箇条書きで回答してほしい場合
  3. 回答内容のエビデンスがほしい場合

など色々な指示をリクエスト全体に設定可能です。
今回、紹介した Google AI Studio Chat の System instructions は、利用頻度が多ければ多いほど効率化につながります。
System instructions 機能を使ったことのない方は、ぜひお試しください!

参考文献

Google AI Stduio Chat の System instructions 関連

GFM(GitHub Flavored Markdown)関連

サポート募集中

この記事はお役に立てたでしょうか。現在、サポートを募集しています。
コーヒーを一杯 ☕ ご馳走いただけないでしょうか。

この記事が気に入ったら
フォローしてね!

この記事をシェアする

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次