2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】コード内の忘れ物を自動追跡!Visual Studioのタスク一覧機能の活用術

Posted at

Visual Studio の強力な機能の中から、コード内の TODO や未完了タスクを効率的に管理できるタスク一覧機能の使い方をご紹介します。

公式の日本語ページでは「タスクリスト」と翻訳されていますが、同じウインドウのことです。

基本的な使い方

コード上でコメントでTODOなどの特定の文言から始まるコメントを追加すると、タスクとして認識されてタスク一覧内に表示されるようになります。

image-15.png

個人で備忘のために使用したり、チーム開発のシーンでも「純粋な実装もれ」なのか「理由があって未実装のままなのか」などの意図を効率的にコメントに込めることが可能です。

初期から使用できるトークン

デフォルトでは以下の4つのトークンが使用可能です。

トークン 優先度 説明
TODO 実装予定の処理
HACK 問題がある可能性のあるコード、バグ回避のため仕方なくした実装など
UNDONE 未完了の処理
UnresolvedMergeConflict 未解決の Git 競合

優先度とは

タスク一覧に表示する際に優先度が「高」「低」のものは一番左の列にマークがつき、簡単に認識が可能になっているほか、ソートやフィルターも可能です。
優先度は後から変更することができます。

追加方法

ツール>オプション>環境>タスク一覧の順番で、登録されているトークンの一覧が表示され、追加・編集・削除が可能です。

使用できる言語

対象については公式ページに以下のように記載されています。

Visual Studio は、次の 3 つのコンポーネントで構成されるコメントを認識します。
・コメント マーカー ( //、 #、 <!--
・コメント トークンプレフィックス ( TODO、 hack、 MoveToHeader
・トークンの後に続くコメント テキスト

そのため、//#<!--でコメントを入れる文法の言語なら対象になります。事実、HTML ファイルに入れたコメントもしっかり認識されます。

JS や TS などは当然使用できることに加えて、HTML や WPF の XAML などのコメントでも認識してくれます。
さらに、App.config.yamlDockerfileなどの設定系のコメントもしっかり対象になっているため、実務で触ることが多いであろうファイルは大体使用できます。

考えられるユースケース

個人で使用する場合とチーム連携時でそれぞれ考える。
※個人:チーム開発中だけどソースプッシュ前などの状況も含む

個人で利用

  • 実装途中での「思考の退避」
  • 作業終了前に残タスクを簡単に判断できる

実装途中での「思考の退避」とは、実装中に「あっ、この実装だとあそこも直さなきゃいけないじゃん」みたいな気付きを得た時に、その場所に TODO コメントを記載すれば、あとから簡単に作業ができます。また何かの理由で中断している際に UNDONE コメントを入れておけば、スムーズに再開することができます。

2 つ目の作業終了前に残タスクを簡単に判断できるとは、上記で入れたコメントが残っているかを PR 前にセルフチェック可能ということです。

チーム開発での利用

  • チームで共通したコンテキストのコメントを入れることができる

チームで共通のコンテキストのコメントを入れることによって、意図が明確なコメントを入れることができます。
特にHACKなどの「意図があってこの実装をしています。」というコメントが明確だと、レビュー時や新メンバーのオンボーディング時に理解に必要な時間が抑えられます。

またドラフト PR 用にREVIEWというトークンを作成して、

public async Task<List<Order>> GetUserOrdersAsync(string userId)
{
    // REVIEW(01):このDBセレクトはこのクエリで大丈夫ですか?
    var orders = await _cosmosContainer
        .GetItemQueryIterator<Order>(
            new QueryDefinition("SELECT * FROM c WHERE c.userId = @userId")
                .WithParameter("@userId", userId))
        .ReadNextAsync();
    // REVIEW(02):上のReadNextAsync();は必要?

    return orders.ToList();
}

※メソッドの内容、質問の内容は適当です。

上のような形式で質問をコード内に記載する運用をしても面白いかもしれません。確認する方は質問と実際のコードを一緒に確認できて効率的です。ドラフト PR を出す側としても、実際の PR を出す際にREVIEWというトークンが消えていることをタスク一覧で確認すれば、余計なコメントをソースに入れる凡ミスをする心配もありません。

注意点

1. 一覧に残るタスクはなるべく少ない状態をキープする

放置された TODO が多すぎて見逃すようなことがあると本末転倒なので、なるべく少ない状態をキープするのが大事な印象です。
あるいはHACKのような情報を追記する系のトークンは残さざるを得ないことが多いため、優先度を分けてフィルターできるようにします。

2. チーム開発をする際にはちゃんと各トークンの意味は擦り合わせて使用する

各々が同じトークンを別の意味で使用すると意味がなくなるため注意が必要です。
しっかり擦り合わせましょう。あとは、あまりトークンは増やしすぎないことをお勧めします。
TODO以外は削除できるため、使用しないものは消しても大丈夫です。

さいごに

コード内に意図を込めたコメントを書くことができます。
さらに、そのコメントを一覧で見ることができます。

厳密に同じなわけではありませんが、VSCode でも以下の拡張機能を使用すれば、大体同じことが可能なようです。

この記事が皆様のコーディングライフの助けになれば幸いです。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?