<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ToDoリスト作成 | 猫プロ</title>
	<atom:link href="https://nekomichi-coder.com/category/todo%E3%83%AA%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90/feed/" rel="self" type="application/rss+xml" />
	<link>https://nekomichi-coder.com</link>
	<description>猫道のプログラミング道</description>
	<lastBuildDate>Sun, 01 Oct 2023 11:41:29 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://nekomichi-coder.com/wp-content/uploads/2023/08/cropped-IMG_4667-32x32.jpeg</url>
	<title>ToDoリスト作成 | 猫プロ</title>
	<link>https://nekomichi-coder.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PowerShellでToDoリストを改善する &#8211; Part 3: エラーハンドリングの導入</title>
		<link>https://nekomichi-coder.com/improvement-a-todo-list-part-3/</link>
					<comments>https://nekomichi-coder.com/improvement-a-todo-list-part-3/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Thu, 10 Aug 2023 17:10:05 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=354</guid>

					<description><![CDATA[プログラムが何かの原因でうまく動作しなかったとき、その原因をユーザーや開発者に知らせる方法が必要です。この役割を果たすのが「エラーハンドリング」です。エラーハンドリングを適切に実装することで、プログラムが突然終了したり、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>プログラムが何かの原因でうまく動作しなかったとき、その原因をユーザーや開発者に知らせる方法が必要です。この役割を果たすのが「エラーハンドリング」です。エラーハンドリングを適切に実装することで、プログラムが突然終了したり、不適切な結果を出力するのを防ぐことができます。さらに、問題の原因や解決策を示す明確なエラーメッセージを提供することで、ユーザーの混乱やフラストレーションを軽減することもできます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>最近ToDoリストがエラーを出して動かなくなるんだけど…</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>必要なファイル配置してますか？</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>そんなこと言われても、エラーメッセージがよくわからないよ！</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-think sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>自分で読めよ&#8230;</p>
</div></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2"><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">PowerShellでのエラーハンドリングの基礎</a><ol><li><a href="#toc2" tabindex="0">予測できるエラーの取り扱い</a></li><li><a href="#toc3" tabindex="0">Try、Catch、Finallyの使用</a></li></ol></li><li><a href="#toc4" tabindex="0">ToDoリストにエラーハンドリングを導入するステップ</a><ol><li><a href="#toc5" tabindex="0">ステップ1: 入力値の検証</a></li><li><a href="#toc6" tabindex="0">ステップ2: ファイル操作時のエラー処理</a></li><li><a href="#toc7" tabindex="0">ステップ3: その他の一般的なエラーの処理</a></li><li><a href="#toc8" tabindex="0">ステップ4: その他の考慮</a><ol><li><a href="#toc9" tabindex="0">ログ出力の追加</a></li><li><a href="#toc10" tabindex="0">待機処理の追加</a></li></ol></li></ol></li><li><a href="#toc11" tabindex="0">エラーハンドリング後のToDoリストの動作確認</a><ol><li><a href="#toc12" tabindex="0">確認シナリオ1: タスク名の入力</a></li><li><a href="#toc13" tabindex="0">確認シナリオ2: ファイルの存在チェック</a></li><li><a href="#toc14" tabindex="0">確認シナリオ3: 不明なエラー</a></li></ol></li><li><a href="#toc15" tabindex="0">ソースコード（完成版）</a></li><li><a href="#toc16" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">PowerShellでのエラーハンドリングの基礎</span></h2>



<p>PowerShellにおけるエラーハンドリングは、予期しないエラーや予測できるエラーを適切に取り扱うための重要な技術です。</p>



<p>基本的には、エラーが発生する可能性のあるコードブロックを<code>Try</code>ブロックで囲み、エラーが発生した際の処理を<code>Catch</code>ブロックで記述します。さらに、エラーの有無に関係なく最後に実行する処理は<code>Finally</code>ブロック内に記述します。また、予測できるエラーについては個別に取り扱います。</p>



<h3 class="wp-block-heading"><span id="toc2">予測できるエラーの取り扱い</span></h3>



<p>予測できるエラーは、特定の条件を満たさない場合にエラーとして扱うことができます。例として、ファイルが存在しない場合にエラーとする場合のコードを考えてみましょう。</p>



<pre class="wp-block-code"><code>if (-not (Test-Path "C:\path\to\file.txt")) {
    throw "ファイルが存在しません！"
}</code></pre>



<p>このコードは、指定されたパスにファイルが存在しない場合、エラーメッセージをスローします。</p>



<h3 class="wp-block-heading"><span id="toc3">Try、Catch、Finallyの使用</span></h3>



<p>エラーの発生を想定するブロックを<code>Try</code>内に記述し、エラーが発生した場合の処理を<code>Catch</code>内で記述します。最後に<code>Finally</code>ブロックで、エラーの有無にかかわらず実行する処理を記述します。</p>



<pre class="wp-block-code"><code>Try {
    # エラーが発生する可能性のある処理
    $content = Get-Content "C:\path\to\file.txt"
}
Catch {
    # エラーが発生した際の処理
    Write-Host "エラーが発生しました: $($_.Exception.Message)"
}
Finally {
    # 最終的な処理
    Write-Host "処理が完了しました"
}</code></pre>



<p>このコードでは、<code>Get-Content</code>コマンドレットで指定されたパスのファイルを読み込む際にエラーが発生する可能性を考慮しています。エラーが発生した場合、<code>Catch</code>ブロックでエラーメッセージを表示し、最後に<code>Finally</code>ブロックで&#8221;処理が完了しました&#8221;というメッセージを表示します。</p>



<p>Finallyは任意で、Try～Catch句でも使用できます。</p>



<h2 class="wp-block-heading"><span id="toc4">ToDoリストにエラーハンドリングを導入するステップ</span></h2>



<p>ToDoリストの管理には、エラーが発生する様々なシチュエーションが考えられます。それを適切に処理するための手順を以下に示します。</p>



<h3 class="wp-block-heading"><span id="toc5">ステップ1: 入力値の検証</span></h3>



<p>ユーザーからの入力値が予期しないものであることがエラーの大きな原因です。具体的には、以下のような場面でのエラーハンドリングが考えられます。</p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>タスクの名前が空であるか、過度に長い場合</li>



<li>削除するタスクの番号が範囲外である場合</li>
</ol>



<p>例えば、<code>AddTask</code>関数でタスクの名前が空でないかを確認する処理を追加することができます。</p>



<pre class="wp-block-code"><code>function AddTask {
    $task = Read-Host "追加したいタスクを入力してください"
    #タスク名が空、または、100文字以上
    if (-not $task or $task.Length -gt 100) {
        Write-Host "タスク名が不正です。タスク名を入力してください。"
        #処理を抜ける
        return
    }
    $script:tasks += $task
    Write-Host "$task がToDoリストに追加されました。"
}</code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>2.については既に取り込んでいるよ。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc6">ステップ2: ファイル操作時のエラー処理</span></h3>



<p>ファイルの読み書きはエラーが発生しやすい操作の一つです。以下の点を注意してハンドリングします。</p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>ファイルが存在しない場合</li>



<li>ファイルの読み書きに失敗した場合</li>
</ol>



<p>上記1.を考慮し、ファイルを読み込む前にファイルの存在チェック処理を追加します。<br>処理を止めることも出来ますが、ここでは新規ファイルを作成し処理を続行する作りとします。<br>上記2.についてはステップ3でまとめて取り扱うことにします。</p>



<pre class="wp-block-code"><code># ファイル存在チェック
if (-not (Test-Path $tasksFile)) {
    #新規ファイル作成
    #$nullについて 作成結果を画面に出力しないようにする
    New-Item $tasksFile -ErrorAction Stop &gt;$null
}
</code></pre>



<h3 class="wp-block-heading"><span id="toc7">ステップ3: その他の一般的なエラーの処理</span></h3>



<p>一般的なエラーの処理として、未知のエラーや特定できないエラーが発生した場合のハンドリングが考えられます。これには、全体的なエラーハンドリングを実装する方法が考えられます。例として、メインのメニュー部分に<code>Try-Catch</code>を適用することで、どの操作を選択してもエラーが発生した場合の処理を一元的に行うことができます。</p>



<pre class="wp-block-code"><code>Try {
    #処理全般
} Catch {
    #エラーメッセージ出力
    Write-Host "予期せぬエラーが発生しました: $($_.Exception.Message)"
}
</code></pre>



<p>これにより、エラーが発生した場合には該当するエラーメッセージをユーザーに表示し、プログラムの安定性を向上させることができます。</p>



<h3 class="wp-block-heading"><span id="toc8">ステップ4: その他の考慮</span></h3>



<h4 class="wp-block-heading"><span id="toc9">ログ出力の追加</span></h4>



<p>開始/終了のメッセージやエラーメッセージをログ出力することで、ログを送付してもらうだけで処理がどこまで動いたか、どのようなエラーが出力されたか等、ある程度の判断が出来るようになります。<br>ここでは予期せぬエラーが発生した場合のログ出力処理を追加します。</p>



<pre class="wp-block-code"><code>ToDoList.ps1</code></pre>



<pre class="wp-block-code"><code>#ログファイル設定追加
    # ログファイル設定
    $logFile = "$commonPath\log\log.txt"
    

#Catch処理にログ出力追加
} Catch {
    #エラーメッセージ出力
    Write-Host "予期せぬエラーが発生しました: $($_.Exception.Message)"
    
    #ログファイル出力(-Appendは追記モード。echoは表示コマンド)
    echo "予期せぬエラーが発生しました: $($_.Exception.Message)" | Out-File -Append $logFile
}</code></pre>



<p>ログの出力先フォルダを追加します。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="703" height="451" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-49.png" alt="" class="wp-image-386" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-49.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-49-300x192.png 300w" sizes="(max-width: 703px) 100vw, 703px" /></figure>



<h4 class="wp-block-heading"><span id="toc10">待機処理の追加</span></h4>



<p>エラー発生時に画面が一瞬で閉じられてしまうため、batファイルに待機処理を追加します。</p>



<pre class="wp-block-code"><code>ToDoList.bat</code></pre>



<pre class="wp-block-code"><code>@echo off
powershell.exe -ExecutionPolicy RemoteSigned "%~dp0bin\ToDoList.ps1"

pause
</code></pre>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 class="wp-block-heading"><span id="toc11">エラーハンドリング後のToDoリストの動作確認</span></h2>



<p>エラーハンドリングを導入した後のToDoリストの動作を確認することで、ユーザーが遭遇する様々なエラーシチュエーションでのアプリケーションの挙動を把握することができます。</p>



<h3 class="wp-block-heading"><span id="toc12">確認シナリオ1: タスク名の入力</span></h3>



<p><strong>操作</strong>: タスク追加を選択し、空のタスク名を入力</p>



<p><strong>期待する動作</strong>: &#8220;タスク名が不正です。タスク名を入力してください。&#8221;というメッセージが表示され、タスクは追加されない。</p>



<h3 class="wp-block-heading"><span id="toc13">確認シナリオ2: ファイルの存在チェック</span></h3>



<p><strong>操作</strong>: タスクの読み込みを選択する前に、タスクデータを保存しているファイルを削除</p>



<p><strong>期待する動作</strong>: 新規のファイルが作成されて処理が続行される。</p>



<h3 class="wp-block-heading"><span id="toc14">確認シナリオ3: 不明なエラー</span></h3>



<p><strong>操作</strong>: アプリケーション内で未予測のエラーを意図的に発生させる (例: 「data」フォルダのファイル名を変更する等)</p>



<p><strong>期待する動作</strong>: &#8220;予期せぬエラーが発生しました: [エラーメッセージ]&#8221;というメッセージが表示される。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>これなら私にもなんとなく分かるよ。</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>よかったです！解決出来ない時はログファイルを送ってくださいね。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc15">ソースコード（完成版）</span></h2>



<p>完成したソースコードを記載します。</p>



<pre class="wp-block-code"><code>ToDoList.bat</code></pre>



<pre class="wp-block-code"><code>@echo off
powershell.exe -ExecutionPolicy RemoteSigned "%~dp0bin\ToDoList.ps1"

pause
</code></pre>



<pre class="wp-block-code"><code>ToDoList.ps1</code></pre>



<pre class="wp-block-code"><code>Try {
    
    # 共通のパスの設定
    $commonPath = "$PSScriptRoot\.."
    
    # tasksファイル設定
    $tasksFile = "$commonPath\data\tasks.txt"
    
    # ログファイル設定
    $logFile = "$commonPath\log\log.txt"
    
    # タスクの配列を宣言
    $tasks = @()
    
    # ファイル存在チェック
    if (-not (Test-Path $tasksFile)) {
        #新規ファイル作成
        New-Item $tasksFile -ErrorAction Stop &gt;$null
    }
    
    # ファイル読み込み
    $tasks += Get-Content $tasksFile
    Write-Host "タスクがファイルから読み込まれました。"
    
    function AddTask {
        $task = Read-Host "追加したいタスクを入力してください"
        #タスク名が空、または、100文字以上
        if (-not $task -or $task.Length -gt 100) {
            Write-Host "タスク名が不正です。タスク名を入力してください。"
            #処理を抜ける
            return
        }
        $script:tasks += $task
        Write-Host "$task がToDoリストに追加されました。"
    }
    
    # タスクの表示機能
    function ShowTasks {
        Write-Host "現在のタスク一覧:"
        for ($i=0; $i -lt $script:tasks.Length; $i++) {
            Write-Host ("&#91;" + ($i + 1) + "] " + $script:tasks&#91;$i])
        }
    }
    
    # タスクの削除機能
    function RemoveTask {
        # 現在のタスク一覧を表示
        ShowTasks
    
        # ユーザーに削除したいタスクの番号を入力させる
        $index = Read-Host "削除したいタスクの番号を入力してください"
    
        # 入力された番号が有効な範囲内にあるかを確認
        if ($index -ge 1 -and $index -le $script:tasks.Length) {
            # 選択された番号のタスクを取得
            $removedTask = $script:tasks&#91;$index-1]
    
            # タスクが1つだけの場合、タスクの配列を空にする
            if ($script:tasks.Length -eq 1) {
                $script:tasks = @()
            } 
            # 最初のタスクを削除する場合
            elseif ($index -eq 1) {
                $script:tasks = $script:tasks&#91;1..($script:tasks.Length-1)]
            } 
            # 最後のタスクを削除する場合
            elseif ($index -eq $script:tasks.Length) {
                $script:tasks = $script:tasks&#91;0..($index-2)]
            } 
            # 最初や最後以外のタスクを削除する場合
            else {
                $script:tasks = $script:tasks&#91;0..($index-2)] + $script:tasks&#91;$index..($script:tasks.Length-1)]
            }
    
            # 削除されたタスクの情報を表示
            Write-Host "$removedTask がToDoリストから削除されました。"
        } else {
            # 無効な番号が入力された場合のメッセージを表示
            Write-Host "無効な番号です。再度選択してください。"
        }
    }
    
    # タスクの保存機能
    function SaveTasks {
        $script:tasks | Out-File $tasksFile
        Write-Host "タスクがファイルに保存されました。"
    }
    
    # メニュー表示
    do {
        $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: タスク削除, 4: タスク保存, 5: 終了)"
        switch ($choice) {
            '1' { AddTask }
            '2' { ShowTasks }
            '3' { RemoveTask }
            '4' { SaveTasks }
            '5' { Write-Host "プログラムを終了します。"; break }
            default { Write-Host "無効な選択です。再度選択してください。" }
        }
    } while ($choice -ne '5')
}Catch{

    #エラーメッセージ出力
    Write-Host "予期せぬエラーが発生しました: $($_.Exception.Message)"
    
    #ログファイル出力
    echo "予期せぬエラーが発生しました: $($_.Exception.Message)" | Out-File -Append $logFile
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc16">まとめ</span></h2>



<p>今回はToDoリストのアプリケーションにエラーハンドリングを導入するプロセスについて学びました。エラーハンドリングは、ユーザーがアプリケーションをスムーズに使用できるようにするための必須の要素です。ユーザーの入力や外部ファイルの取り扱いなど、エラーが発生しうる箇所に適切なエラーメッセージや処理を追加することで、アプリケーションの信頼性と使いやすさが大幅に向上します。</p>



<p>今回の要点を再確認しましょう：</p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>ユーザー入力のエラーハンドリング: タスクの名前や期限などの入力項目を正しく検証。</li>



<li>ファイル操作時のエラー処理: ファイルの存在チェックや読み書きエラーのハンドリング。</li>



<li>一般的なエラーの処理: 予期せぬエラーに対する全体的なエラーハンドリング。</li>
</ol>



<p>お疲れ様でした。これにてToDoリストの完成を迎えることができました！<br>次のステップとして、今回得た知識を元にデータ管理ツールの作成手順を用意しています。次回も、新たな知識やスキルを一緒に学びながら、さらなる成長を目指しましょう！</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>次のステップへ進む</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-steps-for-data-management-tools/" title="「PowerShellでのデータ管理ツールの設計と実装の全手順」を読む">「PowerShellでのデータ管理ツールの設計と実装の全手順」を読む</a></p>



<p>&#x1f539; <strong>全体像の確認（ToDoリスト作成）</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/" title="「PowerShellを活用したToDoリスト作成の全手順」を見る">「PowerShellを活用したToDoリスト作成の全手順」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/improvement-a-todo-list-part-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShellでToDoリストを改善する &#8211; Part 2: 相対パスを利用した移植性の向上</title>
		<link>https://nekomichi-coder.com/improvement-a-todo-list-part-2/</link>
					<comments>https://nekomichi-coder.com/improvement-a-todo-list-part-2/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Thu, 10 Aug 2023 13:50:46 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=330</guid>

					<description><![CDATA[この記事では、PowerShellを使用してToDoリストの移植性を向上させる方法について詳しく解説します。特に、相対パスの利用方法とそのメリットに焦点を当てています。以下の内容を通じて、ToDoリストの効率的な管理と改 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>この記事では、PowerShellを使用してToDoリストの移植性を向上させる方法について詳しく解説します。特に、相対パスの利用方法とそのメリットに焦点を当てています。以下の内容を通じて、ToDoリストの効率的な管理と改善の手法を学べます。</p>



<p>多くのプログラムやスクリプトは特定の場所に依存せず、どこからでも動作するようにしたいものです。特にToDoリストのようなツールは、<strong>異なるPCや場所での利用を考慮すると、移植性が非常に重要です。</strong>この記事では、PowerShellを使用して、ToDoリストの移植性を向上させる方法について詳しく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4"><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">相対パスの基本</a></li><li><a href="#toc2" tabindex="0">相対パスの利用方法</a><ol><li><a href="#toc3" tabindex="0">現在のディレクトリの確認方法</a><ol><li><a href="#toc4" tabindex="0">PowerShellコンソールを起動する場合</a></li><li><a href="#toc5" tabindex="0">ツールを直接実行する場合</a></li></ol></li><li><a href="#toc6" tabindex="0">現在のディレクトリ内のファイルへのアクセス</a></li><li><a href="#toc7" tabindex="0">1階層上のディレクトリにアクセス</a></li><li><a href="#toc8" tabindex="0">子ディレクトリへのアクセス</a></li><li><a href="#toc9" tabindex="0">複数階層のディレクトリを経由してのアクセス</a></li></ol></li><li><a href="#toc10" tabindex="0">PowerShell、コマンドプロンプトでの相対パスの実装</a><ol><li><a href="#toc11" tabindex="0">ToDoList.ps1の相対パス変更</a><ol><li><a href="#toc12" tabindex="0">現在のスクリプトのディレクトリ取得方法</a></li><li><a href="#toc13" tabindex="0">ToDoList.ps1への反映</a></li><li><a href="#toc14" tabindex="0">よりよい改善方法</a><ol><li><a href="#toc15" tabindex="0">共通のパスやファイルを設定</a></li><li><a href="#toc16" tabindex="0">ソースコードへの反映</a></li></ol></li></ol></li><li><a href="#toc17" tabindex="0">ToDoList.batの相対パス変更</a><ol><li><a href="#toc18" tabindex="0">現在のスクリプトのディレクトリ取得方法</a></li><li><a href="#toc19" tabindex="0">ToDoList.batへの反映</a></li></ol></li></ol></li><li><a href="#toc20" tabindex="0">ここまでのソースコード</a></li><li><a href="#toc21" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">相対パスの基本</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>あのToDoリストのツール、自分のPCに移したけど動かないよ。</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-think sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>おかしいなあ&#8230;</p>
</div></div>



<p><strong>これはよくあるトラブルのひとつです。特定の場所にしか存在しないファイルやディレクトリのパスを指定してしまっていると、他の場所やPCでの利用が難しくなってしまいます。</strong>ここで重要なのが「相対パス」という考え方です。</p>



<p><strong>相対パスとは、現在のファイルやディレクトリからの位置関係で別のファイルやディレクトリの場所を示す方法のことを指します。</strong>例えば、同じディレクトリ内にあるファイルを指す際や、ひとつ上の階層にあるディレクトリを指す際などに使用します。</p>



<p><strong><span class="marker-under">相対パスを利用する最大の利点は、ツールやプログラムの移植性が向上することです。具体的な場所に依存しないので、異なるPCやディレクトリでも問題なく動作する可能性が高まります。</span></strong></p>



<p>さて、実際に相対パスの概念を用いて、ToDoリストのツールをどのように改善していくのか、次のセクションで詳しく見ていきましょう。</p>



<h2 class="wp-block-heading"><span id="toc2">相対パスの利用方法</span></h2>



<p>それでは、PowerShellでの相対パスの具体的な使い方を学びましょう。</p>



<h3 class="wp-block-heading"><span id="toc3">現在のディレクトリの確認方法</span></h3>



<p>ツールの実行方法により現在のディレクトリの位置が異なります。</p>



<h4 class="wp-block-heading"><span id="toc4">PowerShellコンソールを起動する場合</span></h4>



<p>コンソール上に現在のパスが表示されます。<br>以下の画像では、「C:\Users\Owner」が現在のディレクトリに当たります。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="739" height="512" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-47.png" alt="" class="wp-image-335" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-47.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-47-300x208.png 300w" sizes="(max-width: 739px) 100vw, 739px" /></figure>



<h4 class="wp-block-heading"><span id="toc5">ツールを直接実行する場合</span></h4>



<p>ツールの配置場所がカレントディレクトリになります。<br>以下の画像では、「C:\Users\Owner\Desktop\work\bin」がカレントディレクトリにあたります。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="703" height="451" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-48.png" alt="" class="wp-image-336" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-48.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-48-300x192.png 300w" sizes="(max-width: 703px) 100vw, 703px" /></figure>



<h3 class="wp-block-heading"><span id="toc6">現在のディレクトリ内のファイルへのアクセス</span></h3>



<p>以下のコードは、相対パスを使用してファイルを参照する基本的な例です。この方法を使用すると、異なる環境でも同じコードが正常に動作します。</p>



<p>現在のディレクトリ内に存在するファイルにアクセスする場合、ファイル名だけで指定することができます。</p>



<pre class="wp-block-code"><code><code>Get-Content .\myfile.txt</code></code></pre>



<h3 class="wp-block-heading"><span id="toc7">1階層上のディレクトリにアクセス</span></h3>



<p><code>..</code> を使って1階層上のディレクトリにアクセスします。</p>



<pre class="wp-block-code"><code>Set-Location ..\parent_directory
</code></pre>



<h3 class="wp-block-heading"><span id="toc8">子ディレクトリへのアクセス</span></h3>



<p>子ディレクトリにアクセスする場合は、そのディレクトリ名を指定します。</p>



<pre class="wp-block-code"><code>Set-Location .\child_directory
</code></pre>



<h3 class="wp-block-heading"><span id="toc9">複数階層のディレクトリを経由してのアクセス</span></h3>



<p><code>\</code> を使ってディレクトリを連ねて指定します。</p>



<pre class="wp-block-code"><code>Get-Content .\directory1\directory2\targetfile.txt
</code></pre>



<p>このように相対パスを使用することで、さまざまな場所のファイルやディレクトリを柔軟に指定することができます。具体的なパスを指定する必要がなく、コードの移植性や保守性が向上します。</p>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 class="wp-block-heading"><span id="toc10">PowerShell、コマンドプロンプトでの相対パスの実装</span></h2>



<h3 class="wp-block-heading"><span id="toc11">ToDoList.ps1の相対パス変更</span></h3>



<h4 class="wp-block-heading"><span id="toc12">現在のスクリプトのディレクトリ取得方法</span></h4>



<p>PowerShellには、現在実行中のスクリプトのディレクトリを取得するための変数、<code>$PSScriptRoot</code>があります。これを利用することで、相対パスを用いてスクリプトと同じディレクトリに存在するファイルへのアクセスや他のディレクトリへの移動が容易になります。</p>



<h4 class="wp-block-heading"><span id="toc13">ToDoList.ps1への反映</span></h4>



<p>次に、<code>tasks.txt</code>への相対パスを指定する方法を考えます。</p>



<p>現在、スクリプト中では以下のように絶対パスでファイルを指定しています。</p>



<pre class="wp-block-code"><code>#ファイル読み込み
<code>$tasks += Get-Content "C:\Users\Owner\Desktop\work\data\tasks.txt"</code></code></pre>



<p>これを相対パスを用いた方法に変更すると以下のようになります。</p>



<pre class="wp-block-code"><code>#ファイル読み込み
<code>$tasks += Get-Content "$PSScriptRoot\..\data\tasks.txt"</code></code></pre>



<p>この変更により、スクリプトが配置されているディレクトリに関係なく、常にスクリプトの親ディレクトリの<code>data</code>フォルダ内の<code>tasks.txt</code>を参照するようになります。</p>



<p>同様に、タスクの保存機能の部分も以下のように変更します。</p>



<pre class="wp-block-code"><code>#タスクの保存機能
function SaveTasks {
    $script:tasks | Out-File "$PSScriptRoot\..\data\tasks.txt"
    Write-Host "タスクがファイルに保存されました。"
}
</code></pre>



<p>これにより、スクリプトがどのフォルダに配置されているかに関わらず、常に正しい場所の<code>tasks.txt</code>を参照するようになり、フォルダ構造の変更や移動にも柔軟に対応できるようになります。</p>



<h4 class="wp-block-heading"><span id="toc14">よりよい改善方法</span></h4>



<p>プログラムやスクリプトを記述する際、特にファイル内で繰り返し使用する変数や定数（ここではパスやファイル名）は、コードの初めの部分で明示的に定義しておくのが一般的です。以下のメリットが挙げられます：</p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li><strong>可読性の向上</strong>: 変数名を適切に選ぶことで、コードの意図が明確に伝わりやすくなります。また、同じ値を繰り返し使用する場合、その変数の定義箇所を変更するだけで、全ての使用箇所の値も一括で変わるため、修正漏れが減少します。</li>



<li><strong>変更の容易性</strong>: 定義を一箇所で行っていれば、将来的に変更が生じた際も、その箇所だけの変更で済みます。これは保守性の面で大きな利点となります。</li>
</ol>



<h5 class="wp-block-heading"><span id="toc15">共通のパスやファイルを設定</span></h5>



<p>スクリプトの初めの部分で、以下のような定義を行います。</p>



<pre class="wp-block-code"><code># 共通のパスの設定
$commonPath = "$PSScriptRoot\.."

# tasksファイルへのパスの設定
$tasksFile = "$commonPath\data\tasks.txt"</code></pre>



<p>この共通パスやファイルパスの変数を、ファイルの読み込みや保存などの処理で使用することで、冗長なコードの繰り返しを避け、スクリプト全体の可読性や保守性を向上させることができます。</p>



<h5 class="wp-block-heading"><span id="toc16">ソースコードへの反映</span></h5>



<p>例えば、タスクの読み込みの際の処理は、以下のように簡潔に書くことができます。</p>



<pre class="wp-block-code"><code># ファイル読み込み
$tasks += Get-Content $tasksFile
</code></pre>



<p>同様に、タスクの保存機能も以下のように変更することで、コードがシンプルで理解しやすくなります。</p>



<pre class="wp-block-code"><code># タスクの保存機能
function SaveTasks {
    $script:tasks | Out-File $tasksFile
    Write-Host "タスクがファイルに保存されました。"
}
</code></pre>



<p>このように、変数や定数を適切に設定することで、コードの品質や可読性、保守性を大きく向上させることができます。<br>以降の記事では「よりよい改善方法」のソースで進めます。</p>



<h3 class="wp-block-heading"><span id="toc17">ToDoList.batの相対パス変更</span></h3>



<h4 class="wp-block-heading"><span id="toc18">現在のスクリプトのディレクトリ取得方法</span></h4>



<p><strong>バッチファイルにおいて、<code>%~dp0</code> という変数を利用すると、実行中のバッチファイル自身のディレクトリへの絶対パスを取得することができます。</strong>この変数を利用して、絶対パスを指定する部分を相対パスに変更します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p><code>$PSScriptRoot</code>はPowerShellのコマンドだから、<br>batファイルでは使えないよ。</p>
</div></div>



<h4 class="wp-block-heading"><span id="toc19">ToDoList.batへの反映</span></h4>



<p>現在、<code>ToDoList.bat</code> ファイルは <code>ToDoList.ps1</code> の絶対パスを指定しています。この絶対パスを相対パスに変更することで、ファイルやフォルダの移動、あるいは異なる環境での実行でも、正しく動作するようにします。</p>



<pre class="wp-block-code"><code>rem 修正前
@echo off
powershell.exe -ExecutionPolicy RemoteSigned "C:\Users\Owner\Desktop\work\bin\ToDoList.ps1"

rem 修正後
@echo off
powershell.exe -ExecutionPolicy RemoteSigned "%~dp0bin\ToDoList.ps1"
</code></pre>



<p>上記の修正により、<code>ToDoList.bat</code>から<code>ToDoList.ps1</code>を正常に実行することができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>これで動かしてみてください！</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>おお、動いたよ。ありがとう。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc20">ここまでのソースコード</span></h2>



<p>参考として、ここまでのソースコードを記載します。</p>



<pre class="wp-block-code"><code>ToDoList.bat</code></pre>



<pre class="wp-block-code"><code>@echo off
powershell.exe -ExecutionPolicy RemoteSigned "%~dp0bin\ToDoList.ps1"
</code></pre>



<pre class="wp-block-code"><code>ToDoList.ps1</code></pre>



<pre class="wp-block-code"><code># 共通のパスの設定
$commonPath = "$PSScriptRoot\.."

# tasksファイルへのパスの設定
$tasksFile = "$commonPath\data\tasks.txt"

# タスクの配列を宣言
$tasks = @()

# ファイル読み込み
$tasks += Get-Content $tasksFile
Write-Host "タスクがファイルから読み込まれました。"

# タスクの追加機能
function AddTask {
    $task = Read-Host "追加したいタスクを入力してください"
    $script:tasks += $task
    Write-Host "$task がToDoリストに追加されました。"
}

# タスクの表示機能
function ShowTasks {
    Write-Host "現在のタスク一覧:"
    for ($i=0; $i -lt $script:tasks.Length; $i++) {
        Write-Host ("&#91;" + ($i + 1) + "] " + $script:tasks&#91;$i])
    }
}

# タスクの削除機能
function RemoveTask {
    # 現在のタスク一覧を表示
    ShowTasks

    # ユーザーに削除したいタスクの番号を入力させる
    $index = Read-Host "削除したいタスクの番号を入力してください"

    # 入力された番号が有効な範囲内にあるかを確認
    if ($index -ge 1 -and $index -le $script:tasks.Length) {
        # 選択された番号のタスクを取得
        $removedTask = $script:tasks&#91;$index-1]

        # タスクが1つだけの場合、タスクの配列を空にする
        if ($script:tasks.Length -eq 1) {
            $script:tasks = @()
        } 
        # 最初のタスクを削除する場合
        elseif ($index -eq 1) {
            $script:tasks = $script:tasks&#91;1..($script:tasks.Length-1)]
        } 
        # 最後のタスクを削除する場合
        elseif ($index -eq $script:tasks.Length) {
            $script:tasks = $script:tasks&#91;0..($index-2)]
        } 
        # 最初や最後以外のタスクを削除する場合
        else {
            $script:tasks = $script:tasks&#91;0..($index-2)] + $script:tasks&#91;$index..($script:tasks.Length-1)]
        }

        # 削除されたタスクの情報を表示
        Write-Host "$removedTask がToDoリストから削除されました。"
    } else {
        # 無効な番号が入力された場合のメッセージを表示
        Write-Host "無効な番号です。再度選択してください。"
    }
}

# タスクの保存機能
function SaveTasks {
    $script:tasks | Out-File $tasksFile
    Write-Host "タスクがファイルに保存されました。"
}

# メニュー表示
do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: タスク削除, 4: タスク保存, 5: 終了)"
    switch ($choice) {
        '1' { AddTask }
        '2' { ShowTasks }
        '3' { RemoveTask }
        '4' { SaveTasks }
        '5' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
} while ($choice -ne '5')
</code></pre>



<h2 class="wp-block-heading"><span id="toc21">まとめ</span></h2>



<p>今回の記事では、スクリプトやプログラムでの相対パスの重要性とその実装方法に焦点を当てました。<strong><span class="marker-under">相対パスを使用することで、ツールやスクリプトの移動性や互換性が向上し、さまざまな環境で問題なく動作するようになります。</span></strong>具体的に、<code>ToDoList.ps1</code> スクリプトの読み込み・保存パスを相対パスを使用して変更しました。また、バッチファイルにおける相対パスの指定方法も確認しました。</p>



<p>次回のテーマとしては、スクリプトのさらなる改善を目指し、「エラーハンドリング」について取り上げます。スクリプト実行中に予期せぬエラーが発生した場合、そのエラーを適切に捉えてユーザーに通知する方法や、エラー発生時の対処方法について学ぶことができます。</p>



<p>今回の記事を通じて、スクリプトやプログラムの柔軟性や使いやすさの向上の重要性を感じていただければ幸いです。次回も、PowerShellスクリプトをより堅牢に、そしてユーザーフレンドリーにする方法を一緒に学びましょう！</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>次のステップへ進む</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/improvement-a-todo-list-part-3/" title="「PowerShellでToDoリストを改善する - Part 3: エラーハンドリングの導入」を読む">「PowerShellでToDoリストを改善する &#8211; Part 3: エラーハンドリングの導入」を読む</a></p>



<p>&#x1f539; <strong>全体像の確認（ToDoリスト作成）</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/" title="「PowerShellを活用したToDoリスト作成の全手順」を見る">「PowerShellを活用したToDoリスト作成の全手順」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/improvement-a-todo-list-part-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShellでToDoリストを改善する &#8211; Part 1: データ永続性とファイル操作</title>
		<link>https://nekomichi-coder.com/improvement-a-todo-list-part-1/</link>
					<comments>https://nekomichi-coder.com/improvement-a-todo-list-part-1/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Tue, 08 Aug 2023 13:14:26 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=273</guid>

					<description><![CDATA[この記事ではPowerShellを使用してToDoリストのデータ永続性を実現する方法に焦点を当てて解説していきます。データを一時的に保持するだけでなく、永続的に保存し、再度アクセスすることで、より実用的なToDoリストを [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>この記事ではPowerShellを使用して<strong><span class="marker-under">ToDoリストのデータ永続性を実現する方法</span></strong>に焦点を当てて解説していきます。データを一時的に保持するだけでなく、永続的に保存し、再度アクセスすることで、より実用的なToDoリストを作成する方法を学びます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6"><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">データ永続性とは</a></li><li><a href="#toc2" tabindex="0">PowerShellでのファイル操作の基本</a><ol><li><a href="#toc3" tabindex="0">ファイルの読み込み</a></li><li><a href="#toc4" tabindex="0">ファイルの書き込み</a></li></ol></li><li><a href="#toc5" tabindex="0">ToDoリストでファイルの保存/読み込みをする方法</a><ol><li><a href="#toc6" tabindex="0">ファイルへの保存</a><ol><li><a href="#toc7" tabindex="0">「|」について</a></li></ol></li><li><a href="#toc8" tabindex="0">ファイルからの読み込み</a></li><li><a href="#toc9" tabindex="0">メニューに保存機能の呼び出しを追加</a></li></ol></li><li><a href="#toc10" tabindex="0">動作確認</a><ol><li><a href="#toc11" tabindex="0">ソースコード</a></li><li><a href="#toc12" tabindex="0">実機の動作</a></li></ol></li><li><a href="#toc13" tabindex="0">実行ポリシーの考慮</a><ol><li><a href="#toc14" tabindex="0">batファイルについて</a></li><li><a href="#toc15" tabindex="0">batファイルからps1スクリプトを呼び出す</a><ol><li><a href="#toc16" tabindex="0">事前準備</a></li><li><a href="#toc17" tabindex="0">バッチファイルの編集</a></li></ol></li></ol></li><li><a href="#toc18" tabindex="0">まとめと次のステップ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">データ永続性とは</span></h2>



<p><strong><span class="marker-under">データ永続性とは、データを一時的なメモリ上ではなく、永続的に保存することを指します。</span></strong>例えば、アプリケーションやウェブサイトで入力した情報を、再起動やブラウザの再読み込み後も保持し続けることができるようにするための仕組みです。このデータ永続性は、ユーザーが安心してアプリケーションやサービスを利用するための基本的な要件となっています。</p>



<p><strong>データの永続性がないと、ユーザーが入力した情報や設定が失われてしまい、その都度再入力が必要となります。</strong>これは非常に手間がかかり、ユーザーの利便性を損なう要因となります。特に、ToDoリストのような情報を頻繁に更新するアプリケーションでは、データの永続性は必須となります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>コンソール閉じたらデータが全部消えてしまいそうだね。</p>



<p>データが保管されないのは困るな…。</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-think sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>保管したいなんて言ってなかったじゃないか</p>
</div></div>



<p>このような要望を受けて、データ永続性を持ったToDoリストの作成が求められています。次のセクションでは、PowerShellを使用して、このデータ永続性を実現する方法を詳しく解説していきます。</p>



<h2 class="wp-block-heading"><span id="toc2">PowerShellでのファイル操作の基本</span></h2>



<p>PowerShellは、Windowsの標準シェルとして提供されている強力なスクリプト言語です。そのため、ファイルの操作も非常に簡単に行うことができます。ここでは、ファイルの基本的な読み込みと書き込みの方法を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc3">ファイルの読み込み</span></h3>



<p>PowerShellでファイルを読み込むには、<code>Get-Content</code> コマンドを使用します。</p>



<pre class="wp-block-code"><code>$content = Get-Content -Path "C:\path\to\your\file.txt"
Write-Output $content
</code></pre>



<p>上記のコードは、指定したパスのファイルの内容を読み込み、それを <code>$content</code> という変数に格納しています。その後、<code>Write-Output</code> コマンドで内容を表示しています。</p>



<h3 class="wp-block-heading"><span id="toc4">ファイルの書き込み</span></h3>



<p>ファイルへの書き込みは、<code>Set-Content</code> コマンドを使用します。</p>



<pre class="wp-block-code"><code>$text = "これはテストのテキストです。"
Set-Content -Path "C:\path\to\your\file.txt" -Value $text
</code></pre>



<p>このコードは、<code>$text</code> という変数に格納されたテキストを指定したパスのファイルに書き込んでいます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>これらのコマンドを覚えることで、色々なことができるようになります。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc5">ToDoリストでファイルの保存/読み込みをする方法</span></h2>



<p>これまでに作成したToDoリストのプログラムでは、タスクの追加、表示、削除の基本的な機能を実装してきました。しかし、プログラムを終了するとタスクのデータは失われてしまいます。このセクションでは、タスクのデータをファイルに保存し、再度プログラムを起動した際にそのデータを読み込む方法を学びます。</p>



<p>「work」フォルダ内に「data」フォルダを作成し、「tasks.txt」を配置することにします。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-32.png" alt="" class="wp-image-275" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-32.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-32-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-32-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-32-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-35.png" alt="" class="wp-image-280" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-35.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-35-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-35-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-35-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<h3 class="wp-block-heading"><span id="toc6">ファイルへの保存</span></h3>



<p>以下の関数を追加して、タスクのデータをファイルに保存します。</p>



<pre class="wp-block-code"><code># タスクの保存機能
function SaveTasks {
    $script:tasks | Out-File "C:\Users\Owner\Desktop\work\data\tasks.txt"
    Write-Host "タスクがファイルに保存されました。"
}
</code></pre>



<p>この関数は、<code>$tasks</code> 配列の内容を <code>Out-File</code> コマンドを使用してファイルに書き込んでいます。</p>



<h4 class="wp-block-heading"><span id="toc7">「|」について</span></h4>



<p>「|」はパイプと呼ばれる記号で、Unix系OSやPowerShellなどのシェル環境で使用されます。一つのコマンドの出力を、次のコマンドの入力として渡す役割を持ちます。これにより、<strong>複数のコマンドを連鎖的に実行することができます。</strong>「Shift」+「\」キーで入力できます。</p>



<h3 class="wp-block-heading"><span id="toc8">ファイルからの読み込み</span></h3>



<p>次に、プログラムの開始時にファイルからタスクのデータを読み込む機能を追加します。</p>



<pre class="wp-block-code"><code># タスクの配列を宣言
$tasks = @()

# ファイル読み込み
$tasks += Get-Content "C:\Users\Owner\Desktop\work\data\tasks.txt"
Write-Host "タスクがファイルから読み込まれました。"
</code></pre>



<p>このコードは、指定したパスのファイルが存在する場合、そのファイルの内容を <code>$tasks</code> 配列に読み込んでいます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>ファイルパスは自分の配置した場所にしてね。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc9">メニューに保存機能の呼び出しを追加</span></h3>



<pre class="wp-block-code"><code># メニュー表示
do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: タスク削除, 4: タスク保存, 5: 終了)"
    switch ($choice) {
        '1' { AddTask }
        '2' { ShowTasks }
        '3' { RemoveTask }
        '4' { SaveTasks }
        '5' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
} while ($choice -ne '5')
</code></pre>



<p>上記の修正により、メニューから「4: タスク保存」という選択肢を選ぶことで、<code>SaveTasks</code> 関数が呼び出され、タスクのデータがファイルに保存されるようになります。</p>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 class="wp-block-heading"><span id="toc10">動作確認</span></h2>



<h3 class="wp-block-heading"><span id="toc11">ソースコード</span></h3>



<p>以下が取込版のソースコードになります。</p>



<pre class="wp-block-code"><code># タスクの配列を宣言
$tasks = @()

# ファイル読み込み
$tasks += Get-Content "C:\Users\Owner\Desktop\work\data\tasks.txt"
Write-Host "タスクがファイルから読み込まれました。"

# タスクの追加機能
function AddTask {
    $task = Read-Host "追加したいタスクを入力してください"
    $script:tasks += $task
    Write-Host "$task がToDoリストに追加されました。"
}

# タスクの表示機能
function ShowTasks {
    Write-Host "現在のタスク一覧:"
    for ($i=0; $i -lt $script:tasks.Length; $i++) {
        Write-Host ("&#91;" + ($i + 1) + "] " + $script:tasks&#91;$i])
    }
}

# タスクの削除機能
function RemoveTask {
    # 現在のタスク一覧を表示
    ShowTasks

    # ユーザーに削除したいタスクの番号を入力させる
    $index = Read-Host "削除したいタスクの番号を入力してください"

    # 入力された番号が有効な範囲内にあるかを確認
    if ($index -ge 1 -and $index -le $script:tasks.Length) {
        # 選択された番号のタスクを取得
        $removedTask = $script:tasks&#91;$index-1]

        # タスクが1つだけの場合、タスクの配列を空にする
        if ($script:tasks.Length -eq 1) {
            $script:tasks = @()
        } 
        # 最初のタスクを削除する場合
        elseif ($index -eq 1) {
            $script:tasks = $script:tasks&#91;1..($script:tasks.Length-1)]
        } 
        # 最後のタスクを削除する場合
        elseif ($index -eq $script:tasks.Length) {
            $script:tasks = $script:tasks&#91;0..($index-2)]
        } 
        # 最初や最後以外のタスクを削除する場合
        else {
            $script:tasks = $script:tasks&#91;0..($index-2)] + $script:tasks&#91;$index..($script:tasks.Length-1)]
        }

        # 削除されたタスクの情報を表示
        Write-Host "$removedTask がToDoリストから削除されました。"
    } else {
        # 無効な番号が入力された場合のメッセージを表示
        Write-Host "無効な番号です。再度選択してください。"
    }
}

#タスクの保存機能
function SaveTasks {
    $script:tasks | Out-File "C:\Users\Owner\Desktop\work\data\tasks.txt"
    Write-Host "タスクがファイルに保存されました。"
}


# メニュー表示
do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: タスク削除, 4: タスク保存, 5: 終了)"
    switch ($choice) {
        '1' { AddTask }
        '2' { ShowTasks }
        '3' { RemoveTask }
        '4' { SaveTasks }
        '5' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
} while ($choice -ne '5')
</code></pre>



<h3 class="wp-block-heading"><span id="toc12">実機の動作</span></h3>



<p>１．朝ごはんタスクを追加、保存し、プログラムを終了します。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-38.png" alt="" class="wp-image-286" style="aspect-ratio:631/384" width="631" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-38.png 841w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-38-300x183.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-38-768x468.png 768w" sizes="(max-width: 631px) 100vw, 631px" /></figure>



<p>２．「tasks.txt」を開くと、タスクが保存されています。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-39.png" alt="" class="wp-image-287" style="aspect-ratio:541/296" width="541" height="296" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-39.png 721w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-39-300x164.png 300w" sizes="(max-width: 541px) 100vw, 541px" /></figure>



<p>３．再度プログラムを起動すると、保存したタスクが読み込まれました。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-40.png" alt="" class="wp-image-288" style="aspect-ratio:631/384" width="631" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-40.png 841w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-40-300x183.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-40-768x468.png 768w" sizes="(max-width: 631px) 100vw, 631px" /></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>できたー</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc13">実行ポリシーの考慮</span></h2>



<p>PowerShellのスクリプト（.ps1ファイル）を直接実行する場合、実行ポリシーの制限により、スクリプトが実行されないことがあります。特に、初めてPowerShellスクリプトを実行する場合や、セキュリティ設定が厳格な環境では、この問題に直面することが多いです。</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box">
<p>以下の記事でも紹介しています。<br><a href="https://nekomichi-coder.com/make-a-todo-list-part-2/" title="PowerShellでToDoリストを作る – Part 2: タスクの追加機能と変数の使用">PowerShellでToDoリストを作る – Part 2: タスクの追加機能と変数の使用</a></p>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-think sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>上司のPC環境では動かないかもしれない&#8230;</p>
</div></div>



<p><strong><span class="marker-under">この問題を回避するための一つの方法として、batファイルからPowerShellスクリプトを呼び出す方法があります。</span></strong></p>



<h3 class="wp-block-heading"><span id="toc14">batファイルについて</span></h3>



<p>batファイルは、Windowsのコマンドプロンプトで実行される一連のコマンドを含むスクリプトファイルです。これにより、複数のコマンドを一度に自動的に実行することができます。拡張子は「.bat」または「.cmd」となります。</p>



<p>この記事では、.ps1ファイルを実行するために使用します。</p>



<h3 class="wp-block-heading"><span id="toc15">batファイルからps1スクリプトを呼び出す</span></h3>



<h4 class="wp-block-heading"><span id="toc16">事前準備</span></h4>



<p>テキストファイルを新規作成し、「ToDoList.bat」に名前を変更します。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-41.png" alt="" class="wp-image-294" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-41.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-41-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-41-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-41-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-42.png" alt="" class="wp-image-295" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-42.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-42-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-42-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-42-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<p>「ToDoList.ps1」は触られたくないので、移動しましょう。<br>「bin」フォルダを作成し、移動しました。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-43.png" alt="" class="wp-image-296" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-43.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-43-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-43-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-43-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-44.png" alt="" class="wp-image-297" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-44.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-44-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-44-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-44-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<h4 class="wp-block-heading"><span id="toc17">バッチファイルの編集</span></h4>



<p>以下は、batファイルを使用してPowerShellスクリプトを呼び出す例です。</p>



<pre class="wp-block-code"><code>@echo off
powershell.exe -ExecutionPolicy RemoteSigned "C:\Users\Owner\Desktop\work\bin\ToDoList.ps1"
</code></pre>



<p>このbatファイルを実行すると、指定したPowerShellスクリプト（この例では<code>ToDoList.ps1</code>）が実行されます。<code>-ExecutionPolicy Bypass</code> オプションにより、実行ポリシーの制限を回避してスクリプトを実行することができます。</p>



<p><strong><span class="marker-under">この方法を使用することで、PowerShellの実行ポリシーによる制限を気にせずに、スクリプトを簡単に実行することができます。<br>また、スクリプトの実行方法が分からなくても、batファイルであればダブルクリックで簡単に実行できます。</span></strong></p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-45.png" alt="" class="wp-image-299" style="aspect-ratio:490/256" width="490" height="256" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-45.png 979w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-45-300x157.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-45-768x402.png 768w" sizes="(max-width: 490px) 100vw, 490px" /></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>出来ました！完璧です！</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>ありがとう。早速使わせてもらうよ。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc18">まとめと次のステップ</span></h2>



<p>この記事では、PowerShellを用いてToDoリストのデータをファイルに保存する方法を学びました。具体的には、以下の内容を取り上げました。</p>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li>データ永続性の重要性とその実現方法</li>



<li>PowerShellにおけるファイル操作の基本的な手法</li>



<li>ToDoリストのデータをファイルに保存・読み込む実装方法</li>



<li>実行権限の制限を回避するためのbatファイルを用いた方法</li>
</ul>



<p>これにより、プログラムを終了してもタスクのデータが失われることなく、次回も継続して使用することができるようになりました。</p>



<p>次回は、さらに実用的なToDoリストの作成に向けて、スクリプトの移植性を高めるためのテクニックを学びます。具体的には、「相対パスを利用した移植性の向上」に焦点を当て、どの環境でも同じように動作するスクリプトの作成方法を解説します。さらに実践的な知識を深めていきましょう。</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>次のステップへ進む</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/improvement-a-todo-list-part-2/" title="「PowerShellでToDoリストを改善する - Part 2: 相対パスを利用した移植性の向上」を読む">「PowerShellでToDoリストを改善する &#8211; Part 2: 相対パスを利用した移植性の向上」を読む</a></p>



<p>&#x1f539; <strong>全体像の確認（ToDoリスト作成）</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/" title="「PowerShellを活用したToDoリスト作成の全手順」を見る">「PowerShellを活用したToDoリスト作成の全手順」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/improvement-a-todo-list-part-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShellでToDoリストを作る &#8211; Part 4: タスクの削除機能の追加</title>
		<link>https://nekomichi-coder.com/make-a-todo-list-part-4/</link>
					<comments>https://nekomichi-coder.com/make-a-todo-list-part-4/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Tue, 08 Aug 2023 09:39:18 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=253</guid>

					<description><![CDATA[皆様、こんにちは。PowerShellを用いたToDoリスト作成のシリーズ、引き続きお付き合いいただきありがとうございます。これまでのシリーズでは、PowerShellの基本的な起動方法から、タスクの追加や表示機能の実装 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>皆様、こんにちは。PowerShellを用いたToDoリスト作成のシリーズ、引き続きお付き合いいただきありがとうございます。これまでのシリーズでは、PowerShellの基本的な起動方法から、タスクの追加や表示機能の実装について学びました。特に、前回の「Part 3: タスクの表示機能とメニュー表示機能の実装」では、ToDoリストの中核となる機能を一緒に実装してきました。</p>



<p><strong>今回の「Part 4」では、ToDoリストのさらなる使いやすさを追求するための「タスクの削除機能」の実装に挑戦します。</strong>タスクを追加するだけでなく、不要になったタスクを削除することで、リストを常に最新の状態に保ち、効率的なタスク管理を実現することができます。</p>



<p>それでは、一緒にタスクの削除機能の実装に取り組んでいきましょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8"><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">前回までのソースコード</a></li><li><a href="#toc2" tabindex="0">タスク削除機能の重要性</a><ol><li><a href="#toc3" tabindex="0">ToDoリストの使いやすさを高める要因</a></li><li><a href="#toc4" tabindex="0">タスクの整理・管理の効率化</a></li></ol></li><li><a href="#toc5" tabindex="0">タスクの削除機能の実装</a><ol><li><a href="#toc6" tabindex="0">タスクの番号を表示</a><ol><li><a href="#toc7" tabindex="0">for文について</a><ol><li><a href="#toc8" tabindex="0">基本的な構文</a></li><li><a href="#toc9" tabindex="0">例</a></li><li><a href="#toc10" tabindex="0">for文の利点</a></li></ol></li></ol></li><li><a href="#toc11" tabindex="0">削除したいタスクの選択</a><ol><li><a href="#toc12" tabindex="0">コードの説明</a></li><li><a href="#toc13" tabindex="0">if文について</a><ol><li><a href="#toc14" tabindex="0">基本的な構文</a></li><li><a href="#toc15" tabindex="0">例</a></li></ol></li><li><a href="#toc16" tabindex="0">if,elseif,else文について</a><ol><li><a href="#toc17" tabindex="0">基本的な構文</a></li><li><a href="#toc18" tabindex="0">例</a></li></ol></li></ol></li><li><a href="#toc19" tabindex="0">メニューに削除機能を追加</a></li><li><a href="#toc20" tabindex="0">動作確認</a></li></ol></li><li><a href="#toc21" tabindex="0">まとめ</a><ol><li><a href="#toc22" tabindex="0">今回学んだ内容のまとめ</a></li><li><a href="#toc23" tabindex="0">次回について</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">前回までのソースコード</span></h2>



<pre class="wp-block-code"><code># タスクの配列を宣言
$tasks = @()

# タスクの追加機能
function AddTask {
    $task = Read-Host "追加したいタスクを入力してください"
    $script:tasks += $task
    Write-Host "$task がToDoリストに追加されました。"
}

# タスクの表示機能
function ShowTasks {
    Write-Host "現在のタスク一覧:"
    foreach ($task in $script:tasks) {
        Write-Host ($task)
    }
}

# メニュー表示
do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: 終了)"
    switch ($choice) {
        '1' { AddTask }
        '2' { ShowTasks }
        '3' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
} while ($choice -ne '3')
</code></pre>



<h2 class="wp-block-heading"><span id="toc2">タスク削除機能の重要性</span></h2>



<p><strong>ToDoリストは、私たちの日常や業務におけるタスクを整理し、効率的に進めるためのツールとして非常に役立ちます。</strong>その中でも、タスクの削除機能はToDoリストの使いやすさを大きく左右する要素の一つです。</p>



<h3 class="wp-block-heading"><span id="toc3">ToDoリストの使いやすさを高める要因</span></h3>



<p>タスクの追加や表示だけでなく、タスクの削除がスムーズに行えることで、リストは常に最新の状態を保つことができます。<strong>過去の不要なタスクが残っていると、リストが乱雑になり、新しいタスクの確認や追加が難しくなります。</strong>削除機能を適切に利用することで、このような問題を回避し、リストの見通しを良くすることができます。</p>



<h3 class="wp-block-heading"><span id="toc4">タスクの整理・管理の効率化</span></h3>



<p>タスクの削除は、単にリストからのタスクの除去だけでなく、タスクの整理・管理の効率化にも寄与します。例えば、<strong>同じタスクを複数回追加してしまった場合や、間違って追加したタスクを修正する際に、削除機能があれば迅速に対応することができます。</strong>また、タスクの優先順位を変更する際にも、不要なタスクを削除することで、リストの整理が容易になります。</p>



<p>このように、タスクの削除機能はToDoリストの使いやすさや効率的なタスク管理のために欠かせない機能と言えるでしょう。</p>



<h2 class="wp-block-heading"><span id="toc5">タスクの削除機能の実装</span></h2>



<p>タスクの追加や表示と同様に、タスクの削除も非常に重要な機能です。以下の手順で、タスクの削除機能を実装していきましょう。</p>



<h3 class="wp-block-heading"><span id="toc6">タスクの番号を表示</span></h3>



<p>まず、タスクの表示機能にタスクの番号を追加します。<br>ここでは、<strong>タスクの番号（繰り返しの回数）を表示するために</strong>、foreach文からfor文へ変更します。</p>



<pre class="wp-block-code"><code>function ShowTasks {
    Write-Host "現在のタスク一覧:"
    for ($i=0; $i -lt $script:tasks.Length; $i++) {
        Write-Host ("&#91;" + ($i + 1) + "] " + $script:tasks&#91;$i])
    }
}
</code></pre>



<h4 class="wp-block-heading"><span id="toc7">for文について</span></h4>



<p><code>for</code>文は、特定の条件が満たされている間、繰り返し処理を行うための制御構文です。<code>foreach</code>文とは異なり、<code>for</code>文は繰り返しの回数や条件を明示的に指定することができます。</p>



<h5 class="wp-block-heading"><span id="toc8">基本的な構文</span></h5>



<pre class="wp-block-code"><code>for (初期化式; 条件式; 更新式) {
    # 繰り返し実行する処理
}
</code></pre>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>初期化式</strong>: 繰り返し処理の開始前に一度だけ実行される式。通常、カウンタ変数の初期値を設定します。</li>



<li><strong>条件式</strong>: この条件が真である限り、繰り返し処理が実行されます。</li>



<li><strong>更新式</strong>: 各繰り返しの後に実行される式。通常、カウンタ変数の値を更新します。</li>
</ul>



<h5 class="wp-block-heading"><span id="toc9">例</span></h5>



<pre class="wp-block-code"><code>for ($i = 0; $i -lt 5; $i++) {
    Write-Host $i
}
</code></pre>



<p>このコードは、0から4までの数字を順番に表示します。</p>



<h5 class="wp-block-heading"><span id="toc10">for文の利点</span></h5>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li>繰り返しの回数や条件を明示的に指定できるため、柔軟な繰り返し処理が可能です。</li>



<li>カウンタ変数を利用して、繰り返し処理の中での現在の繰り返し回数を知ることができます。</li>
</ul>



<p><code>foreach</code>文がコレクションの各要素に対して処理を行うのに適しているのに対し、<code>for</code>文は特定の条件や回数で繰り返し処理を行いたい場合に適しています。</p>



<h3 class="wp-block-heading"><span id="toc11">削除したいタスクの選択</span></h3>



<p>次に、ユーザーが削除したいタスクを選択できるようにします。</p>



<pre class="wp-block-code"><code>function RemoveTask {
    # 現在のタスク一覧を表示
    ShowTasks

    # ユーザーに削除したいタスクの番号を入力させる
    $index = Read-Host "削除したいタスクの番号を入力してください"

    # 入力された番号が有効な範囲内にあるかを確認
    if ($index -ge 1 -and $index -le $script:tasks.Length) {
        # 選択された番号のタスクを取得
        $removedTask = $script:tasks&#91;$index-1]

        # タスクが1つだけの場合、タスクの配列を空にする
        if ($script:tasks.Length -eq 1) {
            $script:tasks = @()
        } 
        # 最初のタスクを削除する場合
        elseif ($index -eq 1) {
            $script:tasks = $script:tasks&#91;1..($script:tasks.Length-1)]
        } 
        # 最後のタスクを削除する場合
        elseif ($index -eq $script:tasks.Length) {
            $script:tasks = $script:tasks&#91;0..($index-2)]
        } 
        # 最初や最後以外のタスクを削除する場合
        else {
            $script:tasks = $script:tasks&#91;0..($index-2)] + $script:tasks&#91;$index..($script:tasks.Length-1)]
        }

        # 削除されたタスクの情報を表示
        Write-Host "$removedTask がToDoリストから削除されました。"
    } else {
        # 無効な番号が入力された場合のメッセージを表示
        Write-Host "無効な番号です。再度選択してください。"
    }
}
</code></pre>



<h4 class="wp-block-heading"><span id="toc12">コードの説明</span></h4>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong><code>ShowTasks</code></strong>: 現在のタスク一覧を表示する関数を呼び出します。これにより、ユーザーはどのタスクを削除するかを選択できます。</li>



<li><strong><code>$index = Read-Host "削除したいタスクの番号を入力してください"</code></strong>: ユーザーにタスクの番号を入力させ、その番号を<code>$index</code>変数に保存します。</li>



<li><strong><code>if ($index -ge 1 -and $index -le $script:tasks.Length)</code></strong>: 入力された番号が有効な範囲内にあるかを確認する条件文です。</li>



<li><strong><code>$script:tasks = ...</code></strong>: 選択されたタスクを配列から削除する処理です。配列のスライスと結合を使用して、指定されたタスクを削除します。</li>



<li><strong><code>Write-Host "$removedTask がToDoリストから削除されました。"</code></strong>: 削除されたタスクの情報を表示するコードです。</li>
</ul>



<h4 class="wp-block-heading"><span id="toc13">if文について</span></h4>



<p><code>if</code>文は、特定の条件が真（<code>true</code>）である場合に、特定のコードブロックを実行するための制御構造です。この構造は、プログラムの流れを制御するための基本的なツールとして、多くのプログラミング言語で利用されています。</p>



<h5 class="wp-block-heading"><span id="toc14">基本的な構文</span></h5>



<pre class="wp-block-code"><code>if (条件) {
    # 条件が真の場合に実行されるコード
}
</code></pre>



<h5 class="wp-block-heading"><span id="toc15">例</span></h5>



<pre class="wp-block-code"><code>$number = 5
if ($number -gt 3) {
    Write-Host "数値は3より大きいです。"
}
</code></pre>



<p>この例では、<code>$number</code>が3より大きい場合、&#8221;数値は3より大きいです。&#8221;というメッセージが表示されます。</p>



<h4 class="wp-block-heading"><span id="toc16">if,elseif,else文について</span></h4>



<p><code>また、elseif</code>と<code>else</code>を組み合わせることで、複数の条件を順番に評価し、最初に真となる条件に関連するコードブロックを実行することができます。</p>



<h5 class="wp-block-heading"><span id="toc17">基本的な構文</span></h5>



<pre class="wp-block-code"><code>if (条件1) {
    # 条件1が真の場合に実行されるコード
} elseif (条件2) {
    # 条件1が偽で、条件2が真の場合に実行されるコード
} else {
    # すべての条件が偽の場合に実行されるコード
}
</code></pre>



<h5 class="wp-block-heading"><span id="toc18">例</span></h5>



<pre class="wp-block-code"><code>$number = 5
if ($number -eq 3) {
    Write-Host "数値は3です。"
} elseif ($number -gt 3) {
    Write-Host "数値は3より大きいです。"
} else {
    Write-Host "数値は3より小さいです。"
}
</code></pre>



<p>この例では、<code>$number</code>が3である場合、3より大きい場合、3より小さい場合の3つの異なる条件に基づいて、異なるメッセージが表示されます。</p>



<h3 class="wp-block-heading"><span id="toc19">メニューに削除機能を追加</span></h3>



<pre class="wp-block-code"><code>do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: タスク削除, 4: 終了)"
    switch ($choice) {
        '1' { AddTask }
        '2' { ShowTasks }
        '3' { RemoveTask }
        '4' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
} while ($choice -ne '4')
</code></pre>



<p>これで、タスクの削除機能が追加されました。実際にプログラムを実行して、タスクの追加、表示、削除が正しく動作するか確認してみましょう。</p>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h3 class="wp-block-heading"><span id="toc20">動作確認</span></h3>



<p>実際に動かしてみます。</p>



<pre class="wp-block-code"><code># タスクの配列を宣言
$tasks = @()

# タスクの追加機能
function AddTask {
    $task = Read-Host "追加したいタスクを入力してください"
    $script:tasks += $task
    Write-Host "$task がToDoリストに追加されました。"
}

# タスクの表示機能
function ShowTasks {
    Write-Host "現在のタスク一覧:"
    for ($i=0; $i -lt $script:tasks.Length; $i++) {
        Write-Host ("&#91;" + ($i + 1) + "] " + $script:tasks&#91;$i])
    }
}

# タスクの削除機能
function RemoveTask {
    # 現在のタスク一覧を表示
    ShowTasks

    # ユーザーに削除したいタスクの番号を入力させる
    $index = Read-Host "削除したいタスクの番号を入力してください"

    # 入力された番号が有効な範囲内にあるかを確認
    if ($index -ge 1 -and $index -le $script:tasks.Length) {
        # 選択された番号のタスクを取得
        $removedTask = $script:tasks&#91;$index-1]

        # タスクが1つだけの場合、タスクの配列を空にする
        if ($script:tasks.Length -eq 1) {
            $script:tasks = @()
        } 
        # 最初のタスクを削除する場合
        elseif ($index -eq 1) {
            $script:tasks = $script:tasks&#91;1..($script:tasks.Length-1)]
        } 
        # 最後のタスクを削除する場合
        elseif ($index -eq $script:tasks.Length) {
            $script:tasks = $script:tasks&#91;0..($index-2)]
        } 
        # 最初や最後以外のタスクを削除する場合
        else {
            $script:tasks = $script:tasks&#91;0..($index-2)] + $script:tasks&#91;$index..($script:tasks.Length-1)]
        }

        # 削除されたタスクの情報を表示
        Write-Host "$removedTask がToDoリストから削除されました。"
    } else {
        # 無効な番号が入力された場合のメッセージを表示
        Write-Host "無効な番号です。再度選択してください。"
    }
}

# メニュー表示
do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: タスク削除, 4: 終了)"
    switch ($choice) {
        '1' { AddTask }
        '2' { ShowTasks }
        '3' { RemoveTask }
        '4' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
} while ($choice -ne '4')
</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-31.png" alt="" class="wp-image-263" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-31.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-31-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>出来ましたよ！</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>おお、早いね</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc21">まとめ</span></h2>



<h3 class="wp-block-heading"><span id="toc22">今回学んだ内容のまとめ</span></h3>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>ToDoリストの削除機能</strong>: タスクを効率的に管理するための重要な機能として、タスクの削除機能を実装しました。</li>



<li><strong>PowerShellの基本的な制御構造</strong>: <code>if</code>, <code>elseif</code>, および <code>else</code> を使用して条件に基づく処理の流れを制御する方法を学びました。</li>



<li><strong>配列の操作</strong>: PowerShellでの配列のスライスと結合を利用して、特定のタスクを削除する方法を習得しました。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc23">次回について</span></h3>



<p>次回は、ToDoリストのデータを永続的に保存するための「データ永続性」と、ファイル操作に関する基本的な知識を学びます。これにより、プログラムを終了してもタスクのデータが失われないようにする方法や、外部のファイルとのデータのやり取りについて学ぶことができます。PowerShellでのプログラミングの幅がさらに広がる内容となっておりますので、お楽しみに！</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>次のステップへ進む</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/improvement-a-todo-list-part-1/" title="「PowerShellでToDoリストを改善する - Part 1: データ永続性とファイル操作」を読む">「PowerShellでToDoリストを改善する &#8211; Part 1: データ永続性とファイル操作」を読む</a></p>



<p>&#x1f539; <strong>全体像の確認（ToDoリスト作成）</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/" title="「PowerShellを活用したToDoリスト作成の全手順」を見る">「PowerShellを活用したToDoリスト作成の全手順」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/make-a-todo-list-part-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShellでToDoリストを作る &#8211; Part 3: タスクの表示機能とメニュー表示機能の実装</title>
		<link>https://nekomichi-coder.com/make-a-todo-list-part-3/</link>
					<comments>https://nekomichi-coder.com/make-a-todo-list-part-3/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Tue, 08 Aug 2023 06:44:49 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=236</guid>

					<description><![CDATA[今回の記事では、ToDoリストのタスク表示機能の実装と、その際に活用する配列の基本について学びます。 これまでの学びを振り返ると、Part 1ではPowerShellの起動方法や最初のスクリプトの実行方法を学びました。続 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>今回の記事では、ToDoリストのタスク表示機能の実装と、その際に活用する配列の基本について学びます。</p>



<p>これまでの学びを振り返ると、Part 1ではPowerShellの起動方法や最初のスクリプトの実行方法を学びました。続くPart 2では、タスクの追加機能を実装し、変数の使用方法を理解しました。これらの基本的な操作をマスターすることで、今回の内容に取り組む準備が整いました。</p>



<p>今回の記事を通じて、さらにPowerShellの魅力を深く理解し、プログラミングの楽しさを感じていただければ幸いです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>同じファイルを何度も更新するので、別のファイルとして保管しながら進めてね。</p>
</div></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10"><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">タスクの表示機能の実装</a><ol><li><a href="#toc2" tabindex="0">タスクの表示機能</a></li><li><a href="#toc3" tabindex="0">関数について</a></li></ol></li><li><a href="#toc4" tabindex="0">メニュー表示機能の実装</a><ol><li><a href="#toc5" tabindex="0">メニュー表示機能</a></li><li><a href="#toc6" tabindex="0">do-whileループについて</a></li><li><a href="#toc7" tabindex="0">switch文について</a></li></ol></li><li><a href="#toc8" tabindex="0">追加機能、表示機能、メニュー表示機能の統合</a></li><li><a href="#toc9" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">タスクの表示機能の実装</span></h2>



<h3 class="wp-block-heading"><span id="toc2">タスクの表示機能</span></h3>



<p>ToDoリストにタスクを追加することができるようになったので、次にそのタスクを表示する機能を実装します。この機能を実装することで、現在のタスクの一覧を確認することができるようになります。</p>



<p><strong>コード例:</strong></p>



<pre class="wp-block-code"><code># タスクの配列を宣言
$tasks = @("PowerShellの学習", "ブログ記事の執筆", "メールのチェック")

# タスクの表示機能
function ShowTasks {
    Write-Host "現在のタスク一覧:"
    foreach ($task in $tasks) {
        Write-Host ($task)
    }
}

# タスクの表示
ShowTasks
</code></pre>



<p><strong>コードの説明:</strong></p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>最初に、サンプルとして3つのタスクを持った配列<code>$tasks</code>を宣言しています。</li>



<li><code>ShowTasks</code>という関数を定義しています。この関数は、配列<code>$tasks</code>の中身を順番に表示する役割を持っています。</li>



<li><code>for</code>ループを使用して、配列の各要素を順番に取り出し、<code>Write-Host</code>コマンドを使用してコンソールに表示しています。この際、タスクのインデックスも一緒に表示して、どのタスクがどのインデックスに対応しているかをわかりやすくしています。</li>



<li>最後に、<code>ShowTasks</code>関数を呼び出して、タスクの一覧を表示しています。</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-29.png" alt="" class="wp-image-240" style="aspect-ratio:495/334" width="495" height="334" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-29.png 660w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-29-300x202.png 300w" sizes="(max-width: 495px) 100vw, 495px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-28.png" alt="" class="wp-image-239" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-28.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-28-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>このコードを実行すると、現在のタスク一覧がコンソールに表示されます。新たにタスクを追加したり、削除したりする機能を組み合わせることで、より実用的なToDoリストを作成することができます。</p>



<h3 class="wp-block-heading"><span id="toc3">関数について</span></h3>



<p><strong><span class="marker-under">PowerShellでは、特定の処理をまとめて再利用可能な形にするために「関数」を使用します。</span></strong>関数は、一連のコマンドをグループ化して名前を付け、その名前を使って何度でもそのコマンド群を実行することができます。</p>



<p><strong>関数の基本的な定義方法:</strong></p>



<pre class="wp-block-code"><code>function 関数名 {
    # 処理内容
}
</code></pre>



<p><strong>例:</strong></p>



<pre class="wp-block-code"><code>function Greet {
    Write-Host "Hello, PowerShell!"
}

# 関数の呼び出し
Greet
</code></pre>



<p>上記の例では、<code>Greet</code>という名前の関数を定義しています。この関数は、&#8221;Hello, PowerShell!&#8221;というメッセージをコンソールに表示する役割を持っています。関数を定義した後、関数名を使ってその関数を呼び出すことができます。</p>



<p>関数は、コードの再利用性を高めるだけでなく、コードの構造を整理し、読みやすくするための重要なツールとなります。<strong><span class="marker-under">特に、同じ処理を複数の場所で使用する場合や、複雑な処理を分割して管理する場合には、関数の利用が非常に有効です。</span></strong></p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box">
<p>Q.PowerShellでの関数の使用は、コードの再利用性をどのように向上させるのでしょうか？</p>



<p>A.<strong>関数は、特定の処理を一つの「箱」にまとめることができます。</strong>この「箱」を使うことで、同じ処理を何度も簡単に呼び出すことができます。これにより、コードの重複を避けることができ、<strong>プログラムがスッキリとします。</strong></p>
</div>



<h2 class="wp-block-heading"><span id="toc4">メニュー表示機能の実装</span></h2>



<h3 class="wp-block-heading"><span id="toc5">メニュー表示機能</span></h3>



<p>PowerShellを使用して、ユーザーに操作を選択させるメニューを表示する方法を紹介します。この<strong><span class="marker-under">メニュー表示機能は、ユーザーが複数の操作の中から選択を行い、その選択に応じて異なる処理を実行する際に非常に役立ちます。</span></strong></p>



<p>以下のソースコード部分が、メニュー表示機能の実装部分です。</p>



<pre class="wp-block-code"><code># メニュー表示
do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: 終了)"
    switch ($choice) {
        '1' { Write-Host "タスクを追加します。" }
        '2' { Write-Host "タスクを表示します。" }
        '3' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
#3以外の場合
} while ($choice -ne '3')
</code></pre>



<p><strong>メニュー表示機能の詳細:</strong></p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li><strong>操作の選択:</strong> <code>Read-Host</code>を使用して、ユーザーに操作を選択させます。選択された操作の番号が<code>$choice</code>変数に格納されます。</li>



<li><strong>選択に応じた処理の実行:</strong> <code>switch</code>文を使用して、<code>$choice</code>変数の値に応じて異なる処理を実行します。例えば、<code>1</code>が選択された場合は<code>AddTask</code>関数が呼び出され、タスクの追加処理が実行されます。</li>



<li><strong>繰り返し表示:</strong> <code>do-while</code>ループを使用して、ユーザーが「終了」を選択するまでメニューを繰り返し表示します。</li>
</ol>



<p>このメニュー表示機能を使用することで、ユーザーに直感的な操作を提供し、複数の機能を持つアプリケーションの操作を簡単にすることができます。</p>



<h3 class="wp-block-heading"><span id="toc6">do-whileループについて</span></h3>



<p><code>foreach</code>ループは、配列やコレクションの各要素を順番に取り出して処理するための繰り返し構文であるのに対して、<code>do-while</code>ループは、特定の条件が満たされている間、繰り返し処理を行うための構文です。</p>



<p><strong>基本的な構文:</strong></p>



<pre class="wp-block-code"><code>do {
    # 繰り返し実行する処理
} while (条件)
</code></pre>



<p>このループは、まず<code>do</code>ブロック内の処理を実行し、その後<code>while</code>の後に指定された条件を評価します。条件が<code>$true</code>であれば、再び<code>do</code>ブロックの処理を実行します。この繰り返しは、条件が<code>$false</code>になるまで続きます。</p>



<p><strong>特徴:</strong></p>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><code>do-while</code>ループは、条件が最初から<code>$false</code>であっても、<code>do</code>ブロックの処理は必ず1回は実行されます。</li>



<li>条件の評価は、<code>do</code>ブロックの処理が完了した後に行われるため、ループの中で条件を変更することができます。</li>
</ul>



<p><strong>例:</strong></p>



<pre class="wp-block-code"><code>$count = 0

do {
    Write-Host "繰り返し処理を実行中: $count 回目"
    $count++
} while ($count -lt 5)
</code></pre>



<p>このコードは、&#8221;繰り返し処理を実行中&#8221;というメッセージを5回表示します。<code>$count</code>変数の値が5未満である間、<code>do-while</code>ループは繰り返し実行されます。</p>



<h3 class="wp-block-heading"><span id="toc7">switch文について</span></h3>



<p>PowerShellにおける<code>switch</code>文は、一つの変数の値に応じて複数の処理を分岐させるための構文です。条件分岐の構文は他にif文を用いることが出来ますが、<code>switch</code>文は特に多くの条件を持つ場合に読みやすく、効率的にコードを書くことができます。</p>



<p>以下のソースコード部分が、<code>switch</code>文の使用例です。</p>



<pre class="wp-block-code"><code>switch ($choice) {
    '1' { AddTask }
    '2' { ShowTasks }
    '3' { Write-Host "プログラムを終了します。"; break }
    default { Write-Host "無効な選択です。再度選択してください。" }
}
</code></pre>



<p><strong><code>switch</code>文の詳細:</strong></p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li><strong>条件の指定:</strong> <code>switch</code>文の後に括弧<code>()</code>内に条件となる変数や値を指定します。この例では<code>$choice</code>変数の値を条件としています。</li>



<li><strong>各ケースの処理:</strong> 波括弧<code>{}</code>内に、それぞれのケースに対応する処理を記述します。この例では、<code>$choice</code>の値が<code>1</code>の場合、<code>AddTask</code>関数が呼び出されます。</li>



<li><strong>デフォルトの処理:</strong> <code>default</code>キーワードを使用して、上記のケースに該当しない場合の処理を記述します。この例では、無効な選択がされた場合にメッセージを表示しています。</li>
</ol>



<p><code>switch</code>文を使用することで、複数の条件分岐を明確に、そして簡潔に記述することができます。特に、多くの条件を持つ場合や、特定の値に応じて異なる処理を行いたい場合に非常に役立ちます。</p>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 class="wp-block-heading"><span id="toc8">追加機能、表示機能、メニュー表示機能の統合</span></h2>



<p>ここまで学んできた内容を元に、追加と表示機能を持つToDoリストを作成してみましょう。<br>以下のソースコードを参考に、各機能の詳細について説明します。</p>



<pre class="wp-block-code"><code># タスクの配列を宣言
$tasks = @()

# タスクの追加機能
function AddTask {
    $task = Read-Host "追加したいタスクを入力してください"
    $script:tasks += $task
    Write-Host "$task がToDoリストに追加されました。"
}

# タスクの表示機能
function ShowTasks {
    Write-Host "現在のタスク一覧:"
    foreach ($task in $script:tasks) {
        Write-Host ($task)
    }
}

# メニュー表示
do {
    $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: 終了)"
    switch ($choice) {
        '1' { AddTask }
        '2' { ShowTasks }
        '3' { Write-Host "プログラムを終了します。"; break }
        default { Write-Host "無効な選択です。再度選択してください。" }
    }
} while ($choice -ne '3')

</code></pre>



<p><strong>ソースコードの説明:</strong></p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li><strong>タスクの配列の宣言:</strong> <code>$tasks</code>という変数に初期タスクの配列を代入しています。<br>※2.と3.では、この配列に対してデータを追加したり表示したりしています。<br>関数内で$tasksとしても、関数の外側に変数がありせっかく宣言した配列を参照することができません。$script:tasksとし参照範囲を変えています。</li>



<li><strong>タスクの追加機能:</strong> <code>AddTask</code>関数を定義しており、この関数を呼び出すとユーザーに新しいタスクの入力を求め、入力されたタスクを<code>$tasks</code>配列に追加します。</li>



<li><strong>タスクの表示機能:</strong> <code>ShowTasks</code>関数を定義しており、この関数を呼び出すと<code>$tasks</code>配列の中身を一覧表示します。</li>



<li><strong>メニュー表示:</strong> <code>do-while</code>ループを使用して、ユーザーに操作を選択させるメニューを表示しています。ユーザーが「終了」を選択するまで、このメニューは繰り返し表示されます。</li>
</ol>



<figure class="wp-block-image size-full"><img decoding="async" width="739" height="512" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-30.png" alt="" class="wp-image-243" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-30.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-30-300x208.png 300w" sizes="(max-width: 739px) 100vw, 739px" /></figure>



<p>このソースコードを使用することで、簡単にタスクの追加や表示ができるToDoリストをPowerShellで実装することができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>このソースコードを次回以降も使っていくよ。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc9">まとめ</span></h2>



<p>今回は、ToDoリストのタスク表示機能、メニュー表示機能の実装と、その際に活用する配列の基本について学びました。これまでのPart 1とPart 2の内容を踏まえ、さらに実践的なスキルを身につけることができました。</p>



<p>次回の記事では、ToDoリストのさらなる機能拡張に挑戦します。タスクの削除機能について詳しく解説します。</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>次のステップへ進む</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/make-a-todo-list-part-4/" title="「PowerShellでToDoリストを作る - Part 4: タスクの削除機能の追加」を読む">「PowerShellでToDoリストを作る &#8211; Part 4: タスクの削除機能の追加」を読む</a></p>



<p>&#x1f539; <strong>全体像の確認（ToDoリスト作成）</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/" title="「PowerShellを活用したToDoリスト作成の全手順」を見る">「PowerShellを活用したToDoリスト作成の全手順」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/make-a-todo-list-part-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShellでToDoリストを作る &#8211; Part 2: タスクの追加機能と変数の使用</title>
		<link>https://nekomichi-coder.com/make-a-todo-list-part-2/</link>
					<comments>https://nekomichi-coder.com/make-a-todo-list-part-2/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Tue, 08 Aug 2023 04:33:34 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=186</guid>

					<description><![CDATA[この記事では、PowerShellを用いてToDoリストの作成方法を学び、その後の学習の展望についても触れています。一緒に、プログラミングの第一歩を踏み出しましょう。 目次 「ToDoList.ps1」の作成方法新しいス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>この記事では、PowerShellを用いてToDoリストの作成方法を学び、その後の学習の展望についても触れています。一緒に、プログラミングの第一歩を踏み出しましょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12"><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">「ToDoList.ps1」の作成方法</a><ol><li><a href="#toc2" tabindex="0">新しいスクリプトファイルの作成</a></li><li><a href="#toc3" tabindex="0">スクリプトの編集方法</a><ol><li><a href="#toc4" tabindex="0">メモ帳を使用</a></li><li><a href="#toc5" tabindex="0">Windows PowerShell ISEを使用</a></li><li><a href="#toc6" tabindex="0">動作確認の事前準備</a></li></ol></li><li><a href="#toc7" tabindex="0">「ToDoList.ps1」の実行方法</a><ol><li><a href="#toc8" tabindex="0">PowerShellコンソール上で実行</a></li><li><a href="#toc9" tabindex="0">「Windows PowerShell ISE」コンソール上で実行</a></li><li><a href="#toc10" tabindex="0">注意点</a><ol><li><a href="#toc11" tabindex="0">実行が無効になっている旨のエラー表示</a></li><li><a href="#toc12" tabindex="0">文字化け表示</a></li></ol></li></ol></li></ol></li><li><a href="#toc13" tabindex="0">ToDoリストにタスクを追加する機能の実装</a><ol><li><a href="#toc14" tabindex="0">タスクの入力を受け付ける変数の作成</a></li><li><a href="#toc15" tabindex="0">入力されたタスクを配列に保存</a></li><li><a href="#toc16" tabindex="0">タスクの追加確認メッセージの表示</a></li></ol></li><li><a href="#toc17" tabindex="0">変数の活用とその重要性</a><ol><li><a href="#toc18" tabindex="0">PowerShellにおける変数の役割</a></li><li><a href="#toc19" tabindex="0">タスク管理における変数の利点</a></li><li><a href="#toc20" tabindex="0">変数を使ったデータの一時保存と取り出し</a></li></ol></li><li><a href="#toc21" tabindex="0">まとめと次回予告</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">「ToDoList.ps1」の作成方法</span></h2>



<h3 class="wp-block-heading"><span id="toc2">新しいスクリプトファイルの作成</span></h3>



<p>前回はPowerShellのコンソール上でコードを実行していましたが、<strong>あらかじめファイルにコードを記述し実行することも出来ます。</strong></p>



<p>１．作業用のフォルダ「work」を作成し、テキストファイルを新規作成します。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-14.png" alt="" class="wp-image-193" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-14.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-14-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-14-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-14-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<p>２．ファイル名を「ToDoList.ps1」に変更します。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-13.png" alt="" class="wp-image-192" style="aspect-ratio:527/299" width="527" height="299" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-13.png 703w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-13-300x170.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-13-120x68.png 120w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-13-160x90.png 160w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<p><strong>拡張子「.ps1」はPowerShellスクリプトを示すもので、この拡張子を持つファイルはPowerShellで実行可能です。</strong>保存する際は、アクセスしやすい場所、例えばデスクトップや専用のフォルダに保存すると良いでしょう。</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box">
<p>「.txt」が表示されていない場合：<br>[表示]タブー「ファイル名拡張子」にチェックをつけてください。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-56.png" alt="" class="wp-image-410" style="aspect-ratio:461/283" width="461" height="283" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-56.png 810w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-56-300x184.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-56-768x471.png 768w" sizes="(max-width: 461px) 100vw, 461px" /></figure>
</div>



<h3 class="wp-block-heading"><span id="toc3">スクリプトの編集方法</span></h3>



<h4 class="wp-block-heading"><span id="toc4">メモ帳を使用</span></h4>



<ol class="has-ex-a-background-color has-background wp-block-list">
<ol class="has-ex-a-background-color has-background wp-block-list">
<li>スタートメニューを開き、「メモ帳」と入力します。</li>



<li>検索結果に表示された「メモ帳」をクリックします。</li>



<li>「メモ帳」画面に「ToDoList.ps1」をドラッグアンドドロップします。</li>
</ol>
</ol>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-57.jpg" alt="" class="wp-image-414" style="aspect-ratio:398/345" width="398" height="345" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-57.jpg 640w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-57-300x260.jpg 300w" sizes="(max-width: 398px) 100vw, 398px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-58.png" alt="" class="wp-image-418" style="aspect-ratio:530/307" width="530" height="307" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-58.png 713w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-58-300x174.png 300w" sizes="(max-width: 530px) 100vw, 530px" /></figure>



<h4 class="wp-block-heading"><span id="toc5">Windows PowerShell ISEを使用</span></h4>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>スタートメニューを開き、「PowerShell」と入力します。</li>



<li>検索結果に表示された「Windows PowerShell ISE」をクリックします。</li>



<li>「Windows PowerShell ISE」画面に「ToDoList.ps1」をドラッグアンドドロップします。</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15-1.jpg" alt="" class="wp-image-195" style="aspect-ratio:389/337" width="389" height="337" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15-1.jpg 777w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15-1-300x260.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15-1-768x665.jpg 768w" sizes="(max-width: 389px) 100vw, 389px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15.png" alt="" class="wp-image-196" style="aspect-ratio:500/262" width="500" height="262" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15.png 1000w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15-300x157.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-15-768x402.png 768w" sizes="(max-width: 500px) 100vw, 500px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-16.png" alt="" class="wp-image-197" style="aspect-ratio:500/262" width="500" height="262" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-16.png 1000w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-16-300x157.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-16-768x402.png 768w" sizes="(max-width: 500px) 100vw, 500px" /></figure>



<h4 class="wp-block-heading"><span id="toc6">動作確認の事前準備</span></h4>



<p>本サイトではメモ帳を使用します。<br>実行の成否を確認するため、以下の記述をします。</p>



<pre class="wp-block-code"><code>#コンソール出力
Write-Host "これはテストです。"

#待機
pause
</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-18.png" alt="" class="wp-image-203" style="aspect-ratio:501/271" width="501" height="271" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-18.png 1002w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-18-300x162.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-18-768x415.png 768w" sizes="(max-width: 501px) 100vw, 501px" /></figure>



<h3 class="wp-block-heading"><span id="toc7">「ToDoList.ps1」の実行方法</span></h3>



<h4 class="wp-block-heading"><span id="toc8">PowerShellコンソール上で実行</span></h4>



<p>コンソール上に「ToDoList.ps1」をドラッグアンドドロップして[Enter]キーを押下します。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-21.png" alt="" class="wp-image-216" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-21.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-21-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<h4 class="wp-block-heading"><span id="toc9">「Windows PowerShell ISE」コンソール上で実行</span></h4>



<p>画面上部の「スクリプトを実行」ボタンをクリックします。<br>ショートカット（「F5」キー）でも実行出来ます。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-22.png" alt="" class="wp-image-217" style="aspect-ratio:731/560" width="731" height="560" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-22.png 975w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-22-300x230.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-22-768x588.png 768w" sizes="(max-width: 731px) 100vw, 731px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-23.png" alt="" class="wp-image-218" style="aspect-ratio:731/560" width="731" height="560" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-23.png 975w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-23-300x230.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-23-768x588.png 768w" sizes="(max-width: 731px) 100vw, 731px" /></figure>



<h4 class="wp-block-heading"><span id="toc10">注意点</span></h4>



<h5 class="wp-block-heading"><span id="toc11">実行が無効になっている旨のエラー表示</span></h5>



<p><span class="bold-red">スクリプトの実行が無効になっている旨のエラーが表示された場合、実行許可の権限を与える必要があります。</span></p>



<p>常に実行可能することも出来ますがセキュリティリスクが高まるため、ここでは一時的に実行権限を与える方法を紹介します。（画面を開きなおす度に、都度設定する必要があります。）</p>



<p>【参考】：<br><a rel="noopener" target="_blank" href="https://cheshire-wara.com/powershell/ps-cmdlets/sequrity/set-executionpolicy-process/">【Set-ExecutionPolicy】PowerShellで実行ポリシーを「一時的」に変更するテクニック</a></p>



<pre class="wp-block-code"><code>#今開いているPowerShellウィンドウに対して実行権限をRemoteSignedに変更
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
#「はい（y）」で応答</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-20.png" alt="" class="wp-image-212" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-20.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-20-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>＜エラー例＞</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-19.png" alt="" class="wp-image-205" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-19.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-19-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<h5 class="wp-block-heading"><span id="toc12">文字化け表示</span></h5>



<p>「ToDoList.ps1」の文字コードがUTF-8等になっていることが考えられます。<br>文字コードを変更してください。</p>



<p>メモ帳で当該ファイルを開き、名前をつけて保存から文字コードを「ANSI」に変更し「保存」ボタンをクリックしてください。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-60.png" alt="" class="wp-image-422" style="aspect-ratio:500/301" width="500" height="301" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-60.png 786w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-60-300x181.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-60-768x462.png 768w" sizes="(max-width: 500px) 100vw, 500px" /></figure>



<p>＜エラー例＞</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-59.png" alt="" class="wp-image-421" style="aspect-ratio:482/334" width="482" height="334" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-59.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-59-300x208.png 300w" sizes="(max-width: 482px) 100vw, 482px" /></figure>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 class="wp-block-heading"><span id="toc13">ToDoリストにタスクを追加する機能の実装</span></h2>



<h3 class="wp-block-heading"><span id="toc14">タスクの入力を受け付ける変数の作成</span></h3>



<p>まず、<strong>ユーザーからタスクの入力を受け付けるための変数を作成します。</strong>以下のコードを使用して、タスクの入力を<code>$task</code>という変数に保存します。</p>



<pre class="wp-block-code"><code>$task = Read-Host "追加したいタスクを入力してください"
</code></pre>



<p>このコードを実行すると、ユーザーにタスクの入力を促すメッセージが表示され、入力された内容が<code>$task</code>変数に保存されます。</p>



<h3 class="wp-block-heading"><span id="toc15">入力されたタスクを配列に保存</span></h3>



<p>次に、<strong>入力されたタスクを配列に保存します。</strong>タスクを管理するための配列<code>$tasks</code>を事前に作成し、入力されたタスクをこの配列に追加します。</p>



<pre class="wp-block-code"><code>$tasks += $task
</code></pre>



<p>このコードにより、<code>$tasks</code>配列に新しいタスクが追加されます。</p>



<h3 class="wp-block-heading"><span id="toc16">タスクの追加確認メッセージの表示</span></h3>



<p>タスクが正しく追加されたことをユーザーに知らせるため、<strong>確認メッセージを表示します。</strong></p>



<pre class="wp-block-code"><code>Write-Host "$task がToDoリストに追加されました。"
</code></pre>



<p>このコードを実行すると、例えば「買い物」というタスクを入力した場合、「買い物 がToDoリストに追加されました。」というメッセージが表示されます。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-54.png" alt="" class="wp-image-400" style="aspect-ratio:551/407" width="551" height="407" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-54.png 807w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-54-300x222.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-54-768x567.png 768w" sizes="(max-width: 551px) 100vw, 551px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-25.png" alt="" class="wp-image-223" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-25.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-25-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<h2 class="wp-block-heading"><span id="toc17">変数の活用とその重要性</span></h2>



<p>このセクションでは、あらためて変数について説明します。</p>



<h3 class="wp-block-heading"><span id="toc18">PowerShellにおける変数の役割</span></h3>



<p>PowerShellにおける変数は、データを一時的に保存するための容器のようなものです。変数には数値、文字列、オブジェクトなど、さまざまなデータを格納することができます。<strong><span class="marker-under">変数を使用することで、スクリプト内でデータを繰り返し利用したり、データを加工・変換したりすることが容易になります。</span></strong></p>



<h3 class="wp-block-heading"><span id="toc19">タスク管理における変数の利点</span></h3>



<p>タスク管理のスクリプトにおいて、変数は非常に重要な役割を果たします。例えば、<strong>ユーザーからの入力を変数に保存することで、その入力を後の処理で再利用することができます。</strong>また、タスクのリストを配列という形の変数に保存することで、タスクの追加や削除、表示などの操作を効率的に行うことができます。</p>



<h3 class="wp-block-heading"><span id="toc20">変数を使ったデータの一時保存と取り出し</span></h3>



<p><strong>変数はデータの一時保存に非常に便利です。</strong>例えば、<code>$task</code>という変数にユーザーの入力を保存し、後でその変数を利用してタスクを配列に追加することができます。また、配列に保存されたタスクを取り出す際も、変数を利用して特定のタスクを参照・操作することができます。<strong>変数を活用することで、データの取り扱いが非常に柔軟かつ効率的になります。</strong></p>



<h2 class="wp-block-heading"><span id="toc21">まとめと次回予告</span></h2>



<p>今回の記事では、PowerShellを用いてToDoリストの基本的な作成方法を学びました。具体的には、「ToDoList.ps1」の作成方法、タスクの追加機能の実装、そして変数の活用とその重要性について詳しく解説しました。これらの知識を基に、実際に自分の手でプログラムを作成することで、プログラミングの基本をより深く理解することができるでしょう。</p>



<p>次回の記事では、ToDoリストのさらなる機能拡張に挑戦します。タスクの表示機能や、配列を活用したタスクの管理方法について詳しく解説します。</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>次のステップへ進む</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/make-a-todo-list-part-3/" title="「PowerShellでToDoリストを作る – Part 3: タスクの表示機能とメニュー表示機能の実装」を読む">「PowerShellでToDoリストを作る – Part 3: タスクの表示機能とメニュー表示機能の実装」を読む</a></p>



<p>&#x1f539; <strong>全体像の確認（ToDoリスト作成）</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/" title="「PowerShellを活用したToDoリスト作成の全手順」を見る">「PowerShellを活用したToDoリスト作成の全手順」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/make-a-todo-list-part-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShellでToDoリストを作る &#8211; Part 1: PowerShellの起動と最初のスクリプトの実行</title>
		<link>https://nekomichi-coder.com/make-a-todo-list-part-1/</link>
					<comments>https://nekomichi-coder.com/make-a-todo-list-part-1/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Mon, 07 Aug 2023 11:37:25 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=103</guid>

					<description><![CDATA[プログラミングの世界へようこそ。今回は、初心者でも手軽に始められるプログラミング言語、PowerShellについて学んでいきましょう。 PowerShellとは、Microsoftが開発したスクリプト言語で、Window [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>プログラミングの世界へようこそ。今回は、初心者でも手軽に始められるプログラミング言語、PowerShellについて学んでいきましょう。</p>



<p>PowerShellとは、Microsoftが開発したスクリプト言語で、Windowsの管理を自動化するための強力なツールです。しかし、その機能はそれだけにとどまらず、一般的なプログラミング言語としての機能も備えています。そのため、システム管理だけでなく、様々なタスクの自動化や独自のプログラムの作成にも利用できます。</p>



<p><strong><span class="marker-under">初心者にとってPowerShellの魅力は、Windowsに標準でインストールされているため、すぐに始められる点です。</span></strong>また、シンプルながらも強力な機能を持つため、<strong>基本的なプログラミングの概念を学びながら、実際に役立つスクリプトを作成することができます。</strong></p>



<p>このサイト「PowerShellで始める!プログラミング初心者のための実践ガイド」では、PowerShellを用いたミニマムなプログラム作成の経験を通じて、プログラミングの理解を深める方法を紹介します。<strong>具体的なコードを示しながら、プログラミングの基本概念をわかりやすく解説します。</strong></p>



<p>今回の記事では、PowerShellとその開発環境について紹介し、基本的な概念と構文を説明します。そして、それらの知識を活かして、最初のプログラム、すなわちToDoリストを作成する基礎を学んでいきます。</p>



<p>プログラミングに興味がありながらも自分が向いているかどうか不安を感じ、足踏みしているあなたに、この記事が一歩を踏み出すきっかけになれば幸いです。</p>



<p>それでは、一緒にPowerShellの世界を探索していきましょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14"><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">PowerShellの起動と最初のスクリプトの実行</a></li><li><a href="#toc2" tabindex="0">PowerShellの基本概念と構文</a><ol><li><a href="#toc3" tabindex="0">変数</a></li><li><a href="#toc4" tabindex="0">配列</a></li><li><a href="#toc5" tabindex="0">ループ</a></li><li><a href="#toc6" tabindex="0">条件分岐</a></li></ol></li><li><a href="#toc7" tabindex="0">ToDoリストの作成に向けて</a><ol><li><a href="#toc8" tabindex="0">タスクの追加</a></li><li><a href="#toc9" tabindex="0">タスクの一覧表示</a></li></ol></li><li><a href="#toc10" tabindex="0">まとめと次回予告</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">PowerShellの起動と最初のスクリプトの実行</span></h2>



<p>PowerShellはWindowsに標準でインストールされているため、特別な設定は必要ありません。それでは、早速PowerShellを起動し、最初のスクリプトを書いてみましょう。</p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>スタートメニューを開き、「PowerShell」と入力します。</li>



<li>検索結果に表示された「Windows PowerShell」をクリックします。</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-6-1.jpg" alt="" class="wp-image-151" style="aspect-ratio:390/340" width="390" height="340" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-6-1.jpg 780w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-6-1-300x262.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-6-1-768x670.jpg 768w" sizes="(max-width: 390px) 100vw, 390px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-2.png" alt="" class="wp-image-108" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-2.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-2-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>これでPowerShellのコンソール画面が開きます。ここが私たちがコードを書き、実行する場所です。</p>



<p>それでは、最初のスクリプトを書いてみましょう。PowerShellでは、「Hello, World!」と表示するためには以下のように入力します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>先頭が「#」の行はコメント行だから、入力しなくても動作するよ。</p>



<p>うまく動かない時は記事のソースをコピーして見比べてみてね。</p>
</div></div>



<pre class="wp-block-code"><code>#コンソール出力
Write-Host "Hello, World!"</code></pre>



<p>「Write-Host」はコンソールに出力するコマンド、「&#8221;&#8221;」は出力する文字列です。<br>このコードをPowerShellのコンソールに入力し、エンターキーを押すと、「Hello, World!」と表示されます。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-3.png" alt="" class="wp-image-109" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-3.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-3-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>おめでとうございます！これであなたは、PowerShellで最初のスクリプトを書き、実行することができました。</p>



<h2 class="wp-block-heading"><span id="toc2">PowerShellの基本概念と構文</span></h2>



<p>それでは、PowerShellの基本的な概念と構文について学んでいきましょう。ここで学ぶ概念は、他のプログラミング言語でも共通して使われるものですので、しっかりと理解しておきましょう。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>ここでは基本的な構文をみていくよ。</p>



<p>画面をきれいにしたい時は開きなおしてね。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc3">変数</span></h3>



<p><strong>変数は、データを一時的に保存するための箱のようなものです。</strong>PowerShellでは、変数名の前に「<code>$」</code>記号をつけることで変数を定義します。「<code>$</code>」は「Shift」+「F4」キーで入力できます。以下に、変数を使ったコードの例を示します。</p>



<pre class="wp-block-code"><code>#変数 ← 値（文字列）
$name = "Takeshi"

#コンソール出力
Write-Host "Hello, $name!"</code></pre>



<p>このコードでは、<code>$name</code>という変数に<code>"Takeshi"</code>という文字列を代入し、それを表示しています。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-4.png" alt="" class="wp-image-130" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-4.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-4-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<h3 class="wp-block-heading"><span id="toc4">配列</span></h3>



<p><strong>配列は、複数のデータを一つの変数で管理するための構造です。</strong>PowerShellでは、<code>@()</code>を使って配列を定義します。以下に、配列を使ったコードの例を示します。</p>



<pre class="wp-block-code"><code>#変数　←　値（配列）
$numbers = @(1, 2, 3, 4, 5)

#コンソール出力
Write-Host "配列の中身:"$numbers</code></pre>



<p>配列では、保持した値を別々に扱うことが出来ます。配列の要素は0番目から始まります。</p>



<pre class="wp-block-code"><code>#コンソール出力
Write-Host "配列の1番目:" $numbers&#91;0]
Write-Host "配列の2番目:" $numbers&#91;1]
Write-Host "配列の3番目:" $numbers&#91;2]
Write-Host "配列の4番目:" $numbers&#91;3]
Write-Host "配列の5番目:" $numbers&#91;4]</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-5.png" alt="" class="wp-image-139" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-5.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-5-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<h3 class="wp-block-heading"><span id="toc5">ループ</span></h3>



<p><strong>ループは、同じ処理を繰り返し行うための構造です。</strong>ここでは、「foreach」を使ってループを作成します。以下に、ループを使ったコードの例を示します。</p>



<pre class="wp-block-code"><code>#変数　←　値（配列）
$numbers = @(1, 2, 3, 4, 5)

#$numbersの要素を1つずつ$numberに代入する。{}内の処理を要素の数だけ繰り返す。
foreach ($number in $numbers) {
    #コンソール出力
    Write-Host $number
}
</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-6.png" alt="" class="wp-image-157" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-6.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-6-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>このコードでは、<code>$numbers</code>の各要素に対して、その数値を表示する処理を繰り返しています。</p>



<h3 class="wp-block-heading"><span id="toc6">条件分岐</span></h3>



<p>通常、処理は上から下へ、順番に処理されます。<br><strong>条件分岐を使用することで、条件によって処理を分けることが出来ます。</strong></p>



<p>ここでは、「if」を使って条件分岐を作成します。以下に、条件分岐を使ったコードの例を示します。</p>



<pre class="wp-block-code"><code>#変数　←　値（数値）
$number = 10

#$numberの値が5より大きい場合
if ($number -gt 5) {
    #コンソール出力
    Write-Host "値は5より大きいです。"
#上記の条件以外の場合
} else {
    #コンソール出力
    Write-Host "値は5以下です。"
}
</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-7.png" alt="" class="wp-image-166" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-7.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-7-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>このコードでは、<code>$number</code>が5より大きい場合とそうでない場合で表示するメッセージを変えています。<br>例えば、<code>$number</code>を3に書き換えると「値は5以下です。」とコンソールに出力されます。</p>



<p>以上が、PowerShellの基本的な概念と構文です。これらを理解し、使いこなせるようになると、より複雑なプログラムも書けるようになります。</p>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 class="wp-block-heading"><span id="toc7">ToDoリストの作成に向けて</span></h2>



<p>それでは、具体的なプロジェクト、すなわちToDoリストの作成に向けて進んでいきましょう。<br>詳しくは次回以降のStepで解説します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4668-150x150.jpeg" alt="上司" class="speech-icon-image"/></figure><div class="speech-name">上司</div></div><div class="speech-balloon">
<p>ToDoリストを作ってくれないかな？</p>
</div></div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/IMG_4667-150x150.jpeg" alt="猫道" class="speech-icon-image"/></figure><div class="speech-name">猫道</div></div><div class="speech-balloon">
<p>任せてください！簡単に作れますよ。</p>
</div></div>
</div>



<p>ToDoリストを作成するためには、最低限以下の2つの機能が必要です。</p>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>タスクの追加</li>



<li>タスクの一覧表示</li>
</ol>



<p>それでは、これらの機能を実現するためのPowerShellの構文を見ていきましょう。<br>詳しくは次回以降扱うため、ここでは参考程度に留めてください。</p>



<h3 class="wp-block-heading"><span id="toc8">タスクの追加</span></h3>



<p>タスクの追加は、変数と配列を使って実現できます。以下に、タスクを追加するコードの例を示します。</p>



<p>「Read-Host」はユーザ入力を受け付けるコマンドです。「&#8221;&#8221;」内には、入力を促すメッセージを設定します。</p>



<pre class="wp-block-code"><code>#変数　←値（配列）の初期化（値なし）
$tasks = @()

#入力された文字列を変数$taskに代入する
$task = Read-Host "タスクを入力してください。"

#$taskを$tasks配列に追加する
$tasks += $task</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-9.png" alt="" class="wp-image-172" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-9.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-9-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>このコードでは、<code>$tasks</code>という配列に、ユーザーが入力したタスクを追加しています。</p>



<h3 class="wp-block-heading"><span id="toc9">タスクの一覧表示</span></h3>



<p>タスクの一覧表示は、ループを使って実現できます。以下に、タスクを一覧表示するコードの例を示します。</p>



<pre class="wp-block-code"><code>#$tasksの要素を1つずつ$iに代入して要素数分繰り返す
foreach ($i in $tasks) {
    #コンソール出力
    Write-Host $i
}
</code></pre>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-10.png" alt="" class="wp-image-173" style="aspect-ratio:554/384" width="554" height="384" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-10.png 739w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-10-300x208.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<p>このコードでは、<code>$tasks</code>の各要素（タスク）を表示しています。</p>



<p>以上が、ToDoリスト作成に必要な基本的な機能と、それを実現するためのPowerShellの構文です。次回は、これらの機能を組み合わせて、実際のToDoリストを作成していきます。</p>



<h2 class="wp-block-heading"><span id="toc10">まとめと次回予告</span></h2>



<p>今回の記事では、PowerShellの基本的な概念と構文、そしてToDoリスト作成に向けた準備を学びました。PowerShellの起動方法から、変数、配列、ループ、条件分岐といった基本的な概念、そしてToDoリスト作成に必要な基本的な機能について学びました。</p>



<p>次回の記事では、これらの知識を活かして、実際にToDoリストを作成していきます。具体的には、タスクの追加機能と変数の使用について詳しく学んでいきます。PowerShellで自分だけのToDoリストを作成する経験は、プログラミングの理解を深め、自信をつける大きな一歩となるでしょう。</p>



<p>あなたも一緒に、PowerShellでプログラミングの世界を探索してみませんか？今回学んだことを復習しながら、次回の記事をお楽しみにしていてください。</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>次のステップへ進む</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/make-a-todo-list-part-2/" title="「PowerShellでToDoリストを作る - Part 2: タスクの追加機能と変数の使用」を読む">「PowerShellでToDoリストを作る &#8211; Part 2: タスクの追加機能と変数の使用」を読む</a></p>



<p>&#x1f539; <strong>全体像の確認（ToDoリスト作成）</strong><br>&#x1f517; <a href="https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/" title="「PowerShellを活用したToDoリスト作成の全手順」を見る">「PowerShellを活用したToDoリスト作成の全手順」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/make-a-todo-list-part-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShellを活用したToDoリスト作成の全手順</title>
		<link>https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/</link>
					<comments>https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/#respond</comments>
		
		<dc:creator><![CDATA[猫道]]></dc:creator>
		<pubDate>Mon, 07 Aug 2023 04:13:33 +0000</pubDate>
				<category><![CDATA[ToDoリスト作成]]></category>
		<guid isPermaLink="false">https://nekomichi-coder.com/?p=46</guid>

					<description><![CDATA[目次 はじめに: 本記事の目的と内容なぜToDoリストなのか?この記事で得られるものステップ1: 基本概念の紹介PowerShell画面の起動方法基本的なコマンドと概念の紹介詳細なガイドステップ2: ToDoリストの基本 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16"><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに: 本記事の目的と内容</a><ol><li><a href="#toc2" tabindex="0">なぜToDoリストなのか?</a></li><li><a href="#toc3" tabindex="0">この記事で得られるもの</a></li></ol></li><li><a href="#toc4" tabindex="0">ステップ1: 基本概念の紹介</a><ol><li><a href="#toc5" tabindex="0">PowerShell画面の起動方法</a></li><li><a href="#toc6" tabindex="0">基本的なコマンドと概念の紹介</a></li><li><a href="#toc7" tabindex="0">詳細なガイド</a></li></ol></li><li><a href="#toc8" tabindex="0">ステップ2: ToDoリストの基本機能の実装</a><ol><li><a href="#toc9" tabindex="0">タスクの追加、表示、削除機能の作成</a></li><li><a href="#toc10" tabindex="0">変数、配列、条件文の活用方法</a></li><li><a href="#toc11" tabindex="0">詳細なガイド</a></li></ol></li><li><a href="#toc12" tabindex="0">ステップ3: ToDoリストの改善</a><ol><li><a href="#toc13" tabindex="0">データの永続性、移植性、エラーハンドリングの導入</a></li><li><a href="#toc14" tabindex="0">詳細なガイド</a></li></ol></li><li><a href="#toc15" tabindex="0">最終的なToDoリスト</a><ol><li><a href="#toc16" tabindex="0">実際の動作</a></li><li><a href="#toc17" tabindex="0">ソースコード</a></li></ol></li><li><a href="#toc18" tabindex="0">まとめ</a><ol><li><a href="#toc19" tabindex="0">PowerShellを用いたToDoリスト作成の重要性とその効果</a></li><li><a href="#toc20" tabindex="0">今後の学びの方向性</a></li></ol></li><li><a href="#toc21" tabindex="0">次のステップへ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに: 本記事の目的と内容</span></h2>



<p><strong>PowerShellは、多くのWindowsユーザーがすでに手元に持っている強力なツールです。</strong>しかし、その真の力を知る人はまだ少ないかもしれません。この記事では、PowerShellを活用して、実際に役立つToDoリストを作成する手順を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc2">なぜToDoリストなのか?</span></h3>



<p>日常のタスク管理は、プログラミングの学び初めにおいて、実用的でわかりやすい題材となります。<span class="marker-under"><strong>PowerShellを用いてToDoリストを作成することで、プログラミングの基本的な概念を実際に手を動かしながら学ぶことができます。</strong></span></p>



<h3 class="wp-block-heading"><span id="toc3">この記事で得られるもの</span></h3>



<ol class="has-ex-a-background-color has-background wp-block-list">
<li>PowerShellの基本的な操作とコマンドの紹介</li>



<li>実際に動作するToDoリストの作成手順</li>



<li>プログラミングの楽しさと実用性の体験</li>
</ol>



<p>PowerShellの基本から始め、ToDoリストの作成を通じて、プログラミングの魅力を感じていただければ幸いです。</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box">
<p>ここで共有しているコードは学習を支援するためのものです。自分の環境で試す際は、内容をしっかりと理解し、影響の出ない安全な環境で行ってください。具体的な詳細は当サイトの<a href="https://nekomichi-coder.com/disclaimer/">免責事項</a>をお読みいただけますと幸いです。</p>
</div>



<h2 class="wp-block-heading"><span id="toc4">ステップ1: 基本概念の紹介</span></h2>



<p>PowerShellを活用するためには、まずその基本的なコマンドや概念を理解することが重要です。このセクションでは、PowerShellの基本的な操作方法と、主要なコマンドや概念について紹介します。</p>



<h3 class="wp-block-heading"><span id="toc5">PowerShell画面の起動方法</span></h3>



<p>Windowsのスタートメニューから「PowerShell」と入力し、表示される「Windows PowerShell」をクリックすることで、PowerShell画面を起動することができます。</p>



<h3 class="wp-block-heading"><span id="toc6">基本的なコマンドと概念の紹介</span></h3>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>Cmdlet</strong>: PowerShellの基本的なコマンドはCmdletと呼ばれ、Verb-Nounの形式で記述されます。例えば、<code>Write-Host</code>などがあります。</li>



<li><strong>変数</strong>: <code>$</code>記号を使用して変数を宣言・使用することができます。例: <code>$myVariable = "Hello, PowerShell!"</code></li>
</ul>



<h3 class="wp-block-heading"><span id="toc7">詳細なガイド</span></h3>



<p>さらに詳しい情報や具体的な手順については、以下の記事をご参照ください。</p>



<ul class="has-watery-yellow-background-color has-background wp-block-list">
<li><a href="https://nekomichi-coder.com/make-a-todo-list-part-1/" title="PowerShellでToDoリストを作る - Part 1: PowerShellの起動と最初のスクリプトの実行">PowerShellでToDoリストを作る &#8211; Part 1: PowerShellの起動と最初のスクリプトの実行</a></li>
</ul>



<h2 class="wp-block-heading"><span id="toc8">ステップ2: ToDoリストの基本機能の実装</span></h2>



<p>ToDoリストの基本的な機能として、タスクの追加、表示、削除が考えられます。このセクションでは、これらの基本機能の実装方法と、それを実現するためのPowerShellの基本的な概念について解説します。</p>



<h3 class="wp-block-heading"><span id="toc9">タスクの追加、表示、削除機能の作成</span></h3>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>タスクの追加</strong>: <code>$tasks = @()</code>という配列を作成し、<code>$tasks += "新しいタスク"</code>のようにしてタスクを追加します。</li>



<li><strong>タスクの表示</strong>: <code>foreach ($task in $tasks) { Write-Output $task }</code>のようにして、配列内のすべてのタスクを表示します。</li>



<li><strong>タスクの削除</strong>: <code>$tasks = $tasks -ne "削除するタスク"</code>のようにして、特定のタスクを配列から削除します。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc10">変数、配列、条件文の活用方法</span></h3>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>変数</strong>: <code>$</code>記号を使用して変数を宣言・使用します。例: <code>$taskName = "新しいタスク"</code>。</li>



<li><strong>配列</strong>: 複数のデータをまとめて管理するためのデータ構造。例: <code>$tasks = @("タスク1", "タスク2")</code>。</li>



<li><strong>条件文</strong>: <code>if</code>, <code>else</code>, <code>elseif</code>を使用して、特定の条件下での処理を制御します。例: <code>if ($task -eq "特定のタスク") { Write-Output "タスクが見つかりました" }</code>。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc11">詳細なガイド</span></h3>



<p>基本機能の実装に関する詳しい手順やコード例については、PowerShellでToDoリストを作る &#8211; Part 2〜4をご参照ください。</p>



<ul class="has-watery-yellow-background-color has-background wp-block-list">
<li><a href="https://nekomichi-coder.com/make-a-todo-list-part-2/" title="PowerShellでToDoリストを作る - Part 2: タスクの追加機能と変数の使用">PowerShellでToDoリストを作る &#8211; Part 2: タスクの追加機能と変数の使用</a></li>



<li><a href="https://nekomichi-coder.com/make-a-todo-list-part-3/" title="PowerShellでToDoリストを作る – Part 3: タスクの表示機能とメニュー表示機能の実装">PowerShellでToDoリストを作る – Part 3: タスクの表示機能とメニュー表示機能の実装</a></li>



<li><a href="https://nekomichi-coder.com/make-a-todo-list-part-4/" title="PowerShellでToDoリストを作る – Part 4: タスクの削除機能の追加">PowerShellでToDoリストを作る – Part 4: タスクの削除機能の追加</a></li>
</ul>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="272" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg" alt="" class="wp-image-578" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-300x272.jpg 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1-768x695.jpg 768w, https://nekomichi-coder.com/wp-content/uploads/2023/08/150625_0-1.jpg 984w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 class="wp-block-heading"><span id="toc12">ステップ3: ToDoリストの改善</span></h2>



<p>基本的なToDoリストの機能を実装した後、さらに実用的で使いやすいツールにするための改善と拡張が考えられます。このセクションでは、ToDoリストの改善のための方法と、それを実現するためのPowerShellの応用的な概念について解説します。</p>



<h3 class="wp-block-heading"><span id="toc13">データの永続性、移植性、エラーハンドリングの導入</span></h3>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>データの永続性</strong>: <code>Export-Csv</code>や<code>Import-Csv</code>コマンドを使用して、タスクのデータをCSVファイルとして保存・読み込む方法を紹介します。</li>



<li><strong>移植性</strong>: 相対パスを使用して、ToDoリストのデータや設定を他の環境でも利用できるようにします。</li>



<li><strong>エラーハンドリング</strong>: <code>try-catch</code>構文を使用して、エラーが発生した際の処理を制御し、ユーザーに適切なメッセージを表示します。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc14">詳細なガイド</span></h3>



<p>ToDoリストの改善と拡張に関する詳しい手順やコード例については、PowerShellでToDoリストを改善する &#8211; シリーズをご参照ください。</p>



<ul class="has-watery-yellow-background-color has-background wp-block-list">
<li><a href="https://nekomichi-coder.com/improvement-a-todo-list-part-1/" title="PowerShellでToDoリストを改善する - Part 1: データ永続性とファイル操作">PowerShellでToDoリストを改善する &#8211; Part 1: データ永続性とファイル操作</a></li>



<li><a href="https://nekomichi-coder.com/improvement-a-todo-list-part-2/" title="PowerShellでToDoリストを改善する - Part 2: 相対パスを利用した移植性の向上">PowerShellでToDoリストを改善する &#8211; Part 2: 相対パスを利用した移植性の向上</a></li>



<li><a href="https://nekomichi-coder.com/improvement-a-todo-list-part-3/" title="PowerShellでToDoリストを改善する - Part 3: エラーハンドリングの導入">PowerShellでToDoリストを改善する &#8211; Part 3: エラーハンドリングの導入</a></li>
</ul>



<h2 class="wp-block-heading"><span id="toc15">最終的なToDoリスト</span></h2>



<p>これらの学習を通して、以下のプログラムを作成できるようになります。</p>



<h3 class="wp-block-heading"><span id="toc16">実際の動作</span></h3>



<p>最終的なToDoリストの動作イメージを以下に示します。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-61.png" alt="" class="wp-image-442" style="aspect-ratio:713/431" width="713" height="431" srcset="https://nekomichi-coder.com/wp-content/uploads/2023/08/image-61.png 885w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-61-300x181.png 300w, https://nekomichi-coder.com/wp-content/uploads/2023/08/image-61-768x464.png 768w" sizes="(max-width: 713px) 100vw, 713px" /></figure>



<h3 class="wp-block-heading"><span id="toc17">ソースコード</span></h3>



<p>以下に、完成版のToDoリストのソースコードを示します。各部分の説明も併せて記載しています。</p>



<p><strong>ToDoList.bat</strong></p>



<p>このバッチファイルは、PowerShellスクリプトを実行するためのものです。</p>



<pre class="wp-block-code"><code>@echo off
powershell.exe -ExecutionPolicy RemoteSigned "%~dp0bin\ToDoList.ps1"

pause
</code></pre>



<p><strong>ToDoList.ps1</strong></p>



<p>このPowerShellスクリプトは、ToDoリストの主要な機能を実装しています。</p>



<pre class="wp-block-code"><code>Try {
    
    # 共通のパスの設定
    $commonPath = "$PSScriptRoot\.."
    
    # tasksファイル設定
    $tasksFile = "$commonPath\data\tasks.txt"
    
    # ログファイル設定
    $logFile = "$commonPath\log\log.txt"
    
    # タスクの配列を宣言
    $tasks = @()
    
    # ファイル存在チェック
    if (-not (Test-Path $tasksFile)) {
        #新規ファイル作成
        New-Item $tasksFile -ErrorAction Stop &gt;$null
    }
    
    # ファイル読み込み
    $tasks += Get-Content $tasksFile
    Write-Host "タスクがファイルから読み込まれました。"
    
    function AddTask {
        $task = Read-Host "追加したいタスクを入力してください"
        #タスク名が空、または、100文字以上
        if (-not $task -or $task.Length -gt 100) {
            Write-Host "タスク名が不正です。タスク名を入力してください。"
            #処理を抜ける
            return
        }
        $script:tasks += $task
        Write-Host "$task がToDoリストに追加されました。"
    }
    
    # タスクの表示機能
    function ShowTasks {
        Write-Host "現在のタスク一覧:"
        for ($i=0; $i -lt $script:tasks.Length; $i++) {
            Write-Host ("&#91;" + ($i + 1) + "] " + $script:tasks&#91;$i])
        }
    }
    
    # タスクの削除機能
    function RemoveTask {
        # 現在のタスク一覧を表示
        ShowTasks
    
        # ユーザーに削除したいタスクの番号を入力させる
        $index = Read-Host "削除したいタスクの番号を入力してください"
    
        # 入力された番号が有効な範囲内にあるかを確認
        if ($index -ge 1 -and $index -le $script:tasks.Length) {
            # 選択された番号のタスクを取得
            $removedTask = $script:tasks&#91;$index-1]
    
            # タスクが1つだけの場合、タスクの配列を空にする
            if ($script:tasks.Length -eq 1) {
                $script:tasks = @()
            } 
            # 最初のタスクを削除する場合
            elseif ($index -eq 1) {
                $script:tasks = $script:tasks&#91;1..($script:tasks.Length-1)]
            } 
            # 最後のタスクを削除する場合
            elseif ($index -eq $script:tasks.Length) {
                $script:tasks = $script:tasks&#91;0..($index-2)]
            } 
            # 最初や最後以外のタスクを削除する場合
            else {
                $script:tasks = $script:tasks&#91;0..($index-2)] + $script:tasks&#91;$index..($script:tasks.Length-1)]
            }
    
            # 削除されたタスクの情報を表示
            Write-Host "$removedTask がToDoリストから削除されました。"
        } else {
            # 無効な番号が入力された場合のメッセージを表示
            Write-Host "無効な番号です。再度選択してください。"
        }
    }
    
    # タスクの保存機能
    function SaveTasks {
        $script:tasks | Out-File $tasksFile
        Write-Host "タスクがファイルに保存されました。"
    }
    
    # メニュー表示
    do {
        $choice = Read-Host "操作を選択してください (1: タスク追加, 2: タスク表示, 3: タスク削除, 4: タスク保存, 5: 終了)"
        switch ($choice) {
            '1' { AddTask }
            '2' { ShowTasks }
            '3' { RemoveTask }
            '4' { SaveTasks }
            '5' { Write-Host "プログラムを終了します。"; break }
            default { Write-Host "無効な選択です。再度選択してください。" }
        }
    } while ($choice -ne '5')
}Catch{

    #エラーメッセージ出力
    Write-Host "予期せぬエラーが発生しました: $($_.Exception.Message)"
    
    #ログファイル出力
    echo "予期せぬエラーが発生しました: $($_.Exception.Message)" | Out-File -Append $logFile
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc18">まとめ</span></h2>



<p>PowerShellを用いてToDoリストを作成することで、プログラミングの基本的な概念や技術を実際に手を動かしながら学んでいきましょう。この経験は、プログラミングの学びの初歩として非常に価値があります。</p>



<h3 class="wp-block-heading"><span id="toc19">PowerShellを用いたToDoリスト作成の重要性とその効果</span></h3>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>実践的な学び</strong>: 実際の問題を解決することで、理論だけでなく実践的なスキルを身につけることができます。</li>



<li><strong>自信の向上</strong>: 自分でプログラムを作成し、動作を確認することで、プログラミングに対する自信がつきます。</li>



<li><strong>基本の理解</strong>: ToDoリストの作成を通じて、プログラミングの基本的な概念や技術を深く理解することができます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc20">今後の学びの方向性</span></h3>



<ul class="has-ex-a-background-color has-background wp-block-list">
<li><strong>深化の方向</strong>: 既に学んだ内容をさらに深め、より高度なプログラムを作成する方向で学びを進めることができます。</li>



<li><strong>新しいテーマの学び</strong>: PowerShell以外のプログラミング言語や技術を学ぶことで、幅広い知識とスキルを身につけることができます。</li>



<li><strong>実践的なプロジェクト</strong>: 実際の業務や日常生活で役立つプログラムを作成することで、学びの成果を実感することができます。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc21">次のステップへ</span></h2>



<p>次のステップとして、「PowerShellでのデータ管理ツールの設計と実装の全手順」を推奨します。この記事では、PowerShellを用いてデータの管理や操作を行うツールの設計と実装方法を学ぶことができます。ToDoリストの作成を通じて得た知識を活かし、さらに高度なプログラムの作成に挑戦してみましょう。</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p>&#x1f50d; <strong>探求を続ける</strong></p>



<p>&#x1f539; <strong>PowerShellでのデータ管理ツールの設計と実装</strong><br>さらに高度なプログラムの作成に進みましょう。<br>&#x1f517; <a href="https://nekomichi-coder.com/all-steps-for-data-management-tools/" title="「PowerShellでのデータ管理ツールの設計と実装の全手順」を読む">「PowerShellでのデータ管理ツールの設計と実装の全手順」を読む</a></p>



<p>&#x1f539; <strong>全体のまとめとガイド</strong><br>サイト全体の内容や、他の関連記事をチェックして、学びをさらに深めましょう。<br>&#x1f517; <a href="https://nekomichi-coder.com/overview/" title="サイト全体のガイドを見る">「PowerShellを使ったプログラム作成とキャリア開発ガイド」を見る</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://nekomichi-coder.com/all-the-steps-to-create-a-to-do-list/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
